Exemplo n.º 1
0
        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;
            }
        }