fix payment
This commit is contained in:
1 parent
4f7486152c
commit
bb3ddd1610
47 files changed
+2137
-51
No files matched your search
@@ -126,3 +126,91 @@ for model in [models.PaymentNotice,models.PaymentReceipt,models.PaymentReceiptRe
|
||||
models.ReceiptApprovalAssignment,models.ReceiptDecision,models.PaymentAuditEvent,
|
||||
models.PaymentNotification,models.PaymentNotificationAttempt]:
|
||||
admin.site.register(model,EvidenceAdmin)
|
||||
|
||||
|
||||
class ReceiptAlertRecipientInline(admin.TabularInline):
|
||||
model = models.PaymentReceiptAlertRecipient
|
||||
extra = 1
|
||||
can_delete = False
|
||||
|
||||
def has_view_permission(self, request, obj=None):
|
||||
return policies.has_permission(request.user, 'manage_receipt_alerts')
|
||||
|
||||
has_add_permission = has_view_permission
|
||||
has_change_permission = has_view_permission
|
||||
|
||||
|
||||
@admin.register(models.PaymentReceiptAlertConfiguration)
|
||||
class ReceiptAlertConfigurationAdmin(AuditedConfigurationAdmin):
|
||||
from .forms import ReceiptAlertConfigurationForm
|
||||
form = ReceiptAlertConfigurationForm
|
||||
permission = 'manage_receipt_alerts'
|
||||
singleton_configuration = True
|
||||
list_display = ('__str__', 'bale_enabled', 'sms_enabled', 'notify_revisions', 'updated_at')
|
||||
readonly_fields = ('updated_at',)
|
||||
inlines = [ReceiptAlertRecipientInline]
|
||||
fieldsets = (
|
||||
('بله — تصویر فیش', {'fields': ('bale_enabled', 'bale_token', 'clear_bale_token', 'bale_chat_id', 'bale_caption')}),
|
||||
('پیامک مدیران', {'fields': ('sms_enabled', 'sms_template')}),
|
||||
('فیش اصلاحشده', {'fields': ('notify_revisions', 'updated_at')}),
|
||||
)
|
||||
|
||||
def save_related(self, request, form, formsets, change):
|
||||
super().save_related(request, form, formsets, change)
|
||||
services.audit(request.user, 'RECEIPT_ALERT_RECIPIENTS_CHANGED', form.instance,
|
||||
{'recipients': list(form.instance.recipients.values('id', 'name', 'mobile', 'is_active'))})
|
||||
|
||||
|
||||
@admin.register(models.PaymentReceiptAlertRecipient)
|
||||
class ReceiptAlertRecipientAdmin(AuditedConfigurationAdmin):
|
||||
permission = 'manage_receipt_alerts'
|
||||
list_display = ('name', 'mobile', 'is_active')
|
||||
list_filter = ('is_active',)
|
||||
search_fields = ('name', 'mobile')
|
||||
|
||||
|
||||
@admin.register(models.PaymentReceiptAlert)
|
||||
class ReceiptAlertAdmin(EvidenceAdmin):
|
||||
list_display = ('receipt_number', 'recipient_name', 'recipient_mobile', 'channel', 'status', 'attempts', 'delivery_status')
|
||||
list_select_related = ('job', 'revision__receipt', 'recipient')
|
||||
readonly_fields = ('channel', 'status', 'attempts', 'delivery_status', 'last_error', 'sent_at', 'delivery_description')
|
||||
|
||||
def has_view_permission(self, request, obj=None):
|
||||
return policies.has_permission(request.user, 'manage_receipt_alerts') or super().has_view_permission(request, obj)
|
||||
|
||||
def get_queryset(self, request):
|
||||
if policies.has_permission(request.user, 'manage_receipt_alerts'):
|
||||
return admin.ModelAdmin.get_queryset(self, request)
|
||||
return super().get_queryset(request)
|
||||
|
||||
@admin.display(description='فیش')
|
||||
def receipt_number(self, obj):
|
||||
return obj.revision.receipt.number
|
||||
|
||||
@admin.display(description='کانال')
|
||||
def channel(self, obj):
|
||||
return obj.job.get_channel_display()
|
||||
|
||||
@admin.display(description='وضعیت ارسال')
|
||||
def status(self, obj):
|
||||
return obj.job.get_status_display()
|
||||
|
||||
@admin.display(description='تعداد تلاش')
|
||||
def attempts(self, obj):
|
||||
return obj.job.attempts
|
||||
|
||||
@admin.display(description='دریافت پیامک')
|
||||
def delivery_status(self, obj):
|
||||
return obj.job.get_delivery_status_display() or 'استعلام ثبت نشده'
|
||||
|
||||
@admin.display(description='آخرین خطا')
|
||||
def last_error(self, obj):
|
||||
return obj.job.last_error
|
||||
|
||||
@admin.display(description='زمان ارسال')
|
||||
def sent_at(self, obj):
|
||||
return obj.job.sent_at
|
||||
|
||||
@admin.display(description='شرح دریافت')
|
||||
def delivery_description(self, obj):
|
||||
return obj.job.delivery_description
|
||||
Reference in new issue
Block a user