Exemplo n.º 1
0
        //收款项根据关联的里程碑同步里程碑信息
        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();
        }
Exemplo n.º 2
0
        //重新赋值收款项的里程碑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(',');
        }
Exemplo n.º 3
0
        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
        }