Add a multi import mechanism

This commit is contained in:
Alexis Métaireau 2019-04-28 19:16:06 +02:00
parent 1794913997
commit 20df999dc0
2 changed files with 33 additions and 1 deletions

View file

@ -1,4 +1,5 @@
import csv import csv
from collections import defaultdict
from pathlib import Path from pathlib import Path
import ujson as json import ujson as json
@ -385,6 +386,30 @@ async def import_commande(request, response, id):
response.message(f"Yallah! La commande de {email} a bien été importée !") response.message(f"Yallah! La commande de {email} a bien été importée !")
response.redirect = f"/livraison/{delivery.id}" response.redirect = f"/livraison/{delivery.id}"
@app.route("/livraison/{id}/importer/commandes", methods=["POST"])
@staff_only
async def import_multiple_commands(request, response, id):
reader = csv.DictReader(
request.files.get("data").read().decode().splitlines(), delimiter=";"
)
orders = defaultdict(Order)
current_ref = None
for row in reader:
for label, value in row.items():
if label == 'ref':
current_ref = value
else:
wanted = int(value or 0)
if wanted:
orders[label].products[current_ref] = ProductOrder(wanted=wanted)
delivery = Delivery.load(id)
for email, order in orders.items():
delivery.orders[email] = order
delivery.persist()
response.message(f"Yes ! Les commandes ont bien été importées !")
response.redirect = f"/livraison/{delivery.id}"
@app.route("/livraison/{id}/bon-de-commande.xlsx", methods=["GET"]) @app.route("/livraison/{id}/bon-de-commande.xlsx", methods=["GET"])
async def xls_report(request, response, id): async def xls_report(request, response, id):

View file

@ -9,4 +9,11 @@
<input type="email" name="email" placeholder="email"> <input type="email" name="email" placeholder="email">
<input type="submit" name="Importer"> <input type="submit" name="Importer">
</form> </form>
<h4>Importer plusieurs commandes</h4>
<p>Colonnes: ref*, toto@domain.tld, etc.</p>
<form action="/livraison/{{ delivery.id }}/importer/commandes" method="post" enctype="multipart/form-data">
<input type="file" name="data">
<input type="submit" name="Importer">
</form>
{% endblock modal_body %} {% endblock modal_body %}