Ejemplo n.º 1
0
    def __init__(self, dossier_source, prod2qual=None):
        """
        initialisation et importation des données

        :param dossier_source: Une instance de la classe dossier.DossierSource
        :param prod2qual: Une instance de la classe Prod2Qual si on souhaite éditer
                          des factures et annexes avec les codes d'articles de
                          qualification
        """
        self._donnees = {}
        self.verifie_coherence = 0
        try:
            for ligne in dossier_source.reader(self.nom_fichier):
                cle = ligne.pop(0)
                if cle not in self.cles_autorisees:
                    Outils.fatal(ErreurConsistance(),
                                 "Clé inconnue dans %s: %s" % (self.nom_fichier, cle))
                if cle != "texte_sap":
                    while ligne[-1] == "":
                        del ligne[-1]
                self._donnees[cle] = ligne
        except IOError as e:
            Outils.fatal(e, "impossible d'ouvrir le fichier : "+self.nom_fichier)
        if prod2qual and 'code_sap_qas' in self._donnees:
            self._donnees['code_sap'] = self._donnees['code_sap_qas']

        erreurs = ""
        for cle in self.cles_obligatoires:
            if cle not in self._donnees:
                erreurs += "\nClé manquante dans %s: %s" % (self.nom_fichier, cle)

        self._donnees['centre'][1], err = Outils.est_un_texte(self._donnees['centre'][1], "le centre")
        erreurs += err
        self._donnees['origine'][1], err = Outils.est_un_alphanumerique(self._donnees['origine'][1], "l'origine")
        erreurs += err
        self._donnees['code_int'][1], err = Outils.est_un_alphanumerique(self._donnees['code_int'][1], "le code INT")
        erreurs += err
        self._donnees['code_ext'][1], err = Outils.est_un_alphanumerique(self._donnees['code_ext'][1], "le code EXT")
        erreurs += err
        self._donnees['commerciale'][1], err = Outils.est_un_alphanumerique(self._donnees['commerciale'][1], "le com.")
        erreurs += err
        self._donnees['canal'][1], err = Outils.est_un_alphanumerique(self._donnees['canal'][1], "le canal")
        erreurs += err
        self._donnees['secteur'][1], err = Outils.est_un_alphanumerique(self._donnees['secteur'][1], "le secteur")
        erreurs += err
        self._donnees['devise'][1], err = Outils.est_un_alphanumerique(self._donnees['devise'][1], "la devise")
        erreurs += err
        self._donnees['financier'][1], err = Outils.est_un_alphanumerique(self._donnees['financier'][1], "le financier")
        erreurs += err
        self._donnees['fonds'][1], err = Outils.est_un_alphanumerique(self._donnees['fonds'][1], "le fonds")
        erreurs += err
        self._donnees['entete'][1], err = Outils.est_un_texte(self._donnees['entete'][1], "l'entête", vide=True)
        erreurs += err
        self._donnees['poste_reservation'][1], err = Outils.est_un_entier(self._donnees['poste_reservation'][1],
                                                                          "le poste réservation", min=1, max=9)
        erreurs += err
        self._donnees['lien'][1], err = Outils.est_un_chemin(self._donnees['lien'][1], "le lien")
        erreurs += err
        self._donnees['chemin'][1], err = Outils.est_un_chemin(self._donnees['chemin'][1], "le chemin")
        erreurs += err
        self._donnees['chemin_propre'][1], err = Outils.est_un_chemin(self._donnees['chemin_propre'][1],
                                                                      "le chemin propre")
        erreurs += err
        self._donnees['chemin_filigrane'][1], err = Outils.est_un_chemin(self._donnees['chemin_filigrane'][1],
                                                                         "le chemin filigrane")
        erreurs += err
        for intitule in self._donnees['intitule_n'][1:]:
            intitule, err = Outils.est_un_texte(intitule, "l'intitulé N")
            erreurs += err
        for code_s in self._donnees['code_sap'][1:]:
            code_s, err = Outils.est_un_entier(code_s, "le code sap", min=1)
            erreurs += err
        for code_sq in self._donnees['code_sap_qas'][1:]:
            code_sq, err = Outils.est_un_entier(code_sq, "le code sap qas", min=1)
            erreurs += err
        for quantite in self._donnees['quantite'][1:]:
            quantite, err = Outils.est_un_nombre(quantite, "la quantité", arrondi=3, min=0)
            erreurs += err
        for unite in self._donnees['unite'][1:]:
            unite, err = Outils.est_un_texte(unite, "l'unité")
            erreurs += err
        for type_prix in self._donnees['type_prix'][1:]:
            type_prix, err = Outils.est_un_alphanumerique(type_prix, "le type de prix")
            erreurs += err
        for type_rabais in self._donnees['type_rabais'][1:]:
            type_rabais, err = Outils.est_un_alphanumerique(type_rabais, "le type de rabais")
            erreurs += err
        for texte_sap in self._donnees['texte_sap'][1:]:
            texte_sap, err = Outils.est_un_texte(texte_sap, "le texte sap", vide=True)
            erreurs += err
        for intitule_long in self._donnees['intitule_long'][1:]:
            intitule_long, err = Outils.est_un_texte(intitule_long, "l'intitulé long")
            erreurs += err
        for intitule_court in self._donnees['intitule_court'][1:]:
            intitule_court, err = Outils.est_un_texte(intitule_court, "l'intitulé court")
            erreurs += err
        for modes in self._donnees['modes'][1:]:
            modes, err = Outils.est_un_alphanumerique(modes, "le mode d'envoi", vide=True)
            erreurs += err
        self._donnees['min_fact_rese'][1], err = Outils.est_un_nombre(
            self._donnees['min_fact_rese'][1], "le montant minimum pour des frais de facturation", arrondi=2, min=0)
        erreurs += err

        codes_n = []
        for nn in self._donnees['code_n'][1:]:
            nn, err = Outils.est_un_alphanumerique(nn, "le code N")
            erreurs += err
            if nn not in codes_n:
                codes_n.append(nn)
            else:
                erreurs += "le code N '" + nn + "' n'est pas unique\n"
        codes_d = []
        for dd in self._donnees['code_d'][1:]:
            dd, err = Outils.est_un_alphanumerique(dd, "le code D")
            erreurs += err
            if dd not in codes_d:
                codes_d.append(dd)
            else:
                erreurs += "le code D '" + dd + "' n'est pas unique\n"

        len_ok = True
        if len(self._donnees['code_n']) != len(self._donnees['intitule_n']) or \
                len(self._donnees['code_n']) != len(self._donnees['code_ref_fact']) or \
                len(self._donnees['code_n']) != len(self._donnees['avantage_HC']) or \
                len(self._donnees['code_n']) != len(self._donnees['subsides']) or \
                len(self._donnees['code_n']) != len(self._donnees['rabais_excep']) or \
                len(self._donnees['code_n']) != len(self._donnees['filtrer_article_nul']):
            len_ok = False
            erreurs += "le nombre de colonees doit être le même pour le code N, l'intitulé N, " \
                       "le code référence du client, l'avantage HC, le mode subsides, le mode rabais exceptionnel et " \
                       "le filtre articles nuls\n"

        if len_ok:
            for i in range(1, len(self._donnees['code_n'])):
                if self._donnees['code_ref_fact'][i] != 'INT' and self._donnees['code_ref_fact'][i] != 'EXT':
                    erreurs += "le code référence client doit être INT ou EXT\n"
                if self._donnees['avantage_HC'][i] != 'BONUS' and self._donnees['avantage_HC'][i] != 'RABAIS':
                    erreurs += "l'avantage HC doit être BONUS ou RABAIS\n"
                if self._donnees['subsides'][i] != 'BONUS' and self._donnees['subsides'][i] != 'RABAIS':
                    erreurs += "le mode subsides doit être BONUS ou RABAIS\n"
                if self._donnees['rabais_excep'][i] != 'BONUS' and self._donnees['rabais_excep'][i] != 'RABAIS':
                    erreurs += "le mode rabais exceptionnel doit être BONUS ou RABAIS\n"
                if self._donnees['filtrer_article_nul'][i] != 'OUI' and self._donnees['filtrer_article_nul'][i] != 'NON':
                    erreurs += "le filtre articles nuls doit être OUI ou NON\n"

        if len(self._donnees['code_d']) != len(self._donnees['code_sap']) or \
                len(self._donnees['code_d']) != len(self._donnees['quantite']) or \
                len(self._donnees['code_d']) != len(self._donnees['unite']) or \
                len(self._donnees['code_d']) != len(self._donnees['type_prix']) or \
                len(self._donnees['code_d']) != len(self._donnees['intitule_long']) or \
                len(self._donnees['code_d']) != len(self._donnees['intitule_court']) or \
                len(self._donnees['code_d']) != len(self._donnees['type_rabais']) or \
                len(self._donnees['code_d']) != len(self._donnees['texte_sap']):
            erreurs += "le nombre de colonnes doit être le même pour le code D, le code SAP, la quantité, l'unité, " \
                       "le type de prix, le type de rabais, le texte SAP, l'intitulé long et l'intitulé court\n"

        if len(self._donnees['centre'][1]) > 70:
            erreurs += "le string du paramètre centre est trop long"

        if erreurs != "":
            Outils.fatal(ErreurConsistance(), self.libelle + "\n" + erreurs)