5cbe093400
schedule job for updeing bank status and az iranian bank gateway admin style
98 lines
3.5 KiB
Python
98 lines
3.5 KiB
Python
from django.contrib import admin, messages
|
|
from .models import *
|
|
from unfold.admin import TabularInline, StackedInline
|
|
|
|
from import_export.admin import ImportExportModelAdmin
|
|
from unfold.contrib.import_export.forms import ExportForm, ImportForm, SelectableFieldsExportForm
|
|
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
|
|
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(DiscountCode)
|
|
class DiscountCodeAdmin(ModelAdmin, ImportExportModelAdmin):
|
|
import_form_class = ImportForm
|
|
export_form_class = ExportForm
|
|
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']
|
|
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',)
|
|
formfield_overrides = {
|
|
ArrayField: {
|
|
"widget": ArrayWidget,
|
|
}
|
|
}
|
|
inlines = [OrderItemModelInline, BankRecordInline]
|
|
# def bank_links(self, obj):
|
|
# banks = obj.bank_records.all()
|
|
|
|
# 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 "-"
|
|
|
|
# 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") |