-- En configuración indicamos qué tipo de envío es recogida en tienda
ALTER TABLE `configuracion` ADD `envio_recogida_tienda` INT NOT NULL DEFAULT '0' COMMENT 'Código del tipo de envío de recogida en tienda' AFTER `blowfish`;

--
-- Estructura de tabla para la tabla `modules_list`
--

CREATE TABLE `modules_list` (
  `id` int(10) UNSIGNED NOT NULL,
  `nombre` varchar(75) NOT NULL,
  `estado` smallint(5) UNSIGNED NOT NULL DEFAULT '0'
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Indices de la tabla `modules_list`
--
ALTER TABLE `modules_list`
  ADD PRIMARY KEY (`id`),
  ADD KEY `nombre` (`nombre`);

--
-- AUTO_INCREMENT de la tabla `modules_list`
--
ALTER TABLE `modules_list`
  MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT;

-- tabla last_insert_id

CREATE TABLE `last_insert_id` (
  `ID` bigint(20) NOT NULL,
  `table_name` varchar(150) COLLATE latin1_spanish_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci;

--
-- Índices para tablas volcadas
--

--
-- Indices de la tabla `last_insert_id`
--
ALTER TABLE `last_insert_id`
  ADD PRIMARY KEY (`ID`),
  ADD UNIQUE KEY `table_name` (`table_name`);

-- Vamos a currarnos unas optimizaciones en la tabla "search_index" y en los productos

-- tabla artículo ==> De esta manera puedo anotar los productos que hay que pasar a la tabla search index
ALTER TABLE `articulo` ADD `pendiente_indexar` BOOLEAN NOT NULL DEFAULT FALSE
	COMMENT 'El artículo tiene que borrarse de search index y volver a crearse' AFTER `stock_minimo`, ADD INDEX `pendiente_indexar` (`pendiente_indexar`);

-- tabla search_index ==> Aquí guardamos los que hay pendientes de indexar
ALTER TABLE `search_index` ADD `pendiente_indexar` BOOLEAN NOT NULL DEFAULT FALSE 
	COMMENT 'El artículo tiene que borrarse de search index y volver a crearse' AFTER `idioma`, ADD INDEX `pendiente_indexar` (`pendiente_indexar`);

-- Cuando se modifique un producto lo ponemos "pendiente de indexar" y actualizamos la search_index para que se quede pendiente tb
DELIMITER $$ CREATE TRIGGER `antes_insertar_articulo` BEFORE INSERT ON `articulo` FOR EACH ROW BEGIN SET NEW.`pendiente_indexar` = 1; UPDATE `search_index` SET `pendiente_indexar` = 1 WHERE `search_index`.`articulo` = NEW.`codigo`; END$$ DELIMITER ;
DELIMITER $$ 
	CREATE TRIGGER `antes_modificar_articulo` BEFORE UPDATE ON `articulo` FOR EACH ROW 
	BEGIN 
		IF OLD.`pendiente_indexar` = 0 THEN
			SET NEW.`pendiente_indexar` = 1;
			UPDATE `search_index` SET `pendiente_indexar` = 1 WHERE `search_index`.`articulo` = NEW.`codigo`;
		END IF;
	END$$
DELIMITER ;

-- Cuando se da de alta un "search_index" tenemos que indicarle al artículo que ya no está pendiente
DELIMITER $$ 
CREATE TRIGGER `antes_insertar_search_index` BEFORE INSERT ON `search_index` FOR EACH ROW 
BEGIN 
	UPDATE `articulo` SET `pendiente_indexar` = 0 WHERE `codigo` = NEW.`articulo`;
END$$
DELIMITER ;


-- tabla search-index, empezamos por quitar el índice que nos sobra:
ALTER TABLE `search_index` DROP PRIMARY KEY;

-- borramos los campos que sobran:
ALTER TABLE `search_index` DROP `prioridad`;
ALTER TABLE `search_index` DROP `campo`;

-- Creamos el índice primario:
ALTER TABLE `search_index` ADD PRIMARY KEY( `articulo`, `valor`, `idioma`);

-- La fecha de inicio de los códigos promocionales se cambiaba cada vez q se modificaban
ALTER TABLE `codigos_promocionales` CHANGE `fecha_alta` `fecha_alta` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00';

-- 2.8.4.1:
-- 03/Junio/2019 ==> añadimos el código de pedido para poder incrementarlo de cara a la pasarela
ALTER TABLE `tmp_cabecera_pedidos` ADD `numero_pedido` INT NOT NULL AFTER `codigo_promocional`, ADD INDEX `numero_pedido` (`numero_pedido`);
ALTER TABLE `mc_pedcli` ADD `numero_pedido` INT NOT NULL AFTER `comunicados`;
ALTER TABLE `mc_pedcli` ADD INDEX( `numero_pedido`);

-- 2.8.4.2:
-- La tabla de líneas de lote no tiene clave primaria
ALTER TABLE `ml_lotes` DROP INDEX `codigo`, ADD PRIMARY KEY `codigo` (`mc_lote`, `codigo`) USING BTREE;
ALTER TABLE `mc_lotes` DROP INDEX `codigo`, ADD PRIMARY KEY( `codigo`);
ALTER TABLE `mc_lotes` ADD `mantener_cantidades` BOOLEAN NOT NULL AFTER `visible_web`;

-- Cambiamos los float a decimal:
ALTER TABLE `ml_lotes` CHANGE `pvp` `pvp` DECIMAL(7,2) NOT NULL, CHANGE `total` `total` DECIMAL(7,2) NOT NULL;
ALTER TABLE `articulo` CHANGE `pvp` `pvp` DECIMAL(7,2) NULL DEFAULT NULL;

-- 2.8.4.3:
INSERT INTO `modules_list` (`nombre`, `estado`) VALUES
('facebook_register', 4),
('google_register', 4),
('grecaptcha', 4),
('login', 4),
('recuperar_pass', 4),
('register', 4);

-- 2.8.4.4
-- Estos dos campos están alternados, vamos a dejarlos como en SINLIB
ALTER TABLE `mc_lotes` CHANGE `trabaja_cantidades` `trabaja_cantidades` TINYINT(1) NOT NULL COMMENT 'Se corresponde con el check de mantener cantidades y PVP';
ALTER TABLE `mc_lotes` CHANGE `mantener_cantidades` `mantener_cantidades` TINYINT(1) NOT NULL COMMENT 'Se corresponde con el check de mantener cantidades';
-- Cambiamos los campos a tipo "decimal 10,2"
ALTER TABLE `mc_lotes` CHANGE `total` `total` DECIMAL(10,2) NOT NULL, CHANGE `precio_lote` `precio_lote` DECIMAL(10,2) NOT NULL;
-- Añadimos NUEVOS campos a la tabla de lotes:
ALTER TABLE `mc_lotes` ADD `precio_web` DECIMAL(10,2) NOT NULL COMMENT 'Precio del lote sólo para la web' AFTER `mantener_cantidades`, ADD `no_enviar_domicilio` BOOLEAN NOT NULL COMMENT 'Si compras este lote no te lo podemos enviar a domicilio' AFTER `precio_web`;


ALTER TABLE `administrador` CHANGE `codigo` `codigo` INT(6) NOT NULL;
ALTER TABLE `administrador` DROP PRIMARY KEY, ADD PRIMARY KEY (`email`) USING BTREE;
-- Añadimos el índice de artículo a la tabla de líneas de lotes:
ALTER TABLE `ml_lotes` ADD INDEX( `articulo`);

-- 2.8.4.6
-- Aádimos un campo especial a las líneas de pedido que podremos utilizar si necesitamos diferenciar dos líneas iguales (dos líneas del mismo lote y artículo)
ALTER TABLE `ml_pedcli` ADD `special_id` VARCHAR(50) NOT NULL COMMENT 'Identificador especial que asignaremos a las líneas de pedido para diferenciar dos líneas con el mismo artículo y lote si es necesario' AFTER `articulo`;
ALTER TABLE `tmp_linea_pedidos` ADD `special_id` VARCHAR(50) NOT NULL COMMENT 'Identificador especial que asignaremos a las líneas de pedido para diferenciar dos líneas con el mismo artículo y lote si es necesario' AFTER `articulo`;
ALTER TABLE `tmp_linea_pedidos` CHANGE `special_id` `special_id` VARCHAR(50) CHARACTER SET latin1 COLLATE latin1_spanish_ci NOT NULL DEFAULT '' COMMENT 'Identificador especial que asignaremos a las líneas de pedido para diferenciar dos líneas con el mismo artículo y lote si es necesario';
-- Creamos el descuento para la papeleria
ALTER TABLE `configuracion` ADD `dto_papeleria` DECIMAL(4,2) NOT NULL DEFAULT '0' AFTER `mes_fin_texto`;

-- 2.8.4.7
-- Me encuentro que se instala una web dejando este campo asi. Por seguridad me aseguro de que no sea así
ALTER TABLE `cliente` CHANGE `codigo` `codigo` BIGINT(20) UNSIGNED NOT NULL;

-- 2.8.4.8
ALTER TABLE `cliente` ADD INDEX( `email`);
-- Desde ahora, las forma de pago llevan asociado un módulo
ALTER TABLE `formas_de_pago` ADD `modulo_pago` INT NOT NULL DEFAULT '0' AFTER `tipo_pasarela`;

-- 2.8.4.9
-- Vamos a mejorar la carga de artículos asociados utilizando el campo temática, para ello tenemos que mejorar dicho campo:
ALTER TABLE `articulo` CHANGE `tema` `tema` VARCHAR(15) CHARACTER SET latin1 COLLATE latin1_spanish_ci NULL DEFAULT NULL;
ALTER TABLE `articulo` ADD INDEX( `tema`);