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; } }
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); }
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); }
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); }