//收款项根据关联的里程碑同步里程碑信息 public void SyncMileStoneInfo(S_C_ManageContract_ReceiptObj receiptObj) { var mileStoneIDs = receiptObj.MileStoneID; //关联的所有里程碑已经完成,则默认将收款项变成可收款状态 if (this.entities.Set <S_P_MileStone>().Count(d => mileStoneIDs.Contains(d.ID) && !d.FactFinishDate.HasValue) == 0) { receiptObj.MileStoneState = true.ToString(); } else { receiptObj.MileStoneState = false.ToString(); } //将关联的所有里程碑的最大时间作为计划、实际完成时间 receiptObj.MileStonePlanEndDate = this.entities.Set <S_P_MileStone>().Where(d => mileStoneIDs.Contains(d.ID)).Max(c => c.PlanFinishDate); receiptObj.MileStoneFactEndDate = this.entities.Set <S_P_MileStone>().Where(d => mileStoneIDs.Contains(d.ID)).Max(c => c.FactFinishDate); receiptObj.SyncSupplementary(); }
//重新赋值收款项的里程碑ID、Name,去除当前里程碑 public void RemoveReceiptObjMileStoneInfo(S_C_ManageContract_ReceiptObj receiptObj, string removeMileStoneID) { string[] receiptObjMileStoneIDList = receiptObj.MileStoneID.Split(','); string[] receiptObjMileStoneNameList = receiptObj.MileStoneName.Split(','); string newReceiptObjMileStoneIDs = string.Empty; string newReceiptObjMileStoneNames = string.Empty; for (int i = 0; i < receiptObjMileStoneIDList.Length; i++) { if (receiptObjMileStoneIDList[i] != removeMileStoneID && receiptObjMileStoneIDList[i] != "") { newReceiptObjMileStoneIDs += receiptObjMileStoneIDList[i] + ","; newReceiptObjMileStoneNames += receiptObjMileStoneNameList[i] + ","; } } receiptObj.MileStoneID = newReceiptObjMileStoneIDs.TrimEnd(','); receiptObj.MileStoneName = newReceiptObjMileStoneNames.TrimEnd(','); }
protected override void OnFlowEnd(T_C_ContractChange entity, S_WF_InsTaskExec taskExec, S_WF_InsDefRouting routing) { string tmplCode = Request["TmplCode"]; var formInfo = baseEntities.Set <S_UI_Form>().SingleOrDefault(c => c.Code == tmplCode); if (formInfo == null) { throw new Exception("没找到编号为【" + tmplCode + "】的表单定义"); } var sqlContract = @"select * from S_C_ManageContract where ID = '{0}'"; var sqlChange = @"select * from T_C_ContractChange where ID = '{0}'"; var contarct = MarketSQLDB.ExecuteDataTable(string.Format(sqlContract, entity.ContractID)); var change = MarketSQLDB.ExecuteDataTable(string.Format(sqlChange, entity.ID)); var subTableFields = JsonHelper.ToList(formInfo.Items).Where(c => c.GetValue("ItemType") == "SubTable").ToList(); foreach (var item in subTableFields) { var contractTableName = "S_C_ManageContract" + "_" + item.GetValue("Code"); var subTableName = formInfo.TableName + "_" + item.GetValue("Code"); string subSql = "SELECT count(0) as TableCount FROM sysobjects WHERE name='{0}'"; var obj = Convert.ToInt32(this.MarketSQLDB.ExecuteScalar(String.Format(subSql, contractTableName))); if (obj <= 0) { continue; } if (item.GetValue("Code") == "ReceiptObj") { #region 单独更新收款项(特殊逻辑) subSql = "select * from {0} where {1}='{2}'"; var data = this.MarketSQLDB.ExecuteDataTable(String.Format(subSql, subTableName, formInfo.TableName + "ID", entity.ID)); var orlIds = string.Empty; foreach (DataRow subItem in data.Rows) { var dic = Formula.FormulaHelper.DataRowToDic(subItem); var receiptObj = this.GetEntityByID <S_C_ManageContract_ReceiptObj>(dic.GetValue("OrlID")); if (receiptObj != null) { FormulaHelper.UpdateEntity <S_C_ManageContract_ReceiptObj>(receiptObj, dic, false); receiptObj.ResetPlan(); } else { receiptObj = new S_C_ManageContract_ReceiptObj(); FormulaHelper.UpdateEntity <S_C_ManageContract_ReceiptObj>(receiptObj, dic, false); var contract = this.GetEntityByID <S_C_ManageContract>(entity.ContractID); if (contract == null) { throw new Formula.Exceptions.BusinessValidationException("不存在ID为【" + entity.ContractID + "】的合同,任务执行失败"); } receiptObj.ID = FormulaHelper.CreateGuid(); receiptObj.S_C_ManageContractID = contract.ID; receiptObj.S_C_ManageContract = contract; contract.S_C_ManageContract_ReceiptObj.Add(receiptObj); receiptObj.ResetPlan(); } receiptObj.SyncSupplementary(); orlIds += dic.GetValue("OrlID") + ","; } orlIds = orlIds.TrimEnd(','); var removeObjList = this.BusinessEntities.Set <S_C_ManageContract_ReceiptObj>().Where(c => c.S_C_ManageContractID == entity.ContractID && !orlIds.Contains(c.ID)).ToList(); foreach (var removeObj in removeObjList) { removeObj.Delete(); } this.BusinessEntities.SaveChanges(); #endregion } else { subSql = "delete from {0} where {1}='{2}'"; this.MarketSQLDB.ExecuteNonQuery(String.Format(subSql, contractTableName, "S_C_ManageContract" + "ID", entity.ContractID)); subSql = "select * from {0} where {1}='{2}'"; var data = this.MarketSQLDB.ExecuteDataTable(String.Format(subSql, subTableName, formInfo.TableName + "ID", entity.ID)); foreach (DataRow subItem in data.Rows) { var dic = Formula.FormulaHelper.DataRowToDic(subItem); dic.SetValue("ID", FormulaHelper.CreateGuid()); dic.SetValue("S_C_ManageContractID", entity.ContractID); dic.InsertDB(this.MarketSQLDB, contractTableName); } } } var synchList = new List <string>(); foreach (var column in change.Columns) { if (!noNeedSynch.Contains(column.ToString()) && contarct.Columns.Contains(column.ToString())) { synchList.Add(column.ToString()); } } var sql = @"update S_C_ManageContract set {0} where ID = '{1}'"; var setStr = " "; foreach (var column in synchList) { setStr += String.Format("{0} = '{1}',", column, change.Rows[0][column]); } sql = string.Format(sql, setStr.TrimEnd(','), entity.ContractID); MarketSQLDB.ExecuteNonQuery(sql); #region 自动同步核算项目 var dt = MarketSQLDB.ExecuteDataTable(string.Format(sqlContract, entity.ContractID)); if (dt.Rows.Count > 0) { var contractDic = FormulaHelper.DataRowToDic(dt.Rows[0]); Expenses.Logic.CBSInfoFO.SynCBSInfo(contractDic, Expenses.Logic.SetCBSOpportunity.Contract); } #endregion }
private void SyncContract(S_C_ManageContract_Supplementary entity, bool isDelete = false) { var contract = this.GetEntityByID <S_C_ManageContract>(entity.ContractInfoID); if (contract == null) { throw new Formula.Exceptions.BusinessException("未能找到指定的收入合同"); } var sumSettle = this.BusinessEntities.Set <S_C_ManageContract_Supplementary>() .Where(a => a.ContractInfoID == contract.ID).Select(a => a.SupplementaryRMBAmount).Sum(); contract.ContractRMBAmount = (contract.ThisContractRMBAmount ?? 0m) + (sumSettle ?? 0m); if (isDelete) { contract.ContractRMBAmount = contract.ContractRMBAmount - (entity.SupplementaryRMBAmount ?? 0m); } #region 合同收款项逻辑 if (!isDelete && entity.SupplementaryRMBAmount > 0) { S_C_ManageContract_ProjectRelation projectRelation = null; if (contract.S_C_ManageContract_ProjectRelation.Count == 1) { projectRelation = contract.S_C_ManageContract_ProjectRelation.FirstOrDefault(); } #region 生成收款项,并同步到主合同 var supplementaryReceiptObjList = entity.S_C_ManageContract_Supplementary_ReceiptObj.ToList(); if (supplementaryReceiptObjList.Count == 0) { //没有收款项得时候默认增加一个收款项 var supplementaryReceiptObj = new S_C_ManageContract_Supplementary_ReceiptObj(); supplementaryReceiptObj.ID = FormulaHelper.CreateGuid(); supplementaryReceiptObj.S_C_ManageContract_SupplementaryID = entity.ID; supplementaryReceiptObj.SortIndex = 1; supplementaryReceiptObj.ReceiptPercent = 100; supplementaryReceiptObj.Name = entity.Name; supplementaryReceiptObj.ReceiptValue = entity.SupplementaryValue; if (projectRelation != null) { supplementaryReceiptObj.ProjectInfo = projectRelation.ProjectID; supplementaryReceiptObj.ProjectInfoName = projectRelation.ProjectName; } supplementaryReceiptObjList.Add(supplementaryReceiptObj); entity.S_C_ManageContract_Supplementary_ReceiptObj.Add(supplementaryReceiptObj); } //同步到收入合同的收款项 foreach (var supplementaryReceiptObj in supplementaryReceiptObjList) { var receiptObj = this.GetEntityByID <S_C_ManageContract_ReceiptObj>(supplementaryReceiptObj.ID); if (receiptObj == null) { receiptObj = new S_C_ManageContract_ReceiptObj(); receiptObj.ID = supplementaryReceiptObj.ID; receiptObj.S_C_ManageContractID = contract.ID; receiptObj.SupplementaryID = entity.ID; receiptObj.SortIndex = 1; contract.S_C_ManageContract_ReceiptObj.Add(receiptObj); receiptObj.S_C_ManageContract = contract; this.BusinessEntities.Set <S_C_ManageContract_ReceiptObj>().Add(receiptObj); } receiptObj.Name = supplementaryReceiptObj.Name; receiptObj.ReceiptPercent = 0; receiptObj.ReceiptValue = supplementaryReceiptObj.ReceiptValue; receiptObj.ProjectInfo = supplementaryReceiptObj.ProjectInfo; receiptObj.ProjectInfoName = supplementaryReceiptObj.ProjectInfoName; receiptObj.PlanFinishDate = supplementaryReceiptObj.PlanFinishDate; receiptObj.SummaryReceiptValue(); receiptObj.ResetPlan(); } #endregion } #endregion #region 合同自动按权重计算关联项目明细金额 var relationList = contract.S_C_ManageContract_ProjectRelation.OrderBy(a => a.SortIndex).ToList(); var relationTotalScale = relationList.Sum(a => a.Scale); if (relationTotalScale.HasValue) { var totalValue = Math.Round(Convert.ToDecimal(relationTotalScale * contract.ContractRMBAmount / 100), 2); var sumValue = 0m; foreach (var item in relationList) { if (item == relationList.LastOrDefault()) { item.ProjectValue = totalValue - sumValue; } else { item.ProjectValue = Math.Round(Convert.ToDecimal(item.Scale * contract.ContractRMBAmount / 100), 2); } if (contract.TaxRate.HasValue) { item.TaxValue = item.ProjectValue / (1 + contract.TaxRate.Value) * contract.TaxRate.Value; item.ClearValue = item.ProjectValue - item.TaxValue; } sumValue += (item.ProjectValue ?? 0m); } } #endregion #region 合同自动按权重计算合同拆分子表金额 var splitList = contract.S_C_ManageContract_ContractSplit.OrderBy(a => a.SortIndex).ToList(); var splitTotalScale = splitList.Sum(a => a.Scale); if (splitTotalScale.HasValue) { var totalValue = Math.Round(Convert.ToDecimal(splitTotalScale * contract.ContractRMBAmount / 100), 2); var sumValue = 0m; foreach (var item in splitList) { if (item == splitList.LastOrDefault()) { item.SplitValue = totalValue - sumValue; } else { item.SplitValue = Math.Round(Convert.ToDecimal(item.Scale * contract.ContractRMBAmount / 100), 2); } sumValue += (item.SplitValue ?? 0m); } } #endregion #region 重新计算合同部门分解补充协议金额 var deptList = contract.S_C_ManageContract_DeptRelation.OrderBy(a => a.SortIndex).ToList(); foreach (var item in deptList) { var sValue = 0m; foreach (var supplementary in contract.S_C_ManageContract_Supplementary.ToList()) { sValue += Convert.ToDecimal(supplementary.S_C_ManageContract_Supplementary_DeptRelation.Where(a => a.Dept == item.Dept).Sum(a => a.DeptValue)); } item.SumSupplementaryValue = sValue; } #endregion }