adding
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
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)]
|
||||
Reference in New Issue
Block a user