Browse Source

Add management commands for seeding calendar occasions

- Introduced `seed_occasions.py` management command to populate the database with a comprehensive list of Persian, International, and Religious calendar occasions.
- Created `__init__.py` files in the management and commands directories to ensure proper package structure.
- Enhanced the seeding process with transaction management for data integrity during the creation of occasions.
master
Mohsen Taba 3 months ago
parent
commit
9468b6e154
  1. 0
      apps/dobodbi_calendar/management/__init__.py
  2. 0
      apps/dobodbi_calendar/management/commands/__init__.py
  3. 143
      apps/dobodbi_calendar/management/commands/seed_occasions.py

0
apps/dobodbi_calendar/management/__init__.py

0
apps/dobodbi_calendar/management/commands/__init__.py

143
apps/dobodbi_calendar/management/commands/seed_occasions.py

@ -0,0 +1,143 @@
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}'))
Loading…
Cancel
Save