コード例 #1
0
        public async Task UpdateScoresByPublicationID(int PublicationID, string UserName)
        {
            try
            {
                int             count      = 0;
                PublicationTemp currentPub = DbSet.Where(p => p.PublicationID == PublicationID)
                                             .Include(p => p.AreaScoreTemps)
                                             .Include(p => p.AreaScoreTemps.Select(a => a.SubAreaScoreTemps)).FirstOrDefault();
                if (currentPub != null)
                {
                    using (IAreaScoreRepository db = new AreaScoreRepository())
                    {
                        // save area scores
                        currentPub.AreaScoreTemps.ToList().ForEach(a =>
                        {
                            AreaScore currentAreaScore = db.Where(s => s.ReleaseID == currentPub.ReleaseID && s.CPID == currentPub.CPID && s.AreaID == a.AreaID).FirstOrDefault();
                            if (currentAreaScore != null)
                            {
                                currentAreaScore.Score = a.Score;
                            }
                            else
                            {
                                db.Add(new AreaScore()
                                {
                                    AreaID = a.AreaID, ReleaseID = currentPub.ReleaseID, CPID = currentPub.CPID, Score = a.Score
                                });
                                Task.Run(async() => { count += await db.SaveAsync(null, false, null, null, UserName); }).Wait();
                                currentAreaScore = db.Where(s => s.AreaID == a.AreaID && s.ReleaseID == currentPub.ReleaseID && s.CPID == currentPub.CPID).FirstOrDefault();
                            }

                            // save sub area scores
                            using (ISubAreaScoreRepository dbSub = new SubAreaScoreRepository())
                            {
                                a.SubAreaScoreTemps.ToList().ForEach(s =>
                                {
                                    SubAreaScore currentSub = dbSub.Where(sub => sub.SubAreaID == s.SubAreaID && sub.AreaScoreID == currentAreaScore.AreaScoreID).FirstOrDefault();
                                    if (currentSub != null)
                                    {
                                        currentSub.Score = s.Score;
                                    }
                                    else
                                    {
                                        dbSub.Add(new SubAreaScore()
                                        {
                                            SubAreaID = s.SubAreaID, AreaScoreID = currentAreaScore.AreaScoreID, Score = s.Score
                                        });
                                    }
                                });
                                Task.Run(async() => { count += await dbSub.SaveAsync(null, false, null, null, UserName); }).Wait();
                            }
                        });
                    }
                }
            }
            catch (Exception)
            {
                throw;
            }
        }
コード例 #2
0
        public async Task <int> SaveAreaScore(StatusVM status)
        {
            int count = 0;

            using (IAreaScoreRepository db = new AreaScoreRepository())
            {
                status.AreaScores.ForEach(a =>
                {
                    var areaScore = db.Where(r => r.ReleaseID == status.ReleaseID && r.AreaID == a.AreaID && r.CPID == status.CPID).FirstOrDefault();
                    if (areaScore != null)//edit areaScore
                    {
                        if (areaScore.Score != a.Score)
                        {
                            areaScore.Score = a.Score;
                            db.Edit(areaScore);
                        }
                    }
                    else//add areaScore
                    {
                        areaScore = new AreaScore()
                        {
                            ReleaseID = status.ReleaseID, AreaID = a.AreaID, CPID = status.CPID, Score = a.Score
                        };
                        db.Add(areaScore);
                    }
                });
                count += await db.SaveAsync((WindowsPrincipal)User);

                using (ISubAreaScoreRepository dbSubAreaScore = new SubAreaScoreRepository())
                {
                    status.AreaScores.ForEach(a =>
                    {
                        var areaScore = db.Where(r => r.ReleaseID == status.ReleaseID && r.AreaID == a.AreaID && r.CPID == status.CPID).FirstOrDefault();
                        a.SubAreaScors.ForEach(sas =>
                        {
                            var subAreaScore = dbSubAreaScore.Where(s => s.SubAreaID == sas.SubAreaID && s.AreaScoreID == areaScore.AreaScoreID).FirstOrDefault();
                            if (subAreaScore != null)//edit subAreaScore
                            {
                                if (subAreaScore.Score != sas.Score)
                                {
                                    subAreaScore.Score = sas.Score;
                                    dbSubAreaScore.Edit(subAreaScore);
                                }
                            }
                            else//add subAreaScore
                            {
                                subAreaScore = new SubAreaScore()
                                {
                                    SubAreaID = sas.SubAreaID, AreaScoreID = areaScore.AreaScoreID, Score = sas.Score
                                };
                                dbSubAreaScore.Add(subAreaScore);
                            }
                        });
                    });
                    count += await dbSubAreaScore.SaveAsync((WindowsPrincipal)User);
                }
            }
            return(count);
        }
コード例 #3
0
        public IEnumerable <AreaScore> GetStatus(int ReleaseId)
        {
            Release currentRelease;

            using (IReleaseRepository db = new ReleaseRepository())
            {
                currentRelease = db.Where(r => r.ReleaseID == ReleaseId)
                                 .Include(r => r.ReleaseAreaOwners)
                                 .Include(r => r.ReleaseAreaOwners.Select(a => a.Area.SubAreas)).FirstOrDefault();
            }

            List <RiskLevels> RiskArr = new List <RiskLevels>()
            {
                RiskLevels.OnHold, RiskLevels.Initiated, RiskLevels.NA
            };
            IEnumerable <ReleaseChecklistAnswer> RelevantQuestions = DbSet.Where(q => q.ReleaseID == ReleaseId && !RiskArr.Contains(q.RiskLevelID))
                                                                     .Include(q => q.Question)
                                                                     .Include(q => q.SubArea)
                                                                     .Include(q => q.RiskLevel).ToList();
            List <AreaScore> AreaScores = new List <AreaScore>();

            currentRelease.ReleaseAreaOwners.OrderBy(r => r.Area.Order).ToList().ForEach(a =>
            {
                var AreaQuestions = RelevantQuestions.Where(q => q.SubArea.AreaID == a.AreaID).ToList();
                if (AreaQuestions.Count > 0)
                {
                    AreaScore Area = new AreaScore()
                    {
                        Area          = a.Area,
                        Score         = ScoreCalculation(AreaQuestions),
                        LastScore     = GetLastScore(ReleaseId, a.AreaID),
                        SubAreaScores = new List <SubAreaScore>()
                    };
                    a.Area.SubAreas.OrderBy(s => s.Order).ToList().ForEach(s =>
                    {
                        var SubAreaQuestions  = RelevantQuestions.Where(q => q.SubAreaID == s.SubAreaID).ToList();
                        SubAreaScore SubScore = new SubAreaScore()
                        {
                            SubArea   = s,
                            Score     = SubAreaQuestions.Count > 0 ? ScoreCalculation(SubAreaQuestions) : -1,
                            LastScore = GetLastScore(ReleaseId, s.AreaID, s.SubAreaID)
                        };
                        Area.SubAreaScores.Add(SubScore);
                    });
                    AreaScores.Add(Area);
                }
            });
            return(AreaScores);
        }
コード例 #4
0
        private double?GetLastScore(int ReleaseID, int AreaID = 0, int?SubAreaID = 0)
        {
            double?LastScore   = null;
            var    LastPublish = Context.Set <ReleaseCP>().Where(r => r.ReleaseID == ReleaseID && r.PublicationMailDate != null).OrderByDescending(q => q.PublicationMailDate).FirstOrDefault();

            if (LastPublish != null)
            {
                AreaScore CurrentAreaScore = Context.Set <AreaScore>().Where(a => a.ReleaseID == ReleaseID && a.CPID == LastPublish.CPID && a.AreaID == AreaID).Include(a => a.SubAreaScores).FirstOrDefault();
                if (CurrentAreaScore != null)
                {
                    if (SubAreaID == 0)
                    {
                        LastScore = CurrentAreaScore.Score;
                    }
                    else
                    {
                        SubAreaScore CurrentSubAreaScore = CurrentAreaScore.SubAreaScores.Where(s => s.SubAreaID == SubAreaID).FirstOrDefault();
                        LastScore = CurrentSubAreaScore != null ? CurrentSubAreaScore.Score : 0;
                    }
                }
            }
            return(LastScore);
        }