From ccaf5c3b7fbb037960cbca9277cd8bdec6b6d353 Mon Sep 17 00:00:00 2001 From: JULLIEN Baptiste Date: Fri, 29 Mar 2024 23:39:47 +0100 Subject: [PATCH] Update .gitignore and modify code in Create_Browser.py, inventaireMongo.py, csvReader.py, UpdatePricePromocash.py, Course.py, and remiseStockManuelle.py. Update inventory files in csv folder. --- .gitignore | 4 +- csv/Inventaire_Auchan.csv | 7 ++- csv/Inventaire_Promocash.csv | 19 +++--- src/Auchan.py | 32 +++++----- src/CalculOptimalAmount.py | 112 +++++++++++++++++++++++++++++++++++ src/Course.py | 4 +- src/Create_Browser.py | 2 +- src/Promocash.py | 15 ++--- src/ReapproComplete.py | 27 ++++++++- src/UpdateOptimalAmount.py | 37 ++++++++++++ src/UpdatePricePromocash.py | 2 +- src/csvReader.py | 4 +- src/inventaireMongo.py | 2 +- src/remiseStockManuelle.py | 5 +- 14 files changed, 228 insertions(+), 44 deletions(-) create mode 100644 src/CalculOptimalAmount.py create mode 100644 src/UpdateOptimalAmount.py diff --git a/.gitignore b/.gitignore index 0bc2647..7c2d26b 100644 --- a/.gitignore +++ b/.gitignore @@ -8,7 +8,9 @@ Inventaire.csv Inventaire_modif.csv ProduitARecalculer.csv Course_non_drive.csv -Produit_non_trouve.csv +Produits_non_trouves.csv +Update_optimal.csv +Update_optimal_manquant.csv .env .vscode bar.categories.json diff --git a/csv/Inventaire_Auchan.csv b/csv/Inventaire_Auchan.csv index 19e9b34..562383c 100644 --- a/csv/Inventaire_Auchan.csv +++ b/csv/Inventaire_Auchan.csv @@ -1,3 +1,4 @@ +Produit,Quantité restante,Quantité optimale,Nombre de produits par lots,REF Petits saucissons secs,6,8,1,45710 Pringles Original,5,5,1,909371 Tuiles Oignon,5,5,1,58596 @@ -18,12 +19,12 @@ Riz cantonais,0,5,1,159143 Monster Munch Original,3,3,1,404838 Monster munch ketchup,2,6,1,579367 Brownie,15,16,8,71713 -Crepe fourree choco,24,30,15,917944 +Crepe fourree choco,21,30,15,917944 Gaufre chocolat,19,24,6,78106 KitKat,33,20,10,662145 Barre Nesquik,21,24,6,510716 Barre chocapic,22,24,6,509565 -2 Pains choco indus,23,16,8,252180 +2 Pains choco indus,22,40,8,252180 Barre Cereales Chocolat,27,24,6,514819 Skittles Mini Rouges,4,8,8,149149 Barre Cereales Fruits Rouges,23,24,6,336405 @@ -47,7 +48,7 @@ Oreo Pocket,18,20,5,468893 Nouilles Boeuf,5,3,1,482770 Kinder Country,21,30,18,426818 Twix White,15,20,5,631948 -5 Schokobons,33,16,16,72628 +5 Schokobons,33,20,16,72628 Napolitain,29,24,12,114583 Magnum Amande,18,16,8,802809 Magnum Double Gold,3,8,4,862306 diff --git a/csv/Inventaire_Promocash.csv b/csv/Inventaire_Promocash.csv index ada5767..f43afc4 100644 --- a/csv/Inventaire_Promocash.csv +++ b/csv/Inventaire_Promocash.csv @@ -1,3 +1,4 @@ +Produit,Quantité restante,Quantité optimale,Nombre de produits par lots,REF Coca Cola,66,62,24,525199 Coca Cherry,55,62,24,418172 Coca Cola Zero,40,48,24,418171 @@ -23,15 +24,15 @@ Jus Orange,20,24,12,892560 Jus fraise,15,18,12,592698 Jus Multifruit,11,18,12,892620 Jus Peche,13,18,12,892522 -Jus ACE,14,18,12,892619 +Jus ACE,13,18,12,892619 Jus Mangue,12,18,12,892590 -Jus Banane,14,18,12,892580 +Jus Banane,13,18,12,892580 Jus Abricot,24,18,12,892571 Jus Pomme,20,24,12,892556 Jus Raisin,12,18,12,892628 Jus tomate,8,18,12,892629 Jus Poire,0,0,12,892540 -Jus Pamplemousse,12,18,12, +Jus Pamplemousse,11,18,12, Arizona Mucho Mango,7,6,6,611479 Arizona Green Tea,8,6,6,609713 Arizona Fruit Punch,16,6,6,611243 @@ -45,14 +46,14 @@ Canada dry,51,12,6,826746 Monster Mango Loco,16,12,12,421904 Monster Pipeline Punch,7,12,12,368789 Monster Ultra Zero Sugar,11,12,12,296648 -Monster Ultra Paradise,33,12,12,267133 +Monster Ultra Paradise,32,12,12,267133 Monster Energy,27,36,24,394647 Monster Ultra Gold,14,12,12,815429 -Capri-Sun 20cl Multi Vitamin,36,40,10,778766 +Capri-Sun 20cl Multi Vitamin,35,40,10,778766 Cacolac,19,12,24,599300 -Sprite,15,24,24,905216 -Jus Pamplemousse,12,18,12,892552 -Kinder Bueno$,90,150,30,070295 -Kinder Bueno White,76,100,30,961578 +Sprite,14,24,24,905216 +Jus Pamplemousse,11,18,12,892552 +Kinder Bueno$,87,150,30,070295 +Kinder Bueno White,75,100,30,961578 Kinder Country,21,30,24,723788 Oreo Pocket,18,20,5,896676 diff --git a/src/Auchan.py b/src/Auchan.py index 6b2e7fa..384c1cb 100644 --- a/src/Auchan.py +++ b/src/Auchan.py @@ -41,8 +41,8 @@ def auchan(IDENTIFIANT_AUCHAN, PASSWORD_AUCHAN, WEB_BROWSER): print("Le panier a été vidé") except: print("Le panier est déjà vide") - prix = [] - produit_non_trouve = [] + prix = [('Produit', 'Nombre de lots à acheter', 'Nombre de produits par lots', 'Prix')] + produits_non_trouves = [('Produit', 'Nombre de lots à acheter', 'Nombre de produits par lots', 'REF')] sleep(1) # Ajouts des produits def ajout_produit(row): @@ -51,38 +51,42 @@ def ajout_produit(row): try: prix_produit = float(driver.find_element(By.XPATH, "//meta[@itemprop='price']").get_attribute("content").replace(',','.')) except: - print(f"Le produit {produits[row]} n'est pas disponible") - produit_non_trouve.append((produits[i], nb_de_lots_a_acheter, nb_produits[i], supposed_nb_produits[i], nb_produits_par_lots[i], ref_produits_auchan[row])) - print(f"{produits[row]} ajouté dans le fichier Produit_non_trouve.csv") + print(f"Le produit {produits[row]} n'est pas était trouvé sur le drive, ajout dans le fichier Produits_non_trouves.csv") + produits_non_trouves.append((produits[row], nb_de_lots_a_acheter[row], nb_produits_par_lots[row], ref_produits_auchan[row])) print("Passage au produit suivant") return - prix.append((produits[row],nb_de_lots_a_acheter[row], nb_produits_par_lots[row], prix_produit)) + prix.append((produits[row], nb_de_lots_a_acheter[row], nb_produits_par_lots[row], prix_produit)) for i in range(int(nb_de_lots_a_acheter[row])): try: driver.find_element(By.XPATH, "//button[contains(.,'Ajouter au panier')]").click() except: print(f"Le produit {produits[row]} est au max, il y a {i+1} / {nb_de_lots_a_acheter[row]} mis dans le panier") - prix[-1][2] = i + 1 - produit_non_trouve.append((produits[i], nb_de_lots_a_acheter - i - 1, nb_produits[i], supposed_nb_produits[i], nb_produits_par_lots[i], ref_produits_auchan[row])) - print(f"{nb_de_lots_a_acheter - i - 1} {produits[row]} ajouté dans le fichier Produit_non_trouve.csv") + prix[-1] = (produits[row], i + 1, nb_produits_par_lots[row], ref_produits_auchan[row]) + produits_non_trouves.append((produits[row], nb_de_lots_a_acheter[row] - i - 1, nb_produits_par_lots[row], ref_produits_auchan[row])) + print(f"{nb_de_lots_a_acheter - i - 1} {produits[row]} ajouté dans le fichier Produits_non_trouves.csv") print("Passage au produit suivant") break sleep(0.5) + for row in range(len(produits)): try: - ajout_produit(row) + if ref_produits_auchan[row] != '': + ajout_produit(row) + else: + print(f"Le produit {produits[row]} n'est pas disponible sur le drive, ajout dans le fichier produits_non_trouves.csv") + produits_non_trouves.append((produits[row], nb_de_lots_a_acheter[row], nb_produits_par_lots[row], ref_produits_auchan[row])) except Exception as e: print(f"{produits[row]} n'as pas réussi à être ajouté à cause de l'erreur suivante : {e}") - produit_non_trouve.append((produits[row], nb_de_lots_a_acheter, nb_produits[row], supposed_nb_produits[row], nb_produits_par_lots[row], ref_produits_auchan[row])) - print(f"{produits[row]} ajouté dans le fichier Produit_non_trouve.csv") + produits_non_trouves.append((produits[row], nb_de_lots_a_acheter[row], nb_produits_par_lots[row], ref_produits_auchan[row])) + print(f"{produits[row]} ajouté dans le fichier Produits_non_trouves.csv") print("Passage au produit suivant") sleep(1) # Vérification du panier sleep(1) driver.get("https://www.auchan.fr/checkout/cart/") csv_writer('Prix.csv', prix) - if produit_non_trouve != []: - csv_writer('Produit_non_trouve.csv', produit_non_trouve) + if produits_non_trouves != []: + csv_writer('Produits_non_trouves.csv', produits_non_trouves) if __name__ == '__main__': load_dotenv() diff --git a/src/CalculOptimalAmount.py b/src/CalculOptimalAmount.py new file mode 100644 index 0000000..e7d05cd --- /dev/null +++ b/src/CalculOptimalAmount.py @@ -0,0 +1,112 @@ +from pymongo import MongoClient +from datetime import datetime, timedelta +from datetime import timezone as tz +from dotenv import load_dotenv +from csvReader import csv_reader +from csvWriter import csv_writer +from os import getenv +from bson.int64 import Int64 +import math + +def arrondi_au_mutilple(x, a): + if a <= 0: + return x + return math.ceil(x / a) * a + +def calcul_optimal_amount(client, magasin, days=21, security=True): + # Access a specific database + db = client["bar"] + + # Access a specific collection within the database + collection_transactions = db["transactions"] + week_quantities = get_item_sales_weeks(collection_transactions, days) + collection_items = db["items"] + + if magasin == "p": + produits = csv_reader(file='Inventaire_Promocash.csv', row_number=0) + nb_produits_par_lots = csv_reader(file='Inventaire_Promocash.csv', row_number=3) + elif magasin == "a": + produits = csv_reader(file='Inventaire_Auchan.csv', row_number=0) + nb_produits_par_lots = csv_reader(file='Inventaire_Auchan.csv', row_number=3) + else: + print("Magasin inconnu") + exit() + + print("La sécurité est désactivée, vous êtes sûr de ce que vous faites" if security == False else "La sécurité est activée, vous pouvez annuler à tout moment") + update_optimal_amount = [('id', 'name', 'amount_sold', 'new_optimal_amount', 'old_optimal_amount')] + update_optimal_manquant = [('id', 'name', 'amount_left', 'optimal_amount', 'optimal_amount')] + for i in range(len(produits)): + query = { "name": { "$regex": produits[i], "$options" :'i'}, "deleted_at": None} + produit = collection_items.find_one(query) + if produit["name"] in week_quantities.keys() and produit["amount_left"] != 0: + new_optimal_amount = Int64(arrondi_au_mutilple(week_quantities[produit["name"]], int(nb_produits_par_lots[i]))) + if new_optimal_amount != produit["optimal_amount"]: + update_optimal_amount.append((produit["_id"], produit["name"], week_quantities[produit["name"]], new_optimal_amount, produit["optimal_amount"])) + if not security: + if input(f"Voulez vous modifier le montant optimal du produit {produit['name']} de {produit['optimal_amount']} pour {new_optimal_amount} (nb_produit_vendu: {int(week_quantities[produit['name']])})? (y/n)") == "y": + collection_items.update_one({"name": produit["name"]}, {"$set": {"optimal_amount": new_optimal_amount}}) + print(f"{produit['name']} Modifier") + else: + update_optimal_manquant.append((produit["_id"], produit["name"], produit["amount_left"], produit["optimal_amount"], produit["optimal_amount"])) + + print("Modification écrite dans le fichier Update_optimal.csv et Update_optimal_manquant.csv") + print("(id, name, amount_sold, new_optimal_amount, old_optimal_amount)") + csv_writer('Update_optimal.csv', update_optimal_amount) + csv_writer('Update_optimal_manquant.csv', update_optimal_manquant) + +def get_item_sales_weeks(transactions_collection, w): + # Calculate the date w weeks ago + three_weeks_ago = int((datetime.now(tz.utc) - timedelta(days=w)).timestamp()) + # Create the pipeline for the aggregation + pipeline = [ + { + "$match": { + "created_at": { "$gte": three_weeks_ago } + } + }, + { + "$unwind": "$items" + }, + { + "$group": { + "_id": "$items.item_id", + "totalQuantity": { "$sum": "$items.item_amount" } + } + }, + { + "$lookup": { + "from": "items", + "localField": "_id", + "foreignField": "id", + "as": "item_data" + } + }, + { + "$unwind": "$item_data" + }, + { + "$project": { + "_id": 0, + "item_name": "$item_data.name", + "totalQuantity": 1 + } + }, + { + "$group": { + "_id": "$item_name", + "totalQuantity": { "$sum": "$totalQuantity" } + } + } +] + + # Execute the aggregation and fetch the results + results = transactions_collection.aggregate(pipeline) + item_sales_dict = {result['_id']: result['totalQuantity'] for result in results} + return item_sales_dict + + +if __name__ == '__main__': + load_dotenv() + client = MongoClient(f"mongodb://bar:{getenv('MONGO_MDP')}@mongo.telecomnancy.net:443/?authMechanism=DEFAULT&authSource=bar&directConnection=true&tls=true&tlsCertificateKeyFile={getenv('MONGO_PEM')}") + calcul_optimal_amount(client, "p") + #update_optimal_amount(client, "Update_optimal.csv") \ No newline at end of file diff --git a/src/Course.py b/src/Course.py index 9714738..2656e09 100644 --- a/src/Course.py +++ b/src/Course.py @@ -10,8 +10,8 @@ def creation_de_la_liste_de_course(seuil_pour_acheter_pourcentage_du_nombre_de_p ifls_produits_promocash = csv_reader(file, row_number=4) #produits = [(p,nb,s) for p,nb,s in zip(produits,nb_produits, supposed_nb_produits)] - course = [] - course_non_drive = [] + course = [('Produit', 'Nombre de lots à acheter', 'Nombre de produits', 'Nombre de produits supposé', 'Nombre de produits par lots', 'REF')] + course_non_drive = [('Produit', 'Nombre de lots à acheter', 'Nombre de produits', 'Nombre de produits supposé', 'Nombre de produits par lots', 'REF')] for i in range(len(produits)): if nb_produits[i] == 'Produit non trouvé': nb_produits[i] = 999999999 nb_produits[i] = int(nb_produits[i]) diff --git a/src/Create_Browser.py b/src/Create_Browser.py index 363abac..a05e7ce 100644 --- a/src/Create_Browser.py +++ b/src/Create_Browser.py @@ -26,7 +26,7 @@ def create_browser(WEB_BROWSER): else: print("Le navigateur n'est pas reconnu, veuillez choisir entre chrome et firefox") exit() - driver.implicitly_wait(100) + driver.implicitly_wait(2) return driver if __name__ == '__main__': diff --git a/src/Promocash.py b/src/Promocash.py index c31f53a..4c7c316 100644 --- a/src/Promocash.py +++ b/src/Promocash.py @@ -54,19 +54,20 @@ def ajout_produit(row): except: print("Le panier était déjà vide") sleep(0.2) - prix = [] - produits_non_trouves = [] + prix = [('Produit', 'Nombre de lots à acheter', 'Nombre de produits par lots', 'Prix', 'REF')] + produits_non_trouves = [('Produit', 'Nombre de lots à acheter', 'Nombre de produits par lots', 'REF')] for row in range(len(produits)): if ifls_produits_promocash[row] != '' and produits[row] != "Bonbons Haribo": try: ajout_produit(row) except Exception as e: print(f"{produits[row]} n'as pas réussi à être ajouté à cause de l'erreur suivante : {e}") - produits_non_trouves.append((produits[row], nb_de_lots_a_acheter[row], nb_produits[row], supposed_nb_produits[row], nb_produits_par_lots[row], ifls_produits_promocash[row])) + produits_non_trouves.append((produits[row], nb_de_lots_a_acheter[row], nb_produits_par_lots[row], ifls_produits_promocash[row])) print(f"{produits[row]} ajouté dans le fichier Produit_non_trouve.csv") print("Passage au produit suivant") else: - print(f"Le produit {produits[row]} n'a pas été ajouté car il n'est pas dans la base de données") + print(f"Le produit {produits[row]} n'est pas disponible sur le drive, ajout dans le fichier Produit_non_trouve.csv") + produits_non_trouves.append((produits[row], nb_de_lots_a_acheter[row], nb_produits[row], supposed_nb_produits[row], nb_produits_par_lots[row], ifls_produits_promocash[row])) csv_writer('Prix.csv', prix) @@ -80,7 +81,7 @@ def ajout_produit(row): nb_produits = csv_reader('Course_manuelle.csv', row_number=1) supposed_nb_produits = csv_reader('Course_manuelle.csv', row_number=2) ifls_produits_promocash = csv_reader('Course_manuelle.csv', row_number=3) - prix_manuelle = [] + prix_manuelle = [('Produit', 'Nombre de lots à acheter', 'Prix', 'REF')] def ajout_produit(row): driver.get(f"https://nancy.promocash.com/produitListe.php?searchString={ifls_produits_promocash[row]}") nb_de_lots_int = int(supposed_nb_produits[row]) - int(nb_produits[row]) @@ -101,8 +102,8 @@ def ajout_produit(row): produits_non_trouves.append((produits[row], nb_de_lots_a_acheter[row], nb_produits[row], supposed_nb_produits[row], nb_produits_par_lots[row], ifls_produits_promocash[row])) print(f"{produits[row]} ajouté dans le fichier Produit_non_trouve.csv") print("Passage au produit suivant") - if prix_manuelle != []: - prix_manuelle.append(("Total HT",sum([x[2] for x in prix_manuelle]))) + if prix_manuelle != [('Produit', 'Nombre de lots à acheter', 'Prix', 'REF')]: + prix_manuelle.append(("Total HT",sum([x[2] for x in prix_manuelle[1:]]))) else: prix_manuelle.append(("Total HT",0)) csv_writer('Prix_manuelle.csv', prix_manuelle) diff --git a/src/ReapproComplete.py b/src/ReapproComplete.py index f828595..394818d 100644 --- a/src/ReapproComplete.py +++ b/src/ReapproComplete.py @@ -8,6 +8,8 @@ from remiseStockManuelle import stock_max from UpdatePricePromocash import updatePricePromocash from PrintCalculPrixTotal import print_calcul_prix_total +from CalculOptimalAmount import calcul_optimal_amount +from UpdateOptimalAmount import update_optimal_amount from pymongo import MongoClient from os import getenv from dotenv import load_dotenv @@ -42,6 +44,7 @@ if input("Voulez-vous commander sur Promocash (y/n) ?") == 'y': promocash(getenv("NUMERO_CARTE_PROMOCASH"), getenv("PASSWORD_PROMOCASH"), getenv("WEB_BROWSER")) print("Commande faite sur Promocash et enregistré le fichier Prix.csv (nom_produit, nb_de_lots_acheter, nb_produits_par_lots, prix)") + print("Les produits non trouvés sont dans le fichier Produits_non_trouves.csv") else: exit() else: @@ -49,6 +52,7 @@ if input("Voulez-vous commander sur Auchan (y/n) ?") == 'y': auchan(getenv("IDENTIFIANT_AUCHAN"), getenv("PASSWORD_AUCHAN"), getenv("WEB_BROWSER")) print("Commande faite sur Auchan et enregistré le fichier Prix.csv (nom_produit, nb_de_lots_acheter, nb_produits_par_lots, prix)") + print("Les produits non trouvés sont dans le fichier Produits_non_trouves.csv") else: exit() @@ -59,7 +63,7 @@ print("Stock manuelle remis à jour") else: print("Stock manuelle non modifié") -else: +elif magasin == 'r': # 4 EME ETAPE: FAIRE LA REAPPRO SUR LE BAR print_calcul_prix_total("all") magasin = input("Voulez-vous faire la reappro pour Promocash ou pour Auchan (p/a) ?") @@ -84,5 +88,26 @@ print("Reappro fait via la base de données directement") else: exit() +elif magasin == 'u': + # 5 EME ETAPE: CALCULER LE NOMBRE OPTIMAL DE PRODUITS + magasin = input("Voulez-vous calculer le nombre optimal de produits pour Promocash ou pour Auchan (p/a) ?") + if magasin == 'p': + calcul_optimal_amount(client, magasin) + elif magasin == 'a': + calcul_optimal_amount(client, magasin) + else: + print("Drive inconnue") + + # 6 EME ETAPE: METTRE A JOUR LE NOMBRE OPTIMAL DE PRODUITS + magasin = input("Voulez-vous mettre à jour le nombre optimal de produits (y/n) ?") + if magasin == 'y': + update_optimal_amount(client, "Update_optimal.csv", security=False) + elif magasin == 'n': + print("Le nombre optimal de produits n'a pas été mis à jour") + else: + print("Commande inconnue, Le nombre optimal de produits n'a pas été mis à jour") +else: + print("Commande inconnue") + # Close the connection when you're done client.close() \ No newline at end of file diff --git a/src/UpdateOptimalAmount.py b/src/UpdateOptimalAmount.py new file mode 100644 index 0000000..a091cd3 --- /dev/null +++ b/src/UpdateOptimalAmount.py @@ -0,0 +1,37 @@ +from pymongo import MongoClient +from datetime import timezone as tz +from dotenv import load_dotenv +from csvReader import csv_reader +from os import getenv +from bson.int64 import Int64 +from bson.objectid import ObjectId + +def update_optimal_amount(client, file, security=True): + db = client["bar"] + collection_items = db["items"] + try: + id = csv_reader(file, row_number=0) + except Exception as e: + print(f"Erreur lors de la lecture du fichier {file}, Erreur: {e}") + exit() + produits = csv_reader(file, row_number=1) + amount_sold = csv_reader(file, row_number=2) + optimal_amount = csv_reader(file, row_number=3) + old_optimal_amount = csv_reader(file, row_number=4) + for row in range(len(id)): + if not security: + ans = input(f"Voulez vous modifier le montant optimal du produit {produits[row]} de {old_optimal_amount[row]} pour {optimal_amount[row]} (nb_produit_vendu: {amount_sold[row]})? (y/n/exit) ") + if ans == "y": + collection_items.update_one({"_id": ObjectId(id[row])}, {"$set": {"optimal_amount": Int64(optimal_amount[row])}}) + elif ans == "n": + print(f"Modification de {produits[row]} annulé") + else: + print("Modification annulé") + exit() + else: + print(f"Voulez vous modifier le montant optimal de {produits[row]} pour {optimal_amount[row]} (nb_produit_vendu: {amount_sold[row]})") + +if __name__ == '__main__': + load_dotenv() + client = MongoClient("mongodb://localhost:27017/") + update_optimal_amount(client, 'Update_optimal.csv', security=False) \ No newline at end of file diff --git a/src/UpdatePricePromocash.py b/src/UpdatePricePromocash.py index 31c3bcb..563839c 100644 --- a/src/UpdatePricePromocash.py +++ b/src/UpdatePricePromocash.py @@ -40,7 +40,7 @@ def ajout_produit(row): deci_prix = driver.find_element(By.XPATH, "//span[@class='deci']").text prix.append((produits[row],nb_de_lots_a_acheter[row], nb_produits_par_lots[row], float(unit_prix + "." + deci_prix), ifls_produits_promocash[row])) - prix = [] + prix = [('Produit', 'Nombre de lots à acheter', 'Nombre de produits par lots', 'Prix', 'REF')] #print("Updating", end=" ") for row in range(len(produits)): if ifls_produits_promocash[row] != '' and produits[row] != "Bonbons Haribo": diff --git a/src/csvReader.py b/src/csvReader.py index db1f53b..809bf7c 100644 --- a/src/csvReader.py +++ b/src/csvReader.py @@ -9,10 +9,10 @@ def csv_reader(file, row_number): produits = [] with open(Path("csv") / file, newline='') as csvfile: csv_produits = csv.reader(csvfile, delimiter=',', quotechar='|') - for row in csv_produits: + for row in list(csv_produits)[1:]: produits.append(row[row_number]) return produits if __name__ == '__main__': - print(csv_reader(file='Inventaire.csv', row_number=0)) \ No newline at end of file + print(csv_reader(file='Inventaire_Promocash.csv', row_number=0)) \ No newline at end of file diff --git a/src/inventaireMongo.py b/src/inventaireMongo.py index 10f2596..f5ef5b1 100644 --- a/src/inventaireMongo.py +++ b/src/inventaireMongo.py @@ -20,7 +20,7 @@ def inventaire_mongo(client, file): nb_produits_par_lots = csv_reader(file, row_number=3) ifls_produits_promocash = csv_reader(file, row_number=4) - Inventaire = [] + Inventaire = [('Produit', 'Quantité restante', 'Quantité optimale', 'Nombre de produits par lots', 'REF')] for i in range(len(produits)): query = { "name": { "$regex": produits[i], "$options" :'i'}, "deleted_at": None} diff --git a/src/remiseStockManuelle.py b/src/remiseStockManuelle.py index b7c60df..c0d2565 100644 --- a/src/remiseStockManuelle.py +++ b/src/remiseStockManuelle.py @@ -6,8 +6,9 @@ def stock_max(): nb_produits = csv_reader('Course_manuelle_stock_max.csv', row_number=1) supposed_nb_produits = csv_reader('Course_manuelle_stock_max.csv', row_number=2) ifls_produits_promocash = csv_reader('Course_manuelle_stock_max.csv', row_number=3) - - csv_writer("Course_manuelle.csv", [(p, nb, s, i) for p, nb, s, i in zip(produits, nb_produits, supposed_nb_produits, ifls_produits_promocash)]) + tab = [(p, nb, s, i) for p, nb, s, i in zip(produits, nb_produits, supposed_nb_produits, ifls_produits_promocash)] + tab.insert(0, ('Produit', 'Nombre de produits', 'Nombre de produits supposé', 'REF')) + csv_writer("Course_manuelle.csv", tab) if __name__ == '__main__': stock_max() \ No newline at end of file