fix/de los tickets T2026-05-027, T2025-09-004 y T2025-09-056

This commit is contained in:
2026-06-15 11:18:58 -06:00
parent 7644446267
commit 23ed52c78a
29 changed files with 2992 additions and 987 deletions

View File

@@ -1,12 +1,13 @@
from rest_framework import serializers
from api.customs.models import (
Pedimento,
TipoOperacion,
ProcesamientoPedimento,
Pedimento,
TipoOperacion,
ProcesamientoPedimento,
EDocument,
Cove,
Importador,
Partida
Partida,
EstadoDescarga
)
from django.db import models
from django.db.models import Q
@@ -205,7 +206,23 @@ class EDocumentSerializer(serializers.ModelSerializer):
model = EDocument
fields = '__all__'
read_only_fields = ('created_at', 'updated_at')
def validate(self, attrs):
# Compatibilidad: payloads legados que solo mandan los booleanos se traducen
# al estado de 3 valores (fuente de verdad en el modelo). Un False legado no
# degrada un estado 'error' ya asignado.
if 'edocument_descargado' in attrs and 'edocument_estado' not in attrs:
if attrs['edocument_descargado']:
attrs['edocument_estado'] = EstadoDescarga.DESCARGADO
elif not (self.instance and self.instance.edocument_estado == EstadoDescarga.ERROR):
attrs['edocument_estado'] = EstadoDescarga.PENDIENTE
if 'acuse_descargado' in attrs and 'acuse_estado' not in attrs:
if attrs['acuse_descargado']:
attrs['acuse_estado'] = EstadoDescarga.DESCARGADO
elif not (self.instance and self.instance.acuse_estado == EstadoDescarga.ERROR):
attrs['acuse_estado'] = EstadoDescarga.PENDIENTE
return attrs
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# Si no es superusuario, hacer organizacion read_only
@@ -221,6 +238,22 @@ class CoveSerializer(serializers.ModelSerializer):
fields = '__all__'
read_only_fields = ('created_at', 'updated_at')
def validate(self, attrs):
# Compatibilidad: payloads legados que solo mandan los booleanos se traducen
# al estado de 3 valores (fuente de verdad en el modelo). Un False legado no
# degrada un estado 'error' ya asignado.
if 'cove_descargado' in attrs and 'cove_estado' not in attrs:
if attrs['cove_descargado']:
attrs['cove_estado'] = EstadoDescarga.DESCARGADO
elif not (self.instance and self.instance.cove_estado == EstadoDescarga.ERROR):
attrs['cove_estado'] = EstadoDescarga.PENDIENTE
if 'acuse_cove_descargado' in attrs and 'acuse_cove_estado' not in attrs:
if attrs['acuse_cove_descargado']:
attrs['acuse_cove_estado'] = EstadoDescarga.DESCARGADO
elif not (self.instance and self.instance.acuse_cove_estado == EstadoDescarga.ERROR):
attrs['acuse_cove_estado'] = EstadoDescarga.PENDIENTE
return attrs
def get_documentos(self, obj):
"""
Busca documentos en la tabla `document` que coincidan con el