public ActionResult GenerateSettlement(DateTime start, DateTime end) { if (Session["CurrentUser"] != null) { using (TransactionScope scope = new TransactionScope()) { var outlays = db.Outlay.Where(o => o.oDate >= start && o.oDate <= end && o.oDeleted != true); Dictionary <int, SettlementLine> slDict = new Dictionary <int, SettlementLine>(); UserAccount currentUser = Session["CurrentUser"] as UserAccount; Settlement settlement = new Settlement(); settlement.sUpdatedBy = currentUser.uaId; settlement.sUpdatedDate = DateTime.Now; settlement.sStartDate = start; settlement.sEndDate = end; settlement.sTotalCost = 0; foreach (var item in outlays) { settlement.sTotalCost += item.oTotalMoney; SettlementLine templine = GetSettlementLineFromDict(slDict, (int)item.ouaId); templine.sActuallyPay += item.oTotalMoney;//个人已经支付 slDict[(int)item.ouaId] = templine; var outlayLine = db.OutlayLine.Where(ol => ol.oloId == item.oId && ol.olDelete != true); foreach (var line in outlayLine) { SettlementLine sl = GetSettlementLineFromDict(slDict, (int)line.oluaId); sl.sPayable += line.olPayMoney;//个人应该支付 slDict[(int)line.oluaId] = sl; } } db.Settlement.Add(settlement); db.SaveChanges(); foreach (var item in slDict.Values) { item.slsId = settlement.sId; item.sBalance = item.sPayable - item.sActuallyPay; db.SettlementLine.Add(item); db.SaveChanges(); } scope.Complete(); } return(AjaxResult("success", "添加成功")); } else { return(AjaxResult("error", "未登陆")); } }
private SettlementLine GetSettlementLineFromDict(Dictionary <int, SettlementLine> slDict, int key) { if (slDict.ContainsKey(key)) { return(slDict[key]); } else { SettlementLine sl = new SettlementLine(); sl.sluaId = key; sl.sActuallyPay = 0; sl.sPayable = 0; slDict.Add(key, sl); return(sl); } }