-- ============================================================
-- quoERP — Despacho de ventas + movimiento de salida de inventario
-- Migración: 006_sales_dispatch.sql
-- Versión: 1.0.0 | Fecha: 2026-06-05
-- ============================================================
-- Requiere: 001, 003
-- ============================================================

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ─────────────────────────────────────────────────────────────
-- AJUSTE: sale_orders — campos de despacho
-- El despacho es cuando los productos salen físicamente de la
-- bodega hacia el cliente. Genera el movimiento 'out' en inventario.
-- ─────────────────────────────────────────────────────────────
ALTER TABLE sale_orders
    ADD COLUMN IF NOT EXISTS dispatch_warehouse_id INT UNSIGNED  DEFAULT NULL
        COMMENT 'Bodega desde la que se despachan los productos',
    ADD COLUMN IF NOT EXISTS dispatched_at         DATETIME      DEFAULT NULL
        COMMENT 'Fecha y hora del despacho',
    ADD COLUMN IF NOT EXISTS dispatched_by         INT UNSIGNED  DEFAULT NULL
        COMMENT 'Usuario que registró el despacho',
    ADD COLUMN IF NOT EXISTS dispatch_notes        TEXT          DEFAULT NULL
        COMMENT 'Observaciones del despacho (guía de remisión, transportista, etc.)';


-- ─────────────────────────────────────────────────────────────
-- AJUSTE: sale_order_lines — cantidad despachada
-- Permite despachos parciales por línea.
-- ─────────────────────────────────────────────────────────────
ALTER TABLE sale_order_lines
    ADD COLUMN IF NOT EXISTS qty_dispatched DECIMAL(12,4) NOT NULL DEFAULT 0
        COMMENT 'Cantidad ya despachada de esta línea';


-- ─────────────────────────────────────────────────────────────
-- AJUSTE: sale_quote_lines — vincular producto del catálogo
-- Necesario para que al convertir cotización → OV se copie
-- el product_id y la salida de inventario funcione en el despacho.
-- ─────────────────────────────────────────────────────────────
ALTER TABLE sale_quote_lines
    ADD COLUMN IF NOT EXISTS product_id INT UNSIGNED DEFAULT NULL
        COMMENT 'Producto del catálogo (NULL = línea libre)',
    ADD INDEX IF NOT EXISTS idx_product (product_id);


SET FOREIGN_KEY_CHECKS = 1;

-- ─────────────────────────────────────────────────────────────
-- FIN DE MIGRACIÓN
-- ALTER TABLE sale_orders: dispatch_warehouse_id, dispatched_at, dispatched_by, dispatch_notes
-- ALTER TABLE sale_order_lines: qty_dispatched
-- ─────────────────────────────────────────────────────────────
