iranian bank gateway added to apps

schedule job for updeing bank status and az iranian bank gateway admin style
This commit is contained in:
Parsa Nazer
2025-03-18 18:18:09 +03:30
parent 062001ef0e
commit 5cbe093400
52 changed files with 3008 additions and 34 deletions
+92
View File
@@ -0,0 +1,92 @@
import datetime
from django.db import models
from django.utils.translation import gettext_lazy as _
from .enum import BankType, PaymentStatus
from order.models import OrderModel
class BankQuerySet(models.QuerySet):
def __init__(self, *args, **kwargs):
super(BankQuerySet, self).__init__(*args, **kwargs)
def active(self):
return self.filter()
class BankManager(models.Manager):
def get_queryset(self):
return BankQuerySet(self.model, using=self._db)
def active(self):
return self.get_queryset().active()
def update_expire_records(self):
count = (
self.active()
.filter(
status=PaymentStatus.RETURN_FROM_BANK,
update_at__lte=datetime.datetime.now() - datetime.timedelta(minutes=15),
)
.update(status=PaymentStatus.EXPIRE_VERIFY_PAYMENT)
)
count = count + self.active().filter(
status=PaymentStatus.REDIRECT_TO_BANK,
update_at__lt=datetime.datetime.now() - datetime.timedelta(minutes=15),
).update(status=PaymentStatus.EXPIRE_GATEWAY_TOKEN)
return count
def filter_return_from_bank(self):
return self.active().filter(status=PaymentStatus.RETURN_FROM_BANK)
class Bank(models.Model):
status = models.CharField(
max_length=50,
null=False,
blank=False,
choices=PaymentStatus.choices,
verbose_name=_("Status"),
)
bank_type = models.CharField(
max_length=50,
choices=BankType.choices,
verbose_name=_("Bank"),
)
# It's local and generate locally
tracking_code = models.CharField(max_length=255, null=False, blank=False, verbose_name=_("Tracking code"))
amount = models.CharField(max_length=10, null=False, blank=False, verbose_name=_("Amount"))
# Reference number return from bank
reference_number = models.CharField(
unique=True,
max_length=255,
null=False,
blank=False,
verbose_name=_("Reference number"),
)
response_result = models.TextField(null=True, blank=True, verbose_name=_("Bank result"))
callback_url = models.TextField(null=False, blank=False, verbose_name=_("Callback url"))
extra_information = models.TextField(null=True, blank=True, verbose_name=_("Extra information"))
bank_choose_identifier = models.CharField(
max_length=255, blank=True, null=True, verbose_name=_("Bank choose identifier")
)
order = models.ForeignKey(OrderModel, on_delete=models.SET_NULL, null=True, blank=True ,related_name='bank_records')
created_at = models.DateTimeField(auto_now_add=True, editable=False, verbose_name=_("Created at"))
update_at = models.DateTimeField(auto_now=True, editable=False, verbose_name=_("Updated at"))
objects = BankManager()
class Meta:
verbose_name = _("Bank gateway")
verbose_name_plural = _("Bank gateways")
def __str__(self):
return "{}-{}".format(self.pk, self.tracking_code)
@property
def is_success(self):
return self.status == PaymentStatus.COMPLETE