Exemple #1
0
        protected override void OnFlowEnd(T_EXE_TaskWorkSettlement entity, Workflow.Logic.Domain.S_WF_InsTaskExec taskExec, Workflow.Logic.Domain.S_WF_InsDefRouting routing)
        {
            var enumService = FormulaHelper.GetService <IEnumService>();
            //base.OnFlowEnd(entity, taskExec, routing);
            var detaillist = entity.T_EXE_TaskWorkSettlement_TaskWorkList.ToList();
            var budgetids  = detaillist.Select(a => a.BudgetID).ToList();
            var budgetList = this.BusinessEntities.Set <S_C_CBS_Budget>().Where(a => budgetids.Contains(a.ID)).ToList();
            var taskList   = this.BusinessEntities.Set <S_W_TaskWork>().Where(a => budgetids.Contains(a.ID)).ToList();

            var nodeType = CBSNodeType.Root.ToString();
            var rootCBS  = this.BusinessEntities.Set <S_C_CBS>().FirstOrDefault(a => a.ProjectInfoID == entity.ProjectInfo && a.NodeType == nodeType);

            foreach (var detail in detaillist)
            {
                var budget           = budgetList.FirstOrDefault(a => a.ID == detail.BudgetID);
                var task             = taskList.FirstOrDefault(a => a.ID == budget.ID);
                var taskRoleRateList = task.S_W_TaskWork_RoleRate.ToList();
                //校验预算不能超过
                var     settlement = Convert.ToDecimal(detail.Settlement);
                decimal remain     = Convert.ToDecimal(budget.Quantity) - Convert.ToDecimal(budget.SummaryCostQuantity);
                if (settlement > remain)
                {
                    throw new Formula.Exceptions.BusinessException("卷册【" + budget.Name + "】的本次结算工时不能大于可结算工时");
                }
                //分配人员工时
                var n           = 0;
                var sumQuantity = 0m;
                var roleBudgets = budget.Children.Where(a => a.Quantity.HasValue && a.Quantity.Value != 0).ToList();
                foreach (var roleBudget in roleBudgets)
                {
                    n++;
                    var cost = new S_C_CBS_Cost();
                    cost.Code = roleBudget.Code;
                    cost.Name = roleBudget.Name;
                    //获取角色人员
                    var rbs = task.S_W_WBS.GetUser(roleBudget.Code);
                    if (rbs != null)
                    {
                        cost.CostUser     = rbs.UserID;
                        cost.CostUserName = rbs.UserName;
                        var userinfo = FormulaHelper.GetUserInfoByID(cost.CostUser);
                        if (userinfo != null)
                        {
                            cost.UserDept     = userinfo.UserOrgID;
                            cost.UserDeptName = userinfo.UserOrgName;
                        }
                    }
                    //获取角色比例,计算人员结算工时
                    if (n == roleBudgets.Count)
                    {
                        cost.Quantity = Convert.ToDecimal(detail.Settlement) - sumQuantity;
                    }
                    else
                    {
                        var rate     = 0m;
                        var roleRate = taskRoleRateList.FirstOrDefault(a => a.Role == roleBudget.Code);
                        if (roleRate != null && roleRate.Rate.HasValue)
                        {
                            rate = roleRate.Rate.Value;
                        }
                        cost.Quantity = Math.Round(Convert.ToDecimal(detail.Settlement) * rate / 100, 2);
                        sumQuantity  += cost.Quantity.Value;
                    }
                    cost.BelongDept     = entity.BelongDept;
                    cost.BelongDeptName = entity.BelongDeptName;
                    var costDate = DateTime.Now;
                    if (entity.BelongDate.HasValue)
                    {
                        costDate = entity.BelongDate.Value;
                    }
                    cost.BelongYear    = costDate.Year;
                    cost.BelongQuarter = (costDate.Month - 1) / 3 + 1;
                    cost.BelongMonth   = costDate.Month;
                    cost.CostDate      = costDate;
                    cost.MajorCode     = detail.Major;
                    cost.MajorName     = enumService.GetEnumText("Project.Major", detail.Major);
                    cost.TaskWorkCode  = budget.Code;
                    cost.TaskWorkName  = budget.Name;
                    cost.RoleCode      = roleBudget.Code;
                    cost.RoleName      = roleBudget.Name;
                    cost.FormID        = entity.ID;
                    if (cost.Quantity.HasValue && cost.UnitPrice.HasValue)
                    {
                        cost.TotalValue = cost.Quantity.Value * cost.UnitPrice.Value;
                    }
                    roleBudget.AddCost(cost);
                }
                //同步卷册分配数据
                budget.SummaryCost();
                task.WorkloadFinish = budget.SummaryCostQuantity;
                //卷册完成
                if (task.WorkloadFinish >= task.Workload)
                {
                    task.Finish();
                }
            }

            this.BusinessEntities.SaveChanges();
            rootCBS.Ansestors.FirstOrDefault(a => a.NodeType == CBSNodeType.Root.ToString()).SummaryCost();
            this.BusinessEntities.SaveChanges();
        }
Exemple #2
0
        protected override void OnFlowEnd(T_EXE_ManageWorkloadSettlement entity, Workflow.Logic.Domain.S_WF_InsTaskExec taskExec, Workflow.Logic.Domain.S_WF_InsDefRouting routing)
        {
            var detaillist = entity.T_EXE_ManageWorkloadSettlement_ManageWorkloadList.ToList();
            var cbsids     = detaillist.Select(a => a.CBSID).ToList();
            var cbsList    = this.BusinessEntities.Set <S_C_CBS>().Where(a => cbsids.Contains(a.ID)).ToList();
            var nodeType   = CBSNodeType.Root.ToString();
            var rootCBS    = this.BusinessEntities.Set <S_C_CBS>().FirstOrDefault(a => a.ProjectInfoID == entity.ProjectInfo && a.NodeType == nodeType);
            var codes      = detaillist.Select(a => a.Code).ToList();
            var obsList    = this.BusinessEntities.Set <S_W_OBSUser>().Where(a => codes.Contains(a.RoleCode)).Select(a => new { a.RoleCode, a.RoleName, a.UserID }).Distinct().ToList();

            foreach (var detail in detaillist)
            {
                var cbs = cbsList.FirstOrDefault(a => a.ID == detail.CBSID);
                //结算人员的管理工时
                if (string.IsNullOrEmpty(detail.DetailJson))
                {
                    continue;
                }
                if (Convert.ToDecimal(detail.Settlement) == 0)
                {
                    continue;
                }
                var userList = JsonHelper.ToObject <List <Dictionary <string, string> > >(detail.DetailJson);
                foreach (var userItem in userList)
                {
                    var settlement = 0m;
                    if (!string.IsNullOrEmpty(userItem.GetValue("UserWorkload")))
                    {
                        settlement = Convert.ToDecimal(userItem.GetValue("UserWorkload"));
                    }
                    if (settlement == 0)
                    {
                        continue;
                    }
                    var cost = new S_C_CBS_Cost();
                    cost.Code     = detail.Code;
                    cost.Name     = detail.Name;
                    cost.Quantity = settlement;

                    cost.CostUser     = userItem.GetValue("UserID");
                    cost.CostUserName = userItem.GetValue("UserName");
                    var userinfo = FormulaHelper.GetUserInfoByID(cost.CostUser);
                    if (userinfo != null)
                    {
                        cost.UserDept     = userinfo.UserOrgID;
                        cost.UserDeptName = userinfo.UserOrgName;
                    }
                    cost.BelongDept     = entity.BelongDept;
                    cost.BelongDeptName = entity.BelongDeptName;
                    var costDate = DateTime.Now;
                    if (entity.BelongDate.HasValue)
                    {
                        costDate = entity.BelongDate.Value;
                    }
                    cost.BelongYear    = costDate.Year;
                    cost.BelongQuarter = (costDate.Month - 1) / 3 + 1;
                    cost.BelongMonth   = costDate.Month;
                    cost.CostDate      = costDate;
                    var obs = obsList.FirstOrDefault(a => a.UserID == cost.CostUser && a.RoleCode == cost.Code);
                    if (obs != null)
                    {
                        cost.RoleCode = obs.RoleCode;
                        cost.RoleName = obs.RoleName;
                    }
                    cost.FormID = entity.ID;
                    cbs.AddCost(cost);
                    if (cost.Quantity.HasValue && cost.UnitPrice.HasValue)
                    {
                        cost.TotalValue = cost.Quantity.Value * cost.UnitPrice.Value;
                    }
                }
            }

            this.BusinessEntities.SaveChanges();
            rootCBS.Ansestors.FirstOrDefault(a => a.NodeType == CBSNodeType.Root.ToString()).SummaryCost();
            this.BusinessEntities.SaveChanges();
        }