// protected override void BeforeDelete(string[] Ids) { base.BeforeDelete(Ids); foreach (var Id in Ids) { //如果进度款审核表选择的是必须已通过的计量单则已通过计量单是不会删除的,在这种情况下这判断就显得多余 bool bExist = EPCEntites.Set <S_P_ContractInfo_Fb_BOQPriceCheck>().Any(a => a.BOQCheckIDs.Contains(Id)); if (bExist) { throw new Formula.Exceptions.BusinessValidationException("已经关联了分包合同的进度款审核表,无法删除"); } //流程撤销或者删除的情况下需要处理S_C_BOQ的CheckQuantity else { var boqCheck = EPCEntites.Set <S_P_ContractInfo_Fb_BOQCheck>().Find(Id); var detailList = EPCEntites.Set <S_P_ContractInfo_Fb_BOQCheck_Detail>().Where(a => a.S_P_ContractInfo_Fb_BOQCheckID == Id).ToList(); foreach (S_P_ContractInfo_Fb_BOQCheck_Detail detail in detailList) { //累计部分删除已经确认的数量 S_C_BOQ boq = EPCEntites.Set <S_C_BOQ>().Find(detail.S_C_BOQID); boq.CheckQuantityTotal = (boq.CheckQuantityTotal ?? 0) - detail.ConfirmQuantity; //如果boq没有被任何计量单应用则lock改为false //其中a.ID != detail.ID,排除自己(将要被删除所以不算在内) if (!EPCEntites.Set <S_P_ContractInfo_Fb_BOQCheck_Detail>().Any(a => a.S_C_BOQID == detail.S_C_BOQID && a.ID != detail.ID)) { boq.Locked = false; } } } } }
protected override void OnFlowEnd(S_P_ContractInfo_Fb_BOQPriceCheck entity, Workflow.Logic.Domain.S_WF_InsTaskExec taskExec, Workflow.Logic.Domain.S_WF_InsDefRouting routing) { base.OnFlowEnd(entity, taskExec, routing); foreach (var tmp in entity.S_P_ContractInfo_Fb_BOQPriceCheck_Detail.ToList()) { string boqID = tmp.S_C_BOQID; decimal justCheckPrice = tmp.ConfirmPrice ?? 0; S_C_BOQ boq = EPCEntites.Set <S_C_BOQ>().Find(boqID); //累计已计价部分 boq.CheckPriceTotal = (boq.CheckPriceTotal ?? 0) + justCheckPrice; } }
protected override void OnFlowEnd(S_C_BOQ_Version entity, Workflow.Logic.Domain.S_WF_InsTaskExec taskExec, Workflow.Logic.Domain.S_WF_InsDefRouting routing) { entity.State = "Publish"; var detailList = EPCEntites.Set <S_C_BOQ_Version_Detail>().Where(a => a.VersionID == entity.ID).ToList(); foreach (var item in detailList) { if (item.ModifyState == "Normal") { continue; } var itemDic = FormulaHelper.ModelToDic <S_C_BOQ_Version_Detail>(item); if (item.ModifyState == "Add") { S_C_BOQ boq = new S_C_BOQ(); boq.ID = item.BOQID; boq.Code = item.Code; boq.Name = item.Name; boq.Property = item.Property; boq.Quantity = item.Quantity; boq.Price = item.Price; boq.Remark = item.Remark; boq.Unit = item.Unit; boq.UnitPrice = item.UnitPrice; boq.VersionNo = entity.VersionNumber; boq.ContractInfoID = entity.ContractInfoID; EPCEntites.Set <S_C_BOQ>().Add(boq); } else if (item.ModifyState == "Remove") { EPCEntites.Set <S_C_BOQ>().Delete(a => a.ID == item.BOQID); } else if (item.ModifyState == "Modify") { var boq = EPCEntites.Set <S_C_BOQ>().Find(item.BOQID); if (boq == null) { boq = new S_C_BOQ(); boq.ID = item.BOQID; } boq.VersionNo = entity.VersionNumber; //boq._state FormulaHelper.UpdateEntity <S_C_BOQ>(boq, itemDic, true); } else { throw new Formula.Exceptions.BusinessValidationException(item.ModifyState + "没有if分支处理"); } } EPCEntites.SaveChanges(); }
protected override void BeforeSaveSubTable(Dictionary <string, string> dic, string subTableName, List <Dictionary <string, string> > detailList, S_UI_Form formInfo) { base.BeforeSaveSubTable(dic, subTableName, detailList, formInfo); if (detailList.Count == 0) { throw new Formula.Exceptions.BusinessValidationException("计量的清单不能为空"); } foreach (var tmp in detailList) { string boqID = tmp.GetValue("S_C_BOQID"); string ID = tmp.GetValue("ID"); string confirmQuantity = tmp.GetValue("ConfirmQuantity"); string declareQuantity = tmp.GetValue("DeclareQuantity"); decimal justCheckQuantity = Convert.ToDecimal(confirmQuantity); decimal justDelcareQuantity = Convert.ToDecimal(declareQuantity); //首次提交才进入 if (EPCEntites.Set <S_P_ContractInfo_Fb_BOQCheck_Detail>().Find(ID) == null) { S_C_BOQ boq = EPCEntites.Set <S_C_BOQ>().Find(boqID); //后台判断新加入数量与已有数量和不能超过工程量清单 decimal confirmBoqInBoqCheck = EPCEntites.Set <S_P_ContractInfo_Fb_BOQCheck_Detail>().Where(a => a.S_C_BOQID == boqID).Select(a => a.ConfirmQuantity ?? 0).ToList().Sum(); if (boq.Quantity < confirmBoqInBoqCheck + justCheckQuantity) { throw new Formula.Exceptions.BusinessValidationException("清单【" + tmp.GetValue("Name") + "】本期确认得到的结果已超出清单工程量,请重新添加清单输入"); } if (boq.Quantity < confirmBoqInBoqCheck + justDelcareQuantity) { throw new Formula.Exceptions.BusinessValidationException("清单【" + tmp.GetValue("Name") + "】本期申报得到的结果已超出清单工程量,请重新添清单加输入"); } //锁定boq boq.Locked = true; //累计已计量部分 boq.CheckQuantityTotal = (boq.CheckQuantityTotal ?? 0) + justCheckQuantity; } } }