示例#1
0
class Ispdn(models.Model):
    objects = MyManager()

    nomer = models.CharField(max_length=32, verbose_name='Номер')
    name = models.CharField(max_length=256, verbose_name='Название')
    start_date = models.DateField(null=True, blank=True)
    end_date = models.DateField(null=True, blank=True)

    prikaz = models.ManyToManyField('Prikaz',
                                    related_name='ispdns',
                                    blank=True)
    instruct = models.ManyToManyField('Instruct',
                                      related_name='ispdns',
                                      blank=True)
    rukovodstvo = models.ManyToManyField('Rukovodstvo',
                                         related_name='ispdns',
                                         blank=True)
    polozhenie = models.ManyToManyField('Polozhenie',
                                        related_name='ispdns',
                                        blank=True)
    po = models.ManyToManyField('ProgOb', related_name='ispdns', blank=True)
    raznoe = models.ManyToManyField('Raznoe',
                                    related_name='ispdns',
                                    blank=True)

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = 'ИСПДн'
        verbose_name_plural = 'ИСПДн'
示例#2
0
class Potok(models.Model):
    objects = MyManager()

    name = models.CharField(max_length=256, unique=True)

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = 'Поток'
        verbose_name_plural = 'Потоки'
示例#3
0
class DisciplineForm(models.Model):
    objects = MyManager()

    name = models.CharField(max_length=256, unique=True)

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = 'Форма дисциплины'
        verbose_name_plural = 'Формы дисциплины'
示例#4
0
class Specialnost(models.Model):
    objects = MyManager()

    name = models.CharField(max_length=256, unique=True)

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = 'Специальность'
        verbose_name_plural = 'Специальности'
示例#5
0
class Archive(models.Model):
    objects = MyManager()

    discipline = models.ForeignKey(Discipline, on_delete=models.CASCADE)

    dt = models.DateTimeField(auto_now_add=True, verbose_name='Дата')

    class Meta:
        verbose_name = 'Архив'
        verbose_name_plural = 'Архивы'

        ordering = ['-dt']
示例#6
0
class Podrazdelenie(models.Model):
    objects = MyManager()

    name = models.CharField(unique=True,
                            max_length=32,
                            verbose_name='Название')

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = 'Подразделение'
        verbose_name_plural = 'Подразделения'
示例#7
0
class SkziName(models.Model):
    objects = MyManager()

    type = models.CharField(max_length=128, verbose_name='Тип')
    firma = models.CharField(max_length=256, verbose_name='Фирма')
    version = models.CharField(max_length=32, verbose_name='Версия')

    def __str__(self):
        return self.type

    class Meta:
        verbose_name = 'Наименование СКЗИ'
        verbose_name_plural = 'Наименования СКЗИ'
示例#8
0
class Fakultet(models.Model):
    objects = MyManager()

    name = models.CharField(unique=True,
                            max_length=32,
                            verbose_name='Название')

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = 'Факультет'
        verbose_name_plural = 'Факультеты'
示例#9
0
class Zametka(models.Model):
    objects = MyManager()

    name = models.CharField(max_length=32)
    date = models.DateField(auto_now_add=True)
    content = models.CharField(max_length=1024)

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = 'Заметка'
        verbose_name_plural = 'Заметки'
        ordering = ['-id']
示例#10
0
class Raznoe(models.Model):
    def content_file_name(instance, filename):
        return ispdn_filename('raznoe', Raznoe, filename)

    objects = MyManager()
    name = models.CharField(max_length=256, verbose_name='Название')
    file = models.FileField(null=True, upload_to=content_file_name)

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = 'Разное'
        verbose_name_plural = "Разное"
        ordering = ['-id']
示例#11
0
class Skzi(models.Model):
    objects = MyManager()

    archive = models.BooleanField(default=False)

    name = models.ForeignKey('SkziName', on_delete=models.CASCADE)
    serial_n = models.CharField(max_length=32)
    ekz_n = models.CharField(max_length=32, blank=True)

    #Отметка о получении
    from_organ = models.ForeignKey('OrganCrypto',
                                   on_delete=models.CASCADE,
                                   related_name='skzis_from')
    date_poluch = models.DateField(null=True, blank=True)
    nomer_poluch = models.CharField(max_length=64, blank=True)

    #Отметка о рас.
    to_person = models.ForeignKey('FioRassilki',
                                  on_delete=models.CASCADE,
                                  related_name='skzis_to')
    date_sopr = models.DateField(null=True, blank=True)
    nomer_sopr = models.CharField(max_length=32, blank=True)
    date_podtv = models.DateField(null=True, blank=True)
    nomer_podtv = models.CharField(max_length=32, blank=True)
    podtv = models.BooleanField(default=False)

    #Отметка о возврате
    vozvr_date_sopr = models.DateField(null=True, blank=True)
    vozvr_nomer_sopr = models.CharField(max_length=32, null=True, blank=True)
    vozvr_date_podtv = models.DateField(null=True, blank=True)
    vozvr_nomer_podtv = models.CharField(max_length=32, null=True, blank=True)

    date_vvod = models.DateField(null=True, blank=True)
    date_vivod = models.DateField(null=True, blank=True)

    #Отметка о уничтожении
    date_unichtozh = models.DateField(null=True, blank=True)
    nomer_acta = models.CharField(max_length=32, null=True, blank=True)
    act_podtv = models.BooleanField(default=False)

    primechanie = models.CharField(max_length=1024, null=True, blank=True)

    def __str__(self):
        return self.name.type

    class Meta:
        verbose_name = 'Запись СКЗИ'
        verbose_name_plural = 'Записи СКЗИ'
示例#12
0
class Rukovodstvo(models.Model):
    def content_file_name(instance, filename):
        return ispdn_filename('rukovodstva', Rukovodstvo, filename)

    objects = MyManager()
    nomer = models.CharField(max_length=32, verbose_name='Номер')
    name = models.CharField(max_length=256, verbose_name='Название')
    file = models.FileField(null=True, upload_to=content_file_name)

    def __str__(self):
        return f'{self.nomer} {self.name}'

    class Meta:
        verbose_name = 'Руководство'
        verbose_name_plural = "Руководства"
        ordering = ['-id']
示例#13
0
class ProgOb(models.Model):
    def content_file_name(instance, filename):
        return ispdn_filename('progob', ProgOb, filename)

    objects = MyManager()
    nomer = models.CharField(max_length=32, verbose_name='Номер')
    name = models.CharField(max_length=256, verbose_name='Название')
    file = models.FileField(null=True, upload_to=content_file_name)

    def __str__(self):
        return f'{self.nomer} {self.name}'

    class Meta:
        verbose_name = 'ПО'
        verbose_name_plural = "ПО"
        ordering = ['-id']
示例#14
0
class FioRassilki(models.Model):
    objects = MyManager()

    last_name = models.CharField(max_length=128, verbose_name='Фамилия')
    first_name = models.CharField(max_length=128, verbose_name='Имя')
    surname = models.CharField(max_length=128, verbose_name='Отчество')
    dolzhnost = models.CharField(max_length=128, verbose_name='Должность')

    def get_fio(self):
        return f'{self.last_name} {self.first_name[0]}.{self.surname[0]}.'

    def __str__(self):
        return self.get_fio()

    class Meta:
        verbose_name = 'ФИО Рассылки'
        verbose_name_plural = 'ФИО Рассылки'
示例#15
0
class Fakultet(models.Model):
    objects = MyManager()

    name = models.CharField(max_length=256, unique=True)

    def __str__(self):
        return self.name

    def check_errors(self):
        disciplines = Discipline.objects.filter(fakultet=self)
        dis_errors = len(Discipline.objects.filter(errors=True).all()) > 0
        dis_errors = dis_errors or disciplines.annotate(
            num_nagruzki=Count('nagruzki', filter=Q(nagruzki__archive=None))).filter(
            num_nagruzki__lte=0).count() > 0
        return dis_errors

    class Meta:
        verbose_name = 'Факультет'
        verbose_name_plural = 'Факультеты'
示例#16
0
class Instruct(models.Model):
    def content_file_name(instance, filename):
        return ispdn_filename('istructs', Instruct, filename)

    objects = MyManager()
    nomer = models.CharField(max_length=32, verbose_name='Номер')
    name = models.CharField(max_length=256, verbose_name='Название')
    ovetstv = models.ForeignKey('Pdn.Person',
                                on_delete=models.SET_NULL,
                                null=True,
                                verbose_name='Ответственный')
    file = models.FileField(null=True, upload_to=content_file_name)

    def __str__(self):
        return f'{self.nomer} {self.name}'

    class Meta:
        verbose_name = 'Инструкция'
        verbose_name_plural = "Инструкции"
        ordering = ['-id']
示例#17
0
class Kafedra(models.Model):
    objects = MyManager()

    name = models.CharField(max_length=256, unique=True)

    fakultet = models.ForeignKey('Fakultet', on_delete=models.CASCADE, null=True, blank=True)

    def __str__(self):
        return self.name


    def save(self, **kwargs):
        if not self.fakultet:
            discipline = Discipline.objects.filter(kafedra__id=self.id).first()
            if discipline:
                self.fakultet = discipline.fakultet
        super(Kafedra, self).save()

    class Meta:
        verbose_name = 'Кафедра'
        verbose_name_plural = 'Кафедры'
示例#18
0
class Prikaz(models.Model):
    def content_file_name(instance, filename):
        return ispdn_filename('prikazi', Prikaz, filename)

    objects = MyManager()
    nomer = models.CharField(max_length=32, verbose_name='Номер')
    name = models.CharField(max_length=256, verbose_name='Название')
    date = models.DateField(verbose_name='Дата')
    ovetstv = models.ForeignKey('Pdn.Person',
                                on_delete=models.SET_NULL,
                                null=True,
                                verbose_name='Ответственный')
    file = models.FileField(null=True, upload_to=content_file_name)

    def __str__(self):
        return f'{self.nomer} {self.name}'

    def get_filename(self):
        return self.file.name.split('/')[-1]

    class Meta:
        verbose_name = 'Приказ'
        verbose_name_plural = "Приказы"
        ordering = ['-id']
示例#19
0
class Person(models.Model):
    objects = MyManager()
    last_name = models.CharField(max_length=128, verbose_name='Фамилия')
    first_name = models.CharField(max_length=128, verbose_name='Имя')
    surname = models.CharField(max_length=128, verbose_name='Отчество')
    birth_date = models.DateField(verbose_name='Дата рождения')
    fakultet = models.ForeignKey('Fakultet',
                                 on_delete=models.SET_NULL,
                                 null=True,
                                 blank=True,
                                 verbose_name='Факультет',
                                 related_name='persons')
    podrazd = models.ForeignKey('Podrazdelenie',
                                on_delete=models.SET_NULL,
                                null=True,
                                blank=True,
                                verbose_name='Подразделение',
                                related_name='persons')

    soglasie = models.BooleanField(
        default=False,
        verbose_name='Согласие на обработку персональных данных')
    sogl_raspr = models.BooleanField(
        default=False,
        verbose_name='Согласие на распространение персональных данных')

    def get_fio(self):
        return f'{self.last_name} {self.first_name[0]}.{self.surname[0]}.'

    def __str__(self):
        return self.get_fio()

    class Meta:
        verbose_name = 'Сотрудник/Студент'
        verbose_name_plural = 'Сотрудники/Студенты'
        ordering = ['-id']
示例#20
0
class Prepod(models.Model):
    objects = MyManager()

    DOLZHNOST = [('Зав. кафедрой', 'Зав. кафедрой'), ('Декан', 'Декан'),
                 ('Профессор', 'Профессор'), ('Доцент', 'Доцент'),
                 ('Ст. преподаватель', 'Ст. преподаватель'),
                 ('Ассистент', 'Ассистент')]

    PRAVA = [('raspred', 'Распределение и просмотр'),
             ('prosmotr', 'Только просмотр по кафедре'),
             ('None', 'Просмотр своих дисциплин')]

    PKGD = [('pps', 'ППС')]

    UCH_ZVANIE = [
        ('docent', 'доцент'),
        ('prof', 'профессор'),
    ]

    user = models.ForeignKey(User,
                             on_delete=models.SET_NULL,
                             null=True,
                             related_name='prepod',
                             blank=True)

    email = models.EmailField(verbose_name='Email', null=True, blank=True)

    last_name = models.CharField(max_length=64, verbose_name="Фамилия")
    first_name = models.CharField(max_length=64, verbose_name="Имя")
    surname = models.CharField(max_length=64, verbose_name="Отчество")

    fio = models.CharField(max_length=256,
                           verbose_name='ФИО',
                           blank=True,
                           default='')

    dolzhnost = models.CharField(choices=DOLZHNOST,
                                 max_length=64,
                                 default='Зав. кафедрой')

    kafedra = models.ForeignKey('Disciplines.Kafedra',
                                on_delete=models.SET_NULL,
                                null=True,
                                default=None,
                                blank=True)

    kv_uroven = models.IntegerField(verbose_name="Кв. уровень")

    chasov_stavki = models.IntegerField(verbose_name="Часов ставки")

    pkgd = models.CharField(max_length=32, choices=PKGD, default='pps')

    srok_izbr = models.DateField(null=True)
    uch_stepen = models.CharField(max_length=32, null=True, blank=True)
    uch_zvanie = models.CharField(max_length=32,
                                  choices=UCH_ZVANIE,
                                  null=True,
                                  blank=True)

    dogovor = models.BooleanField(default=False)

    prava = models.CharField(max_length=128,
                             choices=PRAVA,
                             default='None',
                             verbose_name='Права')

    def save(self, **kwargs):
        self.fio = self.get_fio()
        if self.user and not self.user.is_superuser:
            self.user.is_staff = False
            self.user.save()

        self.user = User.objects.get_or_none(email=self.email)
        if self.dolzhnost == 'Зав. кафедрой':
            self.prava = 'raspred'
            if self.user and not self.user.is_superuser:
                self.user.is_staff = True
                self.user.save()
        elif self.user and not self.user.is_superuser:
            self.user.is_staff = False
            self.user.save()

        super().save(**kwargs)

    class Meta:
        verbose_name = 'Преподаватель'
        verbose_name_plural = 'Преподаватели'

        ordering = ['last_name']

    def dolzhnost_name(self):
        return self.dolzhnost

    def get_fio(self):
        return f'{self.last_name} {self.first_name[0]}.{self.surname[0]}.'

    def __str__(self):
        return self.get_fio()

    @classmethod
    def get_display_value(cls, choices_name, field_val):
        choices = eval(f'cls.{choices_name}')
        for key, val in choices:
            if key == field_val:
                return val
示例#21
0
class Nagruzka(models.Model):
    objects = MyManager()

    discipline = models.ForeignKey(Discipline, on_delete=models.CASCADE, null=True, verbose_name="Дисциплина", related_name='nagruzki')

    archive = models.ForeignKey(Archive, on_delete=models.CASCADE, null=True, default=None, related_name='nagruzki')

    prepod = models.ForeignKey(Prepod, on_delete=models.CASCADE, null=True, verbose_name="Преподаватель", related_name='nagruzki')

    n_stavka = models.DecimalField(max_digits=6, decimal_places=2, default=0)
    pochasovka = models.BooleanField(default=False)

    student = models.IntegerField(verbose_name='Студентов')

    lk = models.IntegerField(verbose_name='Лекции', default=0)
    pr = models.IntegerField(verbose_name='Практические работы', default=0)
    lr = models.IntegerField(verbose_name='Лабараторные работы', default=0)

    k_tek = models.DecimalField(max_digits=6, decimal_places=2, verbose_name='Тек.кон.', default=0)
    k_ekz = models.DecimalField(max_digits=6, decimal_places=2, verbose_name='Кон.экз', default=0)

    zachet = models.DecimalField(max_digits=6, decimal_places=2, verbose_name='Зачет', default=0)
    ekzamen = models.DecimalField(max_digits=6, decimal_places=2, verbose_name='Экзамен', default=0)

    kontr_raboti = models.DecimalField(max_digits=6, decimal_places=2, verbose_name='Контр. раб.', default=0)
    kr_kp = models.DecimalField(max_digits=6, decimal_places=2, verbose_name='КР/КП', default=0)
    vkr = models.DecimalField(max_digits=6, decimal_places=2, verbose_name='ВКР', default=0)

    pr_ped = models.DecimalField(max_digits=6, decimal_places=2, verbose_name='Практ.пед.', default=0)

    pr_dr = models.DecimalField(max_digits=6, decimal_places=2, verbose_name='Практ.другая', default=0)

    gak = models.DecimalField(max_digits=6, decimal_places=2, verbose_name='ГАК', default=0)

    aspirantura = models.DecimalField(max_digits=6, decimal_places=2, verbose_name='Асп./Магистартура', default=0)

    rukovodstvo = models.DecimalField(max_digits=6, decimal_places=2, verbose_name='Руководство', default=0)

    dop_chasi = models.DecimalField(max_digits=6, decimal_places=2, verbose_name='Доп. часы', default=0)

    summary = models.DecimalField(max_digits=10, decimal_places=2, default=0)

    def __str__(self):
        if self.discipline:
            return f'{self.discipline.name} {self.discipline.form}'
        return 'None'

    def save(self, **kwargs):
        self.summary = self.get_summary()
        super().save(**kwargs)

    class Meta:
        verbose_name = 'Нагрузка'
        verbose_name_plural = 'Нагрузки'

    def get_summary(self):
        fields = ['k_tek', 'k_ekz', 'lk', 'lr', 'pr', 'zachet', 'ekzamen', 'kontr_raboti', 'kr_kp', 'vkr', 'pr_ped', 'pr_dr', 'gak', 'aspirantura', 'rukovodstvo', 'dop_chasi']
        sum = 0
        for field in fields:
            sum += float(getattr(self, field))
        return sum
示例#22
0
class Discipline(models.Model):
    objects = MyManager()

    errors = models.BooleanField(default=True, verbose_name='Ошибки')

    code = models.IntegerField(verbose_name='Код', default=0)
    form = models.ForeignKey(DisciplineForm, on_delete=models.SET_NULL, null=True, verbose_name='Форма')

    shifr = models.CharField(max_length=10, default='НЕТ', verbose_name='Шифр')
    name = models.CharField(max_length=1024, verbose_name='Дисциплина')

    fakultet = models.ForeignKey(Fakultet, on_delete=models.SET_NULL, null=True, verbose_name='Факультет')

    specialnost = models.ForeignKey(Specialnost, on_delete=models.SET_NULL, null=True, verbose_name='Специальность')

    kurs = models.IntegerField(verbose_name='Курс')

    semestr = models.IntegerField(verbose_name='Семестр')

    PERIOD_CHOICES = [
        ('осенний', 'осенний'),
        ('весенний', 'весенний'),
    ]

    period = models.CharField(max_length=16, choices=PERIOD_CHOICES, default='осенний', verbose_name='Период')

    nedeli = models.IntegerField(verbose_name='Недели')

    trudoemkost = models.IntegerField(verbose_name='Трудоемкость')

    chas_v_nedelu = models.IntegerField(verbose_name='Часы в неделю')

    srs = models.IntegerField(verbose_name='Часов СРС')

    chas_po_planu = models.IntegerField(verbose_name='Часов по плану')

    student = models.IntegerField(verbose_name='Студенты')
    group = models.IntegerField(verbose_name='Группы')
    podgroup = models.IntegerField(verbose_name='Подгруппы')

    lk = models.IntegerField(verbose_name='Лекции')
    pr = models.IntegerField(verbose_name='Практические работы')
    lr = models.IntegerField(verbose_name='Лабараторные работы')

    k_tek = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='Тек.кон.')
    k_ekz = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='Кон.экз')

    zachet = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='Зачет')
    ekzamen = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='Экзамен')

    kontr_raboti = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='Контр. раб.')
    kr_kp = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='КР/КП')
    vkr = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='ВКР')

    pr_ped = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='Практ.пед.')

    pr_dr = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='Практ.другая')

    gak = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='ГАК')

    aspirantura = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='Асп./Магистартура')

    rukovodstvo = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='Руководство')

    dop_chasi = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='Доп. часы')

    kafedra = models.ForeignKey(Kafedra, on_delete=models.SET_NULL, null=True, verbose_name='Кафедра', related_name='disciplines')

    potok = models.ForeignKey(Potok, on_delete=models.SET_NULL, null=True, verbose_name='Поток')

    summary = models.DecimalField(max_digits=10, decimal_places=2, default=0, verbose_name='ИТОГО')

    def check_nagruzka_sum(self):
        CONTROL_CELLS = ['lk', 'pr', 'lr', 'k_tek', 'k_ekz', 'zachet',
                         'ekzamen', 'kontr_raboti', 'kr_kp',
                         'vkr', 'pr_ped', 'pr_dr', 'gak', 'aspirantura', 'rukovodstvo', 'dop_chasi', 'summary']

        errors = []

        nagruzki = self.nagruzki.filter(archive=None).all()
        self.errors = False
        if len(nagruzki) > 0:
            for cell in CONTROL_CELLS:
                sum = 0
                for nagruzka in nagruzki:
                    sum += getattr(nagruzka, cell)
                self.errors = self.errors or float(sum) != float(getattr(self, cell))
                if float(sum) != float(getattr(self, cell)):
                    errors.append(cell)

        return errors

    def nagruzka_count(self):
        return len(self.nagruzki.filter(archive=None).all())

    def spec_and_form(self):
        return f'{self.specialnost.name} ({self.form.name})'

    def group_podgroup(self):
        return f'{self.group}/{self.podgroup}'

    def audit_chasov(self):
        return self.lk + self.pr + self.lr

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = 'Дисциплина'
        verbose_name_plural = 'Дисциплины'
        ordering = ['code']