Merge branch 'handover-delivery'

This commit is contained in:
Alexis Métaireau 2021-04-10 11:58:04 +02:00
commit a1d5a4f577
9 changed files with 80 additions and 82 deletions

View file

@ -319,6 +319,7 @@ class Delivery(PersistedBase):
OPEN = 2 OPEN = 2
ADJUSTMENT = 3 ADJUSTMENT = 3
WAITING_PRODUCTS = 4 WAITING_PRODUCTS = 4
OVER = 5
name: str name: str
from_date: datetime_field from_date: datetime_field
@ -332,6 +333,7 @@ class Delivery(PersistedBase):
producers: Dict[str, Producer] = field(default_factory=dict) producers: Dict[str, Producer] = field(default_factory=dict)
orders: Dict[str, Order] = field(default_factory=dict) orders: Dict[str, Order] = field(default_factory=dict)
shipping: Dict[str, price_field] = field(default_factory=dict) shipping: Dict[str, price_field] = field(default_factory=dict)
over: bool = False
def __post_init__(self): def __post_init__(self):
self.id = None # Not a field because we don't want to persist it. self.id = None # Not a field because we don't want to persist it.
@ -339,6 +341,8 @@ class Delivery(PersistedBase):
@property @property
def status(self): def status(self):
if self.over:
return self.OVER
if not self.products: if not self.products:
return self.EMPTY return self.EMPTY
if self.products_need_price_update(): if self.products_need_price_update():

View file

@ -789,3 +789,11 @@ small {
#instructions { #instructions {
height: 100px; height: 100px;
} }
.important-message {
padding: 1em;
text-align: center;
background-color: rgba(233, 161, 28, 0.2);
border: 2px black dashed;
}

View file

@ -2,6 +2,11 @@
{% block is_wide %}{% endblock %} {% block is_wide %}{% endblock %}
{% block body %} {% block body %}
{% if delivery.status == delivery.CLOSED %}
<div class="important-message">Une fois la distribution terminée, reviens ici pour <a class="button" href="{{ url_for('hand_over_delivery', id=delivery.id) }}">passer le relai !</a></div>
{% endif %}
<div class="header"> <div class="header">
<h1>{{ delivery.name }}</h1> <h1>{{ delivery.name }}</h1>
{% include "includes/delivery_progress.html" %} {% include "includes/delivery_progress.html" %}
@ -48,8 +53,6 @@
<div class="placeholder center"> <div class="placeholder center">
Tu es la personne contact pour l'organisation de cette distribution, merci :-) Pour t'aider, tu peux accéder à Tu es la personne contact pour l'organisation de cette distribution, merci :-) Pour t'aider, tu peux accéder à
<a href="{{ url_for('show_delivery_toolbox', id=delivery.id) }}"><i class="icon-tools"></i>&nbsp;la boîte à outils</a> ! <a href="{{ url_for('show_delivery_toolbox', id=delivery.id) }}"><i class="icon-tools"></i>&nbsp;la boîte à outils</a> !
{% if delivery.status == delivery.CLOSED %}<p>La distribution est maintenant terminée. C'est le moment de <a href="{{ url_for('hand_over_delivery', id=delivery.id) }}">passer le relai, merci !</a></p>{% endif %}
</div> </div>
{% endif %} {% endif %}
{% if delivery.has_products %} {% if delivery.has_products %}

View file

@ -12,57 +12,7 @@
{% include "includes/delivery_head.html" %} {% include "includes/delivery_head.html" %}
<h2>Rappel des dates</h2> <h2>Rappel des dates</h2>
<table class="pure-table fixed-table"> {% include "includes/delivery_dates_table.html" %}
<thead>
<tr>
<th>Quoi ?</th><th>Dates</th><th>Coordinatrice⋅eur</th><th>Référent⋅e⋅s produits</th>
</tr>
</thead>
<tbody>
<tr>
<th>Création de la distribution</th>
<td>{{ delivery.dates.creation_date | date}}</td>
<td>Rappeler aux référent⋅e⋅s produit de mettre leurs prix à jour, vérifier que tous les producteurs⋅rices sont bien présentes, en ajouter si besoin</td>
<td>-</td>
</tr>
<tr>
<th>Mise à jour des prix</th>
<td>Du {{ delivery.dates.price_update_start | date }} au {{ delivery.dates.price_update_deadline | date}}</td>
<td></td>
<td>Les référent⋅e⋅s produit mettent les prix à jour.</td>
</tr>
<tr>
<th>Commandes</td>
<td>Du {{ delivery.dates.price_update_deadline | date }} au {{ delivery.dates.order_before | date }}</td>
<td>Envoyer le lien de commande aux groupes pour qu'iels commandent</td>
<td></td>
</tr>
<tr>
<th>Ajustements</th>
<td>Du {{ delivery.dates.order_before | date }} au {{ delivery.dates.adjustment_deadline | date }}</td>
<td>S'assurer que les ajustements sont bien faits par les participant⋅e⋅s</td>
<td>Faire les ajustements à la main si besoin</td>
</tr>
<tr>
<th>Approvisionnements</th>
<td>Du {{ delivery.dates.adjustment_deadline | date }} au {{ delivery.dates.delivery_date | date }}</td>
<td><a href="{{ url_for('send_referent_emails', id=delivery.id) }}">Envoyer les infos de commande aux référent⋅e⋅s</a></td>
<td>Faire les commandes aux producteurs⋅rices, <strong>récupérer les produits</strong></td>
</tr>
<tr>
<th>Préparation de la distribution</th>
<td>La veille du {{ delivery.dates.delivery_date | date }}</td>
<td><a href="{{ url_for('show_orders_summary', id=delivery.id) }}">Imprimer les bons de commandes par colocation</a></td>
<td></td>
</tr>
<tr>
<th>Distribution</th>
<td>{{ delivery.dates.delivery_date | date }}</td>
<td>Coordoner la distribution, <a href="{{ url_for('compute_payments', id=delivery.id) }}">faire la répartition des chèques</a></td>
<td>Arriver 30mn avant le début de la distribution, répartir les produits par coloc</td>
</tr>
</tbody>
</table>
<h2>Emails des référent⋅e⋅s</h2> <h2>Emails des référent⋅e⋅s</h2>
<p>Ça peut être utile pour leur envoyer un email groupé.</p> <p>Ça peut être utile pour leur envoyer un email groupé.</p>

View file

@ -2,35 +2,46 @@
<p>La personne référente de la dernière distribution vient de la clôturer, et a indiqué que vous étiez la personne référente pour la prochaine distribution.</p> <p>La personne référente de la dernière distribution vient de la clôturer, et a indiqué que vous étiez la personne référente pour la prochaine distribution.</p>
<p>Bravo :-)</p> <p>Voici donc quelques infos !</p>
{% if email_body %} <h2>Infos de distrib</h2>
<p>Elle vous a même laissé un petit message : </p>
<p>{{ email_body}}</p>
{% endif %}
<p>Voici les informations renseignées :</p>
<ul> <ul>
<li>Nom : {{ delivery.name }}</li> <li>Nom : {{ delivery.name }}</li>
<li>Date et heure : {{ delivery.from_date|date }} de {{ delivery.from_date|time }} à {{ delivery.to_date|time }}.</li> <li>Date et heure : {{ delivery.from_date|date }} de {{ delivery.from_date|time }} à {{ delivery.to_date|time }}.</li>
<li>Lieu : {{ delivery.location }}</li> <li>Lieu : {{ delivery.where }}</li>
<li>Commandes avant le {{ delivery.order_before|date }}</li> <li>Commandes avant le {{ delivery.order_before|date }}</li>
</ul> </ul>
Référent·es produits : <h2>Référent·es produits</h2>
<ul> <ul>
</ul>
{% for producer_name, producer in delivery.producers.items() %} {% for producer_name, producer in delivery.producers.items() %}
<li>{{ producer.name }} : {{ producer.referent_name }} - <a href="mailto:{{ producer.referent }}">{{ producer.referent }}</a> - <a href="tel:{{ producer.referent_tel }}">{{ producer.referent_tel }}</a></li> <li>{{ producer.name }} : {{ producer.referent_name }} - <a href="mailto:{{ producer.referent }}">{{ producer.referent }}</a> - <a href="tel:{{ producer.referent_tel }}">{{ producer.referent_tel }}</a></li>
{% endfor %} {% endfor %}
</ul>
<h2>Liens utiles</h2>
<ul>
<li>Distribution : <a href="{{ url_for('show_delivery', id=delivery.id) }}">{{ url_for('show_delivery', id=delivery.id) }}</a></li>
<li>Boîte à outils : <a href="{{ url_for('show_delivery_toolbox', id=delivery.id) }}">{{ url_for('show_delivery_toolbox', id=delivery.id) }}</a></li>
</ul>
<p>Si vous avez besoin de modifier ces informations, vous pouvez le faire <a href="{{ url_for('show_delivery', id=delivery.id) }}">en suivant ce lien.</a></p> <p>Au cas où, voici les contacts de dernière personne référente : mail <a href="mailto:{{ old_delivery.contact }}">{{ old_delivery.contact }}</a>, tel <a href="tel:{{ old_delivery.contact_phone }}">{{ old_delivery.contact_phone }}</a></p>
{% if email_body %}
<p>Elle vous a même laissé un petit message : </p>
<hr />
<p>{{ email_body}}</p>
<hr />
{% endif %}
<h2>Rappel des dates</h2>
<p>(Les dates sont calculées en fonction de ce qui à été renseigné)</p>
{% include "includes/delivery_dates_table.html" %}
<p>Bonne journée,</p> <p>Bonne journée,</p>

View file

@ -2,29 +2,45 @@ Bonjour,
La personne référente de la dernière distribution vient de la clôturer, et a indiqué que vous étiez la personne référente pour la prochaine distribution. La personne référente de la dernière distribution vient de la clôturer, et a indiqué que vous étiez la personne référente pour la prochaine distribution.
Bravo :-) Voici donc quelques infos !
{% if email_body %} Info de distrib
Elle vous a même laissé un petit message : {{ email_body }} ———————————————
{% endif %}
Voici les informations renseignées :
Nom : {{ delivery.name }} Nom : {{ delivery.name }}
Date et heure : {{ delivery.from_date|date }} de {{ delivery.from_date|time }} à {{ delivery.to_date|time }}. Date et heure : {{ delivery.from_date|date }} de {{ delivery.from_date|time }} à {{ delivery.to_date|time }}.
Lieu : {{ delivery.location }} Lieu : {{ delivery.where }}
Commandes avant le {{ delivery.order_before|date }}. Commandes avant le {{ delivery.order_before|date }}.
Référent·es produits : Référent·es produits
————————————————————
{% for producer_name, producer in delivery.producers.items() %} {% for producer_name, producer in delivery.producers.items() %}
- {{ producer.name }} : {{ producer.referent_name }} - {{ producer.referent }} - {{ producer.referent_tel }} - {{ producer.name }} : {{ producer.referent_name }} - {{ producer.referent }} - {{ producer.referent_tel }}
{% endfor %} {% endfor %}
Si vous avez besoin de modifier ces informations, vous pouvez le faire en suivant ce lien : Liens utiles
————————————
{{ url_for('show_delivery', id=delivery.id) }} - Distribution : {{ url_for('show_delivery', id=delivery.id) }}
- Boîte à outils : {{ url_for('show_delivery_toolbox', id=delivery.id) }} (avec un rappel des dates)
Au cas où, voici les contacts de dernière personne référente :
- mail {{ old_delivery.contact }}
- tel {{ old_delivery.contact_phone }}
{% if email_body %}
Elle vous a même laissé un petit message :
————
{{ email_body}}
————
{% endif %}
Bonne journée, Bonne journée,
{{ config.EMAIL_SIGNATURE }} {{ config.EMAIL_SIGNATURE }}

View file

@ -4,7 +4,7 @@
<li {% if delivery.status == delivery.OPEN %}class="active"{% endif %}>Commande</li> <li {% if delivery.status == delivery.OPEN %}class="active"{% endif %}>Commande</li>
<li {% if delivery.status == delivery.ADJUSTMENT %}class="active"{% endif %}>Ajustements</li> <li {% if delivery.status == delivery.ADJUSTMENT %}class="active"{% endif %}>Ajustements</li>
<li {% if delivery.status == delivery.WAITING_PRODUCTS %}class="active"{% endif %}>Récupération des commandes</li> <li {% if delivery.status == delivery.WAITING_PRODUCTS %}class="active"{% endif %}>Récupération des commandes</li>
<li>Distribution</li> <li><a href="{{ url_for('show_orders_summary', id=delivery.id) }}">Distribution</a></li>
<li {% if delivery.status == delivery.CLOSED %}class="active"{% endif %}>Répartition des paiements</li> <li {% if delivery.status == delivery.CLOSED %}class="active"{% endif %}><a href="{{ url_for('compute_payments', id=delivery.id) }}">Répartition des paiements</a></li>
</ul> </ul>
<div style="clear: both"></div> <div style="clear: both"></div>

View file

@ -1,5 +1,6 @@
{% if delivery.status == delivery.OPEN %}Commandes ouvertes jusqu'au {{ delivery.order_before|date }} {% if delivery.status == delivery.OPEN %}Commandes ouvertes jusqu'au {{ delivery.order_before|date }}
{% elif delivery.status == delivery.ADJUSTMENT %}Ajustements en cours {% elif delivery.status == delivery.ADJUSTMENT %}Ajustements en cours
{% elif delivery.status == delivery.CLOSED %}Fermée {% elif delivery.status == delivery.CLOSED %}Fermée
{% elif delivery.status == delivery.OVER %}Terminée
{% elif delivery.status == delivery.NEED_PRICE_UPDATE %}Mise à jour des prix* {% elif delivery.status == delivery.NEED_PRICE_UPDATE %}Mise à jour des prix*
{% endif %} {% endif %}

View file

@ -70,7 +70,7 @@ async def hand_over_delivery_post(request, response, id):
new_delivery.producers = old_delivery.producers new_delivery.producers = old_delivery.producers
new_delivery.products = old_delivery.products new_delivery.products = old_delivery.products
# Update referent fields # Update referent fields.
for producer_id, producer in new_delivery.producers.items(): for producer_id, producer in new_delivery.producers.items():
producer.referent = form.get(f'producer_{producer_id}_referent_email') producer.referent = form.get(f'producer_{producer_id}_referent_email')
producer.referent_name = form.get(f'producer_{producer_id}_referent_name') producer.referent_name = form.get(f'producer_{producer_id}_referent_name')
@ -78,6 +78,10 @@ async def hand_over_delivery_post(request, response, id):
new_delivery.producers[producer_id] = producer new_delivery.producers[producer_id] = producer
new_delivery.persist() new_delivery.persist()
# Mark the old delivery as over.
old_delivery.over = True
old_delivery.persist()
emails.send_from_template( emails.send_from_template(
env, env,
"handover_delivery", "handover_delivery",
@ -88,6 +92,7 @@ async def hand_over_delivery_post(request, response, id):
email_body = form.get('email_body'), email_body = form.get('email_body'),
hostname=request.host, hostname=request.host,
url_for=app.url_for, url_for=app.url_for,
old_delivery=old_delivery
) )
response.message("La distribution à bien été créée et le mail envoyé, merci !") response.message("La distribution à bien été créée et le mail envoyé, merci !")