From 9d79f30518e310abd689f43df137b76a72173e41 Mon Sep 17 00:00:00 2001 From: Haydar Ghasemi Date: Tue, 11 Nov 2025 13:16:15 +0330 Subject: [PATCH 1/3] FEAT(pg): ipg commission ipg commission --- .../0007_paymentrequest_commission.py | 18 ++++++++++++++++++ apps/pg/models.py | 11 ++++++++++- apps/pg/views.py | 1 + 3 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 apps/pg/migrations/0007_paymentrequest_commission.py diff --git a/apps/pg/migrations/0007_paymentrequest_commission.py b/apps/pg/migrations/0007_paymentrequest_commission.py new file mode 100644 index 0000000..b7bb0cd --- /dev/null +++ b/apps/pg/migrations/0007_paymentrequest_commission.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.4 on 2025-11-10 15:10 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('pg', '0006_paymentrequest_is_registered'), + ] + + operations = [ + migrations.AddField( + model_name='paymentrequest', + name='commission', + field=models.PositiveBigIntegerField(null=True), + ), + ] diff --git a/apps/pg/models.py b/apps/pg/models.py index 958a020..d0ab3e1 100644 --- a/apps/pg/models.py +++ b/apps/pg/models.py @@ -39,6 +39,7 @@ class PaymentRequest(models.Model): state = models.IntegerField(choices=StateChoices.choices, default=StateChoices.CREATED) user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.PROTECT) amount = models.PositiveBigIntegerField(null=True, blank=True) + commission = models.PositiveBigIntegerField(null=True) phone_number = models.CharField(max_length=255, null=True, blank=True) callback_url = models.CharField(max_length=255, null=True, blank=True) @@ -68,6 +69,14 @@ class PaymentRequest(models.Model): return to_jalali(self.created_at) + def calculate_commission(self): + self.commission = 1200 + if 6000000 <= self.amount <= 400000000: + self.commission = 0.0002 * self.amount + elif 400000000 < self.amount: + self.commission = 80000 + self.save(update_fields=['commission']) + def get_gateway_tools(self): if self.gateway == GatewayChoise.PNA: @@ -225,7 +234,7 @@ class PNA(BasePGModel): def make_request(self): self.payment_request.change_state(StateChoices.CREATED, StateChoices.IPG_PENDING, 'can not change state') - amount = self.payment_request.amount + amount = self.payment_request.amount + self.payment_request.commission description = 'from addwin ipg' callback_url = urllib.parse.urljoin( settings.IPG_BASE_PUBLIC_URL, diff --git a/apps/pg/views.py b/apps/pg/views.py index 9f58a73..4fd4469 100644 --- a/apps/pg/views.py +++ b/apps/pg/views.py @@ -59,6 +59,7 @@ class PaymentRequestView(UpdateView): def get(self, request, *args, **kwargs): charge_request: PaymentRequest = self.get_object() charge_request.set_gateway({'pna': True}) + charge_request.calculate_commission() tool = charge_request.get_gateway_tools() tool.make_request() redirect_url = tool.get_pg_page_url() From fbff6b1336f077c7ef34cf5670fefb090e39cd21 Mon Sep 17 00:00:00 2001 From: Haydar Ghasemi Date: Tue, 11 Nov 2025 14:47:22 +0330 Subject: [PATCH 2/3] FEAT(pg): ipg commission ipg commission --- apps/pg/models.py | 14 +++++++------- main/settings.py | 5 +++++ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/apps/pg/models.py b/apps/pg/models.py index d0ab3e1..01358df 100644 --- a/apps/pg/models.py +++ b/apps/pg/models.py @@ -14,8 +14,8 @@ from apps.core.models import BaseModel, BasePGModel from apps.pg.constans import StateChoices import uuid -from utils.wallet_client import deposit_to_user_wallet_submit, \ - deposit_to_user_wallet_verify +from utils.wallet_client import deposit_to_user_wallet_submit, deposit_to_user_wallet_verify +from main import settings from utils.pna import PNAClient from django.utils.translation import gettext_lazy as _ @@ -70,11 +70,11 @@ class PaymentRequest(models.Model): return to_jalali(self.created_at) def calculate_commission(self): - self.commission = 1200 - if 6000000 <= self.amount <= 400000000: - self.commission = 0.0002 * self.amount - elif 400000000 < self.amount: - self.commission = 80000 + self.commission = settings.COMMISSION_LEVEL1 + if settings.COMMISSION_LEVEL2_MIN_AMOUNT <= self.amount <= settings.COMMISSION_LEVEL2_MAX_AMOUNT: + self.commission = settings.COMMISSION_LEVEL2_RATE * self.amount + elif settings.COMMISSION_LEVEL2_MAX_AMOUNT < self.amount: + self.commission = settings.COMMISSION_LEVEL3 self.save(update_fields=['commission']) diff --git a/main/settings.py b/main/settings.py index 1dfd128..602da3a 100644 --- a/main/settings.py +++ b/main/settings.py @@ -257,3 +257,8 @@ PNA_CORPORATION_PIN = config('PNA_CORPORATION_PIN') WALLET_BASE_PUBLIC_URL = config('WALLET_BASE_PUBLIC_URL') WALLET_RIAL = config('WALLET_RIAL') IPG_BASE_PUBLIC_URL = config('IPG_BASE_PUBLIC_URL') +COMMISSION_LEVEL1 = config('COMMISSION_LEVEL1', cast=int) +COMMISSION_LEVEL2_MIN_AMOUNT = config('COMMISSION_LEVEL2_MIN_AMOUNT', cast=int) +COMMISSION_LEVEL2_MAX_AMOUNT = config('COMMISSION_LEVEL2_MAX_AMOUNT', cast=int) +COMMISSION_LEVEL2_RATE = config('COMMISSION_LEVEL2_RATE', cast=float) +COMMISSION_LEVEL3 = config('COMMISSION_LEVEL3', cast=int) From 0bb1889f27e6ae6ac62703c86d8788397ce91706 Mon Sep 17 00:00:00 2001 From: Haydar Ghasemi Date: Tue, 11 Nov 2025 14:50:52 +0330 Subject: [PATCH 3/3] FEAT(pg): ipg commission COMMISSION_LEVEL1=1200 COMMISSION_LEVEL2_MIN_AMOUNT=6000000 COMMISSION_LEVEL2_MAX_AMOUNT=400000000 COMMISSION_LEVEL2_RATE=0.0002 COMMISSION_LEVEL3=80000 --- apps/pg/models.py | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/pg/models.py b/apps/pg/models.py index 01358df..605229c 100644 --- a/apps/pg/models.py +++ b/apps/pg/models.py @@ -77,7 +77,6 @@ class PaymentRequest(models.Model): self.commission = settings.COMMISSION_LEVEL3 self.save(update_fields=['commission']) - def get_gateway_tools(self): if self.gateway == GatewayChoise.PNA: return PNA.objects.get(payment_request=self)