mirror of
https://github.com/almet/copanier.git
synced 2025-04-28 19:42:37 +02:00
Pass commands as group, not individual
This commit is contained in:
parent
90b2a92894
commit
fe960c13f5
4 changed files with 49 additions and 20 deletions
|
@ -365,20 +365,29 @@ async def view_delivery(request, response, id):
|
|||
@app.route("/livraison/{id}/commander", methods=["POST", "GET"])
|
||||
async def place_order(request, response, id):
|
||||
delivery = Delivery.load(id)
|
||||
email = request.query.get("email", None)
|
||||
# email = request.query.get("email", None)
|
||||
user = session.user.get(None)
|
||||
orderer = request.query.get("orderer", None)
|
||||
if orderer:
|
||||
orderer = Person(email=orderer, group_id=orderer)
|
||||
|
||||
delivery_url = f"/livraison/{delivery.id}"
|
||||
if not email and user:
|
||||
email = user.email
|
||||
if not email:
|
||||
if not orderer and user:
|
||||
orderer = user
|
||||
|
||||
if not orderer:
|
||||
response.message("Impossible de comprendre pour qui passer commande…", "error")
|
||||
response.redirect = delivery_url
|
||||
return
|
||||
|
||||
if request.method == "POST":
|
||||
if not (user and user.is_staff) and delivery.status == delivery.CLOSED:
|
||||
|
||||
# When the delivery is closed, only staff can access.
|
||||
if delivery.status == delivery.CLOSED and not (user and user.is_staff) :
|
||||
response.message("La livraison est fermée", "error")
|
||||
response.redirect = delivery_url
|
||||
return
|
||||
|
||||
form = request.form
|
||||
order = Order(paid=form.bool("paid", False))
|
||||
for product in delivery.products:
|
||||
|
@ -394,29 +403,41 @@ async def place_order(request, response, id):
|
|||
order.products[product.ref] = ProductOrder(
|
||||
wanted=wanted, adjustment=adjustment
|
||||
)
|
||||
|
||||
if not delivery.orders:
|
||||
delivery.orders = {}
|
||||
|
||||
if not order.products:
|
||||
if email in delivery.orders:
|
||||
del delivery.orders[email]
|
||||
if orderer.id in delivery.orders:
|
||||
del delivery.orders[orderer.id]
|
||||
delivery.persist()
|
||||
response.message("La commande est vide.", status="warning")
|
||||
response.redirect = delivery_url
|
||||
return
|
||||
delivery.orders[email] = order
|
||||
delivery.orders[orderer.id] = order
|
||||
delivery.persist()
|
||||
if user and user.email == email:
|
||||
|
||||
if user and orderer.id == user.id:
|
||||
# Only send email if order has been placed by the user itself.
|
||||
emails.send_order(
|
||||
request, env, person=Person(email=email), delivery=delivery, order=order
|
||||
)
|
||||
response.message(f"La commande pour «{email}» a bien été prise en compte!")
|
||||
# Send the emails to everyone in the group.
|
||||
from pdb import set_trace; set_trace()
|
||||
groups = request['groups'].groups
|
||||
if orderer.group_id in groups.keys():
|
||||
for email in groups[orderer.group_id].members:
|
||||
emails.send_order(
|
||||
request, env, person=Person(email=email), delivery=delivery, order=order
|
||||
)
|
||||
else:
|
||||
emails.send_order(
|
||||
request, env, person=Person(email=orderer.email), delivery=delivery, order=order
|
||||
)
|
||||
response.message(f"La commande pour « {orderer.name} » a bien été prise en compte!")
|
||||
response.redirect = f"/livraison/{delivery.id}"
|
||||
else:
|
||||
order = delivery.orders.get(email) or Order()
|
||||
order = delivery.orders.get(orderer.id) or Order()
|
||||
response.html(
|
||||
"place_order.html",
|
||||
{"delivery": delivery, "person": Person(email=email), "order": order},
|
||||
{"delivery": delivery, "person": orderer, "order": order},
|
||||
)
|
||||
|
||||
|
||||
|
|
|
@ -95,6 +95,14 @@ class Person(Base):
|
|||
def is_staff(self):
|
||||
return not config.STAFF or self.email in config.STAFF
|
||||
|
||||
@property
|
||||
def id(self):
|
||||
return self.group_id or self.email
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
return self.group_name or self.email
|
||||
|
||||
|
||||
@dataclass
|
||||
class Group(Base):
|
||||
|
|
|
@ -9,12 +9,12 @@
|
|||
<th class="packing">Conditionnement</th>
|
||||
{% endif %}
|
||||
<th class="amount">Total</th>
|
||||
{% for email, order in delivery.orders.items() %}
|
||||
{% for orderer, order in delivery.orders.items() %}
|
||||
<th class="person{% if delivery.is_passed and not order.paid %} not-paid{% endif %}">
|
||||
{% if request.user and request.user.is_staff %}
|
||||
<a href="/livraison/{{ delivery.id }}/commander?email={{ email }}" title="{{ email }}">{{ email }}</a>
|
||||
<a href="/livraison/{{ delivery.id }}/commander?orderer={{ orderer }}" title="{{ orderer }}">{{ orderer }}</a>
|
||||
{% else %}
|
||||
<span title="{{ email }}">{{ email }}</span>
|
||||
<span title="{{ orderer }}">{{ orderer }}</span>
|
||||
{% endif %}
|
||||
</th>
|
||||
{% endfor %}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
{% block body %}
|
||||
<article class="order">
|
||||
<h3><a href="/livraison/{{ delivery.id }}">{{ delivery.name }}</a> — Commande pour « {{ person.email }} »</h3>
|
||||
<h3><a href="/livraison/{{ delivery.id }}">{{ delivery.name }}</a> — Commande pour « {{ person.name }} »</h3>
|
||||
{% include "includes/delivery_head.html" %}
|
||||
<form method="post">
|
||||
|
||||
|
|
Loading…
Reference in a new issue