Projet

Général

Profil

0009-pricing-new-method-get_pricing_data-for-flat_fee_sch.patch

Lauréline Guérin, 29 juillet 2022 22:03

Télécharger (3,39 ko)

Voir les différences:

Subject: [PATCH 09/14] 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(+)
lingo/pricing/models.py
399 399

  
400 400
        return created, agenda_pricing
401 401

  
402
    def get_pricing_data(self, request, user_external_id, adult_external_id, subscription=None):
403
        # compute pricing for flat_fee_schedule mode
404
        # subscription is None if subscription_required is False
405
        data = {
406
            'subscription': subscription,
407
        }
408
        context = self.get_pricing_context(
409
            request=request,
410
            data=data,
411
            user_external_id=user_external_id,
412
            adult_external_id=adult_external_id,
413
        )
414
        pricing, criterias = self.compute_pricing(context=context)
415
        return {
416
            'pricing': pricing,
417
            'calculation_details': {
418
                'pricing': pricing,
419
                'criterias': criterias,
420
                'context': context,
421
            },
422
        }
423

  
402 424
    def get_pricing_data_for_event(
403 425
        self, request, agenda, event, subscription, check_status, booking, user_external_id, adult_external_id
404 426
    ):
tests/pricing/test_models.py
927 927
    }
928 928

  
929 929

  
930
def test_get_pricing_data(context):
931
    agenda = Agenda.objects.create(label='Foo bar')
932
    category = CriteriaCategory.objects.create(label='Foo', slug='foo')
933
    criteria = Criteria.objects.create(label='Bar', slug='bar', condition='True', category=category)
934
    pricing = Pricing.objects.create(
935
        label='Foo bar',
936
        extra_variables={
937
            'domicile': 'commune',
938
            'qf': '2',
939
        },
940
    )
941
    pricing.criterias.add(criteria)
942
    pricing.categories.add(category, through_defaults={'order': 1})
943
    agenda_pricing = AgendaPricing.objects.create(
944
        pricing=pricing,
945
        date_start=datetime.date(year=2021, month=9, day=1),
946
        date_end=datetime.date(year=2021, month=10, day=1),
947
        pricing_data={
948
            'foo:bar': 42,
949
        },
950
    )
951
    agenda_pricing.agendas.add(agenda)
952
    for subscription in [None, {'foo': 'bar'}]:
953
        assert agenda_pricing.get_pricing_data(
954
            request=context['request'],
955
            subscription=subscription,
956
            user_external_id='child:42',
957
            adult_external_id='parent:35',
958
        ) == {
959
            'pricing': 42,
960
            'calculation_details': {
961
                'pricing': 42,
962
                'criterias': {'foo': 'bar'},
963
                'context': {'domicile': 'commune', 'qf': '2'},
964
            },
965
        }
966

  
967

  
930 968
def test_get_pricing_data_for_event(context):
931 969
    agenda = Agenda.objects.create(label='Foo bar')
932 970
    category = CriteriaCategory.objects.create(label='Foo', slug='foo')
933
-