Source code for src.pos_recebimento.models

from django.conf import settings
from django.db import models

from src.dados_comuns.behaviors import CriadoPor, ModeloBase
from src.pre_recebimento.cronograma_entrega.models import Cronograma
from src.terceirizada.models import Contrato, Terceirizada


[docs] class TermoRecebimentoDefinitivo(ModeloBase, CriadoPor): """Termo de Recebimento Definitivo do módulo Pós-Recebimento. Registra a formalização do recebimento definitivo de produtos de uma empresa/contrato, vinculando um ou mais cronogramas, os fiscais (perfil DILOG_QUALIDADE) responsáveis e o texto do termo. Regra de negócio: a empresa deve possuir ao menos uma ficha de recebimento com status "Assinado CODAE" (FichaDeRecebimentoWorkflow.ASSINADA). A regra é aplicada na listagem de empresas disponíveis e validada novamente na criação do termo via API. A criação via API persiste o termo sempre com status ENVIADO (fluxo "Salvar e Enviar"). """ RASCUNHO = "RASCUNHO" ENVIADO = "ENVIADO" STATUS_CHOICES = ( (RASCUNHO, "Rascunho"), (ENVIADO, "Enviado"), ) empresa = models.ForeignKey( Terceirizada, on_delete=models.PROTECT, verbose_name="Empresa", related_name="termos_recebimento_definitivo", ) contrato = models.ForeignKey( Contrato, on_delete=models.PROTECT, verbose_name="Contrato", related_name="termos_recebimento_definitivo", ) cronogramas = models.ManyToManyField( Cronograma, through="CronogramaTermoRecebimentoDefinitivo", verbose_name="Cronogramas", related_name="termos_recebimento_definitivo", blank=True, ) fiscal_1 = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.PROTECT, verbose_name="Fiscal 1", related_name="termos_recebimento_definitivo_fiscal_1", ) fiscal_2 = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.PROTECT, verbose_name="Fiscal 2", related_name="termos_recebimento_definitivo_fiscal_2", ) fiscal_3 = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.PROTECT, verbose_name="Fiscal 3", related_name="termos_recebimento_definitivo_fiscal_3", ) texto_termo = models.TextField("Texto do Termo") status = models.CharField( "Status", max_length=20, choices=STATUS_CHOICES, default=RASCUNHO, ) alterado_por = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.DO_NOTHING, null=True, blank=True, verbose_name="Alterado por", related_name="termos_recebimento_definitivo_alterados", ) def __str__(self): return ( f"Termo de Recebimento Definitivo - " f"{self.empresa.nome_fantasia} - Contrato: {self.contrato.numero}" ) class Meta: verbose_name = "Termo de Recebimento Definitivo" verbose_name_plural = "Termos de Recebimento Definitivo"
[docs] class CronogramaTermoRecebimentoDefinitivo(models.Model): """Cronograma vinculado a um Termo de Recebimento Definitivo. Cada cronograma do termo possui seu próprio valor de contrato e quantidade total recebida (repetidos por cronograma). """ termo = models.ForeignKey( TermoRecebimentoDefinitivo, on_delete=models.CASCADE, verbose_name="Termo de Recebimento Definitivo", related_name="cronogramas_termo", ) cronograma = models.ForeignKey( Cronograma, on_delete=models.PROTECT, verbose_name="Cronograma", ) valor_contrato = models.DecimalField( "Valor do Contrato", max_digits=15, decimal_places=2, ) quantidade_total_recebida = models.DecimalField( "Quantidade Total Recebida", max_digits=15, decimal_places=2, ) def __str__(self): return f"Cronograma {self.cronograma.numero} do Termo {self.termo.uuid}" class Meta: verbose_name = "Cronograma do Termo de Recebimento Definitivo" verbose_name_plural = "Cronogramas do Termo de Recebimento Definitivo" unique_together = [("termo", "cronograma")]