예제 #1
0
 private void cmb_cuentas_SelectedIndexChanged(object sender, EventArgs e)
 {
     if (cmb_cuentas.SelectedIndex >= 0)
     {
         CuentaSeleccionada = cuentas[cmb_cuentas.SelectedIndex];
         CuentaSeleccionada.EliminarCache();
         CargarCuentaSeleccionada();
         GenerarProyeccion(CuentaSeleccionada);
     }
 }
예제 #2
0
        private void GenerarProyeccion(_Cuenta CuentaSeleccionada)
        {
            CuentaSeleccionada.EliminarCache();
            movimientosSimuladosTemp.Clear();
            if (CuentaSeleccionada == null)
            {
                Herramientas.Forms.Mensajes.Advertencia("Debe seleccionar una cuenta antes");
                return;
            }
            dgv_proyeccion.Rows.Clear();

            //if (CuentaSeleccionada.Ll_MovimientosSimulados != null)
            //    foreach (_MovimientoCuenta movimientoSimulado in CuentaSeleccionada.Ll_MovimientosSimulados)
            //        movimientoSimulado.Dt_fecha = DateTime.Now;

            List <_MovimientoCuenta> movimientos = new List <_MovimientoCuenta>();

            if (!CuentaSeleccionada.Bo_EsDeAhorro)
            {
                movimientos = GeneraMovimientoDeIntereses(CuentaSeleccionada.In_DiaCorte, CuentaSeleccionada.In_DiasParaPago);
            }
            if (CuentaSeleccionada.Ll_Movimientos != null)
            {
                movimientos.AddRange(CuentaSeleccionada.Ll_Movimientos);
            }
            if (CuentaSeleccionada.Ll_MovimientosSimulados != null)
            {
                movimientos.AddRange(CuentaSeleccionada.Ll_MovimientosSimulados);
            }

            foreach (_MovimientoCuenta movimiento in movimientos)
            {
                movimiento.Dt_fechaAplicacion = new DateTime(movimiento.Dt_fechaAplicacion.Year, movimiento.Dt_fechaAplicacion.Month, movimiento.Dt_fechaAplicacion.Day);
            }

            List <_MovimientoCuenta> movimientosOrdenados = movimientos.OrderBy(x => x.Dt_fechaAplicacion).ThenBy(x => x.Dt_fecha).ToList <_MovimientoCuenta>();

            double saldoActual = CuentaSeleccionada.Do_saldo;

            foreach (_MovimientoCuenta movimiento in movimientosOrdenados)
            {
                if (new DateTime(movimiento.Dt_fechaAplicacion.Year, movimiento.Dt_fechaAplicacion.Month, movimiento.Dt_fechaAplicacion.Day) >= new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day) && new DateTime(movimiento.Dt_fechaAplicacion.Year, movimiento.Dt_fechaAplicacion.Month, movimiento.Dt_fechaAplicacion.Day) <= new DateTime(dtp_fechaHasta.Value.Year, dtp_fechaHasta.Value.Month, dtp_fechaHasta.Value.Day).AddHours(24))
                {
                    if (movimiento.Bo_EsSimulado)
                    {
                        movimiento.Do_Saldo = 0;
                    }
                    double multiplicadorCuenta = 1;
                    if (CuentaSeleccionada.Bo_EsDeAhorro)
                    {
                        multiplicadorCuenta = -1;
                    }
                    //si el movimiento es de interes mensual, entonces se agrega una fila con el monto a pagar antes de los intereses
                    if (movimiento.Oo_TipoMovimiento.St_Nombre.Equals("(Simulado) - Intereses Mensuales"))
                    {
                        dgv_proyeccion.Rows.Add(Herramientas.Conversiones.Formatos.DateTimeAFechaCortaConMesTextoAbreviado(movimiento.Dt_fechaAplicacion), "", "   ## FECHA LIMITE DE PAGO ##", "", Herramientas.Conversiones.Formatos.DoubleAMonedaANDecimales(saldoActual, 2), "Importe a pagar en la fecha limite de la cuenta.");
                        movimientosSimuladosTemp.Add(null);
                        for (int i = 0; i < dgv_proyeccion.Rows[dgv_proyeccion.Rows.Count - 1].Cells.Count; i++)
                        {
                            dgv_proyeccion.Rows[dgv_proyeccion.Rows.Count - 1].Cells[i].Style.BackColor = Color.LightBlue;
                            dgv_proyeccion.Rows[dgv_proyeccion.Rows.Count - 1].Cells[i].Style.ForeColor = Color.Black;
                        }
                    }
                    // si el tipo de movimiento es de intereses se calculan los intereses
                    if (!CuentaSeleccionada.Bo_EsDeAhorro && movimiento.Oo_TipoMovimiento.St_Nombre.Equals("(Simulado) - Intereses Mensuales") && saldoActual > 0)
                    {
                        double calculoIntereses = saldoActual * (CuentaSeleccionada.Do_PorcentajeInteresMensual / 100);
                        movimiento.Do_Importe = calculoIntereses;
                        movimiento.Do_Importe = movimiento.Do_Importe * 1.16;
                    }
                    //se calcula el saldo del movimiento solo si su fecha de aplicacion es mayor a hoy
                    if (movimiento.Dt_fechaAplicacion >= new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day) && movimiento.Do_Saldo == 0 && !movimiento.Bo_EstaAplicadoAlSaldo)
                    {
                        saldoActual         = saldoActual + movimiento.Do_Importe * movimiento.Oo_TipoMovimiento.Do_MultiplicadorSigno * multiplicadorCuenta;
                        movimiento.Do_Saldo = saldoActual;
                    }
                    //se le pone el prefijo simulado a los movimientos simulados
                    if (movimiento.Bo_EsSimulado)
                    {
                        if (!movimiento.Oo_TipoMovimiento.St_Nombre.Contains("(Simulado) - "))
                        {
                            movimiento.Oo_TipoMovimiento.St_Nombre = "(Simulado) - " + movimiento.Oo_TipoMovimiento.St_Nombre;
                        }
                    }
                    dgv_proyeccion.Rows.Add(Herramientas.Conversiones.Formatos.DateTimeAFechaCortaConMesTextoAbreviado(movimiento.Dt_fechaAplicacion), Herramientas.Conversiones.Formatos.DateTimeAFechaCortaConMesTextoAbreviado(movimiento.Dt_fecha), movimiento.Oo_TipoMovimiento.St_Nombre, Herramientas.Conversiones.Formatos.DoubleAMonedaANDecimales(movimiento.Do_Importe, 2), Herramientas.Conversiones.Formatos.DoubleAMonedaANDecimales(movimiento.Do_Saldo, 2), movimiento.St_detalleMovimiento);
                    //coloreando los tipos de movimiento
                    if (movimiento.Oo_TipoMovimiento.Do_MultiplicadorSigno == -1)
                    {
                        dgv_proyeccion.Rows[dgv_proyeccion.Rows.Count - 1].Cells[3].Style.BackColor = Color.LightGreen;
                        dgv_proyeccion.Rows[dgv_proyeccion.Rows.Count - 1].Cells[3].Style.ForeColor = Color.Black;
                    }
                    else
                    {
                        dgv_proyeccion.Rows[dgv_proyeccion.Rows.Count - 1].Cells[3].Style.BackColor = Color.Salmon;
                        dgv_proyeccion.Rows[dgv_proyeccion.Rows.Count - 1].Cells[3].Style.ForeColor = Color.White;
                    }
                    //coloreando un movimiento simulado
                    if (movimiento.Bo_EsSimulado)
                    {
                        dgv_proyeccion.Rows[dgv_proyeccion.Rows.Count - 1].Cells[2].Style.BackColor = Color.LightGray;
                        dgv_proyeccion.Rows[dgv_proyeccion.Rows.Count - 1].Cells[2].Style.ForeColor = Color.Black;
                        movimientosSimuladosTemp.Add(movimiento);
                    }
                    else
                    {
                        movimientosSimuladosTemp.Add(movimiento); //probando eliminando movimientos
                    }
                }
            }
        }