831e656fa3
- Add MessageTemplate.runtime_field_labels so mobile's per-field execution-time labels are actually persisted (were silently dropped) - Fix AdvanceOrderStageView reading the wrong extra-input key, and be honest about SMS send failures instead of always claiming success - Add admin gift-gem SMS notification via Kavenegar - Post real double-entry Transactions for plain (non-invoice) ledger entries so trial balance, the معین screen, and CSV/XLSX exports actually include everyday income/expense entries; backfill existing historical entries via data migration - Rewrite CSV ledger export to produce an actual دفتر معین structure (per-account running balance) instead of a flat row dump - Add invoice percent/promotional discounts, tax presets, ledger discount-percent handling, product SKU/category/expiry fields, and manual ledger-book archiving (replacing auto-archive on new book) - Add reviews app (models, API, admin) for the comments/reviews feature - Update tests for the above; fix two stale assertions left over from earlier work in this branch (معین sheet name, book auto-close)
64 lines
3.8 KiB
Bash
64 lines
3.8 KiB
Bash
# این فایل را کپی کن به .env و مقادیر واقعی را جایگزین کن:
|
|
# cp .env.example .env
|
|
|
|
# ── جنگو ───────────────────────────────────────────────
|
|
# یک مقدار یکتا و تصادفی بساز (این کلید امضای JWT هم هست):
|
|
# python -c "import secrets; print(secrets.token_urlsafe(50))"
|
|
SECRET_KEY=
|
|
DEBUG=False
|
|
# دامنهی واقعی + لوکالهاست برای تست:
|
|
ALLOWED_HOSTS=example.com,www.example.com,localhost,127.0.0.1
|
|
|
|
# ── دیتابیس (PostgreSQL) ──────────────────────────────
|
|
# اگر این خط را خالی/حذف کنی، بدون هیچ تنظیم دیگری روی SQLite لوکال بالا
|
|
# میآید (برای توسعهی سریع کافی است). برای PostgreSQL واقعی این خط را نگه
|
|
# دار و بقیهی DB_* را پر کن. اگر پستگریات در همین شبکهی داکر با نام
|
|
# کانتینر دیگری بالاست، DB_HOST را همان نام کانتینر بگذار؛ اگر روی خودِ
|
|
# هاست است، از آدرس هاست استفاده کن (روی لینوکس معمولا: DB_HOST=172.17.0.1
|
|
# یا host.docker.internal).
|
|
DB_ENGINE=django.db.backends.postgresql
|
|
DB_NAME=sms_banker
|
|
DB_USER=
|
|
DB_PASSWORD=
|
|
DB_HOST=localhost
|
|
DB_PORT=5432
|
|
|
|
# ── JWT ────────────────────────────────────────────────
|
|
JWT_ACCESS_LIFETIME_DAYS=1
|
|
JWT_REFRESH_LIFETIME_DAYS=30
|
|
|
|
# ── CORS / CSRF ────────────────────────────────────────
|
|
# پشت یک دامنهی واقعی هردو را با https:// پر کن (نه فقط اسم دامنه)؛
|
|
# CSRF_TRUSTED_ORIGINS لازم است وگرنه لاگین پنل ادمین با خطای CSRF رد میشود.
|
|
CORS_ALLOWED_ORIGINS=https://example.com,https://www.example.com
|
|
CORS_ALLOW_ALL_ORIGINS=False
|
|
CSRF_TRUSTED_ORIGINS=https://example.com,https://www.example.com
|
|
|
|
# ── پیامک OTP ──────────────────────────────────────────
|
|
# نام/کد قالبی که نزد سرویسدهندهی پیامکت ثبت شده:
|
|
SMS_PATTERN_NAME=
|
|
# آدرسی که با POST، قالب+شماره+کد را برایش میفرستیم:
|
|
SMS_TOKEN_URL=
|
|
# قالبِ پیامکِ «هدیهی جم از پنل ادمین» — یک قالبِ جداگانه در کاوهنگار
|
|
# بساز که فقط یک token عددی (تعداد جمِ هدیهدادهشده) دارد، مثلا:
|
|
# «{token} جم به حساب شما در پیامکبان اضافه شد.» و نام همان قالب را اینجا بگذار.
|
|
SMS_GIFT_PATTERN_NAME=
|
|
|
|
# ── ارسال گروهی چندکاناله (apps.messaging) ─────────────
|
|
# هرکدام خالی بماند، آن کانال فقط needs_manual برمیگرداند (صف deep-link
|
|
# سمت اپ) نه خطا — میتوانی بعدا تکتک اضافه کنی.
|
|
|
|
# پیامک بالک با متن آزاد (کاوهنگار — جدا از SMS_PATTERN_NAME بالا که فقط OTP است)
|
|
KAVENEGAR_API_KEY=
|
|
KAVENEGAR_SENDER_LINE=
|
|
|
|
# WhatsApp Business Cloud API رسمی — نیاز به Template تاییدشده در Meta Business Manager
|
|
WHATSAPP_ACCESS_TOKEN=
|
|
WHATSAPP_PHONE_NUMBER_ID=
|
|
WHATSAPP_TEMPLATE_NAME=
|
|
|
|
# Bot API رسمی — فقط برای مخاطبینی که قبلا با بات چت را شروع کردهاند (opt-in)
|
|
TELEGRAM_BOT_TOKEN=
|
|
BALE_BOT_TOKEN=
|
|
EITAA_BOT_TOKEN=
|