diff --git a/apps/pg/models.py b/apps/pg/models.py index 595ad18..502d02c 100644 --- a/apps/pg/models.py +++ b/apps/pg/models.py @@ -104,16 +104,15 @@ class PaymentRequest(models.Model): gateway_class = get_gateway_class(self.gateway) return gateway_class.objects.get(payment_request=self) - def set_gateway(self, data): + def set_gateway(self, gateway_label): preferred_gateways = self.get_preferred_gateways() - for gateway_label in preferred_gateways: - if gateway_label in data: - self.gateway = gateway_label - gateway_class = get_gateway_class(gateway_label) - pg = gateway_class.objects.create(payment_request=self) - pg.payment_request = self + if gateway_label in preferred_gateways: + self.gateway = gateway_label + gateway_class = get_gateway_class(gateway_label) + pg = gateway_class.objects.create(payment_request=self) + pg.payment_request = self - self.save() + self.save() if not self.gateway: raise Exception('No gateway') @@ -122,7 +121,7 @@ class PaymentRequest(models.Model): def reference_number(self): gateway_tools = self.get_gateway_tools() if gateway_tools: - return f'{self.gateway.value}{gateway_tools.pk}' + return f'{self.gateway}{gateway_tools.pk}' else: return '00000000' diff --git a/apps/pg/views.py b/apps/pg/views.py index a8c6a72..ec3c502 100644 --- a/apps/pg/views.py +++ b/apps/pg/views.py @@ -14,7 +14,7 @@ from django.shortcuts import render from utils.commons import calculate_pna_commission from .constans import StateChoices from .forms import PaymentRequestForm -from .models import PaymentRequest +from .models import PaymentRequest, get_gateway_class from .serializers import PaymentRequestSerializer, CommissionSerializer from ..core.models import BasePGModel from ..gooyal_oauth2.utils import get_application @@ -144,30 +144,35 @@ class PaymentRequestView(UpdateView): def form_valid(self, form): self.object = form.save() charge_request: PaymentRequest = self.get_object() + application_policy = charge_request.get_policy() + preferred_gateways = application_policy.get_preferred_gateways() - charge_request.set_gateway(form.data) - charge_request.save_commission() + if preferred_gateways: + for gateway_label in preferred_gateways: + if gateway_label in form.data: + charge_request.set_gateway(gateway_label) + charge_request.save_commission() - tool:BasePGModel = charge_request.get_gateway_tools() + tool:BasePGModel = charge_request.get_gateway_tools() + tool.make_request() - tool.make_request() + redirect_url = tool.get_pg_page_url() - redirect_url = tool.get_pg_page_url() - - if redirect_url: - if tool.redirect_method == 'GET': - return HttpResponseRedirect(redirect_url) - elif tool.redirect_method == 'POST': - print(redirect_url) - else: - pass + if redirect_url: + if tool.redirect_method == 'GET': + return HttpResponseRedirect(redirect_url) + elif tool.redirect_method == 'POST': + print(redirect_url) + return + else: + pass - else: - messages.error(self.request, 'can not redirect to payment gateway') - messages.info(self.request, 'در پردازش صفحه خطایی وجود دارد.') - # TODO: redirect to error page - return HttpResponseRedirect(reverse('pg:payment-confirm-view', kwargs={'uuid': charge_request.uuid})) + + messages.error(self.request, 'can not redirect to payment gateway') + messages.info(self.request, 'در پردازش صفحه خطایی وجود دارد.') + # TODO: redirect to error page + return HttpResponseRedirect(reverse('pg:payment-confirm-view', kwargs={'uuid': charge_request.uuid})) @method_decorator(csrf_exempt, name='dispatch')