feat(invoice): enhance invoice update validation and payload construction
This commit is contained in:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user