some improve
This commit is contained in:
1 parent
fa73a734a0
commit
2e5d0bcdd3
17 files changed
+1512
-226
No files matched your search
@@ -0,0 +1,113 @@
|
||||
"""افزودن نوع پیامک ``install_created`` («ثبت نصب — اقدام از نوع نصب»).
|
||||
|
||||
**این مهاجرت هیچ دادهٔ موجودی را تغییر نمیدهد.** سه کار انجام میشود:
|
||||
|
||||
۱. ``choices`` سه فیلد ``sms_type`` (قالب، تنظیم مشتری، صف) به ۸ نوع گسترش
|
||||
مییابد تا مقدار جدید در پنل/اعتبارسنجی معتبر باشد. ``AlterField`` فقط
|
||||
متادیتای ستون را عوض میکند و به ارزش ردیفها دست نمیزند.
|
||||
۲. **فقط** یک قالب تازه برای نوع جدید ساخته میشود (``get_or_create``): اگر از
|
||||
قبل وجود داشته باشد، هیچ فیلدی از آن بازنویسی نمیشود.
|
||||
* ``is_enabled=True`` ⇒ از پنل قالبها دیده/ویرایش شود.
|
||||
* ``auto_send=False`` (صریح) ⇒ در صف «در انتظار تأیید» میماند تا مدیر خودش
|
||||
تأیید/ارسال کند؛ هیچ پیامکی ناخواسته ارسال نمیشود.
|
||||
۳. قالبهای هفت نوع قبلی حتی لمس هم نمیشوند: در این فایل هیچ ``update``/``save``
|
||||
روی آنها وجود ندارد.
|
||||
|
||||
متغیرهای متنی همان ``{name}`` و ``{date}`` هستند؛ نیازی به تغییر ساختار نیست.
|
||||
"""
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
SMS_TYPE_CHOICES = [
|
||||
("welcome", "خوشآمدگویی (ایجاد مشتری)"),
|
||||
("survey", "نظرسنجی پس از ثبت فاکتور"),
|
||||
("cheque_registration", "یادآوری تأمین موجودی چک"),
|
||||
("visit", "یادآوری بازدید خدمات دستگاه"),
|
||||
("visit_created", "ثبت بازدید (اقدام از نوع بازدید)"),
|
||||
("install_created", "ثبت نصب (اقدام از نوع نصب)"),
|
||||
("payment_thanks", "تشکر از پرداخت"),
|
||||
("nesiye_due", "یادآوری سررسید نسیه"),
|
||||
]
|
||||
|
||||
NEW_SMS_TYPE = "install_created"
|
||||
|
||||
# قالب پیشفرض نوع جدید. متن مشابه «ثبت بازدید» است تا لحن پیامها یکدست بماند.
|
||||
INSTALL_TEMPLATE = {
|
||||
"title": "ثبت نصب",
|
||||
"text": "{name} عزیز، نصب شما برای تاریخ {date} ثبت شد. "
|
||||
"از همکاری شما سپاسگزاریم.",
|
||||
"is_enabled": True,
|
||||
# خاموش: پیامک در «در انتظار تأیید» میماند (رفتار پیشفرض امن پروژه).
|
||||
"auto_send": False,
|
||||
"offset_days": 0,
|
||||
"repeat_interval_days": None,
|
||||
"repeat_interval_months": None,
|
||||
}
|
||||
|
||||
|
||||
def seed_install_template(apps, schema_editor):
|
||||
"""ایجاد قالب «ثبت نصب» اگر وجود ندارد (اجرای دوباره بیخطر است).
|
||||
|
||||
``get_or_create`` عمداً بدون هیچ ``update`` است: قالبهای موجود (هر هفت نوع
|
||||
قبلی) و حتی خودِ ``install_created`` اگر از قبل باشد، دستنخورده میمانند.
|
||||
"""
|
||||
SMSTemplate = apps.get_model("admin_panel", "SMSTemplate")
|
||||
SMSTemplate.objects.get_or_create(
|
||||
sms_type=NEW_SMS_TYPE,
|
||||
defaults={
|
||||
"title": INSTALL_TEMPLATE["title"],
|
||||
"text": INSTALL_TEMPLATE["text"],
|
||||
"is_enabled": INSTALL_TEMPLATE["is_enabled"],
|
||||
"auto_send": INSTALL_TEMPLATE["auto_send"],
|
||||
"offset_days": INSTALL_TEMPLATE["offset_days"],
|
||||
"repeat_interval_days": INSTALL_TEMPLATE["repeat_interval_days"],
|
||||
"repeat_interval_months": INSTALL_TEMPLATE["repeat_interval_months"],
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
def drop_install_template(apps, schema_editor):
|
||||
"""بازگشت: فقط ردیفهای همان نوع جدید حذف میشوند.
|
||||
|
||||
سایر قالبها و تنظیمهای مشتری دست نمیخورند.
|
||||
"""
|
||||
apps.get_model("admin_panel", "SMSTemplate").objects.filter(
|
||||
sms_type=NEW_SMS_TYPE,
|
||||
).delete()
|
||||
apps.get_model("admin_panel", "CustomerSMSSetting").objects.filter(
|
||||
sms_type=NEW_SMS_TYPE,
|
||||
).delete()
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("admin_panel", "0080_action_soft_delete"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name="smstemplate",
|
||||
name="sms_type",
|
||||
field=models.CharField(
|
||||
choices=SMS_TYPE_CHOICES, max_length=40, unique=True,
|
||||
verbose_name="نوع پیامک",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="customersmssetting",
|
||||
name="sms_type",
|
||||
field=models.CharField(
|
||||
choices=SMS_TYPE_CHOICES, max_length=40, verbose_name="نوع پیامک",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="smsqueue",
|
||||
name="sms_type",
|
||||
field=models.CharField(
|
||||
blank=True, choices=SMS_TYPE_CHOICES, default="", max_length=40,
|
||||
verbose_name="نوع",
|
||||
),
|
||||
),
|
||||
migrations.RunPython(seed_install_template, drop_install_template),
|
||||
]
|
||||
Reference in new issue
Block a user