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
+55 -16
View File
@@ -1,4 +1,4 @@
from django.contrib import admin
from django.contrib import admin, messages
from .models import *
from unfold.admin import TabularInline, StackedInline
@@ -8,6 +8,11 @@ from unfold.contrib.forms.widgets import ArrayWidget, WysiwygWidget
from django.contrib.postgres.fields import ArrayField
from utils.admin import ModelAdmin
from django.utils.html import format_html, format_html_join
from azbankgateways.models.banks import Bank
from unfold.decorators import action
from django.shortcuts import redirect
class OrderItemModelInline(StackedInline):
model = OrderItemModel
extra = 0
@@ -26,34 +31,68 @@ class DiscountCodeAdmin(ModelAdmin, ImportExportModelAdmin):
list_display = ['code', 'expiration_date', 'percent', 'quantity']
class BankRecordInline(StackedInline):
model = Bank
extra = 0
max_num = 0
def has_delete_permission(self, request, obj=None):
return False
def get_readonly_fields(self, request, obj=None):
return [field.name for field in self.model._meta.fields]
@admin.register(OrderModel)
class OrderAdmin(ModelAdmin, ImportExportModelAdmin):
import_form_class = ImportForm
export_form_class = ExportForm
list_filter = ['is_paid', 'status']
list_display = ['user', 'is_paid', 'status', 'discount_code', 'address', ]
readonly_fields = ('created_at', 'bank_links')
actions_list = ['redirect_to_learn', 'udpate_bank_status']
list_display = ['user', 'is_paid', 'status', 'discount_code', 'address',]
readonly_fields = ('created_at', )
compressed_fields = True
warn_unsaved_form = True
exclude = ('bank_records',)
# exclude = ('bank_records',)
formfield_overrides = {
ArrayField: {
"widget": ArrayWidget,
}
}
inlines = [OrderItemModelInline]
def bank_links(self, obj):
banks = obj.bank_records.all()
inlines = [OrderItemModelInline, BankRecordInline]
# def bank_links(self, obj):
# banks = obj.bank_records.all()
if not banks.exists():
return "-"
# if not banks.exists():
# return "-"
return format_html_join(
"",
'<a style="padding-bottom:10px;display:block;" href="/secret-admin/azbankgateways/bank/{}/change/" class="text-primary-600 dark:text-primary-500">{}</a>',
[(bank.id, bank.tracking_code) for bank in banks]
) or "-"
# return format_html_join(
# "",
# '<a style="padding-bottom:10px;display:block;" href="/secret-admin/azbankgateways/bank/{}/change/" class="text-primary-600 dark:text-primary-500">{}</a>',
# [(bank.id, bank.tracking_code) for bank in banks]
# ) or "-"
bank_links.short_description = "Bank Records"
# bank_links.short_description = "Bank Records"
@action(description='اپدیت وضعیت رکورد های بانکی')
def udpate_bank_status(self, request):
import logging
from azbankgateways import (
bankfactories,
models as bank_models,
default_settings as settings,
)
factory = bankfactories.BankFactory()
bank_models.Bank.objects.update_expire_records()
for item in bank_models.Bank.objects.filter_return_from_bank():
bank = factory.create(
bank_type=item.bank_type, identifier=item.bank_choose_identifier
)
bank.verify(item.tracking_code)
bank_record = bank_models.Bank.objects.get(tracking_code=item.tracking_code)
if bank_record.is_success:
logging.debug("This record is verify now.", extra={"pk": bank_record.pk})
messages.success(request, f"با موفقیت اپدیت شد")
return redirect("admin:order_ordermodel_changelist")
@@ -0,0 +1,17 @@
# Generated by Django 5.1.2 on 2025-03-18 13:30
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('order', '0022_alter_orderitemmodel_price'),
]
operations = [
migrations.RemoveField(
model_name='ordermodel',
name='bank_records',
),
]
+1 -2
View File
@@ -4,7 +4,6 @@ from product.models import ProductModel, ProductVariant, ProductImageModel
from django.utils import timezone
from .execptions import DiscountNotAvailableError
from django_jalali.db import models as jmodels
from azbankgateways.models.banks import Bank
class DiscountCode(models.Model):
@@ -56,7 +55,7 @@ class OrderModel(models.Model):
tax = models.BigIntegerField(null=True, blank=True, verbose_name='مالیات')
final_price = models.BigIntegerField(null=True, blank=True, verbose_name='قیمت نهایی')
cart_total = models.BigIntegerField(null=True, blank=True, verbose_name='کل سبد خرید')
bank_records = models.ManyToManyField(Bank, max_length=100, verbose_name='رکورد بانکی', null=True, blank=True)
# bank_records = models.ManyToManyField(Bank, max_length=100, verbose_name='رکورد بانکی', null=True, blank=True)
def __str__(self):
return f'سفارش: {self.id + 1000}'
+17 -10
View File
@@ -5,15 +5,22 @@ from azbankgateways import (
default_settings as settings,
)
# factory = bankfactories.BankFactory()
# bank_models.Bank.objects.update_expire_records()
from celery import shared_task
# for item in bank_models.Bank.objects.filter_return_from_bank():
# bank = factory.create(
# bank_type=item.bank_type, identifier=item.bank_choose_identifier
# )
# bank.verify(item.tracking_code)
# bank_record = bank_models.Bank.objects.get(tracking_code=item.tracking_code)
# if bank_record.is_success:
# logging.debug("This record is verify now.", extra={"pk": bank_record.pk})
@shared_task
def udpate_bank_status():
factory = bankfactories.BankFactory()
bank_models.Bank.objects.update_expire_records()
for item in bank_models.Bank.objects.filter_return_from_bank():
bank = factory.create(
bank_type=item.bank_type, identifier=item.bank_choose_identifier
)
bank.verify(item.tracking_code)
bank_record = bank_models.Bank.objects.get(tracking_code=item.tracking_code)
if bank_record.is_success:
logging.debug("This record is verify now.", extra={"pk": bank_record.pk})
print('update bank record is done')
+4 -3
View File
@@ -205,9 +205,10 @@ class PaymentView(APIView):
bank.set_mobile_number(user_mobile_number)
bank_record = bank.ready()
cart_order.bank_records.add(bank_record)
cart_order.save()
print(bank.redirect_gateway().url)
# cart_order.bank_records.add(bank_record)
# cart_order.save()
bank_record.order = cart_order
bank_record.save()
return Response(bank.redirect_gateway().url)
except AZBankGatewaysException as e:
print(e)