Delivery edition

This commit is contained in:
Alexis Metaireau 2019-04-22 15:11:52 +02:00
parent b3286e5d86
commit 5d8f9ad512
4 changed files with 16 additions and 17 deletions

View file

@ -204,27 +204,25 @@ async def import_products(request, response, id):
delivery = Delivery.load(id) delivery = Delivery.load(id)
delivery.products = [] delivery.products = []
data = request.files.get("data") data = request.files.get("data")
path = f"/livraison/{delivery.id}" error_path = f"/livraison/{delivery.id}/edit"
if data.filename.endswith((".csv", ".xlsx")):
try:
if data.filename.endswith(".csv"): if data.filename.endswith(".csv"):
try:
imports.products_from_csv(delivery, data.read().decode()) imports.products_from_csv(delivery, data.read().decode())
except ValueError as err: else:
response.message(err, status="error")
response.redirect = path
return
elif data.filename.endswith(".xlsx"):
try:
imports.products_from_xlsx(delivery, data) imports.products_from_xlsx(delivery, data)
except ValueError as err: except ValueError as err:
response.message(err, status="error") message = f"Impossible d'importer le fichier. {err.args[0]}"
response.redirect = path response.message(message, status="error")
response.redirect = error_path
return return
else: else:
response.message("Format de fichier inconnu", status="error") response.message("Format de fichier inconnu", status="error")
response.redirect = path response.redirect = error_path
return return
response.message("Les produits de la livraison ont bien été mis à jour!") response.message("Les produits de la livraison ont bien été mis à jour!")
response.redirect = path response.redirect = f"/livraison/{delivery.id}"
@app.route("/livraison/{id}/exporter/produits", methods=["GET"]) @app.route("/livraison/{id}/exporter/produits", methods=["GET"])

View file

@ -31,7 +31,8 @@ def products_from_xlsx(delivery, data):
def products_from_csv(delivery, data): def products_from_csv(delivery, data):
reader = csv.DictReader(data.splitlines(), delimiter=";") reader = csv.DictReader(data.splitlines(), delimiter=";")
if not set(reader.fieldnames) >= PRODUCT_FIELDS: if not set(reader.fieldnames) >= PRODUCT_FIELDS:
raise ValueError("Colonnes obligatoires: name, ref, price") raise ValueError("Colonnes obligatoires: name, ref, price. "
"Assurez-vous que le délimiteur soit bien «;»")
delivery.products = [] delivery.products = []
for row in reader: for row in reader:
delivery.products.append(Product(**row)) delivery.products.append(Product(**row))

View file

@ -13,7 +13,7 @@
</label> </label>
<label> <label>
<p>Description des produits</p> <p>Description des produits</p>
<input type="text" name="description" value="{{ delivery.description or '' }}" required> <input type="text" name="description" value="{{ delivery.description or '' }}">
</label> </label>
<label> <label>
<p>Référent</p> <p>Référent</p>

View file

@ -1,5 +1,5 @@
<ul class="delivery-head"> <ul class="delivery-head">
<li><i class="icon-basket"></i> <strong>Produits</strong> {{ delivery.description }}</li> {% if delivery.description %}<li><i class="icon-basket"></i> <strong>Produits</strong> {{ delivery.description }}</li>{% endif %}
<li><i class="icon-streetsign"></i> <strong>Lieu</strong> {{ delivery.where }}</li> <li><i class="icon-streetsign"></i> <strong>Lieu</strong> {{ delivery.where }}</li>
<li><i class="icon-strategy"></i> <strong>Référent</strong> <a href="mailto:{{ delivery.contact }}">{{ delivery.contact }}</a></li> <li><i class="icon-strategy"></i> <strong>Référent</strong> <a href="mailto:{{ delivery.contact }}">{{ delivery.contact }}</a></li>
<li><i class="icon-clock"></i> <strong>Date de livraison</strong> <time datetime="{{ delivery.from_date }}">{{ delivery.from_date|date }} de {{ delivery.from_date|time }} à {{ delivery.to_date|time }}</time></li> <li><i class="icon-clock"></i> <strong>Date de livraison</strong> <time datetime="{{ delivery.from_date }}">{{ delivery.from_date|date }} de {{ delivery.from_date|time }} à {{ delivery.to_date|time }}</time></li>