- 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
29 lines
1.1 KiB
Python
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()
|