iranian bank gateway added to apps
schedule job for updeing bank status and az iranian bank gateway admin style
This commit is contained in:
+55
-16
@@ -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',
|
||||
),
|
||||
]
|
||||
@@ -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
@@ -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')
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user