public async Task <IActionResult> OnGetAsync(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            Customer = await _context.Customer
                       .Include(c => c.ApplicationUserCreatedBy)
                       .Include(c => c.ApplicationUserUpdatedBy)
                       .Include(c => c.Showroom)
                       .Include(c => c.SourceOfInformation)
                       .Include(c => c.CustomerArea).ThenInclude(c => c.Area)
                       .AsNoTracking()
                       .FirstOrDefaultAsync(m => m.CustomerID == id);

            if (Customer == null)
            {
                return(NotFound());
            }
            ViewData["CreatedBy"]             = new SelectList(_context.Users, "Id", "Id");
            ViewData["UpdatedBy"]             = new SelectList(_context.Users, "Id", "Id");
            ViewData["TitleID"]               = new SelectList(_context.Lookup.Where(L => L.Domain == "TITLE"), "LookupCode", "LookupName");
            ViewData["ShowroomID"]            = new SelectList(_context.Showroom, "ShowroomID", "ShowroomName");
            ViewData["SourceOfInformationID"] = new SelectList(_context.SourceOfInformation, "SourceOfInformationID", "SourceOfInformationName");

            PopulateCustomerAreaData(_context, Customer);

            await Audit.AddAuditRecord(_context, 'V', "Customer", "CustomerID", Customer.CustomerID, Identity.GetUserId(User, _context), Customer.Forename + " " + Customer.Surname + " (" + Customer.CustomerID + ") Viewed");

            return(Page());
        }
        public async Task <IActionResult> OnPostAsync()
        {
            if (!ModelState.IsValid)
            {
                return(Page());
            }

            //Override values for created by and date
            Address.CreatedDate = DateTime.Now;
            Address.CreatedBy   = Identity.GetUserId(User, _context);

            _context.Address.Add(Address);
            await _context.SaveChangesAsync();

            await Audit.AddAuditRecord(_context, 'C', "Address", "AddressID", Address.AddressID, Identity.GetUserId(User, _context), "Address Created");

            //return RedirectToPage("./Index");
            JObject jsonItem = JObject.FromObject(Address);

            //objectID added for form.js
            jsonItem.Add("objectID", Address.AddressID);

            return(Content(jsonItem.ToString(), "application/json"));
            //return new JsonResult(Address);
        }
        public async Task <IActionResult> OnPostAsync(string[] selectedAreas)
        {
            if (!ModelState.IsValid)
            {
                return(Page());
            }

            //Override values for created by and date
            Customer.CreatedDate = DateTime.Now;
            Customer.CreatedBy   = Identity.GetUserId(User, _context);

            if (selectedAreas != null)
            {
                Customer.CustomerArea = new List <CustomerArea>();
                foreach (var area in selectedAreas)
                {
                    var areaToAdd = new CustomerArea
                    {
                        AreaID = int.Parse(area)
                    };
                    Customer.CustomerArea.Add(areaToAdd);
                }
            }

            _context.Customer.Add(Customer);
            await _context.SaveChangesAsync();

            await Audit.AddAuditRecord(_context, 'C', "Customer", "CustomerID", Customer.CustomerID, Identity.GetUserId(User, _context), "Customer Created");

            //return RedirectToPage("./Index");
            JObject jsonItem = JObject.FromObject(Customer);

            //objectID added for form.js
            jsonItem.Add("objectID", Customer.CustomerID);

            return(Content(jsonItem.ToString(), "application/json"));
            //return new JsonResult(Customer);
        }
        public async Task <IActionResult> OnPostAsync(int?id, string[] selectedAreas)
        {
            if (!ModelState.IsValid)
            {
                return(Page());
            }

            //Original details
            var originalCustomer = await _context.Customer
                                   .Include(c => c.CustomerArea)
                                   .ThenInclude(c => c.Area)
                                   .AsNoTracking()
                                   .FirstOrDefaultAsync(c => c.CustomerID == id);

            _context.Attach(Customer).State = EntityState.Modified;

            //Override values for updated by and date
            Customer.CreatedBy   = originalCustomer.CreatedBy;
            Customer.CreatedDate = originalCustomer.CreatedDate;
            Customer.UpdatedDate = DateTime.Now;
            Customer.UpdatedBy   = Identity.GetUserId(User, _context);

            var customerToUpdate = await _context.Customer
                                   .Include(c => c.CustomerArea)
                                   .ThenInclude(c => c.Area)
                                   .FirstOrDefaultAsync(c => c.CustomerID == id);

            try
            {
                UpdateCustomerAreas(_context, selectedAreas, customerToUpdate);
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!CustomerExists(customerToUpdate.CustomerID))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            object originalCustomerObj = new object();

            originalCustomerObj = originalCustomer;

            object newCustomerObj = new object();

            newCustomerObj = customerToUpdate;

            object originalCustomerAreasObj = new object();

            originalCustomerAreasObj = originalCustomer.CustomerArea;

            object newCustomerAreasObj = new object();

            newCustomerAreasObj = customerToUpdate.CustomerArea;

            string changes = "";

            changes = Audit.WhatChanged(originalCustomerObj, newCustomerObj, changes);

            changes = Audit.ElementsChanged(originalCustomerAreasObj, newCustomerAreasObj, "AreaID", changes);

            await Audit.AddAuditRecord(_context, 'E', "Customer", "CustomerID", Customer.CustomerID, Identity.GetUserId(User, _context), changes);

            //return RedirectToPage("./Index");
            return(new JsonResult(Customer));
        }