- 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
24 lines
907 B
HTML
24 lines
907 B
HTML
<!-- templates/calendar/calendar.html -->
|
|
{% extends "base.html" %}
|
|
{% block content %}
|
|
<div id='calendar'></div>
|
|
<script src="https://cdn.jsdelivr.net/npm/fullcalendar@6.1.8/index.global.min.js"></script>
|
|
<link href="https://cdn.jsdelivr.net/npm/fullcalendar@6.1.8/index.global.min.css" rel="stylesheet" />
|
|
<script>
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
let calendarEl = document.getElementById('calendar');
|
|
let calendar = new FullCalendar.Calendar(calendarEl, {
|
|
initialView: 'dayGridMonth',
|
|
events: '/calendar/api/events/',
|
|
eventDidMount: function(info) {
|
|
// Можно пометить ежегодные события специальным цветом
|
|
if (info.event.extendedProps.recurrence === 'annual') {
|
|
info.el.style.borderColor = 'green';
|
|
}
|
|
}
|
|
});
|
|
calendar.render();
|
|
});
|
|
</script>
|
|
{% endblock %}
|