From 186498d904267aef7892a43a0432d398992bae58 Mon Sep 17 00:00:00 2001 From: imperosol Date: Thu, 14 May 2026 12:28:59 +0200 Subject: [PATCH] exclude products over clic limit from eboutic --- counter/models.py | 14 +++----------- counter/tests/test_counter.py | 2 +- counter/views/click.py | 2 +- eboutic/views.py | 8 +++++--- 4 files changed, 10 insertions(+), 16 deletions(-) diff --git a/counter/models.py b/counter/models.py index 889a47e4..2a2dcf09 100644 --- a/counter/models.py +++ b/counter/models.py @@ -22,7 +22,7 @@ import string from datetime import date, datetime, timedelta from datetime import timezone as tz from decimal import Decimal -from typing import TYPE_CHECKING, Literal, Self +from typing import Literal, Self from dict2xml import dict2xml from django.conf import settings @@ -48,9 +48,6 @@ from core.utils import get_start_of_semester from counter.fields import CurrencyField from subscription.models import Subscription -if TYPE_CHECKING: - from collections.abc import Sequence - def get_eboutic() -> Counter: return Counter.objects.filter(type="EBOUTIC").order_by("id").first() @@ -773,10 +770,8 @@ class Counter(models.Model): # but they share the same primary key return self.type == "BAR" and any(b.pk == customer.pk for b in self.barmen_list) - def get_prices_for( - self, customer: Customer, *, order_by: Sequence[str] | None = None - ) -> list[Price]: - qs = ( + def get_prices_for(self, customer: Customer) -> PriceQuerySet: + return ( Price.objects.filter( product__counters=self, product__product_type__isnull=False ) @@ -784,9 +779,6 @@ class Counter(models.Model): .select_related("product", "product__product_type") .prefetch_related("groups") ) - if order_by: - qs = qs.order_by(*order_by) - return list(qs) class CounterSellers(models.Model): diff --git a/counter/tests/test_counter.py b/counter/tests/test_counter.py index b5a34e22..c63fb76b 100644 --- a/counter/tests/test_counter.py +++ b/counter/tests/test_counter.py @@ -596,7 +596,7 @@ class TestCounterClick(TestFullClickBase): product=iter(_product_recipe.make(archived=False, _quantity=2)), groups=[group], ) - customer_prices = counter.get_prices_for(customer) + customer_prices = list(counter.get_prices_for(customer)) assert unarchived_prices == customer_prices diff --git a/counter/views/click.py b/counter/views/click.py index b23e65c8..5ec11b57 100644 --- a/counter/views/click.py +++ b/counter/views/click.py @@ -103,7 +103,7 @@ class CounterClick( ): return redirect(obj) # Redirect to counter - self.prices = obj.get_prices_for(self.customer) + self.prices = list(obj.get_prices_for(self.customer)) return super().dispatch(request, *args, **kwargs) diff --git a/eboutic/views.py b/eboutic/views.py index c892a104..b8c18b93 100644 --- a/eboutic/views.py +++ b/eboutic/views.py @@ -118,9 +118,11 @@ class EbouticMainView(LoginRequiredMixin, FormView): @cached_property def prices(self) -> list[Price]: - return get_eboutic().get_prices_for( - self.customer, - order_by=["product__product_type__order", "product_id", "amount"], + eboutic = get_eboutic() + return list( + eboutic.get_prices_for(self.customer) + .filter(product__in=eboutic.products.under_clic_limit()) + .order_by("product__product_type__order", "product_id", "amount") ) @cached_property