public async Task <IActionResult> Edit(int id, [Bind("nombreProveedor,telefono,tipoVia,numeroVia,numeroViaSecundario,numeroCasa,tipoInmueble,numeroInmueble,ciudad,departamento,pais")] RegistroProveedorViewModel proveedorCompuesto)
        {
            if (ModelState.IsValid)
            {
                Proveedor prov = await _context.Proveedor
                                 .Include(p => p.CiudadDepPais.Departamento.Pais)
                                 .FirstOrDefaultAsync(m => m.idProveedor == id);

                prov.nombreProveedor      = proveedorCompuesto.nombreProveedor;
                prov.telefono             = proveedorCompuesto.telefono;
                prov.tipoVia              = proveedorCompuesto.tipoVia;
                prov.numeroVia            = proveedorCompuesto.numeroVia;
                prov.numeroViaSecundario  = proveedorCompuesto.numeroViaSecundario;
                prov.numeroCasa           = proveedorCompuesto.numeroCasa;
                prov.tipoInmueble         = proveedorCompuesto.tipoInmueble;
                prov.numeroInmueble       = proveedorCompuesto.numeroInmueble;
                prov.CiudadDepPais.ciudad = proveedorCompuesto.ciudad;
                prov.CiudadDepPais.Departamento.departamento = proveedorCompuesto.departamento;
                prov.CiudadDepPais.Departamento.Pais.pais    = proveedorCompuesto.pais;

                try
                {
                    _context.Proveedor.Update(prov);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    throw;
                }
                return(RedirectToAction(nameof(Index)));
            }
            return(RedirectToAction("Edit", "Proveedor"));
        }
        public async Task <IActionResult> RegistrarProveedor([Bind("nombreProveedor,telefono,tipoVia,numeroVia,numeroViaSecundario,numeroCasa,tipoInmueble,numeroInmueble,ciudad,departamento,pais")] RegistroProveedorViewModel proveedorCompuesto)
        {
            if (proveedorCompuesto.nombreProveedor != null && proveedorCompuesto.telefono != null && proveedorCompuesto.tipoVia != null && proveedorCompuesto.numeroVia != null && proveedorCompuesto.numeroViaSecundario != null && proveedorCompuesto.numeroCasa != null && proveedorCompuesto.tipoInmueble != null && proveedorCompuesto.numeroInmueble != null && proveedorCompuesto.ciudad != null && proveedorCompuesto.departamento != null && proveedorCompuesto.pais != null)
            {
                if (ModelState.IsValid)
                {
                    Proveedor prov = new Proveedor();
                    prov.nombreProveedor     = proveedorCompuesto.nombreProveedor;
                    prov.telefono            = proveedorCompuesto.telefono;
                    prov.tipoVia             = proveedorCompuesto.tipoVia;
                    prov.numeroVia           = proveedorCompuesto.numeroVia;
                    prov.numeroViaSecundario = proveedorCompuesto.numeroViaSecundario;
                    prov.numeroCasa          = proveedorCompuesto.numeroCasa;
                    prov.tipoInmueble        = proveedorCompuesto.tipoInmueble;
                    prov.numeroInmueble      = proveedorCompuesto.numeroInmueble;

                    CiudadDepPais ciudad = new CiudadDepPais();
                    ciudad.ciudad = proveedorCompuesto.ciudad;

                    Departamento dep = new Departamento();
                    dep.departamento = proveedorCompuesto.departamento;

                    Pais pais = new Pais();
                    pais.pais = proveedorCompuesto.pais;

                    ciudad.Departamento = dep;
                    dep.Pais            = pais;
                    prov.CiudadDepPais  = ciudad;

                    _context.Pais.Add(pais);
                    await _context.SaveChangesAsync();

                    dep.idPais = pais.idPais;


                    _context.Departamentos.Add(dep);
                    await _context.SaveChangesAsync();

                    ciudad.idDepartamento = dep.idDepartamento;

                    _context.CiudadDepPais.Add(ciudad);
                    await _context.SaveChangesAsync();

                    prov.idCiudadDepPais = ciudad.idCiudadDepPais;

                    _context.Proveedor.Add(prov);
                    await _context.SaveChangesAsync();

                    return(RedirectToAction(nameof(Index)));
                }
            }
            return(View("Create", proveedorCompuesto));
        }
        public async Task <IActionResult> Edit(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            var proveedor = await _context.Proveedor
                            .Include(p => p.CiudadDepPais.Departamento.Pais)
                            .FirstOrDefaultAsync(m => m.idProveedor == id);

            RegistroProveedorViewModel r = new RegistroProveedorViewModel();

            if (proveedor == null)
            {
                return(NotFound());
            }
            else
            {
                r.nombreProveedor     = proveedor.nombreProveedor;
                r.telefono            = proveedor.telefono;
                r.tipoVia             = proveedor.tipoVia;
                r.numeroVia           = proveedor.numeroVia;
                r.numeroViaSecundario = proveedor.numeroViaSecundario;
                r.numeroCasa          = proveedor.numeroCasa;
                r.tipoInmueble        = proveedor.tipoInmueble;
                r.numeroInmueble      = proveedor.numeroInmueble;

                /* Ciudad me trae null cuando en la vista Details si traigo la ciudad no trae null:
                 * r.ciudad = proveedor.CiudadDepPais.ciudad; */
                r.ciudad       = proveedor.CiudadDepPais.ciudad;
                r.departamento = proveedor.CiudadDepPais.Departamento.departamento;
                r.pais         = proveedor.CiudadDepPais.Departamento.Pais.pais;
            }
            return(View(r));
        }