Remove paiement tracking

This commit is contained in:
Daniel Atwood 2019-10-05 22:30:58 +02:00
parent f0c030d622
commit ae3e1e2888
10 changed files with 3 additions and 87 deletions

View file

@ -16,6 +16,7 @@ The main differences are :
- A minimal interface to add / remove / update products from the website. - A minimal interface to add / remove / update products from the website.
- Support for out of stock products. - Support for out of stock products.
- Automatically compute a settlement plan (using the [debts library](https://framagit.org/almet/debts)) - Automatically compute a settlement plan (using the [debts library](https://framagit.org/almet/debts))
- Remove paiement tracking (as it conflicts with auto-settlement of debts)
- A special page with tools to ease delivery management - A special page with tools to ease delivery management
- Drop support for CSV files - Drop support for CSV files
- Send emails to producers referents, with an order summary - Send emails to producers referents, with an order summary

View file

@ -595,7 +595,6 @@ async def place_order(request, response, id):
return return
if request.method == "POST": if request.method == "POST":
# When the delivery is closed, only staff can access. # When the delivery is closed, only staff can access.
if delivery.status == delivery.CLOSED and not (user and user.is_staff): if delivery.status == delivery.CLOSED and not (user and user.is_staff):
response.message("La livraison est fermée", "error") response.message("La livraison est fermée", "error")
@ -603,7 +602,7 @@ async def place_order(request, response, id):
return return
form = request.form form = request.form
order = Order(paid=form.bool("paid", False)) order = Order()
for product in delivery.products: for product in delivery.products:
try: try:
wanted = form.int(f"wanted:{product.ref}", 0) wanted = form.int(f"wanted:{product.ref}", 0)

View file

@ -221,7 +221,6 @@ class ProductOrder(Base):
@dataclass @dataclass
class Order(Base): class Order(Base):
products: Dict[str, ProductOrder] = field(default_factory=dict) products: Dict[str, ProductOrder] = field(default_factory=dict)
paid: bool = False
def __getitem__(self, ref): def __getitem__(self, ref):
if isinstance(ref, Product): if isinstance(ref, Product):

View file

@ -92,15 +92,3 @@ def products(delivery):
producer_sheet.append([getattr(producer, field) for field in producer_fields]) producer_sheet.append([getattr(producer, field) for field in producer_fields])
return save_virtual_workbook(wb) return save_virtual_workbook(wb)
def balance(delivery):
wb = Workbook()
ws = wb.active
ws.title = f"Solde {delivery.name}"
ws.append(["Adhérent", "Montant", "Payé"])
for email, order in delivery.orders.items():
ws.append(
[email, order.total(delivery.products), "oui" if order.paid else "non"]
)
return save_virtual_workbook(wb)

View file

@ -455,9 +455,6 @@ hr {
.notification i { .notification i {
font-size: 2rem; font-size: 2rem;
} }
.not-paid {
background-color: var(--warning-color);
}
.toggle { .toggle {
display: none; display: none;
} }

View file

@ -30,7 +30,7 @@
{% if not list_only %} {% if not list_only %}
{% for orderer, order in delivery.orders.items() %} {% for orderer, order in delivery.orders.items() %}
{% set orderer_name = request.groups.groups[orderer].name %} {% set orderer_name = request.groups.groups[orderer].name %}
<th class="person{% if delivery.is_passed and not order.paid %} not-paid{% endif %}"> <th class="person">
{% if request.user and (request.user.is_staff or request.user.is_referent(delivery)) %} {% if request.user and (request.user.is_staff or request.user.is_referent(delivery)) %}
<a href="/livraison/{{ delivery.id }}/commander?orderer={{ orderer }}" title="{{ orderer }}">{{ orderer_name }}</a> <a href="/livraison/{{ delivery.id }}/commander?orderer={{ orderer }}" title="{{ orderer }}">{{ orderer_name }}</a>
{% else %} {% else %}

View file

@ -9,7 +9,4 @@
{% endif %} {% endif %}
{% if request.user.email in delivery.orders %} {% if request.user.email in delivery.orders %}
<span class="flag" title="Mon solde"><i class="icon-wallet"></i>&nbsp;{{ delivery.total_for(request.user) }} €</span> <span class="flag" title="Mon solde"><i class="icon-wallet"></i>&nbsp;{{ delivery.total_for(request.user) }} €</span>
{% if delivery.status == delivery.CLOSED and delivery.is_passed and not delivery.orders[request.user.email].paid %}
<span class="flag warning" title="Ma commande n'est pas marquée comme soldée"><i class="icon-caution"></i>&nbsp;Commande à solder</span>
{% endif %}
{% endif %} {% endif %}

View file

@ -46,9 +46,6 @@
</table> </table>
{% endfor %} {% endfor %}
<p>Total: {{ order.total(delivery.products) if order else 0 }} €</p> <p>Total: {{ order.total(delivery.products) if order else 0 }} €</p>
{% if delivery.is_passed %}
<p>Commande soldée: <input type="checkbox" name="paid" {% if order.paid %}checked{% endif %}></p>
{% endif %}
<input type="hidden" name="email" value="{{ person.email }}"> <input type="hidden" name="email" value="{{ person.email }}">
{% if delivery.status != delivery.CLOSED or request.user.is_staff %} {% if delivery.status != delivery.CLOSED or request.user.is_staff %}
<input type="submit" value="Enregistrer la commande" class="primary"> <input type="submit" value="Enregistrer la commande" class="primary">

View file

@ -23,26 +23,3 @@ def test_summary_report(delivery):
("456", "yaourt (pot 125ml)", 3.5, 4, "pot 125ml", 14), ("456", "yaourt (pot 125ml)", 3.5, 4, "pot 125ml", 14),
(None, None, None, None, "Total", 15.5), (None, None, None, None, "Total", 15.5),
] ]
def test_balance_report(delivery):
delivery.products = [
Product(ref="123", name="lait", price="1.9", unit="1.5 litre"),
Product(ref="456", name="yaourt", price="3.5", unit="pot 125ml"),
]
delivery.orders = {
"foo@bar.org": Order(
products={"123": ProductOrder(wanted=1), "456": ProductOrder(wanted=4)}
),
"foo@foo.org": Order(
products={"123": ProductOrder(wanted=3), "456": ProductOrder(wanted=2)},
paid=True,
),
}
delivery.persist()
wb = load_workbook(filename=BytesIO(reports.balance(delivery)))
assert list(wb.active.values) == [
("Adhérent", "Montant", "Payé"),
("foo@bar.org", 15.9, "non"),
("foo@foo.org", 12.7, "oui"),
]

View file

@ -88,17 +88,6 @@ async def test_place_order_with_empty_string(client, delivery):
delivery = Delivery.load(id=delivery.id) delivery = Delivery.load(id=delivery.id)
assert not delivery.orders assert not delivery.orders
async def test_change_paid_status_when_placing_order(client, delivery):
delivery.persist()
body = {"wanted:123": "3", "paid": 1}
resp = await client.post(f"/livraison/{delivery.id}/commander", body=body)
assert resp.status == 302
delivery = Delivery.load(id=delivery.id)
assert delivery.orders["foo@bar.org"]
assert delivery.orders["foo@bar.org"].paid is True
async def test_get_place_order_with_closed_delivery(client, delivery, monkeypatch): async def test_get_place_order_with_closed_delivery(client, delivery, monkeypatch):
monkeypatch.setattr("copanier.config.STAFF", ["someone@else.org"]) monkeypatch.setattr("copanier.config.STAFF", ["someone@else.org"])
delivery.order_before = datetime.now() - timedelta(days=1) delivery.order_before = datetime.now() - timedelta(days=1)
@ -225,34 +214,6 @@ async def test_only_staff_can_adjust_product(client, delivery, monkeypatch):
assert delivery.orders["foo@bar.org"].products["123"].adjustment == 0 assert delivery.orders["foo@bar.org"].products["123"].adjustment == 0
async def test_get_delivery_balance(client, delivery):
delivery.from_date = datetime.now() - timedelta(days=1)
delivery.orders["foo@bar.org"] = Order(products={"123": ProductOrder(wanted=2)})
delivery.persist()
resp = await client.get(f"/livraison/{delivery.id}/solde")
doc = pq(resp.body)
assert doc('[name="foo@bar.org"]')
assert not doc('[name="foo@bar.org"]').attr("checked")
delivery.orders["foo@bar.org"] = Order(
products={"123": ProductOrder(wanted=2)}, paid=True
)
delivery.persist()
resp = await client.get(f"/livraison/{delivery.id}/solde")
doc = pq(resp.body)
assert doc('[name="foo@bar.org"]').attr("checked")
async def test_post_delivery_balance(client, delivery):
delivery.order_before = datetime.now() - timedelta(days=1)
delivery.orders["foo@bar.org"] = Order(products={"123": ProductOrder(wanted=2)})
delivery.persist()
body = {"foo@bar.org": "on"}
resp = await client.post(f"/livraison/{delivery.id}/solde", body=body)
assert resp.status == 302
delivery = Delivery.load(id=delivery.id)
assert delivery.orders["foo@bar.org"].paid is True
async def test_export_products(client, delivery): async def test_export_products(client, delivery):
delivery.persist() delivery.persist()
resp = await client.get(f"/livraison/{delivery.id}/exporter") resp = await client.get(f"/livraison/{delivery.id}/exporter")