Files
hossein-por-shop/backend/order/admin.py
T

101 lines
3.7 KiB
Python

from django.contrib import admin, messages
from .models import *
from unfold.admin import TabularInline, StackedInline
from django.db.models import Q
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
tab = True
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
search_fields = ['user__phone', 'user__first_name', 'user__last_name', 'user__email']
list_filter = ['is_paid', 'status']
actions_list = ['redirect_to_learn', 'udpate_bank_status']
list_display = ['order_id', 'user', 'is_paid', 'status', 'discount_code', 'address',]
readonly_fields = ('created_at', 'tax', 'final_price', 'cart_total', 'discount_amount', 'discount_code', 'user', 'address', 'is_paid')
compressed_fields = True
warn_unsaved_form = True
# exclude = ('bank_records',)
formfield_overrides = {
ArrayField: {
"widget": ArrayWidget,
}
}
inlines = [OrderItemModelInline, BankRecordInline]
def order_id(self, obj):
return f"سفارش {obj.pk + 1000}"
order_id.short_description = "شماره سفارش"
def get_search_results(self, request, queryset, search_term):
queryset, use_distinct = super().get_search_results(request, queryset, search_term)
if search_term.isdigit():
order_id_search = int(search_term) - 1000
queryset |= self.model.objects.filter(Q(pk=order_id_search))
return queryset, use_distinct
@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")