//
        // GET: /Cliente/Details/5

        public ActionResult Details(int id = 0)
        {
            Cliente cliente = db.Clientes.Find(id);
            if (cliente == null)
            {
                return HttpNotFound();
            }
            ClienteViewModel clienteVM;
            try
            {
                PessoaFisica pf = db.PessoasFisicas.Find(id);
                clienteVM = new ClienteViewModel(cliente, pf);
                ViewBag.IdCidade = new SelectList
                    (db.Cidades, "IdCidade", "Nome", pf.IdCidade);
            }
            catch (Exception e)
            {
                ViewBag.Erro = e.Message;
                PessoaJuridica pj = db.PessoasJuridicas.Find(id);
                clienteVM = new ClienteViewModel(cliente, pj);
                ViewBag.IdCidade = new SelectList
                    (db.Cidades, "IdCidade", "Nome", pj.IdCidade);
            }
            return View(clienteVM);
        }
 public ActionResult CreatePF()
 {
     Cliente cliente = new Cliente();
     PessoaFisica pf = new PessoaFisica();
     var clienteVM = new ClienteViewModel(cliente, pf);
     return View("Edit", clienteVM);
 }
        //
        // GET: /Cliente/Create

        public ActionResult CreatePJ()
        {
            PessoaJuridica pj = new PessoaJuridica();
            Cliente cliente = new Cliente();
            ClienteViewModel clienteVM = new ClienteViewModel(cliente, pj);
            ViewBag.IdCidade = new SelectList(db.Cidades, "IdCidade", "Nome");
            return View("Edit", clienteVM);
        }
 //
 // GET: /Cliente/Create
 public ActionResult CreatePJ()
 {
     //ViewBag.IdCliente = new SelectList(db.PessoasJuridicas, "IdPessoa", "Nome");
     //return View();
     Cliente cliente = new Cliente();
     PessoaJuridica pj = new PessoaJuridica();
     var clienteVM = new ClienteViewModel(cliente, pj);
     return View("Edit", clienteVM);
 }
        //
        // GET: /Cliente/Delete/5

        public ActionResult Delete(int id = 0)
        {
            Cliente cliente = db.Clientes.Find(id);
            if (cliente == null)
            {
                return HttpNotFound();
            }
            ClienteViewModel clienteVM;
            try
            {
                PessoaFisica pf = db.PessoasFisicas.Find(id);
                clienteVM = new ClienteViewModel(cliente, pf);
  
            }
            catch (Exception e)
            {
                ViewBag.Erro = e.Message;
                PessoaJuridica pj = db.PessoasJuridicas.Find(id);
                clienteVM = new ClienteViewModel(cliente, pj);
            }
            return View(cliente);
        }
 public ActionResult EditPJ(Cliente cliente, PessoaJuridica pessoaJuridica, int idCidade)
 {
     pessoaJuridica.IdCidade = idCidade;
     if (ModelState.IsValid)
     {
         if (pessoaJuridica.IdPessoa != 0)
         {
             db.Entry(cliente).State = EntityState.Modified;
             db.Entry(pessoaJuridica).State = EntityState.Modified;
         }
         else
         {
             db.Clientes.Add(cliente);
             db.PessoasJuridicas.Add(pessoaJuridica);
         }
         db.SaveChanges();
         return RedirectToAction("Index");
     }
     ViewBag.IdCidade = new SelectList
         (db.Cidades, "IdCidade", "Nome", pessoaJuridica.IdCidade);
     var clienteVM = new ClienteViewModel(cliente, pessoaJuridica);
     return View("Edit", clienteVM);
 }
 //
 // GET: /Cliente/Details/5
 public ActionResult Details(int id = 0)
 {
     Cliente cliente = db.Clientes.Find(id);
     if (cliente == null)
     {
         return HttpNotFound();
     }
     PessoaFisica pf = db.PessoasFisicas.Find(id);
     ClienteViewModel clienteVM;
     if (pf != null)
         clienteVM = new ClienteViewModel(cliente, pf);
     else
     {
         PessoaJuridica pj = db.PessoasJuridicas.Find(id);
         clienteVM = new ClienteViewModel(cliente, pj);
     }
     return View(clienteVM);
 }
 public ActionResult EditPJ(Cliente cliente, PessoaJuridica pessoaJuridica)
 {
     if (ModelState.IsValid)//Se nao tem nenhum erro na hora de salvar
     {
         if (pessoaJuridica.IdPessoa != 0)
         {
             db.Entry(cliente).State = EntityState.Modified;
             db.Entry(pessoaJuridica).State = EntityState.Modified; //É como um merge no java.
             db.SaveChanges();
             return RedirectToAction("Index");
         }
         else
         {
             db.Clientes.Add(cliente);
             db.PessoasJuridicas.Add(pessoaJuridica);
             db.SaveChanges();
         }
     }
     ClienteViewModel clienteVM = new ClienteViewModel(cliente, pessoaJuridica);
     return View("Edit", clienteVM);
 }
        //
        // GET: /Cliente/Edit/5
        public ActionResult Edit(int id = 0)
        {
            Cliente cliente = db.Clientes.Find(id);
            PessoaFisica pf;
            PessoaJuridica pj;

            ClienteViewModel clienteVM;
            if (cliente == null)
            {
                return HttpNotFound();
            }
            try
            {
                pf = db.PessoasFisicas.Find(id);
                clienteVM = new ClienteViewModel(cliente, pf);
                return View(clienteVM);
            }
            catch (Exception e)
            {
                pj = db.PessoasJuridicas.Find(id);
                clienteVM = new ClienteViewModel(cliente, pj);
                return View(clienteVM);
            }
        }