Uecko_ERP/docs/document-series/sql/migrate-customer-invoice-series-to-document-series.sql

116 lines
2.3 KiB
SQL

-- Estado: HISTORICO / TRANSICIONAL.
-- No ejecutar en entornos nuevos salvo necesidad legacy explicita.
-- Sustituido por: document_series como runtime activo + validate-document-series-migration.sql como runbook vigente.
-- Migracion conservadora e idempotente de customer_invoice_series a document_series.
-- No ejecutar automaticamente en produccion.
-- Revisar primero nombres de columnas y existencia de tabla document_series en el entorno destino.
-- 1. Migrar series legacy de facturas emitidas si no existen ya en document_series.
INSERT INTO document_series (
id,
company_id,
branch_id,
document_type,
code,
name,
description,
prefix,
suffix,
next_number,
padding,
valid_from,
valid_to,
is_default,
is_active,
created_at,
updated_at,
deleted_at
)
SELECT
cis.id,
cis.company_id,
NULL,
'issued_invoice',
cis.code,
cis.code,
NULL,
CONCAT(cis.code, '-'),
NULL,
cis.next_number,
cis.padding_length,
NULL,
NULL,
cis.is_default,
cis.is_active,
cis.created_at,
cis.updated_at,
NULL
FROM customer_invoice_series cis
WHERE NOT EXISTS (
SELECT 1
FROM document_series ds
WHERE ds.company_id = cis.company_id
AND ds.document_type = 'issued_invoice'
AND ds.code = cis.code
);
-- 2. Crear una serie por defecto de proformas por empresa solo si no existe ninguna.
-- Fuente preferida: companies. Esto evita depender de que exista customer_invoice_series
-- para empresas nuevas o para empresas sin series legacy de facturas emitidas.
INSERT INTO document_series (
id,
company_id,
branch_id,
document_type,
code,
name,
description,
prefix,
suffix,
next_number,
padding,
valid_from,
valid_to,
is_default,
is_active,
created_at,
updated_at,
deleted_at
)
SELECT
UUID(),
source.id,
NULL,
'proforma',
'PF',
'Proformas',
NULL,
'PF-',
NULL,
1,
6,
NULL,
NULL,
TRUE,
TRUE,
NOW(),
NOW(),
NULL
FROM (
SELECT c.id
FROM companies c
WHERE c.status = 'active'
) AS source
WHERE NOT EXISTS (
SELECT 1
FROM document_series ds
WHERE ds.company_id = source.id
AND ds.document_type = 'proforma'
AND ds.code = 'PF'
);
-- 3. Validaciones manuales recomendadas.
-- SELECT company_id, document_type, code, next_number, padding, is_default, is_active
-- FROM document_series
-- ORDER BY company_id, document_type, code;