mirror of
https://github.com/ae-utbm/sith.git
synced 2025-04-29 12:56:47 +00:00
Add auto basket invalidation
This commit is contained in:
parent
2ae9baa82f
commit
f352b89fc0
@ -9,7 +9,7 @@ interface BasketItem {
|
||||
}
|
||||
|
||||
document.addEventListener("alpine:init", () => {
|
||||
Alpine.data("basket", () => ({
|
||||
Alpine.data("basket", (lastPurchaseTime?: number) => ({
|
||||
basket: [] as BasketItem[],
|
||||
|
||||
init() {
|
||||
@ -18,6 +18,16 @@ document.addEventListener("alpine:init", () => {
|
||||
this.saveBasket();
|
||||
});
|
||||
|
||||
// Invalidate basket if a purchase was made
|
||||
if (lastPurchaseTime !== null && localStorage.basketTimestamp !== undefined) {
|
||||
if (
|
||||
new Date(lastPurchaseTime) >=
|
||||
new Date(Number.parseInt(localStorage.basketTimestamp))
|
||||
) {
|
||||
this.basket = [];
|
||||
}
|
||||
}
|
||||
|
||||
// It's quite tricky to manually apply attributes to the management part
|
||||
// of a formset so we dynamically apply it here
|
||||
this.$refs.basketManagementForm
|
||||
@ -38,6 +48,7 @@ document.addEventListener("alpine:init", () => {
|
||||
|
||||
saveBasket() {
|
||||
localStorage.basket = JSON.stringify(this.basket);
|
||||
localStorage.basketTimestamp = Date.now();
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -21,7 +21,7 @@
|
||||
|
||||
{% block content %}
|
||||
<h1 id="eboutic-title">{% trans %}Eboutic{% endtrans %}</h1>
|
||||
<div id="eboutic" x-data="basket">
|
||||
<div id="eboutic" x-data="basket({{ last_purchase_time }})">
|
||||
<div id="basket">
|
||||
<h3>Panier</h3>
|
||||
<form method="post" action="">
|
||||
|
@ -48,7 +48,7 @@ from django_countries.fields import Country
|
||||
from core.auth.mixins import CanViewMixin, IsSubscriberMixin
|
||||
from core.views.mixins import FragmentMixin, UseFragmentsMixin
|
||||
from counter.forms import BaseBasketForm, BillingInfoForm, ProductForm
|
||||
from counter.models import BillingInfo, Counter, Customer, Product
|
||||
from counter.models import BillingInfo, Counter, Customer, Product, Selling
|
||||
from eboutic.models import (
|
||||
Basket,
|
||||
BasketItem,
|
||||
@ -89,7 +89,7 @@ class EbouticMainView(LoginRequiredMixin, FormView):
|
||||
def get_form_kwargs(self):
|
||||
kwargs = super().get_form_kwargs()
|
||||
kwargs["form_kwargs"] = {
|
||||
"customer": Customer.get_or_create(self.request.user)[0],
|
||||
"customer": self.customer,
|
||||
"counter": Counter.objects.get(type="EBOUTIC"),
|
||||
"allowed_products": {product.id: product for product in self.products},
|
||||
}
|
||||
@ -116,10 +116,22 @@ class EbouticMainView(LoginRequiredMixin, FormView):
|
||||
def products(self) -> list[Product]:
|
||||
return get_eboutic_products(self.request.user)
|
||||
|
||||
@cached_property
|
||||
def customer(self) -> Customer:
|
||||
return Customer.get_or_create(self.request.user)[0]
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
context["products"] = self.products
|
||||
context["customer_amount"] = self.request.user.account_balance
|
||||
last_purchase: Selling | None = (
|
||||
self.customer.buyings.filter(counter__type="EBOUTIC")
|
||||
.order_by("-date")
|
||||
.first()
|
||||
)
|
||||
context["last_purchase_time"] = (
|
||||
int(last_purchase.date.timestamp() * 1000) if last_purchase else "null"
|
||||
)
|
||||
return context
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user