Exemplo n.º 1
0
        private void CrearInfoReport(string sSqlSelectString, System.DateTime dFechaConsultaDisponibilidad, ref System.DateTime dFechaSaldoAnterior)
        {
            // en este Sub agregamos los registros a la tabla 'temporal' en la base de datos para que la
            // página que sigue los muestre al usuario en un DataGridView

            if (!User.Identity.IsAuthenticated)
            {
                FormsAuthentication.SignOut();
                return;
            }

            // -----------------------------------------------------------------------------------------------
            // lo primero que hacemos es determinar el mes del saldo anterior y el período de movimientos

            Int16 nAnoSaldoAnterior = (short)dFechaConsultaDisponibilidad.Year;
            Int16 nMesSaldoAnterior = Convert.ToInt16(dFechaConsultaDisponibilidad.Month - 1);

            if (nMesSaldoAnterior == 0)
            {
                nAnoSaldoAnterior -= 1;
                nMesSaldoAnterior  = 12;
            }


            // nótese como obtenemos la fecha que corresponde al último día del mes ...
            dFechaSaldoAnterior = new DateTime(nAnoSaldoAnterior, nMesSaldoAnterior, DateTime.DaysInMonth(nAnoSaldoAnterior, nMesSaldoAnterior));

            System.DateTime dFechaInicialPeriodo = new System.DateTime(dFechaConsultaDisponibilidad.Year, dFechaConsultaDisponibilidad.Month, 1);
            System.DateTime dFechaFinalPeriodo   = dFechaConsultaDisponibilidad;

            // ----------------------------------------------------------------------------------------
            // eliminamos los registros anteriores de la tabla 'temporal'

            dbBancosDataContext dbBancos = new dbBancosDataContext();

            try
            {
                dbBancos.ExecuteCommand("Delete From tTempWebReport_DisponibilidadBancos2 Where NombreUsuario = {0}", User.Identity.Name);
                dbBancos.ExecuteCommand("Delete From tTempWebReport_DisponibilidadBancos Where NombreUsuario = {0}", User.Identity.Name);
                dbBancos.ExecuteCommand("Delete From Disponibilidad_MontosRestringidos_ConsultaDisponibilidad Where NombreUsuario = {0}", User.Identity.Name);
                dbBancos.ExecuteCommand("Delete From Disponibilidad_ChequesNoEntregados_ConsultaDisponibilidad Where NombreUsuario = {0}", User.Identity.Name);
            }
            catch (Exception ex) {
                dbBancos.Dispose();

                ErrMessage_Span.InnerHtml = "Ha ocurrido un error al intentar ejecutar una operación de acceso a la base de datos. <br /> " +
                                            "El mensaje específico de error es: " + ex.Message + "<br /><br />";
                ErrMessage_Span.Style["display"] = "block";
                return;
            }

            // ----------------------------------------------------------------------------------------------
            // lo primero que hacemos es leer las cuentas bancarias que cumplan con el criterio de selección

            Int16 nRecCount = 0;

            decimal nSaldoAnteriorCuentaBancaria = 0;
            decimal nMontoDebitos              = 0;
            decimal nMontoCreditos             = 0;
            decimal nSaldoActualCuentaBancaria = 0;
            Int16   nOrdenRegistroMovimientos  = 0;

            // ---------------------------------------------------------------------------------------
            // objetos para agregar registros a ambas tablas 'temporales'

            List <tTempWebReport_DisponibilidadBanco> CuentasBancarias = new List <tTempWebReport_DisponibilidadBanco>();
            tTempWebReport_DisponibilidadBanco        CuentaBancaria;

            List <tTempWebReport_DisponibilidadBancos2> CuentasBancarias_Movimientos = new List <tTempWebReport_DisponibilidadBancos2>();
            tTempWebReport_DisponibilidadBancos2        CuentasBancarias_Movimiento;

            // ----------------------------------------------------------------------------------------------
            // lo primero que hacemos es leer las cuentas bancarias que cumplan con el criterio de selección
            // (NOTESE como usamos dynamic linq aquí)

            // eliminamos las cuentas bancarias no activas del filtro

            sSqlSelectString += " And Estado = 'AC'";

            var query_cb = dbBancos.ExecuteQuery <CuentasBancaria>("Select * From CuentasBancarias Where " + sSqlSelectString);

            foreach (var cb in query_cb)
            {
                // ---------------------------------------------------------------------------------
                // leemos el saldo anterior de la cuenta

                int nCuentaInterna = cb.CuentaInterna;
                int nCiaContab     = cb.Cia;

                var query_sa = from sa in dbBancos.Saldos
                               where sa.CuentaBancaria == nCuentaInterna && sa.Ano == nAnoSaldoAnterior
                               select sa;

                foreach (var sa in query_sa)
                {
                    // este query puede o no traer registros; por eso leemos y salimos

                    switch (nMesSaldoAnterior)
                    {
                    case 0:
                        nSaldoAnteriorCuentaBancaria = sa.Inicial.Value;
                        break;

                    case 1:
                        nSaldoAnteriorCuentaBancaria = sa.Mes01.Value;
                        break;

                    case 2:
                        nSaldoAnteriorCuentaBancaria = sa.Mes02.Value;
                        break;

                    case 3:
                        nSaldoAnteriorCuentaBancaria = sa.Mes03.Value;
                        break;

                    case 4:
                        nSaldoAnteriorCuentaBancaria = sa.Mes04.Value;
                        break;

                    case 5:
                        nSaldoAnteriorCuentaBancaria = sa.Mes05.Value;
                        break;

                    case 6:
                        nSaldoAnteriorCuentaBancaria = sa.Mes06.Value;
                        break;

                    case 7:
                        nSaldoAnteriorCuentaBancaria = sa.Mes07.Value;
                        break;

                    case 8:
                        nSaldoAnteriorCuentaBancaria = sa.Mes08.Value;
                        break;

                    case 9:
                        nSaldoAnteriorCuentaBancaria = sa.Mes09.Value;
                        break;

                    case 10:
                        nSaldoAnteriorCuentaBancaria = sa.Mes10.Value;
                        break;

                    case 11:
                        nSaldoAnteriorCuentaBancaria = sa.Mes11.Value;
                        break;

                    case 12:
                        nSaldoAnteriorCuentaBancaria = sa.Mes12.Value;
                        break;
                    }
                }

                // ----------------------------------------------------------------------------------------------
                // agregamos un 1er. registro a la tabla 'temporal' de movimientos con el saldo inicial
                // de la cuenta

                nOrdenRegistroMovimientos = 1;

                CuentasBancarias_Movimiento = new tTempWebReport_DisponibilidadBancos2();

                CuentasBancarias_Movimiento.CuentaInterna = cb.CuentaInterna;

                CuentasBancarias_Movimiento.Transaccion   = 001;
                CuentasBancarias_Movimiento.Tipo          = "IN";
                CuentasBancarias_Movimiento.Orden         = nOrdenRegistroMovimientos;
                CuentasBancarias_Movimiento.Fecha         = dFechaInicialPeriodo;
                CuentasBancarias_Movimiento.Concepto      = "Saldo inicial del período";
                CuentasBancarias_Movimiento.Monto         = nSaldoAnteriorCuentaBancaria;
                CuentasBancarias_Movimiento.CiaContab     = cb.Cia;
                CuentasBancarias_Movimiento.NombreUsuario = User.Identity.Name;

                CuentasBancarias_Movimientos.Add(CuentasBancarias_Movimiento);

                // ----------------------------------------------------------------------------------------------
                // ahora obtenemos los movimientos del período para grabarlos a otra tabla 'temporal' y para
                // obtener la sumarización de debitos y créditos y, finalmente, el saldo actual de la cuenta

                nMontoDebitos  = 0;
                nMontoCreditos = 0;

                var query = from mb in dbBancos.MovimientosBancarios
                            where mb.Chequera.CuentasBancaria.CuentaInterna == nCuentaInterna &&
                            mb.Fecha >= dFechaInicialPeriodo && mb.Fecha <= dFechaFinalPeriodo &&
                            mb.Chequera.CuentasBancaria.Compania.Numero == nCiaContab               // ésto no es necesario !!!!
                            orderby mb.Fecha
                            select new { mb.Transaccion,
                                         mb.Tipo,
                                         mb.Fecha,
                                         mb.ProvClte,
                                         mb.Beneficiario,
                                         mb.Concepto, mb.Monto,
                                         mb.FechaEntregado,
                                         NombreProveedor = mb.Proveedore.Nombre,
                                         mb.Conciliacion_FechaEjecucion };

                foreach (var mb in query)
                {
                    if (mb.Monto >= 0)
                    {
                        nMontoDebitos += mb.Monto;
                    }
                    else
                    {
                        nMontoCreditos += mb.Monto;
                    }

                    nOrdenRegistroMovimientos += 1;

                    CuentasBancarias_Movimiento = new tTempWebReport_DisponibilidadBancos2();

                    CuentasBancarias_Movimiento.CuentaInterna = cb.CuentaInterna;
                    CuentasBancarias_Movimiento.Transaccion   = mb.Transaccion;
                    CuentasBancarias_Movimiento.Tipo          = mb.Tipo;
                    CuentasBancarias_Movimiento.Orden         = nOrdenRegistroMovimientos;
                    CuentasBancarias_Movimiento.Fecha         = mb.Fecha;
                    if (!(mb.ProvClte == null))
                    {
                        CuentasBancarias_Movimiento.ProvClte = mb.ProvClte;
                    }
                    CuentasBancarias_Movimiento.Beneficiario           = mb.Beneficiario;
                    CuentasBancarias_Movimiento.NombreProveedorCliente = mb.NombreProveedor;
                    CuentasBancarias_Movimiento.Concepto = mb.Concepto;
                    CuentasBancarias_Movimiento.Monto    = mb.Monto;
                    if (!(mb.FechaEntregado == null))
                    {
                        CuentasBancarias_Movimiento.FechaEntregado = mb.FechaEntregado;
                    }

                    CuentasBancarias_Movimiento.Conciliacion_FechaEjecucion = mb.Conciliacion_FechaEjecucion;
                    CuentasBancarias_Movimiento.CiaContab     = cb.Cia;
                    CuentasBancarias_Movimiento.NombreUsuario = User.Identity.Name;

                    CuentasBancarias_Movimientos.Add(CuentasBancarias_Movimiento);
                }

                nSaldoActualCuentaBancaria = nSaldoAnteriorCuentaBancaria + nMontoDebitos + nMontoCreditos;

                // ----------------------------------------------------------------------------------------------
                // agregamos un último registro de movimientos a la tabla 'temporal' de movimientos, con el
                // monto de saldo final (o actual) determinado antes

                nOrdenRegistroMovimientos += 1;

                CuentasBancarias_Movimiento = new tTempWebReport_DisponibilidadBancos2();

                CuentasBancarias_Movimiento.CuentaInterna = cb.CuentaInterna;
                CuentasBancarias_Movimiento.Transaccion   = 001;
                CuentasBancarias_Movimiento.Tipo          = "SA";
                CuentasBancarias_Movimiento.Orden         = nOrdenRegistroMovimientos;
                CuentasBancarias_Movimiento.Fecha         = dFechaFinalPeriodo;
                CuentasBancarias_Movimiento.Concepto      = "Saldo actual del período";
                CuentasBancarias_Movimiento.Monto         = nSaldoActualCuentaBancaria;
                CuentasBancarias_Movimiento.CiaContab     = cb.Cia;
                CuentasBancarias_Movimiento.NombreUsuario = User.Identity.Name;

                CuentasBancarias_Movimientos.Add(CuentasBancarias_Movimiento);

                // -----------------------------------------------------------------------------------------
                // nov/08: debemos tomar en cuenta el monto restringido que pueda existir para una cuenta
                // bancaria

                var queryMontoRestringido =
                    from mr in dbBancos.Disponibilidad_MontosRestringidos
                    where
                    mr.CuentaBancaria == nCuentaInterna &&
                    mr.Fecha <= dFechaFinalPeriodo &&
                    mr.SuspendidoFlag == false &&
                    (mr.DesactivarEl == null || mr.DesactivarEl > dFechaFinalPeriodo)
                    orderby mr.Fecha
                    select mr;

                decimal nTotalMontoRestringido    = 0;
                Int16   nRecCountMontoRestringido = 0;

                // nótese como agregamos un registro a la tabla Disponibilidad_MontosRestringidos_ConsultaDisponibilidad
                // por cada monto restringido leído para la cuenta bancaria.

                Disponibilidad_MontosRestringidos_ConsultaDisponibilidad        MyRegistroMontosRestringido;
                List <Disponibilidad_MontosRestringidos_ConsultaDisponibilidad> MyRegistroMontosRestringido_Lista = new List <Disponibilidad_MontosRestringidos_ConsultaDisponibilidad>();

                foreach (var MyQueryMontoRestringido in queryMontoRestringido)
                {
                    // Ok, existe uno (o varios) montos restringidos grabados que aplican a la cuenta bancaria y el
                    // período de la consulta; grabamos dos registros: uno con el monto restringido y uno con el
                    // nuevo saldo

                    nOrdenRegistroMovimientos += 1;
                    nRecCountMontoRestringido += 1;

                    CuentasBancarias_Movimiento = new tTempWebReport_DisponibilidadBancos2();

                    CuentasBancarias_Movimiento.CuentaInterna = cb.CuentaInterna;
                    CuentasBancarias_Movimiento.Transaccion   = nRecCountMontoRestringido;
                    CuentasBancarias_Movimiento.Tipo          = "MR";
                    CuentasBancarias_Movimiento.Orden         = nOrdenRegistroMovimientos;
                    CuentasBancarias_Movimiento.Fecha         = MyQueryMontoRestringido.Fecha;
                    CuentasBancarias_Movimiento.Concepto      = MyQueryMontoRestringido.Comentarios;
                    CuentasBancarias_Movimiento.Monto         = MyQueryMontoRestringido.Monto;
                    CuentasBancarias_Movimiento.CiaContab     = cb.Cia;
                    CuentasBancarias_Movimiento.NombreUsuario = User.Identity.Name;

                    CuentasBancarias_Movimientos.Add(CuentasBancarias_Movimiento);

                    nTotalMontoRestringido += MyQueryMontoRestringido.Monto;

                    // ------------------------------------------------------------------------------

                    MyRegistroMontosRestringido = new Disponibilidad_MontosRestringidos_ConsultaDisponibilidad();

                    MyRegistroMontosRestringido.ID             = MyQueryMontoRestringido.ID;
                    MyRegistroMontosRestringido.CiaContab      = MyQueryMontoRestringido.CuentasBancaria.Cia;
                    MyRegistroMontosRestringido.Moneda         = MyQueryMontoRestringido.CuentasBancaria.Moneda;
                    MyRegistroMontosRestringido.CuentaBancaria = MyQueryMontoRestringido.CuentaBancaria;
                    MyRegistroMontosRestringido.Fecha          = MyQueryMontoRestringido.Fecha;
                    MyRegistroMontosRestringido.Monto          = MyQueryMontoRestringido.Monto;
                    MyRegistroMontosRestringido.Comentarios    = MyQueryMontoRestringido.Comentarios;
                    MyRegistroMontosRestringido.DesactivarEl   = MyQueryMontoRestringido.DesactivarEl;
                    MyRegistroMontosRestringido.NombreUsuario  = User.Identity.Name;

                    MyRegistroMontosRestringido_Lista.Add(MyRegistroMontosRestringido);
                }

                if (nRecCountMontoRestringido > 0)
                {
                    dbBancos.Disponibilidad_MontosRestringidos_ConsultaDisponibilidads.InsertAllOnSubmit(MyRegistroMontosRestringido_Lista);

                    try {
                        dbBancos.SubmitChanges();
                    }
                    catch (Exception ex) {
                        dbBancos.Dispose();

                        ErrMessage_Span.InnerHtml = "Ha ocurrido un error al intentar ejecutar una operación de acceso a la base de datos. <br />" +
                                                    "El mensaje específico de error es: " + ex.Message + "<br /><br />";
                        ErrMessage_Span.Style["display"] = "block";
                        return;
                    }
                }


                // si se encontraron registros de monto restringido, agregamos un registro final con el
                // saldo final de la cuenta

                if (nRecCountMontoRestringido > 0)
                {
                    nOrdenRegistroMovimientos += 1;

                    CuentasBancarias_Movimiento = new tTempWebReport_DisponibilidadBancos2();

                    CuentasBancarias_Movimiento.CuentaInterna = cb.CuentaInterna;
                    CuentasBancarias_Movimiento.Transaccion   = 001;
                    CuentasBancarias_Movimiento.Tipo          = "TO";
                    CuentasBancarias_Movimiento.Orden         = nOrdenRegistroMovimientos;
                    CuentasBancarias_Movimiento.Fecha         = dFechaFinalPeriodo;
                    CuentasBancarias_Movimiento.Concepto      = "Saldo disponible del período";
                    CuentasBancarias_Movimiento.Monto         = nSaldoActualCuentaBancaria + nTotalMontoRestringido;
                    CuentasBancarias_Movimiento.CiaContab     = cb.Cia;
                    CuentasBancarias_Movimiento.NombreUsuario = User.Identity.Name;

                    CuentasBancarias_Movimientos.Add(CuentasBancarias_Movimiento);
                }



                // -----------------------------------------------------------------------------------------
                // leemos los cheques no entregados hasta la fecha para agregarlos como movimientos y
                // mostrar un saldo disponible que incluya este monto


                var query2 = from mb in dbBancos.MovimientosBancarios
                             where mb.Chequera.CuentasBancaria.CuentaInterna == nCuentaInterna &&
                             mb.Fecha <= dFechaFinalPeriodo &&
                             mb.Tipo == "CH" &&
                             mb.FechaEntregado == null &&
                             mb.Monto != 0 &&
                             mb.Chequera.CuentasBancaria.Compania.Numero == nCiaContab
                             orderby mb.Fecha
                             select new { mb.Chequera.CuentasBancaria.CuentaInterna,
                                          mb.Transaccion,
                                          mb.Fecha,
                                          mb.ProvClte,
                                          mb.Beneficiario,
                                          mb.Concepto,
                                          mb.Monto };


                Disponibilidad_ChequesNoEntregados_ConsultaDisponibilidad        MyChequesNoEntregados_ConsultaDisponibilidad;
                List <Disponibilidad_ChequesNoEntregados_ConsultaDisponibilidad> MyChequesNoEntregados_ConsultaDisponibilidad_Lista = new List <Disponibilidad_ChequesNoEntregados_ConsultaDisponibilidad>();

                decimal nMontoChequesNoEntregados = 0;

                foreach (var MyQuery2 in query2)
                {
                    MyChequesNoEntregados_ConsultaDisponibilidad = new Disponibilidad_ChequesNoEntregados_ConsultaDisponibilidad();

                    MyChequesNoEntregados_ConsultaDisponibilidad.CiaContab      = cb.Cia;
                    MyChequesNoEntregados_ConsultaDisponibilidad.CuentaBancaria = nCuentaInterna;
                    MyChequesNoEntregados_ConsultaDisponibilidad.Fecha          = MyQuery2.Fecha;
                    MyChequesNoEntregados_ConsultaDisponibilidad.Transaccion    = MyQuery2.Transaccion;
                    MyChequesNoEntregados_ConsultaDisponibilidad.ProvClte       = MyQuery2.ProvClte;
                    MyChequesNoEntregados_ConsultaDisponibilidad.Beneficiario   = MyQuery2.Beneficiario;
                    MyChequesNoEntregados_ConsultaDisponibilidad.Concepto       = MyQuery2.Concepto;
                    MyChequesNoEntregados_ConsultaDisponibilidad.Monto          = MyQuery2.Monto;
                    MyChequesNoEntregados_ConsultaDisponibilidad.NombreUsuario  = User.Identity.Name;

                    MyChequesNoEntregados_ConsultaDisponibilidad_Lista.Add(MyChequesNoEntregados_ConsultaDisponibilidad);
                    nMontoChequesNoEntregados += MyQuery2.Monto;
                }

                if (query2.Count() > 0)
                {
                    // agregamos un registro a la tabla de movimientos con un total para los cheques no entregados

                    nOrdenRegistroMovimientos += 1;

                    CuentasBancarias_Movimiento = new tTempWebReport_DisponibilidadBancos2();

                    CuentasBancarias_Movimiento.CuentaInterna = cb.CuentaInterna;
                    CuentasBancarias_Movimiento.Transaccion   = 001;
                    CuentasBancarias_Movimiento.Tipo          = "NE";
                    CuentasBancarias_Movimiento.Orden         = nOrdenRegistroMovimientos;
                    CuentasBancarias_Movimiento.Fecha         = dFechaFinalPeriodo;
                    CuentasBancarias_Movimiento.Concepto      = "Monto total en cheques no entregados";
                    CuentasBancarias_Movimiento.Monto         = (nMontoChequesNoEntregados * -1);
                    CuentasBancarias_Movimiento.CiaContab     = cb.Cia;
                    CuentasBancarias_Movimiento.NombreUsuario = User.Identity.Name;

                    CuentasBancarias_Movimientos.Add(CuentasBancarias_Movimiento);

                    // ahora agregamos cada cheque no entregado a una tabla para que el usuario los pueda
                    // consultar en detalle

                    dbBancos.Disponibilidad_ChequesNoEntregados_ConsultaDisponibilidads.InsertAllOnSubmit(MyChequesNoEntregados_ConsultaDisponibilidad_Lista);

                    try {
                        dbBancos.SubmitChanges();
                    }
                    catch (Exception ex) {
                        dbBancos.Dispose();

                        ErrMessage_Span.InnerHtml = "Ha ocurrido un error al intentar ejecutar una operación de acceso a la base de datos. <br />" +
                                                    "El mensaje específico de error es: " + ex.Message + "<br /><br />";
                        ErrMessage_Span.Style["display"] = "block";
                        return;
                    }
                }

                // si se encontraron cheques no entregados, agregamos un registro final con el
                // saldo final de la cuenta

                if (query2.Count() > 0)
                {
                    nOrdenRegistroMovimientos += 1;

                    CuentasBancarias_Movimiento = new tTempWebReport_DisponibilidadBancos2();

                    CuentasBancarias_Movimiento.CuentaInterna = cb.CuentaInterna;
                    CuentasBancarias_Movimiento.Transaccion   = 001;
                    CuentasBancarias_Movimiento.Tipo          = "TC";
                    CuentasBancarias_Movimiento.Orden         = nOrdenRegistroMovimientos;
                    CuentasBancarias_Movimiento.Fecha         = dFechaFinalPeriodo;
                    CuentasBancarias_Movimiento.Concepto      = "Saldo disponible del período";

                    // como el monto leído para los cheques no entregados es siempre negativo, lo convertimos a
                    // positivo pues queremos agregarlo al saldo disponible

                    CuentasBancarias_Movimiento.Monto         = nSaldoActualCuentaBancaria + nTotalMontoRestringido + (nMontoChequesNoEntregados * -1);
                    CuentasBancarias_Movimiento.CiaContab     = cb.Cia;
                    CuentasBancarias_Movimiento.NombreUsuario = User.Identity.Name;

                    CuentasBancarias_Movimientos.Add(CuentasBancarias_Movimiento);
                }

                // ----------------------------------------------------------------------------------------------

                // agregamos un registro con la cuenta bancaria y su saldo a la 1ra. tabla 'temporal'
                // NOTESE como agregamos el monto restringido que pudo ser registrado para la cuenta
                // y el monto en cheques no entregados que pueda existir

                CuentaBancaria = new tTempWebReport_DisponibilidadBanco();

                CuentaBancaria.CuentaInterna = cb.CuentaInterna;

                CuentaBancaria.CuentaBancaria  = cb.CuentaBancaria;
                CuentaBancaria.NombreCiaContab = cb.Compania.NombreCorto;

                if (cb.Agencia1.Banco1.NombreCorto != null)
                {
                    CuentaBancaria.NombreBanco = cb.Agencia1.Banco1.NombreCorto;
                }
                else
                {
                    CuentaBancaria.NombreBanco = "indefinido";
                }

                CuentaBancaria.NombreMoneda  = cb.Moneda1.Descripcion;
                CuentaBancaria.SimboloMoneda = cb.Moneda1.Simbolo;

                CuentaBancaria.FechaSaldoAnterior       = dFechaInicialPeriodo;
                CuentaBancaria.SaldoAnterior            = nSaldoAnteriorCuentaBancaria;
                CuentaBancaria.Debitos                  = nMontoDebitos;
                CuentaBancaria.Creditos                 = nMontoCreditos;
                CuentaBancaria.SaldoActual              = nSaldoActualCuentaBancaria;
                CuentaBancaria.MontoRestringido         = nTotalMontoRestringido;
                CuentaBancaria.SaldoActual2             = nSaldoActualCuentaBancaria + nTotalMontoRestringido;
                CuentaBancaria.MontoChequesNoEntregados = nMontoChequesNoEntregados;
                CuentaBancaria.SaldoActual3             = nSaldoActualCuentaBancaria + nTotalMontoRestringido + (nMontoChequesNoEntregados * -1);
                CuentaBancaria.FechaSaldoActual         = dFechaFinalPeriodo;
                CuentaBancaria.CiaContab                = cb.Cia;
                CuentaBancaria.NombreUsuario            = User.Identity.Name;

                CuentasBancarias.Add(CuentaBancaria);

                nRecCount += 1;
            }

            // ----------------------------------------------------------------------------------------------
            // agregamos la lista de registros a la tabla en el DataContext y luego hacemos el SubmitChanges

            dbBancos.tTempWebReport_DisponibilidadBancos2s.InsertAllOnSubmit(CuentasBancarias_Movimientos);
            dbBancos.tTempWebReport_DisponibilidadBancos.InsertAllOnSubmit(CuentasBancarias);

            // si el usuario registra alguna fecha de entregado para un cheque en forma errada, la instrucción que sigue fallará
            // intentamos adelantarnos a esta situación ...

            DateTime fechaMuyAntigua = new DateTime(1960, 1, 1);
            DateTime fechaMuyFutura  = new DateTime(9000, 1, 1);

            var queryMovimientosFechaErrada = CuentasBancarias_Movimientos.
                                              Where(c => (c.Fecha <fechaMuyAntigua || c.Fecha> fechaMuyFutura) || (c.FechaEntregado <fechaMuyAntigua || c.FechaEntregado> fechaMuyFutura)).
                                              FirstOrDefault();

            if (queryMovimientosFechaErrada != null)
            {
                ErrMessage_Span.InnerHtml = "Error: hemos encontrado que, al menos uno, de los movimientos que corresponden a esta consulta, " +
                                            "tiene un valor para la fecha o fecha de entrega, que no es un valor válido.<br />" +
                                            "los datos del movimiento mencionado son:<br />" +
                                            "Número: " + queryMovimientosFechaErrada.Transaccion + "; " +
                                            "Compañía: " + queryMovimientosFechaErrada.NombreProveedorCliente + "; " +
                                            "Concepto: " + queryMovimientosFechaErrada.Concepto + "; " +
                                            "Monto: " + queryMovimientosFechaErrada.Monto.ToString("N2") + "; " +
                                            "Fecha: " + queryMovimientosFechaErrada.Fecha.ToString("dd-MMM-yyyy") + "; " +
                                            "Fecha de entrega: " +
                                            (queryMovimientosFechaErrada.FechaEntregado != null ? queryMovimientosFechaErrada.FechaEntregado.Value.ToString("dd-MMM-yyyy") : "sin un valor asignado") + ".";
                ErrMessage_Span.Style["display"] = "block";
                return;
            }


            try {
                dbBancos.SubmitChanges();
            }
            catch (Exception ex) {
                dbBancos.Dispose();

                ErrMessage_Span.InnerHtml = "Ha ocurrido un error al intentar ejecutar una operación " +
                                            "de acceso a la base de datos. <br /> El mensaje específico de error es: " +
                                            ex.Message + "<br /><br />";
                ErrMessage_Span.Style["display"] = "block";
                return;
            }

            // ------------------------------------------------------------------------------------------------

            if (nRecCount == 0)
            {
                // Gets a reference to a Label control that is not in a
                // ContentPlaceHolder control

                HtmlTableCell MyTableCell;
                MyTableCell = (HtmlTableCell)Master.FindControl("MessageSpace_TableCell");
                if (!(MyTableCell == null))
                {
                    MyTableCell.InnerHtml = "<br/><p><font color='#FF0000'>" +
                                            "* no existen registros que cumplan el criterio de selección que Ud. ha indicado." +
                                            "</font></p>";
                }

                return;
            }

            SaldosCuentasBancarias_SqlDataSource.SelectParameters["NombreUsuario"].DefaultValue =
                User.Identity.Name;
        }
    private void RefreshAndBindInfo()
    {
        if (!User.Identity.IsAuthenticated)
        {
            FormsAuthentication.SignOut();
            return;
        }


        if (Session["FiltroForma"] == null)
        {
            ErrMessage_Span.InnerHtml        = "Aparentemente, Ud. no ha indicado un filtro aún.<br />Por favor indique y aplique un filtro antes de intentar mostrar el resultado de la consulta.";
            ErrMessage_Span.Style["display"] = "block";

            return;
        }

        // el usuario indica o no si quiere determinar los montos de retención de impuestos (iva/islr) en base a sus fechas de
        // recepción de planillas; si el usuario deja esta opción en false, las retenciones de impuestos *siempre* son
        // restadas del monto a pagar de la factura; si el usuario marca esta opción, los montos de retención de impuestos
        // (iva/islr) son restados del monto a pagar *solo* si sus fechas de recepción son *anteriores o iguales* a la fecha de la consulta ...
        bool aplicarFechasRecepcionPlanillasRetencionImpuestos = false;

        if (Session["AplicarFechasRecepcionPlanillasRetencionImpuestos"] != null)
        {
            aplicarFechasRecepcionPlanillasRetencionImpuestos = Convert.ToBoolean(Session["AplicarFechasRecepcionPlanillasRetencionImpuestos"]);
        }

        // usamos el criterio que indico el usuario para leer las cuentas contables y grabarlas a una tabla
        // en la base de datos temporal
        string filtro = Session["FiltroForma"].ToString();

        filtro = filtro.Replace("CuotasFactura", "Facturas");

        dbBancosDataContext BancosDB = new dbBancosDataContext();

        // ----------------------------------------------------------------------------------------------------------------------------------------
        // antes de iniciar el proceso, revisamos que no se produzcan varios items con el mismo pk. Estos registros serán grabados a una tabla
        // en sql server. Si el pk es duplicado, el proceso fallará. Revisamos antes ...
        string sSqlQueryString = "SELECT Case Facturas.CxCCxPFlag When 1 Then 'CxP' When 2 Then 'CxC' End As CxCCxPFlag_Descripcion, " +
                                 "Facturas.Proveedor As Compania, " +
                                 "Facturas.NumeroFactura, CuotasFactura.NumeroCuota, Count(*) As UniquePK_Count " +
                                 "FROM CuotasFactura " +
                                 "Inner Join Facturas On CuotasFactura.ClaveUnicaFactura = Facturas.ClaveUnica " +
                                 "Where (Facturas.FechaRecepcion >= {0}) And (Facturas.FechaRecepcion <= {1}) And " + filtro +
                                 " And (CuotasFactura.EstadoCuota <> 4) " +
                                 "Group By Facturas.CxCCxPFlag, Facturas.Proveedor, Facturas.NumeroFactura, CuotasFactura.NumeroCuota " +
                                 "Having Count(*) > 1";

        DateTime fechaInicial_consulta = new DateTime(1960, 1, 1);

        // la fecha de inicio de la consulta puede o no venir
        if (Session["FechaConsulta_Inicio"] != null)
        {
            fechaInicial_consulta = DateTime.Parse(Session["FechaConsulta_Inicio"].ToString());
        }

        var queryDuplicados = BancosDB.ExecuteQuery <FacturaDatosPK_Entity>(sSqlQueryString,
                                                                            fechaInicial_consulta.ToString("yyyy-MM-dd"),
                                                                            DateTime.Parse(Session["FechaConsulta"].ToString()).ToString("yyyy-MM-dd")).ToList();

        if (queryDuplicados.Count() > 0)
        {
            string errorMessage = "Error: hemos encontrado facturas <b>duplicadas</b> (mismo número de factura) para una <b>misma</b> compañía; " +
                                  "por favor resuelva esta situación y regrese a ejecutar esta consulta.<br /><br />";

            foreach (var item in queryDuplicados)
            {
                var compania = BancosDB.Proveedores.Where(p => p.Proveedor == item.Compania).Select(p => new { p.Nombre }).FirstOrDefault();
                errorMessage += $" compañía: {compania.Nombre} - tipo: {item.CxCCxPFlag_Descripcion} - factura: {item.NumeroFactura} - cuota: {item.NumeroCuota}. <br />";
            }

            ErrMessage_Span.InnerHtml        = errorMessage;
            ErrMessage_Span.Style["display"] = "block";

            return;
        }


        // ahora leemos las cantidades de días que el usuario registro en la tabla PeriodosVencimiento; estos
        // días nos permitirán determinar la antiguedad de un saldo vencido o por vencer
        var   query0 = from pv in BancosDB.PeriodosVencimientos select pv.CantidadDias;
        short i      = 0;

        int nCantDias1 = -1, nCantDias2 = -1, nCantDias3 = -1;

        foreach (int nCantidadDias in query0)
        {
            i++;
            switch (i)
            {
            case 1:
                nCantDias1 = nCantidadDias;
                break;

            case 2:
                nCantDias2 = nCantidadDias;
                break;

            case 3:
                nCantDias3 = nCantidadDias;
                break;
            }
        }

        // guardamos los valores de la tabla, pues los usaremos al generar el reporte
        Session["CantDias1"] = nCantDias1;
        Session["CantDias2"] = nCantDias2;
        Session["CantDias3"] = nCantDias3;

        // --------------------------------------------------------------------------------------------
        // eliminamos el contenido de la tabla temporal
        ContabSysNet_TempDBDataContext TempDB = new ContabSysNet_TempDBDataContext();

        try
        {
            TempDB.ExecuteCommand("Delete From Bancos_VencimientoFacturas Where NombreUsuario = {0}", Membership.GetUser().UserName);
        }
        catch (Exception ex)
        {
            TempDB.Dispose();

            ErrMessage_Span.InnerHtml        = "Ha ocurrido un error al intentar ejecutar una operación de acceso a la base de datos. <br /> El mensaje específico de error es: " + ex.Message + "<br />";
            ErrMessage_Span.Style["display"] = "block";

            return;
        }

        sSqlQueryString = "SELECT CuotasFactura.ClaveUnica, Facturas.CxCCxPFlag, " +
                          "Case CxCCxPFlag When 1 Then 'CxP' When 2 Then 'CxC' End As CxCCxPFlag_Descripcion, " +
                          "Facturas.Moneda, Monedas.Descripcion As NombreMoneda, Monedas.Simbolo As SimboloMoneda, " +
                          "Facturas.Cia As CiaContab, Companias.NombreCorto As NombreCiaContab, " +
                          "Facturas.Proveedor As Compania, Proveedores.Nombre As NombreCompania, Proveedores.Abreviatura As NombreCompaniaAbreviatura, " +
                          "Facturas.NumeroFactura, CuotasFactura.NumeroCuota, Facturas.FechaEmision, " +
                          "Facturas.FechaRecepcion, CuotasFactura.FechaVencimiento, CuotasFactura.DiasVencimiento, CuotasFactura.MontoCuota, " +
                          "CuotasFactura.Iva, CuotasFactura.RetencionSobreISLR, Facturas.FRecepcionRetencionISLR, " +
                          "CuotasFactura.RetencionSobreIva, Facturas.FRecepcionRetencionIva, " +
                          "CuotasFactura.Anticipo " +
                          "FROM CuotasFactura " +
                          "Inner Join Facturas On CuotasFactura.ClaveUnicaFactura = Facturas.ClaveUnica " +
                          "Inner Join Companias ON Facturas.Cia = Companias.Numero " +
                          "Inner Join Monedas ON Facturas.Moneda = Monedas.Moneda " +
                          "Inner Join Proveedores ON Facturas.Proveedor = Proveedores.Proveedor " +
                          "Where Facturas.FechaRecepcion >= {0} And Facturas.FechaRecepcion <= {1} And " + filtro + " And " + "CuotasFactura.EstadoCuota <> 4 ";

        // dejamos de excluir cuotas de factura que tengan pagos y cuyo estado sea Pagada;
        // leemos los pagos de las cuotas más abajo y excluimos las totalmente pagadas allí
        // (el proceso será más lento, pero 'transaccional')

        //"And CuotasFactura.ClaveUnica Not In " +
        //"(Select ClaveUnicaCuotaFactura From dPagos Inner Join Pagos On " +
        //"dPagos.ClaveUnicaPago = Pagos.ClaveUnica Inner Join CuotasFactura On " +
        //"dPagos.ClaveUnicaCuotaFactura = CuotasFactura.ClaveUnica Where Pagos.Fecha <= {0} And EstadoCuota = 3)";

        var query = BancosDB.ExecuteQuery <CuotaFactura_Entity>(sSqlQueryString, fechaInicial_consulta.ToString("yyyy-MM-dd"),
                                                                DateTime.Parse(Session["FechaConsulta"].ToString()).ToString("yyyy-MM-dd"));

        List <Bancos_VencimientoFactura> MyVencimientosFactura_List = new List <Bancos_VencimientoFactura>();
        Bancos_VencimientoFactura        MyVencimientosFactura;

        foreach (CuotaFactura_Entity MyCuotasFacturas_Object  in query)
        {
            // para cada cuota de factura leída, leemos sus montos pagados, para grabarlos al
            // registro. Luego, con el monto a pagar y el monto pagado determinaremos el vencimiento,
            // de acuerdo a los períodos indicados por el usuario en la tabla PeriodosVencimiento
            var nMontoPagado =
                (from pagos in BancosDB.dPagos
                 where pagos.ClaveUnicaCuotaFactura == MyCuotasFacturas_Object.ClaveUnica &&
                 pagos.Pago.Fecha <= (DateTime)Session["FechaConsulta"] &&
                 pagos.Pago.Fecha >= MyCuotasFacturas_Object.FechaRecepcion       // excluimos los anticipos; su fecha es siempre *anterior* a la factura
                 select(decimal?) pagos.MontoPagado).Sum();


            MyVencimientosFactura = new Bancos_VencimientoFactura();

            MyVencimientosFactura.CxCCxPFlag             = MyCuotasFacturas_Object.CxCCxPFlag;
            MyVencimientosFactura.CxCCxPFlag_Descripcion = MyCuotasFacturas_Object.CxCCxPFlag_Descripcion;
            MyVencimientosFactura.Moneda          = MyCuotasFacturas_Object.Moneda;
            MyVencimientosFactura.NombreMoneda    = MyCuotasFacturas_Object.NombreMoneda;
            MyVencimientosFactura.SimboloMoneda   = MyCuotasFacturas_Object.SimboloMoneda;
            MyVencimientosFactura.CiaContab       = MyCuotasFacturas_Object.CiaContab;
            MyVencimientosFactura.NombreCiaContab = MyCuotasFacturas_Object.NombreCiaContab;
            MyVencimientosFactura.Compania        = MyCuotasFacturas_Object.Compania;

            MyVencimientosFactura.NombreCompania            = MyCuotasFacturas_Object.NombreCompania;
            MyVencimientosFactura.NombreCompaniaAbreviatura = MyCuotasFacturas_Object.NombreCompaniaAbreviatura;
            MyVencimientosFactura.NumeroFactura             = MyCuotasFacturas_Object.NumeroFactura;
            MyVencimientosFactura.NumeroCuota      = MyCuotasFacturas_Object.NumeroCuota;
            MyVencimientosFactura.FechaEmision     = MyCuotasFacturas_Object.FechaEmision;
            MyVencimientosFactura.FechaRecepcion   = MyCuotasFacturas_Object.FechaRecepcion;
            MyVencimientosFactura.FechaVencimiento = MyCuotasFacturas_Object.FechaVencimiento;
            MyVencimientosFactura.DiasVencimiento  = MyCuotasFacturas_Object.DiasVencimiento;
            MyVencimientosFactura.MontoCuota       = MyCuotasFacturas_Object.MontoCuota;
            MyVencimientosFactura.MontoCuota       = MyCuotasFacturas_Object.MontoCuota;

            MyVencimientosFactura.MontoCuotaDespuesIva = MyVencimientosFactura.MontoCuota;

            if (MyCuotasFacturas_Object.Iva != null)
            {
                MyVencimientosFactura.MontoCuotaDespuesIva += MyCuotasFacturas_Object.Iva.Value;
                MyVencimientosFactura.Iva = MyCuotasFacturas_Object.Iva;
            }

            MyVencimientosFactura.TotalAntesAnticipo = MyVencimientosFactura.MontoCuotaDespuesIva;


            // nótese ahora como calculamos el total de la factura en base a la opción usada por el usuario

            MyVencimientosFactura.RetencionSobreISLR = MyCuotasFacturas_Object.RetencionSobreISLR;
            MyVencimientosFactura.RetencionSobreIva  = MyCuotasFacturas_Object.RetencionSobreIva;

            MyVencimientosFactura.FRecepcionRetencionISLR = MyCuotasFacturas_Object.FRecepcionRetencionISLR;
            MyVencimientosFactura.FRecepcionRetencionIva  = MyCuotasFacturas_Object.FRecepcionRetencionIva;

            if (aplicarFechasRecepcionPlanillasRetencionImpuestos)
            {
                // solo consideramos las retenciones de impuesto (islr/iva) si se ha recibido (su planilla)
                if (MyVencimientosFactura.RetencionSobreISLR != null &&
                    MyVencimientosFactura.RetencionSobreISLR != 0 &&
                    MyVencimientosFactura.FRecepcionRetencionISLR != null)
                {
                    if (MyVencimientosFactura.FRecepcionRetencionISLR.Value <= (DateTime)Session["FechaConsulta"])
                    {
                        // el monto de retención existe y fue recibido ... lo aplicamos
                        MyVencimientosFactura.TotalAntesAnticipo      -= MyVencimientosFactura.RetencionSobreISLR.Value;
                        MyVencimientosFactura.RetencionSobreISLRAplica = true;
                    }
                }

                if (MyVencimientosFactura.RetencionSobreIva != null &&
                    MyVencimientosFactura.RetencionSobreIva != 0 &&
                    MyVencimientosFactura.FRecepcionRetencionIva != null)
                {
                    if (MyVencimientosFactura.FRecepcionRetencionIva.Value <= (DateTime)Session["FechaConsulta"])
                    {
                        // el monto de retención existe y fue recibido ... lo aplicamos
                        MyVencimientosFactura.TotalAntesAnticipo     -= MyVencimientosFactura.RetencionSobreIva.Value;
                        MyVencimientosFactura.RetencionSobreIvaAplica = true;
                    }
                }
            }
            else
            {
                // siempre consideramos los montos de retención de impuesto; es decir, siempre se restan del monto a pagar

                if (MyVencimientosFactura.RetencionSobreISLR != null && MyVencimientosFactura.RetencionSobreISLR != 0)
                {
                    MyVencimientosFactura.TotalAntesAnticipo      -= MyVencimientosFactura.RetencionSobreISLR.Value;
                    MyVencimientosFactura.RetencionSobreISLRAplica = true;
                }

                if (MyVencimientosFactura.RetencionSobreIva != null && MyVencimientosFactura.RetencionSobreIva != 0)
                {
                    MyVencimientosFactura.TotalAntesAnticipo     -= MyVencimientosFactura.RetencionSobreIva.Value;
                    MyVencimientosFactura.RetencionSobreIvaAplica = true;
                }
            }

            MyVencimientosFactura.Total = MyVencimientosFactura.TotalAntesAnticipo;

            MyVencimientosFactura.Anticipo = MyCuotasFacturas_Object.Anticipo;

            if (MyVencimientosFactura.Anticipo != null)
            {
                MyVencimientosFactura.Total -= MyVencimientosFactura.Anticipo.Value;
            }

            MyVencimientosFactura.SaldoPendiente = MyVencimientosFactura.Total;

            if (nMontoPagado != null)
            {
                MyVencimientosFactura.MontoPagado     = nMontoPagado;
                MyVencimientosFactura.SaldoPendiente -= nMontoPagado.Value;
            }


            if (MyVencimientosFactura.SaldoPendiente == 0)
            {
                continue;
            }

            // el procediemiento que sigue determina la antiguedad del saldo, en base a la fecha de vencimiento
            // del saldo, la fecha de la consulta y la cantidad de días que el usuario registro en la tabla
            // PeriodosVencimiento

            int     nDiasTranscurridos = 0;
            decimal nSaldoPendiente0   = 0;
            decimal nSaldoPendiente1   = 0;
            decimal nSaldoPendiente2   = 0;
            decimal nSaldoPendiente3   = 0;
            decimal nSaldoPendiente4   = 0;


            DeterminarAntiguedadSaldoPendiente((DateTime)(Session["FechaConsulta"]),
                                               MyVencimientosFactura.FechaVencimiento,
                                               MyVencimientosFactura.SaldoPendiente,
                                               nCantDias1,
                                               nCantDias2,
                                               nCantDias3,
                                               out nDiasTranscurridos,
                                               out nSaldoPendiente0,
                                               out nSaldoPendiente1,
                                               out nSaldoPendiente2,
                                               out nSaldoPendiente3,
                                               out nSaldoPendiente4);

            MyVencimientosFactura.DiasPorVencerOVencidos = nDiasTranscurridos;
            MyVencimientosFactura.SaldoPendiente_0       = nSaldoPendiente0;
            MyVencimientosFactura.SaldoPendiente_1       = nSaldoPendiente1;
            MyVencimientosFactura.SaldoPendiente_2       = nSaldoPendiente2;
            MyVencimientosFactura.SaldoPendiente_3       = nSaldoPendiente3;
            MyVencimientosFactura.SaldoPendiente_4       = nSaldoPendiente4;

            MyVencimientosFactura.NombreUsuario = Membership.GetUser().UserName;

            MyVencimientosFactura_List.Add(MyVencimientosFactura);
        }

        BancosDB.Dispose();

        TempDB.Bancos_VencimientoFacturas.InsertAllOnSubmit(MyVencimientosFactura_List);

        try
        {
            TempDB.SubmitChanges();
        }

        catch (Exception ex)
        {
            TempDB.Dispose();

            ErrMessage_Span.InnerHtml        = "Ha ocurrido un error al intentar ejecutar una operación de acceso a la base de datos. <br /> El mensaje específico de error es: " + ex.Message + "<br /><br />";
            ErrMessage_Span.Style["display"] = "block";
            return;
        }

        TempDB.Dispose();

        // ------------------------------------------------------------------------------------------------
        // hacemos el databinding de los dos combos

        CiasContabSeleccionadas_SqlDataSource.SelectParameters["NombreUsuario"].DefaultValue = Membership.GetUser().UserName;
        MonedasSeleccionadas_SqlDataSource.SelectParameters["NombreUsuario"].DefaultValue    = Membership.GetUser().UserName;
        CxCCxPFlag_SqlDataSource.SelectParameters["NombreUsuario"].DefaultValue = Membership.GetUser().UserName;

        CompaniasSeleccionadas_DropDownList.DataBind();
        MonedasSeleccionadas_DropDownList.DataBind();
        CxCCxPFlag_DropDownList.DataBind();

        //ComprobantesContables_LinqDataSource.WhereParameters("Moneda").DefaultValue = -999
        //ComprobantesContables_LinqDataSource.WhereParameters("CiaContab").DefaultValue = -999

        // intentamos usar como parametros del LinqDataSource el primer item en los combos Monedas y CiasContab

        if (CompaniasSeleccionadas_DropDownList.Items.Count > 0)
        {
            CompaniasSeleccionadas_DropDownList.SelectedIndex = 0;
            VencimientoSaldosFacturas_SqlDataSource.SelectParameters["CiaContab"].DefaultValue = CompaniasSeleccionadas_DropDownList.SelectedValue;
        }

        if (MonedasSeleccionadas_DropDownList.Items.Count > 0)
        {
            MonedasSeleccionadas_DropDownList.SelectedIndex = 0;
            VencimientoSaldosFacturas_SqlDataSource.SelectParameters["Moneda"].DefaultValue = MonedasSeleccionadas_DropDownList.SelectedValue;
        }

        if (CxCCxPFlag_DropDownList.Items.Count > 0)
        {
            CxCCxPFlag_DropDownList.SelectedIndex = 0;
            VencimientoSaldosFacturas_SqlDataSource.SelectParameters["CxCCxPFlag"].DefaultValue = CxCCxPFlag_DropDownList.SelectedValue;
        }

        VencimientoSaldosFacturas_SqlDataSource.SelectParameters["NombreUsuario"].DefaultValue = Membership.GetUser().UserName;
        this.ListView1.DataBind();

        // --------------------------------------------------------------------------------
        // para mostrar el período indicado por el usuario como un subtítulo de la página

        HtmlContainerControl MyHtmlSpan = (HtmlContainerControl)Master.FindControl("PageSubTitle_Span");

        if (MyHtmlSpan != null)
        {
            switch (short.Parse(Session["TipoConsulta"].ToString()))
            {
            case 1:                  // análisis de montos por vencer {

                if (fechaInicial_consulta == new DateTime(1960, 1, 1))
                {
                    MyHtmlSpan.InnerHtml = "Antiguedad de saldos por vencer al: " + DateTime.Parse(Session["FechaConsulta"].ToString()).ToString("dd-MMM-yy");
                }

                else
                {
                    MyHtmlSpan.InnerHtml = "Antiguedad de saldos por vencer - " +
                                           fechaInicial_consulta.ToString("dd-MMM-yy") +
                                           " al " + DateTime.Parse(Session["FechaConsulta"].ToString()).ToString("dd-MMM-yy");
                }

                TipoConsulta_Label.Text = "(Nota: una cantidad de días negativa indica un saldo pendiente ya vencido)";
                break;

            case 2:                  // análisis de montos vencidos

                if (fechaInicial_consulta == new DateTime(1960, 1, 1))
                {
                    MyHtmlSpan.InnerHtml = "Antiguedad de saldos vencidos al: " + DateTime.Parse(Session["FechaConsulta"].ToString()).ToString("dd-MMM-yy");
                }

                else
                {
                    MyHtmlSpan.InnerHtml = "Antiguedad de saldos vencidos - " +
                                           fechaInicial_consulta.ToString("dd-MMM-yy") +
                                           " al " + DateTime.Parse(Session["FechaConsulta"].ToString()).ToString("dd-MMM-yy");
                }

                TipoConsulta_Label.Text = "(Nota: una cantidad de días positiva indica un saldo pendiente por vencerse)";
                break;
            }
        }
    }