mirror of
https://github.com/almet/copanier.git
synced 2025-04-28 19:42:37 +02:00
Deal with from/to time
This commit is contained in:
parent
ab1710d1e4
commit
4c34c2bacd
9 changed files with 67 additions and 20 deletions
|
@ -56,6 +56,17 @@ env = Environment(
|
|||
)
|
||||
|
||||
|
||||
def date_filter(value):
|
||||
return value.strftime("%d/%m/%Y")
|
||||
|
||||
|
||||
def time_filter(value):
|
||||
return value.strftime("%H:%M")
|
||||
|
||||
|
||||
env.filters["date"] = date_filter
|
||||
env.filters["time"] = time_filter
|
||||
|
||||
app = Roll()
|
||||
cors(app, methods="*", headers="*")
|
||||
options(app)
|
||||
|
@ -142,17 +153,19 @@ async def home(request, response):
|
|||
response.html("home.html", deliveries=Delivery.all())
|
||||
|
||||
|
||||
@app.route("/livraison/new", methods=["GET"])
|
||||
@app.route("/livraison", methods=["GET"])
|
||||
@auth_required
|
||||
async def new_delivery(request, response):
|
||||
response.html("edit_delivery.html", delivery={})
|
||||
|
||||
|
||||
@app.route("/livraison/new", methods=["POST"])
|
||||
@app.route("/livraison", methods=["POST"])
|
||||
@auth_required
|
||||
async def create_delivery(request, response):
|
||||
form = request.form
|
||||
data = {}
|
||||
data["from_date"] = f"{form.get('date')} {form.get('from_time')}"
|
||||
data["to_date"] = f"{form.get('date')} {form.get('to_time')}"
|
||||
for name, field in Delivery.__dataclass_fields__.items():
|
||||
if name in form:
|
||||
data[name] = form.get(name)
|
||||
|
@ -189,6 +202,8 @@ async def edit_delivery(request, response, id):
|
|||
async def post_delivery(request, response, id):
|
||||
delivery = Delivery.load(id)
|
||||
form = request.form
|
||||
delivery.from_date = f"{form.get('date')} {form.get('from_time')}"
|
||||
delivery.to_date = f"{form.get('date')} {form.get('to_time')}"
|
||||
for name, field in Delivery.__dataclass_fields__.items():
|
||||
if name in form:
|
||||
setattr(delivery, name, form.get(name))
|
||||
|
|
|
@ -122,7 +122,8 @@ class Delivery(Base):
|
|||
__lock__ = threading.Lock()
|
||||
|
||||
producer: str
|
||||
when: datetime_field
|
||||
from_date: datetime_field
|
||||
to_date: datetime_field
|
||||
order_before: datetime_field
|
||||
description: str = ""
|
||||
where: str = "Marché de la Briche"
|
||||
|
|
|
@ -219,15 +219,12 @@ fieldset {
|
|||
}
|
||||
legend {
|
||||
width: 100%;
|
||||
/* margin-top: 2rem;
|
||||
margin-bottom: 1rem; */
|
||||
font-size: 1.2rem;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
input,
|
||||
textarea {
|
||||
display: block;
|
||||
position: relative;
|
||||
height: 2rem;
|
||||
padding: .4rem .8rem;
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
<section class="menu">
|
||||
<h1><a href="/">Panio</a> <small>Les paniers piano d'Épinamap</small></h1>
|
||||
<nav>
|
||||
<a href="/livraison/new">Nouvelle livraison</a>
|
||||
<a href="/livraison">Nouvelle livraison</a>
|
||||
{% if request["user"] %}
|
||||
⚫ {{ request["user"].email }}</span>
|
||||
{% endif %}
|
||||
|
|
|
@ -1,8 +1,11 @@
|
|||
{% extends "base.html" %}
|
||||
|
||||
{% block body %}
|
||||
<p><a href="/">< Revenir aux livraisons</a></p>
|
||||
<h1>Nouvelle livraison</h1>
|
||||
{% if delivery.id %}
|
||||
<h1>Modifier la livraison</h1>
|
||||
{% else %}
|
||||
<h1>Nouvelle livraison</h1>
|
||||
{% endif %}
|
||||
<form method="post">
|
||||
<label>
|
||||
<h5>Producteur</h5>
|
||||
|
@ -18,8 +21,7 @@
|
|||
</label>
|
||||
<label>
|
||||
<h5>Date de livraison</h5>
|
||||
<input type="date" name="when" value="{{ delivery.when.date() if delivery.when else '' }}" required>
|
||||
<input type="time" name="when_time" value="{{ delivery.when.time() if delivery.when else '' }}" required>
|
||||
<input type="date" name="date" value="{{ delivery.from_date.date() if delivery.from_date else '' }}" required> de <input type="time" name="from_time" value="{{ delivery.from_date.time() if delivery.from_date else '' }}" required> à <input type="time" name="to_time" value="{{ delivery.to_date.time() if delivery.to_date else '' }}" required>
|
||||
</label>
|
||||
<label>
|
||||
<h5>Date de limite de commande</h5>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<ul class="delivery-head">
|
||||
<li><i class="icon-basket"></i> <strong>Produits</strong> {{ delivery.description }}</li>
|
||||
<li><i class="icon-map-pin"></i> <strong>Lieu</strong> {{ delivery.where }}</li>
|
||||
<li><i class="icon-clock"></i> <strong>Date de livraison</strong> <time datetime="{{ delivery.when }}">{{ delivery.when }}</time></li>
|
||||
<li><i class="icon-clock"></i> <strong>Date de livraison</strong> <time datetime="{{ delivery.from_date }}">{{ delivery.from_date|date }} de {{ delivery.from_date|time }} à {{ delivery.to_date|time }}</time></li>
|
||||
<li><i class="icon-hourglass"></i> {% if delivery.is_open %}<strong>Date limite de commande</strong> <time datetime="{{ delivery.order_before.date() }}">{{ delivery.order_before.date() }}</time>{% else %}<strong>Fermée</strong>{% endif %}</li>
|
||||
</ul>
|
||||
|
|
|
@ -23,6 +23,7 @@ def pytest_runtest_setup(item):
|
|||
|
||||
|
||||
class Client(BaseClient):
|
||||
content_type = 'application/x-www-form-urlencoded; charset=utf-8'
|
||||
headers = {}
|
||||
|
||||
async def request(
|
||||
|
@ -65,7 +66,8 @@ def app(): # Requested by Roll testing utilities.
|
|||
def delivery():
|
||||
return Delivery(
|
||||
producer="Andines",
|
||||
when=datetime.now() + timedelta(days=10),
|
||||
from_date=datetime.now() + timedelta(days=10),
|
||||
to_date=datetime.now() + timedelta(days=10),
|
||||
order_before=datetime.now() + timedelta(days=7),
|
||||
)
|
||||
|
||||
|
|
|
@ -9,16 +9,20 @@ now = datetime.now
|
|||
|
||||
|
||||
def test_can_create_delivery():
|
||||
delivery = Delivery(producer="Andines", when=now(), order_before=now())
|
||||
delivery = Delivery(
|
||||
producer="Andines", from_date=now(), to_date=now(), order_before=now()
|
||||
)
|
||||
assert delivery.producer == "Andines"
|
||||
assert delivery.where == "Marché de la Briche"
|
||||
assert delivery.when.year == now().year
|
||||
assert delivery.from_date.year == now().year
|
||||
assert delivery.id
|
||||
|
||||
|
||||
def test_wrong_datetime_raise_valueerror():
|
||||
with pytest.raises(ValueError):
|
||||
Delivery(producer="Andines", order_before=now(), when="pouet")
|
||||
Delivery(
|
||||
producer="Andines", order_before=now(), to_date=now(), from_date="pouet"
|
||||
)
|
||||
|
||||
|
||||
def test_delivery_is_open_when_order_before_is_in_the_future(delivery):
|
||||
|
@ -37,7 +41,8 @@ def test_can_create_product():
|
|||
def test_can_create_delivery_with_products():
|
||||
delivery = Delivery(
|
||||
producer="Andines",
|
||||
when=now(),
|
||||
from_date=now(),
|
||||
to_date=now(),
|
||||
order_before=now(),
|
||||
products=[Product(name="Lait", ref="123", price=1.5)],
|
||||
)
|
||||
|
|
|
@ -1,22 +1,47 @@
|
|||
import pytest
|
||||
|
||||
from kaba.models import Delivery
|
||||
|
||||
pytestmark = pytest.mark.asyncio
|
||||
|
||||
|
||||
async def test_empty_home(client):
|
||||
resp = await client.get('/')
|
||||
resp = await client.get("/")
|
||||
assert resp.status == 200
|
||||
|
||||
|
||||
async def test_home_should_list_active_delivery(client, delivery):
|
||||
delivery.persist()
|
||||
resp = await client.get('/')
|
||||
resp = await client.get("/")
|
||||
assert resp.status == 200
|
||||
assert delivery.producer in resp.body.decode()
|
||||
|
||||
|
||||
async def test_home_should_redirect_to_login_if_not_logged(client):
|
||||
client.logout()
|
||||
resp = await client.get('/')
|
||||
resp = await client.get("/")
|
||||
assert resp.status == 302
|
||||
assert resp.headers["Location"] == "/sésame?next=/"
|
||||
|
||||
|
||||
async def test_create_delivery(client):
|
||||
assert not list(Delivery.all())
|
||||
body = {
|
||||
"producer": "Andines",
|
||||
"where": "Marché de la Briche",
|
||||
"date": "2019-02-23",
|
||||
"from_time": "18:30:00",
|
||||
"to_time": "20:00:00",
|
||||
"order_before": "2019-02-12"
|
||||
}
|
||||
resp = await client.post("/livraison", body=body)
|
||||
assert resp.status == 302
|
||||
assert len(list(Delivery.all())) == 1
|
||||
delivery = list(Delivery.all())[0]
|
||||
assert delivery.producer == "Andines"
|
||||
assert delivery.from_date.year == 2019
|
||||
assert delivery.from_date.hour == 18
|
||||
assert delivery.from_date.minute == 30
|
||||
assert delivery.to_date.year == 2019
|
||||
assert delivery.to_date.hour == 20
|
||||
assert delivery.to_date.minute == 0
|
||||
|
|
Loading…
Reference in a new issue