public async Task <IActionResult> Edit(long id)
        {
            InsuranceCompany insuranceCompany = null;

            if (User.IsInRole("Insurance"))
            {
                insuranceCompany = _context.InsuranceCompanies.Include(i => i.User).Where(i => i.User.Id == _userManager.GetUserId(User)).Single();
            }
            else
            {
                insuranceCompany = _context.InsuranceCompanies.Include(i => i.User).Single(i => i.Id == id);
            }

            if (insuranceCompany == null)
            {
                return(NotFound());
            }
            EditInsuranceCompany model = new EditInsuranceCompany
            {
                Id       = insuranceCompany.Id,
                Name     = insuranceCompany.Name,
                Address  = insuranceCompany.Address,
                Fax      = insuranceCompany.Fax,
                Image    = insuranceCompany.Image,
                Username = insuranceCompany.User.UserName,
                Email    = insuranceCompany.User.Email,
                Phone    = insuranceCompany.User.PhoneNumber
            };

            return(View(model));
        }
        public async Task <IActionResult> Edit(long id, EditInsuranceCompany model, IFormFile file)
        {
            string returnAction = "Search";

            if (_userManager.Users.Any(u => u.UserName == model.Username))
            {
                ModelState.AddModelError(String.Empty, "User name already taken");
                return(View(model));
            }
            if (id != model.Id)
            {
                return(NotFound());
            }

            InsuranceCompany company = _context.InsuranceCompanies.Include(i => i.User).Single(i => i.Id == id);

            if (ModelState.IsValid)
            {
                try
                {
                    IdentityUser user     = company.User;
                    var          username = await _userManager.GetUserNameAsync(user);

                    if (model.Username != username)
                    {
                        if (_userManager.Users.Any(u => u.UserName == model.Username))
                        {
                            ModelState.AddModelError(String.Empty, "User name already taken");
                            return(View(model));
                        }
                        var setUserNameResult = await _userManager.SetUserNameAsync(user, model.Username);

                        if (!setUserNameResult.Succeeded)
                        {
                            var userId = await _userManager.GetUserIdAsync(user);

                            throw new InvalidOperationException($"Unexpected error occurred setting username for user with ID '{userId}'.");
                        }
                    }

                    if (file != null)
                    {
                        var filePath = Path.GetTempFileName();
                        using (FileStream filestream = System.IO.File.Create(_environment.WebRootPath + "\\images\\" + file.FileName))
                        {
                            model.Image = file.FileName;
                            file.CopyTo(filestream);
                            filestream.Flush();
                        }
                    }

                    company.Name    = model.Name;
                    company.Address = model.Address;
                    company.Fax     = model.Fax;
                    company.Image   = model.Image;



                    var email = await _userManager.GetEmailAsync(user);

                    if (model.Email != email)
                    {
                        var setEmailResult = await _userManager.SetEmailAsync(user, model.Email);

                        if (!setEmailResult.Succeeded)
                        {
                            var userId = await _userManager.GetUserIdAsync(user);

                            throw new InvalidOperationException($"Unexpected error occurred setting email for user with ID '{userId}'.");
                        }
                    }

                    var phoneNumber = await _userManager.GetPhoneNumberAsync(user);

                    if (model.Phone != phoneNumber)
                    {
                        var setPhoneResult = await _userManager.SetPhoneNumberAsync(user, model.Phone);

                        if (!setPhoneResult.Succeeded)
                        {
                            var userId = await _userManager.GetUserIdAsync(user);

                            throw new InvalidOperationException($"Unexpected error occurred setting phone number for user with ID '{userId}'.");
                        }
                    }
                    company.User = user;

                    _context.InsuranceCompanies.Update(company);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!InsuranceCompanyExists(company.Id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(returnAction));
            }
            return(View(model));
        }