mirror of
https://github.com/almet/copanier.git
synced 2025-04-28 19:42:37 +02:00
Allow import products and orders
This commit is contained in:
parent
8b31985c5c
commit
4623adb41c
1 changed files with 39 additions and 5 deletions
|
@ -1,9 +1,9 @@
|
||||||
|
import csv
|
||||||
from time import perf_counter
|
from time import perf_counter
|
||||||
|
|
||||||
import ujson as json
|
import ujson as json
|
||||||
import hupper
|
import hupper
|
||||||
import minicli
|
import minicli
|
||||||
from bson import ObjectId
|
|
||||||
from jinja2 import Environment, PackageLoader, select_autoescape
|
from jinja2 import Environment, PackageLoader, select_autoescape
|
||||||
from roll import Roll, Response
|
from roll import Roll, Response
|
||||||
from roll.extensions import cors, options, traceback, simple_server
|
from roll.extensions import cors, options, traceback, simple_server
|
||||||
|
@ -22,6 +22,12 @@ class Response(Response):
|
||||||
self.cookies.set("message", "")
|
self.cookies.set("message", "")
|
||||||
self.body = env.get_template(template_name).render(*args, **context)
|
self.body = env.get_template(template_name).render(*args, **context)
|
||||||
|
|
||||||
|
def redirect(self, location):
|
||||||
|
self.status = 302
|
||||||
|
self.headers["Location"] = location
|
||||||
|
|
||||||
|
redirect = property(None, redirect)
|
||||||
|
|
||||||
|
|
||||||
class Roll(Roll):
|
class Roll(Roll):
|
||||||
Response = Response
|
Response = Response
|
||||||
|
@ -81,6 +87,19 @@ async def create_delivery(request, response):
|
||||||
response.headers["Location"] = f"/livraison/{delivery.id}"
|
response.headers["Location"] = f"/livraison/{delivery.id}"
|
||||||
|
|
||||||
|
|
||||||
|
@app.route("/livraison/{id}/importer/produits", methods=["POST"])
|
||||||
|
async def import_products(request, response, id):
|
||||||
|
delivery = Delivery.load(id)
|
||||||
|
delivery.products = []
|
||||||
|
reader = csv.DictReader(
|
||||||
|
request.files.get("data").read().decode().splitlines(), delimiter=";"
|
||||||
|
)
|
||||||
|
for row in reader:
|
||||||
|
delivery.products.append(Product(**row))
|
||||||
|
delivery.persist()
|
||||||
|
response.redirect = f"/livraison/{delivery.id}"
|
||||||
|
|
||||||
|
|
||||||
@app.route("/livraison/{id}/edit", methods=["GET"])
|
@app.route("/livraison/{id}/edit", methods=["GET"])
|
||||||
async def edit_delivery(request, response, id):
|
async def edit_delivery(request, response, id):
|
||||||
delivery = Delivery.load(id)
|
delivery = Delivery.load(id)
|
||||||
|
@ -102,8 +121,7 @@ async def post_delivery(request, response, id):
|
||||||
@app.route("/livraison/{id}", methods=["GET"])
|
@app.route("/livraison/{id}", methods=["GET"])
|
||||||
async def view_delivery(request, response, id):
|
async def view_delivery(request, response, id):
|
||||||
delivery = Delivery.load(id)
|
delivery = Delivery.load(id)
|
||||||
total = round(sum(o.total(delivery.products) for o in delivery.orders.values()), 2)
|
response.html("delivery.html", {"delivery": delivery})
|
||||||
response.html("delivery.html", {"delivery": delivery, "total": total})
|
|
||||||
|
|
||||||
|
|
||||||
@app.route("/livraison/{id}/commander", methods=["GET"])
|
@app.route("/livraison/{id}/commander", methods=["GET"])
|
||||||
|
@ -130,8 +148,24 @@ async def place_order(request, response, id):
|
||||||
delivery.orders = {}
|
delivery.orders = {}
|
||||||
delivery.orders[email] = order
|
delivery.orders[email] = order
|
||||||
delivery.persist()
|
delivery.persist()
|
||||||
response.headers["Location"] = request.url.decode()
|
response.redirect = request.url.decode()
|
||||||
response.status = 302
|
|
||||||
|
|
||||||
|
@app.route("/livraison/{id}/importer/commande", methods=["POST"])
|
||||||
|
async def import_commande(request, response, id):
|
||||||
|
email = request.form.get("email")
|
||||||
|
order = Order()
|
||||||
|
reader = csv.DictReader(
|
||||||
|
request.files.get("data").read().decode().splitlines(), delimiter=";"
|
||||||
|
)
|
||||||
|
for row in reader:
|
||||||
|
wanted = int(row["wanted"] or 0)
|
||||||
|
if wanted:
|
||||||
|
order.products[row["ref"]] = ProductOrder(wanted=wanted)
|
||||||
|
delivery = Delivery.load(id)
|
||||||
|
delivery.orders[email] = order
|
||||||
|
delivery.persist()
|
||||||
|
response.redirect = f"/livraison/{delivery.id}"
|
||||||
|
|
||||||
|
|
||||||
def connect():
|
def connect():
|
||||||
|
|
Loading…
Reference in a new issue