def getNbr_soumissions(texte):

    position = -1  #Variable utilisée pour retoruver le nombre de soumissionnaires
    temp = ""  #Variable temporaire pour garder le caractère vérifié
    nbr_soumissions = ""  #Nombre de soumissions

    if texte:

        if texte.find(" soumissionnaires)") > -1:

            position = texte.find(
                " soumissionnaire"
            ) - 1  #Le mot soumissionaire est au singulier
            #pour les cas où il n'y en a qu'un seul
            temp = mid(texte, position, 1)

            while (mid(texte, position, 1).isnumeric()
                   and position >= 0):  #Même si la probabilité que position
                #devienne plus petit que 0 est presque inexistante,
                nbr_soumissions = temp + nbr_soumissions  #on fait une vérification à cet effet quand même.

                position = position - 1
                temp = mid(texte, position, 1)

            if not nbr_soumissions.isnumeric(
            ):  #On fait une double vérification afin de s'assurer
                nbr_soumissions = ""  #que le résultat est bien un nombre.
                #On réinitialiuse nbr_soumissions si ce n'est pas un nombre.

    return nbr_soumissions
def getNbr_soumissions(texte):
    
    position = -1                                                           #Variable utilisée pour retoruver le nombre de soumissionnaires
    temp = ""                                                               #Variable temporaire pour garder le caractère vérifié
    nbr_soumissions = ""                                                    #Nombre de soumissions
 
    if texte:

        if texte.find(" soumissionnaires)") > -1:

            position = texte.find(" soumissionnaire") - 1                   #Le mot soumissionaire est au singulier 
                                                                            #pour les cas où il n'y en a qu'un seul
            temp = mid(texte, position, 1)
            
            while (mid(texte, position, 1).isnumeric() and position >= 0):  #Même si la probabilité que position 
                                                                            #devienne plus petit que 0 est presque inexistante,
                nbr_soumissions = temp + nbr_soumissions                    #on fait une vérification à cet effet quand même.
                                                                            
                position = position - 1
                temp = mid(texte, position, 1)

            if not nbr_soumissions.isnumeric():                             #On fait une double vérification afin de s'assurer 
                nbr_soumissions = ""                                        #que le résultat est bien un nombre. 
                                                                            #On réinitialiuse nbr_soumissions si ce n'est pas un nombre.
               
    return nbr_soumissions
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 getNo_appel_offres(texte):

    no_appel_offre = ""
    
    if texte:
 
        if "offres public no " in texte:
            debut_no_appel_offre = texte.find("offres public no") + 15
            fin_no_appel_offre = texte.find(" (", debut_no_appel_offre)
            no_appel_offre = mid(texte, debut_no_appel_offre + 1, fin_no_appel_offre - debut_no_appel_offre)
            no_appel_offre = no_appel_offre.strip() 

        elif "offres public " in texte:
            debut_no_appel_offre = texte.find("offres public ") + 13
            fin_no_appel_offre = texte.find(" (", debut_no_appel_offre)
            no_appel_offre = mid(texte, debut_no_appel_offre + 1, fin_no_appel_offre - debut_no_appel_offre)
            no_appel_offre = no_appel_offre.strip()
            
    return no_appel_offre
def get_fournisseur(texte):

    reponse = ""
    position_debut_prefixe = -1
    position_debut_suffixe = -1

    prefixe_suffixe = [
        ["Accorder un contrat à ", " pour "],
        ["Accorder des contrats à ", " pour "],
        ["Accorder un contrat à ", " d'une durée de "],
        ["Accorder un contrat à l'entreprise ", " pour les travaux de "],
        ["Accorder un contrat à la firme ", " pour les travaux "],
        ["Accorder un contrat à les ", " pour l'achat "],
        ["Accorder un contrat de services professionnels à ", " pour "],
        ["Accorder à la firme ", " un contrat de "],
        ["Conclure avec la firme ", "une entente-cadre "],
        ["Conclure 2 ententes-cadres avec ", " pour des travaux "],
        [
            "Conclure une entente-cadre de services professionnels avec ",
            " pour la réalisation "
        ], ["Conclure avec ", " une entente-cadre "],
        [" de gré à gré à la ", "  pour l'achat "],
        ["Accorder un soutien financier de ", " pour réaliser  "]
    ]

    #1. Rechercher le fournisseuur à partir de la liste de référence
    with open(
            FICHIER_FOURNISSEUR,
            "r",
            encoding="utf-8",
    ) as f:
        reader = csv.reader(f, delimiter=";")

        for ligne in reader:

            temp_fournisseur = ligne[0] + " "
            temp_fournisseur = temp_fournisseur.strip()

            if temp_fournisseur in texte:
                reponse = temp_fournisseur

    #2. Le fournisseur n'a pas été trouvé dans la liste de référence
    #   on fait alors une recherche avec les termes clés
    #   se trouvant avant et après le nom du fournisseur
    if not reponse:

        for i in prefixe_suffixe:

            position_debut_prefixe = texte.find(i[0])

            if position_debut_prefixe > -1:

                position_debut_suffixe = texte.find(
                    i[1], position_debut_prefixe + len(i[0]))

                if position_debut_suffixe > -1:

                    reponse = mid(
                        texte, position_debut_prefixe + len(i[0]),
                        position_debut_suffixe - position_debut_prefixe -
                        len(i[0]))

                    break

    #Enlever s'il y a une virgule après le nom
    #On ne fait pas un replace car il peut y avoir des virgules valides dans le nom du fournisseur
    if reponse:
        reponse = reponse.strip()  #Le strip() ne semble pas fonctionner
        if right(reponse, 1) == ",":
            reponse = left(reponse, len(reponse) - 1)
        if right(reponse, 2) == ", ":
            reponse = left(reponse, len(reponse) - 2)

    return reponse
def get_fournisseur(texte):

    reponse = ""
    position_debut_prefixe = -1
    position_debut_suffixe = -1
    
    prefixe_suffixe = [["Accorder un contrat à ", " pour "],
                       ["Accorder des contrat à ", " pour "],
                       ["Accorder un contrat à ", " d'une durée de "],
                       ["Accorder un contrat à l'entreprise ", " pour les travaux de "],
                       ["Accorder un contrat à la firme ", " pour les travaux "],
                       ["Accorder un contrat à les ", " pour l'achat "],
                       ["Accorder un contrat de services professionnels à ", " pour "],
                       ["Accorder à la firme ", " un contrat de "],
                       ["Conclure avec la firme ", "une entente-cadre "],
                       ["Conclure 2 ententes-cadres avec "," pour des travaux "],
                       ["Conclure une entente-cadre de services professionnels avec ", " pour la réalisation "],
                       [" Conclure avec ", " une entente-cadre "],
                       [" de gré à gré à la ", "  pour l'achat "],
                       ["Accorder un soutien financier de ", " pour réaliser  "]
                      ]

    #1. Rechercher le fournisseuur à partir de la liste de référence              
    with open(FICHIER_FOURNISSEUR, "r", encoding = "utf-8", ) as f:     
        reader = csv.reader(f, delimiter = ";")    
    
        for ligne in reader:
            
            temp_fournisseur = ligne[0] + " "
            temp_fournisseur = temp_fournisseur.strip()
            
            if temp_fournisseur in texte:
                reponse = temp_fournisseur
    
    #2. Le fournisseur n'a pas été trouvé dans la liste de référence
    #   on fait alors une recherche avec les termes clés 
    #   se trouvant avant et après le nom du fournisseur
    if not reponse:                                                     
                                                                                
        for i in prefixe_suffixe:

            position_debut_prefixe = texte.find(i[0])
            
            if position_debut_prefixe > -1:
                
                position_debut_suffixe = texte.find(i[1], position_debut_prefixe + len(i[0]))
                
                if position_debut_suffixe > -1:

                    reponse = mid(texte, position_debut_prefixe + len(i[0]), position_debut_suffixe - position_debut_prefixe - len(i[0]))

                    break

    #Enlever s'il y a une virgule après le nom
    #On ne fait pas un replace car il peut y avoir des virgules valides dans le nom du fournisseur
    if reponse:
        reponse = reponse.strip()       #Le strip() ne semble pas fonctionner
        if right(reponse, 1) == ",":
            reponse = left(reponse, len(reponse) - 1)
        if right(reponse, 2) == ", ":
            reponse = left(reponse, len(reponse) - 2)  

    return reponse