From 2a6a1823d12b0cb57785a86836350c101c737e15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Dlouh=C3=BD?= Date: Thu, 16 May 2024 14:38:30 +0200 Subject: [PATCH] make possible to reuse get_change_price() --- plans/plan_change.py | 23 +++++++++++++++++++++++ plans/views.py | 22 ++-------------------- 2 files changed, 25 insertions(+), 20 deletions(-) diff --git a/plans/plan_change.py b/plans/plan_change.py index 53ad257..fa8d38a 100644 --- a/plans/plan_change.py +++ b/plans/plan_change.py @@ -1,5 +1,7 @@ # coding=utf-8 from decimal import Decimal +from django.conf import settings +from plans.importer import import_name class PlanChangePolicy(object): @@ -96,3 +98,24 @@ def _calculate_final_price(self, period, day_cost_diff): return None else: return cost + + +def get_policy(): + policy_class = getattr( + settings, + "PLANS_CHANGE_POLICY", + "plans.plan_change.StandardPlanChangePolicy", + ) + return import_name(policy_class)() + + +def get_change_price(userplan, plan): + policy = get_policy() + + if userplan.expire is not None: + period = userplan.days_left() + else: + # Use the default period of the new plan + period = 30 + + return policy.get_change_price(userplan.plan, plan, period) diff --git a/plans/views.py b/plans/views.py index 628ba94..8fd2c30 100644 --- a/plans/views.py +++ b/plans/views.py @@ -40,6 +40,7 @@ from plans.signals import order_started from plans.utils import get_currency from plans.validators import plan_validation +from plans.plan_change import get_change_price UserPlan = AbstractUserPlan.get_concrete_model() PlanPricing = AbstractPlanPricing.get_concrete_model() @@ -340,27 +341,8 @@ def get_all_context(self): ) self.pricing = None - def get_policy(self): - policy_class = getattr( - settings, - "PLANS_CHANGE_POLICY", - "plans.plan_change.StandardPlanChangePolicy", - ) - return import_name(policy_class)() - def get_price(self): - policy = self.get_policy() - userplan = self.request.user.userplan - - if userplan.expire is not None: - period = self.request.user.userplan.days_left() - else: - # Use the default period of the new plan - period = 30 - - return policy.get_change_price( - self.request.user.userplan.plan, self.plan, period - ) + return get_change_price(self.request.user.userplan, self.plan) def get_context_data(self, **kwargs): context = super(CreateOrderView, self).get_context_data(**kwargs)