/*ELIMINA BASE DE DATOS SINO EXISTE*/
drop database if exists rdp_desa;
/*CREA NUEVA BASE DE DATOS DESDE CERO*/
create database rdp_desa;

use rdp_desa;

/****************************************************** 
 ****************************************************** 			
                MODELO USUARIO
 ******************************************************                 
 ******************************************************/

CREATE TABLE tbl_perfil(
  perfilid int(11) NOT NULL AUTO_INCREMENT,
  tipo varchar(3) NOT NULL,
  perfil varchar(100) NOT NULL,
  habilitado varchar(1) NOT null,
  PRIMARY KEY (perfilid)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE INDEX tbl_perfil_tipo_idx USING BTREE ON tbl_perfil(tipo);

/*
 * Los tipos soportados son
 * 	-> SYS --> Perfil del sistema con todos los permisos, este perfil no esta disponible para configurar
 *  -> OPE --> Perfil Operacional disponible para el sistema y asociar a usuarios
 *  
 */
INSERT INTO tbl_perfil(perfil,tipo,habilitado)
				 VALUES('ADM-SYS','SYS','S');
				
				
CREATE TABLE tbl_aplicacion (
	aplicacionid int(11) NOT NULL AUTO_INCREMENT
	,aplicacion varchar(100) NOT null
	,descripcion varchar(600) NOT null
	,url varchar(100) NOT null
	,icono varchar(100) NOT null
	,habilitado varchar(100) NOT null,
  PRIMARY KEY (aplicacionid)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO tbl_aplicacion
(aplicacionid, aplicacion, descripcion, url, icono, habilitado)
VALUES(1, 'Perfiles', 'Permite crear y configurar los perfiles del sistema', '/app/mant-perfiles', 'sliders', 'S');
INSERT INTO tbl_aplicacion
(aplicacionid, aplicacion, descripcion, url, icono, habilitado)
VALUES(2, 'Usuarios', 'Permite crear y configurar los usuarios del sistema', '/app/mant-usuarios', 'users', 'S');
INSERT INTO tbl_aplicacion
(aplicacionid, aplicacion, descripcion, url, icono, habilitado)
VALUES(3, 'Aplicaciones', 'Permite crear y configurar las aplicaciones disponibles en el sistema', '/app/mant-aplicaciones', 'codesandbox', 'S');
INSERT INTO tbl_aplicacion
(aplicacionid, aplicacion, descripcion, url, icono, habilitado)
VALUES(4, 'Areas', 'Permite crear y configurar las areas', '/app/mant-areas', 'briefcase', 'S');
INSERT INTO tbl_aplicacion
(aplicacionid, aplicacion, descripcion, url, icono, habilitado)
VALUES(5, 'Sucursales', 'Permite crear y configurar sucursales', '/app/mant-sucursales', 'home', 'S');
INSERT INTO tbl_aplicacion
(aplicacionid, aplicacion, descripcion, url, icono, habilitado)
VALUES(6, 'Categorias', 'Permite crear y configurar categorias de productos', '/app/mant-categorias', 'align-justify', 'S');
INSERT INTO tbl_aplicacion
(aplicacionid, aplicacion, descripcion, url, icono, habilitado)
VALUES(7, 'Productos', 'Permite crear y configurar productos', '/app/mant-productos', 'codepen', 'S');
INSERT INTO rdp_desa.tbl_aplicacion
(aplicacionid, aplicacion, descripcion, url, icono, habilitado)
VALUES(8, 'Proveedor', 'Se agrega proveedor para pruebas', '/app/mant-proveedores', 'truck', 'S');
INSERT INTO rdp_desa.tbl_aplicacion
(aplicacionid, aplicacion, descripcion, url, icono, habilitado)
VALUES(9, 'Bodega', 'Se agrega bodega para pruebas', '/app/mant-bodegas', 'umbrella', 'S');
INSERT INTO rdp_desa.tbl_aplicacion
(aplicacionid, aplicacion, descripcion, url, icono, habilitado)
VALUES(10, 'Venta Meson', 'Venta', '/app/mant-venta-meson', 'shopping-cart', 'S');
INSERT INTO rdp_desa.tbl_aplicacion
(aplicacionid, aplicacion, descripcion, url, icono, habilitado)
VALUES(11, 'Cotizacion', 'Venta', '/app/mant-cotizacion', 'shopping-cart', 'S');

CREATE TABLE tbl_perfil_aplicacion (
  perfilid int(11) NOT NULL,
  aplicacionid int(11) NOT NULL,
  PRIMARY KEY (perfilid,aplicacionid),
  FOREIGN KEY (perfilid) REFERENCES tbl_perfil(perfilid),
  FOREIGN KEY (aplicacionid) REFERENCES tbl_aplicacion(aplicacionid)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO tbl_perfil_aplicacion
		(perfilid, aplicacionid)
		VALUES(1, 1);
		INSERT INTO tbl_perfil_aplicacion
		(perfilid, aplicacionid)
		VALUES(1, 2);
		INSERT INTO tbl_perfil_aplicacion
		(perfilid, aplicacionid)
		VALUES(1, 3);
		INSERT INTO tbl_perfil_aplicacion
		(perfilid, aplicacionid)
		VALUES(1, 4);
		INSERT INTO tbl_perfil_aplicacion
		(perfilid, aplicacionid)
		VALUES(1, 5);
		INSERT INTO tbl_perfil_aplicacion
		(perfilid, aplicacionid)
		VALUES(1, 6);
    INSERT INTO tbl_perfil_aplicacion
		(perfilid, aplicacionid)
		VALUES(1, 7);
    INSERT INTO tbl_perfil_aplicacion
		(perfilid, aplicacionid)
		VALUES(1, 8);
    INSERT INTO tbl_perfil_aplicacion
		(perfilid, aplicacionid)
		VALUES(1, 9);
     INSERT INTO tbl_perfil_aplicacion
		(perfilid, aplicacionid)
		VALUES(1, 10);
    INSERT INTO tbl_perfil_aplicacion
		(perfilid, aplicacionid)
		VALUES(1, 11);


CREATE TABLE tbl_area(
  areaid int(11) NOT NULL AUTO_INCREMENT,
  tipo varchar(3) NOT NULL,
  area varchar(100) NOT NULL,
  habilitado varchar(1) NOT null,
  PRIMARY KEY (areaid)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
	
/*
 * Los tipos soportados son
 * 	-> SYS --> Area del sistema con todos los permisos, no esta disponible para configurar
 *  -> OPE --> Area Operacional disponible para el sistema y asociar a usuarios
 *  
 */
INSERT INTO tbl_area(area,tipo,habilitado)
				VALUES('AREA-ADM','SYS','S');
			
CREATE TABLE tbl_sucursal(
  sucursalid int(11) NOT NULL AUTO_INCREMENT,
  tipo varchar(3) NOT NULL,
  sucursal varchar(100) NOT NULL,
  habilitado varchar(1) NOT null,
  PRIMARY KEY (sucursalid)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

	
/*
 * Los tipos soportados son
 * 	-> SYS --> sucursal del sistema con todos los permisos, no esta disponible para configurar
 *  -> OPE --> Sucursal Operacional disponible para el sistema y asociar a usuarios
 *  
 */
INSERT INTO tbl_sucursal(sucursal,tipo,habilitado)
				VALUES('SUCURSAL-ADM','SYS','S');			


CREATE TABLE `tbl_usuario` (
  `usuarioid` int(11) NOT NULL AUTO_INCREMENT,
  `nombres` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `apellidos` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `email` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `clave` varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL,
  `perfilid` int(11) NOT NULL,
  `abreviacion` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
  `habilitado` varchar(1) COLLATE utf8mb4_unicode_ci NOT NULL,
  `fecha_creacion` datetime NOT NULL,
  `usuario_crea` int(11) DEFAULT NULL,
  `fecha_ultima_modificacion` datetime NOT NULL,
  `usuario_modifica` int(11) DEFAULT NULL,
  PRIMARY KEY (`usuarioid`),
  KEY `perfilid` (`perfilid`),
  CONSTRAINT `tbl_usuario_ibfk_1` FOREIGN KEY (`perfilid`) REFERENCES `tbl_perfil` (`perfilid`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;



INSERT INTO tbl_usuario(nombres, apellidos, email, clave,  perfilid, abreviacion, habilitado,fecha_creacion,usuario_crea,fecha_ultima_modificacion,usuario_modifica)
select  'Usuario', 'Imaginasoft Limitada', 'usuario@imaginasoft.cl', 'acceso', a.perfilid, 'imagina', 'S',now(),1,now(),1
from tbl_perfil a 
where a.perfil='ADM-SYS' and a.tipo='SYS' ;

CREATE TABLE tbl_usuario_area(
  usuarioid int(11) NOT NULL,
  areaid int(11) NOT NULL,
  PRIMARY KEY (usuarioid,areaid),
  FOREIGN KEY (usuarioid) REFERENCES tbl_usuario(usuarioid),
  FOREIGN KEY (areaid) REFERENCES tbl_area(areaid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE tbl_usuario_sucursal(
  usuarioid int(11) NOT NULL,
  sucursalid int(11) NOT NULL,
  PRIMARY KEY (usuarioid,sucursalid),
  FOREIGN KEY (usuarioid) REFERENCES tbl_usuario(usuarioid),
  FOREIGN KEY (sucursalid) REFERENCES tbl_sucursal(sucursalid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
	

INSERT INTO tbl_usuario_area(usuarioid,areaid)VALUES(1,1);


/****************************************************** 
 ****************************************************** 			
                MODELO PRODUCTO
 ******************************************************                 
 ******************************************************/

CREATE table tbl_categoria(
categoriaid  int(11) NOT NULL auto_increment,
categoria varchar(100) NOT null,
icono varchar(100) NOT null,
habilitado varchar(1) NOT null,
 PRIMARY KEY (categoriaid)
 )ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO tbl_categoria(categoria, icono, habilitado) VALUES ('Electrónicos', 'trello', 'S');
			
CREATE table tbl_sub_categoria(
subcategoriaid int(11) NOT NULL auto_increment,
categoriaid int(11) NOT null,
subcategoria varchar(100) NOT null,
icono varchar(100) NOT null,
nivel int(11) NOT null,
subcategoriaid_padre int(11),
habilitado varchar(1) NOT null,
 PRIMARY KEY (subcategoriaid),
 FOREIGN KEY (categoriaid) REFERENCES tbl_categoria(categoriaid)
 )ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO tbl_sub_categoria (categoriaid, subcategoria, icono, nivel, subcategoriaid_padre, habilitado) VALUES (1, 'Subcategoría1', 'unlock', 1, NULL, 'S');

CREATE table tbl_producto(
productoid int(11) NOT NULL auto_increment,
producto varchar(300) NOT null,
descripcion mediumtext NOT null,
costo_unidad decimal(25,3),
iva decimal(25,3),
unidadid int(11) not null,
categoriaid int(11) NOT null,
subcategoriaid int(11) NOT null,
codigo_barra varchar(300),
precio_unitario decimal(25,3) not null,
precio_mayorista decimal(25,3),
cantidad_minima_mayorista decimal(25,3),
precio_oferta decimal(25,3),
porcentaje_descuento decimal(25,3),
porcentaje_descuento_maximo decimal(25,3),
imagen varchar(500),
habilitado varchar(1) NOT null,
 PRIMARY KEY (productoid),
 FOREIGN KEY (categoriaid) REFERENCES tbl_categoria(categoriaid),
 FOREIGN KEY (subcategoriaid) REFERENCES tbl_sub_categoria(subcategoriaid)
 )ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO rdp_desa.tbl_producto
(productoid, producto, descripcion, costo_unidad, iva, unidadid, categoriaid, subcategoriaid, codigo_barra, precio_unitario, precio_mayorista, cantidad_minima_mayorista, precio_oferta, porcentaje_descuento, porcentaje_descuento_maximo, imagen, habilitado)
VALUES(1, 'Aceite Mobil azul', 'Aceite Mobil azul', 0.000, 0.000, 1, 1, 1, '565656565652', 19990.000, 0.000, 0.000, 0.000, 0.000, 0.000, '/app/assets/images/img_productos/aceite.jpg', 'S');
INSERT INTO rdp_desa.tbl_producto
(productoid, producto, descripcion, costo_unidad, iva, unidadid, categoriaid, subcategoriaid, codigo_barra, precio_unitario, precio_mayorista, cantidad_minima_mayorista, precio_oferta, porcentaje_descuento, porcentaje_descuento_maximo, imagen, habilitado)
VALUES(2, 'LLANTA 15', 'LLANTA 15', 0.000, 0.000, 1, 1, 1, '565656565651', 68000.000, 0.000, 0.000, 0.000, 0.000, 0.000, '/app/assets/images/img_productos/llanta.jpg', 'S');
INSERT INTO rdp_desa.tbl_producto
(productoid, producto, descripcion, costo_unidad, iva, unidadid, categoriaid, subcategoriaid, codigo_barra, precio_unitario, precio_mayorista, cantidad_minima_mayorista, precio_oferta, porcentaje_descuento, porcentaje_descuento_maximo, imagen, habilitado)
VALUES(3, 'FILTRO', 'descripcion producto 3', 0.000, 0.000, 1, 1, 1, '565656565653', 5000.000, 0.000, 0.000, 0.000, 0.000, 0.000, '/app/assets/images/img_productos/filtro.jpg', 'S');
INSERT INTO rdp_desa.tbl_producto
(productoid, producto, descripcion, costo_unidad, iva, unidadid, categoriaid, subcategoriaid, codigo_barra, precio_unitario, precio_mayorista, cantidad_minima_mayorista, precio_oferta, porcentaje_descuento, porcentaje_descuento_maximo, imagen, habilitado)
VALUES(4, 'ACEITE SINTETICO', 'descripcion producto 4', 0.000, 0.000, 1, 1, 1, '565656565654', 15600.000, 0.000, 0.000, 0.000, 0.000, 0.000, '/app/assets/images/img_productos/aceite.2.jpg', 'S');
INSERT INTO rdp_desa.tbl_producto
(productoid, producto, descripcion, costo_unidad, iva, unidadid, categoriaid, subcategoriaid, codigo_barra, precio_unitario, precio_mayorista, cantidad_minima_mayorista, precio_oferta, porcentaje_descuento, porcentaje_descuento_maximo, imagen, habilitado)
VALUES(5, 'ACEITE SEMI SINTETICO', 'descripcion producto 5', 0.000, 0.000, 1, 1, 1, '565656565655', 17350.000, 0.000, 0.000, 0.000, 0.000, 0.000, '/app/assets/images/img_productos/aceite-3.jpg', 'S');
INSERT INTO rdp_desa.tbl_producto
(productoid, producto, descripcion, costo_unidad, iva, unidadid, categoriaid, subcategoriaid, codigo_barra, precio_unitario, precio_mayorista, cantidad_minima_mayorista, precio_oferta, porcentaje_descuento, porcentaje_descuento_maximo, imagen, habilitado)
VALUES(6, 'LLANTA 18', 'TEST', 0.000, 0.000, 3, 1, 1, '', 112000.000, 0.000, 0.000, 0.000, 0.000, 0.000, '/app/assets/images/img_productos/llanta.jpg', 'S');
INSERT INTO rdp_desa.tbl_producto
(productoid, producto, descripcion, costo_unidad, iva, unidadid, categoriaid, subcategoriaid, codigo_barra, precio_unitario, precio_mayorista, cantidad_minima_mayorista, precio_oferta, porcentaje_descuento, porcentaje_descuento_maximo, imagen, habilitado)
VALUES(7, 'CORREA DE DISTRIBUCION', 'CORREA DE DISTRIBUCION', 0.000, 0.000, 3, 1, 1, '', 6000.000, 0.000, 0.000, 0.000, 0.000, 0.000, '/app/assets/images/img_productos/correa.jpg', 'S');
INSERT INTO rdp_desa.tbl_producto
(productoid, producto, descripcion, costo_unidad, iva, unidadid, categoriaid, subcategoriaid, codigo_barra, precio_unitario, precio_mayorista, cantidad_minima_mayorista, precio_oferta, porcentaje_descuento, porcentaje_descuento_maximo, imagen, habilitado)
VALUES(8, 'BUJIA', 'test test test', 0.000, 0.000, 1, 1, 1, '', 7500.000, 0.000, 0.000, 0.000, 0.000, 0.000, '/app/assets/images/img_productos/bujia.jpg', 'S');
INSERT INTO rdp_desa.tbl_producto
(productoid, producto, descripcion, costo_unidad, iva, unidadid, categoriaid, subcategoriaid, codigo_barra, precio_unitario, precio_mayorista, cantidad_minima_mayorista, precio_oferta, porcentaje_descuento, porcentaje_descuento_maximo, imagen, habilitado)
VALUES(9, 'PARABRISAS', 'asdasdasd', 0.000, 0.000, 1, 1, 1, '', 35000.000, 0.000, 0.000, 0.000, 0.000, 0.000, '/app/assets/images/img_productos/parabrisas.jpg', 'S');
INSERT INTO rdp_desa.tbl_producto
(productoid, producto, descripcion, costo_unidad, iva, unidadid, categoriaid, subcategoriaid, codigo_barra, precio_unitario, precio_mayorista, cantidad_minima_mayorista, precio_oferta, porcentaje_descuento, porcentaje_descuento_maximo, imagen, habilitado)
VALUES(10, 'ESPEJO', 'TEST IMAGEN', 0.000, 0.000, 3, 1, 1, '', 17000.000, 0.000, 0.000, 0.000, 0.000, 0.000, '/app/assets/images/img_productos/lateral.jpg', 'S');


/****************************************************** 
 ****************************************************** 			
              MODELO REGISTRO DE LOG
 ******************************************************                 
 ******************************************************/

CREATE table tbl_log_tipo(
tipologid  int(11) NOT NULL auto_increment,
tipo_log varchar(100) NOT null,
PRIMARY KEY (tipologid)
 )ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE table tbl_log(
logid int(11) NOT NULL auto_increment,
tipologid int(11) NOT null,
tipo_log varchar(100) NOT null,
log_detalle mediumtext  NOT null,
log_anterior mediumtext,
log_posterior mediumtext,
usuarioid  int(11) NOT NULL,
funcionalidad varchar(2000),
fecha datetime NOT null,
tabla_asoc mediumtext,
campo mediumtext,
habilitado varchar(1) NOT null,
 PRIMARY KEY (logid),
 FOREIGN KEY (tipologid) REFERENCES tbl_log_tipo(tipologid), 
 FOREIGN KEY (usuarioid) REFERENCES tbl_usuario(usuarioid)
 )ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;



/****************************************************** 
 ****************************************************** 			
              TABLA PROVEEDOR
 ******************************************************                 
 ******************************************************/

CREATE TABLE `tbl_proveedor` (
  `proveedorid` int(11) NOT NULL AUTO_INCREMENT,
  `nombre_corto_proveedor` varchar(50) NOT NULL,
  `razon_social` varchar(50) NOT NULL,
  `rut` varchar(100) NOT NULL,
  `giro_del_rubro` varchar(50) NOT NULL,
  `correo` varchar(50) NOT NULL,
  `correo_adicional` varchar(50) NOT NULL,
  `telefono_fijo` varchar(50) NOT NULL,
  `telefono_celular` varchar(50) NOT NULL,
  `fecha_creacion` datetime NOT NULL,
  `habilitado` varchar(10) NOT NULL,
  PRIMARY KEY (`proveedorid`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

 CREATE TABLE `tbl_unidad_venta` (
  `unidadventaid` int(11) NOT NULL AUTO_INCREMENT,
  `unidad_venta` varchar(100) NOT NULL,
  PRIMARY KEY (`unidadventaid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO tbl_unidad_venta
(unidad_venta) VALUES('UNIDAD');

INSERT INTO tbl_unidad_venta
(unidad_venta) VALUES('KILOS');

INSERT INTO tbl_unidad_venta
(unidad_venta) VALUES('LITROS');

INSERT INTO tbl_unidad_venta
(unidad_venta) VALUES('PALLET');

INSERT INTO tbl_unidad_venta
(unidad_venta) VALUES('CAJA');



CREATE TABLE `tbl_atributos_producto` (
  `atributo` varchar(30) NOT NULL,
  `tipo` varchar(15) COLLATE utf8mb4_unicode_ci NOT NULL,
  `ayuda` varchar(150) COLLATE utf8mb4_unicode_ci, -- Coma a�adida aqu�
  `userid` int(11),
  `fecha_creacion` datetime,
  `habilitado` varchar(1),
  PRIMARY KEY (`atributo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


/****************************************************** 
 ****************************************************** 			
              TABLA BODEGA
 ******************************************************                 
 ******************************************************/
CREATE TABLE tbl_bodega(
  bodegaid int(11) NOT NULL AUTO_INCREMENT,
  bodega varchar(250) NOT NULL,
  ubicacion varchar(300) NOT NULL,
  dimensiones varchar(50) NOT NULL,
  capacidad varchar(250) NULL,
  habilitado varchar(20) NOT NULL,
  PRIMARY KEY (bodegaid)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO tbl_bodega (bodega, ubicacion, dimensiones, capacidad, habilitado)
VALUES ('Bodega A', 'Calle Principal 123', '10x10x10', '100 cajas', 'N');
INSERT INTO tbl_bodega (bodega, ubicacion, dimensiones, capacidad, habilitado)
VALUES ('Bodega B', 'Avenida Secundaria 456', '8x8x8', '80 cajas', 'N');
INSERT INTO tbl_bodega (bodega, ubicacion, dimensiones, capacidad, habilitado)
VALUES ('Bodega C', 'Calle Lateral 789', '12x12x12', '150 cajas', 'N');
INSERT INTO tbl_bodega (bodega, ubicacion, dimensiones, capacidad, habilitado)
VALUES ('Bodega D', 'Calle Peatonal 321', '6x6x6', '50 cajas', 'N');

CREATE table tbl_producto_imagen (
	productoimagenid int NOT NULL AUTO_INCREMENT,
	productoid int NOT NULL,
	ruta varchar(2000) NOT NULL,
   PRIMARY KEY (productoimagenid,productoid)
)
ENGINE=InnoDB
DEFAULT CHARSET=utf8
COLLATE=utf8_general_ci;

CREATE TABLE `tbl_producto_tag` (
   tagid int NOT NULL AUTO_INCREMENT,
  `productoid` int(11) NOT NULL,
  `tag` varchar(1000) NOT NULL,
  PRIMARY KEY (`tagid`,`productoid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


CREATE TABLE tbl_cotizacion (
	cotizacionid int NOT NULL AUTO_INCREMENT,
	fecha datetime NULL,
	estado varchar(30) NOT NULL,
	usuarioid int NOT NULL,
	rut_cliente varchar(30) NOT NULL,
	nombre_cliente varchar(300) NOT NULL,
	correo_cliente varchar(300) NULL,
	telefono_cliente varchar(200) NULL,
	total decimal(23,3) NOT null,
	 PRIMARY KEY (`cotizacionid`)
)
ENGINE=InnoDB
DEFAULT CHARSET=utf8
COLLATE=utf8_general_ci;

CREATE TABLE tbl_cotizacion_detalle (
    cotizaciondetalleid int NOT NULL AUTO_INCREMENT,
	cotizacionid int NOT NULL,
	productoid int NOT NULL,
	precio_unitario int NOT NULL,
	cantidad int NOT NULL,
	total_producto int null,
    PRIMARY KEY (`cotizaciondetalleid`)
)
ENGINE=InnoDB
DEFAULT CHARSET=utf8
COLLATE=utf8_general_ci;

/****************************************************** 
 ****************************************************** 			
              TABLA PRODUCTO STOCK BODEGA
 ******************************************************                 
 ******************************************************/
CREATE TABLE `tbl_producto_stock_bodega` (
   `productostockid` int NOT NULL AUTO_INCREMENT,
  `productoid` int(11) NOT NULL,
  `bodegaid` int(11) NOT NULL,
  `cantidad` int(11) NOT NULL,
  PRIMARY KEY (productostockid),
  CONSTRAINT `tbl_producto_stock_bodega_ibfk_1` FOREIGN KEY (`productoid`) REFERENCES `tbl_producto` (`productoid`),
  CONSTRAINT `tbl_producto_stock_bodega_ibfk_2` FOREIGN KEY (`bodegaid`) REFERENCES `tbl_bodega` (`bodegaid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO rdp_desa.tbl_producto_stock_bodega
(productoid, bodegaid, cantidad)
VALUES(1, 1, 2000);
INSERT INTO rdp_desa.tbl_producto_stock_bodega
(productoid, bodegaid, cantidad)
VALUES(2, 1, 1500);
INSERT INTO rdp_desa.tbl_producto_stock_bodega
(productoid, bodegaid, cantidad)
VALUES(3, 1, 1000);
INSERT INTO rdp_desa.tbl_producto_stock_bodega
(productoid, bodegaid, cantidad)
VALUES(1, 2, 3000);


/****************************************************** 
 ****************************************************** 			
              TABLA BODEGA POSICION
 ******************************************************                 
 ******************************************************/
CREATE TABLE `tbl_bodega_posicion` (
  `posicionid` int(11) NOT NULL AUTO_INCREMENT,
  `bodegaid` int(11) NOT NULL,
  `nombre` varchar(100) NOT NULL,
  `detalle` varchar(500) NOT NULL,
  `habilitado` varchar(1) NOT NULL,
  PRIMARY KEY (`posicionid`),
  CONSTRAINT `tbl_bodega_posicion_ibfk_1` FOREIGN KEY (`bodegaid`) REFERENCES `tbl_bodega` (`bodegaid`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


/****************************************************** 
 ****************************************************** 			
              TABLA TIPO MOVIMIENTO
 ******************************************************                 
 ******************************************************/

CREATE TABLE `tbl_tipo_movimiento` (
  `tipoid` int(11) NOT NULL AUTO_INCREMENT,
  `nombre` varchar(100) NOT NULL,
  `tipo_movimiento` varchar(100) NOT NULL,
  PRIMARY KEY (`tipoid`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/****************************************************** 
 ****************************************************** 			
              TABLA CLIENTE
 ******************************************************                 
 ******************************************************/
CREATE TABLE `tbl_cliente` (
  `clienteid` int(11) NOT NULL AUTO_INCREMENT,
  `rut` int(11) NOT NULL,
  `dv` varchar(1) NOT NULL,
  `nombres` varchar(100) NOT NULL,
  `apellidos` varchar(100) NOT NULL,
  `email` varchar(100) NOT NULL,
  `telefono` varchar(20) NOT NULL,
  `direccion` varchar(100) NOT null,
  PRIMARY KEY (`clienteid`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/****************************************************** 
 ****************************************************** 			
              TABLA PRODUCTO INGRESO
 ******************************************************                 
 ******************************************************/
CREATE TABLE `tbl_producto_ingreso` (
  `productoingresoid` int(11) NOT NULL AUTO_INCREMENT,
  `tipoid` int(11) NOT NULL,
  `fecha_ingreso` datetime NOT NULL,
  `tipo_documento` varchar(100) NOT NULL,
  `numero_documento` varchar(100) NOT NULL,
  `nota` varchar(500) NOT NULL,
  `total_documento_afecto` decimal(25,3) NOT NULL,
  `total_documento_exento` decimal(25,3) NOT NULL,
  `total_documento_iva` decimal(25,3) NOT NULL,
  `total_documento_bruto` decimal(25,3) NOT NULL,
  `clienteid` int(11) NOT NULL,
  `usuarioid` int(11) NOT NULL,
  `proveedorid` int(11) NOT NULL,
  `bodegaorigenid` int(11) NOT NULL,
  PRIMARY KEY (`productoingresoid`),
  CONSTRAINT `tbl_producto_ingreso_ibfk_2` FOREIGN KEY (`tipoid`) REFERENCES `tbl_tipo_movimiento` (`tipoid`),
  CONSTRAINT `tbl_producto_ingreso_ibfk_1` FOREIGN KEY (`clienteid`) REFERENCES `tbl_cliente` (`clienteid`),
  CONSTRAINT `tbl_producto_ingreso_ibfk_3` FOREIGN KEY (`usuarioid`) REFERENCES `tbl_usuario` (`usuarioid`),
  CONSTRAINT `tbl_producto_ingreso_ibfk_4` FOREIGN KEY (`proveedorid`) REFERENCES `tbl_proveedor` (`proveedorid`),
  CONSTRAINT `tbl_producto_ingreso_ibfk_5` FOREIGN KEY (`bodegaorigenid`) REFERENCES `tbl_bodega` (`bodegaid`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/****************************************************** 
 ****************************************************** 			
              TABLA PRODUCTO STOCK MOVIMIENTO
 ******************************************************                 
 ******************************************************/
CREATE TABLE `tbl_producto_stock_movimiento` (
  `movimientoid` int(11) NOT NULL AUTO_INCREMENT,
  `productoingresoid` int(11) NOT NULL,
  `tipoid` int(11) NOT NULL,
  `fecha_movimiento` datetime NOT NULL,
  `tipo_movimiento` varchar(100) NOT NULL,
  `productoid` int(11) NOT NULL,
  `cantidad` int(11) NOT NULL,
  `bodegaid` int(11) NOT NULL,
  `usuarioid` int(11) NOT NULL,
  `valor_unitario` decimal(25,3) NOT NULL,
  `valor_total` decimal(25,3) NOT NULL,
  `valor_unitario_afecto` decimal(25,3) NOT NULL,
  `valor_unitario_exento` decimal(25,3) NOT null,
  PRIMARY KEY (`movimientoid`),
  CONSTRAINT `tbl_producto_stock_movimiento_ibfk_1` FOREIGN KEY (`productoingresoid`) REFERENCES `tbl_producto_ingreso` (`productoingresoid`),
  CONSTRAINT `tbl_producto_stock_movimiento_ibfk_2` FOREIGN KEY (`tipoid`) REFERENCES `tbl_tipo_movimiento` (`tipoid`),
  CONSTRAINT `tbl_producto_stock_movimiento_ibfk_3` FOREIGN KEY (`productoid`) REFERENCES `tbl_producto` (`productoid`),
  CONSTRAINT `tbl_producto_stock_movimiento_ibfk_4` FOREIGN KEY (`bodegaid`) REFERENCES `tbl_bodega` (`bodegaid`),
  CONSTRAINT `tbl_producto_stock_movimiento_ibfk_5` FOREIGN KEY (`usuarioid`) REFERENCES `tbl_usuario` (`usuarioid`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/****************************************************** 
 ****************************************************** 			
          TABLA PRODUCTO STOCK MOVIMIENTO CODIGO BARRA
 ******************************************************                 
 ******************************************************/
CREATE TABLE `tbl_producto_stock_movimiento_codigo_barra` (
  `codebarraid` int(11) NOT NULL AUTO_INCREMENT,
  `movimientoid` int(11) NOT NULL,
  `productoid` int(11) NOT NULL,
  `codigo_barra` varchar(100) NOT NULL,
  `fecha_vencimiento` datetime NOT NULL,
  `lote` varchar(100) NOT NULL,
  PRIMARY KEY (`codebarraid`),
  CONSTRAINT `tbl_producto_stock_movimiento_codigo_barra_ibfk_1` FOREIGN KEY (`movimientoid`) REFERENCES `tbl_producto_stock_movimiento` (`movimientoid`),
  CONSTRAINT `tbl_producto_stock_movimiento_codigo_barra_ibfk_2` FOREIGN KEY (`productoid`) REFERENCES `tbl_producto` (`productoid`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


/* VERIFICA QUE SI LA COLUMNA EXISTE EN LA TABLA TBL_COTIZACIO */

-- Verifica si la columna 'Motivocancelacion' existe
SET @columnExists = (
  SELECT COUNT(*)
  FROM INFORMATION_SCHEMA.COLUMNS
  WHERE TABLE_NAME = 'tbl_cotizacion'
  AND COLUMN_NAME = 'Motivocancelacion'
);

-- Si la columna no existe, agrega la columna
SET @query = IF(@columnExists = 0, 
  'ALTER TABLE tbl_cotizacion ADD COLUMN Motivocancelacion VARCHAR(100);', 
  'SELECT "La columna ya existe";'
);

-- Ejecuta la consulta
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;


-- Cambia el delimitador para permitir el uso de delimitadores dentro del bloque
DELIMITER $$

-- Procedimiento para verificar y crear el procedimiento almacenado si no existe
CREATE PROCEDURE EnsureUpdateEstadoId()
BEGIN
    DECLARE proc_exists INT DEFAULT 0;

    -- Verifica si el procedimiento ya existe
    SELECT COUNT(*)
    INTO proc_exists
    FROM INFORMATION_SCHEMA.ROUTINES
    WHERE ROUTINE_SCHEMA = 'rdp_desa' -- Cambia esto por el nombre de tu base de datos
      AND ROUTINE_NAME = 'UpdateEstadoId'
      AND ROUTINE_TYPE = 'PROCEDURE';

    -- Si el procedimiento no existe, créalo
    IF proc_exists = 0 THEN
        SET @createProcedure = '
        CREATE DEFINER=`root`@`localhost` PROCEDURE `UpdateEstadoId`(
            IN p_cotizacionid INT,
            IN p_estadoid INT,
            IN P_motivocotizacion VARCHAR(100)
        )
        BEGIN
            -- Actualiza el campo estadoid
            UPDATE tbl_cotizacion
            SET estadoid = p_estadoid, Motivocancelacion = P_motivocotizacion
            WHERE cotizacionid = p_cotizacionid;

            -- Selecciona todos los registros de la tabla tbl_cotizacion
            CALL `rdp_desa`.`SelectAllCotizaciones`();
        END$$';

        -- Prepara y ejecuta la creación del procedimiento
        PREPARE stmt FROM @createProcedure;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;
    END IF;
END$$

-- Ejecuta el procedimiento EnsureUpdateEstadoId para asegurar la creación del procedimiento almacenado
CALL EnsureUpdateEstadoId();

-- Limpia el procedimiento EnsureUpdateEstadoId, si ya no es necesario
DROP PROCEDURE EnsureUpdateEstadoId$$

-- Restablece el delimitador
DELIMITER ;



-- Cambia el delimitador para permitir el uso de delimitadores dentro del bloque
DELIMITER $$

-- Procedimiento para verificar y crear el procedimiento almacenado si no existe
CREATE PROCEDURE EnsureSelectAllCotizaciones()
BEGIN
    DECLARE proc_exists INT DEFAULT 0;

    -- Verifica si el procedimiento ya existe
    SELECT COUNT(*)
    INTO proc_exists
    FROM INFORMATION_SCHEMA.ROUTINES
    WHERE ROUTINE_SCHEMA = 'rdp_desa' -- Cambia esto por el nombre de tu base de datos
      AND ROUTINE_NAME = 'SelectAllCotizaciones'
      AND ROUTINE_TYPE = 'PROCEDURE';

    -- Si el procedimiento no existe, créalo
    IF proc_exists = 0 THEN
        SET @createProcedure = '
        CREATE DEFINER=`root`@`localhost` PROCEDURE `SelectAllCotizaciones`()
        BEGIN
            SELECT cotizacionid,
                   DATE_FORMAT(fecha, ''%d-%m-%Y'') AS fecha,
                   DATE_FORMAT(DATE_ADD(fecha, INTERVAL 5 DAY), ''%d-%m-%Y'') AS fecha_vencimiento,
                   rut_cliente,
                   nombre_cliente,
                   correo_cliente,
                   telefono_cliente,
                   total,
                   estado,
                   (SELECT nomestado FROM tbl_cotizacion_estado_def WHERE tc.estadoid = posicion) AS Estado,
                   CONCAT(u.nombres, '' '', u.apellidos) AS vendedor
            FROM tbl_cotizacion tc
            JOIN tbl_usuario u ON u.usuarioid = tc.usuarioid
            ORDER BY cotizacionid DESC;
        END$$';

        -- Prepara y ejecuta la creación del procedimiento
        PREPARE stmt FROM @createProcedure;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;
    END IF;
END$$

-- Ejecuta el procedimiento EnsureSelectAllCotizaciones para asegurar la creación del procedimiento almacenado
CALL EnsureSelectAllCotizaciones();

-- Limpia el procedimiento EnsureSelectAllCotizaciones, si ya no es necesario
DROP PROCEDURE EnsureSelectAllCotizaciones$$

-- Restablece el delimitador
DELIMITER ;
