예제 #1
0
    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
예제 #2
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
예제 #3
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)
예제 #4
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 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
예제 #5
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
예제 #6
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)