public void DataBind(WorkingСapitalBusinessAnalysis model) { ViewModel = (WorkingСapitalBusinessAnalysis)model; this.DataContext = (WorkingСapitalBusinessAnalysis)model; LoadDiagram(ref chart); LoadDiagram2(ref chart2); UpdateColors(); }
public void DataBind(MainModel model) { ViewModel = (WorkingСapitalBusinessAnalysis)model.WorkingСapitalBA; this.DataContext = (WorkingСapitalBusinessAnalysis)model.WorkingСapitalBA; mainModel = model; LoadDiagram(ref chart); LoadDiagram2(ref chart2); }
public static WorkingСapitalBusinessAnalysis GetWorkingСapitalBA(MainModel MainModel) { var model = new WorkingСapitalBusinessAnalysis(); model.myMoney = MainModel.BusinessResults.CirculatingAssetsEnd - MainModel.BusinessResults.CurrentDebtEnd; model.myCosts = MainModel.BusinessResults.CurrentDebtEnd; model.difmyMoney = model.myMoney - MainModel.GeneralBA.PastBisRes.CirculatingAssetsEnd - MainModel.GeneralBA.PastBisRes.CurrentDebtEnd; model.difmyMoneyByPercent = (MainModel.GeneralBA.PastBisRes.CirculatingAssetsEnd - MainModel.GeneralBA.PastBisRes.CurrentDebtEnd) != 0 ? model.difmyMoney / (MainModel.GeneralBA.PastBisRes.CirculatingAssetsEnd - MainModel.GeneralBA.PastBisRes.CurrentDebtEnd) * 100 : 0; model.difmyCosts = model.myCosts - MainModel.GeneralBA.PastBisRes.CurrentDebtEnd; model.difmyCostsByPercent = MainModel.GeneralBA.PastBisRes.CurrentDebtEnd != 0 ? model.difmyCosts / MainModel.GeneralBA.PastBisRes.CurrentDebtEnd * 100 : 0; model.stSokDiagram = new Dictionary<string, decimal>(); var st = ((Month)MainModel.StartDate.Month).ToString() + "," + MainModel.StartDate.AddYears(MainModel.TimeSpan * -1).Year.ToString(); var en = ((Month)MainModel.EndDate.Month).ToString() + "," + MainModel.EndDate.AddYears(MainModel.TimeSpan * -1).Year.ToString(); model.stSokDiagram.Add(st , MainModel.BusinessResults.CirculatingAssetsStart - MainModel.BusinessResults.CurrentDebtStart); model.stSokDiagram.Add(st + "-" + en, 0); model.stSokDiagram.Add(en, model.myMoney); model.profit = new Dictionary<string, decimal>(); model.profit.Add(st, 0); model.profit.Add(st + "-" + en, MainModel.GeneralBA.NetProfit); model.profit.Add(en, 0); model.stDebtsDiagram = new Dictionary<string, decimal>(); model.stDebtsDiagram.Add(st, MainModel.BusinessResults.CurrentDebtStart); model.stDebtsDiagram.Add(st + "-" + en, 0); model.stDebtsDiagram.Add(en, MainModel.BusinessResults.CurrentDebtEnd); model.turnoverDiagram = new Dictionary<string, decimal>(); var tr = (from sa in MainModel.Sales.SelectMany(_ => _.Sales) group sa by sa.GroupCode into g select new { code = g.FirstOrDefault().GroupCode, name = g.FirstOrDefault().GroupName, val = (g.FirstOrDefault().CountGoodsSt + g.FirstOrDefault().CountGoodsEnd == 0 ? 1 : g.Sum(_ => _.CostPrise) / (((g.Count() != 0 ? g.FirstOrDefault().CountGoodsSt + g.FirstOrDefault().CountGoodsEnd : 0)) / 2)) * (MainModel.EndDate - MainModel.StartDate).Days }).OrderByDescending(_ => _.val).ToList(); var ttC = 3; if (tr.Count < 3) ttC = tr.Count; for (var i = 0; i < ttC; i++) model.turnoverDiagram.Add(tr[i].name, tr[i].val); model.turnoverDiagram.Add("Прочее", tr.Sum(_ => _.val) - model.turnoverDiagram.Sum(_ => _.Value)); DateTime sty = MainModel.StartDate; DateTime eny = MainModel.EndDate; BusinessResults tmpBR = new BusinessResults(); model.aveDZDiagram = new Dictionary<string, decimal>(); model.aveGoodsDiagram = new Dictionary<string, decimal>(); model.aveMoneyDiagram = new Dictionary<string, decimal>(); model.aveSalesDiagram = new Dictionary<string, decimal>(); model.DZ_dzVsKzDiagram = new Dictionary<string, decimal>(); model.KZ_dzVsKzDiagram = new Dictionary<string, decimal>(); var isMoreYear = (MainModel.EndDate - MainModel.StartDate).Days > 365; foreach (var item in MainModel.Sales) { MainModel.StartDate = item.Date; MainModel.EndDate = item.Date.AddMonths(1); // можно оптимизировать это, изначально это считается сразу за весь период, можно в первоначальной загрузке разбить по месяцам, // но это только если эта штука нужна будет еще где-то, если только тут, выгоды особой не будет, еще вариант вытаскивать не суммы, // а массивы данных по счетам в массивы данных с датой и на клиенте ворочать, но я думаю это тоже трешак их может быть овер 100 000 по каждому tmpBR = GetBusinessResults(MainModel, true); var mm = MainModel.IsItQuarter || isMoreYear ? string.Format("{0}, {1}", (Month)item.Date.Month, item.Date.Year) : ((Month)item.Date.Month).ToString(); model.aveDZDiagram.Add(mm, (tmpBR.DebtsOfCustomersAndOverpaymentsStart + tmpBR.DebtsOfCustomersAndOverpaymentsEnd) / 2); model.aveGoodsDiagram.Add(mm, (tmpBR.RawAndMaterialsStart + tmpBR.RawAndMaterialsEnd) / 2); model.aveMoneyDiagram.Add(mm, (tmpBR.CashInCashBoxStart + tmpBR.MoneyInTheBankAccountsStart + tmpBR.CashInCashBoxEnd + tmpBR.MoneyInTheBankAccountsEnd) / 2); model.aveSalesDiagram.Add(mm, item.Sales.Sum(_ => _.SalesWithoutNDS)); model.KZ_dzVsKzDiagram.Add(mm, (tmpBR.DebtsOfCustomersAndOverpaymentsStart + tmpBR.DebtsOfCustomersAndOverpaymentsEnd) / 2); model.DZ_dzVsKzDiagram.Add(mm, (tmpBR.PayablesToSuppliersShortTermDebtsStart + tmpBR.PayablesToSuppliersShortTermDebtsEnd) / 2); } MainModel.StartDate = sty; MainModel.EndDate = eny; return model; }