//Método utilizado para iniciar a avaliação automaticamente quando a data da avaliação e a data de inicio são iguais. public bool AcioneManualAvalicao(DateTime referencia) { //Busca as avaliaçoes var checarAvaliacoes = _context.AvaliacaoMensal.AsQueryable(); checarAvaliacoes = checarAvaliacoes.Where(a => a.dataReferencia.Date.Equals(referencia.Date)); AvaliacaoMensal avaliacao = checarAvaliacoes.FirstOrDefault(); if (avaliacao != null) { //Busca os clientes List <Cliente> listaClientes = _context.Cliente.ToList(); //Inicia a criação dos links que serão enviados ao clientes foreach (var cliente in listaClientes) { LinkAvalicao novoLink = new LinkAvalicao() { idAvaliacao = avaliacao.id, idCliente = cliente.id, linkAvaliacaoEmail = TokenService.GerarTokenLinkEmail() // Service para gerar um token para o link do email. }; CriarLinkClienteAvaliacao(novoLink); // registra os links no banco //Envia os emails para todos os clientes. EnviarLinksEmail(cliente.email, novoLink.linkAvaliacaoEmail, avaliacao.dataReferencia.ToString("MM/yyyy")); } return(true); } return(false); }
public async Task <IActionResult> Edit(int id, [Bind("id,dataReferencia,dataInicio,diasExpirar,encerrado")] AvaliacaoMensal avaliacaoMensal, IFormCollection form) { if (id != avaliacaoMensal.id) { return(NotFound()); } if (ModelState.IsValid) { int idView = Convert.ToInt32(form["idUsuarioAcesso"]); IdPass idUsuario = new IdPass(); idUsuario.id = idView; try { _context.Update(avaliacaoMensal); await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!AvaliacaoMensalExists(avaliacaoMensal.id)) { return(NotFound()); } else { throw; } } return(RedirectToAction("PaginaPrincipal", "Home", idUsuario)); } return(View(avaliacaoMensal)); }
public async Task <IActionResult> Create([Bind("id,dataReferencia,dataInicio,diasExpirar,encerrado")] AvaliacaoMensal avaliacaoMensal, IFormCollection form) { if (ModelState.IsValid) { _context.Add(avaliacaoMensal); await _context.SaveChangesAsync(); //Verifica se o usuario requisitou o inicio imediato da avaliação ou agendou if (avaliacaoMensal.dataReferencia.Date.Equals(avaliacaoMensal.dataInicio.Date)) { //inicio instantaneo da avaliação AcoesSistema acoes = new AcoesSistema(_context); //metodo que faz todo o processo necessario para se inciar uma avaliação. //arquivo (Controllers > SistemaAutomatizado > *AcoesSistema.cs*) acoes.AcioneManualAvalicao(avaliacaoMensal.dataReferencia); } //persiste o id do usuario para atualização da página int idView = Convert.ToInt32(form["idUsuarioAcesso"]);; //Objeto para passar ids(inteiros) entre 'rotas/actions' IdPass idUsuario = new IdPass(); idUsuario.id = idView; //Retorna para a pagina principal do sistema return(RedirectToAction("PaginaPrincipal", "Home", idUsuario)); } //Retorna informações de válidação return(View(avaliacaoMensal)); }
//Metódo que gerar o resultado da avaliação public AvaliacaoMensal RelatorioFinalAvaliacao(AvaliacaoMensal avaliacaoFinalizada) { //busca os clientes que participaram da avaliação no mes que fez referencia var listaAvalicoesClientes = _context.Avaliacao.AsQueryable(); listaAvalicoesClientes = listaAvalicoesClientes.Where(a => a.idAvaliacao.Equals(avaliacaoFinalizada.id)); double promotores = 0; double neutros = 0; double detratores = 0; double NPS = 0; int totalParticioantes = 0; //Faz a classificação dos clientes apartir de suas avaliações/notas foreach (var resultado in listaAvalicoesClientes) { if (resultado.nota <= 6) { detratores++; } else if (resultado.nota <= 8) { neutros++; } else { promotores++; } } //Equação que indica a porcentagem final de agrado referente ao mês totalParticioantes = listaAvalicoesClientes.Count(); NPS = ((promotores - detratores) / totalParticioantes) * 100; //Dados sendo salvos para serem persistidos no banco avaliacaoFinalizada.detratores = (int)detratores; avaliacaoFinalizada.neutros = (int)neutros; avaliacaoFinalizada.promotores = (int)promotores; avaliacaoFinalizada.nps = (int)NPS; // retorna a 'atualização' dos campos return(avaliacaoFinalizada); }