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)]