fix mandehesab, bazdid, sms

This commit is contained in:
javad committed 2026-10-16 17:54:07 +03:30
1 parent 7e5c83bea2
commit 1fd27d0445
22 files changed
+16462 -5918

No files matched your search

@@ -0,0 +1,37 @@
# Generated by Django 3.2.25 on 2026-10-16 10:49
from django.db import migrations, models
class Migration(migrations.Migration):
"""افزودن ``choices`` به ``Action.actionType``.
این migration فقط وضعیت مدل را به‌روز می‌کند: Django ``choices`` را در
``deconstruct()`` فیلد نگه می‌دارد، پس بدون این migration دستور
``makemigrations --check`` شکست می‌خورد. تعریف ستون در SQLite هیچ تغییری
نمی‌کند (``choices`` در DDL بازتاب نمی‌یابد) و هیچ داده‌ای بازنویسی نمی‌شود.
"""
dependencies = [
('admin_panel', '0072_customernamefixjob'),
]
operations = [
migrations.AlterField(
model_name='action',
name='actionType',
field=models.CharField(
blank=True,
choices=[
('bazdid', 'بازدید'),
('nasb', 'نصب'),
('vosol', 'وصول مطالبات'),
('hamahangi', 'هماهنگی'),
('inCall', 'تماس ورودی'),
('outCall', 'تماس خروجی'),
],
max_length=50,
null=True,
),
),
]
@@ -0,0 +1,37 @@
# Generated by Django 3.2.25 on 2026-10-16 10:49
from django.db import migrations, models
class Migration(migrations.Migration):
"""افزودن ``choices`` به ``Action.status``.
این migration فقط وضعیت مدل را به‌روز می‌کند: Django ``choices`` را در
``deconstruct()`` فیلد نگه می‌دارد، پس بدون این migration دستور
``makemigrations --check`` شکست می‌خورد. تعریف ستون در SQLite هیچ تغییری
نمی‌کند (``choices`` در DDL بازتاب نمی‌یابد) و هیچ داده‌ای بازنویسی نمی‌شود.
املای مقادیر عیناً همان چیزی است که در دیتابیس و کد موجود به‌کار رفته:
``'waite'`` (نه ``'wait'``)، ``'finish'`` و ``'cancell'``.
"""
dependencies = [
('admin_panel', '0073_alter_action_actiontype_choices'),
]
operations = [
migrations.AlterField(
model_name='action',
name='status',
field=models.CharField(
blank=True,
choices=[
('waite', 'در انتظار (باز)'),
('finish', 'انجام شده'),
('cancell', 'لغو شده'),
],
max_length=50,
null=True,
),
),
]
@@ -0,0 +1,49 @@
"""یادآوری تأمین موجودی چک: تغییر جهت از «پس از سررسید» به «پیش از سررسید».
هدف این migration **فقط** هم‌راستا‌کردن مقدار عددی ``offset_days`` قالب
``cheque_registration`` با معنای جدید است (تعداد روز **قبل** از سررسید).
آنچه این migration عمداً **نمی‌کند**:
* ``text`` (متن پیامک) را تغییر نمی‌دهد — متنی که مدیر در پنل تنظیم کرده دست‌نخورده
می‌ماند. اگر متن فعلی از زمان گذشته حرف می‌زند («سررسید شده است»)، مدیر می‌تواند
خودش از صفحهٔ «قالب‌های پیامک» ویرایشش کند.
* ``title``، ``is_enabled`` و ``auto_send`` را تغییر نمی‌دهد.
* هیچ نوع/قالب دیگری را لمس نمی‌کند.
مقدار ``offset_days`` روی پیش‌فرض معنای جدید (۱ روز قبل از سررسید) تنظیم می‌شود تا
نصب‌های تازه و نصب‌های موجود یکسان رفتار کنند؛ اما اگر مدیر قبلاً عددی غیر از مقدار
قدیمی (``1``) گذاشته باشد، به آن دست نمی‌زنیم تا انتخابش از بین نرود.
idempotent است؛ اجرای دوباره بی‌خطر است.
"""
from django.db import migrations
SMS_TYPE = "cheque_registration"
# مقدار پیش‌فرضِ منطق قدیم («۱ روز پس از سررسید») که با معنای جدید هم‌عددی است؛
# فقط رکوردهایی که هنوز روی همین مقدار هستند هم‌راستا می‌شوند.
OLD_DEFAULT = 1
NEW_DEFAULT = 1
def align_cheque_offset(apps, schema_editor):
"""``offset_days`` قالب چک را روی پیش‌فرض جدید بگذارد (بدون لمس متن)."""
SMSTemplate = apps.get_model("admin_panel", "SMSTemplate")
SMSTemplate.objects.filter(
sms_type=SMS_TYPE, offset_days=OLD_DEFAULT,
).update(offset_days=NEW_DEFAULT)
def noop(apps, schema_editor):
pass
class Migration(migrations.Migration):
dependencies = [
("admin_panel", "0074_alter_action_status_choices"),
]
operations = [
migrations.RunPython(align_cheque_offset, noop),
]
@@ -0,0 +1,36 @@
"""افزودن متغیر ``{sayyad_id}`` به راهنمای ``help_text`` متن قالب پیامک.
هدف: راهنمای متغیرها در پنل، «شناسهٔ صیاد چک» را هم نشان دهد.
آنچه این migration عمداً **نمی‌کند**:
* ``text`` (متن واقعی قالب‌ها) را تغییر نمی‌دهد — فقط ``help_text`` فیلد عوض شده
است که در ``deconstruct()`` می‌آید و state مدل را جلو می‌برد.
* هیچ رکورد ``SMSTemplate`` را لمس نمی‌کند.
idempotent است؛ اجرای دوباره بی‌خطر است.
"""
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("admin_panel", "0075_cheque_funding_before_due"),
]
operations = [
migrations.AlterField(
model_name="smstemplate",
name="text",
field=models.TextField(
help_text=(
"متغیرهای قابل استفاده: {name} نام مشتری، {amount} مبلغ، "
"{amount_sep} مبلغ با جداکننده، {date} تاریخ جلالی، "
"{days} تعداد روز، {check_row} شماره ردیف چک، "
"{sayyad_id} شناسه صیاد چک، {owner_name} نام مالک چک."
),
verbose_name="متن پیامک",
),
),
]
@@ -0,0 +1,39 @@
"""افزودن متغیرهای ``{balance}`` / ``{balance_sep}`` به راهنمای متن قالب پیامک.
هدف: راهنمای متغیرها در پنل، «مانده حساب مشتری» را هم نشان دهد و تفاوتش را با
مبلغ سررسیدشده روشن کند.
آنچه این migration عمداً **نمی‌کند**:
* ``text`` (متن واقعی قالب‌ها) را تغییر نمی‌دهد — فقط ``help_text`` فیلد عوض شده
است که در ``deconstruct()`` می‌آید و state مدل را جلو می‌برد.
* هیچ رکورد ``SMSTemplate`` را لمس نمی‌کند.
idempotent است؛ اجرای دوباره بی‌خطر است.
"""
from django.db import migrations, models
HELP_TEXT = (
"متغیرهای قابل استفاده: {name} نام مشتری، {amount} مبلغ، "
"{amount_sep} مبلغ با جداکننده، {date} تاریخ جلالی، {days} تعداد روز، "
"{check_row} شماره ردیف چک، {sayyad_id} شناسه صیاد چک، "
"{owner_name} نام مالک چک، {balance} مانده حساب مشتری، "
"{balance_sep} مانده حساب با جداکننده. "
"(توجه: {balance} مانده کل حساب است و با مبلغ سررسیدشدهٔ چک/نسیه "
"که در {amount} می‌آید تفاوت دارد.)"
)
class Migration(migrations.Migration):
dependencies = [
("admin_panel", "0076_alter_smstemplate_text_help"),
]
operations = [
migrations.AlterField(
model_name="smstemplate",
name="text",
field=models.TextField(help_text=HELP_TEXT, verbose_name="متن پیامک"),
),
]