From 35c27548df61c6105ff479c123d073cb11d1889b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laur=C3=A9line=20Gu=C3=A9rin?= Date: Thu, 28 Jul 2022 10:46:22 +0200 Subject: [PATCH] pricing: new method get_pricing_data for flat_fee_schedule mode (#67675) --- lingo/pricing/models.py | 22 +++++++++++++++++++++ tests/pricing/test_models.py | 38 ++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/lingo/pricing/models.py b/lingo/pricing/models.py index fcbd75f..3ef41e3 100644 --- a/lingo/pricing/models.py +++ b/lingo/pricing/models.py @@ -399,6 +399,28 @@ class AgendaPricing(models.Model): return created, agenda_pricing + def get_pricing_data(self, request, user_external_id, adult_external_id, subscription=None): + # compute pricing for flat_fee_schedule mode + # subscription is None if subscription_required is False + data = { + 'subscription': subscription, + } + context = self.get_pricing_context( + request=request, + data=data, + user_external_id=user_external_id, + adult_external_id=adult_external_id, + ) + pricing, criterias = self.compute_pricing(context=context) + return { + 'pricing': pricing, + 'calculation_details': { + 'pricing': pricing, + 'criterias': criterias, + 'context': context, + }, + } + def get_pricing_data_for_event( self, request, agenda, event, subscription, check_status, booking, user_external_id, adult_external_id ): diff --git a/tests/pricing/test_models.py b/tests/pricing/test_models.py index 8fd60a2..48a2e3b 100644 --- a/tests/pricing/test_models.py +++ b/tests/pricing/test_models.py @@ -927,6 +927,44 @@ def test_get_booking_modifier_booking_presence(): } +def test_get_pricing_data(context): + agenda = Agenda.objects.create(label='Foo bar') + category = CriteriaCategory.objects.create(label='Foo', slug='foo') + criteria = Criteria.objects.create(label='Bar', slug='bar', condition='True', category=category) + pricing = Pricing.objects.create( + label='Foo bar', + extra_variables={ + 'domicile': 'commune', + 'qf': '2', + }, + ) + pricing.criterias.add(criteria) + pricing.categories.add(category, through_defaults={'order': 1}) + agenda_pricing = AgendaPricing.objects.create( + pricing=pricing, + date_start=datetime.date(year=2021, month=9, day=1), + date_end=datetime.date(year=2021, month=10, day=1), + pricing_data={ + 'foo:bar': 42, + }, + ) + agenda_pricing.agendas.add(agenda) + for subscription in [None, {'foo': 'bar'}]: + assert agenda_pricing.get_pricing_data( + request=context['request'], + subscription=subscription, + user_external_id='child:42', + adult_external_id='parent:35', + ) == { + 'pricing': 42, + 'calculation_details': { + 'pricing': 42, + 'criterias': {'foo': 'bar'}, + 'context': {'domicile': 'commune', 'qf': '2'}, + }, + } + + def test_get_pricing_data_for_event(context): agenda = Agenda.objects.create(label='Foo bar') category = CriteriaCategory.objects.create(label='Foo', slug='foo')