public ViewResult AllUsers()
        {
            var users = _context.Customers.Include(c => c.UserProfile).ToList();
            AdminCustomerViewModel viewmodel = new AdminCustomerViewModel();

            viewmodel.Customers = users;
            return(View(viewmodel));
        }
        public async Task <IActionResult> EditCustomer(AdminCustomerViewModel model)
        {
            var user = await _userManager.FindByIdAsync(model.Customer.Id);

            if (user == null)
            {
                return(NotFound($"Unable to load user with ID '{model.Customer.Id}'."));
            }

            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            if ((model.PhoneNumber != user.PhoneNumber) || (model.Customer.FullName != user.Name))
            {
                user.PhoneNumber = model.PhoneNumber;
                user.Name        = model.Customer.FullName;

                var setResult = await _userManager.UpdateAsync(user);

                if (!setResult.Succeeded)
                {
                    TempData["StatusMessage"] = "#E#:Unable to update the User information.";
                    return(View(model));
                }
            }

            if ((model.OldRole == "Partner") || (model.OldRole == "Administrator") || model?.OldRole == "None")
            {
                await SetupNewRole(user, model.OldRole, "Customer");
            }

            if (_repoCust.Save(model.Customer) == null)
            {
                var userId = await _userManager.GetUserIdAsync(user);

                TempData["StatusMessage"] = $"Unexpected error occurred saving information for the customer with ID '{userId}'.";
                return(View(model));
            }

            return(RedirectToAction(nameof(Index), new { searchText = model.SearchText }));
        }
        // GET: Admin/Customers
        public async Task <IActionResult> Index()
        {
            ViewData["CountryID"] = new SelectList(new CountryHelper(_context).GetVmList(), "ID", "Name");
            var customers = await _context.Customers.ToListAsync();

            var vms = new List <AdminCustomerViewModel>();

            foreach (var item in customers)
            {
                var user = await _context.Users.SingleAsync(u => u.Id == item.UserId);

                var country = await _context.Countries.SingleAsync(c => c.ID == item.CountryId);

                var custVm = new AdminCustomerViewModel
                {
                    CustomerID        = item.CustomerID,
                    CustomerNo        = item.CustomerNo,
                    AdditionalAddress = item.AdditionalAddress,
                    Address           = item.Address,
                    Addresses         = null,
                    AllowedPayByBill  = item.AllowedPayByBill,
                    City             = item.City,
                    CountryName      = country.Name,
                    CountryId        = item.CountryId,
                    Name             = item.Name,
                    FirstName        = item.FirstName,
                    PostCode         = item.PostCode,
                    UserEmail        = user.Email,
                    UserId           = item.UserId,
                    IsEmailConfirmed = user.EmailConfirmed
                };
                vms.Add(custVm);
            }

            return(View(vms));
        }
 public AdminCustomerPage()
 {
     NavigationPage.SetBackButtonTitle(this, "");
     InitializeComponent();
     BindingContext = _adminCustomerViewModel = new AdminCustomerViewModel(Navigation);
 }
        private async Task <AdminCustomerViewModel> GetCustomerViewModel(Guid id)
        {
            AdminCustomerViewModel result = new AdminCustomerViewModel();

            var customer = await _context.Customers.SingleAsync(c => c.CustomerID == id);

            var user = await _context.Users.SingleAsync(u => u.Id == customer.UserId);

            var countries = await _context.Countries.ToListAsync();

            List <ShippingAddress> shipToAddresses = null;
            var openorders = await _context.Orders.Where(o => o.CustomerID == id && !o.IsClosed).ToListAsync();

            var closedorders = await _context.Orders.Where(o => o.CustomerID == id && o.IsClosed).ToListAsync();

            var vmOpenOrders   = new List <OrderViewModel>();
            var vmClosedOrders = new List <OrderViewModel>();

            foreach (var item in openorders)
            {
                var op = new OrderViewModel {
                    ID = item.ID, Number = item.Number, OrderDate = item.OrderDate
                };
                vmOpenOrders.Add(op);
            }
            foreach (var item in closedorders)
            {
                var cl = new OrderViewModel {
                    ID = item.ID, Number = item.Number, OrderDate = item.OrderDate
                };
                vmClosedOrders.Add(cl);
            }
            try
            {
                shipToAddresses = await _context.ShippingAddresses.Where(sh => sh.CustomerID == customer.CustomerID).ToListAsync();
            }
            catch (Exception e)
            {
                logger.LogError(e, "Fehler beim abrufen einer Lieferadresse.");
                shipToAddresses = null;
            }

            result.CustomerID        = customer.CustomerID;
            result.CustomerNo        = customer.CustomerNo;
            result.FirstName         = customer.FirstName;
            result.Name              = customer.Name;
            result.PostCode          = customer.PostCode;
            result.UserEmail         = user.Email;
            result.UserId            = user.Id;
            result.IsEmailConfirmed  = user.EmailConfirmed;
            result.City              = customer.City;
            result.AdditionalAddress = customer.AdditionalAddress;
            result.Address           = customer.Address;
            result.AllowedPayByBill  = customer.AllowedPayByBill;
            result.Addresses         = new List <ShippingAddressViewModel>();
            result.CountryId         = customer.CountryId;
            result.CountryName       = countries.Single(c => c.ID == customer.CountryId).Name;
            result.OpenOrders        = vmOpenOrders;
            result.ClosedOrders      = vmClosedOrders;

            if (shipToAddresses != null)
            {
                foreach (var item in shipToAddresses)
                {
                    var shipTo = new ShippingAddressViewModel
                    {
                        ID                = item.ID,
                        Address           = item.Address,
                        AdditionalAddress = item.AdditionalAddress,
                        City              = item.City,
                        CountryID         = item.CountryID,
                        CountryName       = countries.Single(c => c.ID == item.CountryID).Name,
                        CustomerID        = item.CustomerID,
                        FirstName         = item.FirstName,
                        IsMainAddress     = item.IsMainAddress,
                        LastName          = item.LastName,
                        PostCode          = item.PostCode,
                        IsInvoiceAddress  = item.IsInvoiceAddress
                    };
                    result.Addresses.Add(shipTo);
                }
            }


            return(result);
        }