private void cmb_cuentas_SelectedIndexChanged(object sender, EventArgs e) { if (cmb_cuentas.SelectedIndex >= 0) { CuentaSeleccionada = cuentas[cmb_cuentas.SelectedIndex]; CuentaSeleccionada.EliminarCache(); CargarCuentaSeleccionada(); GenerarProyeccion(CuentaSeleccionada); } }
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 } } } }