public TemaApostila GetTemaRevalida(int ano, int matricula, int idAplicacao, int idTema) { try { var mednet = new MednetEntity(); var videosRevalida = mednet.GetTemasVideoRevalida(); var videoTema = videosRevalida.FirstOrDefault(x => x.IdTema == idTema); var logVideos = mednet.GetLogVideos(matricula, ETipoVideo.Revalida); if (videoTema != null) { var idsVideos = videoTema.VideosRevisao.Select(v => v.IdRevisaoAula).ToList(); var ctx = new DesenvContext(); var totalVisualizacoesVideos = (from a in ctx.tblVideoLog //join b in idsVideos on a.intOrigemVideoId equals b where a.intTipoVideo == (int)ETipoVideo.Revalida && idsVideos.Contains(a.intOrigemVideoId) select a.intOrigemVideoId).ToList(); var todosProgressosVideos = (from a in ctx.tblRevalidaAulaVideoLogPosition where a.intClientId == matricula select new { a.intRevalidaAulaVideoId, a.intSecond }).ToList(); ctx.Dispose(); using (MiniProfiler.Current.Step("Set progresso aula revalida por professor")) { foreach (var professor in videoTema.Professores) { var segundosTotalVideos = 0; var segundosTotalVideosAssistidos = 0; var videosProf = videoTema.VideosRevisao.Where(v => v.IdProfessor == professor.ID).ToList(); foreach (var video in videosProf) { video.Visualizacoes = totalVisualizacoesVideos.Count(t => t == video.IdRevisaoAula); segundosTotalVideos += Convert.ToInt32(TimeSpan.Parse(video.DuracaoFormatada).TotalSeconds); video.Assistido = logVideos.Any(l => l == video.IdRevisaoAula); var duracaoVideo = Convert.ToInt32(TimeSpan.Parse(video.DuracaoFormatada).TotalSeconds); if (todosProgressosVideos.Any(v => v.intRevalidaAulaVideoId == video.IdRevisaoAula)) { var tempoDeVideoAssistido = todosProgressosVideos.FirstOrDefault(v => v.intRevalidaAulaVideoId == video.IdRevisaoAula).intSecond; segundosTotalVideosAssistidos += tempoDeVideoAssistido > duracaoVideo ? duracaoVideo : tempoDeVideoAssistido; if (duracaoVideo > 0) { video.Progresso = (todosProgressosVideos.Where(v => v.intRevalidaAulaVideoId == video.IdRevisaoAula).FirstOrDefault().intSecond * 100) / duracaoVideo; } } } if (segundosTotalVideos != 0) { professor.PercentVisualizado = (segundosTotalVideosAssistidos * 100) / segundosTotalVideos; } else { professor.PercentVisualizado = 0; } mednet.SetProgressoAulaRevalida(idTema, professor.ID, matricula, professor.PercentVisualizado); } } } else { videoTema = new TemaApostila(); } return(videoTema); } catch { throw; } }