You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
143 lines
8.7 KiB
143 lines
8.7 KiB
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}'))
|