// GET: welcomeGuestVisits/GuestDel/5
        public ActionResult GuestDel(int?id)
        {
            var role = UserRole();

            if (!role.WS_CreateVisit)
            {
                return(RedirectToAction("Unauthorized", "Error", new { role.Role, role.UserName }));
            }

            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            WelcomeGuestVisit guestVisit = db.WelcomeGuestVisits.Find(id);

            if (guestVisit == null)
            {
                return(HttpNotFound());
            }
            int Visit_ID = guestVisit.Visit.Visit_ID;

            db.WelcomeGuestVisits.Remove(guestVisit);
            db.SaveChanges();
            return(RedirectToAction("GuestCreate", new { id = Visit_ID }));
        }
        // GET: welcomeGuestVisits/GuestEdit/5
        public ActionResult GuestEdit(int?id)
        {
            var role = UserRole();

            if (!role.WS_CreateVisit)
            {
                return(RedirectToAction("Unauthorized", "Error", new { role.Role, role.UserName }));
            }

            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            WelcomeGuestVisit guestVisit = db.WelcomeGuestVisits.Find(id);

            if (guestVisit == null)
            {
                return(HttpNotFound());
            }

            guestVisit.Visit_ID     = guestVisit.Visit.Visit_ID;
            guestVisit.Sel_Guest_ID = guestVisit.Guest.Guest_ID;
            guestVisit.AssignableGuests.Add(new SelectListItem()
            {
                Text  = guestVisit.Guest.Fullname,
                Value = guestVisit.Sel_Guest_ID.ToString()
            });
            FillAssignableGuests(guestVisit);
            return(View(guestVisit));
        }
        public ActionResult GuestCreate([Bind(Include = "Visit_ID,Sel_Guest_ID")] WelcomeGuestVisit guestVisit)
        {
            var role = UserRole();

            if (!role.WS_CreateVisit)
            {
                return(RedirectToAction("Unauthorized", "Error", new { role.Role, role.UserName }));
            }

            guestVisit.Visit = db.WelcomeVisits.Find(guestVisit.Visit_ID);
            guestVisit.Guest = db.WelcomeGuests.Find(guestVisit.Sel_Guest_ID);
            if (guestVisit.Visit == null || guestVisit.Guest == null)
            {
                return(HttpNotFound());
            }

            //Csak akkor hozza létre, ha a látogatáshoz még nem kapcsolódik a vendég (felhasználó megnyomta a frissítés gombot).
            if (db.WelcomeGuestVisits.Where(gv => gv.Visit.Visit_ID == guestVisit.Visit_ID && gv.Guest.Guest_ID == guestVisit.Sel_Guest_ID).Count() == 0)
            {
                ModelState.Clear();
                TryValidateModel(guestVisit);
                if (ModelState.IsValid)
                {
                    db.WelcomeGuestVisits.Add(guestVisit);
                    db.SaveChanges();
                }
            }

            FillAssignableGuests(guestVisit);
            return(View(guestVisit));
        }
        // GET: welcomeGuestVisits/GuestCreate/5
        public ActionResult GuestCreate(int?id)
        {
            var role = UserRole();

            if (!role.WS_CreateVisit)
            {
                return(RedirectToAction("Unauthorized", "Error", new { role.Role, role.UserName }));
            }

            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            WelcomeVisit welcomeVisit = db.WelcomeVisits.Find(id);

            if (welcomeVisit == null)
            {
                return(HttpNotFound());
            }

            WelcomeGuestVisit guestVisit = new WelcomeGuestVisit
            {
                Visit = welcomeVisit
            };

            guestVisit.Visit_ID = (int)id;

            FillAssignableGuests(guestVisit);
            return(View(guestVisit));
        }
        public ActionResult GuestEdit([Bind(Include = "GV_ID,Sel_Guest_ID")] WelcomeGuestVisit guestVisit)
        {
            var role = UserRole();

            if (!role.WS_CreateVisit)
            {
                return(RedirectToAction("Unauthorized", "Error", new { role.Role, role.UserName }));
            }

            var model = db.WelcomeGuestVisits.Find(guestVisit.GV_ID);

            if (model == null)
            {
                return(HttpNotFound());
            }

            model.Guest = db.WelcomeGuests.Find(guestVisit.Sel_Guest_ID);
            if (model.Guest == null)
            {
                return(HttpNotFound());
            }

            ModelState.Clear();
            TryValidateModel(model);
            if (ModelState.IsValid)
            {
                db.Entry(model).State = EntityState.Modified;
                db.SaveChanges();
                return(RedirectToAction("GuestCreate", new { id = model.Visit.Visit_ID }));
            }

            guestVisit.Visit_ID = model.Visit.Visit_ID;
            //Sel_Guest_ID-t megkapta, nem kell beállítani
            guestVisit.AssignableGuests.Add(new SelectListItem()
            {
                Text  = model.Guest.Fullname,
                Value = guestVisit.Sel_Guest_ID.ToString()
            });
            FillAssignableGuests(guestVisit);
            return(View(guestVisit));
        }
        /// <summary>
        /// Betölti a vendég lenyíló adattartalmát és a már kiválasztott vendégeket
        /// </summary>
        /// <param name="guestVisit">az adatmodell, ahová a lenyíló adattartalmát be kell tölteni</param>
        private void FillAssignableGuests(WelcomeGuestVisit guestVisit)
        {
            // Már kiválasztott vendégek a view-nak megfelelően sorbarendezve
            var alrsel = guestVisit.Visit.GuestVisits
                             = db.WelcomeGuestVisits
                               .Where(gv => gv.Visit.Visit_ID == guestVisit.Visit_ID)
                               .OrderByDescending(gv => gv.Guest.Rank.Importance)
                               .ThenBy(gv => gv.Guest.Fullname)
                               .ToList();
            var aslen = alrsel.Count();

            //A partnercég emberei fontossági és névsorrendben
            var compguests = guestVisit.Visit.Company.Guests
                             .Where(g => !g.Deleted)
                             .OrderByDescending(g => g.Rank.Importance)
                             .ThenBy(g => g.Fullname);

            // A partnercég még ki nem választott embereit betölti a SelectListItem-be
            foreach (WelcomeGuest cg in compguests)
            {
                var gid = cg.Guest_ID;
                int i   = 0;
                while (i < aslen && alrsel[i].Guest.Guest_ID != gid)
                {
                    i++;
                }
                if (i >= aslen)
                {
                    guestVisit.AssignableGuests.Add(new SelectListItem()
                    {
                        Text  = cg.Fullname,
                        Value = gid.ToString()
                    });
                }
            }
            guestVisit.hasguest = guestVisit.AssignableGuests.Count() > 0;
        }