72 lines
3.5 KiB
Python
72 lines
3.5 KiB
Python
from django.db import migrations
|
|
|
|
# دادهی پایهی فروشگاه — ابزارها، پلنهای قیمتی، و بستههای جم.
|
|
#
|
|
# این seed قبلا در یک مهاجرتِ جداگانه بود که همراهِ بقیهی فایلهای مهاجرت
|
|
# از دست رفت. نبودش دقیقا همان باگی است که کافهبازار گزارش کرد: وقتی هیچ
|
|
# FeaturePlan ای در دیتابیس نباشد، اندپوینت features/ لیستِ خالی میدهد،
|
|
# اپ برای هر ابزار isFeatureActive=false میگیرد و پیغام «این ابزار فعال
|
|
# نیست» را نشان میدهد — حتی در دورهی آزمایشی و حتی بعد از خرید جم.
|
|
#
|
|
# دو ابزار عمدا رایگاناند (is_free=True): «مشتریان» و «دفتر درآمد و هزینه».
|
|
# طبق قوانین انتشار کافهبازار باید بخشی از امکانات پیش از هر خریدی
|
|
# در دسترس باشد؛ این دو، هستهی دفترداریِ اپاند و بدون آنها بقیهی
|
|
# ابزارها هم معنی نمیدهند، پس بهترین گزینه برای رایگانبودناند.
|
|
# هر وقت خواستی میتوانی از پنل ادمین (ریزاپهای قابلفعالسازی → ستون
|
|
# «رایگان») این ترکیب را عوض کنی، بدون نیاز به مهاجرت تازه.
|
|
|
|
FEATURES = [
|
|
# (key, name, is_free, [(months, gem_price), ...])
|
|
("customers", "مشتریان", True, []),
|
|
("ledger", "دفتر درآمد و هزینه", True, []),
|
|
("invoice", "فاکتور", False, [(1, 1000), (3, 2700), (6, 5000)]),
|
|
("sms_bank", "پیام گروهی", False, [(1, 1200), (3, 3200), (6, 6000)]),
|
|
("inventory", "انبارداری", False, [(1, 800), (3, 2200), (6, 4000)]),
|
|
("orders", "پیگیری سفارش", False, [(1, 900), (3, 2400), (6, 4500)]),
|
|
]
|
|
|
|
GEM_PACKS = [
|
|
# (sku, name, gems, sort)
|
|
("gem_pack_500", "۵۰۰ جم", 500, 1),
|
|
("gem_pack_1200", "۱۲۰۰ جم", 1200, 2),
|
|
("gem_pack_3000", "۳۰۰۰ جم", 3000, 3),
|
|
]
|
|
|
|
|
|
def seed(apps, schema_editor):
|
|
FeaturePlan = apps.get_model("billing", "FeaturePlan")
|
|
FeaturePlanTier = apps.get_model("billing", "FeaturePlanTier")
|
|
GemPack = apps.get_model("billing", "GemPack")
|
|
|
|
for key, name, is_free, tiers in FEATURES:
|
|
feature, _ = FeaturePlan.objects.update_or_create(
|
|
key=key,
|
|
defaults={"name": name, "is_free": is_free, "is_purchasable": not is_free},
|
|
)
|
|
for months, price in tiers:
|
|
FeaturePlanTier.objects.update_or_create(
|
|
feature=feature, duration_months=months, defaults={"gem_price": price}
|
|
)
|
|
|
|
for sku, name, gems, sort_order in GEM_PACKS:
|
|
GemPack.objects.update_or_create(
|
|
bazaar_sku=sku,
|
|
defaults={"display_name": name, "gem_amount": gems, "sort_order": sort_order, "is_active": True},
|
|
)
|
|
|
|
|
|
def unseed(apps, schema_editor):
|
|
FeaturePlan = apps.get_model("billing", "FeaturePlan")
|
|
GemPack = apps.get_model("billing", "GemPack")
|
|
FeaturePlan.objects.filter(key__in=[f[0] for f in FEATURES]).delete()
|
|
GemPack.objects.filter(bazaar_sku__in=[g[0] for g in GEM_PACKS]).delete()
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
|
|
dependencies = [
|
|
("billing", "0002_featureplan_is_free"),
|
|
]
|
|
|
|
operations = [migrations.RunPython(seed, unseed)]
|