From 1de2320cc5becdfe47ad1a74e41a25561e816429 Mon Sep 17 00:00:00 2001 From: Mira Weller Date: Tue, 30 Apr 2024 21:33:25 +0200 Subject: [PATCH] use time_machine_now for GiftCard, membership and discount validity --- src/pretix/base/models/memberships.py | 5 +++-- src/pretix/base/payment.py | 7 ++++--- src/pretix/base/services/pricing.py | 5 +++-- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/pretix/base/models/memberships.py b/src/pretix/base/models/memberships.py index b44450972..ae0a64d54 100644 --- a/src/pretix/base/models/memberships.py +++ b/src/pretix/base/models/memberships.py @@ -31,6 +31,7 @@ from i18nfield.fields import I18nCharField from pretix.base.models import Customer from pretix.base.models.base import LoggedModel from pretix.base.models.organizer import Organizer +from pretix.base.timemachine import time_machine_now from pretix.helpers.names import build_name @@ -165,13 +166,13 @@ class Membership(models.Model): def is_valid(self, ev=None, ticket_valid_from=None, valid_from_not_chosen=False): if valid_from_not_chosen: - return not self.canceled and self.date_end >= now() + return not self.canceled and self.date_end >= time_machine_now() elif ticket_valid_from: dt = ticket_valid_from elif ev: dt = ev.date_from else: - dt = now() + dt = time_machine_now() return not self.canceled and dt >= self.date_start and dt <= self.date_end diff --git a/src/pretix/base/payment.py b/src/pretix/base/payment.py index 4dad532cf..955f57e82 100644 --- a/src/pretix/base/payment.py +++ b/src/pretix/base/payment.py @@ -67,6 +67,7 @@ from pretix.base.settings import SettingsSandbox from pretix.base.signals import register_payment_providers from pretix.base.templatetags.money import money_filter from pretix.base.templatetags.rich_text import rich_text +from pretix.base.timemachine import time_machine_now from pretix.helpers import OF_SELF from pretix.helpers.countries import CachedCountries from pretix.helpers.format import format_map @@ -1441,7 +1442,7 @@ class GiftCardPayment(BasePaymentProvider): if not gc.testmode and self.event.testmode: messages.error(request, _("Only test gift cards can be used in test mode.")) return - if gc.expires and gc.expires < now(): + if gc.expires and gc.expires < time_machine_now(): messages.error(request, _("This gift card is no longer valid.")) return if gc.value <= Decimal("0.00"): @@ -1491,7 +1492,7 @@ class GiftCardPayment(BasePaymentProvider): if not gc.testmode and payment.order.testmode: messages.error(request, _("Only test gift cards can be used in test mode.")) return - if gc.expires and gc.expires < now(): + if gc.expires and gc.expires < time_machine_now(): messages.error(request, _("This gift card is no longer valid.")) return if gc.value <= Decimal("0.00"): @@ -1539,7 +1540,7 @@ class GiftCardPayment(BasePaymentProvider): raise PaymentException(_("This gift card can only be used in test mode.")) if not gc.testmode and payment.order.testmode: raise PaymentException(_("Only test gift cards can be used in test mode.")) - if gc.expires and gc.expires < now(): + if gc.expires and gc.expires < time_machine_now(): raise PaymentException(_("This gift card is no longer valid.")) trans = gc.transactions.create( diff --git a/src/pretix/base/services/pricing.py b/src/pretix/base/services/pricing.py index 50fcc7316..478f543b4 100644 --- a/src/pretix/base/services/pricing.py +++ b/src/pretix/base/services/pricing.py @@ -33,6 +33,7 @@ from pretix.base.models import ( ) from pretix.base.models.event import Event, SubEvent from pretix.base.models.tax import TAXED_ZERO, TaxedPrice, TaxRule +from pretix.base.timemachine import time_machine_now def get_price(item: Item, variation: ItemVariation = None, @@ -167,8 +168,8 @@ def apply_discounts(event: Event, sales_channel: str, new_prices = {} discount_qs = event.discounts.filter( - Q(available_from__isnull=True) | Q(available_from__lte=now()), - Q(available_until__isnull=True) | Q(available_until__gte=now()), + Q(available_from__isnull=True) | Q(available_from__lte=time_machine_now()), + Q(available_until__isnull=True) | Q(available_until__gte=time_machine_now()), sales_channels__contains=sales_channel, active=True, ).prefetch_related('condition_limit_products', 'benefit_limit_products').order_by('position', 'pk')