This commit is contained in:
Mikan
2025-05-18 21:29:04 +03:00
parent 63228923a7
commit d70c5f73f5
50 changed files with 1344 additions and 52 deletions

0
outreach/__init__.py Normal file
View File

3
outreach/admin.py Normal file
View File

@@ -0,0 +1,3 @@
from django.contrib import admin
# Register your models here.

6
outreach/apps.py Normal file
View File

@@ -0,0 +1,6 @@
from django.apps import AppConfig
class OutreachConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'outreach'

View File

@@ -0,0 +1,96 @@
# Generated by Django 4.2.21 on 2025-05-18 18:14
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
('employees', '0001_initial'),
('education', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='InstitutionType',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=50, verbose_name='Название вида учебного заведения')),
],
options={
'verbose_name': 'Вид учебного заведения',
'verbose_name_plural': 'Виды учебных заведений',
},
),
migrations.CreateModel(
name='Partner',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=200, verbose_name='Название')),
('description', models.TextField(blank=True, null=True, verbose_name='Описание')),
],
options={
'verbose_name': 'Партнер',
'verbose_name_plural': 'Партнеры',
},
),
migrations.CreateModel(
name='Representative',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('first_name', models.CharField(max_length=100, verbose_name='Имя')),
('last_name', models.CharField(blank=True, max_length=100, null=True, verbose_name='Фамилия')),
('middle_name', models.CharField(blank=True, max_length=100, null=True, verbose_name='Отчество')),
('phone', models.CharField(blank=True, max_length=20, null=True, verbose_name='Телефон')),
('email', models.EmailField(blank=True, max_length=254, null=True, verbose_name='Почта')),
('position', models.CharField(blank=True, max_length=100, null=True, verbose_name='Должность')),
],
options={
'verbose_name': 'Представитель',
'verbose_name_plural': 'Представители',
},
),
migrations.CreateModel(
name='School',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=200, verbose_name='Название')),
('address', models.CharField(max_length=300, verbose_name='Адрес')),
('director', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='outreach.representative', verbose_name='Директор')),
('institution_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='outreach.institutiontype', verbose_name='Вид учебного заведения')),
],
options={
'verbose_name': 'Школа',
'verbose_name_plural': 'Школы',
},
),
migrations.CreateModel(
name='SchoolResponsibility',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('academic_year', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='education.academicyear', verbose_name='Учебный год')),
('responsible', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='employees.employee', verbose_name='Ответственный сотрудник')),
('school', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='outreach.school', verbose_name='Школа')),
],
options={
'verbose_name': 'Ответственный за школу',
'verbose_name_plural': 'Ответственные за школы',
},
),
migrations.CreateModel(
name='PartnerRepresentative',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('partner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='outreach.partner', verbose_name='Партнер')),
('representative', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='outreach.representative', verbose_name='Представитель')),
],
options={
'verbose_name': 'Представитель партнера',
'verbose_name_plural': 'Представители партнеров',
'unique_together': {('representative', 'partner')},
},
),
]

View File

94
outreach/models.py Normal file
View File

@@ -0,0 +1,94 @@
from django.db import models
from core.models import ContactMixin # Предполагается, что ContactMixin находится в приложении core
from education.models import AcademicYear # Предполагается, что AcademicYear находится в приложении education
from employees.models import Employee # Предполагается, что модель Employee находится в приложении employees
## Профориентационная деятельность (название приложения: outreach)
class InstitutionType(models.Model):
name = models.CharField(max_length=50, verbose_name="Название вида учебного заведения")
def __str__(self):
return self.name
class Meta:
verbose_name = "Вид учебного заведения"
verbose_name_plural = "Виды учебных заведений"
class Representative(ContactMixin):
position = models.CharField(max_length=100, blank=True, null=True, verbose_name="Должность")
def __str__(self):
return f"{self.last_name} {self.first_name} - {self.position}"
class Meta:
verbose_name = "Представитель"
verbose_name_plural = "Представители"
class School(models.Model):
director = models.ForeignKey(
Representative, on_delete=models.SET_NULL, null=True, blank=True, verbose_name="Директор"
)
institution_type = models.ForeignKey(
InstitutionType, on_delete=models.CASCADE, verbose_name="Вид учебного заведения"
)
name = models.CharField(max_length=200, verbose_name="Название")
address = models.CharField(max_length=300, verbose_name="Адрес")
def __str__(self):
return f"{self.name} ({self.institution_type})"
class Meta:
verbose_name = "Школа"
verbose_name_plural = "Школы"
class Partner(models.Model):
name = models.CharField(max_length=200, verbose_name="Название")
description = models.TextField(blank=True, null=True, verbose_name="Описание")
def __str__(self):
return self.name
class Meta:
verbose_name = "Партнер"
verbose_name_plural = "Партнеры"
class PartnerRepresentative(models.Model):
representative = models.OneToOneField(
Representative, on_delete=models.CASCADE, verbose_name="Представитель"
)
partner = models.ForeignKey(
Partner, on_delete=models.CASCADE, verbose_name="Партнер"
)
def __str__(self):
return f"{self.representative} - {self.partner}"
class Meta:
verbose_name = "Представитель партнера"
verbose_name_plural = "Представители партнеров"
unique_together = ("representative", "partner")
class SchoolResponsibility(models.Model):
academic_year = models.ForeignKey(
AcademicYear, on_delete=models.CASCADE, verbose_name="Учебный год"
)
responsible = models.ForeignKey(
Employee, on_delete=models.CASCADE, verbose_name="Ответственный сотрудник"
)
school = models.ForeignKey(
School, on_delete=models.CASCADE, verbose_name="Школа"
)
def __str__(self):
return f"{self.responsible} - {self.school} ({self.academic_year})"
class Meta:
verbose_name = "Ответственный за школу"
verbose_name_plural = "Ответственные за школы"

3
outreach/tests.py Normal file
View File

@@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

3
outreach/views.py Normal file
View File

@@ -0,0 +1,3 @@
from django.shortcuts import render
# Create your views here.