mirror of
https://framagit.org/la-chariotte/la-chariotte.git
synced 2025-05-01 11:22:24 +02:00
orga can order after deadline and update version
This commit is contained in:
parent
27fc20090e
commit
0aba581434
7 changed files with 96 additions and 8 deletions
|
@ -26,3 +26,11 @@
|
||||||
- use weasyprint
|
- use weasyprint
|
||||||
- not display non null values
|
- not display non null values
|
||||||
- sort names in alphabetical order
|
- sort names in alphabetical order
|
||||||
|
|
||||||
|
- v0.4.2 : improve order form
|
||||||
|
- add a note to organizer
|
||||||
|
- add date attribute to an order
|
||||||
|
- the values stay in the form when an error is raised
|
||||||
|
- the items are sorted in alphabetical order
|
||||||
|
- display total price on form
|
||||||
|
- only valid phone numbers are accepted
|
|
@ -1,4 +1,4 @@
|
||||||
# La Chariotte | 0.4.1
|
# La Chariotte | 0.4.2
|
||||||
|
|
||||||
## Présentation
|
## Présentation
|
||||||
|
|
||||||
|
@ -124,6 +124,8 @@ classDiagram
|
||||||
grouped_order : GroupedOrder
|
grouped_order : GroupedOrder
|
||||||
author : OrderAuthor
|
author : OrderAuthor
|
||||||
price
|
price
|
||||||
|
created_date
|
||||||
|
note
|
||||||
}
|
}
|
||||||
class OrderedItem{
|
class OrderedItem{
|
||||||
order : Order
|
order : Order
|
||||||
|
|
|
@ -49,6 +49,7 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="box">
|
<div class="box">
|
||||||
|
<!-- Boite à messages -->
|
||||||
{% if not grouped_order.is_to_be_delivered %}
|
{% if not grouped_order.is_to_be_delivered %}
|
||||||
<p>
|
<p>
|
||||||
<strong>Cette commande groupée est terminée</strong>, la livraison a eu lieu le {{ grouped_order.deadline }}.
|
<strong>Cette commande groupée est terminée</strong>, la livraison a eu lieu le {{ grouped_order.deadline }}.
|
||||||
|
@ -56,9 +57,15 @@
|
||||||
{% elif not grouped_order.is_ongoing %}
|
{% elif not grouped_order.is_ongoing %}
|
||||||
<p>
|
<p>
|
||||||
<strong>La période de commande est terminée</strong> depuis le {{ grouped_order.deadline }}.
|
<strong>La période de commande est terminée</strong> depuis le {{ grouped_order.deadline }}.
|
||||||
|
{% if user == grouped_order.orga %}
|
||||||
|
En tant qu'organisateur·ice, vous pouvez encore commander jusqu'à la date de livraison.
|
||||||
|
{% else %}
|
||||||
Si vous aviez commandé, rendez-vous le {{ grouped_order.delivery_date }} pour récupérer vos produits !
|
Si vous aviez commandé, rendez-vous le {{ grouped_order.delivery_date }} pour récupérer vos produits !
|
||||||
|
{% endif %}
|
||||||
</p>
|
</p>
|
||||||
{% elif not grouped_order.item_set.first %}
|
{% endif %}
|
||||||
|
{% if grouped_order.is_ongoing or user == grouped_order.orga and grouped_order.is_to_be_delivered %}
|
||||||
|
{% if not grouped_order.item_set.first %}
|
||||||
<p>Il n'y a pas de produits disponibles dans cette commande !</p>
|
<p>Il n'y a pas de produits disponibles dans cette commande !</p>
|
||||||
{% else %}
|
{% else %}
|
||||||
<p class="title">Commander</p>
|
<p class="title">Commander</p>
|
||||||
|
@ -153,6 +160,7 @@
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
|
|
@ -838,6 +838,72 @@ class TestOrder:
|
||||||
)
|
)
|
||||||
assert response.status_code == 403
|
assert response.status_code == 403
|
||||||
|
|
||||||
|
def test_order_deadline_passed__orga(self, client_log):
|
||||||
|
"""The orga user orders when the deadline is passed, but the delivery is to come. It works"""
|
||||||
|
|
||||||
|
grouped_order = create_grouped_order(
|
||||||
|
days_before_delivery_date=5,
|
||||||
|
days_before_deadline=-1,
|
||||||
|
name="gr order test",
|
||||||
|
orga_user=auth.get_user(client_log),
|
||||||
|
)
|
||||||
|
item = models.Item.objects.create(
|
||||||
|
name="test item 1", grouped_order=grouped_order, price=2
|
||||||
|
)
|
||||||
|
|
||||||
|
# some items are ordered
|
||||||
|
order_url = reverse(
|
||||||
|
"order:order",
|
||||||
|
kwargs={
|
||||||
|
"grouped_order_id": grouped_order.pk,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
response = client_log.post(
|
||||||
|
order_url,
|
||||||
|
{
|
||||||
|
f"quantity_{item.pk}": [4, 0],
|
||||||
|
"first_name": "Prénom",
|
||||||
|
"last_name": "Nom",
|
||||||
|
"phone": "0645632569",
|
||||||
|
"email": "test@mail.fr",
|
||||||
|
"note": "",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
assert response.status_code == 302
|
||||||
|
|
||||||
|
def test_order_delivery_passed__orga(self, client_log):
|
||||||
|
"""The orga user orders when the deadline and the delivery are passed. The get a 403 error"""
|
||||||
|
|
||||||
|
grouped_order = create_grouped_order(
|
||||||
|
days_before_delivery_date=-2,
|
||||||
|
days_before_deadline=-4,
|
||||||
|
name="gr order test",
|
||||||
|
orga_user=auth.get_user(client_log),
|
||||||
|
)
|
||||||
|
item = models.Item.objects.create(
|
||||||
|
name="test item 1", grouped_order=grouped_order, price=2
|
||||||
|
)
|
||||||
|
|
||||||
|
# some items are ordered
|
||||||
|
order_url = reverse(
|
||||||
|
"order:order",
|
||||||
|
kwargs={
|
||||||
|
"grouped_order_id": grouped_order.pk,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
response = client_log.post(
|
||||||
|
order_url,
|
||||||
|
{
|
||||||
|
f"quantity_{item.pk}": [4, 0],
|
||||||
|
"first_name": "Prénom",
|
||||||
|
"last_name": "Nom",
|
||||||
|
"phone": "0645632569",
|
||||||
|
"email": "test@mail.fr",
|
||||||
|
"note": "",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
assert response.status_code == 403
|
||||||
|
|
||||||
def test_order_too_many_items_ordered(self, client, other_user):
|
def test_order_too_many_items_ordered(self, client, other_user):
|
||||||
"""If a user orderd more articles than what is available,
|
"""If a user orderd more articles than what is available,
|
||||||
the form is displayed again with an error.
|
the form is displayed again with an error.
|
||||||
|
|
|
@ -10,9 +10,13 @@ def order(request, grouped_order_id):
|
||||||
"""Creates an AnonymousUser, and an Order for this GroupedOrder, with related OrderedItems"""
|
"""Creates an AnonymousUser, and an Order for this GroupedOrder, with related OrderedItems"""
|
||||||
grouped_order = get_object_or_404(GroupedOrder, pk=grouped_order_id)
|
grouped_order = get_object_or_404(GroupedOrder, pk=grouped_order_id)
|
||||||
|
|
||||||
# check if the grouped order is ongoing
|
# check if the grouped order is ongoing or if the user is allowed to order
|
||||||
if not grouped_order.is_ongoing():
|
if request.user != grouped_order.orga:
|
||||||
return http.HttpResponseForbidden()
|
if not grouped_order.is_ongoing():
|
||||||
|
return http.HttpResponseForbidden()
|
||||||
|
else:
|
||||||
|
if not grouped_order.is_to_be_delivered():
|
||||||
|
return http.HttpResponseForbidden()
|
||||||
|
|
||||||
# get a dict with quantity_{{item_id}}:[ {{ quantity on phone }},{{ quantity on desktop }} ]
|
# get a dict with quantity_{{item_id}}:[ {{ quantity on phone }},{{ quantity on desktop }} ]
|
||||||
orders_dict = {
|
orders_dict = {
|
||||||
|
|
|
@ -130,7 +130,7 @@
|
||||||
<div class="content has-text-centered columns">
|
<div class="content has-text-centered columns">
|
||||||
<div class="column">
|
<div class="column">
|
||||||
<p>
|
<p>
|
||||||
<strong>La Chariotte</strong> | version 0.4.0
|
<strong>La Chariotte</strong> | version 0.4.2
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="column">
|
<div class="column">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[project]
|
[project]
|
||||||
name = "la_chariotte"
|
name = "la_chariotte"
|
||||||
version = "0.4.1"
|
version = "0.4.2"
|
||||||
description = "Web application for organising grouped orders"
|
description = "Web application for organising grouped orders"
|
||||||
authors = [{name = "Laetitia Getti", email = "laetitia@chariotte.fr"}]
|
authors = [{name = "Laetitia Getti", email = "laetitia@chariotte.fr"}]
|
||||||
readme = "readMe.md"
|
readme = "readMe.md"
|
||||||
|
|
Loading…
Reference in a new issue