fix payment
This commit is contained in:
1 parent
4f7486152c
commit
bb3ddd1610
47 files changed
+2137
-51
No files matched your search
@@ -4,6 +4,8 @@ from pathlib import Path
|
||||
from django.conf import settings
|
||||
from django.db import models
|
||||
from apps.core.models import PublicIdModel, TimeStampedModel
|
||||
from .deposit_identifier import normalize_deposit_identifier
|
||||
from .alert_templates import DEFAULT_RECEIPT_SMS, DEFAULT_RECEIPT_CAPTION, ALERT_TEMPLATE_HELP, validate_alert_template
|
||||
|
||||
MAX_AMOUNT = 9_007_199_254_740_991
|
||||
|
||||
@@ -87,6 +89,10 @@ class PaymentNotice(PublicIdModel, TimeStampedModel):
|
||||
cancelled_at = models.DateTimeField(null=True, blank=True)
|
||||
deleted_at = models.DateTimeField(null=True, blank=True, editable=False)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
self.deposit_id = normalize_deposit_identifier(self.deposit_id)
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
class Meta:
|
||||
ordering = ['-created_at', '-pk']
|
||||
constraints = [models.CheckConstraint(condition=models.Q(amount__gt=0, amount__lte=MAX_AMOUNT), name='pay_notice_amount')]
|
||||
@@ -145,6 +151,10 @@ class PaymentReceiptRevision(models.Model):
|
||||
original_name = models.CharField(max_length=255)
|
||||
file_size = models.PositiveBigIntegerField()
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
self.deposit_id = normalize_deposit_identifier(self.deposit_id)
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
class Meta:
|
||||
constraints = [models.UniqueConstraint(fields=['receipt', 'version'], name='pay_receipt_revision'), models.CheckConstraint(condition=models.Q(amount__gt=0, amount__lte=MAX_AMOUNT), name='pay_receipt_amount')]
|
||||
|
||||
@@ -233,3 +243,84 @@ class PaymentNotificationAttempt(models.Model):
|
||||
provider_code = models.CharField(max_length=50, blank=True)
|
||||
provider_id = models.CharField(max_length=500, blank=True)
|
||||
error = models.TextField(blank=True)
|
||||
|
||||
|
||||
class PaymentReceiptAlertConfiguration(models.Model):
|
||||
"""Independent, initially disabled destinations for customer receipt uploads."""
|
||||
bale_enabled = models.BooleanField('ارسال تصویر فیش به بله', default=False)
|
||||
bale_token = models.CharField('توکن ربات بله پرداخت', max_length=500, blank=True)
|
||||
bale_chat_id = models.CharField('شناسه گروه بله', max_length=150, blank=True)
|
||||
bale_caption = models.TextField('متن همراه تصویر', default=DEFAULT_RECEIPT_CAPTION,
|
||||
validators=[validate_alert_template], help_text=ALERT_TEMPLATE_HELP, max_length=3000)
|
||||
sms_enabled = models.BooleanField('پیامک فیش جدید به مدیران', default=False)
|
||||
sms_template = models.TextField('متن پیامک مدیران', default=DEFAULT_RECEIPT_SMS,
|
||||
validators=[validate_alert_template], help_text=ALERT_TEMPLATE_HELP, max_length=1000)
|
||||
notify_revisions = models.BooleanField('اطلاعرسانی فیش اصلاحشده مشتری', default=True)
|
||||
updated_at = models.DateTimeField('آخرین ویرایش', auto_now=True)
|
||||
|
||||
class Meta:
|
||||
verbose_name = 'تنظیمات اطلاعرسانی فیش مشتری'
|
||||
verbose_name_plural = 'تنظیمات اطلاعرسانی فیش مشتری'
|
||||
permissions = [('manage_receipt_alerts', 'Manage receipt alert settings and recipients')]
|
||||
constraints = [models.CheckConstraint(condition=models.Q(pk=1), name='pay_receipt_alert_singleton')]
|
||||
|
||||
def __str__(self):
|
||||
return 'اطلاعرسانی فیش مشتری'
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
self.pk = 1
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
def clean(self):
|
||||
from django.core.exceptions import ValidationError
|
||||
self.pk = 1
|
||||
self.bale_token = self.bale_token.strip()
|
||||
self.bale_chat_id = self.bale_chat_id.strip()
|
||||
if self.bale_token and any(char.isspace() or char in '/?#' for char in self.bale_token):
|
||||
raise ValidationError({'bale_token': 'توکن معتبر ربات را وارد کنید.'})
|
||||
if self.bale_enabled and (not self.bale_token or not self.bale_chat_id):
|
||||
raise ValidationError('برای فعال کردن بله، توکن ربات و شناسه گروه را تکمیل کنید.')
|
||||
|
||||
|
||||
class PaymentReceiptAlertRecipient(models.Model):
|
||||
configuration = models.ForeignKey(PaymentReceiptAlertConfiguration, on_delete=models.PROTECT, related_name='recipients')
|
||||
name = models.CharField('نام مدیر', max_length=150)
|
||||
mobile = models.CharField('شماره موبایل مدیر', max_length=20)
|
||||
is_active = models.BooleanField('دریافت پیامک فعال', default=True)
|
||||
|
||||
class Meta:
|
||||
verbose_name = 'مدیر دریافتکننده پیامک فیش'
|
||||
verbose_name_plural = 'مدیران دریافتکننده پیامک فیش'
|
||||
constraints = [models.UniqueConstraint(fields=['configuration', 'mobile'], name='pay_receipt_alert_mobile')]
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
def clean(self):
|
||||
from apps.accounts.models import normalize_mobile
|
||||
from django.core.exceptions import ValidationError
|
||||
from .validators import digits
|
||||
try:
|
||||
self.mobile = normalize_mobile(digits(self.mobile))
|
||||
except ValueError:
|
||||
raise ValidationError({'mobile': 'شماره موبایل معتبر مدیر را وارد کنید.'})
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
self.clean()
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
|
||||
class PaymentReceiptAlert(models.Model):
|
||||
job = models.OneToOneField('notifications.NotificationJob', on_delete=models.PROTECT, related_name='receipt_alert')
|
||||
revision = models.ForeignKey(PaymentReceiptRevision, on_delete=models.PROTECT, related_name='alerts')
|
||||
recipient = models.ForeignKey(PaymentReceiptAlertRecipient, null=True, blank=True, on_delete=models.PROTECT)
|
||||
recipient_name = models.CharField('نام گیرنده هنگام ثبت', max_length=150, blank=True)
|
||||
recipient_mobile = models.CharField('موبایل گیرنده هنگام ثبت', max_length=20, blank=True)
|
||||
bale_chat_id = models.CharField('گروه هنگام ثبت', max_length=150, blank=True)
|
||||
context = models.JSONField()
|
||||
message_template = models.TextField('قالب هنگام ثبت')
|
||||
rendered_body = models.TextField('متن ارسال', blank=True)
|
||||
|
||||
class Meta:
|
||||
verbose_name = 'سابقه اعلان فیش مشتری'
|
||||
verbose_name_plural = 'سوابق اعلان فیش مشتری'
|
||||
Reference in new issue
Block a user