from django.db import models from education.models import AcademicYear, Specialty, Student # Предполагается, что модели находятся в приложении education from employees.models import Employee # Предполагается, что модель Employee находится в приложении employees ## Учет мероприятий (название приложения: events) class EventStatus(models.Model): name = models.CharField(max_length=100, verbose_name="Название статуса") def __str__(self): return self.name class Meta: verbose_name = "Статус проведения" verbose_name_plural = "Статусы проведения" ordering = ["name"] class ActivityType(models.Model): name = models.CharField(max_length=100, verbose_name="Название вида деятельности") def __str__(self): return self.name class Meta: verbose_name = "Деятельность мероприятия" verbose_name_plural = "Деятельности мероприятий" ordering = ["name"] class Event(models.Model): academic_year = models.ForeignKey( AcademicYear, on_delete=models.CASCADE, verbose_name="Учебный год" ) status = models.ForeignKey( EventStatus, on_delete=models.SET_NULL, null=True, blank=True, verbose_name="Статус мероприятия" ) name = models.CharField(max_length=200, verbose_name="Название") location = models.CharField(max_length=255, blank=True, null=True, verbose_name="Место проведения") date = models.DateField(verbose_name="Дата проведения") description = models.TextField(blank=True, null=True, verbose_name="Описание") def __str__(self): return f"{self.name} ({self.date})" class Meta: verbose_name = "Мероприятие" verbose_name_plural = "Мероприятия" ordering = ["date", "name"] class EventOrganizer(models.Model): employee = models.ForeignKey( Employee, on_delete=models.CASCADE, verbose_name="Сотрудник-организатор" ) event = models.ForeignKey( Event, on_delete=models.CASCADE, verbose_name="Мероприятие" ) def __str__(self): return f"{self.employee} - {self.event}" class Meta: verbose_name = "Организатор мероприятия" verbose_name_plural = "Организаторы мероприятий" unique_together = ("employee", "event") ordering = ["employee", "event"] class EventDetail(models.Model): activity_type = models.ForeignKey( ActivityType, on_delete=models.CASCADE, verbose_name="Вид деятельности" ) event = models.ForeignKey( Event, on_delete=models.CASCADE, verbose_name="Мероприятие" ) def __str__(self): return f"{self.activity_type} - {self.event}" class Meta: verbose_name = "Деталь мероприятия" verbose_name_plural = "Детали мероприятий" unique_together = ("activity_type", "event") ordering = ["activity_type", "event"] class EventParticipant(models.Model): student = models.ForeignKey( Student, on_delete=models.CASCADE, verbose_name="Студент" ) event = models.ForeignKey( Event, on_delete=models.CASCADE, verbose_name="Мероприятие" ) points = models.PositiveIntegerField(blank=True, default=0, verbose_name="Баллы за участие") def __str__(self): return f"{self.student} - {self.event}" class Meta: verbose_name = "Участник мероприятия" verbose_name_plural = "Участники мероприятий" ordering = ["event", "student"] class MethodicalFile(models.Model): specialty = models.ForeignKey( Specialty, on_delete=models.CASCADE, verbose_name="Специальность" ) name = models.CharField(max_length=200, verbose_name="Название") file_path = models.FileField(max_length=500, verbose_name="Файл") upload_date = models.DateField(auto_now_add=True, verbose_name="Дата добавления") employee = models.ForeignKey( Employee, on_delete=models.SET_NULL, null=True, blank=True, verbose_name="Сотрудник" ) def __str__(self): return f"{self.name} ({self.specialty})" class Meta: verbose_name = "Методический файл" verbose_name_plural = "Методические файлы" ordering = ["specialty", "name", "upload_date", "employee"] class RelevantMethodicalFile(models.Model): methodical_file = models.ForeignKey( MethodicalFile, on_delete=models.CASCADE, verbose_name="Методический файл" ) activity_type = models.ForeignKey( ActivityType, on_delete=models.CASCADE, verbose_name="Вид деятельности" ) def __str__(self): return f"{self.methodical_file} - {self.activity_type}" class Meta: verbose_name = "Релевантный методический файл" verbose_name_plural = "Релевантные методические файлы" ordering = ["methodical_file", "activity_type"]