/// <summary>
        /// Consulta de reporte de ventas en un periodo de tiempo
        /// </summary>
        /// <param name="fechaInicio">Fecha de inicio</param>
        /// <param name="fechaFin">Fecha de llegada</param>
        /// <returns>DataTable</returns>
        public static DataTable Reporte_Periodos(String fechaInicio, String fechaFin)
        {
            DataTable Resultado = new DataTable();
            String Consulta;
            DBOperacion oConsulta = new DataManager.CLS.DBOperacion();
            try
            {
                Consulta = @"select DATE_FORMAT(o.Fecha,'%d/%m/%Y') 'dia',
                                sum((select count(*) from facturas f where f.idorden=o.idorden)) 'facturas',
                                sum((select sum(fp.cantidad) from facturaproductos fp inner join facturas f on fp.idfactura=f.idfactura
                                    where f.idorden=o.idorden)) 'productos',
                                sum((select sum(fp.descuento) from facturaproductos fp inner join facturas f on fp.idfactura=f.idfactura where f.idorden=o.idorden)) 'descuentos',
                                sum((select sum(fp.Cantidad*p.PrecioCompra) from facturaproductos fp inner join productos p on fp.idproducto=p.idproducto
                                    inner join facturas f on fp.idfactura=f.idfactura where f.idorden=o.idorden)) 'costos',
                                sum((select sum(fp.SubTotal-fp.Descuento) from facturaproductos fp inner join facturas f on fp.idfactura=f.idfactura where f.idorden=o.idorden)) 'totales'
                            from ordenes o where date(o.fecha) between '" + fechaInicio+"' and '"+fechaFin+ "' group by dia;";
                Resultado = oConsulta.Consultar(Consulta);
            }
            catch (Exception e)
            {
                Console.WriteLine("error al consultar Factura" + e);
                Resultado = new DataTable();
            }

            return Resultado;
        }
        /// <summary>
        /// Consulta de reportes movimiento de productos vendidos en un periodo de tiempo
        /// </summary>
        /// <param name="fechaInicio">Fecha de inicio</param>
        /// <param name="fechaFin">Fecha de llegada</param>
        /// <returns>DataTable</returns>
        public static DataTable Reporte_Movimiento_Productos(String fechaInicio, String fechaFin)
        {
            DataTable Resultado = new DataTable();
            String Consulta;
            DBOperacion oConsulta = new DataManager.CLS.DBOperacion();
            try
            {
                Consulta = @"select p.NombreProducto 'Producto',
                    (select count(*) from facturaproductos fp inner join facturas f on fp.idfactura=f.idfactura where f.facturado=true
                    and fp.idproducto=p.idproducto) 'CantFacturas',
                    (select sum(fp.cantidad) from facturaproductos fp inner join facturas f on fp.idfactura=f.idfactura where f.facturado=true
                    and fp.idproducto=p.idproducto) 'CantUnidades',
                    (select sum(fp.Descuento) from facturaproductos fp where fp.idproducto=p.idproducto) 'Descuentos',
                    (select sum(fp.Cantidad*p.PrecioCompra)from facturaproductos fp inner join facturas f on fp.idfactura=f.idfactura where f.facturado=true
                    and fp.idproducto=p.idproducto) 'Costos',
                    (select sum(fp.SubTotal-fp.Descuento) from facturaproductos fp where fp.idproducto=p.idproducto) 'Totales'
             from productos p inner join facturaproductos fp on p.idproducto=fp.idproducto inner join facturas f on fp.idfactura=f.idfactura
             inner join ordenes o on f.idorden=o.idorden where date(o.fecha) between '"+fechaInicio+"' and '"+fechaFin+ "' group by Producto";
                Resultado = oConsulta.Consultar(Consulta);
            }
            catch (Exception e)
            {
                Console.WriteLine("error al consultar Factura" + e);
                Resultado = new DataTable();
            }

            return Resultado;
        }
        /// <summary>
        /// Consulta de usuarios
        /// </summary>
        /// <returns>DataTable</returns>
        public static DataTable consultaUsuarios()
        {
            DataTable Resultado = new DataTable();
            String Consulta;
            DataManager.CLS.DBOperacion oConsulta = new DataManager.CLS.DBOperacion();
            try
            {
                Consulta = @"Select u.IDUsuario, u.IDEmpleado, u.Usuario, u.Contrasena, u.IDRol from Usuarios u";
                Resultado = oConsulta.Consultar(Consulta);
            }
            catch (Exception e)
            {
                Console.WriteLine("error al consultar Usuarios" + e);
                Resultado = new DataTable();
            }

            return Resultado;
        }
        /// <summary>
        /// Consulta de los roles
        /// </summary>
        /// <returns>DataTable</returns>
        public static DataTable ConsultaRoles()
        {
            DataTable Resultado = new DataTable();
            String Consulta;
            DBOperacion oConsulta = new DataManager.CLS.DBOperacion();
            try
            {
                Consulta = @"Select r.IDRol, r.Rol, r.Funcion from roles r";
                Resultado = oConsulta.Consultar(Consulta);
            }
            catch (Exception e)
            {
                Console.WriteLine("error al consultar Roles" + e);
                Resultado = new DataTable();
            }

            return Resultado;
        }
        /// <summary>
        /// Consulta a procedimiennto almacenado para crear una factura
        /// </summary>
        /// <param name="pIDEmpleado">Id del empleado</param>
        /// <returns>DataTable</returns>
        public static DataTable ConsultarFactura(String pIDEmpleado)
        {
            DataTable Resultado = new DataTable();
            String Consulta;
            DBOperacion oConsulta = new DataManager.CLS.DBOperacion();
            try
            {
                Consulta = @"SELECT GestionFactura(" + pIDEmpleado + @") 'IDFactura';";
                Resultado = oConsulta.Consultar(Consulta);
            }
            catch (Exception e)
            {
                Console.WriteLine("error al consultar Factura" + e);
                Resultado = new DataTable();
            }

            return Resultado;
        }
        /// <summary>
        /// Modificacion de usuario
        /// </summary>
        /// <param name="clave">usuario</param>
        /// <returns>DataTable</returns>
        public static DataTable modificacionUsuario(String clave)
        {
            DataTable Resultado = new DataTable();
            String Consulta;
            DataManager.CLS.DBOperacion oConsulta = new DataManager.CLS.DBOperacion();
            try
            {
                Consulta = @"SELECT u.IDUsuario, u.IDEmpleado, u.Usuario, u.Contrasena, u.IDRol FROM "
                    + "Usuarios u WHERE u.Usuario = BINARY '" + clave + "'";
                Resultado = oConsulta.Consultar(Consulta);
            }
            catch (Exception e)
            {
                Console.WriteLine("error al consultar Usuarios" + e);
                Resultado = new DataTable();
            }

            return Resultado;
        }
        /// <summary>
        /// Consultar el usuario segun el empleado
        /// </summary>
        /// <returns>DataTable</returns>
        public static DataTable consultaUsuariosEmpleados()
        {
            DataTable Resultado = new DataTable();
            String Consulta;
            DataManager.CLS.DBOperacion oConsulta = new DataManager.CLS.DBOperacion();
            try
            {
                Consulta = @"Select u.IDUsuario, u.Contrasena, u.Usuario, r.Rol, e.Nombres," +
                    "e.Apellidos, e.Cargo from Usuarios u, Empleados e, Roles r where u.IDEmpleado=e.IDEmpleado" +
                    " and u.IDRol=r.IDRol";
                Resultado = oConsulta.Consultar(Consulta);
            }
            catch (Exception e)
            {
                Console.WriteLine("error al consultar Usuarios" + e);
                Resultado = new DataTable();
            }

            return Resultado;
        }
        //----------------------------------------------------------       Reportes
        /// <summary>
        /// Consulta para Reporte de productos
        /// </summary>
        /// <returns>DataTable</returns>
        public static DataTable ReporteProductos()
        {
            DataTable Resultado = new DataTable();
            String Consulta;
            DBOperacion oConsulta = new DataManager.CLS.DBOperacion();
            try
            {
                Consulta = @"select
                             p.NombreProducto 'Producto', p.Marca, p.PrecioCompra 'Costo', p.PrecioVenta 'Precio', p.Descuento, p.Existencias,
                             c.NombreCategoria 'Categoria', pr.Nombre 'Proveedor', p.fechaCompra 'F.Compra', p.fechaVencimiento 'F.Vencimiento', p.Presentacion
                             from Productos p INNER JOIN Categorias c ON p.IDCategoria=c.IDCategoria INNER JOIN Proveedores pr ON p.IDProveedor=pr.IDProveedor";
                Resultado = oConsulta.Consultar(Consulta);
            }
            catch (Exception e)
            {
                Console.WriteLine("error al consultar Factura" + e);
                Resultado = new DataTable();
            }

            return Resultado;
        }
        /// <summary>
        /// Consulta reporte de las facturas creadas en un dia especifico
        /// </summary>
        /// <returns>DataTable</returns>
        public static DataTable ConsultaFacturaVentas()
        {
            DataTable Resultado = new DataTable();
            String Consulta;
            DBOperacion oConsulta = new DataManager.CLS.DBOperacion();
            try
            {
                Consulta = @"SELECT f.IDFactura, time(o.Fecha) 'Hora', f.NumFactura, e.Nombres 'Empleado'
                                FROM Ordenes o INNER JOIN Facturas f ON o.IDOrden=f.IDOrden
                                INNER JOIN Empleados e ON O.IDEmpleado = e.IDEmpleado where date(o.Fecha)=date(now())
                                and f.Estado=true and f.Facturado=true order by Hora desc;";
                Resultado = oConsulta.Consultar(Consulta);
            }
            catch (Exception e)
            {
                Console.WriteLine("error al consultar Factura" + e);
                Resultado = new DataTable();
            }

            return Resultado;
        }
        /// <summary>
        /// Consulta de reporte para ver una factura en especifico
        /// </summary>
        /// <param name="pNumFactura">Id factura</param>
        /// <returns>DataTable</returns>
        public static DataTable ReporteNumFactura(String pNumFactura)
        {
            DataTable Resultado = new DataTable();
            String Consulta;
            DBOperacion oConsulta = new DataManager.CLS.DBOperacion();
            try
            {
                Consulta = @"select fp.cantidad, p.NombreProducto 'Producto', p.PrecioVenta 'Precio', fp.Descuento, fp.subtotal, o.Fecha, " +
                            @"f.Cliente, e.Nombres 'Empleado' " +
                            @"from facturaproductos fp inner join facturas f on fp.idFactura=f.idfactura " +
                            @"inner join productos p on fp.idproducto=p.idproducto inner join Ordenes o on o.IDOrden=f.IDOrden " +
                            @"inner join Empleados e on o.IDEmpleado=e.IDEmpleado where f.NumFactura=" + pNumFactura + " and f.Estado=true and f.Facturado=true";
                Resultado = oConsulta.Consultar(Consulta);
            }
            catch (Exception e)
            {
                Console.WriteLine("error al consultar Factura" + e);
                Resultado = new DataTable();
            }

            return Resultado;
        }
        public static DataTable ReporteF_Mes(String pMes, String pAnio)
        {
            DataTable Resultado = new DataTable();
            String Consulta;
            DBOperacion oConsulta = new DataManager.CLS.DBOperacion();
            try
            {
                Consulta = @"select day(o.Fecha) 'Dia', count(f.IDFactura) 'Numfacturas', sum(
                                 (select sum(p.PrecioCompra*fp.Cantidad) from productos p
                                   inner join facturaproductos fp on p.IDProducto=fp.IDProducto where fp.IDFactura=f.IDFactura)) 'Costos',
                                 sum(f.Total) 'Ventas'
                                from facturas f inner join Ordenes o on f.IDOrden=o.IDOrden  where month(o.Fecha)="+pMes+" and year(o.Fecha)="+pAnio+" group by Dia;";
                Resultado = oConsulta.Consultar(Consulta);
            }
            catch (Exception e)
            {
                Console.WriteLine("error al consultar Factura" + e);
                Resultado = new DataTable();
            }

            return Resultado;
        }
        /// <summary>
        /// Consulta reporte de un año en especifico
        /// </summary>
        /// <param name="pAnio">Id año</param>
        /// <returns>DataTable</returns>
        public static DataTable ReporteF_Anio(String pAnio)
        {
            DataTable Resultado = new DataTable();
            String Consulta;
            DBOperacion oConsulta = new DataManager.CLS.DBOperacion();
            try
            {
                Consulta = @"SELECT
                                case month(o.Fecha)
                                WHEN 1 THEN 'Enero'
                                WHEN 2 THEN  'Febrero'
                                WHEN 3 THEN 'Marzo'
                                WHEN 4 THEN 'Abril'
                                WHEN 5 THEN 'Mayo'
                                WHEN 6 THEN 'Junio'
                                WHEN 7 THEN 'Julio'
                                WHEN 8 THEN 'Agosto'
                                WHEN 9 THEN 'Septiembre'
                                WHEN 10 THEN 'Octubre'
                                WHEN 11 THEN 'Noviembre'
                                WHEN 12 THEN 'Diciembre'
                                 END 'Mes',
                                count(f.idfactura) 'NumFacturas',
                                 sum((select sum(p.PrecioCompra*fp.Cantidad) from productos p
                                 inner join facturaproductos fp on p.idproducto=fp.idproducto
                                 where fp.idfactura=f.idfactura)) 'Costos', sum(f.Total) 'Ventas'
                                 from Ordenes o inner join facturas f on o.idorden=f.idorden where year(o.Fecha)="
                                 + pAnio + " group by Mes order by month(o.Fecha) asc";
                Resultado = oConsulta.Consultar(Consulta);
            }
            catch (Exception e)
            {
                Console.WriteLine("error al consultar Factura" + e);
                Resultado = new DataTable();
            }

            return Resultado;
        }
        /// <summary>
        /// Consulta de los permisos segun el rol 
        /// </summary>
        /// <param name="pIDRol">Id rol</param>
        /// <returns>DataTable</returns>
        public static DataTable AsignacionPermisos(String pIDRol)
        {
            DataTable Resultado = new DataTable();
            String Consulta;
            DBOperacion oConsulta = new DataManager.CLS.DBOperacion();
            try
            {
                Consulta = @"SELECT
                                IDOpcion, Opcion, a.IDClasificacion,b.Clasificacion,
                                IFNULL((SELECT IDPermiso FROM Permisos z WHERE z.IDRol=" + pIDRol + @"         AND z.IDOpcion=a.IDOpcion),0) 'IDPermiso',
                                IF(IFNULL((SELECT IDPermiso FROM Permisos z WHERE z.IDRol=" + pIDRol + @" AND z.IDOpcion=a.IDOpcion),0)>0,1,0) 'Asignado'
                            FROM Opciones a, Clasificaciones b
                            WHERE a.IDClasificacion=b.IDClasificacion";
                Resultado = oConsulta.Consultar(Consulta);
            }
            catch (Exception e)
            {
                Console.WriteLine("error al consultar Roles" + e);
                Resultado = new DataTable();
            }

            return Resultado;
        }
        /// <summary>
        /// Consulta de reporte en un dia especifico
        /// </summary>
        /// <param name="pFecha">Fecha</param>
        /// <returns>DataTable</returns>
        public static DataTable ReporteF_Dia(String pFecha)
        {
            DataTable Resultado = new DataTable();
            String Consulta;
            DBOperacion oConsulta = new DataManager.CLS.DBOperacion();
            try
            {
                Consulta = @"SELECT f.NumFactura , Time(o.Fecha) 'Hora', e.Nombres 'Empleado',
                                (select sum(p.PrecioCompra*fp.Cantidad)
                                    from productos p inner join facturaproductos
                                    fp on p.idproducto = fp.idproducto where fp.IDFactura=f.IDFactura)
                                'Costos', f.Total
                                FROM Ordenes o INNER JOIN Facturas f ON o.IDOrden=f.IDOrden
                                INNER JOIN Empleados e ON O.IDEmpleado = e.IDEmpleado WHERE DATE(o.Fecha) = date('"+pFecha+"');";
                Resultado = oConsulta.Consultar(Consulta);
            }
            catch (Exception e)
            {
                Console.WriteLine("error al consultar Factura" + e);
                Resultado = new DataTable();
            }

            return Resultado;
        }