Source code for src.pre_recebimento.ficha_tecnica.api.serializers.serializers
import datetime
from rest_framework import serializers
from src.pre_recebimento.base.api.serializers.serializers import (
UnidadeMedidaSimplesSerializer,
)
from src.pre_recebimento.ficha_tecnica.models import (
AnaliseFichaTecnica,
FabricanteFichaTecnica,
FichaTecnicaDoProduto,
InformacoesNutricionaisFichaTecnica,
)
from src.produto.api.serializers.serializers import (
FabricanteSimplesSerializer,
InformacaoNutricionalSerializer,
MarcaSimplesSerializer,
NomeDeProdutoEditalSerializer,
)
from src.terceirizada.api.serializers.serializers import (
TerceirizadaLookUpSerializer,
)
from src.dados_comuns.api.serializers import (
LogSolicitacoesUsuarioSerializer,
)
[docs]
class FichaTecnicaSimplesSerializer(serializers.ModelSerializer):
produto = NomeDeProdutoEditalSerializer()
uuid_empresa = serializers.SerializerMethodField()
ponto_a_ponto = serializers.BooleanField(read_only=True)
[docs]
class Meta:
model = FichaTecnicaDoProduto
fields = (
"uuid",
"numero",
"produto",
"uuid_empresa",
"pregao_chamada_publica",
"programa",
"ponto_a_ponto",
)
[docs]
class FichaTecnicaCronogramaSerializer(FichaTecnicaSimplesSerializer):
marca = MarcaSimplesSerializer()
unidade_medida_volume_primaria = UnidadeMedidaSimplesSerializer()
unidade_medida_primaria = UnidadeMedidaSimplesSerializer()
unidade_medida_secundaria = UnidadeMedidaSimplesSerializer()
[docs]
class Meta(FichaTecnicaSimplesSerializer.Meta):
fields = FichaTecnicaSimplesSerializer.Meta.fields + (
"marca",
"volume_embalagem_primaria",
"unidade_medida_volume_primaria",
"peso_liquido_embalagem_primaria",
"unidade_medida_primaria",
"peso_liquido_embalagem_secundaria",
"unidade_medida_secundaria",
)
[docs]
class FichaTecnicaListagemSerializer(serializers.ModelSerializer):
nome_produto = serializers.SerializerMethodField()
criado_em = serializers.SerializerMethodField()
status = serializers.CharField(source="get_status_display")
programa = serializers.CharField()
ponto_a_ponto = serializers.BooleanField(read_only=True)
[docs]
class Meta:
model = FichaTecnicaDoProduto
fields = (
"uuid",
"numero",
"nome_produto",
"pregao_chamada_publica",
"criado_em",
"status",
"programa",
"ponto_a_ponto",
)
[docs]
class InformacoesNutricionaisFichaTecnicaSerializer(serializers.ModelSerializer):
informacao_nutricional = InformacaoNutricionalSerializer()
[docs]
class Meta:
model = InformacoesNutricionaisFichaTecnica
fields = (
"uuid",
"informacao_nutricional",
"quantidade_por_100g",
"quantidade_porcao",
"valor_diario",
)
read_only_fields = ("uuid",)
[docs]
class FabricanteFichaTecnicaSerializer(serializers.ModelSerializer):
fabricante = FabricanteSimplesSerializer()
[docs]
class Meta:
model = FabricanteFichaTecnica
fields = (
"uuid",
"fabricante",
"cnpj",
"cep",
"endereco",
"numero",
"complemento",
"bairro",
"cidade",
"estado",
"email",
"telefone",
)
[docs]
class FichaTecnicaDetalharSerializer(serializers.ModelSerializer):
criado_em = serializers.SerializerMethodField()
produto = NomeDeProdutoEditalSerializer()
marca = MarcaSimplesSerializer()
empresa = TerceirizadaLookUpSerializer()
fabricante = FabricanteFichaTecnicaSerializer()
envasador_distribuidor = FabricanteFichaTecnicaSerializer()
unidade_medida_porcao = UnidadeMedidaSimplesSerializer()
status = serializers.CharField(source="get_status_display", read_only=True)
programa_display = serializers.CharField(
source="get_programa_display", read_only=True
)
informacoes_nutricionais = InformacoesNutricionaisFichaTecnicaSerializer(many=True)
unidade_medida_primaria = UnidadeMedidaSimplesSerializer()
unidade_medida_secundaria = UnidadeMedidaSimplesSerializer()
unidade_medida_primaria_vazia = UnidadeMedidaSimplesSerializer()
unidade_medida_secundaria_vazia = UnidadeMedidaSimplesSerializer()
unidade_medida_volume_primaria = UnidadeMedidaSimplesSerializer()
logs = LogSolicitacoesUsuarioSerializer(many=True, read_only=True)
[docs]
class Meta:
model = FichaTecnicaDoProduto
fields = (
"uuid",
"numero",
"produto",
"pregao_chamada_publica",
"marca",
"categoria",
"tipo_entrega",
"programa",
"programa_display",
"status",
"criado_em",
"empresa",
"fabricante",
"envasador_distribuidor",
"prazo_validade",
"numero_registro",
"organico",
"mecanismo_controle",
"especie_variedade",
"componentes_produto",
"alergenicos",
"ingredientes_alergenicos",
"gluten",
"lactose",
"lactose_detalhe",
"porcao",
"unidade_medida_porcao",
"valor_unidade_caseira",
"unidade_medida_caseira",
"informacoes_nutricionais",
"prazo_validade_descongelamento",
"condicoes_de_conservacao",
"temperatura_congelamento",
"temperatura_veiculo",
"condicoes_de_transporte",
"embalagem_primaria",
"embalagem_secundaria",
"embalagens_de_acordo_com_anexo",
"material_embalagem_primaria",
"produto_eh_liquido",
"volume_embalagem_primaria",
"unidade_medida_volume_primaria",
"peso_liquido_embalagem_primaria",
"unidade_medida_primaria",
"peso_liquido_embalagem_secundaria",
"unidade_medida_secundaria",
"peso_embalagem_primaria_vazia",
"unidade_medida_primaria_vazia",
"peso_embalagem_secundaria_vazia",
"unidade_medida_secundaria_vazia",
"variacao_percentual",
"sistema_vedacao_embalagem_secundaria",
"rotulo_legivel",
"nome_responsavel_tecnico",
"habilitacao",
"numero_registro_orgao",
"arquivo",
"modo_de_preparo",
"informacoes_adicionais",
"logs"
)
[docs]
class AnaliseFichaTecnicaSerializer(serializers.ModelSerializer):
aprovada = serializers.BooleanField()
[docs]
class FichaTecnicaComAnaliseDetalharSerializer(FichaTecnicaDetalharSerializer):
analise = serializers.SerializerMethodField()
log_mais_recente = serializers.SerializerMethodField()
[docs]
def get_analise(self, obj):
analise_mais_recente = obj.analises.order_by("-criado_em").first()
return (
AnaliseFichaTecnicaSerializer(analise_mais_recente).data
if analise_mais_recente
else None
)
[docs]
def get_log_mais_recente(self, obj):
log_mais_recente = obj.log_mais_recente
if log_mais_recente:
return datetime.datetime.strftime(
log_mais_recente.criado_em, "%d/%m/%Y - %H:%M"
)
else:
return datetime.datetime.strftime(obj.alterado_em, "%d/%m/%Y - %H:%M")
[docs]
class Meta(FichaTecnicaDetalharSerializer.Meta):
fields = FichaTecnicaDetalharSerializer.Meta.fields + (
"analise",
"log_mais_recente",
)
[docs]
class PainelFichaTecnicaSerializer(serializers.ModelSerializer):
numero_ficha = serializers.CharField(source="numero")
nome_produto = serializers.CharField(source="produto.nome")
categoria = serializers.CharField()
tipo_entrega = serializers.CharField()
nome_empresa = serializers.CharField(source="empresa.nome_fantasia")
status = serializers.CharField(source="get_status_display")
log_mais_recente = serializers.SerializerMethodField()
programa_leve_leite = serializers.SerializerMethodField()
[docs]
def get_log_mais_recente(self, obj):
if obj.log_mais_recente:
if obj.log_mais_recente.criado_em.date() == datetime.date.today():
return datetime.datetime.strftime(
obj.log_mais_recente.criado_em, "%d/%m/%Y %H:%M"
)
return datetime.datetime.strftime(
obj.log_mais_recente.criado_em, "%d/%m/%Y"
)
else:
return datetime.datetime.strftime(obj.criado_em, "%d/%m/%Y")
[docs]
def get_programa_leve_leite(self, obj):
try:
return obj.programa == "LEVE_LEITE"
except AttributeError:
return None
[docs]
class Meta:
model = FichaTecnicaDoProduto
fields = (
"uuid",
"numero_ficha",
"nome_produto",
"nome_empresa",
"status",
"log_mais_recente",
"programa_leve_leite",
"categoria",
"tipo_entrega",
)
[docs]
class RelatorioFichaTecnicaSerializer(serializers.ModelSerializer):
produto = NomeDeProdutoEditalSerializer()
empresa = TerceirizadaLookUpSerializer()
status = serializers.CharField(source="get_status_display", read_only=True)
categoria = serializers.CharField(source="get_categoria_display", read_only=True)
programa = serializers.CharField(source="get_programa_display", read_only=True)
[docs]
class Meta:
model = FichaTecnicaDoProduto
fields = (
"uuid",
"numero",
"produto",
"empresa",
"categoria",
"programa",
"pregao_chamada_publica",
"status",
)