feat(invoice): enhance invoice update validation and payload construction

This commit is contained in:
Galindo97
2026-01-19 13:38:06 -06:00
parent 9567a584a5
commit ba353493d3
4 changed files with 269 additions and 8 deletions

View File

@@ -201,11 +201,40 @@ class InvoiceService:
invoice_data: schemas.InvoiceHeaderUpdate,
company_id: int,
) -> Optional[models.InvoiceHeader]:
# ... (El resto de tu código update se queda igual) ...
# (Te recomiendo implementar clean_dict aquí también si tienes problemas al editar)
"""Update an existing invoice with validation"""
# Validaciones con ErrorCollector
errors = ErrorCollector()
# Obtener la factura existente
invoice = InvoiceService.get_by_id(db, invoice_id, tenant_id, company_id)
if not invoice:
return None
# Si se cambió el número de factura, validar que no exista otra con ese número
if invoice_data.invoice_number and invoice_data.invoice_number != invoice.invoice_number:
# Verificar que no exista otra factura con el nuevo número
existing_invoice = (
db.query(models.InvoiceHeader.id)
.filter(
models.InvoiceHeader.invoice_number == invoice_data.invoice_number,
models.InvoiceHeader.tenant_id == tenant_id,
models.InvoiceHeader.company_id == company_id,
models.InvoiceHeader.id != invoice_id, # Excluir la factura actual
)
.first()
)
if existing_invoice:
errors.add_duplicate_error(
"invoice_number",
invoice_data.invoice_number,
f"Ya existe otra factura con el número '{invoice_data.invoice_number}'",
)
validate_update(invoice_data, invoice, errors)
# Si hay errores, lanzar excepción ANTES de actualizar
errors.raise_if_errors("Error al actualizar la factura")
# Update main invoice header fields
update_dict = invoice_data.model_dump(