public static List<Cuenta> Proyeccion(FinancyDB db, DateTime date, string user) { var currentDate = DateTime.Now; var curDate = new DateTime(currentDate.Year, currentDate.Month, 1).AddMonths(1); while (currentDate < date) { foreach (var r in db.TransaccionProyectadas.Where(r => r.Cuenta.User == user).ToList()) { try { ProyectaMes(db, r, currentDate, user); } catch { var z = 9; } } currentDate = curDate; curDate = curDate.AddMonths(1); } db.SaveChanges(); CuentaUtil.ActualizaMontos(db, user); return CuentaUtil.ActualizaMontosTemp(db, user); }
public static void ActualizaMontos(FinancyDB db, string user) { var list = db.Cuentas.Where(r => r.User == user).ToList(); foreach (var cuenta in list) { var monto = cuenta.Monto; var transacciones = (from r in db.Transacciones where r.Cuenta_Id == cuenta.Cuenta_Id && r.Fecha < DateTime.Now select (double?)r.Monto).Sum() ?? 0; cuenta.Balanc = monto + transacciones; } db.SaveChanges(); }
public static List<Cuenta> ActualizaMontosTemp(FinancyDB db, string user) { var list = db.Cuentas.AsNoTracking().Where(r => r.User == user).ToList(); foreach (var cuenta in list) { var monto = cuenta.Monto; var transacciones = (from r in db.TransaccionTemps where r.Cuenta_Id == cuenta.Cuenta_Id select (double?)r.Monto).Sum() ?? 0; cuenta.Balanc = monto + transacciones; } return list; //db.SaveChanges(); }
public static List<Presupuesto> GetPresupuesto(FinancyDB db, DateTime date, string user) { var presupuestos = new List<Presupuesto>(); foreach (var pres in db.TransaccionProyectadas.Include(x => x.Tipo).Where(x => x.Monto <= 0 && x.Cuenta.User == user).ToList()) { var consumido = (from r in db.Transacciones where r.TransaccionProyectada_Id == pres.TransaccionProyectada_Id && r.Fecha.Month == date.Month && r.Cuenta.User == user select (double?)r.Monto).Sum() ?? 0; var limite = pres.Monto * pres.Tipo.Cantidad; presupuestos.Add(new Presupuesto() {Presupuesto_Id = pres.TransaccionProyectada_Id, Descripcion = pres.Descripcion, Limite = Math.Abs(limite), Gastado = Math.Abs(consumido)}); } return presupuestos; }
public static void Proyecta(FinancyDB db, TransaccionProyectada trans, DateTime lastDate, string user) { var transacciones = db.Transacciones .Where(w => w.Estado == "Proyección" && w.TransaccionProyectada_Id == trans.TransaccionProyectada_Id && w.Cuenta.User == user); if (transacciones != null) { foreach (var transaccion in transacciones) { db.Transacciones.Remove(transaccion); } db.SaveChanges(); } trans = (from x in db.TransaccionProyectadas.Include(x => x.Tipo).Include(x => x.Cuenta) where x.TransaccionProyectada_Id == trans.TransaccionProyectada_Id && x.Cuenta.User == user select x).First(); var diaActual = lastDate.Day; var mesActual = lastDate.Month; var anoActual = lastDate.Year; var diasEnMes = DateTime.DaysInMonth(anoActual, mesActual); if (trans.Tipo.Descripcion == "Diario") { lastDate = lastDate.AddDays(1); var transaccion = new Transaccion() { Cuenta = trans.Cuenta, Descripcion = trans.Descripcion, TransaccionProyectada = trans, Estado = "Proyección", Fecha = lastDate, Monto = trans.Monto }; db.Transacciones.Add(transaccion); } else if (trans.Tipo.Descripcion == "De Lunes a Viernes") { for (int i = diaActual; i <= diasEnMes; i++) { lastDate = lastDate.AddDays(1); if (lastDate.DayOfWeek != DayOfWeek.Saturday && lastDate.DayOfWeek != DayOfWeek.Sunday) { var transaccion = new Transaccion() { Cuenta = trans.Cuenta, Descripcion = trans.Descripcion, TransaccionProyectada = trans, Estado = "Proyección", Fecha = lastDate, Monto = trans.Monto }; db.Transacciones.Add(transaccion); break; } } } else if (trans.Tipo.Descripcion == "Semanal") { lastDate = GetNextWeekday(lastDate, (int)trans.Dia); var transaccion = new Transaccion() { Cuenta = trans.Cuenta, Descripcion = trans.Descripcion, TransaccionProyectada = trans, Estado = "Proyección", Fecha = lastDate, Monto = trans.Monto }; db.Transacciones.Add(transaccion); } if (trans.Tipo.Descripcion == "Mensual") { var transaccion = new Transaccion() { Cuenta = trans.Cuenta, Descripcion = trans.Descripcion, TransaccionProyectada = trans, Estado = "Proyección", Monto = trans.Monto }; transaccion.Fecha = new DateTime(anoActual, mesActual, (int)trans.Dia); if (transaccion.Fecha <= lastDate) transaccion.Fecha = new DateTime(anoActual, mesActual + 1, (int)trans.Dia); db.Transacciones.Add(transaccion); } }