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