pricing: new method get_pricing_data for flat_fee_schedule mode (#67675)

This commit is contained in:
Lauréline Guérin 2022-07-28 10:46:22 +02:00
parent 5d43627364
commit 35c27548df
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
2 changed files with 60 additions and 0 deletions

View File

@ -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
):

View File

@ -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')