-- =============================================================================
-- XPERT SAP B1 - Migracion 047
-- Ola de picking por zona de entrega del cliente + corte horario de despacho.
--
-- La zona de entrega es un dato FIJO del cliente (no se decide pedido a
-- pedido), asi se conoce desde el momento en que se importa el pedido de
-- SAP -- mucho antes de picking. Distinto de dispatch_trips (018), que
-- recien se arma cuando el documento ya esta pickeado y empacado y no
-- sirve para ordenar el picking.
--
-- target_dispatch_date es un campo separado de requested_ship_date a
-- proposito: nunca se pisa el dato que pidio el cliente/SAP (queda
-- intacto para referencia), la ola usa siempre el campo operativo, que
-- nunca es NULL para pedidos nuevos (ver SapDocumentController::
-- importSalesOrder).
-- =============================================================================

CREATE TABLE IF NOT EXISTS `delivery_zones` (
    `id`            INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `company_id`    INT UNSIGNED NOT NULL,
    `code`          VARCHAR(20)  NOT NULL,
    `name`          VARCHAR(100) NOT NULL,
    `pick_sequence` INT UNSIGNED NOT NULL DEFAULT 100 COMMENT 'Orden de picking entre zonas -- menor = se pickea primero',
    `is_active`     TINYINT(1)   NOT NULL DEFAULT 1,
    `created_at`    DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `updated_at`    DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE KEY `uq_deliveryzone_code` (`company_id`, `code`),
    CONSTRAINT `fk_deliveryzone_company` FOREIGN KEY (`company_id`) REFERENCES `companies`(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='Zona de entrega/ruta del cliente -- nunca se borra, se desactiva';

ALTER TABLE `customers`
    ADD COLUMN `delivery_zone_id` INT UNSIGNED NULL,
    ADD CONSTRAINT `fk_customer_deliveryzone` FOREIGN KEY (`delivery_zone_id`) REFERENCES `delivery_zones`(`id`);

ALTER TABLE `outbound_documents`
    ADD COLUMN `target_dispatch_date` DATE NULL COMMENT 'Fecha operativa objetivo -- copia de requested_ship_date si vino de SAP, o calculada por el corte horario si no vino nada';

ALTER TABLE `company_settings`
    ADD COLUMN `dispatch_cutoff_time` TIME NOT NULL DEFAULT '10:00:00';
