public ActionResult Create([Bind(Include = "LvID,LvDate,LeaveTypeID,EmpID,FromDate,ToDate,NoOfDays,IsHalf,FirstHalf,HalfAbsent,LvReason,LvAddress,CreatedBy,ApprovedBy,Status")] LvApplication lvapplication)
        {
            User LoggedInUser = Session["LoggedUser"] as User;

            if (lvapplication.FromDate.Date > lvapplication.ToDate.Date)
            {
                ModelState.AddModelError("FromDate", "From Date should be smaller than To Date");
            }
            string     _EmpNo = Request.Form["EmpNo"].ToString();
            List <Emp> _emp   = db.Emps.Where(aa => aa.EmpNo == _EmpNo).ToList();

            if (_emp.Count == 0)
            {
                ModelState.AddModelError("EmpNo", "Emp No not exist");
            }
            else
            {
                lvapplication.EmpID = _emp.FirstOrDefault().EmpID;
            }
            if (ModelState.IsValid)
            {
                LvType          lvType = db.LvTypes.First(aa => aa.LvTypeID == lvapplication.LeaveTypeID);
                LeaveController LvProcessController = new LeaveController();
                if (LvProcessController.CheckDuplicateLeave(lvapplication))
                {
                    // max days
                    float noofDays = LvProcessController.CalculateNoOfDays(lvapplication, lvType);
                    lvapplication.NoOfDays = noofDays;
                    int _UserID = Convert.ToInt32(Session["LogedUserID"].ToString());
                    lvapplication.CreatedBy = _UserID;
                    if (lvType.UpdateBalance == true)
                    {
                        if (LvProcessController.HasLeaveQuota(lvapplication.EmpID, lvapplication.LeaveTypeID, lvType))
                        {
                            if (LvProcessController.CheckLeaveBalance(lvapplication, lvType))
                            {
                                if (LvProcessController.CheckForMaxMonthDays(lvapplication, lvType))
                                {
                                    if (lvType.MaxDaysConsective == 0)
                                    {
                                        CreateLeave(lvapplication, lvType);
                                        return(RedirectToAction("Index"));
                                    }
                                    if (noofDays <= lvType.MaxDaysConsective)
                                    {
                                        CreateLeave(lvapplication, lvType);
                                        return(RedirectToAction("Index"));
                                    }
                                    else
                                    {
                                        ModelState.AddModelError("FromDate", "Leave Consective days exceeds");
                                    }
                                }
                                else
                                {
                                    ModelState.AddModelError("FromDate", "Leave Monthly Quota Exceeds");
                                }
                            }
                            else
                            {
                                ModelState.AddModelError("FromDate", "Leave Balance Exceeds, Please check the balance");
                            }
                        }
                        else
                        {
                            ModelState.AddModelError("FromDate", "Leave Quota does not exist");
                        }
                    }
                    else
                    {
                        CreateLeave(lvapplication, lvType);
                        return(RedirectToAction("Index"));
                    }
                }
                else
                {
                    ModelState.AddModelError("FromDate", "This Employee already has leave of this date ");
                }
            }
            ViewBag.EmpID       = new SelectList(db.Emps.OrderBy(s => s.EmpName), "EmpID", "EmpNo", lvapplication.EmpID);
            ViewBag.LeaveTypeID = new SelectList(db.LvTypes.Where(aa => aa.Enable == true).OrderBy(s => s.LvTypeID), "LvTypeID", "LvDesc", lvapplication.LvType);
            return(View(lvapplication));
        }