mirror of
https://framagit.org/la-chariotte/la-chariotte.git
synced 2025-05-01 19:32:26 +02:00
fix for orders with cards on mobile
This commit is contained in:
parent
e87511a266
commit
ef00d0b367
3 changed files with 48 additions and 27 deletions
|
@ -98,7 +98,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="card-footer-item">
|
<div class="card-footer-item">
|
||||||
<input name="quantity_{{ item.id }}" size="2" type="number" value="0" min="0"></input>
|
<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>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -237,6 +237,9 @@ class TestGroupedOrderDetailView:
|
||||||
item2 = models.Item.objects.create(
|
item2 = models.Item.objects.create(
|
||||||
name="test item 2", grouped_order=grouped_order, price=5
|
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(
|
detail_url = reverse(
|
||||||
"order:grouped_order_detail",
|
"order:grouped_order_detail",
|
||||||
kwargs={
|
kwargs={
|
||||||
|
@ -250,6 +253,8 @@ class TestGroupedOrderDetailView:
|
||||||
assert "20 disponibles" in response.content.decode()
|
assert "20 disponibles" in response.content.decode()
|
||||||
assert item.ordered_nb == 0
|
assert item.ordered_nb == 0
|
||||||
assert item2.ordered_nb == 0
|
assert item2.ordered_nb == 0
|
||||||
|
assert item3.ordered_nb == 0
|
||||||
|
assert models.OrderedItem.objects.count() == 0
|
||||||
order_url = reverse(
|
order_url = reverse(
|
||||||
"order:order",
|
"order:order",
|
||||||
kwargs={
|
kwargs={
|
||||||
|
@ -259,8 +264,9 @@ class TestGroupedOrderDetailView:
|
||||||
response = client.post(
|
response = client.post(
|
||||||
order_url,
|
order_url,
|
||||||
{
|
{
|
||||||
f"quantity_{item.pk}": 4,
|
f"quantity_{item.pk}": [4, 0],
|
||||||
f"quantity_{item2.pk}": 1,
|
f"quantity_{item2.pk}": [1, 0],
|
||||||
|
f"quantity_{item3.pk}": [0, 0],
|
||||||
"first_name": "Prénom",
|
"first_name": "Prénom",
|
||||||
"last_name": "Nom",
|
"last_name": "Nom",
|
||||||
"phone": "0645632569",
|
"phone": "0645632569",
|
||||||
|
@ -288,6 +294,8 @@ class TestGroupedOrderDetailView:
|
||||||
assert order.articles_nb == 5
|
assert order.articles_nb == 5
|
||||||
assert order.price == 9
|
assert order.price == 9
|
||||||
assert item.get_remaining_nb() == 16
|
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):
|
def test_order_item__no_articles_ordered(self, client, other_user):
|
||||||
"""
|
"""
|
||||||
|
@ -324,7 +332,7 @@ class TestGroupedOrderDetailView:
|
||||||
response = client.post(
|
response = client.post(
|
||||||
order_url,
|
order_url,
|
||||||
{
|
{
|
||||||
f"quantity_{item.pk}": 0,
|
f"quantity_{item.pk}": [0, 0],
|
||||||
"first_name": "Prénom",
|
"first_name": "Prénom",
|
||||||
"last_name": "Nom",
|
"last_name": "Nom",
|
||||||
"phone": "0645632569",
|
"phone": "0645632569",
|
||||||
|
@ -645,7 +653,7 @@ class TestGroupedOrderOverview:
|
||||||
client_log.post(
|
client_log.post(
|
||||||
order_url,
|
order_url,
|
||||||
{
|
{
|
||||||
f"quantity_{item.pk}": 4,
|
f"quantity_{item.pk}": [4, 0],
|
||||||
"first_name": "Prénom",
|
"first_name": "Prénom",
|
||||||
"last_name": "Nom",
|
"last_name": "Nom",
|
||||||
"phone": "0645632569",
|
"phone": "0645632569",
|
||||||
|
@ -789,7 +797,7 @@ class TestOrder:
|
||||||
response = client.post(
|
response = client.post(
|
||||||
order_url,
|
order_url,
|
||||||
{
|
{
|
||||||
f"quantity_{item.pk}": 4,
|
f"quantity_{item.pk}": [4, 0],
|
||||||
"first_name": "Prénom",
|
"first_name": "Prénom",
|
||||||
"last_name": "Nom",
|
"last_name": "Nom",
|
||||||
"phone": "0645632569",
|
"phone": "0645632569",
|
||||||
|
@ -835,8 +843,8 @@ class TestOrder:
|
||||||
response = client.post(
|
response = client.post(
|
||||||
order_url,
|
order_url,
|
||||||
{
|
{
|
||||||
f"quantity_{item.pk}": 4,
|
f"quantity_{item.pk}": [0, 4],
|
||||||
f"quantity_{item2.pk}": 25,
|
f"quantity_{item2.pk}": [0, 25],
|
||||||
"first_name": "Prénom",
|
"first_name": "Prénom",
|
||||||
"last_name": "Nom",
|
"last_name": "Nom",
|
||||||
"phone": "0645632569",
|
"phone": "0645632569",
|
||||||
|
@ -858,8 +866,8 @@ class TestOrder:
|
||||||
|
|
||||||
def test_negative_nb_ordered(self, client, other_user):
|
def test_negative_nb_ordered(self, client, other_user):
|
||||||
"""If a user orders a negative nb of articles for an item,
|
"""If a user orders a negative nb of articles for an item,
|
||||||
the form is displayed again with an error.
|
we consider they ordered 0.
|
||||||
The OrderedItems, OrderAuthor and Order are deleted."""
|
(but it is also blocked by fronted)"""
|
||||||
grouped_order = create_grouped_order(
|
grouped_order = create_grouped_order(
|
||||||
days_before_delivery_date=5,
|
days_before_delivery_date=5,
|
||||||
days_before_deadline=2,
|
days_before_deadline=2,
|
||||||
|
@ -893,26 +901,31 @@ class TestOrder:
|
||||||
response = client.post(
|
response = client.post(
|
||||||
order_url,
|
order_url,
|
||||||
{
|
{
|
||||||
f"quantity_{item.pk}": 4,
|
f"quantity_{item.pk}": [4, 0],
|
||||||
f"quantity_{item2.pk}": -2,
|
f"quantity_{item2.pk}": [-2, 0],
|
||||||
"first_name": "Prénom",
|
"first_name": "Prénom",
|
||||||
"last_name": "Nom",
|
"last_name": "Nom",
|
||||||
"phone": "0645632569",
|
"phone": "0645632569",
|
||||||
"email": "test@mail.fr",
|
"email": "test@mail.fr",
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
assert response.status_code == 200
|
assert response.status_code == 302
|
||||||
assert (
|
order = models.Order.objects.get(grouped_order=grouped_order.pk)
|
||||||
response.context["error_message"]
|
assert response.url == reverse(
|
||||||
== "Veuillez commander un nombre positif de test item 2"
|
"order:order_confirm",
|
||||||
|
kwargs={
|
||||||
|
"grouped_order_id": grouped_order.pk,
|
||||||
|
"pk": order.pk,
|
||||||
|
},
|
||||||
)
|
)
|
||||||
item.refresh_from_db()
|
item.refresh_from_db()
|
||||||
item2.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 item2.ordered_nb == 0
|
||||||
assert not models.OrderAuthor.objects.first()
|
assert order.ordered_items.count() == 1
|
||||||
assert not models.Order.objects.first()
|
|
||||||
assert not models.OrderedItem.objects.first()
|
|
||||||
|
|
||||||
|
|
||||||
class TestGroupedOrderCreateView:
|
class TestGroupedOrderCreateView:
|
||||||
|
|
|
@ -174,11 +174,22 @@ def order(request, grouped_order_id):
|
||||||
if not grouped_order.is_ongoing():
|
if not grouped_order.is_ongoing():
|
||||||
return http.HttpResponseForbidden()
|
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 = {
|
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
|
# create an order
|
||||||
first_name = request.POST["first_name"]
|
first_name = request.POST["first_name"]
|
||||||
last_name = request.POST["last_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):
|
def validate_item_ordered_nb(item, ordered_nb):
|
||||||
"""Returns an error message if the ordered items are not available
|
"""Returns an error message if the ordered items are not available"""
|
||||||
or if the ordered nb is negative"""
|
if item.get_remaining_nb() and item.get_remaining_nb() - ordered_nb < 0:
|
||||||
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:
|
|
||||||
return f"Trop de {item.name} commandés pour la quantité disponible"
|
return f"Trop de {item.name} commandés pour la quantité disponible"
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue