private void AgregarRetiro()
        {
            try
            {
                var lstDoctosPV = (List<DoctosPV>)(GridCajaFuerte.DataSource);

                if (lstDoctosPV.Count > 0)
                {
                    DoctosPV doctos = new DoctosPV();
                    doctos.CajaID = 0;
                    doctos.NombreCaja = "Retiro " + (lstDoctosPV.Count + 1);
                    doctos.Neto = 0;
                    doctos.Impuesto = 0;

                    lstDoctosPV.Add(doctos);

                    GridCajaFuerte.DataSource = lstDoctosPV;
                    gvCajaFuerte.RefreshData();
                }
            }
            catch (InvalidCastException ex)
            {
                Logger.AgregarLog(ex.Message);
                MessageBox.Show("Primero debe cargar los datos...", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        private void AgregarRenglonAlGrid(DevExpress.XtraGrid.GridControl Grid, DevExpress.XtraGrid.Views.Grid.GridView GV)
        {
            var lstDoctosPV = (List<DoctosPV>)(Grid.DataSource);

            if (lstDoctosPV.Count >= 0)
            {
                DoctosPV doctos = new DoctosPV();
                doctos.CajaID = 0;
                doctos.NombreCaja = "Concepto " + (lstDoctosPV.Count + 1);
                doctos.Neto = 0;
                doctos.Impuesto = 0;

                lstDoctosPV.Add(doctos);

                Grid.DataSource = lstDoctosPV;
                GV.RefreshData();
            }
        }
        private void AgregarImporteTarjeta()
        {
            var lstDoctosPV = (List<DoctosPV>)(gridTarjetas.DataSource);

            if (lstDoctosPV.Count >= 0)
            {
                DoctosPV doctos = new DoctosPV();
                doctos.CajaID = 0;
                doctos.NombreCaja = "Terminal " + (lstDoctosPV.Count + 1);
                doctos.Neto = 0;
                doctos.Impuesto = 0;

                lstDoctosPV.Add(doctos);

                gridTarjetas.DataSource = lstDoctosPV;
                gvTarjetas.RefreshData();
            }
        }
        private void CargarFaltantesSobrantes()
        {
            FBDAL dal = new FBDAL();
            List<Cajas> lstCajas = dal.ObtenerCajas();

            DoctosPV FaltanteSobrante;
            List<DoctosPV> lstFaltanteSobrante = new List<DoctosPV>();
            foreach (Cajas caja in lstCajas)
            {
                FaltanteSobrante = new DoctosPV();
                decimal dTotalEsperado = dal.ObtenerVentaTotalDeCajaEsperado(caja.ID, hoy);
                decimal dTotalReal = dal.ObtenerVentaTotalDeCajaReal(caja.ID, hoy);
                decimal dFaltanteSobrante = dTotalReal - dTotalEsperado;

                if (dTotalReal != 0)
                {
                    FaltanteSobrante.CajaID = caja.ID;
                    FaltanteSobrante.NombreCaja = caja.Nombre;
                    FaltanteSobrante.Neto = dFaltanteSobrante;
                    FaltanteSobrante.Impuesto = 0;
                    lstFaltanteSobrante.Add(FaltanteSobrante);
                }
            }

            gridFaltantesSobrantes.DataSource = lstFaltanteSobrante;
            gvFaltantesSobrantes.BestFitColumns();
        }
        private List<DoctosPV> ObtenerDevolucionesDePuntoDeVenta(DateTime fecha)
        {
            List<DoctosPV> lstDoctosPV = null;

            try
            {
                // La conexion ya debe estar abierta
                Comando.Connection = Conexion;
                Comando.CommandText =
                    string.Format(@"SELECT
                                      CAJAS.CAJA_ID,
                                      CAJAS.NOMBRE,
                                      - DOCTOS_PV.IMPORTE_NETO AS IMPORTE_NETO,
                                      - DOCTOS_PV.TOTAL_IMPUESTOS AS TOTAL_IMPUESTOS,
                                      DOCTOS_PV.FECHA,
                                      DOCTOS_PV.HORA
                                    FROM
                                      CAJAS
                                      INNER JOIN DOCTOS_PV ON (CAJAS.CAJA_ID = DOCTOS_PV.CAJA_ID)
                                    WHERE
                                      DOCTOS_PV.FECHA = '{0}' AND
                                      DOCTOS_PV.ESTATUS = 'N' AND
                                      DOCTOS_PV.TIPO_DOCTO = 'D'", fecha.ToString("yyyy-MM-dd"));
                Adapter.SelectCommand = Comando;
                DataTable resultado = new DataTable();

                Adapter.Fill(resultado);

                DoctosPV DoctoPV;
                lstDoctosPV = new List<DoctosPV>();
                foreach (DataRow fila in resultado.Rows)
                {
                    DoctoPV = new DoctosPV();
                    DoctoPV.CajaID = Convert.ToInt32(fila["CAJA_ID"]);
                    DoctoPV.NombreCaja = Convert.ToString(fila["NOMBRE"]);
                    DoctoPV.Fecha = Convert.ToDateTime(fila["FECHA"]);
                    DoctoPV.Hora = (TimeSpan)fila["HORA"];
                    DoctoPV.Neto = Convert.ToDecimal(fila["IMPORTE_NETO"]);
                    DoctoPV.Impuesto = Convert.ToDecimal(fila["TOTAL_IMPUESTOS"]);

                    lstDoctosPV.Add(DoctoPV);
                }
            }
            catch (Exception ex)
            {
                Logger.AgregarLog(ex.Message);
            }

            return lstDoctosPV;
        }
        public List<DoctosPV> ObtenerRetirosDeCajas(DateTime fecha)
        {
            List<DoctosPV> lstDoctosPV = null;
            try
            {
                Conexion.ConnectionString = ObtenerStringDeConexion();
                Conexion.Open();

                Comando.Connection = Conexion;
                Comando.CommandText =
                    string.Format(@"SELECT
                                      MC.CAJA_ID,
                                      C.NOMBRE,
                                      MCF.IMPORTE AS IMPORTE_NETO,
                                      0 AS TOTAL_IMPUESTOS
                                    FROM
                                      MOVTOS_CAJAS_FONDO MCF
                                      INNER JOIN MOVTOS_CAJAS MC ON (MCF.MOVTO_CAJA_ID = MC.MOVTO_CAJA_ID)
                                      INNER JOIN FORMAS_COBRO FC ON (MCF.FORMA_COBRO_ID = FC.FORMA_COBRO_ID)
                                      INNER JOIN CAJAS C ON (MC.CAJA_ID = C.CAJA_ID)
                                    WHERE
                                      MC.FECHA = '{0}' AND
                                      FC.TIPO = 'E'

                                    UNION

                                    SELECT
                                      C.CAJA_ID,
                                      C.NOMBRE,
                                      PV.IMPORTE_NETO,
                                      PV.TOTAL_IMPUESTOS
                                    FROM
                                      CAJAS C
                                      INNER JOIN DOCTOS_PV PV ON (C.CAJA_ID = PV.CAJA_ID)
                                    WHERE
                                      FECHA = '{0}' AND
                                      TIPO_DOCTO = 'R' AND
                                      ESTATUS = 'N'", fecha.ToString("yyyy-MM-dd"));

                DataTable resultado = new DataTable();
                Adapter.SelectCommand = Comando;
                Adapter.Fill(resultado);

                DoctosPV docto;
                lstDoctosPV = new List<DoctosPV>();
                foreach (DataRow fila in resultado.Rows)
                {
                    docto = new DoctosPV();
                    docto.CajaID = Convert.ToInt32(fila["CAJA_ID"]);
                    docto.NombreCaja = fila["NOMBRE"].ToString();
                    docto.Neto = Convert.ToDecimal(fila["IMPORTE_NETO"]);
                    docto.Impuesto = Convert.ToDecimal(fila["TOTAL_IMPUESTOS"]);

                    lstDoctosPV.Add(docto);
                }
            }
            catch (Exception ex)
            {
                Logger.AgregarLog(ex.Message);
            }
            finally
            {
                if (Conexion.State != ConnectionState.Closed)
                    Conexion.Close();
            }
            return lstDoctosPV;
        }
        public List<DoctosPV> ObtenerPagosConTarjetas(DateTime fecha)
        {
            List<DoctosPV> lstPagoConTarjeta = null;

            try
            {
                Conexion.ConnectionString = ObtenerStringDeConexion();
                Conexion.Open();

                Comando.Connection = Conexion;
                Comando.CommandText =
                    string.Format(@"SELECT
                                      MC.CAJA_ID, C.NOMBRE, MCF.IMPORTE, 0 AS IMPUESTO
                                    FROM
                                      MOVTOS_CAJAS_FONDO MCF
                                      INNER JOIN MOVTOS_CAJAS MC ON (MCF.MOVTO_CAJA_ID = MC.MOVTO_CAJA_ID)
                                      INNER JOIN FORMAS_COBRO FC ON (MCF.FORMA_COBRO_ID = FC.FORMA_COBRO_ID)
                                      INNER JOIN CAJAS C ON (MC.CAJA_ID = C.CAJA_ID)
                                    WHERE
                                      MC.FECHA = '{0}' AND
                                      FC.TIPO = 'T'", fecha.ToString("yyyy-MM-dd"));
                Adapter.SelectCommand = Comando;
                DataTable resultado = new DataTable();

                Adapter.Fill(resultado);

                DoctosPV PagoConTarjeta;
                lstPagoConTarjeta = new List<DoctosPV>();
                foreach (DataRow fila in resultado.Rows)
                {
                    PagoConTarjeta = new DoctosPV();
                    PagoConTarjeta.CajaID = Convert.ToInt32(fila["CAJA_ID"]);
                    PagoConTarjeta.NombreCaja = fila["NOMBRE"].ToString();
                    PagoConTarjeta.Neto = Convert.ToDecimal(fila["IMPORTE"]);
                    PagoConTarjeta.Impuesto = 0;
                    lstPagoConTarjeta.Add(PagoConTarjeta);
                }
            }
            catch (Exception ex)
            {
                Logger.AgregarLog(ex.Message);
            }
            finally
            {
                if (Conexion.State != ConnectionState.Closed)
                    Conexion.Close();
            }

            return lstPagoConTarjeta;
        }
        public List<DoctosPV> ObtenerIngresos(DateTime fecha)
        {
            List<DoctosPV> lstDoctosPV = null;

            try
            {
                Conexion.ConnectionString = ObtenerStringDeConexion();
                Conexion.Open();

                Comando.Connection = Conexion;
                Comando.CommandText =
                    string.Format(@"SELECT
                                      PV.DOCTO_PV_ID,
                                      PV.TIPO_DOCTO,
                                      PV.FOLIO,
                                      PV.IMPORTE_NETO,
                                      PV.TOTAL_IMPUESTOS
                                    FROM
                                      DOCTOS_PV PV
                                    WHERE
                                      PV.FECHA = '{0}' AND
                                      PV.TIPO_DOCTO LIKE 'I' AND
                                      PV.ESTATUS LIKE 'N'", fecha.ToString("yyyy-MM-dd"));
                Adapter.SelectCommand = Comando;
                DataTable resultado = new DataTable();

                Adapter.Fill(resultado);

                DoctosPV DoctoPV;
                lstDoctosPV = new List<DoctosPV>();
                foreach (DataRow fila in resultado.Rows)
                {
                    DoctoPV = new DoctosPV();
                    DoctoPV.NombreCaja = Convert.ToString(fila["FOLIO"]);
                    DoctoPV.Neto = Convert.ToDecimal(fila["IMPORTE_NETO"]);
                    DoctoPV.Impuesto = Convert.ToDecimal(fila["TOTAL_IMPUESTOS"]);

                    lstDoctosPV.Add(DoctoPV);
                }
            }
            catch (Exception ex)
            {
                Logger.AgregarLog(ex.Message);
            }
            finally
            {
                if (Conexion.State != ConnectionState.Closed)
                    Conexion.Close();
            }

            return lstDoctosPV;
        }
        public List<DoctosPV> ObtenerDocumentosDePuntoDeVenta(DateTime fecha)
        {
            List<DoctosPV> lstDoctosPV = null;

            try
            {
                Conexion.ConnectionString = ObtenerStringDeConexion();
                Conexion.Open();

                Comando.Connection = Conexion;
                Comando.CommandText =
                    string.Format(@"SELECT
                                      CAJAS.CAJA_ID,
                                      CAJAS.NOMBRE,
                                      DOCTOS_PV.IMPORTE_NETO,
                                      DOCTOS_PV.TOTAL_IMPUESTOS,
                                      DOCTOS_PV.FECHA,
                                      DOCTOS_PV.HORA
                                    FROM
                                      CAJAS
                                      INNER JOIN DOCTOS_PV ON (CAJAS.CAJA_ID = DOCTOS_PV.CAJA_ID)
                                    WHERE
                                      DOCTOS_PV.FECHA = '{0}' AND
                                      DOCTOS_PV.TIPO_DOCTO = 'V'", fecha.ToString("yyyy-MM-dd"));
                Adapter.SelectCommand = Comando;
                DataTable resultado = new DataTable();

                Adapter.Fill(resultado);

                DoctosPV DoctoPV;
                lstDoctosPV = new List<DoctosPV>();
                foreach (DataRow fila in resultado.Rows)
                {
                    DoctoPV = new DoctosPV();
                    DoctoPV.CajaID = Convert.ToInt32(fila["CAJA_ID"]);
                    DoctoPV.NombreCaja = Convert.ToString(fila["NOMBRE"]);
                    DoctoPV.Fecha = Convert.ToDateTime(fila["FECHA"]);
                    DoctoPV.Hora = (TimeSpan)fila["HORA"];
                    DoctoPV.Neto = Convert.ToDecimal(fila["IMPORTE_NETO"]);
                    DoctoPV.Impuesto = Convert.ToDecimal(fila["TOTAL_IMPUESTOS"]);

                    lstDoctosPV.Add(DoctoPV);
                }

                lstDoctosPV.AddRange(ObtenerDevolucionesDePuntoDeVenta(fecha));
            }
            catch (Exception ex)
            {
                Logger.AgregarLog(ex.Message);
            }
            finally
            {
                if (Conexion.State != ConnectionState.Closed)
                    Conexion.Close();
            }

            return lstDoctosPV;
        }