fix for orders with cards on mobile

This commit is contained in:
Laetitia Getti 2023-06-16 17:24:11 +02:00
parent e87511a266
commit ef00d0b367
3 changed files with 48 additions and 27 deletions

View file

@ -98,7 +98,7 @@
</div>
<div class="card-footer-item">
<input name="quantity_{{ item.id }}" size="2" type="number" value="0" min="0"></input>
{% if item.get_remaining_nb %}<span class="is-italic mini-title"> {{ item.get_remaining_nb }} disponibles</span>{% endif %}
{% if item.get_remaining_nb %}<span class="is-italic mini-title"> {{ item.get_remaining_nb }} {% if item.get_remaining_nb == 1 %}disponible{% else %}disponibles{% endif %}</span>{% endif %}
</div>
</div>
</div>

View file

@ -237,6 +237,9 @@ class TestGroupedOrderDetailView:
item2 = models.Item.objects.create(
name="test item 2", grouped_order=grouped_order, price=5
)
item3 = models.Item.objects.create(
name="test item 3", grouped_order=grouped_order, price=5
)
detail_url = reverse(
"order:grouped_order_detail",
kwargs={
@ -250,6 +253,8 @@ class TestGroupedOrderDetailView:
assert "20 disponibles" in response.content.decode()
assert item.ordered_nb == 0
assert item2.ordered_nb == 0
assert item3.ordered_nb == 0
assert models.OrderedItem.objects.count() == 0
order_url = reverse(
"order:order",
kwargs={
@ -259,8 +264,9 @@ class TestGroupedOrderDetailView:
response = client.post(
order_url,
{
f"quantity_{item.pk}": 4,
f"quantity_{item2.pk}": 1,
f"quantity_{item.pk}": [4, 0],
f"quantity_{item2.pk}": [1, 0],
f"quantity_{item3.pk}": [0, 0],
"first_name": "Prénom",
"last_name": "Nom",
"phone": "0645632569",
@ -288,6 +294,8 @@ class TestGroupedOrderDetailView:
assert order.articles_nb == 5
assert order.price == 9
assert item.get_remaining_nb() == 16
# OrderedItems are not created when the ordered quantity is 0
assert models.OrderedItem.objects.count() == 2
def test_order_item__no_articles_ordered(self, client, other_user):
"""
@ -324,7 +332,7 @@ class TestGroupedOrderDetailView:
response = client.post(
order_url,
{
f"quantity_{item.pk}": 0,
f"quantity_{item.pk}": [0, 0],
"first_name": "Prénom",
"last_name": "Nom",
"phone": "0645632569",
@ -645,7 +653,7 @@ class TestGroupedOrderOverview:
client_log.post(
order_url,
{
f"quantity_{item.pk}": 4,
f"quantity_{item.pk}": [4, 0],
"first_name": "Prénom",
"last_name": "Nom",
"phone": "0645632569",
@ -789,7 +797,7 @@ class TestOrder:
response = client.post(
order_url,
{
f"quantity_{item.pk}": 4,
f"quantity_{item.pk}": [4, 0],
"first_name": "Prénom",
"last_name": "Nom",
"phone": "0645632569",
@ -835,8 +843,8 @@ class TestOrder:
response = client.post(
order_url,
{
f"quantity_{item.pk}": 4,
f"quantity_{item2.pk}": 25,
f"quantity_{item.pk}": [0, 4],
f"quantity_{item2.pk}": [0, 25],
"first_name": "Prénom",
"last_name": "Nom",
"phone": "0645632569",
@ -858,8 +866,8 @@ class TestOrder:
def test_negative_nb_ordered(self, client, other_user):
"""If a user orders a negative nb of articles for an item,
the form is displayed again with an error.
The OrderedItems, OrderAuthor and Order are deleted."""
we consider they ordered 0.
(but it is also blocked by fronted)"""
grouped_order = create_grouped_order(
days_before_delivery_date=5,
days_before_deadline=2,
@ -893,26 +901,31 @@ class TestOrder:
response = client.post(
order_url,
{
f"quantity_{item.pk}": 4,
f"quantity_{item2.pk}": -2,
f"quantity_{item.pk}": [4, 0],
f"quantity_{item2.pk}": [-2, 0],
"first_name": "Prénom",
"last_name": "Nom",
"phone": "0645632569",
"email": "test@mail.fr",
},
)
assert response.status_code == 200
assert (
response.context["error_message"]
== "Veuillez commander un nombre positif de test item 2"
assert response.status_code == 302
order = models.Order.objects.get(grouped_order=grouped_order.pk)
assert response.url == reverse(
"order:order_confirm",
kwargs={
"grouped_order_id": grouped_order.pk,
"pk": order.pk,
},
)
item.refresh_from_db()
item2.refresh_from_db()
assert item.ordered_nb == 0
assert models.OrderAuthor.objects.first().first_name == "Prénom"
assert models.OrderAuthor.objects.first().email == "test@mail.fr"
assert models.OrderAuthor.objects.first().phone == "0645632569"
assert item.ordered_nb == 4
assert item2.ordered_nb == 0
assert not models.OrderAuthor.objects.first()
assert not models.Order.objects.first()
assert not models.OrderedItem.objects.first()
assert order.ordered_items.count() == 1
class TestGroupedOrderCreateView:

View file

@ -174,11 +174,22 @@ def order(request, grouped_order_id):
if not grouped_order.is_ongoing():
return http.HttpResponseForbidden()
# get a dict with (quantity_{{item_id}}:{{quantity}})
# get a dict with quantity_{{item_id}}:[ {{ quantity on phone }},{{ quantity on desktop }} ]
orders_dict = {
key: value for key, value in request.POST.items() if key.startswith("quantity")
key: request.POST.getlist(key)
for key, value in request.POST.items()
if key.startswith("quantity")
}
# transform it into quantity_{{item_id}}: {{ greatest of the two quantities }}
for i in orders_dict:
value = (
orders_dict[i][0]
if orders_dict[i][0] >= orders_dict[i][1]
else orders_dict[i][1]
)
orders_dict[i] = value
# create an order
first_name = request.POST["first_name"]
last_name = request.POST["last_name"]
@ -243,11 +254,8 @@ def order(request, grouped_order_id):
def validate_item_ordered_nb(item, ordered_nb):
"""Returns an error message if the ordered items are not available
or if the ordered nb is negative"""
if ordered_nb < 0:
return f"Veuillez commander un nombre positif de {item.name}"
if item.get_remaining_nb() is not None and item.get_remaining_nb() - ordered_nb < 0:
"""Returns an error message if the ordered items are not available"""
if item.get_remaining_nb() and item.get_remaining_nb() - ordered_nb < 0:
return f"Trop de {item.name} commandés pour la quantité disponible"
return None