separate date and time in grouped order create form

closes #88
This commit is contained in:
Laetitia Getti 2023-06-26 15:20:08 +02:00
parent 8a2852794e
commit 4f98a5ec88
7 changed files with 84 additions and 18 deletions

View file

@ -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(

View file

@ -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">
@ -15,5 +17,7 @@
<input class="button is-primary" type="submit" value="Suivant">
</div>
</form>
</div>
</div>
</div>
{% endblock %}

View file

@ -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()

View file

@ -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")

View file

@ -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

View file

@ -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);
}

View file

@ -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)