private async Task GravarResposta() { Acr.UserDialogs.UserDialogs.Instance.ShowLoading("Enviando"); if (this.Respostas != null) { var db = new Repositorio<Resposta>(); if (await db.InserirTodos(this.Respostas)) { var dbEnquete = new Repositorio<Enquete>(); var enquete = (await dbEnquete.RetornarTodos()).First(e => e.PerguntaId == this.Pergunta.Id); enquete.EnqueteRespondida = true; if (await dbEnquete.Atualizar(enquete)) { foreach (var resposta in this.Respostas.Where(r=>r.Respondida)) { var perguntaResposta = new PerguntaResposta(); var dbUsuario = new Repositorio<Usuario>(); var usuarioLogado = (await dbUsuario.RetornarTodos()).First(); perguntaResposta.RespostaId = resposta.RespostaServerId; perguntaResposta.PerguntaId = enquete.PerguntaServerId == 0 ? enquete.Pergunta.PerguntaServerId : enquete.PerguntaServerId; perguntaResposta.UsuarioId = usuarioLogado.Id; var salvouNoServidor = await this.service.CadastrarRespostaEnquete(perguntaResposta); if (salvouNoServidor == null || !salvouNoServidor.Any()) { Acr.UserDialogs.UserDialogs.Instance.HideLoading(); await Acr.UserDialogs.UserDialogs.Instance.AlertAsync("Erro ao salvar resposta, tente novamente"); return; } var dbperguntaResposta = new Repositorio<PerguntaResposta>(); await dbperguntaResposta.InserirTodos(salvouNoServidor.ToList()); var dbResposta = new Repositorio<Resposta>(); foreach (var pr in salvouNoServidor) { Expression<Func<Resposta,bool>> porPerguntaServerId = (x) => x.PerguntaServerId == pr.PerguntaId && x.RespostaServerId == pr.RespostaId; var _resposta = await dbResposta.ProcurarPorFiltro(porPerguntaServerId); _resposta.percentualResposta = pr.percentual; await dbResposta.Atualizar(_resposta); } } if (enquete.TemVoucher) { var dbQuiz = new Repositorio<RespostaQuiz>(); if ((await dbQuiz.RetornarTodos()).Any(x => x.EnqueteId == enquete.ServerEnqueteId)) { this.Pergunta.correta = (await dbQuiz.RetornarTodos()).Any(c => c.EnqueteId == enquete.ServerEnqueteId && c.RespostaId == this.Respostas.First(r => r.Respondida).RespostaServerId); Acr.UserDialogs.UserDialogs.Instance.HideLoading(); var pagina = Activator.CreateInstance(typeof(VotoSalvoComVoucherQuizPage), new[]{ this.Pergunta }) as VotoSalvoComVoucherQuizPage; await this.Navigation.PushModalAsync(pagina); } else { Acr.UserDialogs.UserDialogs.Instance.HideLoading(); var pagina = Activator.CreateInstance(typeof(VotoSalvoComVoucherPage), new[]{ this.Pergunta, }) as VotoSalvoComVoucherPage; await this.Navigation.PushModalAsync(pagina); } } else { var dbQuiz = new Repositorio<RespostaQuiz>(); if ((await dbQuiz.RetornarTodos()).Any(x => x.EnqueteId == enquete.ServerEnqueteId)) { this.Pergunta.correta = (await dbQuiz.RetornarTodos()).Any(c => c.EnqueteId == enquete.ServerEnqueteId && c.RespostaId == this.Respostas.First(r => r.Respondida).RespostaServerId); Acr.UserDialogs.UserDialogs.Instance.HideLoading(); var pagina = Activator.CreateInstance(typeof(VotoSalvoQuizPage), new[]{ this.Pergunta }) as VotoSalvoQuizPage; await this.Navigation.PushModalAsync(pagina); } else { Acr.UserDialogs.UserDialogs.Instance.HideLoading(); var pagina = Activator.CreateInstance(typeof(VotoSalvoPage), new[]{ this.Pergunta }) as VotoSalvoPage; await this.Navigation.PushModalAsync(pagina); } } } } } else { Acr.UserDialogs.UserDialogs.Instance.HideLoading(); await Acr.UserDialogs.UserDialogs.Instance.AlertAsync(AppResources.TituloErro, AppResources.MsgErroAoResponder, "OK"); } }
public async Task<ICollection<PerguntaResposta>> CadastrarRespostaEnquete(PerguntaResposta resposta) { using (var client = CallAPI.RetornaClientHttp()) { resposta.TextoResposta = string.Empty; var respostaJSON = JsonConvert.SerializeObject(resposta); response = await client.PostAsJsonAsync(Constants.uriRespondeEnquete, respostaJSON); if (response.IsSuccessStatusCode) { var jsonString = await response.Content.ReadAsStringAsync(); var enquetesJsonToDomain = JsonConvert.DeserializeObject(jsonString); var perguntaRespostaFromJson = JsonConvert.DeserializeObject<List<PerguntaResposta>>(enquetesJsonToDomain.ToString()); return perguntaRespostaFromJson; } } throw new ArgumentException(response.StatusCode.ToString()); }