Пример #1
0
        public static void UpdateRecordHoldHours(RiskRecord riskRecord, DateTime?changedAt = null)
        {
            changedAt = changedAt == null ? DateTime.UtcNow : changedAt;

            var holdTime = changedAt - (riskRecord.LastTotalHoldHoursUpdate ?? riskRecord.LastStatusChange);

            riskRecord.LastTotalHoldHoursUpdate = DateTime.UtcNow;

            // 30 mins = 1 hr hold time, 1 hr 30 mins = 2 hr hold time
            if (holdTime.Value.TotalHours % 1 >= 0.5)
            {
                riskRecord.TotalHoldHours += Math.Ceiling(holdTime.Value.TotalHours);
            }
            // 29 mins = 0 hrs hold time, 1 hr 29 mins = 1 hr hold time
            else
            {
                riskRecord.TotalHoldHours += Math.Floor(holdTime.Value.TotalHours);
            }
        }
        private void CalcRiskRegister(RiskRegisterViewModel vm)
        {
            var risks = db.Risks.Where(p => p.ProbLevelId != null && p.ImpactLevelId != null);

            if (vm.Param.PosId == 1)
            {
                risks = risks.Where(p => p.DeptId != null || p.BranchId != null);
            }
            else if (vm.Param.PosId == 2)
            {
                risks = risks.Where(p => p.SubDivId != null && p.DeptId != null);
                if (vm.Param.BranchId != null)
                {
                    risks = risks.Where(p => p.DeptId != null && p.SubDivId == vm.Param.BranchId);
                }
            }
            else if (vm.Param.PosId == 3)
            {
                risks = risks.Where(p => p.BranchId != null);
                if (vm.Param.BranchId != null)
                {
                    risks = risks.Where(p => p.BranchId == vm.Param.BranchId);
                }
            }
            else if (vm.Param.PosId == 4)
            {
                risks = risks.Where(p => p.BranchId != null);
                if (vm.Param.BranchId != null)
                {
                    risks = risks.Where(p => p.Branch.KorwilId == vm.Param.BranchId);
                }
            }
            else if (vm.Param.PosId == 5)
            {
                risks = risks.Where(p => p.BranchId != null);
                if (vm.Param.BranchId != null)
                {
                    risks = risks.Where(p => p.Branch.ClassId == vm.Param.BranchId);
                }
            }

            if (vm.Param.IsApproved)
            {
                risks = risks.Where(p => p.CloseDate == null || (p.CloseDate >= vm.Param.ReportDate && p.CloseDate <= vm.Param.ReportDate2));
                risks = risks.Where(p => p.ApprovalDate != null && (p.ApprovalDate >= vm.Param.ReportDate && p.ApprovalDate <= vm.Param.ReportDate2));
            }
            else
            {
                risks = risks.Where(p => p.ApprovalDate == null && (p.RiskDate >= vm.Param.ReportDate && p.RiskDate <= vm.Param.ReportDate2));
            }
            risks = risks.OrderBy(p => p.RiskDate);

            /*switch(vm.Param.RiskLevelId)
             * {
             *  case 1: // x <= 5
             *      risks = risks.Where(p => p.RiskLevel <= 5);
             *      break;
             *  case 2: // 5 < x <= 8
             *      risks = risks.Where(p => p.RiskLevel > 5 && p.RiskLevel <= 8);
             *      break;
             *  case 3: // 8 < x <= 12
             *      risks = risks.Where(p => p.RiskLevel > 8 && p.RiskLevel <= 12);
             *      break;
             *  case 4: // 12 < x <= 25
             *      risks = risks.Where(p => p.RiskLevel > 12 && p.RiskLevel <= 25);
             *      break;
             * }*/
            risks = risks.Where(p => p.RiskLevel >= vm.Param.RiskLevelId && p.RiskLevel <= vm.Param.RiskLevelId2);

            if (vm.Param.KlasId == 2)
            {
                if (vm.Param.BisnisId != null)
                {
                    risks = risks.Where(p => p.RiskCatId == 13 && p.RiskGroupId == vm.Param.BisnisId).OrderBy(p => p.RiskEventId);
                }
                else
                {
                    risks = risks.Where(p => p.RiskCatId == 13);
                }
            }
            else
            {
                risks = risks.Where(p => p.RiskCatId != 13);
            }

            vm.RiskList = new List <RiskRecord>();
            foreach (var r in risks)
            {
                //if (vm.Param.IsApproved)
                //{
                //    var rm = db.RiskMitigations.Where(p => p.RiskId == r.RiskId && p.ApprovalDate != null && p.ApprovalDate <= vm.Param.ReportDate);
                //    if (rm.Count() > 0)
                //    {
                //        var m = rm.OrderByDescending(p => p.ApprovalDate).First();
                //        AddRiskToList(r, (int)m.ProbLevelId, (int)m.ImpactLevelId, vm.RiskList);
                //    }
                //    else
                //        vm.RiskList.Add(r);
                //}
                //else
                //    vm.RiskList.Add(r);
                RiskRecord rc = new RiskRecord();
                rc.Risk = r;
                rc.ApprovedMitigations = db.RiskMitigations.Where(p => p.RiskId == r.RiskId && p.ApprovalDate != null).ToList();
                rc.PlannedMitigations  = db.RiskMitigations.Where(p => p.RiskId == r.RiskId && p.ApprovalDate == null).ToList();

                foreach (var a in rc.ApprovedMitigations)
                {
                    rc.MitigationActionApprove = db.MitigationsActions.Where(p => p.MitigationId == a.MitigationId).ToList();
                    rc.MitigationUnit          = db.MitigationUnits.Where(p => p.MitigationId == a.MitigationId).ToList();
                }

                vm.RiskList.Add(rc);
            }
            //vm.RiskList = vm.RiskList.OrderByDescending(p => p.RiskLevel).ThenByDescending(p => p.ImpactLevelId).ThenByDescending(p => p.ProbLevelId).Take(10).ToList();
        }