This commit is contained in:
Sayyid Hamid Mahdavi 2026-04-22 19:59:44 +03:30
parent 82c35ffc4a
commit a318185147
3 changed files with 52 additions and 39 deletions

View file

@ -43,6 +43,17 @@ class BasePGModel(models.Model):
def reverse_request(self):
pass
@property
def jajali_datetime(self):
def to_jalali(value):
if value:
import jdatetime
return jdatetime.datetime.fromgregorian(date=value, locale='fa_IR').strftime("%Y/%m/%d-%H:%M:%S")
else:
return value
return to_jalali(self.created_at)
class Meta:
abstract = True

View file

@ -13,16 +13,23 @@ from django.urls import path
from .constans import StateChoices
from .forms import ApplicationGatewayPolicyForm
from .models import PaymentRequest, PNA, Fake, ApplicationGatewayPolicy
from .models import PaymentRequest, PNA, Fake, ApplicationGatewayPolicy, SEP
logger = logging.getLogger(__name__)
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']
class SEPAdmin(admin.ModelAdmin):
list_display = ['sep_status_code', 'sep_status_message', 'jajali_datetime', 'payment_request']
list_filter = ['sep_status']
search_fields = ['sep_status_code', 'sep_status_message']
@admin.action(description="export exel")
def export_exel(modeladmin, request, queryset):
output = io.BytesIO()
@ -55,6 +62,7 @@ def export_exel(modeladmin, request, queryset):
# return the response
return response
@admin.action(description="mark as registered")
def mark_as_registered(model_admin, request, queryset):
for obj in queryset:
@ -63,12 +71,12 @@ def mark_as_registered(model_admin, request, queryset):
class PaymentRequestAdmin(admin.ModelAdmin):
list_display = ['state', 'check_success_again', 'uuid', 'splited_amount', 'user_id', 'jajali_datetime', 'is_registered', 'created_at', 'application', 'gateway']
list_display = ['state', 'check_success_again', '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, mark_as_registered]
def changelist_view(self, request, extra_context=None):
extra_context = extra_context or {}
@ -81,7 +89,8 @@ class PaymentRequestAdmin(admin.ModelAdmin):
return super().changelist_view(request, extra_context=extra_context)
def check_success_again(self, obj):
if obj.state in [StateChoices.IPG_SUCCESS, StateChoices.WALLET_SUBMIT_PENDING, StateChoices.WALLET_SUBMIT_SUCCESS]:
if obj.state in [StateChoices.IPG_SUCCESS, StateChoices.WALLET_SUBMIT_PENDING,
StateChoices.WALLET_SUBMIT_SUCCESS]:
return format_html(
'<a class="button" href="{}">بررسی دوباره موفقیت</a>',
f'{obj.uuid}/check_success_again/'
@ -91,9 +100,11 @@ class PaymentRequestAdmin(admin.ModelAdmin):
def get_urls(self):
urls = super().get_urls()
custom_urls = [
path('<uuid:payment_request_uuid>/check_success_again/', self.admin_site.admin_view(self.check_success_again_view))
path('<uuid:payment_request_uuid>/check_success_again/',
self.admin_site.admin_view(self.check_success_again_view))
]
return custom_urls + urls
def check_success_again_view(self, request, payment_request_uuid):
logger.info(f"[Admin panel] Check success again for payment_request_uuid={payment_request_uuid}")
payment_request: PaymentRequest = get_object_or_404(PaymentRequest, uuid=payment_request_uuid)
@ -120,5 +131,6 @@ class ApplicationGatewayPolicyAdmin(admin.ModelAdmin):
admin.site.register(PaymentRequest, PaymentRequestAdmin)
admin.site.register(PNA, PNAAdmin)
admin.site.register(SEP, SEPAdmin)
admin.site.register(Fake, FakeAdmin)
admin.site.register(ApplicationGatewayPolicy, ApplicationGatewayPolicyAdmin)

View file

@ -243,16 +243,6 @@ class PNA(BasePGModel):
client = PNAClient()
@property
def jajali_datetime(self):
def to_jalali(value):
if value:
return jdatetime.datetime.fromgregorian(date=value, locale='fa_IR').strftime("%Y/%m/%d-%H:%M:%S")
else:
return value
return to_jalali(self.created_at)
def make_request(self):
self.payment_request.change_state(StateChoices.CREATED, StateChoices.IPG_PENDING, 'can not change state')
amount = self.payment_request.amount + self.payment_request.commission
@ -428,27 +418,27 @@ class SEP(BasePGModel):
raise NotImplementedError()
# class Fake(BasePGModel):
class Fake(BasePGModel):
# label = GatewayChoise.FAKE.value
# image = f'image/{GatewayChoise.FAKE.value}.png'
#
# payment_request = models.OneToOneField(PaymentRequest, on_delete=models.PROTECT, related_name='+')
#
# def make_request(self):
# self.payment_request.change_state(StateChoices.CREATED, StateChoices.IPG_PENDING, 'can not change state')
#
# def get_pg_page_url(self):
# return reverse('pg:payment-confirm-view', kwargs={'uuid': self.payment_request.uuid})
#
# def confirm_request(self, request=None):
# self.payment_request.change_state(StateChoices.IPG_PENDING, StateChoices.IPG_SUCCESS, 'can not change state')
#
# self.payment_request.charge_wallet_balance()
# messages.success(request, 'شارژ انجام شد')
# self.save()
#
# def reverse_request(self):
# raise NotImplementedError()
payment_request = models.OneToOneField(PaymentRequest, on_delete=models.PROTECT, related_name='+')
def make_request(self):
self.payment_request.change_state(StateChoices.CREATED, StateChoices.IPG_PENDING, 'can not change state')
def get_pg_page_url(self):
return reverse('pg:payment-confirm-view', kwargs={'uuid': self.payment_request.uuid})
def confirm_request(self, request=None):
self.payment_request.change_state(StateChoices.IPG_PENDING, StateChoices.IPG_SUCCESS, 'can not change state')
self.payment_request.charge_wallet_balance()
messages.success(request, 'شارژ انجام شد')
self.save()
def reverse_request(self):
raise NotImplementedError()
class ApplicationGatewayPolicy(BaseModel):