mirror of
https://framagit.org/la-chariotte/la-chariotte.git
synced 2025-05-01 11:22:24 +02:00
simplifying code
This commit is contained in:
parent
eaa365dccd
commit
e4bd680fe2
9 changed files with 41 additions and 43 deletions
|
@ -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);
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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()
|
||||||
|
|
||||||
|
|
|
@ -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(
|
||||||
|
|
|
@ -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(),
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -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]
|
||||||
|
|
Loading…
Reference in a new issue