/// <summary> /// 可为负数的保存校验 /// </summary> /// <returns>returns</returns> private List <string> CheckSaveB() { List <string> msgs = new List <string>(); ObservableCollection <FBEntity> details = this.OrderEntity.GetRelationFBEntities(typeof(T_FB_DEPTBUDGETADDDETAIL).Name); if (details.Count == 0) { msgs.Add(ErrorMessage.NoDetailInfo); return(msgs); } var detailList = details.Select(item => item.Entity as T_FB_DEPTBUDGETADDDETAIL).ToList(); var existBiggerThanZero = detailList.Count(item => item.TOTALBUDGETMONEY > 0) > 0; var existLessThanZero = detailList.Count(item => item.TOTALBUDGETMONEY < 0) > 0; if (existBiggerThanZero && existLessThanZero) { msgs.Add("预算明细只能全为负数,或全为正数,请确认!"); return(msgs); } // 都大于0的 if (!existLessThanZero) { return(CheckSaveA()); } details.ToList().ForEach(item => { T_FB_DEPTBUDGETADDDETAIL detail = item.Entity as T_FB_DEPTBUDGETADDDETAIL; // 判断个人预算是否出现负数的情况 var personDetailList = item.GetEntityList <T_FB_PERSONBUDGETADDDETAIL>(itemT => { var result = itemT as T_FB_PERSONBUDGETADDDETAIL; if (result == null) { V_DepartmentSum vd = itemT as V_DepartmentSum; result = new T_FB_PERSONBUDGETADDDETAIL() { LIMITBUDGETMONEY = vd.LIMITBUDGETMONEY, BUDGETMONEY = vd.BUDGETMONEY, OWNERNAME = vd.OWNERNAME, OWNERPOSTNAME = vd.OWNERPOSTNAME }; } return(result); }); // 表示没做过任何操作 if (detail.TOTALBUDGETMONEY.Equal(0) && detail.BUDGETMONEY.Equal(0)) { return; } if (detail.TOTALBUDGETMONEY > 0) { string errorMessage = string.Format(ErrorMessage.MoneyBiggerThanZero, detail.T_FB_SUBJECT.SUBJECTNAME, FieldDisplayName.BudgetMoney); msgs.Add(errorMessage); } //不能大于当前可用结余AUDITBUDGETMONEY if (detail.AUDITBUDGETMONEY.Add(detail.TOTALBUDGETMONEY) < 0) { msgs.Add(string.Format(ErrorMessage.MoneyBigger, "扣减的预算金额", "可用结余", detail.T_FB_SUBJECT.SUBJECTNAME)); } personDetailList.ForEach(itemP => { if (itemP.LIMITBUDGETMONEY.Add(itemP.BUDGETMONEY) < 0) { msgs.Add(string.Format("科目:{0} 扣减的预算金额不能大于可用结余!", detail.T_FB_SUBJECT.SUBJECTNAME + "(" + itemP.OWNERNAME + ")")); } else if (itemP.BUDGETMONEY > 0) { msgs.Add(string.Format("科目:{0} 扣减的预算金额不能大于零!", detail.T_FB_SUBJECT.SUBJECTNAME + "(" + itemP.OWNERNAME + ")")); } }); }); T_FB_DEPTBUDGETADDMASTER entMaster = this.OrderEntity.FBEntity.Entity as T_FB_DEPTBUDGETADDMASTER; if (entMaster.BUDGETCHARGE >= 0) { msgs.Add("费用总预算必须小于0!"); } return(msgs); }
private void SetPropertyChanged() { // 因后台保存是二层结构,所有需要把 A->B->C这种结构变成 A->B, A->C结构 ObservableCollection <FBEntity> detailPersonList = this.OrderEntity.GetRelationFBEntities(typeof(T_FB_PERSONBUDGETADDDETAIL).Name); ObservableCollection <FBEntity> detailList = this.OrderEntity.GetRelationFBEntities(typeof(T_FB_DEPTBUDGETADDDETAIL).Name); detailList.ToList().ForEach(item => { #region 部门变化 // 部门预算明细变化事件 item.Entity.PropertyChanged += (senderDept, eDept) => { T_FB_DEPTBUDGETADDDETAIL DeptDetail = senderDept as T_FB_DEPTBUDGETADDDETAIL; #region // 部门预算明细的总预算变化时,统计所有明细的预算 if (eDept.PropertyName == "TOTALBUDGETMONEY") { decimal?newTotal = detailList.Sum(itemDept => { return((decimal?)itemDept.GetObjValue("Entity.TOTALBUDGETMONEY")); }); this.OrderEntity.SetObjValue("Entity.BUDGETCHARGE", newTotal); } // 改:先填写预算总额,后填个人预算,而部门的公共预算=预算总额 - 个人预算 2011-12-28 // 个人预算或部门预算变化时,统计个人预算明细 + 部门预算 if (eDept.PropertyName == "TOTALBUDGETMONEY" || eDept.PropertyName == "PERSONBUDGETMONEY") { DeptDetail.BUDGETMONEY = DeptDetail.TOTALBUDGETMONEY.Subtract(DeptDetail.PERSONBUDGETMONEY).Value; } #endregion }; #endregion #region 个人预算明细变化 // 个人预算明细变化 ObservableCollection <FBEntity> obPersonDetail = item.GetRelationFBEntities(typeof(T_FB_PERSONBUDGETADDDETAIL).Name); obPersonDetail.ToList().ForEach(itemPerson => { T_FB_PERSONBUDGETADDDETAIL persondetail = itemPerson.Entity as T_FB_PERSONBUDGETADDDETAIL; itemPerson.Entity.PropertyChanged += (senderPerson, ePerson) => { if (ePerson.PropertyName == "BUDGETMONEY") { var totalPerson = obPersonDetail.Sum(itemPersonDetail => { // 在个人预算中将会部门预算记录,所以需要判断是否统计的对象是个人预算 T_FB_PERSONBUDGETADDDETAIL pDetail = itemPersonDetail.Entity as T_FB_PERSONBUDGETADDDETAIL; if (pDetail != null) { return(pDetail.BUDGETMONEY); } else { return(0); } }); var itemDept = item.Entity as T_FB_DEPTBUDGETADDDETAIL; itemDept.PERSONBUDGETMONEY = totalPerson; } }; detailPersonList.Add(itemPerson); }); // 因为在个人预算中需要体现部门公共费用栏,则加入部门公共费用(T记录到个人预算集合中 if (obPersonDetail.Count > 0) { var sumEntity = new V_DepartmentSum(item.Entity); var curItemEntity = item.Entity as T_FB_DEPTBUDGETADDDETAIL; var sumFBEntity = sumEntity.ToFBEntity(); sumFBEntity.ReadOnly = true; sumEntity.LIMITBUDGETMONEY = curItemEntity.AUDITBUDGETMONEY.Subtract(obPersonDetail.Sum(itemFB => { var tee = (itemFB.Entity as T_FB_PERSONBUDGETADDDETAIL); if (tee.LIMITBUDGETMONEY == null) { return(0); } else { return(tee.LIMITBUDGETMONEY); } })); sumFBEntity.FBEntityState = FBEntityState.Unchanged; obPersonDetail.Insert(0, sumFBEntity); } else { item.HideDetails = true; } #endregion }); this.EditForm.BindingData(); this.CloseProcess(false); }
private void SetPropertyChanged() { // 因后台保存是二层结构,所有需要把 A->B->C这种结构变成 A->B, A->C结构 ObservableCollection<FBEntity> detailPersonList = this.OrderEntity.GetRelationFBEntities(typeof(T_FB_PERSONBUDGETAPPLYDETAIL).Name); ObservableCollection<FBEntity> detailList = this.OrderEntity.GetRelationFBEntities(typeof(T_FB_DEPTBUDGETAPPLYDETAIL).Name); detailList.ToList().ForEach(item => { #region 部门变化 // 部门预算明细变化事件 item.Entity.PropertyChanged += (senderDept, eDept) => { T_FB_DEPTBUDGETAPPLYDETAIL DeptDetail = senderDept as T_FB_DEPTBUDGETAPPLYDETAIL; #region // 部门预算明细的总预算变化时,统计所有明细的预算 if (eDept.PropertyName == "TOTALBUDGETMONEY") { decimal? newTotal = detailList.Sum(itemDept => { return (decimal?)itemDept.GetObjValue("Entity.TOTALBUDGETMONEY"); }); this.OrderEntity.SetObjValue("Entity.BUDGETMONEY", newTotal); } // 改:先填写预算总额,后填个人预算,而部门的公共预算=预算总额 - 个人预算 2011-12-28 // 个人预算或部门预算变化时,统计个人预算明细 + 部门预算 if (eDept.PropertyName == "TOTALBUDGETMONEY" || eDept.PropertyName == "PERSONBUDGETMONEY") { DeptDetail.BUDGETMONEY = DeptDetail.TOTALBUDGETMONEY.Subtract(DeptDetail.PERSONBUDGETMONEY).Value; } #endregion }; #endregion #region 个人预算明细变化 // 个人预算明细变化 ObservableCollection<FBEntity> obPersonDetail = item.GetRelationFBEntities(typeof(T_FB_PERSONBUDGETAPPLYDETAIL).Name); obPersonDetail.ToList().ForEach(itemPerson => { T_FB_PERSONBUDGETAPPLYDETAIL persondetail = itemPerson.Entity as T_FB_PERSONBUDGETAPPLYDETAIL; itemPerson.Entity.PropertyChanged += (senderPerson, ePerson) => { if (ePerson.PropertyName == "BUDGETMONEY") { var totalPerson = obPersonDetail.Sum(itemPersonDetail => { // 在个人预算中将会部门预算记录,所以需要判断是否统计的对象是个人预算 T_FB_PERSONBUDGETAPPLYDETAIL pDetail = itemPersonDetail.Entity as T_FB_PERSONBUDGETAPPLYDETAIL; if (pDetail != null) { return pDetail.BUDGETMONEY; } else { return 0; } }); var itemDept = item.Entity as T_FB_DEPTBUDGETAPPLYDETAIL; itemDept.PERSONBUDGETMONEY = totalPerson; } }; detailPersonList.Add(itemPerson); }); // 因为在个人预算中需要体现部门公共费用栏,则加入部门公共费用(T记录到个人预算集合中 if (obPersonDetail.Count > 0) { var sumEntity = new V_DepartmentSum(item.Entity); var curItemEntity = item.Entity as T_FB_DEPTBUDGETAPPLYDETAIL; var sumFBEntity = sumEntity.ToFBEntity(); sumFBEntity.ReadOnly = true; sumEntity.LIMITBUDGETMONEY = curItemEntity.BEGINNINGBUDGETBALANCE.Subtract(obPersonDetail.Sum(itemFB => { var tee = (itemFB.Entity as T_FB_PERSONBUDGETAPPLYDETAIL); if (tee.LIMITBUDGETMONEY == null) { return 0; } else { return tee.LIMITBUDGETMONEY; } })); sumFBEntity.FBEntityState = FBEntityState.Unchanged; obPersonDetail.Insert(0, sumFBEntity); } else { item.HideDetails = true; } #endregion }); this.EditForm.BindingData(); this.CloseProcess(false); }