5cbe093400
schedule job for updeing bank status and az iranian bank gateway admin style
93 lines
3.1 KiB
Python
93 lines
3.1 KiB
Python
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
|