private void populateAssignedTicketData(contactsClass contactsClass)
        {
            var allTickets         = db.ticketClasses;
            var contactTicket      = new HashSet <int>(contactsClass.tickets.Select(b => b.ticketID));
            var viewModelAvailable = new List <contactTicketVM>();
            var viewModelSelected  = new List <contactTicketVM>();

            foreach (var ticket in allTickets)
            {
                if (contactTicket.Contains(ticket.ticketID))
                {
                    viewModelSelected.Add(new contactTicketVM
                    {
                        ticketID   = ticket.ticketID,
                        ticketName = ticket.ticketName,
                        //Assigned = true
                    });
                }
                else
                {
                    viewModelAvailable.Add(new contactTicketVM
                    {
                        ticketID   = ticket.ticketID,
                        ticketName = ticket.ticketName,
                        //Assigned = false
                    });
                }
            }

            ViewBag.selOpts   = new MultiSelectList(viewModelSelected, "ticketID", "ticketName");
            ViewBag.availOpts = new MultiSelectList(viewModelAvailable, "ticketID", "ticketName");
        }
        private void updateContactTickets(string[] selectedOptions, contactsClass contactToUpdate)
        {
            if (selectedOptions == null)
            {
                contactToUpdate.tickets = new List <ticketsClass>();
                return;
            }

            var selectedOptionsHS = new HashSet <string>(selectedOptions);
            var contactTickets    = new HashSet <int>
                                        (contactToUpdate.tickets.Select(b => b.ticketID));

            foreach (var ticket in db.ticketClasses)
            {
                if (selectedOptionsHS.Contains(ticket.ticketID.ToString()))
                {
                    if (!contactTickets.Contains(ticket.ticketID))
                    {
                        contactToUpdate.tickets.Add(ticket);
                    }
                }
                else
                {
                    if (contactTickets.Contains(ticket.ticketID))
                    {
                        contactToUpdate.tickets.Remove(ticket);
                    }
                }
            }
        }
        public ActionResult DeleteConfirmed(int id)
        {
            contactsClass contactsClass = db.contactClasses.Find(id);

            db.contactClasses.Remove(contactsClass);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
        // GET: contactsClasses/Create
        public ActionResult Create()
        {
            ViewBag.TeamID = new SelectList(db.ticketClasses, "ticketID", "ticketName");
            var contact = new contactsClass();

            contact.tickets = new List <ticketsClass>();
            populateAssignedTicketData(contact);
            ViewBag.empStatusID = new SelectList(db.empStatClasses, "empStatusID", "employmentStatus");
            ViewBag.regionID    = new SelectList(db.regionClasses, "regionID", "regionName");
            return(View());
        }
        // GET: contactsClasses/Delete/5
        public ActionResult Delete(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            contactsClass contactsClass = db.contactClasses.Find(id);

            if (contactsClass == null)
            {
                return(HttpNotFound());
            }
            return(View(contactsClass));
        }
        public ActionResult Create([Bind(Include = "ID,FirstName,LastName,MobNo,LandLine,EmailAddress,HourlyRate,empStatusID,regionID,isOnSite")] contactsClass contactsClass)
        {
            if (ModelState.IsValid)
            {
                db.contactClasses.Add(contactsClass);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }


            ViewBag.empStatusID = new SelectList(db.empStatClasses, "empStatusID", "employmentStatus", contactsClass.empStatusID);
            ViewBag.regionID    = new SelectList(db.regionClasses, "regionID", "regionName", contactsClass.regionID);
            populateAssignedTicketData(contactsClass);
            return(View(contactsClass));
        }
        // GET: contactsClasses/Edit/5
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            //contactsClass contactsClass = db.contactClasses.Find(id);
            contactsClass contactsClass = db.contactClasses
                                          .Include(p => p.tickets)
                                          .Where(i => i.ID == id)
                                          .Single();

            if (contactsClass == null)
            {
                return(HttpNotFound());
            }
            ViewBag.empStatusID = new SelectList(db.empStatClasses, "empStatusID", "employmentStatus", contactsClass.empStatusID);
            ViewBag.regionID    = new SelectList(db.regionClasses, "regionID", "regionName", contactsClass.regionID);
            populateAssignedTicketData(contactsClass);
            return(View(contactsClass));
        }
        public ActionResult Edit(int?id, [Bind(Include = "ID,FirstName,LastName,MobNo,LandLine,EmailAddress,HourlyRate,empStatusID,regionID,isOnSite")] contactsClass contactsClass, string[] selectedOptions)
        {
            if (ModelState.IsValid)
            {
                db.Entry(contactsClass).State = EntityState.Modified;
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            var contactToUpdate = db.contactClasses
                                  .Include(p => p.tickets)
                                  .Where(i => i.ID == id)
                                  .Single();

            if (TryUpdateModel(contactToUpdate, "",
                               new string[] { "ID", "FirstName", "LastName", "MobNo", "LandLine", "EmailAddress", "HourlyRate", "isOnSite", "empStatusID", "regionID" }))
            {
                try
                {
                    updateContactTickets(selectedOptions, contactToUpdate);

                    db.Entry(contactToUpdate).State = EntityState.Modified;
                    db.SaveChanges();

                    return(RedirectToAction("Index"));
                }
                catch (RetryLimitExceededException /* dex */)
                {
                    //Log the error (uncomment dex variable name and add a line here to write a log.
                    ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists, see your system administrator.");
                }
            }


            ViewBag.empStatusID = new SelectList(db.empStatClasses, "empStatusID", "employmentStatus", contactsClass.empStatusID);
            ViewBag.regionID    = new SelectList(db.regionClasses, "regionID", "regionName", contactsClass.regionID);
            populateAssignedTicketData(contactToUpdate);
            return(View(contactToUpdate));
        }