Source code for src.dieta_especial.protocolo_padrao.models

from auditlog.models import AuditlogHistoryField
from auditlog.registry import auditlog
from django.db import models

from src.dados_comuns.behaviors import (
    Ativavel,
    CriadoEm,
    CriadoPor,
    Nomeavel,
    TemChaveExterna,
    TemIdentificadorExternoAmigavel,
)
from src.dieta_especial.solicitacao_dieta_especial.models import (
    SolicitacaoDietaEspecial,
)


[docs] class Alimento(Nomeavel, TemChaveExterna, Ativavel): TIPO_CHOICES = (("E", "Edital"), ("P", "Proprio")) SO_ALIMENTOS = "SO_ALIMENTOS" SO_SUBSTITUTOS = "SO_SUBSTITUTOS" AMBOS = "AMBOS" TIPO_LISTAGEM_PROTOCOLO = ( (SO_ALIMENTOS, "Aparece somente na listagem de alimentos"), (SO_SUBSTITUTOS, "Aparece somente na listagem de alimentos substitutos"), (AMBOS, "Aparece nas listagem de alimentos e substitutos"), ) tipo = models.CharField(max_length=1, choices=TIPO_CHOICES, default="E") marca = models.ForeignKey( "produto.Marca", on_delete=models.PROTECT, blank=True, null=True ) outras_informacoes = models.CharField(max_length=255, blank=True) tipo_listagem_protocolo = models.CharField( max_length=15, choices=TIPO_LISTAGEM_PROTOCOLO, default=SO_ALIMENTOS ) class Meta: ordering = ("nome",) unique_together = ("nome", "marca") def __str__(self): return self.nome
[docs] class SubstituicaoAlimento(models.Model): TIPO_CHOICES = [("I", "Isento"), ("S", "Substituir")] solicitacao_dieta_especial = models.ForeignKey( SolicitacaoDietaEspecial, on_delete=models.CASCADE ) alimento = models.ForeignKey( Alimento, on_delete=models.PROTECT, blank=True, null=True ) tipo = models.CharField(max_length=1, choices=TIPO_CHOICES, blank=True) substitutos = models.ManyToManyField( "produto.Produto", related_name="substitutos", blank=True, help_text="produtos substitutos", ) alimentos_substitutos = models.ManyToManyField( Alimento, related_name="alimentos_substitutos", blank=True )
[docs] class AlimentoSubstituto(models.Model): substituicao_alimento_protocolo_padrao = models.ForeignKey( "SubstituicaoAlimentoProtocoloPadrao", on_delete=models.SET_NULL, null=True ) alimento = models.ForeignKey( Alimento, on_delete=models.SET_NULL, null=True, blank=True )
[docs] class ProtocoloPadraoDietaEspecial( TemChaveExterna, CriadoEm, CriadoPor, TemIdentificadorExternoAmigavel, Ativavel ): # Mantive para termos um histórico acessível pelo admin history = AuditlogHistoryField() # Status Choice STATUS_LIBERADO = "LIBERADO" STATUS_NAO_LIBERADO = "NAO_LIBERADO" STATUS_NOMES = { STATUS_LIBERADO: "Liberado", STATUS_NAO_LIBERADO: "Não Liberado", } STATUS_CHOICES = ( (STATUS_LIBERADO, STATUS_NOMES[STATUS_LIBERADO]), (STATUS_NAO_LIBERADO, STATUS_NOMES[STATUS_NAO_LIBERADO]), ) nome_protocolo = models.TextField("Nome do Protocolo") orientacoes_gerais = models.TextField("Orientações Gerais", blank=True) status = models.CharField( "Status da guia", max_length=25, choices=STATUS_CHOICES, default=STATUS_NAO_LIBERADO, ) outras_informacoes = models.TextField("Outras Informações", blank=True) editais = models.ManyToManyField( "terceirizada.Edital", related_name="protocolos_padroes_dieta_especial" ) historico = models.JSONField(blank=True, null=True) class Meta: ordering = ("nome_protocolo",) verbose_name = "Protocolo padrão de dieta especial" verbose_name_plural = "Protocolos padrões de dieta especial" def __str__(self): return str(self.nome_protocolo)
[docs] class SubstituicaoAlimentoProtocoloPadrao(models.Model): history = AuditlogHistoryField() TIPO_CHOICES = [("I", "Isento"), ("S", "Substituir")] protocolo_padrao = models.ForeignKey( ProtocoloPadraoDietaEspecial, on_delete=models.CASCADE, related_name="substituicoes", ) alimento = models.ForeignKey( Alimento, on_delete=models.PROTECT, blank=True, null=True ) tipo = models.CharField(max_length=1, choices=TIPO_CHOICES, blank=True) substitutos = models.ManyToManyField( "produto.Produto", related_name="substitutos_protocolo_padrao", blank=True, help_text="produtos substitutos", ) alimentos_substitutos = models.ManyToManyField( Alimento, related_name="alimentos_substitutos_protocolo_padrao", blank=True, through="AlimentoSubstituto", ) class Meta: verbose_name = "Substituição de alimento para protocolo padrão de dieta" verbose_name_plural = ( "Substituições de alimentos para protocolos padrões de dietas" ) def __str__(self): return f"substituição protocolo padrão: {self.protocolo_padrao}, tipo: {self.tipo}."
auditlog.register(ProtocoloPadraoDietaEspecial) auditlog.register(SubstituicaoAlimentoProtocoloPadrao) auditlog.register(SubstituicaoAlimentoProtocoloPadrao.alimentos_substitutos.through) auditlog.register(AlimentoSubstituto)