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"])
|
@app.route("/livraison/{id}/commander", methods=["POST", "GET"])
|
||||||
async def place_order(request, response, id):
|
async def place_order(request, response, id):
|
||||||
delivery = Delivery.load(id)
|
delivery = Delivery.load(id)
|
||||||
email = request.query.get("email", None)
|
# email = request.query.get("email", None)
|
||||||
user = session.user.get(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}"
|
delivery_url = f"/livraison/{delivery.id}"
|
||||||
if not email and user:
|
if not orderer and user:
|
||||||
email = user.email
|
orderer = user
|
||||||
if not email:
|
|
||||||
|
if not orderer:
|
||||||
response.message("Impossible de comprendre pour qui passer commande…", "error")
|
response.message("Impossible de comprendre pour qui passer commande…", "error")
|
||||||
response.redirect = delivery_url
|
response.redirect = delivery_url
|
||||||
return
|
return
|
||||||
|
|
||||||
if request.method == "POST":
|
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.message("La livraison est fermée", "error")
|
||||||
response.redirect = delivery_url
|
response.redirect = delivery_url
|
||||||
return
|
return
|
||||||
|
|
||||||
form = request.form
|
form = request.form
|
||||||
order = Order(paid=form.bool("paid", False))
|
order = Order(paid=form.bool("paid", False))
|
||||||
for product in delivery.products:
|
for product in delivery.products:
|
||||||
|
@ -394,29 +403,41 @@ async def place_order(request, response, id):
|
||||||
order.products[product.ref] = ProductOrder(
|
order.products[product.ref] = ProductOrder(
|
||||||
wanted=wanted, adjustment=adjustment
|
wanted=wanted, adjustment=adjustment
|
||||||
)
|
)
|
||||||
|
|
||||||
if not delivery.orders:
|
if not delivery.orders:
|
||||||
delivery.orders = {}
|
delivery.orders = {}
|
||||||
|
|
||||||
if not order.products:
|
if not order.products:
|
||||||
if email in delivery.orders:
|
if orderer.id in delivery.orders:
|
||||||
del delivery.orders[email]
|
del delivery.orders[orderer.id]
|
||||||
delivery.persist()
|
delivery.persist()
|
||||||
response.message("La commande est vide.", status="warning")
|
response.message("La commande est vide.", status="warning")
|
||||||
response.redirect = delivery_url
|
response.redirect = delivery_url
|
||||||
return
|
return
|
||||||
delivery.orders[email] = order
|
delivery.orders[orderer.id] = order
|
||||||
delivery.persist()
|
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.
|
# Only send email if order has been placed by the user itself.
|
||||||
emails.send_order(
|
# Send the emails to everyone in the group.
|
||||||
request, env, person=Person(email=email), delivery=delivery, order=order
|
from pdb import set_trace; set_trace()
|
||||||
)
|
groups = request['groups'].groups
|
||||||
response.message(f"La commande pour «{email}» a bien été prise en compte!")
|
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}"
|
response.redirect = f"/livraison/{delivery.id}"
|
||||||
else:
|
else:
|
||||||
order = delivery.orders.get(email) or Order()
|
order = delivery.orders.get(orderer.id) or Order()
|
||||||
response.html(
|
response.html(
|
||||||
"place_order.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):
|
def is_staff(self):
|
||||||
return not config.STAFF or self.email in config.STAFF
|
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
|
@dataclass
|
||||||
class Group(Base):
|
class Group(Base):
|
||||||
|
|
|
@ -9,12 +9,12 @@
|
||||||
<th class="packing">Conditionnement</th>
|
<th class="packing">Conditionnement</th>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<th class="amount">Total</th>
|
<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 %}">
|
<th class="person{% if delivery.is_passed and not order.paid %} not-paid{% endif %}">
|
||||||
{% if request.user and request.user.is_staff %}
|
{% 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 %}
|
{% else %}
|
||||||
<span title="{{ email }}">{{ email }}</span>
|
<span title="{{ orderer }}">{{ orderer }}</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</th>
|
</th>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
{% block body %}
|
{% block body %}
|
||||||
<article class="order">
|
<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" %}
|
{% include "includes/delivery_head.html" %}
|
||||||
<form method="post">
|
<form method="post">
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue