feature/pedimentos-correccion-partidas

This commit is contained in:
2026-05-28 07:10:39 -06:00
parent 94846fec8a
commit 709a5dedab
29 changed files with 1908 additions and 87 deletions

View File

@@ -1321,11 +1321,13 @@ class DocumentViewSet(viewsets.ModelViewSet, DocumentosFiltradosMixin):
nombre="Documento General",
defaults={'descripcion': "Documento general sin tipo específico"}
)
uploaded_documents = []
failed_files = []
errors = []
total_space_used = 0
created_count = 0
replaced_count = 0
try:
with transaction.atomic():
@@ -1410,6 +1412,8 @@ class DocumentViewSet(viewsets.ModelViewSet, DocumentosFiltradosMixin):
else:
raise Exception(f"Error al guardar archivo: {file.name}")
document = existing_doc
replaced_count += 1
was_replaced = True
else:
# Crear nuevo documento
document = Document.objects.create(
@@ -1431,6 +1435,8 @@ class DocumentViewSet(viewsets.ModelViewSet, DocumentosFiltradosMixin):
else:
document.delete()
raise Exception(f"Error al guardar archivo: {file.name}")
created_count += 1
was_replaced = False
# Actualizar espacio usado
espacio_usado_temp += file.size
@@ -1441,7 +1447,8 @@ class DocumentViewSet(viewsets.ModelViewSet, DocumentosFiltradosMixin):
"filename": file.name,
"size": file.size,
"extension": extension,
"document_type": document.document_type.nombre if document.document_type else None
"document_type": document.document_type.nombre if document.document_type else None,
"replaced": was_replaced,
})
except Exception as e:
@@ -1463,27 +1470,36 @@ class DocumentViewSet(viewsets.ModelViewSet, DocumentosFiltradosMixin):
space_used_mb = round(total_space_used / (1024 * 1024), 2)
# Preparar respuesta
partes = []
if created_count:
partes.append(f"{created_count} documento(s) creado(s) exitosamente")
if replaced_count:
partes.append(f"{replaced_count} documento(s) reemplazado(s) exitosamente")
mensaje_exito = " y ".join(partes) if partes else "Sin cambios"
response_data = {
"uploaded_count": len(uploaded_documents),
"created_count": created_count,
"replaced_count": replaced_count,
"uploaded_documents": uploaded_documents,
"space_used_mb": space_used_mb,
"pedimento_id": str(pedimento_id),
"document_type": document_type.nombre
"document_type": document_type.nombre,
}
if failed_files:
response_data.update({
"message": "Algunos documentos no pudieron ser subidos",
"message": f"Algunos documentos no pudieron ser subidos. {mensaje_exito}",
"failed_files": failed_files,
"errors": errors
"errors": errors,
})
response_status = status.HTTP_207_MULTI_STATUS
else:
response_data["message"] = "Documentos subidos exitosamente"
response_data["message"] = mensaje_exito
response_status = status.HTTP_201_CREATED
return Response(response_data, status=response_status)
@action(detail=False, methods=['post'], url_path='bulk-upload-vu', parser_classes=[MultiPartParser])
def bulk_upload_vu(self, request):
"""