This commit is contained in:
Sayyid Hamid Mahdavi 2026-04-22 21:26:32 +03:30
parent a318185147
commit 7ff91acb82
2 changed files with 32 additions and 28 deletions

View file

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

View file

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