Exemplo n.º 1
0
def calc_deplacements(nb_salariees):
    try:
        document = xlrd.open_workbook(p.FICHIER_ENTREES_MANUELLES)
    except FileNotFoundError:
        fonctionsMatrices.print_log_erreur(
            "Le fichier des entrées manuelles n'est pas trouvé à l'emplacement "
            + p.FICHIER_ENTREES_MANUELLES,
            inspect.stack()[0][3])
        sys.exit(
            "Le fichier des entrées manuelles n'est pas trouvé à l'emplacement "
            + p.FICHIER_ENTREES_MANUELLES)
    feuille = document.sheet_by_index(2)
    ligne = 12
    maximum = feuille.nrows
    #Valeurs par défaut
    dpt_perso = 5.53
    dpt_pro = 43.66
    while ligne < maximum:
        FE = feuille.cell_value(ligne, 13)
        if FE == "Deplacements quotidiens":
            dpt_perso = feuille.cell_value(ligne, 14)
        elif FE == "Deplacements pro":
            dpt_pro = feuille.cell_value(ligne, 14)
        ligne += 1

    deplacements = []
    for k in nb_salariees:
        if k[0][2] == "Support":
            emissions = k[1] * dpt_pro
        else:
            emissions = k[1] * dpt_perso
        deplacements.append([k[0][2], emissions])
    return deplacements
Exemplo n.º 2
0
def lire_couts_camion_aval():
    try:
        document = xlrd.open_workbook(p.FICHIER_ENTREES_MANUELLES)
    except FileNotFoundError:
        fonctionsMatrices.print_log_erreur(
            "Le fichier des entrées manuelles n'est pas trouvé à l'emplacement "
            + p.FICHIER_ENTREES_MANUELLES,
            inspect.stack()[0][3])
        sys.exit(
            "Le fichier des entrées manuelles n'est pas trouvé à l'emplacement "
            + p.FICHIER_ENTREES_MANUELLES)

    feuille_bdd = document.sheet_by_index(2)
    #En €/km selon le cout
    bdd_coutkm_E = []
    for i in range(47, 58):
        l = []
        if feuille_bdd.cell_value(i, 3) != "":
            for j in [3, 4, 5, 6]:
                l.append(feuille_bdd.cell_value(i, j))
        bdd_coutkm_E.append(l)
    #En €/km selon la distance
    bdd_coutkm_dist = []
    for i in range(60, 70):
        l = []
        if feuille_bdd.cell_value(i, 3) != "":
            for j in [3, 4, 5]:
                l.append(feuille_bdd.cell_value(i, j))
        bdd_coutkm_dist.append(l)
    return bdd_coutkm_E, bdd_coutkm_dist
Exemplo n.º 3
0
def lire_conversion_sacherie_GCO():
    try:
        document = xlrd.open_workbook(p.FICHIER_ENTREES_MANUELLES)
    except FileNotFoundError:
        fonctionsMatrices.print_log_erreur(
            "Le fichier des entrées manuelles n'est pas trouvé à l'emplacement "
            + p.FICHIER_ENTREES_MANUELLES,
            inspect.stack()[0][3])
        sys.exit(
            "Le fichier des entrées manuelles n'est pas trouvé à l'emplacement "
            + p.FICHIER_ENTREES_MANUELLES)

    feuille_bdd = document.sheet_by_index(0)
    nb = feuille_bdd.nrows
    p.CONVERSION_SACHERIE_GCO = []
    ligne = 12
    while ligne < nb:
        if feuille_bdd.cell_value(ligne, 29) != "":
            p.CONVERSION_SACHERIE_GCO.append([
                feuille_bdd.cell_value(ligne, 29),
                feuille_bdd.cell_value(ligne, 30),
                feuille_bdd.cell_value(ligne, 31)
            ])
        ligne += 1
    return None
Exemplo n.º 4
0
def lireFE_sacherie():
    try:
        document = xlrd.open_workbook(p.FICHIER_ENTREES_MANUELLES)
    except FileNotFoundError:
        fonctionsMatrices.print_log_erreur(
            "Le fichier des entrées manuelles n'est pas trouvé à l'emplacement "
            + p.FICHIER_ENTREES_MANUELLES,
            inspect.stack()[0][3])
        sys.exit(
            "Le fichier des entrées manuelles n'est pas trouvé à l'emplacement "
            + p.FICHIER_ENTREES_MANUELLES)
    feuille = document.sheet_by_index(0)
    liste_mat = ["pebd", "pet"]
    carac = ["vierge", "neuf", "recyclé", "recycle"]
    for i in range(12, 40):
        if feuille.cell_value(i, 13) != "":
            for l in liste_mat:
                if l in feuille.cell_value(i, 13).lower():
                    mat = l
                    break
            for c in carac:
                if c in feuille.cell_value(i, 13).lower():
                    car = c
        if mat == "pebd" and car in ["neuf", "vierge"]:
            p.FE_PEBD_vierge = feuille.cell_value(i, 14)
        elif mat == "pebd" and car in ["recyclé", "recycle"]:
            p.FE_PEBD_recy = feuille.cell_value(i, 14)
        elif mat == "pet" and car in ["neuf", "vierge"]:
            p.FE_PET_vierge = feuille.cell_value(i, 14)
        elif mat == "pet" and car in ["recyclé", "recycle"]:
            p.FE_PET_recy = feuille.cell_value(i, 14)

    return None
def sauveFret(sauveFret:list,chemin_ecriture:str, nom:str):
    #On enregistre ici l'onglet log fret qui sert à la calculatrice de produits
    
    #On copie la liste de fret sans les entêtes
    fret_FE = sauveFret[1:]
    
    #On essaye d'ouvrir le fichier
    try:
         log_fret = openpyxl.load_workbook( chemin_ecriture+nom)
    except FileNotFoundError:
         fonctionsMatrices.print_log_erreur("Le document résultat n'est pas trouvé à l'emplacement "+chemin_ecriture+nom, inspect.stack()[0][3])
         sys.exit("Le document résultat n'est pas trouvé à l'emplacement "+ chemin_ecriture+nom)
    
    log_fret = openpyxl.load_workbook( chemin_ecriture+nom)
    #On crée une nouvelle feuille
    feuilleFret = log_fret.create_sheet("log Fret par Matière Première",1)
    #On charge les styles précédemment enregistrés comme variables globales
    styleFond, styleTeteTab, styleVal, styleTableau, styleEntree, styleTitre = p.STYLES_EXCEL
       
    #On applique un style uniforme sur le fond de la feuille
    alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    for lin in range(1,300):
        for col in [x for x in alphabet]:
            case = col+str(lin)
            feuilleFret[case].style=styleFond
        for col in [x+y for x in alphabet for y in alphabet]:
            case = col+str(lin)
            feuilleFret[case].style=styleFond
Exemplo n.º 6
0
def lireConsoSacherie():
    try:
        document = xlrd.open_workbook(p.DIRECTION_FICHIER_SACHERIE)
    except FileNotFoundError:
        fonctionsMatrices.print_log_erreur(
            "Le fichier des consos sacherie n'est pas trouvé à l'emplacement "
            + p.DIRECTION_FICHIER_SACHERIE,
            inspect.stack()[0][3])
        sys.exit(
            "Le fichier des consos sacherie n'est pas trouvé à l'emplacement "
            + p.DIRECTION_FICHIER_SACHERIE)
    feuille_bdd = document.sheet_by_index(0)
    nbrows = feuille_bdd.nrows
    listeRefs = []
    for lin in range(1, nbrows):
        ref = feuille_bdd.cell_value(lin, 4)
        if ref not in listeRefs:
            listeRefs.append(ref)
    liste_depots = fonctionsMatrices.extraire_colonne_n(
        0, p.CP_SITES_FLORENTAISE)
    resultat = [[x, [[y, 0] for y in liste_depots]] for x in listeRefs]

    for i in range(len(resultat)):
        for lin in range(1, nbrows):
            if feuille_bdd.cell_value(lin, 4) == listeRefs[i]:
                depot = feuille_bdd.cell_value(lin, 0)
                for dep in resultat[i][1]:
                    if dep[0] == depot:
                        dep[1] += int(
                            feuille_bdd.cell_value(lin, 2)
                        )  #Apparemment il y des commandes de nombre pas entiers de sacs...

    return resultat
Exemplo n.º 7
0
def lire_FEtransport():
    try:
        document = xlrd.open_workbook(p.FICHIER_ENTREES_MANUELLES)
    except FileNotFoundError:
        fonctionsMatrices.print_log_erreur(
            "Le fichier des entrées manuelles n'est pas trouvé à l'emplacement "
            + p.FICHIER_ENTREES_MANUELLES,
            inspect.stack()[0][3])
        sys.exit(
            "Le fichier des entrées manuelles n'est pas trouvé à l'emplacement "
            + p.FICHIER_ENTREES_MANUELLES)

    feuille = document.sheet_by_index(2)
    type_camion = feuille.cell_value(7, 4)
    type_bateau = feuille.cell_value(8, 4)

    FE_transports = []

    for ligne in range(12, 31):
        if (feuille.cell_value(ligne, 3) !=
                ""):  #On ne prend pas les lignes vides
            FE = []
            for col in [2, 3, 4, 5]:
                FE.append(feuille.cell_value(ligne, col))
            FE_transports.append(FE)
    FE_route = fonctionsMatrices.recherche_elem(type_camion, FE_transports, 1,
                                                2)  #idem
    FE_bateau = fonctionsMatrices.recherche_elem(type_bateau, FE_transports, 1,
                                                 2)  #idem
    return FE_route, FE_bateau
Exemplo n.º 8
0
def lireDensitesPF():
    try:
        document = xlrd.open_workbook(p.FICHIER_ENTREES_MANUELLES)
    except FileNotFoundError:
        fonctionsMatrices.print_log_erreur(
            "Le fichier des entrées manuelles n'est pas trouvé à l'emplacement "
            + p.FICHIER_ENTREES_MANUELLES,
            inspect.stack()[0][3])
        sys.exit(
            "Le fichier des entrées manuelles n'est pas trouvé à l'emplacement "
            + p.FICHIER_ENTREES_MANUELLES)

    feuille = document.sheet_by_index(7)
    nbrows = feuille.nrows
    resultat = []
    ligne = 2
    while ligne < nbrows:

        if feuille.cell_value(ligne, 7) != "" and feuille.cell_value(ligne,
                                                                     8) != -1:
            l = []
            l.append(feuille.cell_value(ligne, 7))
            try:
                l.append(abs(float(feuille.cell_value(ligne, 8))))
            except ValueError:
                l.append(0.387)
            resultat.append(l)
        ligne += 1
    return resultat
Exemplo n.º 9
0
def get_cp_sites():
    ligne_debut = 12
    resultat = []

    try:
        document = xlrd.open_workbook(p.FICHIER_ENTREES_MANUELLES)
    except FileNotFoundError:
        fonctionsMatrices.print_log_erreur(
            "Le fichier des entrées manuelles n'est pas trouvé à l'emplacement "
            + p.FICHIER_ENTREES_MANUELLES,
            inspect.stack()[0][3])
        sys.exit(
            "Le fichier des entrées manuelles n'est pas trouvé à l'emplacement "
            + p.FICHIER_ENTREES_MANUELLES)

    feuille = document.sheet_by_index(0)
    i = ligne_debut
    while len(feuille.cell_value(i, 24)) > 1 and i < 30:
        if feuille.cell_value(i, 25) != "":
            a = [
                int(feuille.cell_value(i, 23)),
                feuille.cell_value(i, 24),
                int(feuille.cell_value(i, 25)),
                int(feuille.cell_value(i, 27))
            ]
            resultat.append(a)
            p.CP_FLORENTAISE.append(int(feuille.cell_value(i, 25)))
            i += 1

        else:
            break
    return resultat
Exemplo n.º 10
0
def gestionpb_volume_sac(nom: str):
    if nom == "TRUFFAUT POUZZOLANE 15L 72 SACS":
        return 15 * 72 / 1000, "m3"
    elif nom == "COPODECOR ECORCES DE PIN 10/25 60":
        return 60 / 1000, "m3"
    elif nom == "CERAMIQUE PPC GREEN GRADE":
        return 22.7, "kg"  #Au pif
    elif nom == "COPOCAO COQUES DE CACAO":
        return 120 / 1000, "m3"  #Au pif aussi
    elif nom == "Rajouter ici les noms et quantités manuellement":
        return 42, "unite"

    #On ne fait pas le cas où la chaine de charactères est nulle
    if nom != "":
        chiffres = ""
        unit = ""
        res = 0
        identifie = False
        i = 0
        while i < len(nom):
            while i < len(nom) and nom[i].isdigit(
            ):  #important de tester dans cet ordre
                chiffres += str(nom[i])
                i += 1
            if i >= len(nom):
                break
            if len(chiffres) != 0 and (nom[i] == "L" or nom[i] == "l"):
                identifie = True
                unit = "m3"
                res = int("".join(chiffres))
                res /= 1000  #Penser à convertir les L en m3 !
                break
            elif len(chiffres) != 0 and (
                    nom[i].lower() == "k" and
                (i + 1) < len(nom)) and nom[i + 1].lower() == "g":
                identifie = True
                unit = "kg"
                res = int("".join(chiffres))
                break
            #S'il y a un espace entre la qté et l'unité
            elif (nom[i].lower() == " " and
                  (i + 1) < len(nom)) and nom[i + 1].isalpha():
                #On passe au caractère suivant, ça passe pas par le "else" ni par le second "while" et tout rentre dans l'ordre !c
                i += 1
            else:
                chiffres = ""
                i += 1
        if identifie:
            return res, unit
        else:
            fonctionsMatrices.print_log_erreur(
                "Detection de la quantité par sac indéchiffrable pour: " +
                nom +
                ". A rajouter dans les exception de gestionIntrants.gestionpb_volume_sac() ",
                inspect.stack()[0][3])
            return 1, "kg"  #Par défaut, si on a vraiment rien pu trouver, on donne 1KG
    return 0, 'kg'
Exemplo n.º 11
0
def lireFE_matprem():
    debut = 10  #Ligne de début des tableaux T1 T2 et T3
    fin_T1 = 47  #ligne de fin du premier tableau (FE par familles)
    debut_T4 = 52  #debut et fin du tableau 4 (engrais)
    fin_T4 = 56

    try:
        document = xlrd.open_workbook(p.FICHIER_ENTREES_MANUELLES)
    except FileNotFoundError:
        fonctionsMatrices.print_log_erreur(
            "Le fichier des entrées manuelles n'est pas trouvé à l'emplacement "
            + p.FICHIER_ENTREES_MANUELLES,
            inspect.stack()[0][3])
        sys.exit(
            "Le fichier des entrées manuelles n'est pas trouvé à l'emplacement "
            + p.FICHIER_ENTREES_MANUELLES)

    feuille_MP = document.sheet_by_index(1)

    FE_familles = []
    MP_familles_N = []
    masse_vol_MP = []
    FE_engrais = []

    for i in range(debut - 1, fin_T1):
        FE_familles.append([
            feuille_MP.cell_value(i, 2),
            feuille_MP.cell_value(i, 3),
            feuille_MP.cell_value(i, 4)
        ])

    for i in range(debut - 1, feuille_MP.nrows):
        ligne = []
        for j in range(7, 14):
            ligne.append(feuille_MP.cell_value(i, j))
        MP_familles_N.append(ligne)

    for i in range(debut - 1, feuille_MP.nrows):
        if feuille_MP.cell_value(i, 16) != "":
            masse_vol_MP.append([
                feuille_MP.cell_value(i, 15),
                feuille_MP.cell_value(i, 16),
                feuille_MP.cell_value(i, 17)
            ])

    for i in range(debut_T4 - 1, fin_T4):
        if feuille_MP.cell_value(i, 3) != "":
            FE_engrais.append([
                feuille_MP.cell_value(i, 2),
                feuille_MP.cell_value(i, 3),
                feuille_MP.cell_value(i, 4)
            ])

    return FE_familles, MP_familles_N, masse_vol_MP, FE_engrais
Exemplo n.º 12
0
def lire_FE_tourbe_eol():
    try:
        document = xlrd.open_workbook(p.FICHIER_ENTREES_MANUELLES)
    except FileNotFoundError:
        fonctionsMatrices.print_log_erreur(
            "Le fichier des entrées manuelles n'est pas trouvé à l'emplacement "
            + p.FICHIER_ENTREES_MANUELLES,
            inspect.stack()[0][3])
        sys.exit(
            "Le fichier des entrées manuelles n'est pas trouvé à l'emplacement "
            + p.FICHIER_ENTREES_MANUELLES)
    feuille_MP = document.sheet_by_index(1)
    tourbe_blonde = feuille_MP.cell_value(9, 21)
    tourbe_brune = feuille_MP.cell_value(10, 21)
    tourbe_noire = feuille_MP.cell_value(11, 21)

    return [tourbe_blonde, tourbe_brune, tourbe_noire]
Exemplo n.º 13
0
def solve_tsp_dynamic(pts, liv):  #https://gist.github.com/mlalevic/6222750
    #calc all lengths
    all_distances = [[
        distance(pts[x][0], pts[x][1], pts[y][0], pts[y][1])
        for y in range(len(pts))
    ] for x in range(len(pts))]
    #initial value - just distance from 0 to every other point + keep the track of edges
    A = {(frozenset([0, idx + 1]), idx + 1): (dist, [0, idx + 1])
         for idx, dist in enumerate(all_distances[0][1:])}
    cnt = len(pts)
    for m in range(2, cnt):
        B = {}
        for S in [
                frozenset(C) | {0}
                for C in itertools.combinations(range(1, cnt), m)
        ]:
            for j in S - {0}:
                B[(S, j)] = min(
                    [(A[(S - {j}, k)][0] + all_distances[k][j],
                      A[(S - {j}, k)][1] + [j]) for k in S
                     if k != 0 and k != j]
                )  #this will use 0th index of tuple for ordering, the same as if key=itemgetter(0) used
        A = B
    try:
        res = min([(A[d][0] + all_distances[0][d[1]], A[d][1])
                   for d in iter(A)])
        return res[1]
    except ValueError:
        fonctionsMatrices.print_log_erreur(
            "Optimisation de la sous livraison n°" + str(int(liv[0])) +
            " impossible",
            inspect.stack()[0][3])
        i = 0
        plt.title("Problème pour trouver le chemin optimal de BL n°" +
                  str(int(liv[0])))
        for pt in pts[1:]:
            i += 1
            plt.scatter(pt[0],
                        pt[1],
                        s=50 * pt[2] / pts[0][2],
                        zorder=2,
                        c="r")
            plt.text(pt[0], pt[1], "  " + str(i))
        plt.scatter(pts[0][0], pts[0][1], s=50, zorder=3, c="g")
        plt.show()
        return False
Exemplo n.º 14
0
def lireExport():
    try:
        document = xlrd.open_workbook(p.FICHIER_ENTREES_MANUELLES)
    except FileNotFoundError:
        fonctionsMatrices.print_log_erreur(
            "Le fichier des entrées manuelles n'est pas trouvé à l'emplacement "
            + p.FICHIER_ENTREES_MANUELLES,
            inspect.stack()[0][3])
        sys.exit(
            "Le fichier des entrées manuelles n'est pas trouvé à l'emplacement "
            + p.FICHIER_ENTREES_MANUELLES)
    feuille_bdd = document.sheet_by_index(4)
    nbrows = feuille_bdd.nrows
    #TERRESTRE
    bdd_exp_terre = []
    for i in range(20, min(42, nbrows)):
        ligne = []
        if feuille_bdd.cell_value(i, 2) != "":
            for j in [1, 2, 3, 6, 7]:
                ligne.append(feuille_bdd.cell_value(i, j))
            bdd_exp_terre.append(ligne)
    #MARITIME
    bdd_exp_mari = []
    liaisons = []
    for i in range(3, 11):
        if feuille_bdd.cell_value(i, 14) != "":
            chaine = []
            for j in [14, 15, 16]:
                chaine.append(feuille_bdd.cell_value(i, j))
            liaisons.append(chaine)

    ports = []
    for i in range(2, 17):
        if feuille_bdd.cell_value(i, 2) != "":
            port = []
            for j in [1, 2, 3, 6, 7]:
                port.append(feuille_bdd.cell_value(i, j))
            ports.append(port)

    for chaine in liaisons:
        port_depart = ports[int(chaine[0] - 1)]
        port_arrivee = ports[int(chaine[1] - 1)]
        bdd_exp_mari.append([port_depart, port_arrivee, chaine[2]])
    return bdd_exp_terre, bdd_exp_mari
Exemplo n.º 15
0
def lire_conso_elec():
    try:
        document = xlrd.open_workbook(p.FICHIER_ENTREES_MANUELLES)
    except FileNotFoundError:
        fonctionsMatrices.print_log_erreur(
            "Le fichier des entrées manuelles n'est pas trouvé à l'emplacement "
            + p.FICHIER_ENTREES_MANUELLES,
            inspect.stack()[0][3])
        sys.exit(
            "Le fichier des entrées manuelles n'est pas trouvé à l'emplacement "
            + p.FICHIER_ENTREES_MANUELLES)

    feuille = document.sheet_by_index(0)
    conso_par_site = [[[x[0], x[2], x[1]], 0] for x in p.CP_SITES_FLORENTAISE]
    nmax = feuille.nrows
    i = 3
    while i < nmax and feuille.cell_value(i, 0) != "Conso Electrique (kWh)":
        i += 1
    colonne = 2
    ligne = i
    while colonne < 40:
        if feuille.cell_value(ligne, colonne) == p.ANNEE:
            break
        colonne += 1
    ligne += 1
    while ligne <= i + len(p.CP_SITES_FLORENTAISE):
        conso = feuille.cell_value(ligne, colonne)
        for x in conso_par_site:
            if x[0][0] == feuille.cell_value(ligne, 0):
                try:
                    x[1] = float(conso)
                except ValueError:
                    fonctionsMatrices.print_log_erreur(
                        "Consommation électrique erronée",
                        inspect.stack()[0][3])
                    x[1] = 0

                break
        ligne += 1
    total = 0
    for x in conso_par_site:
        total += x[1]
    return conso_par_site, total
Exemplo n.º 16
0
def lire_donnees_entreprise():
    try:
        document = xlrd.open_workbook(p.FICHIER_ENTREES_MANUELLES)
    except FileNotFoundError:
        fonctionsMatrices.print_log_erreur(
            "Le fichier des entrées manuelles n'est pas trouvé à l'emplacement "
            + p.FICHIER_ENTREES_MANUELLES,
            inspect.stack()[0][3])
        sys.exit(
            "Le fichier des entrées manuelles n'est pas trouvé à l'emplacement "
            + p.FICHIER_ENTREES_MANUELLES)

    feuille = document.sheet_by_index(0)
    employ_par_site = [[[x[0], x[2], x[1]], 0] for x in p.CP_SITES_FLORENTAISE]
    production_par_site = [[[x[0], x[2], x[1]], 0]
                           for x in p.CP_SITES_FLORENTAISE]
    ligne = 7
    colonne = 2
    while colonne < 22:
        if p.ANNEE == feuille.cell_value(ligne, colonne):
            break
        colonne += 1
    ligne += 1
    CA = feuille.cell_value(ligne, colonne)
    ligne = 12
    while ligne < 23:
        conso = feuille.cell_value(ligne, colonne)
        for x in employ_par_site:
            if x[0][0] == feuille.cell_value(ligne, 0):
                x[1] = conso
                break
        ligne += 1

    ligne = 24
    while ligne < 36:
        conso = feuille.cell_value(ligne, colonne)
        for x in production_par_site:
            if x[0][0] == feuille.cell_value(ligne, 0):
                x[1] = conso
                break
        ligne += 1

    return CA, employ_par_site, production_par_site
Exemplo n.º 17
0
def BC_intrants_par_site(resultat_usine_MP: list, MP_et_FE: list):
    BC_MP_site = [[[x[0], x[2], x[1]], 0] for x in p.CP_SITES_FLORENTAISE]

    resultat_complet = []
    for matprem in resultat_usine_MP[1:]:
        nom = matprem[0]

        fe = 1
        trouve = False
        for fact in MP_et_FE:
            el = ""
            for c in fact[0]:
                if c.isalpha():
                    el += c
            if nom.lower() in fact[0].lower() or fact[0].lower() in nom.lower(
            ):
                fe = fact[1]
                trouve = True
                break
        if not trouve:
            fonctionsMatrices.print_log_erreur("FE non trouvé pour: " + nom,
                                               inspect.stack()[0][3])

        for usine in matprem[1]:
            nom_usine = usine[0][1]
            tonnage = usine[1]
            emissions = tonnage * fe / 1000  #on convertit en tCO2e
            if emissions != 0:
                resultat_complet.append([
                    nom, nom_usine, tonnage, fe, "kgCO2e/t", emissions, "tCO2e"
                ])
            # print(nom + "  " +nom_usine+"  BC mp: "+ str(bc_mp_usine))
            for res in BC_MP_site:
                if tonnage != 0 and res[0][2] == nom_usine:
                    res[1] += emissions
                    # print("Bilan carbone: "+str(emissions) +"tCO2e ("+nom+")")
                    if "tourbe" in nom.lower():
                        p.COMPARAISON_TOURBE[1] += emissions
                        # print("Tourbe : "+str(tonnage*fe/1000)+" teCO2")
                    break

    return BC_MP_site, resultat_complet
Exemplo n.º 18
0
def lireFE_emballage():
    try:
        document = xlrd.open_workbook(p.FICHIER_ENTREES_MANUELLES)
    except FileNotFoundError:
        fonctionsMatrices.print_log_erreur(
            "Le fichier des entrées manuelles n'est pas trouvé à l'emplacement "
            + p.FICHIER_ENTREES_MANUELLES,
            inspect.stack()[0][3])
        sys.exit(
            "Le fichier des entrées manuelles n'est pas trouvé à l'emplacement "
            + p.FICHIER_ENTREES_MANUELLES)

    feuille_bdd = document.sheet_by_index(2)
    res = []
    for ligne in range(12, 40):
        if feuille_bdd.cell_value(ligne, 13) != "":
            res.append([
                feuille_bdd.cell_value(ligne, 13),
                feuille_bdd.cell_value(ligne, 14)
            ])
    return res
Exemplo n.º 19
0
def liregroupements():
    try:
        document = xlrd.open_workbook(p.DIRECTION_FICHIER_VENTES1)
    except FileNotFoundError:
        fonctionsMatrices.print_log_erreur(
            "Le fichier des ventes 1 n'est pas trouvé à l'emplacement " +
            p.DIRECTION_FICHIER_VENTES1,
            inspect.stack()[0][3])
        sys.exit("Le fichier des ventes 1 n'est pas trouvé à l'emplacement " +
                 p.DIRECTION_FICHIER_VENTES1)
    document = xlrd.open_workbook(p.DIRECTION_FICHIER_VENTES1)
    feuille = document.sheet_by_index(0)
    nbrows = feuille.nrows
    resultat = [["N° commande", "N° groupement"]]
    ligne = 1
    while ligne < nbrows:
        num_commande = feuille.cell_value(ligne, 10)
        num_gpt = feuille.cell_value(ligne, 0)
        resultat.append([num_commande, num_gpt])
        ligne += 1
    return resultat
Exemplo n.º 20
0
def lireImportTerrestre(fichier: str):
    try:
        document = xlrd.open_workbook(p.FICHIER_ENTREES_MANUELLES)
    except FileNotFoundError:
        fonctionsMatrices.print_log_erreur(
            "Le fichier des entrées manuelles n'est pas trouvé à l'emplacement "
            + p.FICHIER_ENTREES_MANUELLES,
            inspect.stack()[0][3])
        sys.exit(
            "Le fichier des entrées manuelles n'est pas trouvé à l'emplacement "
            + p.FICHIER_ENTREES_MANUELLES)

    feuille_bdd_ter = document.sheet_by_index(3)
    fournisseurs = []
    for lin in range(20, 64):
        if feuille_bdd_ter.cell_value(lin, 2) != "":
            ligne = []
            for col in [2, 3, 6, 7]:
                ligne.append(feuille_bdd_ter.cell_value(lin, col))
            fournisseurs.append(ligne)
    return fournisseurs
Exemplo n.º 21
0
def lireBDDgeoloc():
    try:
        document = xlrd.open_workbook(p.FICHIER_BDD_GEOLOC)
    except FileNotFoundError:
        fonctionsMatrices.print_log_erreur(
            "Le fichier de géolocalisation n'est pas trouvé à l'emplacement " +
            p.FICHIER_BDD_GEOLOC,
            inspect.stack()[0][3])
        sys.exit(
            "Le fichier de géolocalisation n'est pas trouvé à l'emplacement " +
            p.FICHIER_BDD_GEOLOC)

    feuille_bdd = document.sheet_by_index(0)
    nbrows = feuille_bdd.nrows
    result = []
    for i in range(1, nbrows):
        result.append([
            feuille_bdd.cell_value(i, 1),
            feuille_bdd.cell_value(i, 6),
            feuille_bdd.cell_value(i, 7)
        ])
    return result
Exemplo n.º 22
0
def corriger_noms_massesvol(masses_vol: list, MP_et_FE: list,
                            listeAchats: list):
    n = len(masses_vol)
    introuves = []
    compteur = 0

    ajouts = [x for x in MP_et_FE if len(x) == 3]
    to_add = []
    for x in ajouts:
        ajoute = False
        for mv in masses_vol:
            if x[2].lower() in mv[1].lower() or mv[1] in x[2].lower():
                compteur += 1
                ajoute = True
                to_add.append([n + compteur, x[0], mv[2]])
                break
        if not ajoute:
            introuves.append(x[0])

    for aj in to_add:
        masses_vol.append(aj)

    if len(introuves) == 1:
        pass
        fonctionsMatrices.print_log_erreur(
            "Une masse volumique est à ajouter manuellement:" + introuves[0],
            inspect.stack()[0][3])
    elif len(introuves) > 1:
        pass
        fonctionsMatrices.print_log_erreur(
            str(len(introuves)) +
            " masses volumiques sont à ajouter manuellement",
            inspect.stack()[0][3])
        print(introuves)
    fonctionsMatrices.print_log_info(
        "Ajout de " + str(len(masses_vol) - n) +
        " entrées dans les masses volumiques par assimilation",
        inspect.stack()[0][3])
    return masses_vol
Exemplo n.º 23
0
def lire_FE_fuel():
    try:
        document = xlrd.open_workbook(p.FICHIER_ENTREES_MANUELLES)
    except FileNotFoundError:
        fonctionsMatrices.print_log_erreur(
            "Le fichier des entrées manuelles n'est pas trouvé à l'emplacement "
            + p.FICHIER_ENTREES_MANUELLES,
            inspect.stack()[0][3])
        sys.exit(
            "Le fichier des entrées manuelles n'est pas trouvé à l'emplacement "
            + p.FICHIER_ENTREES_MANUELLES)

    feuille = document.sheet_by_index(2)
    nlignes = feuille.nrows
    type_mixe = feuille.cell_value(8, 9)
    ligne = 12
    while ligne < nlignes:
        if feuille.cell_value(ligne, 8) == type_mixe:
            FE = feuille.cell_value(ligne, 9)
            break
        ligne += 1
    return FE
Exemplo n.º 24
0
def get_cp_inter():
    try:
        document = xlrd.open_workbook(p.FICHIER_BDD_GEOLOC)
    except FileNotFoundError:
        fonctionsMatrices.print_log_erreur(
            "Le fichier de géolocalisation n'est pas trouvé à l'emplacement " +
            p.FICHIER_BDD_GEOLOC,
            inspect.stack()[0][3])
        sys.exit(
            "Le fichier de géolocalisation n'est pas trouvé à l'emplacement " +
            p.FICHIER_BDD_GEOLOC)

    feuille_bdd = document.sheet_by_index(0)
    ligne = 5
    col = 11
    res = []
    while ligne < 100:
        l = []
        if feuille_bdd.cell_value(ligne, col) != "":
            for c in [col, col + 1, col + 2]:
                l.append(feuille_bdd.cell_value(ligne, c))
            res.append(l)
        ligne += 1
    return res
Exemplo n.º 25
0
def ajouter_immobilisations():
    try:
        document = xlrd.open_workbook(p.FICHIER_ENTREES_MANUELLES)
    except FileNotFoundError:
        fonctionsMatrices.print_log_erreur(
            "Le fichier des entrées manuelles n'est pas trouvé à l'emplacement "
            + p.FICHIER_ENTREES_MANUELLES,
            inspect.stack()[0][3])
        sys.exit(
            "Le fichier des entrées manuelles n'est pas trouvé à l'emplacement "
            + p.FICHIER_ENTREES_MANUELLES)
    feuille = document.sheet_by_index(6)
    maximum = feuille.nrows

    immobilisations = []
    ligne = 7
    while ligne < maximum:
        if feuille.cell_value(ligne, 9) == "Total amorti (tCO2e)":
            usine = feuille.cell_value(ligne - 5, 0)
            ligne += 1
            amorti = feuille.cell_value(ligne, 9)
            immobilisations.append([usine, amorti])
        ligne += 1
    return immobilisations
def entetes_resultats_generaux(usines:list, nom_fichier:str):
    styleFond, styleTeteTab, styleVal, styleTableau, styleEntree, styleTitre = p.STYLES_EXCEL
    
    ligne_depart = 10
    try:
         document = openpyxl.load_workbook(p.CHEMIN_ECRITURE_RESULTATS+nom_fichier)
    except FileNotFoundError:
         fonctionsMatrices.print_log_erreur("Le document résultat n'est pas trouvé à l'emplacement "+p.CHEMIN_ECRITURE_RESULTATS+nom_fichier, inspect.stack()[0][3])
         sys.exit("Le document résultat n'est pas trouvé à l'emplacement "+ p.CHEMIN_ECRITURE_RESULTATS+nom_fichier)
         
    feuilleprinc = document.get_sheet_by_name(document.get_sheet_names()[0])
    feuilleprinc.column_dimensions['B'].width = 24
    feuilleprinc.column_dimensions['C'].width = 0
    feuilleprinc.column_dimensions['D'].width = 20
    feuilleprinc.column_dimensions['E'].width = 10
    
    FretAmont = ["MP bateau", "MP route"]
    FretAval = ["Ventes pro","Ventes Jardineries", "Interdepot"]
    Intrants = ["Matières Premières", "CO2 issu de la tourbe"]
    HorsEnergie = ["Protoxyde d'azote"]
    Energie = ["Electricité", "Fuel"]
    Emballages = ["PE neuf", "PE recyclé", "PVC", "Carton"]

    entetes = FretAmont+FretAval+Intrants+HorsEnergie+Energie+Emballages
    
    colonnes = ["Poste d'émission", "Site", "Empreinte carbone (tCO2e)","", "Emission par m3 (kgCO2e/m3)", ""]
    
    for i in range(len(colonnes)):
        feuilleprinc.cell(row = ligne_depart, column = i+2).value = colonnes[i]
        feuilleprinc.cell(row=ligne_depart, column=i+2).style = styleTeteTab
    i = 0
    for poste in entetes:
        for j in range(len(usines)):
            feuilleprinc["B"+str(i+ligne_depart+1)] = poste
            feuilleprinc["C"+str(i+ligne_depart+1)] = str(usines[j][0]) + " " + usines[j][1]
            i+=1
    alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    tableau = Table(displayName = "Resultats_principaux", ref = "B"+str(ligne_depart)+":"+alphabet[len(entetes)]+str(ligne_depart+i))  
    tableau.tableStyleInfo = styleTableau
    production_totale = sum([x[1]for x in p.PROD_PAR_SITE])
    feuilleprinc['C7'] = "Total:"
    feuilleprinc['D7'] = "=TEXT(SUM(D11:D"+str(199)+"), \"# ##0\")&+\" tCO2e\""
    feuilleprinc['E7'] = "et"
    feuilleprinc['F7'] = "=TEXT(1000*SUM(D11:D"+str(199)+")/"+str(production_totale)+", \"# ##0,0\")&+\" kgCO2e/m3\""
    
    # rouge = openpyxl.styles.colors.Color(rgb='00FF0000')
    for c in "CDEF":
        feuilleprinc[c+"7"].font = Font(size=18, bold=True)
    #Si on a la possibilité, on sauvegarde
    try:
        document.save(p.CHEMIN_ECRITURE_RESULTATS+nom_fichier)
    except PermissionError:     #Soit à cause du fichier réseau, soit parce que l'excel est ouvert ailleurs
        fonctionsMatrices.print_log_erreur("Permissions insuffisantes pour enregistrer le fichier résultat", inspect.stack()[0][3])
    except FileNotFoundError: #Emplacement inexistant
        fonctionsMatrices.print_log_erreur("Emplacement d'écriture introuvable: "+str(p.CHEMIN_ECRITURE_RESULTATS + nom_fichier), inspect.stack()[0][3])
Exemplo n.º 27
0
def associerMPetFE_fab(MP_familles_N: list, FE_engrais: list,
                       FE_familles: list):
    liste_engrais_eol = [[
        "Nom engrais", "Taux d'azote (%)", "FE épandage (tCO2e/t_azote)",
        "Masse (t)", "FE épandag (kgCO2e/t_engrais)"
    ]]
    MP_et_FE = [["Nom MP", "FE (kgCO2e/t)"]]
    for i in range(len(MP_familles_N)):
        nom_famille_BC = MP_familles_N[i][5]
        if "engrais" in nom_famille_BC.lower(
        ) or "ammonitrate" in nom_famille_BC.lower(
        ) or "urée" in nom_famille_BC.lower(
        ) or "uree" in nom_famille_BC.lower():
            tx_N = MP_familles_N[i][6]

            try:
                tx_N = float(tx_N)
            except ValueError:
                fonctionsMatrices.print_log_erreur(
                    "Taux d'azote invalide pour l'engrais " +
                    str(MP_familles_N[i][2]) +
                    ". On lui attribue un taux de 10%",
                    inspect.stack()[0][3])
                tx_N = 0.1
            try:
                FE = tx_N * fonctionsMatrices.recherche_elem(
                    nom_famille_BC, FE_engrais, 1, 2)
            except ValueError:
                fonctionsMatrices.print_log_erreur(
                    "La famille de l'engrais " + str(MP_familles_N[i][2]) +
                    " (" + str(nom_famille_BC) +
                    ") n'a pas été trouvé. On lui attribue un FE de 479.5 kgCO2/t (engrais moyen azoté à 10%)",
                    inspect.stack()[0][3])
                FE = 479.5
            liste_engrais_eol.append([
                MP_familles_N[i][2], tx_N, p.FE_EMPANDAGE_ENGRAIS * p.PRG_N2O,
                0, 1000 * tx_N * p.FE_EMPANDAGE_ENGRAIS * p.PRG_N2O
            ])
        else:
            try:
                FE = fonctionsMatrices.recherche_elem(nom_famille_BC,
                                                      FE_familles, 1, 2)
            except ValueError:
                fonctionsMatrices.print_log_erreur(
                    "L'élément " + str(nom_famille_BC) +
                    " n'a pas été trouvé. On lui attribue un FE de 0",
                    inspect.stack()[0][3])
                FE = 0
        MP_et_FE.append([MP_familles_N[i][2], FE])

    return MP_et_FE, liste_engrais_eol
def ecrire_messages_derreur(nom:str):
    #Tous les messages d'erreur
    try:
         log_erreurs = openpyxl.load_workbook( p.CHEMIN_ECRITURE_RESULTATS+nom)
    except FileNotFoundError:
         fonctionsMatrices.print_log_erreur("Le document résultat n'est pas trouvé à l'emplacement "+ p.CHEMIN_ECRITURE_RESULTATS+nom, inspect.stack()[0][3])
         sys.exit("Le document résultat n'est pas trouvé à l'emplacement "+  p.CHEMIN_ECRITURE_RESULTATS+nom)
    feuilleErreurs = log_erreurs.create_sheet("Erreurs et informations",-1)
    styleFond, styleTeteTab, styleVal, styleTableau, styleEntree, styleTitre = p.STYLES_EXCEL
    
    if len(p.MESSAGES_DERREUR)>1:
        for message in p.MESSAGES_DERREUR:
            feuilleErreurs.append(message)
    feuilleErreurs.column_dimensions['A'].width = 9
    feuilleErreurs.column_dimensions['B'].width = 160
    feuilleErreurs.column_dimensions['C'].width = 28
    
    
    #Les codes postaux erronés
    if p.EMBALLAGES_ET_SACHERIE or p.INTRANTS_ET_FRET or p.FRET_AVAL:
        if len(p.LISTE_CODES_POSTAUX_ERRONES)>1:
            feuilleErreursCP = log_erreurs.create_sheet("Codes postaux à corriger",-1)
            feuilleErreursCP.column_dimensions['A'].width = 14
            feuilleErreursCP.column_dimensions['B'].width = 14
            for cp in p.LISTE_CODES_POSTAUX_ERRONES:
                feuilleErreursCP.append(cp)
    
    
    #Les assimilations de matières premières
    if p.INTRANTS_ET_FRET:
        if len(p.LISTE_ASSIMILATIONS)>1:
            feuilleAssim = log_erreurs.create_sheet("Assimilations de MP",-1)
            feuilleAssim.column_dimensions['A'].width = 40
            feuilleAssim.column_dimensions['B'].width = 40
            for message in p.LISTE_ASSIMILATIONS:
                feuilleAssim.append(message)
    
   
     #Si on a la possibilité, on sauvegarde
    try:
        log_erreurs.save(p.CHEMIN_ECRITURE_RESULTATS+nom)
    except PermissionError:     #Soit à cause du fichier réseau, soit parce que l'excel est ouvert ailleurs
        fonctionsMatrices.print_log_erreur("Permissions insuffisantes pour enregistrer le fichier résultat", inspect.stack()[0][3])
    except FileNotFoundError: #Emplacement inexistant
        fonctionsMatrices.print_log_erreur("Emplacement d'écriture introuvable: "+str(p.CHEMIN_ECRITURE_RESULTATS + nom), inspect.stack()[0][3])
    return None
def sauveTrajetsAmont(trajets, nom):
    try:
         log_fret = openpyxl.load_workbook( p.CHEMIN_ECRITURE_RESULTATS+nom)
    except FileNotFoundError:
         fonctionsMatrices.print_log_erreur("Le document résultat n'est pas trouvé à l'emplacement "+p.CHEMIN_ECRITURE_RESULTATS+nom, inspect.stack()[0][3])
         sys.exit("Le document résultat n'est pas trouvé à l'emplacement "+ p.CHEMIN_ECRITURE_RESULTATS+nom)
    feuilleFretAmont = log_fret.create_sheet("Fret Brut MP",1)
    #On charge les styles précédemment enregistrés comme variables globales
    styleFond, styleTeteTab, styleVal, styleTableau, styleEntree, styleTitre = p.STYLES_EXCEL
    
    for x in trajets:
        feuilleFretAmont.append([x[0], x[1], x[2], x[5], x[6], x[7], x[8],x[9]])
        
     #Si on a la possibilité, on sauvegarde
    try:
        log_fret.save(p.CHEMIN_ECRITURE_RESULTATS+nom)
    except PermissionError:     #Soit à cause du fichier réseau, soit parce que l'excel est ouvert ailleurs
        fonctionsMatrices.print_log_erreur("Permissions insuffisantes pour enregistrer le fichier résultat", inspect.stack()[0][3])
    except FileNotFoundError: #Emplacement inexistant
        fonctionsMatrices.print_log_erreur("Emplacement d'écriture introuvable: "+str(p.CHEMIN_ECRITURE_RESULTATS + nom), inspect.stack()[0][3])
    
    return None
Exemplo n.º 30
0
def calc_fret_par_MP(listeAchatsFret: list, masse_vol_MP: list, FE_route,
                     FE_bateau, nom_fichier):

    trajets = [[
        "nomMP", "nomFournisseur", "Pays", "depart", "arrivee",
        "distance route (km)", "distance bateau (km)", "qte", 'unit',
        "depot_arrive"
    ]]
    Stat = [0, 0]
    listeAchats = listeAchatsFret[1:]
    fretMP = []

    import_maritime = lireImportMaritime()
    import_terrestre = lireImportTerrestre(p.FICHIER_ENTREES_MANUELLES)
    liste_u_achats = fonctionsMatrices.liste_unique(
        fonctionsMatrices.extraire_colonne_n(1, listeAchats))
    #Parallèlement au calcul, on va enregistrer la distance parcourue pour livrer chaque dépot
    usines = [[x[2], x[1]] for x in p.CP_SITES_FLORENTAISE if x[3] <= p.ANNEE]
    compte_km_total = 0
    #tonnage route bateau BCroute BCbateau
    resultat_usine_MP = [[
        x, [[y, 0, 0, 0, 0, 0] for y in usines if y[1] != "Support"]
    ] for x in liste_u_achats]
    resultat_usine_MP.insert(0, [
        "MP", "id usine (CP/Nom)", "tonnage", "km route", "km bateau",
        "BC route (tco2e)", "BC bateau (tco2e)"
    ])
    #La structure est un peu particuliere là. Pour chaque matière premiere, resultat_usine_MP a pour ligne
    #  [nom MP, [Usine depot,[%de la masse cette MP livree a ce depot, % du volume de...],fret route, fret bateau]

    for mp in resultat_usine_MP[1:]:
        nombre_livraisons_route_tot = 0  #Pour compter le nombre d'entrées (=livraisons) de cette MP
        nombre_livraisons_bateau_tot = 0
        sommeRoute_tot = 0.0  #Distance cumulée de camion pour les livraisons de cette MP
        sommeBateau_tot = 0.0  #Idem en bateau
        nomMP = mp[0]
        #Pour compter les quantités
        tonnage_tot = 0
        idMP = fonctionsMatrices.recherche_elem(nomMP, listeAchats, 1, 0)
        #On va chercher la masse volumique pour déterminer le tonnage
        masse_volumique = 1
        for mv in masse_vol_MP:
            if mv[1].lower() in nomMP.lower() or nomMP.lower() in mv[1].lower(
            ):
                try:
                    masse_volumique = float(mv[2])
                except ValueError:
                    masse_volumique = 1
                break

        for usine in mp[1]:
            nombre_livraisons_route_usine = 0  #Pour compter le nombre d'entrées (=livraisons) de cette MP
            nombre_livraisons_bateau_usine = 0
            cp_site_depot = usine[0][0]
            for j in range(len(listeAchats)):  #On parcourt la liste des achats
                depot_arrive = listeAchats[j][
                    7]  #Code postal du depot d'arrivee de la matiere premiere pour cette livraison

                if cp_site_depot == depot_arrive and listeAchats[j][
                        1] == nomMP:  #Si c'est la MP qui nous intéresse
                    famille = listeAchats[j][4]

                    nombre_livraisons_route_tot += 1
                    nombre_livraisons_route_usine += 1
                    quantite = listeAchats[j][9]

                    #On compte la quantité transportée, selon l'unité
                    if listeAchats[j][10] == "m3":
                        m3 = quantite
                        kg = 0
                    elif listeAchats[j][10] == "kg":
                        m3 = 0
                        kg = quantite
                    else:
                        fonctionsMatrices.print_log_erreur(
                            "Unité de l'intrant non reconnue : " +
                            listeAchats[j][10] + " pour " + nomMP,
                            inspect.stack()[0][3])
                    tonnage = (kg / 1000) + (m3 * masse_volumique)
                    tonnage_tot += tonnage
                    usine[1] += tonnage

                    #On récupère le calcul de la distance de fret
                    distanceRoute, distanceBateau, trajets, nombre_livraisons_bateau_supp = calcul_distance_fret_amont(
                        listeAchats[j], trajets, import_terrestre,
                        import_maritime)
                    compte_km_total += (distanceRoute + distanceBateau)
                    sommeRoute_tot += distanceRoute
                    sommeBateau_tot += distanceBateau
                    nombre_livraisons_bateau_usine += nombre_livraisons_bateau_supp
                    nombre_livraisons_bateau_tot += nombre_livraisons_bateau_supp

                    emissionsRoute = (distanceRoute *
                                      FE_route) * tonnage / 1000
                    emissionsBateau = (distanceBateau *
                                       FE_bateau) * tonnage / 1000
                    # print(nomMP+"  "+str(int(emissionsRoute*1000))+"  "+str(int(emissionsBateau*1000)))
                    usine[2] += distanceRoute
                    usine[3] += distanceBateau
                    usine[4] += emissionsRoute
                    usine[5] += emissionsBateau
                    if "tourbe" in nomMP.lower():
                        p.COMPARAISON_TOURBE[0] += (
                            (distanceRoute * FE_route +
                             distanceBateau * FE_bateau) * tonnage) / 1000

            # print(nomMP+"  "+str(cp_site_depot)+"  "+str(usine[2])+"km  "+str(usine[4])+"tCO2e" )
        if nombre_livraisons_route_tot != 0:
            moyenneRoute_tot = sommeRoute_tot / nombre_livraisons_route_tot
        else:
            moyenneRoute_tot = 0
        if nombre_livraisons_bateau_tot != 0:
            moyenneBateau_tot = sommeBateau_tot / nombre_livraisons_bateau_tot
        else:
            moyenneBateau_tot = 0

        # print("TOT: "+ nomMP+"  "+str(masse_volumique)+"t/m3  " )
        #Associe un FE de transport en kgCO2e/t
        #Le but ici n'est pas d'avoir le BC du fret amont mais seulement un FE par tonne: on ne s'intéresse pas encoe aux quantités.
        #On prend juste (distance cumulée ou moyenne)*(FE du moyen de transport)
        #Comme ce FE est en kgCO2.t-1.km-1 on a bien à la fin des kgCO2.t-1
        fretMP.append([
            nomMP, idMP, famille, sommeRoute_tot, sommeBateau_tot,
            moyenneRoute_tot, moyenneBateau_tot, tonnage_tot,
            FE_route * sommeRoute_tot, FE_bateau * sommeBateau_tot,
            FE_route * moyenneRoute_tot, FE_bateau * moyenneBateau_tot,
            masse_volumique
        ])
    fretMP.insert(0, [
        "nomMP", "ID mp", "Famille BC", "Somme du fret route (km)",
        "Somme du fret naval (km)", "Moyenne de fret routier (km)",
        "Moyenne de fret naval (km)", "Tonnage", "FE route(kgCO2e/t) cumulé",
        "FE bateau(kgCO2e/t) cumulé", "FE route(kgCO2e/t) moyen",
        "FE bateau(kgCO2e/t) moyen", "Masse volumique (t/m3)"
    ])
    print("Km amont total : " + str(int(compte_km_total)) + "km")
    if p.DISPLAY_GRAPH:
        tracer_achats(trajets)
    affichageResultats.sauveTrajetsAmont(trajets, nom_fichier)
    return fretMP, resultat_usine_MP