public ActionResult AppointDelegation([Bind(Include = "DelegationId,EmployeeId,StartDate,EndDate")] Delegation delegation, string sessionId)
        {
            ViewData["sessionId"] = sessionId;
            int empId = (int)Session["empId"];

            ViewData["Role"] = db.Employees.Where(r => r.EmployeeId == empId).Select(r => r.Role).SingleOrDefault();
            DelegationService ds      = new DelegationService();
            List <string>     msglist = new List <string>();

            if (ModelState.IsValid)
            {
                var deptId = db.Employees.Where(r => r.EmployeeId == empId).Select(r => r.Department.DeptId).SingleOrDefault();
                ViewBag.EmployeeId = new SelectList(db.Employees.Where(d => d.Role == "DEP_STAFF" && d.DeptId == deptId), "EmployeeId", "EmployeeName");
                int value = DateTime.Compare(delegation.StartDate, delegation.EndDate);
                if (value > 0 || delegation.StartDate < DateTime.Today)
                {
                    if (value > 0)
                    {
                        msglist.Add("Enddate must follow Startdate");
                    }
                    else if (delegation.StartDate < DateTime.Today)
                    {
                        msglist.Add("Select date preceeds today's date");
                    }
                    ViewData["list"] = msglist;
                    return(View("AppointDelegation"));
                }
                else
                {
                    var case1 = db.Delegations.Include(d => d.Employee).Where(d => d.StartDate >= delegation.StartDate && d.EndDate >= delegation.EndDate && d.Employee.DeptId == deptId).ToList();
                    var case2 = db.Delegations.Include(d => d.Employee).Where(d => d.StartDate <= delegation.StartDate && d.EndDate <= delegation.EndDate && d.Employee.DeptId == deptId).ToList();
                    var case3 = db.Delegations.Include(d => d.Employee).Where(d => d.StartDate >= delegation.StartDate && d.EndDate <= delegation.EndDate && d.Employee.DeptId == deptId).ToList();
                    var case4 = db.Delegations.Include(d => d.Employee).Where(d => d.StartDate <delegation.StartDate && d.EndDate> delegation.EndDate && d.Employee.DeptId == deptId).ToList();

                    if (case1.Count == 0 && case2.Count == 0 && case3.Count == 0 && case4.Count == 0)
                    {
                        ds.AddDelegation(delegation, empId);
                        TempData["toastmessage"] = "Delegation Appointment Successful";
                        return(RedirectToAction("ViewDelegation", new { sessionId = sessionId }));
                    }
                    else
                    {
                        if (case3.Count != 0)
                        {
                            foreach (var item in case3)
                            {
                                List <string> msg = ds.CaptureErrorMsg(item);
                                msglist.Add(msg[0] + " is deleagated from " + msg[1] + " to" + msg[2]);
                            }
                            ViewData["list"] = msglist;
                            return(View("AppointDelegation"));
                        }

                        else if (case4.Count != 0)
                        {
                            foreach (var item in case4)
                            {
                                List <string> msg = ds.CaptureErrorMsg(item);
                                msglist.Add(msg[0] + " is deleagated from " + msg[1] + " to" + msg[2]);
                            }
                            ViewData["list"] = msglist;
                            return(View("AppointDelegation"));
                        }

                        else if (case1.Count != 0)
                        {
                            int flag = 0;
                            foreach (var item in case1)
                            {
                                if (item.StartDate > delegation.EndDate)
                                {
                                    flag++;
                                }
                                else
                                {
                                    List <string> msg = ds.CaptureErrorMsg(item);
                                    msglist.Add(msg[0] + " is deleagated from " + msg[1] + " to" + msg[2]);
                                }
                            }
                            if (flag == case1.Count && case2.Count == 0)
                            {
                                ds.AddDelegation(delegation, empId);
                                TempData["toastmessage"] = "Delegation Appointment Successful";
                                return(RedirectToAction("ViewDelegation", new { sessionId = sessionId }));
                            }
                            else if (flag == case1.Count && case2.Count != 0)
                            {
                                int flag1 = 0;
                                foreach (var item in case2)
                                {
                                    if (item.EndDate < delegation.StartDate)
                                    {
                                        flag1++;
                                    }
                                    else
                                    {
                                        List <string> msg = ds.CaptureErrorMsg(item);
                                        msglist.Add(msg[0] + " is  deleagated from " + msg[1] + " to" + msg[2]);
                                    }
                                }
                                if (flag1 == case2.Count)
                                {
                                    ds.AddDelegation(delegation, empId);
                                    TempData["toastmessage"] = "Delegation Appointment Successful";
                                    return(RedirectToAction("ViewDelegation", new { sessionId = sessionId }));
                                }
                                else
                                {
                                    ViewData["list"] = msglist;
                                    return(View("AppointDelegation"));
                                }
                            }
                            else
                            {
                                ViewData["list"] = msglist;
                                return(View("AppointDelegation"));
                            }
                        }

                        else if (case2.Count != 0)
                        {
                            int flag = 0;
                            foreach (var item in case2)
                            {
                                if (item.EndDate < delegation.StartDate)
                                {
                                    flag++;
                                }
                                else
                                {
                                    List <string> msg = ds.CaptureErrorMsg(item);
                                    msglist.Add(msg[0] + " is  deleagated from " + msg[1] + " to" + msg[2]);
                                }
                            }
                            if (flag == case2.Count)
                            {
                                ds.AddDelegation(delegation, empId);
                                TempData["toastmessage"] = "Delegation Appointment Successful";
                                return(RedirectToAction("ViewDelegation", new { sessionId = sessionId }));
                            }
                            else
                            {
                                ViewData["list"] = msglist;
                                return(View("AppointDelegation"));
                            }
                        }
                    }
                }
            }
            ViewBag.EmployeeId = new SelectList(db.Employees, "EmployeeId", "EmployeeName", delegation.EmployeeId);
            return(View(delegation));
        }