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( # "", # '{}', # [(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")