-- Modificaciones de tabla que hay que hacer para añadir las zonas de envío

-- Añadimos la zona al rango de envío
ALTER TABLE `rango_envio` ADD `zona` INT NOT NULL COMMENT 'Zona de envío asociada al rango' AFTER `tipo_envio_cliente`;
ALTER TABLE `rango_envio` ADD INDEX( `zona`);
-- Creamos la tabla de zonas
CREATE TABLE `zona` ( `codigo` INT NOT NULL , `nombre` VARCHAR(35) NOT NULL , `pais` INT NOT NULL , `provincia` VARCHAR(2) NOT NULL , `codigo_postal_inicial` VARCHAR(12) NOT NULL , `codigo_postal_final` VARCHAR(12) NOT NULL , PRIMARY KEY (`codigo`)) ENGINE = MyISAM COMMENT = 'Zonas de envío a las que se puede enviar un paquete.';
ALTER TABLE `zona` CHANGE `codigo_postal_inicial` `codigo_postal_inicial` INT NOT NULL, CHANGE `codigo_postal_final` `codigo_postal_final` INT NOT NULL;
ALTER TABLE `zona` ADD INDEX( `pais`);
ALTER TABLE `zona` ADD INDEX( `pais`, `provincia`);
ALTER TABLE `zona` ADD INDEX( `pais`, `codigo_postal_inicial`, `codigo_postal_final`);
ALTER TABLE `zona` ADD INDEX( `pais`, `provincia`, `codigo_postal_inicial`, `codigo_postal_final`);
ALTER TABLE `zona` ADD `orden` SMALLINT NOT NULL COMMENT 'El orden es un número entre 0 y 4 que indica la prioridad de la zona en el cálculo' AFTER `codigo_postal_final`;
-- Asociamos zona y tipo de envio
CREATE TABLE `tipo_envio_por_zona` ( `zona` INT NOT NULL , `tipo_envio` INT NOT NULL ) ENGINE = MyISAM COMMENT = 'Asociación entre zonas y tipos de envío';
ALTER TABLE `tipo_envio_por_zona` ADD INDEX( `zona`);
ALTER TABLE `tipo_envio_por_zona` ADD INDEX( `tipo_envio`);
-- Necesitamos un trigger que nos cree un orden en la tabla:
DELIMITER $$ CREATE TRIGGER `crear_orden` BEFORE INSERT ON `zona` FOR EACH ROW
BEGIN
	IF NEW.`codigo_postal_inicial`> 0 AND 
		NEW.`codigo_postal_inicial`> 0 AND 
		NEW.`pais` > 0 THEN
		SET NEW.`orden` = 0;
	END IF;
	IF NEW.`codigo_postal_inicial`= 0 AND 
		NEW.`codigo_postal_inicial`= 0 AND 
		NEW.`provincia`!= '' AND 
		NEW.`pais` > 0 THEN
		SET NEW.`orden` = 1;
	END IF;
	IF NEW.`codigo_postal_inicial`= 0 AND 
		NEW.`codigo_postal_inicial`= 0 AND 
		NEW.`provincia`= '' AND 
		NEW.`pais` > 0 THEN
		SET NEW.`orden` = 2;
	END IF;
	IF NEW.`codigo_postal_inicial`= 0 AND 
		NEW.`codigo_postal_inicial`= 0 AND 
		NEW.`provincia`= '' AND 
		NEW.`pais` = 0 THEN
		SET NEW.`orden` = 3;
	END IF;
END$$ DELIMITER ;
DELIMITER $$ CREATE TRIGGER `modificar_orden` BEFORE UPDATE ON `zona` FOR EACH ROW
BEGIN
	IF NEW.`codigo_postal_inicial`> 0 AND 
		NEW.`codigo_postal_inicial`> 0 AND 
		NEW.`pais` > 0 THEN
		SET NEW.`orden` = 0;
	END IF;
	IF NEW.`codigo_postal_inicial`= 0 AND 
		NEW.`codigo_postal_inicial`= 0 AND 
		NEW.`provincia`!= '' AND 
		NEW.`pais` > 0 THEN
		SET NEW.`orden` = 1;
	END IF;
	IF NEW.`codigo_postal_inicial`= 0 AND 
		NEW.`codigo_postal_inicial`= 0 AND 
		NEW.`provincia`= '' AND 
		NEW.`pais` > 0 THEN
		SET NEW.`orden` = 2;
	END IF;
	IF NEW.`codigo_postal_inicial`= 0 AND 
		NEW.`codigo_postal_inicial`= 0 AND 
		NEW.`provincia`= '' AND 
		NEW.`pais` = 0 THEN
		SET NEW.`orden` = 3;
	END IF;
END$$ DELIMITER ;

-- Quitamos de los pedidos de clientes la opción de que la fecha se actualice al modificar el pedido para que quede registrada la fecha en la que se hace
ALTER TABLE `mc_pedcli` CHANGE `fecha` `fecha` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;

-- Añadimos las nuevas opciones de cara al cálculo de los descuentos
ALTER TABLE `configuracion`
	ADD `hebrolib_modulo_distribucion` BOOLEAN NOT NULL DEFAULT FALSE COMMENT 'Indica que es un programa herbolib con módulo de distribución activado' AFTER `pais`,
	ADD `forzar_descuentos` BOOLEAN NOT NULL DEFAULT FALSE COMMENT 'Aplica un descuento aunque el PVP sea diferente' AFTER `hebrolib_modulo_distribucion`;
-- Para que las cargas de los precios vayan más rápido, añadimos una serie de índices
ALTER TABLE `artiofertas` ADD INDEX( `articulo`);
ALTER TABLE `artiofertas` CHANGE `codigo` `codigo` INT UNSIGNED NOT NULL, CHANGE `articulo` `articulo` INT UNSIGNED NOT NULL;
ALTER TABLE `artiofertas` ADD INDEX( `desde_fecha`);
ALTER TABLE `artiofertas` ADD INDEX( `hasta_fecha`);
ALTER TABLE `preciosescal` ADD INDEX( `desde`);
ALTER TABLE `preciosescal` ADD INDEX( `hasta`);
ALTER TABLE `preciosescal` ADD INDEX( `desde_fecha`);
ALTER TABLE `preciosescal` ADD INDEX( `hasta_fecha`);
ALTER TABLE `tariarti` ADD INDEX( `tarifa`, `articulo`);
ALTER TABLE `promociones` ADD `tarifas_multiples` INT UNSIGNED NOT NULL AFTER `hasta_fecha`;
ALTER TABLE `configuracion` ADD `tarifas_multiples` BOOLEAN NOT NULL AFTER `cliente_arminet`;
-- Añadimos más campos para que el cálculo del PVP salga como tiene que salir
ALTER TABLE `cliente` ADD `vender_precio_medio_costo` BOOLEAN NOT NULL DEFAULT FALSE AFTER `vender-costo`;
ALTER TABLE `cliente` ADD `vender_precio_costo_con_descuento` BOOLEAN NOT NULL DEFAULT FALSE AFTER `vender_precio_medio_costo`;
ALTER TABLE `configuracion` ADD `igic_trabaja` BOOLEAN NOT NULL DEFAULT FALSE COMMENT 'Trabaja con IGIC' AFTER `tarifas_multiples`;
ALTER TABLE `articulo` ADD `igic` DECIMAL(4,2) NOT NULL AFTER `iva`;
ALTER TABLE `articulo` CHANGE `iva` `iva` DECIMAL(4,2) NOT NULL;
ALTER TABLE `articulo` ADD `precio_costo` DECIMAL(7,2) NOT NULL DEFAULT '0' AFTER `igic`, 
	ADD `precio_costo_dto` DECIMAL(7,2) NOT NULL DEFAULT '0' AFTER `precio_costo`, 
	ADD `precio_medio_costo` DECIMAL(7,2) NOT NULL DEFAULT '0' AFTER `precio_costo_dto`;
ALTER TABLE `tarifas` ADD `tarifa_padre` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `descuento`, ADD INDEX `tarifa padre` (`tarifa_padre`);
ALTER TABLE `articulo` ADD `descuento` DECIMAL(6,2) NOT NULL DEFAULT '0' AFTER `precio_medio_costo`;
ALTER TABLE `configuracion` CHANGE `hebrolib_modulo_distribucion` `herbolib_modulo_distribucion` TINYINT(1) NOT NULL DEFAULT '0' COMMENT 'Indica que es un programa herbolib con módulo de distribución activado';
-- Los tipos de envío por localidad tienen un código en la web pero no en el programa, cambiamos la clave primaria
ALTER TABLE `tarifasporlo` CHANGE `codigo` `codigo` INT(11) NOT NULL;
ALTER TABLE `tarifasporlo` DROP PRIMARY KEY;
ALTER TABLE `tarifasporlo` ADD PRIMARY KEY( `tipo_envio`, `localidad`, `provincia`);
-- Añadimos el código del cliente de contado web en configuración. Actualmente tenemos el código sinlib
ALTER TABLE `configuracion` ADD `cliente_contado_web` VARCHAR(10) NOT NULL COMMENT 'Código del cliente de contado para la web' AFTER `cliente_contado`, ADD INDEX `cliente_contado_web` (`cliente_contado_web`);