def est_coherent(self, comptes, users): """ vérifie que les données du fichier importé sont cohérentes, et efface les colonnes mois et année :param comptes: comptes importés :param users: users importés :return: 1 s'il y a une erreur, 0 sinon """ if self.verifie_date == 0: info = self.libelle + ". vous devez vérifier la date avant de vérifier la cohérence" Outils.affiche_message(info) return 1 if self.verifie_coherence == 1: print(self.libelle + ": cohérence déjà vérifiée") return 0 msg = "" ligne = 1 couples = [] donnees_dict = {} for donnee in self.donnees: if donnee['id_compte'] == "": msg += "le compte id de la ligne " + str(ligne) + " ne peut être vide\n" elif donnee['id_compte'] not in comptes.donnees: msg += "le compte id " + donnee['id_compte'] + " de la ligne " + str(ligne) + \ " n'est pas référencé\n" if donnee['id_user'] == "": msg += "le user id de la ligne " + str(ligne) + " ne peut être vide\n" elif donnee['id_user'] not in users.donnees: msg += "le user id " + donnee['id_user'] + " de la ligne " + str(ligne) + \ " n'est pas référencé\n" couple = [donnee['id_user'], donnee['id_compte']] if couple not in couples: couples.append(couple) else: msg += "Couple user id '" + donnee['id_user'] + "' et compte id '" + \ donnee['id_compte'] + "' de la ligne " + str(ligne) + " pas unique\n" if donnee['debut'] != 'NULL': donnee['debut'], info = Outils.est_une_date(donnee['debut'], "la date de début", ligne) msg += info if donnee['fin'] != 'NULL': donnee['fin'], info = Outils.est_une_date(donnee['fin'], "la date de fin", ligne) msg += info del donnee['annee'] del donnee['mois'] donnees_dict[donnee['id_user'] + donnee['id_compte']] = donnee ligne += 1 self.donnees = donnees_dict self.verifie_coherence = 1 if msg != "": msg = self.libelle + "\n" + msg Outils.affiche_message(msg) return 1 return 0
def est_coherent(self): """ vérifie que les données du fichier importé sont cohérentes :return: 1 s'il y a une erreur, 0 sinon """ if self.verifie_coherence == 1: print(self.libelle + ": cohérence déjà vérifiée") return 0 msg = "" ligne = 1 donnees_dict = {} types = [] del self.donnees[0] for donnee in self.donnees: donnee['type'], info = Outils.est_un_alphanumerique( donnee['type'], "le type subside", ligne) msg += info if info == "": if donnee['type'] not in types: types.append(donnee['type']) else: msg += "le type de la ligne " + str( ligne) + " n'est pas unique\n" donnee['intitule'], info = Outils.est_un_texte( donnee['intitule'], "l'intitulé", ligne) msg += info if donnee['debut'] != 'NULL': donnee['debut'], info = Outils.est_une_date( donnee['debut'], "la date de début", ligne) msg += info if donnee['fin'] != 'NULL': donnee['fin'], info = Outils.est_une_date( donnee['fin'], "la date de fin", ligne) msg += info if donnee['debut'] != 'NULL' and donnee['fin'] != 'NULL': if donnee['debut'] > donnee['fin']: msg += "la date de fin de la ligne " + str( ligne) + " doit être postérieure à la date de début" donnees_dict[donnee['type']] = donnee ligne += 1 self.donnees = donnees_dict self.verifie_coherence = 1 if msg != "": msg = self.libelle + "\n" + msg Outils.affiche_message(msg) return 1 return 0
def generer(self, trans_vals, paramtexte, dossier_destination, par_plate): """ génération du fichier des usages de labos à partir des transactions :param trans_vals: valeurs des transactions générées :param paramtexte: paramètres textuels :param dossier_destination: Une instance de la classe dossier.DossierDestination :param par_plate: tri des transactions par plateforme, par utilisateur, par client, par jour """ ii = 0 for id_plate in par_plate.keys(): par_user = par_plate[id_plate]['users'] for id_user in par_user.keys(): par_client = par_user[id_user] for code in par_client.keys(): par_jour = par_client[code] for jour in par_jour.keys(): key = par_jour[jour] trans = trans_vals[key] date, info = Outils.est_une_date(trans['transac-date'], "la date de transaction") if info != "": Outils.affiche_message(info) donnee = [] for cle in range(2, len(self.cles)): if self.cles[cle] == 'day': donnee.append(date.day) elif self.cles[cle] == 'week-nbr': donnee.append(date.isocalendar()[1]) else: donnee.append(trans[self.cles[cle]]) self.ajouter_valeur(donnee, ii) ii += 1 self.csv(dossier_destination, paramtexte)
def est_coherent(self, comptes, machines, users): """ vérifie que les données du fichier importé sont cohérentes, et efface les colonnes mois et année :param comptes: comptes importés :param machines: machines importées :param users: users importés :return: 1 s'il y a une erreur, 0 sinon """ if self.verifie_date == 0: info = self.libelle + ". vous devez vérifier la date avant de vérifier la cohérence" Outils.affiche_message(info) return 1 if self.verifie_coherence == 1: print(self.libelle + ": cohérence déjà vérifiée") return 0 msg = "" ligne = 1 donnees_list = [] for donnee in self.donnees: if donnee['id_compte'] == "": msg += "le compte id de la ligne " + str( ligne) + " ne peut être vide\n" elif comptes.contient_id(donnee['id_compte']) == 0: msg += "le compte id '" + donnee[ 'id_compte'] + "' de la ligne " + str( ligne) + " n'est pas référencé\n" elif donnee['id_compte'] not in self.comptes: self.comptes.append(donnee['id_compte']) if donnee['id_machine'] == "": msg += "le machine id de la ligne " + str( ligne) + " ne peut être vide\n" elif machines.contient_id(donnee['id_machine']) == 0: msg += "le machine id '" + donnee['id_machine'] + "' de la ligne " + str(ligne)\ + " n'est pas référencé\n" if donnee['id_user'] == "": msg += "le user id de la ligne " + str( ligne) + " ne peut être vide\n" elif users.contient_id(donnee['id_user']) == 0: msg += "le user id '" + donnee['id_user'] + "' de la ligne " + str(ligne) \ + " n'est pas référencé\n" if donnee['id_op'] == "": msg += "l'id opérateur de la ligne " + str( ligne) + " ne peut être vide\n" elif users.contient_id(donnee['id_op']) == 0: msg += "l'id opérateur '" + donnee['id_op'] + "' de la ligne " + str(ligne) \ + " n'est pas référencé\n" donnee['duree_machine_hp'], info = Outils.est_un_nombre( donnee['duree_machine_hp'], "la durée machine hp", ligne, 4, 0) msg += info donnee['duree_machine_hc'], info = Outils.est_un_nombre( donnee['duree_machine_hc'], "la durée machine hc", ligne, 4, 0) msg += info donnee['duree_operateur'], info = Outils.est_un_nombre( donnee['duree_operateur'], "la durée opérateur", ligne, 4, 0) msg += info donnee['date_login'], info = Outils.est_une_date( donnee['date_login'], "la date de login", ligne) msg += info donnee['remarque_op'], info = Outils.est_un_texte( donnee['remarque_op'], "la remarque opérateur", ligne, True) msg += info donnee['remarque_staff'], info = Outils.est_un_texte( donnee['remarque_staff'], "la remarque staff", ligne, True) msg += info del donnee['annee'] del donnee['mois'] donnees_list.append(donnee) ligne += 1 self.donnees = donnees_list self.verifie_coherence = 1 if msg != "": msg = self.libelle + "\n" + msg Outils.affiche_message(msg) return 1 return 0
def est_coherent(self, comptes, machines, users): """ vérifie que les données du fichier importé sont cohérentes, et efface les colonnes mois et année :param comptes: comptes importés :param machines: machines importées :param users: users importés :return: 1 s'il y a une erreur, 0 sinon """ if self.verifie_date == 0: info = self.libelle + ". vous devez vérifier la date avant de vérifier la cohérence" Outils.affiche_message(info) return 1 if self.verifie_coherence == 1: print(self.libelle + ": cohérence déjà vérifiée") return 0 msg = "" ligne = 1 donnees_list = [] for donnee in self.donnees: if donnee['id_compte'] == "": msg += "le id compte de la ligne " + str(ligne) + " ne peut être vide\n" elif comptes.contient_id(donnee['id_compte']) == 0: msg += "le id compte '" + donnee['id_compte'] + "' de la ligne " + str(ligne) + " n'est pas référencé\n" elif donnee['id_compte'] not in self.comptes: self.comptes.append(donnee['id_compte']) if donnee['id_machine'] == "": msg += "le machine id de la ligne " + str(ligne) + " ne peut être vide\n" elif machines.contient_id(donnee['id_machine']) == 0: msg += "le machine id '" + donnee['id_machine'] + "' de la ligne " + str(ligne) \ + " n'est pas référencé\n" if donnee['id_user'] == "": msg += "le user id de la ligne " + str(ligne) + " ne peut être vide\n" elif users.contient_id(donnee['id_user']) == 0: msg += "le user id '" + donnee['id_user'] + "' de la ligne " + str(ligne) \ + " n'est pas référencé\n" if donnee['type'] == "": msg += "HP/HC " + str(ligne) + " ne peut être vide\n" elif donnee['type'] != "HP" and donnee['type'] != "HC": msg += "HP/HC " + str(ligne) + " doit être égal à HP ou HC\n" donnee['penalite'], info = Outils.est_un_nombre(donnee['penalite'], "la pénalité", ligne, 2, 0) msg += info donnee['date_debut'], info = Outils.est_une_date(donnee['date_debut'], "la date de début", ligne) msg += info del donnee['annee'] del donnee['mois'] donnees_list.append(donnee) ligne += 1 self.donnees = donnees_list self.verifie_coherence = 1 if msg != "": msg = self.libelle + "\n" + msg Outils.affiche_message(msg) return 1 return 0
def generer(self, trans_vals, grants, plafonds, paramtexte, paramannexe, par_client, comptes, clients, subsides, generaux): """ génération des fichiers d'annexes subsides à partir des transactions :param trans_vals: valeurs des transactions générées :param grants: grants importés :param plafonds: plafonds importés :param paramtexte: paramètres textuels :param paramannexe: paramètres d'annexe :param par_client: tri des transactions par client, par compte, par code D :param comptes: comptes importés :param clients: clients importés :param subsides: subsides importés :param generaux: paramètres généraux """ for donnee in paramannexe.donnees: if donnee['nom'] == 'Annexe-détails': self.chemin = donnee['chemin'] self.dossier = donnee['dossier'] dossier_destination = DossierDestination(self.chemin) clients_comptes = {} for id_compte in comptes.donnees.keys(): compte = comptes.donnees[id_compte] if self.version > 0 and self.unique != compte['code_client']: continue type_s = compte['type_subside'] if type_s != "": if type_s in subsides.donnees.keys(): subside = subsides.donnees[type_s] if subside['debut'] != 'NULL': debut, info = Outils.est_une_date(subside['debut'], "la date de début") if info != "": Outils.affiche_message(info) else: debut = 'NULL' if subside['fin'] != 'NULL': fin, info = Outils.est_une_date(subside['fin'], "la date de fin") if info != "": Outils.affiche_message(info) else: fin = 'NULL' premier, dernier = calendar.monthrange(self.annee, self.mois) if debut == "NULL" or debut <= datetime(self.annee, self.mois, dernier): if fin == "NULL" or fin >= datetime(self.annee, self.mois, 1): code_client = compte['code_client'] if code_client not in clients_comptes: clients_comptes[code_client] = [] clients_comptes[code_client].append(id_compte) for code in clients_comptes.keys(): cc = clients_comptes[code] self.valeurs = {} ii = 0 client = clients.donnees[code] self.nom = self.prefixe + "_" + code + "_" + client['abrev_labo'] + ".csv" for id_compte in cc: compte = comptes.donnees[id_compte] type_s = compte['type_subside'] subside = subsides.donnees[type_s] for code_d in generaux.obtenir_code_d(): plaf = type_s + code_d if plaf in plafonds.donnees.keys(): plafond = plafonds.donnees[plaf] donnee = [client['code'], client['abrev_labo'], compte['id_compte'], compte['intitule'], compte['type_subside'], code_d, generaux.intitule_long_par_code_d(code_d), subside['intitule'], subside['debut'], subside['fin'], plafond['max_compte'], plafond['max_mois']] subs = 0 g_id = id_compte + code_d if g_id in grants.donnees.keys(): grant, info = Outils.est_un_nombre(grants.donnees[g_id]['montant'], "le montant de grant", min=0, arrondi=2) if info != "": Outils.affiche_message(info) else: grant = 0 if code in par_client and id_compte in par_client[code]['comptes']: par_code = par_client[code]['comptes'][id_compte] if code_d in par_code.keys(): tbtr = par_code[code_d] for indice in tbtr: val, info = Outils.est_un_nombre(trans_vals[indice]['subsid-CHF'], "le subside CHF", arrondi=2) subs += val reste = plafond['max_compte'] - grant - subs donnee += [round(grant, 2), round(subs, 2), round(reste, 2)] self.ajouter_valeur(donnee, ii) ii += 1 self.csv(dossier_destination, paramtexte)