public ActionResult MeusDados(DadosEstacionamento dadosEstacionamento)
 {
     try
     {
         ResponseViewModel <DadosEstacionamento> responseViewModel = new ResponseViewModel <DadosEstacionamento>();
         if (ModelState.IsValid)
         {
             var task = Task.Run(async() =>
             {
                 using (BaseController <DadosEstacionamento> baseController = new BaseController <DadosEstacionamento>())
                 {
                     var retorno       = await baseController.PostWithToken(dadosEstacionamento, "Estacionamentos/EditarFornecedor", await GetToken());
                     responseViewModel = retorno;
                 }
             });
         }
         else
         {
             ModelState.AddModelError(string.Empty, "Invalid inputs");
             return(View(dadosEstacionamento));
         }
     }
     catch (Exception ex)
     {
         ModelState.AddModelError(string.Empty, ex.Message);
         return(View(dadosEstacionamento));
     }
     return(RedirectToAction("MeusDados"));
 }
        public ActionResult MeusDados()
        {
            Estacionamento      retorno       = new Estacionamento();
            Usuario             usuario       = new Usuario();
            List <Solicitantes> solicitacoes  = new List <Solicitantes>();
            List <Solicitantes> solicitacoes2 = new List <Solicitantes>();
            ContaDeposito       contaDeposito = new ContaDeposito();
            var task = Task.Run(async() => {
                using (BaseController <Estacionamento> bUsuario = new BaseController <Estacionamento>())
                {
                    var valorRetorno = await bUsuario.GetObjectAsyncWithToken("Estacionamentos/EstacionamentoPorPessoa?IdPessoa=" + GetIdPessoa(), await GetToken());
                    retorno          = valorRetorno.Data;
                }

                using (BaseController <Usuario> bUsuario = new BaseController <Usuario>())
                {
                    var valorRetorno = await bUsuario.GetObjectAsyncWithToken("Usuarios/Detalhes/" + GetIdUsuario(), await GetToken());
                    usuario          = valorRetorno.Data;
                }

                using (BaseController <List <Solicitantes> > bUsuario = new BaseController <List <Solicitantes> >())
                {
                    var valorRetorno = await bUsuario.GetObjectAsyncWithToken("Solicitacao/GetSolicitacoesEmAberto?idUsuario=" + GetIdPessoa(), await GetToken());
                    solicitacoes     = valorRetorno.Data;
                }

                using (BaseController <List <Solicitantes> > bUsuario = new BaseController <List <Solicitantes> >())
                {
                    var valorRetorno = await bUsuario.GetObjectAsyncWithToken("Solicitacao/GetSolicitacoesParaFinalizar?idUsuario=" + GetIdPessoa(), await GetToken());
                    solicitacoes2    = valorRetorno.Data;
                }

                using (BaseController <ContaDeposito> bUsuario = new BaseController <ContaDeposito>())
                {
                    var valorRetorno = await bUsuario.GetObjectAsyncWithToken("Estacionamentos/GetContaDepositoPorPessoa?IdPessoa=" + GetIdPessoa(), await GetToken());
                    contaDeposito    = valorRetorno.Data;
                }
            });

            task.Wait();

            if (null == retorno.EnderecoEstacionamento)
            {
                retorno.EnderecoEstacionamento = new Endereco();
            }

            DadosEstacionamento dadosEstacionamento = new DadosEstacionamento {
                CNPJ               = retorno.CNPJ,
                CPF                = retorno.Proprietario.CPF,
                Email              = GetEmail(),
                InscricaoEstadual  = retorno.InscricaoEstadual,
                Nascimento         = retorno.Proprietario.Nascimento,
                Nickname           = usuario.Nome,
                NomeEstacionamento = retorno.NomeEstacionamento,
                NomeProprietario   = retorno.Proprietario.Nome,
                RG        = retorno.Proprietario.RG,
                ValorHora = retorno.ValorHora,

                Agencia     = contaDeposito.Agencia,
                Conta       = contaDeposito.Conta,
                IdBanco     = contaDeposito.IdBanco,
                IdTipoConta = contaDeposito.IdTipoConta,

                CEPEstacionamento         = retorno.EnderecoEstacionamento.CEP,
                RuaEstacionamento         = retorno.EnderecoEstacionamento.Rua,
                NumeroEstacionamento      = retorno.EnderecoEstacionamento.Numero,
                BairroEstacionamento      = retorno.EnderecoEstacionamento.Bairro,
                ComplementoEstacionamento = retorno.EnderecoEstacionamento.Complemento,
                IdCidadeEstacionamento    = retorno.EnderecoEstacionamento.IdCidade,
                IdEstadoEstacionamento    = retorno.EnderecoEstacionamento.IdEstado,

                CEP         = retorno.Proprietario.EnderecoPessoa.CEP,
                Bairro      = retorno.Proprietario.EnderecoPessoa.Bairro,
                Complemento = retorno.Proprietario.EnderecoPessoa.Complemento,
                IdCidade    = retorno.Proprietario.EnderecoPessoa.IdCidade,
                IdEstado    = retorno.Proprietario.EnderecoPessoa.IdEstado,
                Numero      = retorno.Proprietario.EnderecoPessoa.Numero,
                Rua         = retorno.Proprietario.EnderecoPessoa.Rua
            };

            ViewBag.InsereAlerta  = !retorno.TemEstacionamento;
            ViewBag.InsereAlerta2 = solicitacoes.Count > 0 && solicitacoes.First().NomeCliente != null ? true : false;
            ViewBag.InsereAlerta3 = solicitacoes2.Count > 0 && solicitacoes2.First().NomeCliente != null ? true : false;
            ViewBag.Nickname      = retorno.Proprietario.Nome;
            ViewBag.Cidade        = Helpers.GetSelectList("Cidades") as SelectList;
            ViewBag.Estado        = Helpers.GetSelectList("Estados") as SelectList;
            ViewBag.Banco         = Helpers.GetSelectList("Banco", null) as SelectList;
            ViewBag.TipoConta     = Helpers.GetSelectList("TipoConta", null) as SelectList;
            ViewBag.Level         = GetLevel();
            ViewBag.Cadastrar     = "You need to register an address for your parking. click here.";
            ViewData["foto"]      = usuario.Foto;
            return(View(dadosEstacionamento));
        }
        public async Task <ResponseViewModel <Usuario> > EditarFornecedor(DadosEstacionamento editarFornecedor)
        {
            try
            {
                DadosGeraisEstacionamento dados = new DadosGeraisEstacionamento();

                Task.Run(async() =>
                {
                    DadosGeraisEstacionamento retorno = db.Usuarios.Join(db.Estacionamentos,
                                                                         a => a.IdPessoa,
                                                                         b => b.IdPessoa,
                                                                         (a, b) => new { a, b }).
                                                        Join(db.Pessoas,
                                                             a2 => a2.a.IdPessoa,
                                                             c => c.Id,
                                                             (a2, c) => new { a2, c }).
                                                        Join(db.Enderecos,
                                                             a3 => a3.c.IdEndereco,
                                                             eP => eP.Id,
                                                             (a3, eP) => new { a3, eP }).
                                                        Join(db.ContaDepositos,
                                                             a4 => a4.a3.a2.b.Id,
                                                             cD => cD.IdEstacionamento,
                                                             (a4, cD) => new { a4, cD }).
                                                        Select((x) => new DadosGeraisEstacionamento
                    {
                        usuario         = x.a4.a3.a2.a,
                        enderecoUsuario = x.a4.eP,
                        estacionamento  = x.a4.a3.a2.b,
                        pessoa          = x.a4.a3.c,
                        contaDeposito   = x.cD
                    }).FirstOrDefault(x => x.usuario.Login.Equals(editarFornecedor.Email));

                    dados = retorno;
                }).Wait();

                if (dados == null)
                {
                    throw new Exception("Data not found. please if you're a user, contact me. it's a bug or yout trying to hack me.");
                }

                UsuariosController        usuariosController        = new UsuariosController();
                EstacionamentosController estacionamentosController = new EstacionamentosController();
                Usuario usuario = dados.usuario;
                usuario.Nome = editarFornecedor.Nickname;

                Estacionamento estacionamento = dados.estacionamento;
                estacionamento.InscricaoEstadual = editarFornecedor.InscricaoEstadual;
                estacionamento.ValorHora         = editarFornecedor.ValorHora;

                Endereco endereco = dados.enderecoUsuario;
                endereco.Bairro      = editarFornecedor.Bairro;
                endereco.CEP         = editarFornecedor.CEP;
                endereco.IdCidade    = editarFornecedor.IdCidade;
                endereco.IdEstado    = editarFornecedor.IdEstado;
                endereco.Rua         = editarFornecedor.Rua;
                endereco.Numero      = editarFornecedor.Numero;
                endereco.Complemento = editarFornecedor.Complemento;

                ContaDeposito contaDeposito = dados.contaDeposito;
                contaDeposito.Agencia     = editarFornecedor.Agencia;
                contaDeposito.IdBanco     = editarFornecedor.IdBanco;
                contaDeposito.IdTipoConta = editarFornecedor.IdTipoConta;
                contaDeposito.Agencia     = editarFornecedor.Agencia;
                contaDeposito.Conta       = editarFornecedor.Conta;

                Task.Run(async() =>
                {
                    db.Entry(dados.usuario).State         = EntityState.Detached;
                    db.Entry(dados.enderecoUsuario).State = EntityState.Detached;
                    db.Entry(dados.estacionamento).State  = EntityState.Detached;
                    db.Entry(dados.contaDeposito).State   = EntityState.Detached;

                    db.Entry(usuario).State        = EntityState.Modified;
                    db.Entry(estacionamento).State = EntityState.Modified;
                    db.Entry(endereco).State       = EntityState.Modified;
                    db.Entry(contaDeposito).State  = EntityState.Modified;

                    await db.SaveChangesAsync();
                }).Wait();


                ResponseViewModel <Usuario> responseUser = new ResponseViewModel <Usuario>
                {
                    Mensagem    = "Sucessfull registered!",
                    Serializado = true,
                    Sucesso     = true,
                    Data        = usuario
                };
                return(responseUser);
            }
            catch (Exception e)
            {
                return(new ResponseViewModel <Usuario>()
                {
                    Data = null,
                    Serializado = true,
                    Sucesso = false,
                    Mensagem = "Sorry, something went wrong: " + e.Message
                });
            }
        }