diff --git a/apps/pg/admin.py b/apps/pg/admin.py index 8f48238..609c0b9 100644 --- a/apps/pg/admin.py +++ b/apps/pg/admin.py @@ -1,5 +1,11 @@ +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 .models import PaymentRequest, PNA, Fake @@ -10,10 +16,47 @@ class PNAAdmin(admin.ModelAdmin): 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 + + + + class PaymentRequestAdmin(admin.ModelAdmin): list_display = ['state', 'uuid', 'splited_amount', 'user_id', 'jajali_datetime', 'application', 'gateway'] search_fields = ['application__uuid','application__client_id', 'amount', 'user__uuid'] list_filter = ['application', 'state', 'gateway'] + actions = [export_exel] + def changelist_view(self, request, extra_context=None): extra_context = extra_context or {} diff --git a/requirements.in b/requirements.in index 47bd1bb..fcd0ee8 100644 --- a/requirements.in +++ b/requirements.in @@ -16,4 +16,6 @@ django-oauth-toolkit redis celery httpx -django-redis \ No newline at end of file +django-redis +xlsxwriter +xlrd \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index fb0e1f6..f156612 100644 --- a/requirements.txt +++ b/requirements.txt @@ -175,6 +175,10 @@ vine==5.1.0 # kombu wcwidth==0.2.13 # via prompt-toolkit +xlrd==2.0.2 + # via -r requirements.in +xlsxwriter==3.2.5 + # via -r requirements.in zope-event==5.0 # via gevent zope-interface==7.2