mirror of
https://github.com/almet/copanier.git
synced 2025-04-28 19:42:37 +02:00
Remove paiement tracking
This commit is contained in:
parent
32dc720aff
commit
f046ae6fb0
10 changed files with 3 additions and 87 deletions
|
@ -16,6 +16,7 @@ The main differences are :
|
|||
- A minimal interface to add / remove / update products from the website.
|
||||
- Support for out of stock products.
|
||||
- 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
|
||||
- Drop support for CSV files
|
||||
- Send emails to producers referents, with an order summary
|
||||
|
|
|
@ -595,7 +595,6 @@ async def place_order(request, response, id):
|
|||
return
|
||||
|
||||
if request.method == "POST":
|
||||
|
||||
# When the delivery is closed, only staff can access.
|
||||
if delivery.status == delivery.CLOSED and not (user and user.is_staff):
|
||||
response.message("La livraison est fermée", "error")
|
||||
|
@ -603,7 +602,7 @@ async def place_order(request, response, id):
|
|||
return
|
||||
|
||||
form = request.form
|
||||
order = Order(paid=form.bool("paid", False))
|
||||
order = Order()
|
||||
for product in delivery.products:
|
||||
try:
|
||||
wanted = form.int(f"wanted:{product.ref}", 0)
|
||||
|
|
|
@ -221,7 +221,6 @@ class ProductOrder(Base):
|
|||
@dataclass
|
||||
class Order(Base):
|
||||
products: Dict[str, ProductOrder] = field(default_factory=dict)
|
||||
paid: bool = False
|
||||
|
||||
def __getitem__(self, ref):
|
||||
if isinstance(ref, Product):
|
||||
|
|
|
@ -92,15 +92,3 @@ def products(delivery):
|
|||
producer_sheet.append([getattr(producer, field) for field in producer_fields])
|
||||
|
||||
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)
|
||||
|
|
|
@ -455,9 +455,6 @@ hr {
|
|||
.notification i {
|
||||
font-size: 2rem;
|
||||
}
|
||||
.not-paid {
|
||||
background-color: var(--warning-color);
|
||||
}
|
||||
.toggle {
|
||||
display: none;
|
||||
}
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
{% if not list_only %}
|
||||
{% for orderer, order in delivery.orders.items() %}
|
||||
{% 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)) %}
|
||||
<a href="/livraison/{{ delivery.id }}/commander?orderer={{ orderer }}" title="{{ orderer }}">{{ orderer_name }}</a>
|
||||
{% else %}
|
||||
|
|
|
@ -9,7 +9,4 @@
|
|||
{% endif %}
|
||||
{% if request.user.email in delivery.orders %}
|
||||
<span class="flag" title="Mon solde"><i class="icon-wallet"></i> {{ 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> Commande à solder</span>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
|
|
@ -46,9 +46,6 @@
|
|||
</table>
|
||||
{% endfor %}
|
||||
<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 }}">
|
||||
{% if delivery.status != delivery.CLOSED or request.user.is_staff %}
|
||||
<input type="submit" value="Enregistrer la commande" class="primary">
|
||||
|
|
|
@ -23,26 +23,3 @@ def test_summary_report(delivery):
|
|||
("456", "yaourt (pot 125ml)", 3.5, 4, "pot 125ml", 14),
|
||||
(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"),
|
||||
]
|
||||
|
|
|
@ -88,17 +88,6 @@ async def test_place_order_with_empty_string(client, delivery):
|
|||
delivery = Delivery.load(id=delivery.id)
|
||||
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):
|
||||
monkeypatch.setattr("copanier.config.STAFF", ["someone@else.org"])
|
||||
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
|
||||
|
||||
|
||||
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):
|
||||
delivery.persist()
|
||||
resp = await client.get(f"/livraison/{delivery.id}/exporter")
|
||||
|
|
Loading…
Reference in a new issue