-- https://www.phpmyadmin.net/
--
-- Servidor: 127.0.0.1
-- Tiempo de generación: 26-03-2026 a las 06:11:19
-- Versión del servidor: 10.4.32-MariaDB
-- Versión de PHP: 8.2.12

START TRANSACTION;



--
-- Base de datos: `db_princesa`
--

DELIMITER $$
--
-- Procedimientos
--
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_Pedidos_Sel` (IN `p_Estado` TINYINT, IN `p_Busqueda` VARCHAR(100), IN `p_FechaDesde` DATE, IN `p_FechaHasta` DATE)   BEGIN
    SELECT
        p.PedidoId,
        DATE_FORMAT(p.FechaCreacion, '%d/%m/%Y %H:%i') AS Fecha,
        td.Nombre   AS TipoDocumento,
        p.NumeroDocumento,
        COALESCE(p.RazonSocial, p.NombreCompleto) AS Cliente,
        p.DireccionEntrega,
        CONCAT(p.Departamento, ' - ', p.Provincia, ' - ', p.Distrito) AS Ubigeo,
        p.Total,
        ep.Nombre   AS Estado,
        ep.Color    AS EstadoColor,
        p.Estado    AS EstadoId
    FROM Pedidos p
    INNER JOIN TipoDocumento td ON p.TipoDocumentoId = td.TipoDocumentoId
    INNER JOIN EstadoPedido  ep ON p.Estado           = ep.EstadoId
    WHERE (p_Estado    IS NULL OR p.Estado = p_Estado)
      AND (p_Busqueda  IS NULL OR p.NumeroDocumento LIKE CONCAT('%', p_Busqueda, '%')
                               OR p.RazonSocial     LIKE CONCAT('%', p_Busqueda, '%')
                               OR p.NombreCompleto  LIKE CONCAT('%', p_Busqueda, '%'))
      AND (p_FechaDesde IS NULL OR DATE(p.FechaCreacion) >= p_FechaDesde)
      AND (p_FechaHasta IS NULL OR DATE(p.FechaCreacion) <= p_FechaHasta)
    ORDER BY p.PedidoId DESC;
END$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_Pedido_Ins` (IN `p_TipoDocumentoId` TINYINT, IN `p_NumeroDocumento` VARCHAR(20), IN `p_RazonSocial` VARCHAR(200), IN `p_NombreCompleto` VARCHAR(200), IN `p_DireccionEntrega` VARCHAR(300), IN `p_UbigeoId` VARCHAR(6), IN `p_Observaciones` TEXT, IN `p_Detalles` JSON, OUT `p_PedidoId` INT, OUT `p_Total` DECIMAL(10,2))   BEGIN
    DECLARE v_Total     DECIMAL(10,2) DEFAULT 0;
    DECLARE v_Dpto      VARCHAR(100);
    DECLARE v_Prov      VARCHAR(100);
    DECLARE v_Dist      VARCHAR(100);
    DECLARE v_i         INT DEFAULT 0;
    DECLARE v_len       INT;
    DECLARE v_item      JSON;

    DECLARE EXIT HANDLER FOR SQLEXCEPTION
    BEGIN
        ROLLBACK;
        RESIGNAL;
    END;

    START TRANSACTION;

    -- Obtener datos del ubigeo
    SELECT Departamento, Provincia, Distrito
    INTO   v_Dpto, v_Prov, v_Dist
    FROM   Ubigeo
    WHERE  UbigeoId = p_UbigeoId;

    -- Calcular total desde el JSON de detalles
    SET v_len = JSON_LENGTH(p_Detalles);
    WHILE v_i < v_len DO
        SET v_item  = JSON_EXTRACT(p_Detalles, CONCAT('$[', v_i, ']'));
        SET v_Total = v_Total + (
            JSON_UNQUOTE(JSON_EXTRACT(v_item, '$.Cantidad'))
            * JSON_UNQUOTE(JSON_EXTRACT(v_item, '$.PrecioUnitario'))
        );
        SET v_i = v_i + 1;
    END WHILE;

    -- Insertar cabecera del pedido
    INSERT INTO Pedidos (
        TipoDocumentoId, NumeroDocumento, RazonSocial, NombreCompleto,
        DireccionEntrega, UbigeoId, Departamento, Provincia, Distrito,
        Total, Estado, Observaciones
    ) VALUES (
        p_TipoDocumentoId, p_NumeroDocumento, p_RazonSocial, p_NombreCompleto,
        p_DireccionEntrega, p_UbigeoId, v_Dpto, v_Prov, v_Dist,
        v_Total, 1, p_Observaciones
    );

    SET p_PedidoId = LAST_INSERT_ID();
    SET p_Total    = v_Total;

    -- Insertar detalles desde el JSON
    SET v_i = 0;
    WHILE v_i < v_len DO
        SET v_item = JSON_EXTRACT(p_Detalles, CONCAT('$[', v_i, ']'));

        INSERT INTO PedidoDetalles (
            PedidoId, ProductoId, UnidadId,
            NombreProducto, NombreUnidad,
            Cantidad, PrecioUnitario, Subtotal
        ) VALUES (
            p_PedidoId,
            JSON_UNQUOTE(JSON_EXTRACT(v_item, '$.ProductoId')),
            JSON_UNQUOTE(JSON_EXTRACT(v_item, '$.UnidadId')),
            JSON_UNQUOTE(JSON_EXTRACT(v_item, '$.NombreProducto')),
            JSON_UNQUOTE(JSON_EXTRACT(v_item, '$.NombreUnidad')),
            JSON_UNQUOTE(JSON_EXTRACT(v_item, '$.Cantidad')),
            JSON_UNQUOTE(JSON_EXTRACT(v_item, '$.PrecioUnitario')),
            JSON_UNQUOTE(JSON_EXTRACT(v_item, '$.Cantidad'))
            * JSON_UNQUOTE(JSON_EXTRACT(v_item, '$.PrecioUnitario'))
        );

        SET v_i = v_i + 1;
    END WHILE;

    COMMIT;
END$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_Pedido_SelById` (IN `p_PedidoId` INT)   BEGIN
    -- Cabecera
    SELECT
        p.*,
        td.Nombre AS TipoDocumentoNombre,
        ep.Nombre AS EstadoNombre,
        ep.Color  AS EstadoColor
    FROM Pedidos p
    INNER JOIN TipoDocumento td ON p.TipoDocumentoId = td.TipoDocumentoId
    INNER JOIN EstadoPedido  ep ON p.Estado           = ep.EstadoId
    WHERE p.PedidoId = p_PedidoId;

    -- Detalle de items
    SELECT
        pd.DetalleId,
        pd.NombreProducto,
        pd.NombreUnidad,
        pd.Cantidad,
        pd.PrecioUnitario,
        pd.Subtotal,
        prod.RutaImagen
    FROM PedidoDetalles pd
    LEFT JOIN Productos prod ON pd.ProductoId = prod.ProductoId
    WHERE pd.PedidoId = p_PedidoId
    ORDER BY pd.DetalleId;
END$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_Pedido_Upd_Estado` (IN `p_PedidoId` INT, IN `p_Estado` TINYINT)   BEGIN
    UPDATE Pedidos
    SET Estado = p_Estado
    WHERE PedidoId = p_PedidoId;

    SELECT ROW_COUNT() AS Afectados;
END$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_Productos_Sel` (IN `p_Busqueda` VARCHAR(150), IN `p_CategoriaId` INT)   BEGIN
    SELECT
        p.ProductoId,
        p.Nombre,
        p.Descripcion,
        p.RutaImagen,
        p.PrecioBase,
        c.Nombre AS Categoria,
        (
            SELECT JSON_ARRAYAGG(
                JSON_OBJECT(
                    'UnidadId', u.UnidadId,
                    'Nombre',   u.Nombre,
                    'Precio',   u.Precio,
                    'Stock',    u.Stock
                )
            )
            FROM ProdUnidades u
            WHERE u.ProductoId = p.ProductoId
              AND u.Activo = 1
            ORDER BY u.Orden
        ) AS Unidades
    FROM Productos p
    LEFT JOIN Categorias c ON p.CategoriaId = c.CategoriaId
    WHERE p.Activo = 1
      AND (p_Busqueda   IS NULL OR p.Nombre LIKE CONCAT('%', p_Busqueda, '%'))
      AND (p_CategoriaId IS NULL OR p.CategoriaId = p_CategoriaId)
    ORDER BY c.Orden, p.Nombre;
END$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_Ubigeo_Dists` (IN `p_Dpto` VARCHAR(100), IN `p_Prov` VARCHAR(100))   BEGIN
    SELECT UbigeoId, Distrito
    FROM Ubigeo
    WHERE Departamento = p_Dpto
      AND Provincia    = p_Prov
    ORDER BY Distrito;
END$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_Ubigeo_Dptos` ()   BEGIN
    SELECT DISTINCT Departamento
    FROM Ubigeo
    ORDER BY Departamento;
END$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_Ubigeo_Provs` (IN `p_Dpto` VARCHAR(100))   BEGIN
    SELECT DISTINCT Provincia
    FROM Ubigeo
    WHERE Departamento = p_Dpto
    ORDER BY Provincia;
END$$

DELIMITER ;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `categorias`
--

CREATE TABLE `categorias` (
  `CategoriaId` int(11) NOT NULL,
  `Nombre` varchar(100) NOT NULL,
  `Descripcion` text DEFAULT NULL,
  `Icono` varchar(60) DEFAULT NULL,
  `Orden` tinyint(3) UNSIGNED DEFAULT 0,
  `Activo` tinyint(1) NOT NULL DEFAULT 1,
  `FechaCreacion` timestamp NOT NULL DEFAULT current_timestamp(),
  `refCategoriaId` int(11) DEFAULT NULL COMMENT 'Ref. externa sin FK (migración)'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `estadopedido`
--

CREATE TABLE `estadopedido` (
  `EstadoId` tinyint(4) NOT NULL,
  `Nombre` varchar(50) NOT NULL,
  `Color` varchar(20) DEFAULT 'gray'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Volcado de datos para la tabla `estadopedido`
--

INSERT INTO `estadopedido` (`EstadoId`, `Nombre`, `Color`) VALUES
(1, 'Pendiente', 'yellow'),
(2, 'Confirmado', 'blue'),
(3, 'En preparación', 'orange'),
(4, 'Enviado', 'indigo'),
(5, 'Entregado', 'green'),
(6, 'Anulado', 'red');

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `pedidodetalles`
--

CREATE TABLE `pedidodetalles` (
  `DetalleId` int(11) NOT NULL,
  `PedidoId` int(11) NOT NULL,
  `ProductoId` int(11) NOT NULL,
  `UnidadId` int(11) NOT NULL,
  `NombreProducto` varchar(150) NOT NULL,
  `NombreUnidad` varchar(80) NOT NULL,
  `Cantidad` int(11) NOT NULL DEFAULT 1,
  `PrecioUnitario` decimal(10,2) NOT NULL,
  `Subtotal` decimal(10,2) NOT NULL,
  `Comentario` text DEFAULT NULL COMMENT 'Nota/comentario del cliente sobre este ítem',
  `refProductoId` int(11) DEFAULT NULL,
  `refUnidadId` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `pedidos`
--

CREATE TABLE `pedidos` (
  `PedidoId` int(11) NOT NULL,
  `CodigoPedido` varchar(15) DEFAULT NULL,
  `TipoDocumentoId` tinyint(4) NOT NULL,
  `NumeroDocumento` varchar(20) NOT NULL,
  `RazonSocial` varchar(200) DEFAULT NULL,
  `NombreCompleto` varchar(200) DEFAULT NULL,
  `DireccionEntrega` varchar(300) NOT NULL,
  `UbigeoId` varchar(6) DEFAULT NULL,
  `Departamento` varchar(100) DEFAULT NULL,
  `Provincia` varchar(100) DEFAULT NULL,
  `Distrito` varchar(100) DEFAULT NULL,
  `Total` decimal(10,2) NOT NULL DEFAULT 0.00,
  `EsFacturado` tinyint(4) NOT NULL DEFAULT 0,
  `EsFacturadoFecha` datetime DEFAULT NULL,
  `EsFacturadoDocId` varchar(100) DEFAULT NULL,
  `EsEliminado` tinyint(4) NOT NULL DEFAULT 0,
  `EsEliminadoFecha` datetime DEFAULT NULL,
  `EsEliminadoComentario` varchar(500) DEFAULT NULL,
  `Estado` tinyint(4) NOT NULL DEFAULT 1,
  `Observaciones` text DEFAULT NULL,
  `FechaCreacion` timestamp NOT NULL DEFAULT current_timestamp(),
  `FechaActualizacion` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  `VoucherRuta1` varchar(300) DEFAULT NULL COMMENT 'Ruta relativa del primer voucher de pago',
  `VoucherRuta2` varchar(300) DEFAULT NULL COMMENT 'Ruta relativa del segundo voucher de pago',
  `Telefono` varchar(20) DEFAULT NULL,
  `Correo` varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `productos`
--

CREATE TABLE `productos` (
  `ProductoId` int(11) NOT NULL,
  `CategoriaId` int(11) DEFAULT NULL,
  `SubCategoriaId` int(11) DEFAULT NULL COMMENT 'FK a SubCategorias',
  `refProductoId` int(11) DEFAULT NULL COMMENT 'Ref. externa sin FK (migración)',
  `refCategoriaId` int(11) DEFAULT NULL COMMENT 'Ref. externa sin FK (migración)',
  `refSubCategoriaId` int(11) DEFAULT NULL COMMENT 'Ref. externa sin FK (migración)',
  `Codigo` varchar(30) DEFAULT NULL,
  `Nombre` varchar(150) NOT NULL,
  `Descripcion` text DEFAULT NULL,
  `RutaImagen` varchar(300) DEFAULT NULL,
  `PrecioBase` decimal(10,2) NOT NULL DEFAULT 0.00,
  `Activo` tinyint(1) NOT NULL DEFAULT 1,
  `FechaCreacion` timestamp NOT NULL DEFAULT current_timestamp(),
  `FechaActualizacion` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `produnidades`
--

CREATE TABLE `produnidades` (
  `UnidadId` int(11) NOT NULL,
  `ProductoId` int(11) DEFAULT NULL,
  `refProductoId` int(11) DEFAULT NULL COMMENT 'Ref. externa sin FK (migración)',
  `refUnidadId` int(11) DEFAULT NULL COMMENT 'Ref. externa sin FK (migración)',
  `Nombre` varchar(80) NOT NULL,
  `Precio` decimal(10,2) NOT NULL,
  `Stock` int(11) NOT NULL DEFAULT 0,
  `Orden` tinyint(3) UNSIGNED DEFAULT 0,
  `Activo` tinyint(1) NOT NULL DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `subcategorias`
--

CREATE TABLE `subcategorias` (
  `SubCategoriaId` int(11) NOT NULL,
  `CategoriaId` int(11) DEFAULT NULL,
  `Nombre` varchar(100) NOT NULL,
  `Descripcion` text DEFAULT NULL,
  `Icono` varchar(60) DEFAULT NULL,
  `Orden` tinyint(3) UNSIGNED DEFAULT 0,
  `Activo` tinyint(1) NOT NULL DEFAULT 1,
  `FechaCreacion` timestamp NOT NULL DEFAULT current_timestamp(),
  `refCategoriaId` int(11) DEFAULT NULL,
  `refSubCategoriaId` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `tipodocumento`
--

CREATE TABLE `tipodocumento` (
  `TipoDocumentoId` tinyint(4) NOT NULL,
  `Nombre` varchar(20) NOT NULL,
  `CodigoSunat` varchar(2) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Volcado de datos para la tabla `tipodocumento`
--

INSERT INTO `tipodocumento` (`TipoDocumentoId`, `Nombre`, `CodigoSunat`) VALUES
(1, 'Boleta', '03'),
(2, 'Factura', '01'),
(3, 'Nota de venta', '03');

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `ubigeo`
--

CREATE TABLE `ubigeo` (
  `UbigeoId` varchar(6) NOT NULL,
  `Departamento` varchar(100) NOT NULL,
  `Provincia` varchar(100) NOT NULL,
  `Distrito` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Volcado de datos para la tabla `ubigeo`
--

INSERT INTO `ubigeo` (`UbigeoId`, `Departamento`, `Provincia`, `Distrito`) VALUES
('150101', 'Lima', 'Lima', 'Lima'),
('150102', 'Lima', 'Lima', 'Ancón'),
('150103', 'Lima', 'Lima', 'Ate'),
('150104', 'Lima', 'Lima', 'Barranco'),
('150105', 'Lima', 'Lima', 'Breña'),
('150106', 'Lima', 'Lima', 'Carabayllo'),
('150107', 'Lima', 'Lima', 'Chaclacayo'),
('150108', 'Lima', 'Lima', 'Chorrillos'),
('150109', 'Lima', 'Lima', 'Cieneguilla'),
('150110', 'Lima', 'Lima', 'Comas'),
('150111', 'Lima', 'Lima', 'El Agustino'),
('150112', 'Lima', 'Lima', 'Independencia'),
('150113', 'Lima', 'Lima', 'Jesús María'),
('150114', 'Lima', 'Lima', 'La Molina'),
('150115', 'Lima', 'Lima', 'La Victoria'),
('150116', 'Lima', 'Lima', 'Lince'),
('150117', 'Lima', 'Lima', 'Los Olivos'),
('150118', 'Lima', 'Lima', 'Lurigancho'),
('150119', 'Lima', 'Lima', 'Lurín'),
('150120', 'Lima', 'Lima', 'Magdalena del Mar'),
('150121', 'Lima', 'Lima', 'Miraflores'),
('150122', 'Lima', 'Lima', 'Pachacámac'),
('150123', 'Lima', 'Lima', 'Pucusana'),
('150124', 'Lima', 'Lima', 'Pueblo Libre'),
('150125', 'Lima', 'Lima', 'Puente Piedra'),
('150126', 'Lima', 'Lima', 'Punta Hermosa'),
('150127', 'Lima', 'Lima', 'Punta Negra'),
('150128', 'Lima', 'Lima', 'Rímac'),
('150129', 'Lima', 'Lima', 'San Bartolo'),
('150130', 'Lima', 'Lima', 'San Borja'),
('150131', 'Lima', 'Lima', 'San Isidro'),
('150132', 'Lima', 'Lima', 'San Juan de Lurigancho'),
('150133', 'Lima', 'Lima', 'San Juan de Miraflores'),
('150134', 'Lima', 'Lima', 'San Luis'),
('150135', 'Lima', 'Lima', 'San Martín de Porres'),
('150136', 'Lima', 'Lima', 'San Miguel'),
('150137', 'Lima', 'Lima', 'Santa Anita'),
('150138', 'Lima', 'Lima', 'Santa María del Mar'),
('150139', 'Lima', 'Lima', 'Santa Rosa'),
('150140', 'Lima', 'Lima', 'Santiago de Surco'),
('150141', 'Lima', 'Lima', 'Surquillo'),
('150142', 'Lima', 'Lima', 'Villa El Salvador'),
('150143', 'Lima', 'Lima', 'Villa María del Triunfo');

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `usuarios`
--

CREATE TABLE `usuarios` (
  `UsuarioId` int(11) NOT NULL,
  `Nombre` varchar(100) NOT NULL,
  `Apellidos` varchar(150) NOT NULL,
  `Email` varchar(150) NOT NULL,
  `Clave` varchar(255) NOT NULL,
  `EsActivo` tinyint(4) NOT NULL DEFAULT 1,
  `FechaCreacion` datetime NOT NULL DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

--
-- Volcado de datos para la tabla `usuarios`
--

INSERT INTO `usuarios` (`UsuarioId`, `Nombre`, `Apellidos`, `Email`, `Clave`, `EsActivo`, `FechaCreacion`) VALUES
(1, 'Juan', 'Ala', 'sistemas.cronos@outlook.com', '$2b$10$fPe43iMlH4yFQ9RAu8OZ2.Df7Hf.aIW6W14gWFnndifTI2zpVg5fi', 1, '2026-03-17 18:43:01');

-- --------------------------------------------------------

--
-- Estructura Stand-in para la vista `v_catalogoproductos`
-- (Véase abajo para la vista actual)
--
CREATE TABLE `v_catalogoproductos` (
`ProductoId` int(11)
,`Codigo` varchar(30)
,`Nombre` varchar(150)
,`Descripcion` text
,`RutaImagen` varchar(300)
,`Categoria` varchar(100)
,`PrecioDesde` decimal(10,2)
,`TotalUnidades` bigint(21)
,`Activo` tinyint(1)
);

-- --------------------------------------------------------

--
-- Estructura Stand-in para la vista `v_pedidocompleto`
-- (Véase abajo para la vista actual)
--
CREATE TABLE `v_pedidocompleto` (
`PedidoId` int(11)
,`FechaCreacion` timestamp
,`TipoDocumento` varchar(20)
,`NumeroDocumento` varchar(20)
,`RazonSocial` varchar(200)
,`NombreCompleto` varchar(200)
,`DireccionEntrega` varchar(300)
,`Departamento` varchar(100)
,`Provincia` varchar(100)
,`Distrito` varchar(100)
,`Total` decimal(10,2)
,`Estado` varchar(50)
,`EstadoColor` varchar(20)
,`TotalItems` bigint(21)
);

-- --------------------------------------------------------

--
-- Estructura para la vista `v_catalogoproductos`
--

CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v_catalogoproductos`  AS SELECT `p`.`ProductoId` AS `ProductoId`, `p`.`Codigo` AS `Codigo`, `p`.`Nombre` AS `Nombre`, `p`.`Descripcion` AS `Descripcion`, `p`.`RutaImagen` AS `RutaImagen`, `c`.`Nombre` AS `Categoria`, `p`.`PrecioBase` AS `PrecioDesde`, count(`u`.`UnidadId`) AS `TotalUnidades`, `p`.`Activo` AS `Activo` FROM ((`productos` `p` left join `categorias` `c` on(`p`.`CategoriaId` = `c`.`CategoriaId`)) left join `produnidades` `u` on(`p`.`ProductoId` = `u`.`ProductoId` and `u`.`Activo` = 1)) WHERE `p`.`Activo` = 1 GROUP BY `p`.`ProductoId` ;

-- --------------------------------------------------------

--
-- Estructura para la vista `v_pedidocompleto`
--

CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v_pedidocompleto`  AS SELECT `p`.`PedidoId` AS `PedidoId`, `p`.`FechaCreacion` AS `FechaCreacion`, `td`.`Nombre` AS `TipoDocumento`, `p`.`NumeroDocumento` AS `NumeroDocumento`, `p`.`RazonSocial` AS `RazonSocial`, `p`.`NombreCompleto` AS `NombreCompleto`, `p`.`DireccionEntrega` AS `DireccionEntrega`, `p`.`Departamento` AS `Departamento`, `p`.`Provincia` AS `Provincia`, `p`.`Distrito` AS `Distrito`, `p`.`Total` AS `Total`, `ep`.`Nombre` AS `Estado`, `ep`.`Color` AS `EstadoColor`, count(`pd`.`DetalleId`) AS `TotalItems` FROM (((`pedidos` `p` join `tipodocumento` `td` on(`p`.`TipoDocumentoId` = `td`.`TipoDocumentoId`)) join `estadopedido` `ep` on(`p`.`Estado` = `ep`.`EstadoId`)) left join `pedidodetalles` `pd` on(`p`.`PedidoId` = `pd`.`PedidoId`)) GROUP BY `p`.`PedidoId` ;

--
-- Índices para tablas volcadas
--

--
-- Indices de la tabla `categorias`
--
ALTER TABLE `categorias`
  ADD PRIMARY KEY (`CategoriaId`);

--
-- Indices de la tabla `estadopedido`
--
ALTER TABLE `estadopedido`
  ADD PRIMARY KEY (`EstadoId`);

--
-- Indices de la tabla `pedidodetalles`
--
ALTER TABLE `pedidodetalles`
  ADD PRIMARY KEY (`DetalleId`),
  ADD KEY `idx_detalle_pedido` (`PedidoId`),
  ADD KEY `fk_detalle_producto` (`ProductoId`),
  ADD KEY `fk_detalle_unidad` (`UnidadId`);

--
-- Indices de la tabla `pedidos`
--
ALTER TABLE `pedidos`
  ADD PRIMARY KEY (`PedidoId`),
  ADD UNIQUE KEY `CodigoPedido` (`CodigoPedido`),
  ADD KEY `idx_pedido_estado` (`Estado`),
  ADD KEY `idx_pedido_documento` (`NumeroDocumento`),
  ADD KEY `idx_pedido_fecha` (`FechaCreacion`),
  ADD KEY `fk_pedido_tipodoc` (`TipoDocumentoId`),
  ADD KEY `fk_pedido_ubigeo` (`UbigeoId`);

--
-- Indices de la tabla `productos`
--
ALTER TABLE `productos`
  ADD PRIMARY KEY (`ProductoId`),
  ADD UNIQUE KEY `Codigo` (`Codigo`),
  ADD KEY `fk_producto_categoria` (`CategoriaId`),
  ADD KEY `fk_producto_subcategoria` (`SubCategoriaId`);
ALTER TABLE `productos` ADD FULLTEXT KEY `ft_productos_busqueda` (`Nombre`,`Descripcion`);

--
-- Indices de la tabla `produnidades`
--
ALTER TABLE `produnidades`
  ADD PRIMARY KEY (`UnidadId`),
  ADD KEY `idx_productoid` (`ProductoId`);

--
-- Indices de la tabla `subcategorias`
--
ALTER TABLE `subcategorias`
  ADD PRIMARY KEY (`SubCategoriaId`),
  ADD KEY `fk_subcategoria_categoria` (`CategoriaId`);

--
-- Indices de la tabla `tipodocumento`
--
ALTER TABLE `tipodocumento`
  ADD PRIMARY KEY (`TipoDocumentoId`);

--
-- Indices de la tabla `ubigeo`
--
ALTER TABLE `ubigeo`
  ADD PRIMARY KEY (`UbigeoId`),
  ADD KEY `idx_ubigeo_dpto` (`Departamento`),
  ADD KEY `idx_ubigeo_prov` (`Departamento`,`Provincia`);

--
-- Indices de la tabla `usuarios`
--
ALTER TABLE `usuarios`
  ADD PRIMARY KEY (`UsuarioId`),
  ADD UNIQUE KEY `uq_email` (`Email`);

--
-- AUTO_INCREMENT de las tablas volcadas
--

--
-- AUTO_INCREMENT de la tabla `categorias`
--
ALTER TABLE `categorias`
  MODIFY `CategoriaId` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `pedidodetalles`
--
ALTER TABLE `pedidodetalles`
  MODIFY `DetalleId` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `pedidos`
--
ALTER TABLE `pedidos`
  MODIFY `PedidoId` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `productos`
--
ALTER TABLE `productos`
  MODIFY `ProductoId` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `produnidades`
--
ALTER TABLE `produnidades`
  MODIFY `UnidadId` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `subcategorias`
--
ALTER TABLE `subcategorias`
  MODIFY `SubCategoriaId` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `usuarios`
--
ALTER TABLE `usuarios`
  MODIFY `UsuarioId` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;

--
-- Restricciones para tablas volcadas
--

--
-- Filtros para la tabla `pedidodetalles`
--
ALTER TABLE `pedidodetalles`
  ADD CONSTRAINT `fk_detalle_pedido` FOREIGN KEY (`PedidoId`) REFERENCES `pedidos` (`PedidoId`) ON DELETE CASCADE ON UPDATE CASCADE,
  ADD CONSTRAINT `fk_detalle_producto` FOREIGN KEY (`ProductoId`) REFERENCES `productos` (`ProductoId`),
  ADD CONSTRAINT `fk_detalle_unidad` FOREIGN KEY (`UnidadId`) REFERENCES `produnidades` (`UnidadId`);

--
-- Filtros para la tabla `pedidos`
--
ALTER TABLE `pedidos`
  ADD CONSTRAINT `fk_pedido_tipodoc` FOREIGN KEY (`TipoDocumentoId`) REFERENCES `tipodocumento` (`TipoDocumentoId`),
  ADD CONSTRAINT `fk_pedido_ubigeo` FOREIGN KEY (`UbigeoId`) REFERENCES `ubigeo` (`UbigeoId`) ON DELETE SET NULL ON UPDATE CASCADE;

--
-- Filtros para la tabla `productos`
--
ALTER TABLE `productos`
  ADD CONSTRAINT `fk_producto_categoria` FOREIGN KEY (`CategoriaId`) REFERENCES `categorias` (`CategoriaId`) ON DELETE SET NULL ON UPDATE CASCADE,
  ADD CONSTRAINT `fk_producto_subcategoria` FOREIGN KEY (`SubCategoriaId`) REFERENCES `subcategorias` (`SubCategoriaId`) ON DELETE SET NULL ON UPDATE CASCADE;

--
-- Filtros para la tabla `produnidades`
--
ALTER TABLE `produnidades`
  ADD CONSTRAINT `fk_unidad_producto` FOREIGN KEY (`ProductoId`) REFERENCES `productos` (`ProductoId`) ON DELETE CASCADE ON UPDATE CASCADE;

--
-- Filtros para la tabla `subcategorias`
--
ALTER TABLE `subcategorias`
  ADD CONSTRAINT `fk_subcategoria_categoria` FOREIGN KEY (`CategoriaId`) REFERENCES `categorias` (`CategoriaId`) ON DELETE SET NULL ON UPDATE CASCADE;
COMMIT;

