FactuGES_ERP/docs/customer-invoices/sql/add-issued-invoice-reference.sql
david ee040b8335 Característica: Mejora de los modelos de facturas proforma y emitidas con atributos de serie de documentos
- Se han añadido `document_series_id`, `invoice_series_code` e `invoice_reference` a los modelos y instantáneas de facturas emitidas.
- Se han introducido `proforma_series_code` y `proforma_number`, y se han actualizado las referencias en los modelos y instantáneas de las facturas proforma.
- Se han actualizado los esquemas de la base de datos y los scripts SQL para dar cabida a los nuevos campos y garantizar la integridad de los datos.
- Se ha elaborado la documentación correspondiente a las nuevas series de documentos «contrato de instantánea» y «contrato de serie de facturas emitidas».
- Se han implementado scripts SQL de rellenado para completar los registros existentes con los nuevos campos.
2026-08-04 11:05:02 +02:00

54 lines
1.5 KiB
SQL

-- Estado: vigente / manual.
-- Objetivo:
-- 1. Anadir `issued_invoices.invoice_reference` si no existe.
-- 2. Backfill conservador para facturas emitidas existentes.
-- 3. Validar que no quedan filas sin snapshot documental.
-- 4. Endurecer a NOT NULL cuando la validacion sea correcta.
--
-- No ejecutar automaticamente desde backend.
-- Revisar antes el nombre real de la tabla `document_series` y sus columnas
-- `prefix`, `padding`, `suffix` en el entorno objetivo.
START TRANSACTION;
ALTER TABLE issued_invoices
ADD COLUMN IF NOT EXISTS invoice_reference VARCHAR(64) NULL AFTER invoice_number;
UPDATE issued_invoices ii
JOIN document_series ds
ON ds.company_id = ii.company_id
AND ds.code = ii.invoice_series_code
AND ds.document_type = 'issued_invoice'
SET ii.invoice_reference = CONCAT(
COALESCE(ds.prefix, ''),
LPAD(CAST(ii.invoice_number AS CHAR), ds.padding, '0'),
COALESCE(ds.suffix, '')
)
WHERE ii.invoice_reference IS NULL;
SELECT id, source_proforma_id, invoice_series_code, invoice_number, invoice_reference
FROM issued_invoices
WHERE invoice_reference IS NULL;
SELECT
ii.id,
ii.invoice_series_code,
ii.invoice_number,
ii.invoice_reference,
ds.prefix,
ds.padding,
ds.suffix
FROM issued_invoices ii
JOIN document_series ds
ON ds.company_id = ii.company_id
AND ds.code = ii.invoice_series_code
AND ds.document_type = 'issued_invoice'
ORDER BY ii.created_at DESC
LIMIT 20;
-- Ejecutar solo cuando la consulta anterior no devuelva filas.
ALTER TABLE issued_invoices
MODIFY COLUMN invoice_reference VARCHAR(64) NOT NULL;
COMMIT;