public ActionResult GetRule(int ruleId) { using (var q = new FinancialQueries()) { var rule = q.GetRule(ruleId); var mdr = new ModuleDepositRules() { id = rule.Id, nome = rule.Name, regras = new regra[rule.DistributionPercentages.Count] }; for (int i = 0; i < rule.DistributionPercentages.Count; i++) { var p = rule.DistributionPercentages.ElementAt(i); regra r = new regra() { id = p.ID, fundo = new fundo() { id = p.FundID.Value, text = p.Fund.Name }, objetivo = new objetivo() { id = p.ReserveID, text = p.Reserve.Name }, porcentagem = p.Percentage * 100 }; mdr.regras[i] = r; } return(Json(mdr)); } }
public PartialViewResult RulesPartial() { List <DistributionRule> ruleList = null; List <SelectListItem> fundList = null; List <SelectListItem> reserveList = null; using (var queries = new FinancialQueries()) { ruleList = queries.GetDistributionRules(User.Identity.Name); var funds = queries.GetFunds(User.Identity.Name); var reserves = queries.GetReserves(User.Identity.Name); fundList = Helper.GetListItem(funds); reserveList = Helper.GetListItem(reserves); } RulesViewModel rvm = new RulesViewModel() { RuleList = ruleList, RuleViewModel = new DistributionRuleViewModel() }; rvm.RuleViewModel.Rule = new DistributionRule() { DistributionPercentages = new List <DistributionPercentage>() }; rvm.RuleViewModel.Funds = fundList; rvm.RuleViewModel.Reserves = reserveList; return(PartialView("RulesPartial", rvm)); }
public PartialViewResult RulesPercentagePartial(int ruleId) { List <DistributionPercentage> percentageList = null; List <Fund> fundList = null; List <Reserve> reserveList = null; using (var queries = new FinancialQueries()) { fundList = queries.GetFunds(User.Identity.Name); reserveList = queries.GetReserves(User.Identity.Name); percentageList = queries.GetPercentageList(ruleId); } PercentageRuleViewModel prvm = new PercentageRuleViewModel() { DistributionPercentageList = percentageList, DistributionPercentage = new DistributionPercentage(), FundsList = Helper.GetListItem(fundList, "NONE"), ReservesList = Helper.GetListItem(reserveList) }; prvm.DistributionPercentage.DistributionRuleId = ruleId; return(PartialView("RulesPercentagePartial", prvm)); }
public PartialViewResult SimulatorPartial() { using (var q = new FinancialQueries()) { var reserves = q.GetReserves(User.Identity.Name).OrderByDescending(r => r.DateToWithdraw).ToList(); return(PartialView("SimulatorPartial", reserves)); } }
public ActionResult UpdateBalance(UpdateBalanceViewModel ubvm) { using (var fo = new FinancialOperations()) using (var fq = new FinancialQueries()) { var fundBal = fq.GetBalance(ubvm.Date, User.Identity.Name, ubvm.SelectedFundId); fo.UpdateBalance(ubvm.Value - fundBal, ubvm.SelectedFundId, ubvm.Date, User.Identity.Name); } return(SavingsAccountPartial()); }
// // GET: /Funds/ public PartialViewResult FundsPartial() { FundsViewModel fvm = new FundsViewModel(); using (FinancialQueries fq = new FinancialQueries()) { fvm.FundList = fq.GetFunds(User.Identity.Name); fvm.Fund = new Fund(); fvm.FundTypeList = Helper.GetDescriptions(typeof(EFundType)); } return(PartialView("FundsPartial", fvm)); }
public ActionResult GetFundsFromDepositRule(int depositRuleId) { using (FinancialQueries fq = new FinancialQueries()) { if (depositRuleId != -1) { int[] funds = fq.GetDistributionRule(depositRuleId).DistributionPercentages.Where(dp => dp.FundID != null).Select(dp => dp.FundID.Value).Distinct().ToArray(); return(Json(funds)); } } return(Json(new { })); }
// // GET: /Reserve/ public PartialViewResult ReservesPartial() { ReserveViewModel rvm = new ReserveViewModel(); using (FinancialQueries fq = new FinancialQueries()) { rvm.ReserveList = fq.GetReserves(User.Identity.Name); } rvm.Reserve = new Reserve(); rvm.Reserve.DateToWithdraw = DateTime.Today; rvm.TimeUnitList = Helper.GetDescriptions(typeof(ETimeUnit)); return(PartialView("ReservesPartial", rvm)); }
public ActionResult GetTransationList(int?fundId, int?reserveId = null) { if (fundId == -1) { fundId = null; } if (reserveId == -1) { reserveId = null; } using (FinancialQueries queries = new FinancialQueries()) { List <Transaction> transactionList = queries.GetTransactions( fundId, reserveId, DateTime.Today, User.Identity.Name); var ops = transactionList.GroupBy(t => t.Operation); var opsList = new List <OperationVM>(); foreach (var op in ops) { var opVW = new OperationVM() { Date = op.Key.Date, Description = op.Key.Type != EOperationType.BalanceUpdate ? op.Key.Description : "Rendimento", Value = op.Where(o => (reserveId == null || o.ReserveID == reserveId) && (fundId == null || o.FundID == fundId)) .Sum(o => o.Value), Reserves = op.Select(o => o.ReserveID).Distinct().Count() == 1 ? op.FirstOrDefault().Reserve.Name : String.Concat(op.Select(o => o.Reserve.NameAbbreviation + "/").Distinct()).Trim('/'), Funds = op.Select(o => o.FundID).Distinct().Count() == 1 ? op.FirstOrDefault().Fund.Name : String.Concat(op.Select(o => o.Fund.NameAbbreviation + "/").Distinct()).Trim('/') }; opsList.Add(opVW); } return(Json(new { balance = transactionList.Sum(t => t.Value).ToString("0.00"), transactionList = Helper.RenderPartialViewToString("TransactionListPartial", opsList, ControllerContext, ViewData, TempData) })); } }
public ActionResult SubmitRule(ModuleDepositRules mdr) { DistributionRule dr = null; var percsToRemove = new List <DistributionPercentage>(); if (mdr.id == 0) { dr = new DistributionRule() { Name = mdr.nome, UserId = User.Identity.Name, DistributionPercentages = new List <DistributionPercentage>() }; foreach (var perc in mdr.regras) { var dp = new DistributionPercentage() { FundID = perc.fundo.id, ReserveID = perc.objetivo.id, Percentage = perc.porcentagem / 100, }; dr.DistributionPercentages.Add(dp); } using (var o = new FinancialOperations()) o.AddRule(dr); } else { using (var q = new FinancialQueries()) { dr = q.GetDistributionRule(mdr.id.Value); for (int i = 0; i < dr.DistributionPercentages.Count; i++) { var currPerc = dr.DistributionPercentages.ElementAt(i); if (mdr.regras.Any(r => r.fundo.id == currPerc.FundID && r.objetivo.id == currPerc.ReserveID) == false) { percsToRemove.Add(currPerc); } } dr.Name = mdr.nome; foreach (var perc in mdr.regras) { var dp = dr.DistributionPercentages.SingleOrDefault(p => p.FundID == perc.fundo.id && p.ReserveID == perc.objetivo.id); if (dp == null) { dp = new DistributionPercentage() { FundID = perc.fundo.id, ReserveID = perc.objetivo.id, Percentage = perc.porcentagem / 100 }; dr.DistributionPercentages.Add(dp); } else { dp.FundID = perc.fundo.id; dp.ReserveID = perc.objetivo.id; dp.Percentage = perc.porcentagem; } } using (var o = new FinancialOperations(q.Context)) o.UpdateRule(dr, percsToRemove); } } return(RulesPartial()); }
public ActionResult GetProjection(string[] checkedRes) { using (var q = new FinancialQueries()) { var user = User.Identity.Name; var funds = q.GetFunds(user); var reserves = q.GetReserves(user).Where(r => checkedRes.Any(c => c == r.ID.ToString())).OrderByDescending(r => r.DateToWithdraw); var today = DateTime.Today; var labels = new List <string>(); DateTime end = reserves.Max(r => r.DateToWithdraw); DateTime currDate1 = today; int incr = (int)Math.Ceiling(end.Subtract(today).TotalDays / 1095); while (currDate1.Year < end.Year || (currDate1.Year == end.Year && currDate1.Month <= end.Month)) { labels.Add(GetMonth(currDate1.Month) + "-" + GetYear(currDate1.Year)); currDate1 = currDate1.AddMonths(incr); } var datasets = new List <dataset>(); int x = 0; decimal totalMonthlyDep = 0; foreach (var res in reserves) { x++; int monthsToAchieve = 0; var currDate = today; while (currDate <= res.DateToWithdraw) { monthsToAchieve++; currDate = currDate.AddMonths(1); } // escolhendo fundo decimal?percIncome = null; if (monthsToAchieve < 24) { percIncome = 1.0015m; } else if (monthsToAchieve < 84) { percIncome = 1.002875m; } else { percIncome = 1.0063125m; } var resBal = q.GetBalance(today, user, null, res.ID); decimal monthlyDep = Math.Max(0, res.FinalExpectedValue - resBal); decimal div = 0; for (int i = 0; i < monthsToAchieve; i++) { div += (decimal)Math.Pow((double)percIncome, i); } monthlyDep /= Math.Max(1, div); var data = new List <decimal>(); decimal currBal = q.GetBalance(today, user, reserveId: res.ID); int currIt = 0; for (int i = 0; i < monthsToAchieve; i++) { currIt++; if (currIt == 1) { data.Add(currBal); } if (currIt == incr) { currIt = 0; } currBal *= percIncome.Value; currBal += monthlyDep; } currIt++; while (currIt != 1) { if (currIt == incr) { currIt = 0; } currBal *= percIncome.Value; currBal += monthlyDep; currIt++; } data.Add(currBal); totalMonthlyDep += monthlyDep; var dataset = new dataset() { reserveId = res.ID, monthlyDep = monthlyDep.ToString("0.00"), data = data, fillColor = "rgba(151,187,205,0)", strokeColor = GetColor(x), pointColor = "rgba(151,187,205,1)", pointStrokeColor = "#fff" }; datasets.Add(dataset); } var simularRes = new simulatorResult() { totalMonthlyDep = totalMonthlyDep.ToString("0.00"), labels = labels, datasets = datasets }; return(Json(simularRes)); } }
public void CheckForAutomaticBalanceUpdate(Dictionary <DateTime, decimal> profitIndices) { using (FinancialQueries queries = new FinancialQueries()) { List <Fund> funds = queries.GetFundsWithAutomaticUpdateBalance(EFundType.Poupanca); foreach (var f in funds) { var balBaseDays = new Dictionary <int, decimal>(); List <Transaction> transactions = queries.GetTransactions(f.ID, null, DateTime.Today, f.UserId); if (transactions.Count == 0) { continue; } DateTime currDate = new DateTime(2014, 1, 1); while (currDate < DateTime.Today) { bool updatedBalance = false; var dayDeposits = transactions.Where( t => t.Operation.Date == currDate && (t.Operation.Type == EOperationType.Deposit || t.Operation.Type == EOperationType.BalanceUpdate)); if (dayDeposits.Any(t => t.Operation.Type == EOperationType.BalanceUpdate)) { updatedBalance = true; } if (!updatedBalance && balBaseDays.ContainsKey(currDate.Day)) { balBaseDays[currDate.Day] = AdjustFundBalance(balBaseDays[currDate.Day], currDate, profitIndices[currDate], f); } // deposits foreach (var t in dayDeposits) { int day = Math.Min(28, t.Operation.Date.Day); if (!balBaseDays.ContainsKey(day)) { balBaseDays.Add(day, 0); } else if (t.Operation.Type == EOperationType.BalanceUpdate) { updatedBalance = true; } balBaseDays[day] += t.Value; } // withdraws var dayWithdraws = transactions.Where( t => t.Operation.Date == currDate && t.Operation.Type == EOperationType.Withdraw); foreach (var t in dayWithdraws) { decimal value = -t.Value; int day = currDate.Day; while (value != 0) { int?nextDay = null; int?diffNextDay = null; foreach (var d in balBaseDays.Keys) { if (nextDay == null || (d < day && (day - d) < diffNextDay) || (d > day && day + (28 - d) < diffNextDay)) { if (d < day) { diffNextDay = day - d; } else if (d > day) { diffNextDay = day + (28 - d); } nextDay = d; } } decimal wdValue = Math.Min(value, balBaseDays[nextDay.Value]); balBaseDays[nextDay.Value] -= wdValue; value -= wdValue; } } currDate = currDate.AddDays(1); } } } }
// // GET: /Manager/ public PartialViewResult SavingsAccountPartial() { var tvm = new TransactionViewModel(); using (FinancialQueries queries = new FinancialQueries()) { List <Fund> fundList = queries.GetFunds(User.Identity.Name); List <Reserve> reserveList = queries.GetReserves(User.Identity.Name); List <SelectListItem> distributionRuleItems = Helper.GetListItem(queries.GetDistributionRules(User.Identity.Name)); tvm.TransactionList = queries.GetTransactions(null, null, DateTime.Today, User.Identity.Name); var ops = tvm.TransactionList.GroupBy(t => t.Operation); var opsList = new List <OperationVM>(); foreach (var op in ops) { var opVW = new OperationVM() { Date = op.Key.Date, Description = op.Key.Type != EOperationType.BalanceUpdate ? op.Key.Description : "Rendimento", Value = op.Key.TotalValue, Reserves = op.Select(o => o.ReserveID).Distinct().Count() == 1 ? op.FirstOrDefault().Reserve.Name : String.Concat(op.Select(o => o.Reserve.NameAbbreviation + "/").Distinct()).Trim('/'), Funds = op.Select(o => o.FundID).Distinct().Count() == 1 ? op.FirstOrDefault().Fund.Name : String.Concat(op.Select(o => o.Fund.NameAbbreviation + "/").Distinct()).Trim('/') }; opsList.Add(opVW); } tvm.OperationList = opsList; tvm.FundList = Helper.GetListItem(fundList, "TODOS"); tvm.ReserveList = Helper.GetListItem(reserveList, "TODOS"); tvm.Balance = tvm.TransactionList.Sum(t => t.Value); List <UpdateFundToDepositViewModel> fundsBalanceList = new List <UpdateFundToDepositViewModel>(); fundsBalanceList.AddRange( fundList.Select( f => new UpdateFundToDepositViewModel() { FundId = f.ID, FundName = f.Name, CurrentBalance = queries.GetBalance(DateTime.Today, User.Identity.Name, f.ID).ToString("0.00") } ) ); DepositViewModel dvm = new DepositViewModel() { FundList = Helper.GetListItem(fundList, "NENHUM"), ReserveList = Helper.GetListItem(reserveList, "NENHUM"), DistributionRuleList = distributionRuleItems, Date = DateTime.Today, fundsBalanceList = fundsBalanceList }; tvm.DepositViewModel = dvm; WithdrawViewModel wvm = new WithdrawViewModel() { FundList = Helper.GetListItem(fundList), ReserveList = Helper.GetListItem(reserveList), Date = DateTime.Today }; tvm.WithdrawViewModel = wvm; UpdateBalanceViewModel ubvm = new UpdateBalanceViewModel() { FundList = Helper.GetListItem(fundList), Date = DateTime.Today }; tvm.UpdateBalanceViewModel = ubvm; } ModelState.Clear(); return(PartialView("SavingsAccountPartial", tvm)); }