Corp/backend/calendar_app/serializers.py
Игорь Надеин 6fb2cdcea0 feat: enhance Employee model and integrate Telegram/WhatsApp bot
- Add birth_date, created_at/updated_at to Employee; remove username field
- Introduce EmployeeAction for tracking HR events and is_actually_active/status properties
- Create BotSubscriber model (OneToOne relation) for TG/WA binding
- Implement Aiogram-based Telegram bot:
  • request contact to bind by phone or @username
  • department selection keyboard from DEPARTMENTS dict
  • async ORM via sync_to_async, custom filters for bound & active employees
- Update profile view & template:
  • show “Bind Telegram/WhatsApp” button only when not already bound
  • preview avatar on upload
- Remove registration tokens in favor of contact-based auth
- Clean up templates, forms and add avatar validation mixin
2025-07-30 08:15:53 +03:00

29 lines
1.1 KiB
Python

# calendar_app/serializers.py
from rest_framework import serializers
from django.utils.dateparse import parse_datetime, parse_date
from .models import CompanyEvent
class CompanyEventSerializer(serializers.ModelSerializer):
# переопределяем поле date
date = serializers.SerializerMethodField()
class Meta:
model = CompanyEvent
fields = ['id', 'title', 'date', 'recurrence']
def get_date(self, obj):
request = self.context.get('request')
start_str = request.query_params.get('start')
# парсим start, чтобы узнать год
dt_start = parse_datetime(start_str) or parse_date(start_str)
if hasattr(dt_start, 'date'):
start = dt_start.date()
else:
start = dt_start
# если это annual — заменяем год на нужный
if obj.recurrence == CompanyEvent.ANNUAL and start:
return obj.date.replace(year=start.year).isoformat()
# иначе — отдаем оригинальную дату
return obj.date.isoformat()