simplifying code

This commit is contained in:
Laetitia Getti 2023-07-31 12:24:48 +02:00 committed by Laetitia Getti
parent eaa365dccd
commit e4bd680fe2
9 changed files with 41 additions and 43 deletions

View file

@ -138,15 +138,15 @@
<div class="columns"> <div class="columns">
<div class="column"> <div class="column">
<p><label for="first_name">Prénom : </label> <p><label for="first_name">Prénom : </label>
<input id="first_name" type="text" name="first_name" placeholder="Votre prénom" value="{{ first_name }}" required></p> <input id="first_name" type="text" name="first_name" placeholder="Votre prénom" value="{{ author.first_name }}" required></p>
<p><label for="first_name">Nom : </label> <p><label for="first_name">Nom : </label>
<input id="last_name" type="text" name="last_name" placeholder="Votre nom" value="{{ last_name }}" required></p> <input id="last_name" type="text" name="last_name" placeholder="Votre nom" value="{{ author.last_name }}" required></p>
</div> </div>
<div class="column"> <div class="column">
<p><label for="phone">Numéro de téléphone :</label> <p><label for="phone">Numéro de téléphone :</label>
<input id="phone" type="tel" pattern="[0-9]{10}" placeholder="0601020304" name="phone" value="{{ phone }}" required></p> <input id="phone" type="tel" pattern="[0-9]{10}" placeholder="0601020304" name="phone" value="{{ author.phone }}" required></p>
<p><label for="email">Adresse mail : </label> <p><label for="email">Adresse mail : </label>
<input id="email" type="email" placeholder="exemple@mail.fr" name="email" value="{{ email }}" required></p> <input id="email" type="email" placeholder="exemple@mail.fr" name="email" value="{{ author.email }}" required></p>
</div> </div>
</div> </div>
<p><label for="note">Note à l'organisateur·ice</label> <p><label for="note">Note à l'organisateur·ice</label>
@ -170,13 +170,13 @@
function findTotal(){ function findTotal(){
var inputs = document.getElementsByTagName("input"); var inputs = document.getElementsByTagName("input");
total_price = 0; total_price = 0;
for (x = 0 ; x < inputs.length ; x++){ for(let input of inputs){
input_name = inputs[x].getAttribute("name"); input_name = input.getAttribute("name");
if(input_name.indexOf("quantity_")==0){ // get the quantities inputs only if(input_name.indexOf("quantity_")==0){ // get the quantities inputs only
item_id = input_name.split("_")[1]; item_id = input_name.split("_")[1];
prices = {{ prices_dict | safe }}; prices = {{ prices_dict | safe }};
total_price += prices[item_id] * inputs[x].value; total_price += prices[item_id] * input.value;
console.log(prices[item_id] * inputs[x].value); console.log(prices[item_id] * input.value);
} }
} }
console.log(total_price); console.log(total_price);

View file

@ -182,7 +182,7 @@
<div class="columns"> <div class="columns">
<div class="column"> <div class="column">
{% for item in order.ordered_items.all %} {% for item in order.ordered_items.all %}
{{ item.nb }} x {{ item.item.name }} {{ item.nb }} × {{ item.item.name }}
<hr class="mb-0 mt-1"> <hr class="mb-0 mt-1">
{% endfor %} {% endfor %}
</div> </div>
@ -214,7 +214,7 @@
<div class="columns"> <div class="columns">
<div class="column"> <div class="column">
{% for item in order.ordered_items.all %} {% for item in order.ordered_items.all %}
{{ item.nb }} x {{ item.item.name }} {{ item.nb }} × {{ item.item.name }}
<hr class="mb-0 mt-1"> <hr class="mb-0 mt-1">
{% endfor %} {% endfor %}
</div> </div>

View file

@ -15,7 +15,7 @@
<p><strong>Votre commande</strong></p> <p><strong>Votre commande</strong></p>
<ul> <ul>
{% for item in order.ordered_items.all %} {% for item in order.ordered_items.all %}
<li>{{ item.nb }} x {{ item.item }} : {{ item.get_price }} €</li> <li>{{ item.nb }} × {{ item.item }} : {{ item.get_price }} €</li>
{% endfor %} {% endfor %}
</ul> </ul>
<p>Prix total de la commande : <strong>{{ order.price }} €</strong> <p>Prix total de la commande : <strong>{{ order.price }} €</strong>

View file

@ -258,14 +258,15 @@ class TestGroupedOrderDetailView:
) )
item.refresh_from_db() item.refresh_from_db()
item2.refresh_from_db() item2.refresh_from_db()
assert models.OrderAuthor.objects.first().first_name == "Prénom" author = models.OrderAuthor.objects.first()
assert models.OrderAuthor.objects.first().email == "test@mail.fr" order = models.Order.objects.first()
assert models.OrderAuthor.objects.first().phone == "0645632569" assert author.first_name == "Prénom"
assert models.Order.objects.first().note == "note test" assert author.email == "test@mail.fr"
assert models.Order.objects.first().created_date.date() == timezone.now().date() assert author.phone == "0645632569"
assert order.note == "note test"
assert order.created_date.date() == timezone.now().date()
assert item.ordered_nb == 4 assert item.ordered_nb == 4
assert item2.ordered_nb == 1 assert item2.ordered_nb == 1
order = models.Order.objects.first()
assert order.ordered_items.count() == 2 assert order.ordered_items.count() == 2
assert order.articles_nb == 5 assert order.articles_nb == 5
assert order.price == 9 assert order.price == 9
@ -321,12 +322,13 @@ class TestGroupedOrderDetailView:
response.context["error_message"] response.context["error_message"]
== "Veuillez commander au moins un produit" == "Veuillez commander au moins un produit"
) )
assert response.context["first_name"] == "Prénom test" assert response.context["author"].first_name == "Prénom test"
assert "Prénom test" in response.content.decode() content = response.content.decode()
assert "Nom test" in response.content.decode() assert "Prénom test" in content
assert "0645632569" in response.content.decode() assert "Nom test" in content
assert "test@mail.fr" in response.content.decode() assert "0645632569" in content
assert "test note" in response.content.decode() assert "test@mail.fr" in content
assert "test note" in content
assert not models.Order.objects.first() assert not models.Order.objects.first()
assert not models.OrderAuthor.objects.first() assert not models.OrderAuthor.objects.first()

View file

@ -15,7 +15,7 @@ pytestmark = pytest.mark.django_db
class TestOrder: class TestOrder:
def test_order_deadline_passed(self, client, other_user): def test_order_deadline_passed__raise_errors(self, client, other_user):
"""A user orders when the deadline is passed. They get a 403 error""" """A user orders when the deadline is passed. They get a 403 error"""
grouped_order = create_grouped_order( grouped_order = create_grouped_order(
days_before_delivery_date=5, days_before_delivery_date=5,
@ -47,7 +47,7 @@ class TestOrder:
) )
assert response.status_code == 403 assert response.status_code == 403
def test_order_deadline_passed__orga(self, client_log): def test_order_deadline_passed__still_works_for_orga(self, client_log):
"""The orga user orders when the deadline is passed, but the delivery is to come. It works""" """The orga user orders when the deadline is passed, but the delivery is to come. It works"""
grouped_order = create_grouped_order( grouped_order = create_grouped_order(

View file

@ -13,7 +13,7 @@ urlpatterns = [
views.GroupedOrderOverview.as_view(), views.GroupedOrderOverview.as_view(),
name="grouped_order_overview", name="grouped_order_overview",
), ),
path("<int:grouped_order_id>/commander/", views.order, name="order"), path("<int:grouped_order_id>/commander/", views.place_order, name="order"),
path( path(
"<int:grouped_order_id>/<int:pk>/confirmation/", "<int:grouped_order_id>/<int:pk>/confirmation/",
views.OrderDetailView.as_view(), views.OrderDetailView.as_view(),

View file

@ -7,6 +7,6 @@ from .grouped_order import (DownloadGroupedOrderSheetView,
GroupedOrderSheetView, GroupedOrderUpdateView, GroupedOrderSheetView, GroupedOrderUpdateView,
IndexView) IndexView)
from .item import ItemCreateView, ItemDeleteView from .item import ItemCreateView, ItemDeleteView
from .order import OrderDeleteView, OrderDetailView, order from .order import OrderDeleteView, OrderDetailView, place_order
# fmt: on # fmt: on

View file

@ -7,17 +7,19 @@ from django.views import generic
from ..models import GroupedOrder, Order, OrderAuthor, OrderedItem from ..models import GroupedOrder, Order, OrderAuthor, OrderedItem
def order(request, grouped_order_id): def place_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 or if the user is allowed to order # check if the grouped order is ongoing or if the user is allowed to order
if request.user != grouped_order.orga: user_is_orga = request.user == grouped_order.orga
if not grouped_order.is_ongoing(): is_to_be_delivered = grouped_order.is_to_be_delivered()
return http.HttpResponseForbidden() is_ongoing = grouped_order.is_ongoing()
else:
if not grouped_order.is_to_be_delivered(): access_allowed = is_ongoing or (user_is_orga and is_to_be_delivered)
return http.HttpResponseForbidden()
if not access_allowed:
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 = {
@ -69,11 +71,8 @@ def order(request, grouped_order_id):
{ {
"grouped_order": grouped_order, "grouped_order": grouped_order,
"error_message": error_message, "error_message": error_message,
"first_name": author.first_name,
"last_name": author.last_name,
"phone": author.phone,
"email": author.email,
"note": order.note, "note": order.note,
"author": author,
}, },
) )
@ -90,11 +89,8 @@ def order(request, grouped_order_id):
{ {
"grouped_order": grouped_order, "grouped_order": grouped_order,
"error_message": error_message, "error_message": error_message,
"first_name": author.first_name,
"last_name": author.last_name,
"phone": author.phone,
"email": author.email,
"note": order.note, "note": order.note,
"author": author,
}, },
) )

View file

@ -32,7 +32,7 @@ dev = [
[tool.pytest.ini_options] [tool.pytest.ini_options]
DJANGO_SETTINGS_MODULE = "la_chariotte.settings" DJANGO_SETTINGS_MODULE = "la_chariotte.settings"
addopts = "--isort --black --reuse-db --cov-report xml --cov-report term-missing --cov=la_chariotte -p no:warnings" addopts = "-x --ff --isort --black --reuse-db --cov-report xml --cov-report term-missing --cov=la_chariotte -p no:warnings"
isort_ignore = ["*migrations/*.py"] isort_ignore = ["*migrations/*.py"]
[tool.isort] [tool.isort]