-- =============================================================================
-- XPERT SAP B1 - Migracion 030
-- Ingresos (OC/ST) y egresos (OV) 100% desde SAP B1: columnas de vinculo en
-- inbound_documents/outbound_documents (mismas tablas de siempre, sin agenda
-- ni tabla intermedia), gate opcional de UDF para Ordenes de Compra, y los
-- nuevos sync_type de sap_sync_log para la importacion y el push-back.
--
-- De paso, completa `presentation_id`/`presentation_qty` en
-- inbound_document_lines/outbound_document_lines: ya las usa el codigo
-- (InboundDocumentLineRepository/OutboundDocumentLineRepository hacen JOIN
-- contra item_presentations por esa columna) pero ninguna migracion las
-- creaba -- mismo tipo de gap que packing_orders/zone_companies en 016,
-- portado desde el esquema real de XPERT3PL en produccion.
-- =============================================================================

ALTER TABLE `inbound_document_lines`
    ADD COLUMN `presentation_id`  INT UNSIGNED NULL COMMENT 'Presentacion en la que se anuncio la linea. expected_qty ya esta convertido a unidad base' AFTER `item_id`,
    ADD COLUMN `presentation_qty` DECIMAL(15,4) NULL COMMENT 'Cantidad anunciada en la presentacion original (antes de convertir a unidad base)' AFTER `presentation_id`,
    ADD CONSTRAINT `fk_inboundline_presentation` FOREIGN KEY (`presentation_id`) REFERENCES `item_presentations`(`id`);

ALTER TABLE `outbound_document_lines`
    ADD COLUMN `presentation_id`  INT UNSIGNED NULL COMMENT 'Presentacion en la que el cliente hizo el pedido. requested_qty ya esta convertido a unidad base' AFTER `item_id`,
    ADD COLUMN `presentation_qty` DECIMAL(15,4) NULL COMMENT 'Cantidad pedida en la presentacion original (antes de convertir a unidad base)' AFTER `presentation_id`,
    ADD CONSTRAINT `fk_outboundline_presentation` FOREIGN KEY (`presentation_id`) REFERENCES `item_presentations`(`id`);

-- ============================================================================
-- 1. INGRESOS: vinculo con Ordenes de Compra / Solicitudes de Traslado
-- ============================================================================
ALTER TABLE `inbound_documents`
    ADD COLUMN `sap_doc_type`            ENUM('PurchaseOrder','InventoryTransferRequest') NULL AFTER `source_reference`,
    ADD COLUMN `sap_doc_entry`           INT NULL COMMENT 'DocEntry de la OC/ST en SAP' AFTER `sap_doc_type`,
    ADD COLUMN `sap_doc_num`             INT NULL COMMENT 'DocNum (numero visible en SAP)' AFTER `sap_doc_entry`,
    ADD COLUMN `sap_from_warehouse_code` VARCHAR(20) NULL COMMENT 'Solo ST: almacen SAP de origen del traslado' AFTER `sap_doc_num`,
    ADD COLUMN `sap_receipt_doc_entry`   INT NULL COMMENT 'DocEntry del GRPO o StockTransfer posteado a SAP al cerrar' AFTER `sap_from_warehouse_code`,
    ADD COLUMN `sap_receipt_doc_num`     INT NULL AFTER `sap_receipt_doc_entry`,
    ADD UNIQUE KEY `uq_inbound_sap_doc` (`company_id`, `sap_doc_type`, `sap_doc_entry`);

ALTER TABLE `inbound_document_lines`
    ADD COLUMN `sap_line_num` INT NULL COMMENT 'LineNum de SAP (BaseLine para el push-back de GRPO/StockTransfer)' AFTER `line_num`;

-- ============================================================================
-- 2. EGRESOS: vinculo con Pedidos de Venta
-- ============================================================================
ALTER TABLE `outbound_documents`
    ADD COLUMN `sap_doc_entry`      INT NULL COMMENT 'DocEntry de la OV en SAP' AFTER `source_reference`,
    ADD COLUMN `sap_doc_num`        INT NULL AFTER `sap_doc_entry`,
    ADD COLUMN `sap_delivery_entry` INT NULL COMMENT 'DocEntry de la DeliveryNote posteada a SAP al despachar' AFTER `sap_doc_num`,
    ADD COLUMN `sap_delivery_num`   INT NULL AFTER `sap_delivery_entry`,
    ADD UNIQUE KEY `uq_outbound_sap_doc` (`company_id`, `sap_doc_entry`);

ALTER TABLE `outbound_document_lines`
    ADD COLUMN `sap_line_num` INT NULL COMMENT 'LineNum de SAP (BaseLine para el push-back de la DeliveryNote)' AFTER `line_num`;

-- ============================================================================
-- 3. Gate opcional de UDF para Ordenes de Compra (patron U_XPERT_WMS de
--    referencia, pero configurable y vacio por defecto -- no se puede asumir
--    que la SAP company de destino tenga un UDF propio)
-- ============================================================================
ALTER TABLE `sap_config`
    ADD COLUMN `po_filter_udf`       VARCHAR(50) NULL COMMENT 'Nombre de un UDF opcional para filtrar que OC son para este WMS (ej. U_XPERT_WMS). Vacio = trae todas las OC abiertas' AFTER `company_db`,
    ADD COLUMN `po_filter_udf_value` VARCHAR(20) NULL COMMENT 'Valor esperado del UDF (ej. Y)' AFTER `po_filter_udf`;

-- ============================================================================
-- 4. sap_sync_log: nuevos sync_type para documentos (la importacion usa
--    direction=SAP_TO_WMS, el push-back al cerrar/despachar usa WMS_TO_SAP,
--    valor que ya estaba previsto en el enum sin uso)
-- ============================================================================
ALTER TABLE `sap_sync_log`
    MODIFY COLUMN `sync_type` ENUM('MASTER_ITEMS','MASTER_WAREHOUSES','MASTER_BP','DOC_INBOUND','DOC_OUTBOUND') NOT NULL;
