public List<ProductoTurnoVO> consultarProductosAgrupados(DateTime fecha1, DateTime fecha2)
        {
            List<ProductoTurnoVO> productos = new List<ProductoTurnoVO>();
            try
            {
                string sqlQuery = "Select v.Fecha, v.Producto, sum(v.Galones), sum(v.Valor) From EstacionDB.VO.ProductoTurnoVO v Where Fecha Between :Fecha1 And :Fecha2 Group By v.Fecha, v.Producto";
                IQuery query = ConnectionHelper.getCurrentSession(Utilidades.Utilidades.configExpo).CreateQuery(sqlQuery);
                query.SetParameter("Fecha1", fecha1);
                query.SetParameter("Fecha2", fecha2);
                IList tmp = query.List();

                foreach (object[] producto in tmp)
                {
                    ProductoTurnoVO p = new ProductoTurnoVO();
                    p.Fecha = DateTime.Parse(producto[0].ToString());
                    p.Producto = producto[1].ToString();
                    p.Galones = double.Parse(producto[2].ToString());
                    p.Valor = double.Parse(producto[3].ToString());
                    productos.Add(p);
                }

                ConnectionHelper.CloseSession();

                return productos;
            }
            catch (System.Exception ex)
            {
                ConnectionHelper.CloseSession();
                throw new EstacionDBException("Error al leer la información de la tabla Productos_turno Expo.", ex);

            }
        }
        private void cmdCargarLecturas_Click(object sender, EventArgs e)
        {
            totalConsumos = 0;
            DateTime fecha = new DateTime(fechaDesdePicker.Value.Year, fechaDesdePicker.Value.Month, fechaDesdePicker.Value.Day);
            productosTurno.Clear();

            if (!txtLecIniCorriente.Text.Equals("") && !txtLecFinCorriente.Text.Equals(""))
            {
                double lecInicialCorriente = Utilidades.parsearDecimal(txtLecIniCorriente.Text);
                double lecFinCorriente = Utilidades.parsearDecimal(txtLecFinCorriente.Text);
                double consumoCorriente = lecFinCorriente - lecInicialCorriente;

                SobretasaVO s = cp.consultarSobretasasProductoFecha(fecha.Month, fecha.Year, 1, fecha.Day);
                if (s != null)
                {
                    ProductoTurnoVO ptCorriente = new ProductoTurnoVO();
                    ptCorriente.Fecha = fecha;
                    ptCorriente.Galones = consumoCorriente;
                    ptCorriente.Isla = long.Parse(txtIsla.Text.Trim());
                    ptCorriente.Turno = long.Parse(txtTurno.Text.Trim());

                    consumoCorriente *= s.Venta;

                    ptCorriente.Valor = consumoCorriente;
                    productosTurno.Add(ptCorriente);

                    totalConsumos += consumoCorriente;
                }
                else
                {
                    MessageBox.Show("Falta la información de sobretasa Corriente vigente para la fecha seleccionada", "Falta información", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            if (!txtLecIniSuper.Text.Equals("") && !txtLecFinSuper.Text.Equals(""))
            {
                double lecInicialSuper = Utilidades.parsearDecimal(txtLecIniSuper.Text);
                double lecFinSuper = Utilidades.parsearDecimal(txtLecFinSuper.Text);
                double consumoSuper = lecFinSuper - lecInicialSuper;

                SobretasaVO s = cp.consultarSobretasasProductoFecha(fecha.Month, fecha.Year, 2, fecha.Day);
                if (s != null)
                {
                    ProductoTurnoVO ptSuper = new ProductoTurnoVO();
                    ptSuper.Fecha = fecha;
                    ptSuper.Galones = consumoSuper;
                    ptSuper.Isla = long.Parse(txtIsla.Text.Trim());
                    ptSuper.Turno = long.Parse(txtTurno.Text.Trim());

                    consumoSuper *= s.Venta;

                    ptSuper.Valor = consumoSuper;
                    productosTurno.Add(ptSuper);

                    totalConsumos += consumoSuper;
                }
                else
                {
                    MessageBox.Show("Falta la información de sobretasa Super vigente para la fecha seleccionada", "Falta información", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            if (!txtLecIniDiesel.Text.Equals("") && !txtLecFinDiesel.Text.Equals(""))
            {
                double lecInicialDiesel = Utilidades.parsearDecimal(txtLecIniDiesel.Text);
                double lecFinDiesel = Utilidades.parsearDecimal(txtLecFinDiesel.Text);
                double consumoDiesel = lecFinDiesel - lecInicialDiesel;

                SobretasaVO s = cp.consultarSobretasasProductoFecha(fecha.Month, fecha.Year, 3, fecha.Day);
                if (s != null)
                {
                    ProductoTurnoVO ptDiesel = new ProductoTurnoVO();
                    ptDiesel.Fecha = fecha;
                    ptDiesel.Galones = consumoDiesel;
                    ptDiesel.Isla = long.Parse(txtIsla.Text.Trim());
                    ptDiesel.Turno = long.Parse(txtTurno.Text.Trim());

                    consumoDiesel *= s.Venta;

                    ptDiesel.Valor = consumoDiesel;
                    productosTurno.Add(ptDiesel);

                    totalConsumos += consumoDiesel;
                }
                else
                {
                    MessageBox.Show("Falta la información de sobretasa Diesel vigente para la fecha seleccionada", "Falta información", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }

            actualizarTotales();
        }
        public List<ProductoTurnoVO> consultarProductosTurno(string isla, long turno, DateTime fecha1, DateTime fecha2)
        {
            List<ProductoTurnoVO> productosTurno = new List<ProductoTurnoVO>();
            int multiplicador = 1;
            try
            {
                #region  se abre la conexión con la BD
                conectar(null);
                #endregion

                #region se preparan los objetos para hacer la consulta y leerla
                SqlDataReader reader = null;
                SqlCommand query = new SqlCommand("SELECT P.Fecha, P.Isla, P.Turno, P.Galones, P.Valor, P.Producto FROM ViewProductosTurno P " +
                        "WHERE P.Fecha BETWEEN '" + fecha1.ToString("dd-MM-yyyy") + "' AND '" + fecha2.ToString("dd-MM-yyyy") + "' AND Isla IN(" + isla + ") AND Turno = " + turno, con);
                #endregion

                #region se ejecuta el query, se lee el resultado y se procesa en el VO;
                reader = query.ExecuteReader();
                if (reader != null)
                {
                    // Si tiene reaultados los recorre fila por fila
                    while (reader.Read())
                    {
                        multiplicador = 1; // default
                        ProductoTurnoVO pt = new ProductoTurnoVO();
                        if (reader["Fecha"] != null) pt.Fecha = DateTime.Parse(reader["Fecha"].ToString());
                        if (reader["Turno"] != null) pt.Turno = long.Parse(reader["Turno"].ToString());
                        if (reader["Isla"] != null) pt.Isla = long.Parse(reader["Isla"].ToString());
                        if (reader["Producto"] != null) pt.Producto = reader["Producto"].ToString();
                        if (reader["Valor"] != null) pt.Valor = double.Parse(reader["Valor"].ToString());
                        if (reader["Galones"] != null) pt.Galones = double.Parse(reader["Galones"].ToString());
                        /*if (pt.Isla == 1 || pt.Isla == 2)
                        {
                            pt.Isla = 1;
                        }
                        else if (pt.Isla == 3 || pt.Isla == 4)
                        {
                            pt.Isla = 2;
                        }*/
                        if (pt.Producto.Trim().Equals("CORRIENTE"))
                        {
                            multiplicador = Utilidades.Utilidades.corrienteMultiplicarX;
                        }
                        if (pt.Producto.Trim().Equals("SUPER"))
                        {
                            multiplicador = Utilidades.Utilidades.superMultiplicarX;
                        }
                        if (pt.Producto.Trim().Equals("DIESEL"))
                        {
                            multiplicador = Utilidades.Utilidades.dieselMultiplicarX;
                        }
                        pt.Valor = (pt.Valor * multiplicador);
                        productosTurno.Add(pt);
                    }
                }
                #endregion

                desconectar();
                return productosTurno;
            }
            catch (System.Exception ex)
            {
                desconectar();
                throw new EstacionDBException("Error al leer la información de la vista Ventas.", ex);
            }
        }