public HttpResponseMessage CancelarPlanoMembro(HttpRequestMessage request, int?mensalidadeId) { return(CreateHttpResponse(request, () => { HttpResponseMessage response; bool cancelouPlano = false; var usuario = _usuarioRep.GetSingle(int.Parse(HttpContext.Current.User.Identity.GetUserId())); Membro membro = _membroRep.FindBy(m => m.Pessoa.Id == usuario.Pessoa.Id).FirstOrDefault(); if (mensalidadeId != null && mensalidadeId.Value > 0) { cancelouPlano = _pagamentoService.CancelarPlano(mensalidadeId.Value); } if (mensalidadeId.Value == 0) { var mensalidade = _mensalidadeRep.FindBy(x => x.MembroId == membro.Id && x.Status == StatusMensalidade.Recebido) .OrderByDescending(o => o.Id).FirstOrDefault(); cancelouPlano = _pagamentoService.CancelarPlano(mensalidade.Id); } response = request.CreateResponse(HttpStatusCode.OK, cancelouPlano); return response; })); }
public HttpResponseMessage CancelarAssinatura(HttpRequestMessage request) { return(CreateHttpResponse(request, () => { if (!ModelState.IsValid) { var response = request.CreateResponse(HttpStatusCode.BadRequest, ModelState.Keys.SelectMany(k => ModelState[k].Errors) .Select(m => m.ErrorMessage).ToArray()); return response; } else { HttpResponseMessage response; var usuario = _usuarioRep.GetSingle(int.Parse(HttpContext.Current.User.Identity.GetUserId())); var fornecedor = _fornecedorRep.FirstOrDefault(x => x.PessoaId == usuario.PessoaId); var membro = _membroRep.FirstOrDefault(x => x.PessoaId == usuario.PessoaId); if (fornecedor != null) { // Atualizar usuário como inativo caso não se tenha fatura em aberto // No Client deve-se verificar se voltou faturas, se sim mostrar pop'up falando que assinatura // só será cancelada quando se quitar as dívidas, direcionando usuário para tela de faturas para o mesmo imprimir o boleto. // Quando se pagar a dívida, na notificação enviada pela GerenciaNet deve-se verificar // a tabela de usuário cancelado e mudar o campo ativo do usuário e membro para false. var usuarioCanceladoFornecedor = _usuarioCanceladoRep.FirstOrDefault(u => u.Usuario.PessoaId == fornecedor.PessoaId) != null; if (usuario.FlgMaster) { if (!usuarioCanceladoFornecedor) { var faturas = _faturaRep .GetAll().Where(x => x.FornecedorId == fornecedor.Id && (x.Status != StatusFatura.Recebido && x.Status != StatusFatura.Link && x.Status != StatusFatura.Cancelado && x.Status != StatusFatura.Devolvido)).ToList(); if (faturas.Count == 0) { var _usuariosDesativados = _usuarioRep.GetAll().Where(x => x.PessoaId == usuario.PessoaId).ToList(); for (int i = 0; i < _usuariosDesativados.Count; i++) { _usuariosDesativados[i].Ativo = false; _usuarioRep.Edit(_usuariosDesativados[i]); } fornecedor.Ativo = false; _fornecedorRep.Edit(fornecedor); _usuarioCanceladoRep.Add(new UsuarioCancelado { UsuarioId = usuario.Id, DataCancelamento = DateTime.Now, UsuarioCriacaoId = usuario.Id, DtCriacao = DateTime.Now, Ativo = true }); _unitOfWork.Commit(); var faturasVM = Mapper.Map <IEnumerable <Fatura>, IEnumerable <FaturaViewModel> >(faturas); response = request.CreateResponse(HttpStatusCode.OK, faturasVM); return response; } else { var faturasVM = Mapper.Map <IEnumerable <Fatura>, IEnumerable <FaturaViewModel> >(faturas); response = request.CreateResponse(HttpStatusCode.OK, faturasVM); return response; } } } else { var usuarioMaster = _usuarioRep.FirstOrDefault(x => x.PessoaId == usuario.PessoaId && !x.FlgMaster); response = request.CreateResponse(HttpStatusCode.OK, "Somente o usuário " + usuarioMaster.UsuarioNome + " pode cancelar a assinatura, pois o mesmo é usuário Master!"); return response; } } else if (membro != null) { // Inserir na tabela de usuário cancelado para se ter histórico de cancelamento, caso // membro esteja em dia e esteja no mês corrente mostrar mensagem no client que a assinatura estara ativa até o dia anterior ao fechar a mensalidade para próximo mês. // Colocar data na mensagem do client Ex: (sua assinatura estara ativa até o dia tal, somente para consultar de pedidos) //colocar data de desabilitação para robô passar e mudar usuário para inativo // na data estipulada no campo desta tabela. // No Client deve-se verificar se voltou mensalidades, se sim mostrar pop'up falando que assinatura // só será cancelada quando se quitar as dívidas, direcionando usuário para tela de mensalidades para o mesmo imprimir o boleto. // Quando se pagar a dívida, na notificação enviada pela GerenciaNet deve-se verificar // a tabela de usuário cancelado e mudar o campo ativo do usuário e membro para false. var usuarioCanceladoMembro = _usuarioCanceladoRep.FirstOrDefault(u => u.Usuario.PessoaId == membro.PessoaId) != null; if (!usuarioCanceladoMembro) { if (usuario.FlgMaster) { var mens = _mensalidadeRep.FindBy(x => x.Membro.PessoaId == usuario.PessoaId && x.Status == StatusMensalidade.Recebido || x.Status == StatusMensalidade.AguardandoPagamento) .OrderByDescending(x => x.Id) .FirstOrDefault(); if (mens != null && mens.Status == StatusMensalidade.Recebido) { // Cancelar Plano _pagamentoService.CancelarPlano(mens.Id); var dataFimAcesso = mens.DtRecebimento != null ? mens.DtRecebimento.Value.AddMonths(membro.PlanoMensalidade.QtdMeses) : DateTime.Now; var _usuariosDesativados = _usuarioRep.FindBy(x => x.PessoaId == usuario.PessoaId).ToList(); if (dataFimAcesso < DateTime.Now) { for (int i = 0; i < _usuariosDesativados.Count; i++) { _usuariosDesativados[i].Ativo = false; _usuarioRep.Edit(_usuariosDesativados[i]); } membro.Ativo = false; _membroRep.Edit(membro); } _usuarioCanceladoRep.Add(new UsuarioCancelado { UsuarioId = usuario.Id, DataCancelamento = dataFimAcesso, UsuarioCriacaoId = usuario.Id, DtCriacao = DateTime.Now, Ativo = true }); mens.Ativo = false; _mensalidadeRep.Edit(mens); _unitOfWork.Commit(); response = request.CreateResponse(HttpStatusCode.OK, $"Você ainda terá até o dia {dataFimAcesso.ToShortDateString()} para acessar a plataforma, depois deste prazo sua conta será desativada automaticamente."); return response; } else { if (!usuarioCanceladoMembro) { // Cancelar plano if (mens != null) { _pagamentoService.CancelarPlano(mens.Id); } var _usuariosDesativados = _usuarioRep.FindBy(x => x.PessoaId == usuario.PessoaId).ToList(); for (int i = 0; i < _usuariosDesativados.Count; i++) { _usuariosDesativados[i].Ativo = false; _usuarioRep.Edit(_usuariosDesativados[i]); } membro.Ativo = false; _membroRep.Edit(membro); _usuarioCanceladoRep.Add(new UsuarioCancelado { UsuarioId = usuario.Id, DataCancelamento = DateTime.Now, UsuarioCriacaoId = usuario.Id, DtCriacao = DateTime.Now, Ativo = true }); _unitOfWork.Commit(); response = request.CreateResponse(HttpStatusCode.Created, "Assinatura cancelada com sucesso!"); return response; } } } else { var usuarioMaster = _usuarioRep.FirstOrDefault(x => x.PessoaId == usuario.PessoaId && x.FlgMaster); response = request.CreateResponse(HttpStatusCode.OK, "Somente o usuário ''" + usuarioMaster.UsuarioNome + "'' poderá cancelar a assinatura, pois o mesmo é usuário Master!"); return response; } } } response = request.CreateResponse(HttpStatusCode.NoContent); return response; } })); }