public HttpResponseMessage AtualizarPlano(HttpRequestMessage request, int IdPano, bool TrocarPlanoMembro, int TipoPagamentoId, CartaoCreditoViewModel cartaoCreditoViewModel) { return(CreateHttpResponse(request, () => { HttpResponseMessage response; if (!ModelState.IsValid) { response = request.CreateResponse(HttpStatusCode.BadRequest, ModelState.Keys.SelectMany(k => ModelState[k].Errors) .Select(m => m.ErrorMessage).ToArray()); } else { var dtTrocaPlano = new DateTime(); var mensalidadeCriada = false; var usuario = _usuarioRep.GetSingle(int.Parse(HttpContext.Current.User.Identity.GetUserId())); Membro membro = _membroRep.FindBy(m => m.Pessoa.Id == usuario.Pessoa.Id).FirstOrDefault(); var _cartao = _cartaoCreditoRep.FirstOrDefault(x => x.MembroId == membro.Id); var dtVencimento = new DateTime(); var dataHoje = DateTime.Now; var dataFimGratuidade = membro.DataFimPeriodoGratuito ?? membro.DtCriacao; var tipoPagamento = (TipoMovimentacao)TipoPagamentoId; if (tipoPagamento == TipoMovimentacao.Boleto) { membro.PlanoMensalidadeId = IdPano; dtVencimento = dataHoje.AddDays(1); } else { membro.PlanoMensalidadeId = IdPano; _cartao.TokenCartaoGerenciaNet = cartaoCreditoViewModel.TokenCartaoGerenciaNet; dtVencimento = DateTime.Now; _cartaoCreditoRep.Edit(_cartao); } _membroRep.Edit(membro); _unitOfWork.Commit(); if (!TrocarPlanoMembro) { mensalidadeCriada = _pagamentoService.GerarMensalidadeMembro(usuario, membro, dtVencimento, tipoPagamento); } else { dtTrocaPlano = _pagamentoService.TrocaPlano(usuario, membro, dtVencimento, tipoPagamento); mensalidadeCriada = true; } response = request.CreateResponse(HttpStatusCode.OK, new { criouMensalidade = mensalidadeCriada, dataTrocaPlano = dtTrocaPlano.ToString("dd/MM/yyyy") }); } return response; })); }