Example #1
0
        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", "未登陆"));
            }
        }
Example #2
0
 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);
     }
 }