Files
mobiniqow 831e656fa3 Fix OTP/SMS, ledger accounting, order tracking, and add reviews app
- 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)
2026-09-15 23:18:05 +03:30

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=