- 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.
86 lines
2.6 KiB
SQL
86 lines
2.6 KiB
SQL
-- Normaliza snapshots documentales en `proformas` e `issued_invoices`.
|
|
-- Fases:
|
|
-- 1. DDL conservadora.
|
|
-- 2. Backfill de snapshots.
|
|
-- 3. Diagnostico/validacion.
|
|
-- 4. Endurecimiento opcional cuando no queden nulos.
|
|
|
|
ALTER TABLE proformas
|
|
ADD COLUMN IF NOT EXISTS proforma_series_code VARCHAR(10) NULL AFTER document_series_id;
|
|
|
|
ALTER TABLE issued_invoices
|
|
ADD COLUMN IF NOT EXISTS document_series_id CHAR(36) NULL AFTER source_proforma_id,
|
|
ADD COLUMN IF NOT EXISTS invoice_reference VARCHAR(64) NULL AFTER invoice_number;
|
|
|
|
UPDATE proformas p
|
|
JOIN document_series ds ON ds.id = p.document_series_id
|
|
SET p.proforma_series_code = ds.code
|
|
WHERE p.proforma_series_code IS NULL;
|
|
|
|
SELECT id, document_series_id, proforma_series_code, proforma_number, proforma_reference
|
|
FROM proformas
|
|
WHERE proforma_series_code IS NULL;
|
|
|
|
SELECT
|
|
ds.company_id,
|
|
ds.document_type,
|
|
ds.code,
|
|
COUNT(*) AS series_count
|
|
FROM document_series ds
|
|
WHERE ds.document_type = 'issued_invoice'
|
|
GROUP BY ds.company_id, ds.document_type, ds.code
|
|
HAVING COUNT(*) > 1;
|
|
|
|
UPDATE issued_invoices ii
|
|
JOIN document_series ds
|
|
ON ds.company_id = ii.company_id
|
|
AND ds.document_type = 'issued_invoice'
|
|
AND ds.code = ii.invoice_series_code
|
|
SET ii.document_series_id = ds.id
|
|
WHERE ii.document_series_id IS NULL;
|
|
|
|
SELECT id, invoice_series_code, invoice_number
|
|
FROM issued_invoices
|
|
ORDER BY created_at DESC
|
|
LIMIT 20;
|
|
|
|
UPDATE issued_invoices ii
|
|
JOIN document_series ds ON ds.id = ii.document_series_id
|
|
SET ii.invoice_reference = CONCAT(
|
|
COALESCE(ds.prefix, ''),
|
|
LPAD(CAST(ii.invoice_number AS UNSIGNED), ds.padding, '0'),
|
|
COALESCE(ds.suffix, '')
|
|
)
|
|
WHERE ii.invoice_reference IS NULL;
|
|
|
|
SELECT id, source_proforma_id, document_series_id, invoice_series_code, invoice_number, invoice_reference
|
|
FROM issued_invoices
|
|
WHERE document_series_id IS NULL
|
|
OR invoice_reference IS NULL;
|
|
|
|
SELECT company_id, proforma_series_code, proforma_number, COUNT(*) AS c
|
|
FROM proformas
|
|
WHERE deleted_at IS NULL
|
|
GROUP BY company_id, proforma_series_code, proforma_number
|
|
HAVING c > 1;
|
|
|
|
SELECT company_id, invoice_series_code, invoice_number, COUNT(*) AS c
|
|
FROM issued_invoices
|
|
WHERE deleted_at IS NULL
|
|
GROUP BY company_id, invoice_series_code, invoice_number
|
|
HAVING c > 1;
|
|
|
|
CREATE INDEX idx_proformas_document_series_id
|
|
ON proformas (document_series_id);
|
|
|
|
CREATE INDEX idx_issued_invoices_document_series_id
|
|
ON issued_invoices (document_series_id);
|
|
|
|
-- Ejecutar solo cuando las validaciones anteriores devuelvan 0 filas pendientes.
|
|
-- ALTER TABLE proformas
|
|
-- MODIFY proforma_series_code VARCHAR(10) NOT NULL;
|
|
--
|
|
-- ALTER TABLE issued_invoices
|
|
-- MODIFY document_series_id CHAR(36) NOT NULL,
|
|
-- MODIFY invoice_reference VARCHAR(64) NOT NULL;
|