mirror of
https://github.com/almet/copanier.git
synced 2025-04-28 11:32:38 +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
|
||||
|
||||
import ujson as json
|
||||
import hupper
|
||||
import minicli
|
||||
from bson import ObjectId
|
||||
from jinja2 import Environment, PackageLoader, select_autoescape
|
||||
from roll import Roll, Response
|
||||
from roll.extensions import cors, options, traceback, simple_server
|
||||
|
@ -22,6 +22,12 @@ class Response(Response):
|
|||
self.cookies.set("message", "")
|
||||
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):
|
||||
Response = Response
|
||||
|
@ -81,6 +87,19 @@ async def create_delivery(request, response):
|
|||
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"])
|
||||
async def edit_delivery(request, response, id):
|
||||
delivery = Delivery.load(id)
|
||||
|
@ -102,8 +121,7 @@ async def post_delivery(request, response, id):
|
|||
@app.route("/livraison/{id}", methods=["GET"])
|
||||
async def view_delivery(request, response, 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, "total": total})
|
||||
response.html("delivery.html", {"delivery": delivery})
|
||||
|
||||
|
||||
@app.route("/livraison/{id}/commander", methods=["GET"])
|
||||
|
@ -130,8 +148,24 @@ async def place_order(request, response, id):
|
|||
delivery.orders = {}
|
||||
delivery.orders[email] = order
|
||||
delivery.persist()
|
||||
response.headers["Location"] = request.url.decode()
|
||||
response.status = 302
|
||||
response.redirect = request.url.decode()
|
||||
|
||||
|
||||
@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():
|
||||
|
|
Loading…
Reference in a new issue