Esempio n. 1
0
class AgendaCriterio(Model):
    agenda = FK(_("Agenda"), Agenda)
    criterio = FK(_("Critério"), Criterio)
    active = BooleanField(_("Ativo"))

    class Meta:
        verbose_name = _("Critério da agenda")
        verbose_name_plural = _("Critérios das agendas")
        ordering = ['criterio__titulo']
        unique_together = [['agenda', 'criterio']]

    def __str__(self):
        return f'{self.criterio}'
Esempio n. 2
0
class Autorizacao(Model):
    agenda = FK(_('Agenda'), Agenda)
    grupo = FK(_('Papel'), Group)
    user = FK(_('Usuário'), get_user_model())
    active = BooleanField('Ativo')

    class Meta:
        verbose_name = _("Autorização")
        verbose_name_plural = _("Autorizações")
        ordering = ['active', 'grupo', 'user']
        unique_together = [['agenda', 'user']]

    def __str__(self):
        return f"O usuário {self.user} na agenda {self.agenda} tem o papel {self.grupo}"
Esempio n. 3
0
class Turma(Model):
    curso = FK(_('Curso'), Curso)
    codigo = StringField('Código', unique=True)
    active = BooleanField('Ativo')

    class Meta:
        verbose_name = "Turma"
        verbose_name_plural = "Turmas"
        ordering = ['codigo']

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

    def save(self, *args, **kwargs):
        parts = self.codigo.split(".")
        if len(parts) != 4:
            raise ValidationError(
                "O código do curso está errado, deve ser:"
                " 'AAAAO.P.CCCCCC.TT'. AAAA=Ano, O=Perído de oferta,"
                " P=Periodo do curso, CCCCCC=Código do curso, TT=Turma")
        codigo_curso = parts[2]
        if codigo_curso != self.curso.codigo:
            raise ValidationError(
                f"O código do curso está errado é {self.curso.codigo},"
                f" mas você informou no código da turma é que o código curos é {codigo_curso}."
            )

        super().save(*args, **kwargs)
Esempio n. 4
0
class CriterioAvaliado(Model):
    solicitacao = FK(_("Solicitacao"), Solicitacao)
    criterio = FK(_("Critério"), AgendaCriterio)
    confere = BooleanField(_("Confere"))

    class Meta:
        verbose_name = _("Critério avaliado")
        verbose_name_plural = _("Critérios avaliados")
        ordering = ['criterio__criterio__titulo']

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

    def save(self, *args, **kwargs):
        if self.solicitacao.agenda_id != self.criterio.agenda_id:
            raise ValidationError(
                _("Este critério não é da mesma agenda que esta solicitação"))
        super().save(*args, **kwargs)
Esempio n. 5
0
class Curso(Model):
    diretoria = FK(_('Diretoria'), Diretoria)
    codigo = StringField('Código', unique=True)
    nome = StringField('Nome')
    descricao = StringField('Descrição')
    active = BooleanField('Ativo')

    class Meta:
        verbose_name = "Curso"
        verbose_name_plural = "Cursos"
        ordering = ['nome']

    def __str__(self):
        return f'{self.codigo} - {self.nome}'
Esempio n. 6
0
class Diretoria(Model):
    campus = FK(_('Campus'), Campus)
    sigla = StringField('Sigla')
    descricao = StringField(_('Descrição'))
    active = BooleanField('Ativo')

    class Meta:
        verbose_name = "Diretoria"
        verbose_name_plural = "Diretorias"
        ordering = ['sigla']
        unique_together = [
            ['campus', 'sigla'],
        ]

    def __str__(self):
        return f'{self.sigla}/{self.campus.sigla}'
Esempio n. 7
0
class Vaga(Model):
    class DiaDaSemana(TextChoices):
        SEGUNDA = str(calendar.MONDAY), _('Seg')
        TERCA = str(calendar.TUESDAY), _('Ter')
        QUARTA = str(calendar.WEDNESDAY), _('Qua')
        QUINTA = str(calendar.THURSDAY), _('Qui')
        SEXTA = str(calendar.FRIDAY), _('Sex')
        SAB = str(calendar.SATURDAY), _('Sab')
        DOM = str(calendar.SUNDAY), _('Dom')

    agenda = FK(_('Agenda'), Agenda)
    dia = StringField(_('Dia da semana'), choices=DiaDaSemana.choices)
    inicio = TimeField(_('Início'))
    fim = TimeField(_('Fim'))
    atendimentos = PositiveIntegerField(
        _('Quantidade de atendimentos na janela'))

    class Meta:
        verbose_name = _("Vaga")
        verbose_name_plural = _("Vagas")
        ordering = ['dia', 'inicio']

    def __str__(self):
        return f"Até {self.atendimentos} atendimentos no dia {self.dia}, das {self.inicio} às {self.fim}"
Esempio n. 8
0
class Solicitacao(Model):
    class Status(TextChoices):
        SOLICITADO = 'Solicitado', _('Solicitado')
        DEFERIDO = 'Deferido', _('Deferido')
        INDEFERIDO = 'Indeferido', _('Indeferido')
        CANCELADO = 'Cancelado', _('Cancelado')

    bloqueantes = [Status.SOLICITADO, Status.DEFERIDO]

    agenda = FK(_('Agenda'), Agenda)
    inicio = DateTimeField(_("Agendado para"))
    fim = DateTimeField(_("Termina em"))
    solicitante = FK(_('Solicitante'),
                     get_user_model(),
                     related_name="solicitantes")
    status = StringField(_('Status'),
                         choices=Status.choices,
                         default=Status.SOLICITADO)
    avaliador = NullFK('Avaliador',
                       get_user_model(),
                       related_name="avaliadores")
    justificativa = TextField(_('Justificativa'), **nullable)
    avaliado_em = DateTimeField(_("Avaliado em"), **nullable)
    cancelado_em = DateTimeField(_("Cancelado"), **nullable)
    observacao = TextField(_("Observação"), **nullable)

    class Meta:
        verbose_name = _("Solicitação")
        verbose_name_plural = _("Solicitações")
        ordering = ['inicio']

    def __str__(self):
        avaliado_por = f"por {self.avaliador}." if self.status != Solicitacao.Status.SOLICITADO else "."
        return f"De {self.inicio} às {self.fim}, horário reservado para {self.solicitante}. {self.status}" + avaliado_por

    def save(self, *args, **kwargs):
        if self.status == Solicitacao.Status.INDEFERIDO and self.justificativa == '':
            raise ValidationError(
                "A justificativa deve ser informada sempre que houver um indeferimento."
            )
        if self.status in [
                Solicitacao.Status.INDEFERIDO, Solicitacao.Status.DEFERIDO
        ]:
            self.avaliado_em = now()
        super().save(*args, **kwargs)

        if self.solicitante.email is not None and self.solicitante.email != '':
            if self.status == Solicitacao.Status.SOLICITADO:
                subject = _("Solicitação de agendamento")
                agora = localtime(now()).strftime('%d/%m/%Y às %H:%M')
                inicio = self.inicio.strftime('%d/%m/%Y às %H:%M')
                template = _(
                    f'Você está recebendo esta mensagem pois em {agora} você SOLICITOU um agendamento para {inicio}. Lembre-se de chegar uns 15 minutos antes.'
                )
            elif self.status == Solicitacao.Status.DEFERIDO:
                inicio = localtime(self.inicio).strftime('%d/%m/%Y às %H:%M')
                subject = _("Agendamento aprovado")
                template = _(
                    f'Você está recebendo esta mensagem pois seu agendamento para {inicio} foi APROVADO. Lembre-se de chegar uns 15 minutos antes.'
                )
            elif self.status == Solicitacao.Status.INDEFERIDO:
                inicio = localtime(self.inicio).strftime('%d/%m/%Y às %H:%M')
                subject = _("Agendamento negado")
                template = _(
                    f'Você está recebendo esta mensagem pois seu agendamento para {inicio} foi NEGADO. O motivo foi: "{self.justificativa}".'
                )
            elif self.status == Solicitacao.Status.CANCELADO:
                inicio = localtime(self.inicio).strftime('%d/%m/%Y às %H:%M')
                subject = _("Agendamento cancelado")
                template = _(
                    f'Você está recebendo esta mensagem pois seu agendamento para {inicio} foi CANCELADO. Se não foi feito por você, favor realizar outro agendamento.'
                )
            else:
                raise ValidationError("Status inválido")
            send_mail(subject,
                      template,
                      None, [self.solicitante.email],
                      fail_silently=True)