add payment_link and banks
This commit is contained in:
1 parent
2ae79b1ca4
commit
de3135b588
100 files changed
+6167
-47
No files matched your search
@@ -13,20 +13,44 @@ class SMSTemplate(PersianTextNormalizationMixin, models.Model):
|
||||
CUSTOMER_TICKET_CREATED="CUSTOMER_TICKET_CREATED","ثبت تیکت توسط مشتری"
|
||||
STAFF_TICKET_CREATED="STAFF_TICKET_CREATED","ثبت تیکت توسط کارشناس"
|
||||
STAFF_REPLY="STAFF_REPLY","پاسخ کارشناس"
|
||||
PAYMENT_NOTICE_CREATED="PAYMENT_NOTICE_CREATED","صدور اعلامیه واریز"
|
||||
PAYMENT_RECEIPT_APPROVED="PAYMENT_RECEIPT_APPROVED","تأیید نهایی فیش واریز"
|
||||
UNIT_SUPERVISOR_NEW_TICKET="UNIT_SUPERVISOR_NEW_TICKET","اطلاع تیکت جدید به سرپرستان واحد"
|
||||
unit=models.ForeignKey("staff.OrganizationalUnit",on_delete=models.CASCADE,null=True,blank=True,related_name="sms_templates",help_text="خالی یعنی الگوی عمومی و fallback.")
|
||||
event_type=models.CharField(max_length=50,choices=Event.choices)
|
||||
title=models.CharField(max_length=120)
|
||||
body=models.TextField(help_text="تگها را مانند {magic_link} در متن قرار دهید.")
|
||||
body=models.TextField(help_text="تگها بر اساس رویداد مشخصاند: {magic_link} برای تیکت و {payment_link} برای پرداخت.")
|
||||
allowed_tags=models.JSONField(default=sms_template_tags,blank=True)
|
||||
is_active=models.BooleanField(default=True)
|
||||
updated_at=models.DateTimeField(auto_now=True)
|
||||
class Meta:
|
||||
constraints=[models.UniqueConstraint(fields=["unit","event_type"],name="unique_sms_template_per_unit"),models.UniqueConstraint(fields=["event_type"],condition=models.Q(unit__isnull=True),name="unique_global_sms_template_event")]
|
||||
def __str__(self): return self.get_event_type_display()
|
||||
@classmethod
|
||||
def tags_for_event(cls, event_type):
|
||||
if event_type in {'PAYMENT_NOTICE_CREATED', 'PAYMENT_RECEIPT_APPROVED'}:
|
||||
from apps.payments.notifications import TAGS
|
||||
return list(TAGS)
|
||||
tags = sms_template_tags()
|
||||
return [tag for tag in tags if tag != 'magic_link'] if event_type == 'UNIT_SUPERVISOR_NEW_TICKET' else tags
|
||||
|
||||
@property
|
||||
def supported_tags(self):
|
||||
return ', '.join('{' + tag + '}' for tag in self.tags_for_event(self.event_type))
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
self.allowed_tags = self.tags_for_event(self.event_type)
|
||||
if kwargs.get('update_fields') is not None:
|
||||
kwargs['update_fields'] = set(kwargs['update_fields']) | {'allowed_tags'}
|
||||
return super().save(*args, **kwargs)
|
||||
|
||||
def clean(self):
|
||||
self.allowed_tags = self.tags_for_event(self.event_type)
|
||||
from string import Formatter
|
||||
tags={field for _,field,_,_ in Formatter().parse(self.body) if field}
|
||||
try:
|
||||
tags={field for _,field,_,_ in Formatter().parse(self.body) if field}
|
||||
except ValueError:
|
||||
raise ValidationError({'body': 'ساختار تگ معتبر نیست؛ هر تگ باید بین { و } قرار بگیرد.'})
|
||||
invalid=tags-set(self.allowed_tags)
|
||||
if invalid: raise ValidationError({"body":f"تگهای غیرمجاز: {', '.join(sorted(invalid))}"})
|
||||
|
||||
|
||||
Reference in new issue
Block a user