ipg/apps/pg/admin.py
hgh 8ceb818edc FEATURE(pg):adding is registered field to payment request and batch mark as registered
adding is registered field to payment request and batch mark as registered
2025-10-14 11:48:14 +03:30

93 lines
No EOL
3.3 KiB
Python

import io
import jdatetime
import xlsxwriter
from django.contrib import admin
from django.db.models import Sum
from django.http import HttpResponse
from django.utils import timezone
from .constans import StateChoices
from .models import PaymentRequest, PNA, Fake
class PNAAdmin(admin.ModelAdmin):
list_display = ['pna_status_code', 'pna_status_message', 'jajali_datetime', 'payment_request']
list_filter = ['pna_status']
search_fields = ['pna_status_code', 'pna_status_message']
@admin.action(description="export exel")
def export_exel(modeladmin, request, queryset):
output = io.BytesIO()
workbook = xlsxwriter.Workbook(output, options={"remove_timezone": True})
worksheet = workbook.add_worksheet()
for col, header in enumerate([]):
worksheet.write(0, col, header)
for row, payment_request in enumerate(queryset, 1):
worksheet.write(row, 0, payment_request.amount)
worksheet.write(row, 1, str(payment_request.pk))
worksheet.write(row, 2, str(payment_request.user.pk))
worksheet.write(row, 3, payment_request.jajali_datetime)
worksheet.write(row, 4, payment_request.gateway)
worksheet.write(row, 5, payment_request.get_state_display())
workbook.close()
# create a response
response = HttpResponse(content_type='application/vnd.ms-excel')
# tell the browser what the file is named
file_name = jdatetime.date.fromgregorian(date=timezone.now(), locale='fa_IR').strftime("%Y/%m/%d")
response['Content-Disposition'] = f'attachment;filename="{file_name}.xlsx"'
# put the spreadsheet data into the response
response.write(output.getvalue())
# return the response
return response
@admin.action(description="change to success")
def change_to_success(model_admin, request, queryset):
for obj in queryset:
obj.change_state(StateChoices.WALLET_SUBMIT_SUCCESS, StateChoices.SUCCESS, 'change to success by admin')
@admin.action(description="change to failed")
def change_to_failed(model_admin, request, queryset):
for obj in queryset:
obj.change_state(StateChoices.WALLET_SUBMIT_SUCCESS, StateChoices.FAILED, 'change to failed by admin')
@admin.action(description="mark as registered")
def mark_as_registered(model_admin, request, queryset):
for obj in queryset:
obj.is_registered = True
obj.save(update_fields=['is_registered'])
class PaymentRequestAdmin(admin.ModelAdmin):
list_display = ['state', 'uuid', 'splited_amount', 'user_id', 'jajali_datetime', 'is_registered', 'created_at', 'application', 'gateway']
search_fields = ['application__uuid','application__client_id', 'amount', 'user__uuid']
list_filter = ['application', 'state', 'gateway']
actions = [export_exel, change_to_success, change_to_failed, mark_as_registered]
def changelist_view(self, request, extra_context=None):
extra_context = extra_context or {}
cl = self.get_changelist_instance(request)
queryset = cl.result_list
totals = queryset.aggregate(
total_amount=Sum('amount'),
)
extra_context['totals'] = totals
return super().changelist_view(request, extra_context=extra_context)
class FakeAdmin(admin.ModelAdmin):
list_display = [ 'created_at']
admin.site.register(PaymentRequest, PaymentRequestAdmin)
admin.site.register(PNA, PNAAdmin)
admin.site.register(Fake, FakeAdmin)