private void cmdGuardar_Click(object sender, EventArgs e)
 {
     if(lecturaDTOBindingSource.Count > 0){
         try
         {
             DateTime fecha = DateTime.Parse(txtFecha.Text);
             IList lista = lecturaDTOBindingSource.List;
             LecturaDTO[] lecturas = new LecturaDTO[lista.Count];
             lista.CopyTo(lecturas, 0);
             //int rows = cp.procesarControles(fecha, lecturas);
             int rows = ControlTanquesCore.getInstance().procesarControles(fecha, lecturas);
             if (rows > 0)
             {
                 lecturaDTOBindingSource.Clear();
                 txtMedida.Text = "";
                 txtFecha.Text = "";
                 MessageBox.Show("Lecturas guardadas", "Datos guardados", MessageBoxButtons.OK, MessageBoxIcon.Information);
             }
             else
             {
                 MessageBox.Show("No se guardaron las lecturas", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
             }
         }
         catch (ControlCombustibleException ex)
         {
             MessageBox.Show("No se guardaron las lecturas", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
         }
     }
 }
        private void cmdAgregar_Click(object sender, EventArgs e)
        {
            //Consulta los galones a partir de la fecha, de la medida de la vara, del producto y tipo de tanque
            if (!txtFecha.Text.Equals("") && !txtMedida.Text.Equals(""))
            {
                DateTime fecha = DateTime.Parse(txtFecha.Text);
                LecturaDTO lectura = cp.consultarNivel((int)cboProducto.SelectedValue, (int)cboTanque.SelectedValue, double.Parse(txtMedida.Text));
                if (lectura != null)
                {
                    lectura.Producto = ((ProductoVO)cboProducto.SelectedItem).Nombre;
                    lectura.Tanque = ((TanqueVO)cboTanque.SelectedItem).Descripcion;
                    lectura.Nivel = double.Parse(txtMedida.Text);
                    lecturaDTOBindingSource.Add(lectura);
                }
                else
                {
                    MessageBox.Show("No hay información en las tablas de aforo para el producto y tanque seleccionados", "No hay información", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
            }
            //Consulta los galones a partir de la fecha y del producto
            else if (!txtFecha.Text.Equals("") && txtMedida.Text.Equals(""))
            {
                DateTime fecha = DateTime.Parse(txtFecha.Text);
                double galones = cp.consultarLecturaFinalProducto(fecha, fecha,(int)cboProducto.SelectedValue);
                LecturaDTO lectura = new LecturaDTO();
                lectura.IdProducto = ((ProductoVO)cboProducto.SelectedItem).IdProducto;
                lectura.Producto = ((ProductoVO)cboProducto.SelectedItem).Nombre;
                lectura.IdTanque = ((TanqueVO)cboTanque.SelectedItem).IdTanque;
                lectura.Tanque = ((TanqueVO)cboTanque.SelectedItem).Descripcion;
                lectura.Nivel = 0;
                lectura.Galones = galones;
                lecturaDTOBindingSource.Add(lectura);

                //MessageBox.Show("Debe llenar todos la fecha, producto, tanque y nivel", "Campos requeridos", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }
 public LecturaDTO consultarNivel(int idProducto, int idTanque, double nivel)
 {
     LecturaDTO lectura = null;
     nivel = Utilidades.redondear(nivel);
     VolumenTanqueVO vt = getVolumenesDAO().consultarVolumen(idTanque, idProducto, nivel);
     if (vt != null)
     {
         lectura = new LecturaDTO();
         lectura.Galones = Math.Round(vt.Galones, 0, MidpointRounding.AwayFromZero);
         lectura.IdProducto = vt.IdProducto;
         lectura.IdTanque = vt.IdTanque;
     }
     return lectura;
 }
        public int procesarControles(DateTime fecha, LecturaDTO[] lecturas)
        {
            int rows = 0;
            bool isCorriente = false;
            bool isSuper = false;
            bool isDiesel = false;
            ControlCombustibleVO controlCorriente = new ControlCombustibleVO();
            ControlCombustibleVO controlSuper = new ControlCombustibleVO();
            ControlCombustibleVO controlDiesel = new ControlCombustibleVO();

            try
            {

                for (int i = 0; i < lecturas.Length; i++)
                {
                    int idProd = lecturas[i].IdProducto;
                    switch (idProd)
                    {
                        //Corriente
                        case 1:
                            {
                                controlCorriente.InventarioFinal += (int)lecturas[i].Galones;
                                isCorriente = true;
                                break;
                            }
                        //Super
                        case 2:
                            {
                                controlSuper.InventarioFinal += (int)lecturas[i].Galones;
                                isSuper = true;
                                break;
                            }
                        //Diesel
                        case 3:
                            {
                                controlDiesel.InventarioFinal += (int)lecturas[i].Galones;
                                isDiesel = true;
                                break;
                            }
                    }
                }
                DateTime diaAnterior = fecha.AddDays(-1);
                //Corriente
                if (isCorriente)
                {
                    controlCorriente.IdProducto = 1;
                    controlCorriente.Fecha = fecha;
                    controlCorriente.GalonesCompra = (int)this.consultarComprasGalonesFechaProducto(1, fecha);
                    controlCorriente.InventarioInicial = (int)this.consultarSaldoAnterior(1, diaAnterior, diaAnterior);
                    controlCorriente.VentaMedida = (controlCorriente.GalonesCompra + controlCorriente.InventarioInicial) - controlCorriente.InventarioFinal;
                    controlCorriente.VentaSurtidor = (int)this.consultarVentaProducto(fecha, fecha, 1);
                    controlCorriente.SobranteDia = controlCorriente.VentaSurtidor - controlCorriente.VentaMedida;
                    controlCorriente.SobranteAcumulado = controlCorriente.SobranteDia + (int)this.consultarAcumuladoAnterior(1, diaAnterior, diaAnterior);
                    controlCorriente.Procentaje = (double)(((double)controlCorriente.SobranteDia / (double)(controlCorriente.GalonesCompra + controlCorriente.InventarioInicial)) * 100);

                    rows += this.guardarControlCombustible(controlCorriente);
                }

                //Super
                if (isSuper)
                {
                    controlSuper.IdProducto = 2;
                    controlSuper.Fecha = fecha;
                    controlSuper.GalonesCompra = (int)this.consultarComprasGalonesFechaProducto(2, fecha);
                    controlSuper.InventarioInicial = (int)this.consultarSaldoAnterior(2, diaAnterior, diaAnterior);
                    controlSuper.VentaMedida = (controlSuper.GalonesCompra + controlSuper.InventarioInicial) - controlSuper.InventarioFinal;
                    controlSuper.VentaSurtidor = (int)this.consultarVentaProducto(fecha, fecha, 2);
                    controlSuper.SobranteDia = controlSuper.VentaSurtidor - controlSuper.VentaMedida;
                    controlSuper.SobranteAcumulado = controlSuper.SobranteDia + (int)this.consultarAcumuladoAnterior(2, diaAnterior, diaAnterior);
                    controlSuper.Procentaje = (double)(((double)controlSuper.SobranteDia / (double)(controlSuper.GalonesCompra + controlSuper.InventarioInicial)) * 100);

                    rows += this.guardarControlCombustible(controlSuper);
                }

                //Diesel
                if (isDiesel)
                {
                    controlDiesel.IdProducto = 3;
                    controlDiesel.Fecha = fecha;
                    controlDiesel.GalonesCompra = (int)this.consultarComprasGalonesFechaProducto(3, fecha);
                    controlDiesel.InventarioInicial = (int)this.consultarSaldoAnterior(3, diaAnterior, diaAnterior);
                    controlDiesel.VentaMedida = (controlDiesel.GalonesCompra + controlDiesel.InventarioInicial) - controlDiesel.InventarioFinal;
                    controlDiesel.VentaSurtidor = (int)this.consultarVentaProducto(fecha, fecha, 3);
                    controlDiesel.SobranteDia = controlDiesel.VentaSurtidor - controlDiesel.VentaMedida;
                    controlDiesel.SobranteAcumulado = controlDiesel.SobranteDia + (int)this.consultarAcumuladoAnterior(3, diaAnterior, diaAnterior);
                    controlDiesel.Procentaje = (double)(((double)controlDiesel.SobranteDia / (double)(controlDiesel.GalonesCompra + controlDiesel.InventarioInicial)) * 100);

                    rows += this.guardarControlCombustible(controlDiesel);
                }
            }
            catch (PersistenciaException ex)
            {
                throw new PersistenciaException("Error al procesar las lecturas", ex);
            }
            return rows;
        }