mirror of
https://framagit.org/la-chariotte/la-chariotte.git
synced 2025-05-02 03:42:26 +02:00
parent
8a2852794e
commit
4f98a5ec88
7 changed files with 84 additions and 18 deletions
|
@ -1,20 +1,38 @@
|
|||
import datetime
|
||||
|
||||
from django import forms
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.core.exceptions import NON_FIELD_ERRORS, ValidationError
|
||||
from django.db import IntegrityError
|
||||
|
||||
from la_chariotte import settings
|
||||
from la_chariotte.order.models import GroupedOrder, Item
|
||||
|
||||
|
||||
class GroupedOrderForm(forms.ModelForm):
|
||||
deadline_date = forms.DateField(
|
||||
label="Date limite de commande", widget=forms.DateInput(attrs={"type": "date"})
|
||||
)
|
||||
deadline_time = forms.TimeField(
|
||||
label="Heure limite de commande",
|
||||
widget=forms.TimeInput(attrs={"type": "time"}),
|
||||
initial=datetime.time(hour=23, minute=59, second=59),
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = GroupedOrder
|
||||
fields = ["name", "deadline", "delivery_date", "place", "description"]
|
||||
fields = [
|
||||
"name",
|
||||
"deadline_date",
|
||||
"deadline_time",
|
||||
"delivery_date",
|
||||
"place",
|
||||
"description",
|
||||
]
|
||||
widgets = {
|
||||
"name": forms.TextInput(
|
||||
attrs={"placeholder": "ex : Des oranges pour Noël"}
|
||||
),
|
||||
"deadline": forms.DateTimeInput(attrs={"type": "datetime-local"}),
|
||||
"delivery_date": forms.DateInput(attrs={"type": "date"}),
|
||||
"place": forms.TextInput(attrs={"placeholder": "(facultatif)"}),
|
||||
"description": forms.Textarea(
|
||||
|
@ -34,6 +52,9 @@ class GroupedOrderForm(forms.ModelForm):
|
|||
|
||||
def clean(self):
|
||||
cleaned_data = self.cleaned_data
|
||||
self.instance.deadline = datetime.datetime.combine(
|
||||
self.cleaned_data["deadline_date"], self.cleaned_data["deadline_time"]
|
||||
)
|
||||
|
||||
try:
|
||||
GroupedOrder.objects.get(
|
||||
|
|
|
@ -8,6 +8,8 @@
|
|||
</p>
|
||||
<div class="box">
|
||||
<p class="title">Nouvelle commande</p>
|
||||
<div class="columns">
|
||||
<div class="column is-8">
|
||||
<form method="post">{% csrf_token %}
|
||||
{{ form.as_p }}
|
||||
<div class="buttons">
|
||||
|
@ -16,4 +18,6 @@
|
|||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -62,7 +62,12 @@ class TestGroupedOrderModel:
|
|||
deadline = timezone.now() + datetime.timedelta(days=32)
|
||||
response = client_log.post(
|
||||
create_gorder_url,
|
||||
{"name": "titre test", "deadline": deadline, "delivery_date": date},
|
||||
{
|
||||
"name": "titre test",
|
||||
"deadline_date": deadline.date(),
|
||||
"deadline_time": deadline.time().strftime("%H:%M"),
|
||||
"delivery_date": date,
|
||||
},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
assert not response.context.get("form").is_valid()
|
||||
|
@ -83,7 +88,12 @@ class TestGroupedOrderModel:
|
|||
deadline = timezone.now() + datetime.timedelta(days=32)
|
||||
response = client_log.post(
|
||||
create_gorder_url,
|
||||
{"name": "titre test", "deadline": deadline, "delivery_date": date},
|
||||
{
|
||||
"name": "titre test",
|
||||
"deadline_date": deadline.date(),
|
||||
"deadline_time": deadline.time().strftime("%H:%M"),
|
||||
"delivery_date": date,
|
||||
},
|
||||
)
|
||||
assert response.status_code == 302
|
||||
assert GroupedOrder.objects.count() == 1
|
||||
|
@ -98,7 +108,12 @@ class TestGroupedOrderModel:
|
|||
deadline = timezone.now() - datetime.timedelta(days=3)
|
||||
response = client_log.post(
|
||||
create_gorder_url,
|
||||
{"name": "titre test", "deadline": deadline, "delivery_date": date},
|
||||
{
|
||||
"name": "titre test",
|
||||
"deadline_date": deadline.date(),
|
||||
"deadline_time": deadline.time().strftime("%H:%M"),
|
||||
"delivery_date": date,
|
||||
},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
assert not response.context.get("form").is_valid()
|
||||
|
@ -126,7 +141,12 @@ class TestGroupedOrderModel:
|
|||
deadline_2 = timezone.now() + datetime.timedelta(days=15)
|
||||
response = client_log.post(
|
||||
create_gorder_url,
|
||||
{"name": "commande", "deadline": deadline_2, "delivery_date": date},
|
||||
{
|
||||
"name": "commande",
|
||||
"deadline_date": deadline_2.date(),
|
||||
"deadline_time": deadline_2.time().strftime("%H:%M"),
|
||||
"delivery_date": date,
|
||||
},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
assert not response.context.get("form").is_valid()
|
||||
|
|
|
@ -942,7 +942,12 @@ class TestGroupedOrderCreateView:
|
|||
deadline = timezone.now() + datetime.timedelta(days=32)
|
||||
response = client_log.post(
|
||||
create_gorder_url,
|
||||
{"name": "titre test", "deadline": deadline, "delivery_date": date},
|
||||
{
|
||||
"name": "titre test",
|
||||
"deadline_date": deadline.date(),
|
||||
"deadline_time": deadline.time().strftime("%H:%M"),
|
||||
"delivery_date": date,
|
||||
},
|
||||
)
|
||||
assert response.status_code == 302
|
||||
assert response.url.endswith("gerer-produits")
|
||||
|
@ -1141,7 +1146,12 @@ class TestGroupedOrderAddItemsView:
|
|||
deadline = timezone.now() + datetime.timedelta(days=32)
|
||||
response = client_log.post(
|
||||
create_gorder_url,
|
||||
{"name": "titre test", "deadline": deadline, "delivery_date": date},
|
||||
{
|
||||
"name": "titre test",
|
||||
"deadline_date": deadline.date(),
|
||||
"deadline_time": deadline.time().strftime("%H:%M"),
|
||||
"delivery_date": date,
|
||||
},
|
||||
)
|
||||
assert response.status_code == 302
|
||||
assert response.url.endswith("gerer-produits")
|
||||
|
|
|
@ -129,6 +129,10 @@ LANGUAGE_CODE = "fr-FR"
|
|||
|
||||
TIME_ZONE = "Europe/Paris"
|
||||
|
||||
TIME_INPUT_FORMATS = ["%H:%M"]
|
||||
|
||||
DATE_INPUT_FORMATS = ["%d/%m/%Y"]
|
||||
|
||||
USE_I18N = True
|
||||
|
||||
USE_TZ = True
|
||||
|
|
|
@ -10401,15 +10401,19 @@ a.navbar-item:hover {
|
|||
width: unset;
|
||||
}
|
||||
|
||||
.mini-title, form p label {
|
||||
.mini-title {
|
||||
color: #7a7a7a;
|
||||
font-size: 0.8rem;
|
||||
margin-bottom: 0px !important;
|
||||
}
|
||||
|
||||
form p label {
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
form p label ~ input, form p label ~ textarea {
|
||||
display: block;
|
||||
max-width: 100%;
|
||||
width: 100%;
|
||||
box-shadow: inset 0 0.0625em 0.125em rgba(10, 10, 10, 0.05);
|
||||
}
|
||||
|
||||
|
|
|
@ -23,14 +23,17 @@
|
|||
|
||||
// Forms
|
||||
|
||||
.mini-title, form p label
|
||||
.mini-title
|
||||
color: $grey-text
|
||||
font-size: 0.8rem
|
||||
margin-bottom: 0px !important
|
||||
|
||||
form p label
|
||||
margin-bottom: 0px
|
||||
|
||||
form
|
||||
p
|
||||
label ~ input, label ~ textarea
|
||||
display: block
|
||||
max-width: 100%
|
||||
width: 100%
|
||||
box-shadow: inset 0 0.0625em 0.125em rgba(10, 10, 10, 0.05)
|
Loading…
Reference in a new issue