Browse Source

calendar multilangual added

master
Mohsen Taba 2 days ago
parent
commit
7265b334c9
  1. 180
      apps/dobodbi_calendar/calendar.csv
  2. 54
      apps/dobodbi_calendar/management/commands/import_calendar_csv.py
  3. 0
      apps/dobodbi_calendar/management/commands/religious_country.py
  4. 18
      apps/dobodbi_calendar/migrations/0002_alter_calendaroccasions_title.py
  5. 11
      apps/dobodbi_calendar/models.py
  6. 7
      apps/dobodbi_calendar/serializer.py
  7. 3
      apps/dobodbi_calendar/views_admin.py

180
apps/dobodbi_calendar/calendar.csv
File diff suppressed because it is too large
View File

54
apps/dobodbi_calendar/management/commands/import_calendar_csv.py

@ -0,0 +1,54 @@
import csv
import json
import os
from django.core.management.base import BaseCommand
from django.db import transaction
from django.conf import settings
from apps.dobodbi_calendar.models import CalendarOccasions
class Command(BaseCommand):
help = 'Imports calendar occasions from calendar.csv file.'
def handle(self, *args, **options):
self.stdout.write(self.style.WARNING('Starting to import calendar occasions from CSV...'))
csv_path = os.path.join(settings.BASE_DIR, 'apps', 'dobodbi_calendar', 'calendar.csv')
if not os.path.exists(csv_path):
self.stdout.write(self.style.ERROR(f'CSV file not found at: {csv_path}'))
return
created_count = 0
updated_count = 0
with open(csv_path, mode='r', encoding='utf-8') as f:
reader = csv.DictReader(f)
with transaction.atomic():
for row in reader:
occasion_id = int(row['id'])
occasion_type = row['occasion_type']
dates = json.loads(row['dates'])
is_yearly = row['is_yearly'].lower() == 'true'
translations = json.loads(row['translations'])
is_global = row['is_global'].lower() == 'true'
obj, created = CalendarOccasions.objects.update_or_create(
id=occasion_id,
defaults={
'occasion_type': occasion_type,
'dates': dates,
'is_yearly': is_yearly,
'title': translations,
'is_global': is_global,
'event_type': 'religious',
}
)
if created:
created_count += 1
else:
updated_count += 1
self.stdout.write(self.style.SUCCESS(f'Successfully imported calendar occasions.'))
self.stdout.write(self.style.SUCCESS(f'Created: {created_count}'))
self.stdout.write(self.style.SUCCESS(f'Updated: {updated_count}'))

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

18
apps/dobodbi_calendar/migrations/0002_alter_calendaroccasions_title.py

@ -0,0 +1,18 @@
# Generated by Django 4.2.30 on 2026-07-19 12:21
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('dobodbi_calendar', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='calendaroccasions',
name='title',
field=models.JSONField(blank=True, default=list, verbose_name='title'),
),
]

11
apps/dobodbi_calendar/models.py

@ -17,7 +17,7 @@ class CalendarOccasions(models.Model):
international = 'international', _('International')
religious = 'religious', _('Religious')
title = models.CharField(_("title"), max_length=255)
title = models.JSONField(verbose_name=_("title"), default=list, blank=True)
is_global = models.BooleanField(
verbose_name=_('is global'), default=False,
help_text=_('check this field if event is global'),
@ -43,6 +43,13 @@ class CalendarOccasions(models.Model):
ordering = ('-updated_at',)
def __str__(self) -> str:
return self.title
if isinstance(self.title, list) and len(self.title) > 0:
for item in self.title:
if isinstance(item, dict) and item.get("language_code") == "en":
return item.get("title", "")
return self.title[0].get("title", "") if isinstance(self.title[0], dict) else str(self.title[0])
elif isinstance(self.title, dict):
return self.title.get("en", self.title.get("en", str(self.title)))
return str(self.title)

7
apps/dobodbi_calendar/serializer.py

@ -6,6 +6,12 @@ from apps.dobodbi_calendar.models import CalendarOccasions
class CalendarSerializer(serializers.ModelSerializer):
type = serializers.CharField(source='occasion_type')
dates = serializers.SerializerMethodField()
title = serializers.SerializerMethodField()
def get_title(self, obj):
request = self.context.get('request')
from apps.hadis.serializers.category import get_localized_text
return get_localized_text(obj.title, request=request)
# def get_countries(self, obj):
@ -31,4 +37,3 @@ class CalendarSerializer(serializers.ModelSerializer):
class Meta:
model = CalendarOccasions
fields = ('id', 'title', 'type', 'event_type', 'dates', 'is_yearly',)

3
apps/dobodbi_calendar/views_admin.py

@ -6,13 +6,14 @@ from rest_framework.viewsets import ModelViewSet
from apps.account.permissions import IsSuperAdmin
from apps.dobodbi_calendar.models import CalendarOccasions
from apps.dobodbi_calendar.serializers_admin import CalendarOccasionAdminSerializer
from utils.pagination import StandardResultsSetPagination
class AdminCalendarOccasionViewSet(ModelViewSet):
serializer_class = CalendarOccasionAdminSerializer
permission_classes = [IsAuthenticated, IsSuperAdmin]
authentication_classes = [TokenAuthentication]
pagination_class = None
pagination_class = StandardResultsSetPagination
def get_queryset(self):
queryset = CalendarOccasions.objects.all()

Loading…
Cancel
Save