import json from django.core.management.base import BaseCommand from django.db import transaction from apps.dobodbi_calendar.models import CalendarOccasions class Command(BaseCommand): help = 'Seeds the database with realistic Persian, International, and Religious calendar occasions.' def handle(self, *args, **options): self.stdout.write(self.style.WARNING('Starting to seed calendar occasions...')) # Data structure: (Title, Type, Event Type, Month, Day) # Note: For 'georgian', we use the fixed Gregorian equivalents of Persian Solar events # e.g., Nowruz (1 Farvardin) = 21 March occasions_data = [ # --- JANUARY (Dey/Bahman) --- ("آغاز سال میلادی", "georgian", "international", "01", "01"), ("شهادت امیرکبیر", "georgian", "national", "01", "10"), # 20 Dey ("روز گفتگوی تمدن‌ها", "georgian", "international", "01", "14"), ("روز هوای پاک", "georgian", "national", "01", "19"), # 29 Dey # --- FEBRUARY (Bahman/Esfand) --- ("بازگشت امام خمینی به ایران", "georgian", "national", "02", "01"), # 12 Bahman ("روز نیروی هوایی", "georgian", "national", "02", "08"), # 19 Bahman ("پیروزی انقلاب اسلامی", "georgian", "national", "02", "11"), # 22 Bahman ("ولنتاین (روز عشق)", "georgian", "international", "02", "14"), ("روز مهندس (بزرگداشت خواجه نصیر)", "georgian", "national", "02", "24"), # 5 Esfand ("سپندارمذگان (روز عشق ایرانی)", "georgian", "national", "02", "24"), # 5 Esfand # --- MARCH (Esfand/Farvardin) --- ("روز درختکاری", "georgian", "national", "03", "05"), # 15 Esfand ("روز جهانی زن", "georgian", "international", "03", "08"), ("روز ملی شدن صنعت نفت", "georgian", "national", "03", "20"), # 29 Esfand ("عید نوروز (آغاز سال نو)", "georgian", "national", "03", "21"), # 1 Farvardin ("عید دیدنی (تعطیلات نوروز)", "georgian", "national", "03", "22"), # 2 Farvardin # --- APRIL (Farvardin/Ordibehesht) --- ("روز طبیعت (سیزده بدر)", "georgian", "national", "04", "02"), # 13 Farvardin ("روز جهانی بهداشت", "georgian", "international", "04", "07"), ("روز بزرگداشت عطار نیشابوری", "georgian", "national", "04", "14"), # 25 Farvardin ("روز بزرگداشت سعدی", "georgian", "national", "04", "21"), # 1 Ordibehesht ("روز ملی خلیج فارس", "georgian", "national", "04", "30"), # 10 Ordibehesht # --- MAY (Ordibehesht/Khordad) --- ("روز جهانی کار و کارگر", "georgian", "international", "05", "01"), ("شهادت استاد مطهری (روز معلم)", "georgian", "national", "05", "02"), # 12 Ordibehesht ("روز بزرگداشت فردوسی", "georgian", "national", "05", "15"), # 25 Ordibehesht ("روز بزرگداشت خیام", "georgian", "national", "05", "18"), # 28 Ordibehesht # --- JUNE (Khordad/Tir) --- ("رحلت امام خمینی", "georgian", "national", "06", "04"), # 14 Khordad ("قیام ۱۵ خرداد", "georgian", "national", "06", "05"), # 15 Khordad ("روز جهانی محیط زیست", "georgian", "international", "06", "05"), ("روز صنایع دستی", "georgian", "national", "06", "10"), # 20 Khordad # --- JULY (Tir/Mordad) --- ("روز قلم", "georgian", "national", "07", "05"), # 14 Tir ("جشن تیرگان", "georgian", "national", "07", "04"), # 13 Tir ("روز بهزیستی و تامین اجتماعی", "georgian", "national", "07", "16"), # 25 Tir # --- AUGUST (Mordad/Shahrivar) --- ("روز خبرنگار", "georgian", "national", "08", "08"), # 17 Mordad ("روز جهانی چپ‌دست‌ها", "georgian", "international", "08", "13"), ("روز عکاسی", "georgian", "international", "08", "19"), ("روز بزرگداشت ابن سینا (روز پزشک)", "georgian", "national", "08", "23"), # 1 Shahrivar # --- SEPTEMBER (Shahrivar/Mehr) --- ("روز داروسازی (زکریای رازی)", "georgian", "national", "09", "27"), # 5 Shahrivar (Late Aug/Early Sep) ("روز ملی سینما", "georgian", "national", "09", "12"), # 21 Shahrivar ("روز شعر و ادب فارسی (شهریار)", "georgian", "national", "09", "18"), # 27 Shahrivar ("روز جهانی صلح", "georgian", "international", "09", "21"), ("روز آتش‌نشانی و ایمنی", "georgian", "national", "09", "29"), # 7 Mehr # --- OCTOBER (Mehr/Aban) --- ("روز جهانی کودک", "georgian", "international", "10", "08"), ("روز بزرگداشت حافظ", "georgian", "national", "10", "12"), # 20 Mehr ("روز جهانی استاندارد", "georgian", "international", "10", "14"), ("روز آمار و برنامه‌ریزی", "georgian", "national", "10", "23"), # 1 Aban # --- NOVEMBER (Aban/Azar) --- ("روز دانش‌آموز (۱۳ آبان)", "georgian", "national", "11", "04"), # 13 Aban ("روز کتاب و کتابخوانی", "georgian", "national", "11", "15"), # 24 Aban ("روز جهانی تلویزیون", "georgian", "international", "11", "21"), ("روز نیروی دریایی", "georgian", "national", "11", "28"), # 7 Azar # --- DECEMBER (Azar/Dey) --- ("روز دانشجو (۱۶ آذر)", "georgian", "national", "12", "07"), # 16 Azar ("روز پژوهش", "georgian", "national", "12", "16"), # 25 Azar ("شب یلدا (طولانی‌ترین شب سال)", "georgian", "national", "12", "21"), # 30 Azar ("میلاد حضرت مسیح (ع)", "georgian", "religious", "12", "25"), # --- LUNAR EVENTS (Religious) --- # Using standard Lunar Hijri months: # 01: Muharram, 02: Safar, 03: Rabi-al-Awwal, etc. ("تاسوعای حسینی", "lunar", "religious", "01", "09"), ("عاشورای حسینی", "lunar", "religious", "01", "10"), ("اربعین حسینی", "lunar", "religious", "02", "20"), ("رحلت پیامبر اکرم (ص)", "lunar", "religious", "02", "28"), ("میلاد پیامبر اکرم (ص)", "lunar", "religious", "03", "17"), ("ولادت حضرت علی (ع) - روز پدر", "lunar", "religious", "07", "13"), ("مبعث پیامبر اکرم (ص)", "lunar", "religious", "07", "27"), ("ولادت حضرت قائم (عج)", "lunar", "religious", "08", "15"), ("شهادت حضرت علی (ع)", "lunar", "religious", "09", "21"), ("عید سعید فطر", "lunar", "religious", "10", "01"), ("شهادت امام جعفر صادق (ع)", "lunar", "religious", "10", "25"), ("عید سعید قربان", "lunar", "religious", "12", "10"), ("عید سعید غدیر خم", "lunar", "religious", "12", "18"), ] created_count = 0 updated_count = 0 with transaction.atomic(): for title, type_val, event_type, month, day in occasions_data: # Prepare the dates field json structure date_json = [ { "day": day, "month": month, "year": "" # Empty for yearly events } ] obj, created = CalendarOccasions.objects.update_or_create( title=title, defaults={ "occasion_type": type_val, "event_type": event_type, "dates": date_json, "is_yearly": True, "is_global": True } ) if created: created_count += 1 else: updated_count += 1 self.stdout.write(self.style.SUCCESS(f'Successfully seeded events.')) self.stdout.write(self.style.SUCCESS(f'Created: {created_count}')) self.stdout.write(self.style.SUCCESS(f'Updated: {updated_count}'))