def get_titre(instance, no_dossier, texte_contrat):

    reponse = ""

    if texte_contrat:

        reponse = epurer_ligne(texte_contrat)

        if reponse.startswith("20."):
            if "CE" in instance:
                position_debut = 7
            else:
                position_debut = 6
        else:
            position_debut = 0

        nbr_caracteres = reponse.find(no_dossier) - position_debut - 1

        #En cas d'erreur pour initialiser nbr_caracteres,
        #on le met égal à position_debut
        if nbr_caracteres <= 0 or nbr_caracteres >= len(texte_contrat):
            nbr_caracteres = 0

        reponse = mid(texte_contrat, position_debut, nbr_caracteres)
        reponse = epurer_ligne(reponse)

    return reponse
def get_titre(instance, no_dossier, texte_contrat):

    reponse = ""

    if texte_contrat:
    
        reponse = epurer_ligne(texte_contrat)
        
        if reponse.startswith("20."):
            if "CE" in instance:
                position_debut = 7
            else:
                position_debut = 6
        else:
            position_debut = 0
        
        nbr_caracteres = reponse.find(no_dossier) - position_debut - 1
        
        #En cas d'erreur pour initialiser nbr_caracteres,
        #on le met égal à position_debut
        if nbr_caracteres <= 0 or nbr_caracteres >= len(texte_contrat):
            nbr_caracteres = 0

        reponse = mid(texte_contrat, position_debut, nbr_caracteres)
        reponse = epurer_ligne(reponse)
        
    return reponse
def epurer_contrat(texte,
                   no_decision,
                   titre,
                   pour,
                   no_dossier):

    if texte:
    
        reponse = texte.strip()

        if no_decision:
            reponse = reponse.replace(no_decision,"")
     
        if titre:
            reponse = reponse.replace(titre,"")

        if pour:   
            reponse = reponse.replace(pour,"")
            
        if no_dossier:
            reponse = reponse.replace(no_dossier,"")
        
        reponse = epurer_ligne(reponse)
    
    return reponse
def odj2contrats(a_verifier):

    #Initialisation des variables

    instance = a_verifier[1]
    source = a_verifier[3]

    no_decision = ""
    pour = ""
    no_dossier = ""
    instance_reference = ""
    no_appel_offre = ""
    debut_no_appel_offre = ""
    fin_no_appel_offre = ""
    fournisseur = ""
    nbr_fournisseur = 0
    depense_totale = ""
    texte_contrat = ""

    #Indiquer le début du traitement
    afficher_statut_traitement("Début du traitement odj2contrats")

    #Passer au travers des fichiers dans REPERTOIRE_TXT
    for filename in os.listdir(REPERTOIRE_TXT):

        fichier_TXT = os.path.join(REPERTOIRE_TXT, filename)

        print("Traitement du fichier %s" % fichier_TXT)

        #Enlever le BOM au début du fichier
        strip_bom(fichier_TXT)

        #Ouverture du fichier pour les résultats
        # if est_fichier_vide("C:\\ContratsOuvertsMtl\\contrats_traites.csv"):
        # contrats_traites = open("C:\\ContratsOuvertsMtl\\contrats_traites.csv", "a", encoding="utf-8")
        # fcontrats_traites.writerow(["instance", "date_rencontre", "no_decision", "no_dossier", "instance_reference", "no_appel_offres", "nbr_soumissions", "pour", "texte_contrat", "fournisseur", "source", "date_traitement"])
        # contrats_traites.close()

        contrats_traites = open("C:\\ContratsOuvertsMtl\\contrats_traites.csv",
                                "w",
                                encoding="utf-8")
        fcontrats_traites = csv.writer(contrats_traites, delimiter=';')
        fcontrats_traites.writerow([
            "instance", "date_rencontre", "no_decision", "titre", "no_dossier",
            "instance_reference", "no_appel_offres", "nbr_soumissions", "pour",
            "texte_contrat", "fournisseur", "montant", "type_contrat",
            "huis_clos", "source", "date_traitement"
        ])

        #Passer au travers du fichier texte de l'ordre du jour
        with open(
                fichier_TXT,
                "r",
                encoding="utf-8",
        ) as f:

            for ligne in f:

                if isinstance(ligne, str):
                    ligne.encode('utf8')
                else:
                    unicode(ligne).encode('utf8')

                ligne.strip()

                if ligne:  #Ne pas traiter les lignes vides

                    ligne2 = epurer_ligne(ligne)
                    print(ligne2)
                    if not est_numero_de_page(
                            ligne2
                    ):  #Ne pas traiter les lignes qui donnes le numéro de page du PDF

                        #Début d'une décision
                        if est_no_decision(ligne2):

                            #C'est une nouvelle décision,
                            #écrire le dernier contrat dans le fichier contrats_traites.txt
                            #Dans le traitement, sur la première décision, il n'y a encore rien à écrire
                            if no_decision:

                                print("--------")
                                print(texte_contrat)
                                no_appel_offre = getNo_appel_offres(
                                    texte_contrat)
                                nbr_soumissions = getNbr_soumissions(
                                    texte_contrat)
                                fournisseur = get_fournisseur(texte_contrat)
                                nbr_fournisseur = get_nombre_fournisseurs(
                                    fournisseur, nbr_fournisseur)
                                montant = get_montant(texte_contrat)
                                type_contrat = get_type_contrat(texte_contrat)
                                huis_clos = get_huis_clos(texte_contrat)
                                titre = get_titre(instance, no_dossier,
                                                  texte_contrat)
                                texte_contrat = epurer_contrat(
                                    texte_contrat, no_decision, titre, pour,
                                    no_dossier)

                                #Écrire le nom des champs dans le fichier contrats_traites.csv
                                fcontrats_traites.writerow([
                                    instance, DATE_RENCONTRE, no_decision,
                                    titre, no_dossier, instance_reference,
                                    no_appel_offre, nbr_soumissions, pour,
                                    texte_contrat, fournisseur, montant,
                                    type_contrat, huis_clos, STATUT, source,
                                    DATE_TRAITEMENT
                                ])

                            #Réinitialiser les variables
                            no_decision = get_no_decision(
                                ligne2, instance)  #Nouveau numéro de décision
                            titre = ""
                            pour = ""  #Initaliser le pour
                            no_dossier = ""  #Initaliser le numéro de dossier
                            instance_reference = ""  #Initialiser l'instance référente du contrat
                            no_appel_offre = ""  #Initaliser le numéro d'appel d'offre
                            debut_no_appel_offre = ""
                            fin_no_appel_offre = ""
                            fournisseur = ""
                            montant = ""
                            type_contrat = "",
                            depense_totale = ""
                            texte_contrat = ""  #Initaliser le texte du contrat
                            huis_clos = ""

                        #L'instance référence du contrat
                        if est_instance_reference(ligne2):
                            instance_reference = set_instance_reference(ligne2)

                        #La variable 'pour' est l'entité pour qui le contrat est adopté
                        if est_instance_reference(ligne2):
                            pour = set_instance_reference(ligne2)

                        #Numéro de dossier
                        if not no_dossier:
                            if est_no_dossier(ligne2):
                                no_dossier = get_no_dossier(ligne2)

                        #Numéro de décision
                        if est_no_decision(ligne2):
                            no_decision = get_no_decision(ligne2, instance)
                            ligne2 = ligne2.replace(
                                no_decision, ""
                            )  #Dans certains cas, le texte du contrat début sur la ligne du numéro de décision
                            ligne2 = epurer_ligne(ligne2)

                        #Texte du contrat
                        if not texte_contrat:
                            texte_contrat = ligne2  #C'est le début du texte du contrat, évite d'avoir un espace au début
                        else:
                            if not est_instance_reference(ligne2):
                                if ligne2:
                                    texte_contrat = epurer_ligne(
                                        texte_contrat) + " " + ligne2

        #Écrire le dernier contrat
        no_appel_offre = getNo_appel_offres(texte_contrat)
        nbr_soumissions = getNbr_soumissions(texte_contrat)
        fournisseur = get_fournisseur(texte_contrat)
        montant = get_montant(texte_contrat)
        texte_contrat = epurer_contrat(texte_contrat, no_decision, titre, pour,
                                       no_dossier)
        titre = get_titre(instance, no_dossier, texte_contrat)
        fcontrats_traites.writerow([
            instance, DATE_RENCONTRE, no_decision, titre, no_dossier,
            instance_reference, no_appel_offre, nbr_soumissions, pour,
            texte_contrat, fournisseur, montant, type_contrat, huis_clos,
            STATUT, source, DATE_TRAITEMENT
        ])

    #Indiquer que le traitement est terminé
    afficher_statut_traitement("Traitement termimé odj2contrats")
def odj2contrats(a_verifier):

    #Initialisation des variables
    
    instance = a_verifier[1] 
    source = a_verifier[3]
    
    no_decision = ""
    pour = ""
    no_dossier = ""
    instance_reference = ""
    no_appel_offre = ""
    debut_no_appel_offre = ""
    fin_no_appel_offre = ""
    fournisseur = ""
    nbr_fournisseur = 0
    depense_totale = ""
    texte_contrat = ""

    #Indiquer le début du traitement
    afficher_statut_traitement("Début du traitement odj2contrats")
    
    #Passer au travers des fichiers dans REPERTOIRE_TXT
    for filename in os.listdir(REPERTOIRE_TXT):
    
        fichier_TXT = os.path.join(REPERTOIRE_TXT, filename)
        
        print("Traitement du fichier %s" % fichier_TXT)
    
        #Enlever le BOM au début du fichier
        strip_bom(fichier_TXT)

        #Ouverture du fichier pour les résultats
        # if est_fichier_vide("C:\\ContratsOuvertsMtl\\contrats_traites.csv"):
            # contrats_traites = open("C:\\ContratsOuvertsMtl\\contrats_traites.csv", "a", encoding="utf-8")      
            # fcontrats_traites.writerow(["instance", "date_rencontre", "no_decision", "no_dossier", "instance_reference", "no_appel_offres", "nbr_soumissions", "pour", "texte_contrat", "fournisseur", "source", "date_traitement"])
            # contrats_traites.close()
       
        contrats_traites = open("C:\\ContratsOuvertsMtl\\contrats_traites.csv", "w", encoding="utf-8") 
        fcontrats_traites = csv.writer(contrats_traites, delimiter = ';') 
        fcontrats_traites.writerow(["instance", "date_rencontre", "no_decision", "titre", 
                                    "no_dossier", "instance_reference", "no_appel_offres", 
                                    "nbr_soumissions", "pour", "texte_contrat", "fournisseur", 
                                    "montant", "type_contrat", "huis_clos", 
                                    "source", "date_traitement"])
       
        #Passer au travers du fichier texte de l'ordre du jour
        with open(fichier_TXT, "r", encoding = "utf-8", ) as f:

            for ligne in f:

                if isinstance(ligne, str):
                    ligne.encode('utf8')
                else:
                    unicode(ligne).encode('utf8')
                        
                ligne.strip()

                if ligne:                                                       #Ne pas traiter les lignes vides
                    
                    ligne2 = epurer_ligne(ligne)
                    print(ligne2)
                    if not est_numero_de_page(ligne2):                          #Ne pas traiter les lignes qui donnes le numéro de page du PDF
                    
                        #Début d'une décision
                        if est_no_decision(ligne2):

                            #C'est une nouvelle décision,
                            #écrire le dernier contrat dans le fichier contrats_traites.txt
                            #Dans le traitement, sur la première décision, il n'y a encore rien à écrire
                            if no_decision:  

                                print("--------")
                                print(texte_contrat)
                                no_appel_offre = getNo_appel_offres(texte_contrat)
                                nbr_soumissions = getNbr_soumissions(texte_contrat)
                                fournisseur = get_fournisseur(texte_contrat)
                                nbr_fournisseur = get_nombre_fournisseurs(fournisseur, nbr_fournisseur)
                                montant = get_montant(texte_contrat)
                                type_contrat = get_type_contrat(texte_contrat)
                                huis_clos = get_huis_clos(texte_contrat)
                                titre = get_titre(instance, no_dossier, texte_contrat)
                                texte_contrat = epurer_contrat(texte_contrat,
                                                               no_decision,
                                                               titre,
                                                               pour,
                                                               no_dossier)
                                
                              
                                #Écrire le nom des champs dans le fichier contrats_traites.csv
                                fcontrats_traites.writerow([instance, 
                                                            DATE_RENCONTRE, 
                                                            no_decision,
                                                            titre,
                                                            no_dossier, 
                                                            instance_reference, 
                                                            no_appel_offre, 
                                                            nbr_soumissions, 
                                                            pour, 
                                                            texte_contrat, 
                                                            fournisseur, 
                                                            montant,
                                                            type_contrat,
                                                            huis_clos,
                                                            STATUT,
                                                            source, 
                                                            DATE_TRAITEMENT])
                            
                            #Réinitialiser les variables
                            no_decision = get_no_decision(ligne2, instance)               #Nouveau numéro de décision
                            titre = ""
                            pour = ""                                           #Initaliser le pour
                            no_dossier = ""                                     #Initaliser le numéro de dossier
                            instance_reference = ""                             #Initialiser l'instance référente du contrat
                            no_appel_offre = ""                                 #Initaliser le numéro d'appel d'offre
                            debut_no_appel_offre = ""
                            fin_no_appel_offre = ""
                            fournisseur = ""
                            montant = ""
                            type_contrat = "",
                            depense_totale = ""
                            texte_contrat = ""                                  #Initaliser le texte du contrat
                            huis_clos = ""
                                
                        #L'instance référence du contrat
                        if est_instance_reference(ligne2):
                            instance_reference = set_instance_reference(ligne2)
                      
                        #La variable 'pour' est l'entité pour qui le contrat est adopté
                        if est_instance_reference(ligne2):                              
                            pour = set_instance_reference(ligne2)

                        #Numéro de dossier
                        if not no_dossier:
                            if est_no_dossier(ligne2):
                                no_dossier = get_no_dossier(ligne2)
                            
                        #Numéro de décision
                        if est_no_decision(ligne2):
                            no_decision = get_no_decision(ligne2, instance)
                            ligne2 = ligne2.replace(no_decision,"")         #Dans certains cas, le texte du contrat début sur la ligne du numéro de décision
                            ligne2 = epurer_ligne(ligne2)
                            
                        #Texte du contrat
                        if not texte_contrat:
                            texte_contrat = ligne2                          #C'est le début du texte du contrat, évite d'avoir un espace au début
                        else:    
                            if not est_instance_reference(ligne2):
                                if ligne2:
                                    texte_contrat = epurer_ligne(texte_contrat) + " " + ligne2
                                       
        #Écrire le dernier contrat
        no_appel_offre = getNo_appel_offres(texte_contrat)
        nbr_soumissions = getNbr_soumissions(texte_contrat)
        fournisseur = get_fournisseur(texte_contrat)
        montant = get_montant(texte_contrat)
        texte_contrat = epurer_contrat(texte_contrat,
                                       no_decision,
                                       titre,
                                       pour,
                                       no_dossier)
        titre = get_titre(instance, no_dossier, texte_contrat)
        fcontrats_traites.writerow([instance, 
                                    DATE_RENCONTRE, 
                                    no_decision, 
                                    titre,
                                    no_dossier, 
                                    instance_reference, 
                                    no_appel_offre, 
                                    nbr_soumissions, 
                                    pour, 
                                    texte_contrat, 
                                    fournisseur, 
                                    montant,
                                    type_contrat,
                                    huis_clos,
                                    STATUT,
                                    source, 
                                    DATE_TRAITEMENT])     

    #Indiquer que le traitement est terminé
    afficher_statut_traitement("Traitement termimé odj2contrats")