private DataTable GetLV(List<EmpView> _Emp, int month)
        {
            using (var ctx = new TAS2013Entities())
            {

                List<LvConsumed> _lvConsumed = new List<LvConsumed>();
                LvConsumed _lvTemp = new LvConsumed();
                _lvConsumed = ctx.LvConsumeds.ToList();
                List<LvType> _lvTypes = ctx.LvTypes.ToList();
                foreach (var emp in _Emp)
                {
                    float BeforeCL = 0, UsedCL = 0, BalCL = 0;
                    float BeforeSL = 0, UsedSL = 0, BalSL = 0;
                    float BeforeAL = 0, UsedAL = 0, BalAL = 0;
                    string _month = "";
                    List<LvConsumed> entries = ctx.LvConsumeds.Where(aa => aa.EmpID == emp.EmpID).ToList();
                    LvConsumed eCL = entries.FirstOrDefault(lv => lv.LeaveType == "A");
                    LvConsumed eSL = entries.FirstOrDefault(lv => lv.LeaveType == "C");
                    LvConsumed eAL = entries.FirstOrDefault(lv => lv.LeaveType == "B");
                    if (entries.Count > 0)
                    {
                        switch (month)
                        {
                            case 1:
                                // casual
                                BeforeCL = (float)eCL.TotalForYear;
                                UsedCL = (float)eCL.JanConsumed;
                                //Sick
                                BeforeSL = (float)eSL.TotalForYear;
                                UsedSL = (float)eSL.JanConsumed;
                                //Anual
                                BeforeAL = (float)eAL.TotalForYear;
                                UsedAL = (float)eAL.JanConsumed;
                                _month = "January";
                                break;
                            case 2:
                                // casual
                                BeforeCL = (float)eCL.TotalForYear - (float)eCL.JanConsumed;
                                UsedCL = (float)eCL.FebConsumed;
                                //Sick
                                BeforeSL = (float)eSL.TotalForYear - (float)eSL.JanConsumed;
                                UsedSL = (float)eSL.FebConsumed;
                                //Anual
                                BeforeAL = (float)eAL.TotalForYear - (float)eAL.JanConsumed;
                                UsedAL = (float)eAL.FebConsumed;
                                break;
                                _month = "Febu";
                            case 3:
                                // casual
                                BeforeCL = (float)eCL.TotalForYear - ((float)eCL.JanConsumed + (float)eCL.FebConsumed);
                                UsedCL = (float)eCL.MarchConsumed;
                                //Sick
                                BeforeSL = (float)eSL.TotalForYear - ((float)eSL.JanConsumed + (float)eSL.FebConsumed);
                                UsedSL = (float)eSL.MarchConsumed;
                                //Anual
                                BeforeAL = (float)eAL.TotalForYear - ((float)eAL.JanConsumed + (float)eAL.FebConsumed);
                                UsedAL = (float)eAL.MarchConsumed;
                                break;
                            case 4:
                                // casual
                                BeforeCL = (float)eCL.TotalForYear - ((float)eCL.JanConsumed + (float)eCL.FebConsumed + (float)eCL.MarchConsumed);
                                UsedCL = (float)eCL.AprConsumed;
                                //Sick
                                BeforeSL = (float)eSL.TotalForYear - ((float)eSL.JanConsumed + (float)eSL.FebConsumed + (float)eSL.MarchConsumed);
                                UsedSL = (float)eSL.AprConsumed;
                                //Anual
                                BeforeAL = (float)eAL.TotalForYear - ((float)eAL.JanConsumed + (float)eAL.FebConsumed + (float)eAL.MarchConsumed);
                                UsedAL = (float)eAL.AprConsumed;
                                break;
                            case 5:
                                // casual
                                BeforeCL = (float)eCL.TotalForYear - ((float)eCL.JanConsumed + (float)eCL.FebConsumed + (float)eCL.MarchConsumed + (float)eCL.AprConsumed);
                                UsedCL = (float)eCL.MayConsumed;
                                //Sick
                                BeforeSL = (float)eSL.TotalForYear - ((float)eSL.JanConsumed + (float)eSL.FebConsumed + (float)eSL.MarchConsumed + (float)eSL.AprConsumed);
                                UsedSL = (float)eSL.MayConsumed;
                                //Anual
                                BeforeAL = (float)eAL.TotalForYear - ((float)eAL.JanConsumed + (float)eAL.FebConsumed + (float)eAL.MarchConsumed + (float)eAL.AprConsumed);
                                UsedAL = (float)eAL.MayConsumed;
                                break;
                            case 6:
                                // casual
                                BeforeCL = (float)eCL.TotalForYear - ((float)eCL.JanConsumed + (float)eCL.FebConsumed + (float)eCL.MarchConsumed + (float)eCL.AprConsumed + (float)eCL.MayConsumed);
                                UsedCL = (float)eCL.JuneConsumed;
                                //Sick
                                BeforeSL = (float)eSL.TotalForYear - ((float)eSL.JanConsumed + (float)eSL.FebConsumed + (float)eSL.MarchConsumed + (float)eSL.AprConsumed + (float)eSL.MayConsumed);
                                UsedSL = (float)eSL.JuneConsumed;
                                //Anual
                                BeforeAL = (float)eAL.TotalForYear - ((float)eAL.JanConsumed + (float)eAL.FebConsumed + (float)eAL.MarchConsumed + (float)eAL.AprConsumed + (float)eAL.MayConsumed);
                                UsedAL = (float)eAL.JuneConsumed;
                                break;
                            case 7:
                                // casual
                                BeforeCL = (float)eCL.TotalForYear - ((float)eCL.JanConsumed + (float)eCL.FebConsumed + (float)eCL.MarchConsumed + (float)eCL.AprConsumed + (float)eCL.MayConsumed + (float)eCL.JuneConsumed);
                                UsedCL = (float)eCL.JulyConsumed;
                                //Sick
                                BeforeSL = (float)eSL.TotalForYear - ((float)eSL.JanConsumed + (float)eSL.FebConsumed + (float)eSL.MarchConsumed + (float)eSL.AprConsumed + (float)eSL.MayConsumed + (float)eSL.JuneConsumed);
                                UsedSL = (float)eSL.JulyConsumed;
                                //Anual
                                BeforeAL = (float)eAL.TotalForYear - ((float)eAL.JanConsumed + (float)eAL.FebConsumed + (float)eAL.MarchConsumed + (float)eAL.AprConsumed + (float)eAL.MayConsumed + (float)eAL.JuneConsumed);
                                UsedAL = (float)eAL.JulyConsumed;
                                break;
                            case 8:
                                // casual
                                BeforeCL = (float)eCL.TotalForYear - ((float)eCL.JanConsumed + (float)eCL.FebConsumed + (float)eCL.MarchConsumed + (float)eCL.AprConsumed + (float)eCL.MayConsumed + (float)eCL.JuneConsumed + (float)eCL.JulyConsumed);
                                UsedCL = (float)eCL.AugustConsumed;
                                //Sick
                                BeforeSL = (float)eSL.TotalForYear - ((float)eSL.JanConsumed + (float)eSL.FebConsumed + (float)eSL.MarchConsumed + (float)eSL.AprConsumed + (float)eSL.MayConsumed + (float)eSL.JuneConsumed + (float)eSL.JulyConsumed);
                                UsedSL = (float)eSL.AugustConsumed;
                                //Anual
                                BeforeAL = (float)eAL.TotalForYear - ((float)eAL.JanConsumed + (float)eAL.FebConsumed + (float)eAL.MarchConsumed + (float)eAL.AprConsumed + (float)eAL.MayConsumed + (float)eAL.JuneConsumed + (float)eAL.JulyConsumed);
                                UsedAL = (float)eAL.AugustConsumed;
                                break;
                            case 9:
                                // casual
                                BeforeCL = (float)eCL.TotalForYear - ((float)eCL.JanConsumed + (float)eCL.FebConsumed + (float)eCL.MarchConsumed + (float)eCL.AprConsumed + (float)eCL.MayConsumed + (float)eCL.JuneConsumed + (float)eCL.JulyConsumed + (float)eCL.AugustConsumed);
                                UsedCL = (float)eCL.SepConsumed;
                                //Sick
                                BeforeSL = (float)eSL.TotalForYear - ((float)eSL.JanConsumed + (float)eSL.FebConsumed + (float)eSL.MarchConsumed + (float)eSL.AprConsumed + (float)eSL.MayConsumed + (float)eSL.JuneConsumed + (float)eSL.JulyConsumed + (float)eSL.AugustConsumed);
                                UsedSL = (float)eSL.SepConsumed;
                                //Anual
                                BeforeAL = (float)eAL.TotalForYear - ((float)eAL.JanConsumed + (float)eAL.FebConsumed + (float)eAL.MarchConsumed + (float)eAL.AprConsumed + (float)eAL.MayConsumed + (float)eAL.JuneConsumed + (float)eAL.JulyConsumed + (float)eAL.AugustConsumed);
                                UsedAL = (float)eAL.SepConsumed;
                                break;
                            case 10:
                                // casual
                                BeforeCL = (float)eCL.TotalForYear - ((float)eCL.JanConsumed + (float)eCL.FebConsumed + (float)eCL.MarchConsumed + (float)eCL.AprConsumed + (float)eCL.MayConsumed + (float)eCL.JuneConsumed + (float)eCL.JulyConsumed + (float)eCL.AugustConsumed + (float)eCL.SepConsumed);
                                UsedCL = (float)eCL.OctConsumed;
                                //Sick
                                BeforeSL = (float)eSL.TotalForYear - ((float)eSL.JanConsumed + (float)eSL.FebConsumed + (float)eSL.MarchConsumed + (float)eSL.AprConsumed + (float)eSL.MayConsumed + (float)eSL.JuneConsumed + (float)eSL.JulyConsumed + (float)eSL.AugustConsumed + (float)eSL.SepConsumed);
                                UsedSL = (float)eSL.OctConsumed;
                                //Anual
                                BeforeAL = (float)eAL.TotalForYear - ((float)eAL.JanConsumed + (float)eAL.FebConsumed + (float)eAL.MarchConsumed + (float)eAL.AprConsumed + (float)eAL.MayConsumed + (float)eAL.JuneConsumed + (float)eAL.JulyConsumed + (float)eAL.AugustConsumed + (float)eAL.AugustConsumed);
                                UsedAL = (float)eAL.SepConsumed;
                                break;
                            case 11:
                                // casual
                                BeforeCL = (float)eCL.TotalForYear - ((float)eCL.JanConsumed + (float)eCL.FebConsumed + (float)eCL.MarchConsumed + (float)eCL.AprConsumed + (float)eCL.MayConsumed + (float)eCL.JuneConsumed + (float)eCL.JulyConsumed + (float)eCL.AugustConsumed + (float)eCL.SepConsumed + (float)eCL.OctConsumed);
                                UsedCL = (float)eCL.NovConsumed;
                                //Sick
                                BeforeSL = (float)eSL.TotalForYear - ((float)eSL.JanConsumed + (float)eSL.FebConsumed + (float)eSL.MarchConsumed + (float)eSL.AprConsumed + (float)eSL.MayConsumed + (float)eSL.JuneConsumed + (float)eSL.JulyConsumed + (float)eSL.AugustConsumed + (float)eSL.SepConsumed + (float)eSL.OctConsumed);
                                UsedSL = (float)eSL.NovConsumed;
                                //Anual
                                BeforeAL = (float)eAL.TotalForYear - ((float)eAL.JanConsumed + (float)eAL.FebConsumed + (float)eAL.MarchConsumed + (float)eAL.AprConsumed + (float)eAL.MayConsumed + (float)eAL.JuneConsumed + (float)eAL.JulyConsumed + (float)eAL.AugustConsumed + (float)eAL.AugustConsumed + (float)eAL.OctConsumed);
                                UsedAL = (float)eAL.NovConsumed;
                                break;
                            case 12:
                                // casual
                                BeforeCL = (float)eCL.TotalForYear - ((float)eCL.JanConsumed + (float)eCL.FebConsumed + (float)eCL.MarchConsumed + (float)eCL.AprConsumed + (float)eCL.MayConsumed + (float)eCL.JuneConsumed + (float)eCL.JulyConsumed + (float)eCL.AugustConsumed + (float)eCL.SepConsumed + (float)eCL.OctConsumed + (float)eCL.NovConsumed);
                                UsedCL = (float)eCL.DecConsumed;
                                //Sick
                                BeforeSL = (float)eSL.TotalForYear - ((float)eSL.JanConsumed + (float)eSL.FebConsumed + (float)eSL.MarchConsumed + (float)eSL.AprConsumed + (float)eSL.MayConsumed + (float)eSL.JuneConsumed + (float)eSL.JulyConsumed + (float)eSL.AugustConsumed + (float)eSL.SepConsumed + (float)eSL.OctConsumed + (float)eSL.NovConsumed);
                                UsedSL = (float)eSL.DecConsumed;
                                //Anual
                                BeforeAL = (float)eAL.TotalForYear - ((float)eAL.JanConsumed + (float)eAL.FebConsumed + (float)eAL.MarchConsumed + (float)eAL.AprConsumed + (float)eAL.MayConsumed + (float)eAL.JuneConsumed + (float)eAL.JulyConsumed + (float)eAL.AugustConsumed + (float)eAL.AugustConsumed + (float)eAL.OctConsumed + (float)eAL.NovConsumed);
                                UsedAL = (float)eAL.DecConsumed;
                                break;

                        }
                        BalCL = (float)(BeforeCL - UsedCL);
                        BalSL = (float)(BeforeSL - UsedSL);
                        BalAL = (float)(BeforeAL - UsedAL);
                        AddDataToDT(emp.EmpNo, emp.EmpName, emp.DesignationName, emp.SectionName, emp.DeptName, emp.TypeName, emp.CatName, emp.LocName, BeforeCL, BeforeSL, BeforeAL, UsedCL, UsedSL, UsedAL, BalCL, BalSL, BalAL, _month);
                    }

                }
            }
            return LvSummaryMonth;
        }
        private int AddCausalLeave(LvShort lvshort)
        {
            //find that bastard through the causal leave field in EmpLvType
            string EmpLvType= lvshort.EmpID+"A";
            //if there is some freak accident and now he has two or more records
            //cater for that by going through a list
            List<LvConsumed> consumed = db.LvConsumeds.Where(aa => aa.EmpLvType == EmpLvType).ToList();
            if (consumed.Count() > 0)
            {
                foreach (LvConsumed consume in consumed)
                {
                    consume.GrandTotalRemaining = consume.GrandTotalRemaining - 1;
                    consume.YearRemaining = consume.YearRemaining - 1;
                    LvConsumed refresh = new LvConsumed();
                    refresh = CheckMonthAndAddOneLeave(consume);
                    if (db.LvApplications.Where(aa => aa.LvDate == lvshort.DutyDate && aa.EmpID == lvshort.EmpID && aa.LvType == "A").Count() > 0)
                    {
                        return 1;

                    }
                    else
                    {
                        LvApplication lvapplication = new LvApplication();
                        lvapplication.EmpID = (int)lvshort.EmpID;
                        lvapplication.LvDate = (DateTime)lvshort.DutyDate;
                        lvapplication.LvType = "A";
                        lvapplication.FromDate = (DateTime)lvshort.DutyDate;
                        lvapplication.ToDate = (DateTime)lvshort.DutyDate;
                        lvapplication.NoOfDays = 1;
                        lvapplication.IsHalf = false;
                        lvapplication.HalfAbsent = false;
                        lvapplication.LvReason = lvshort.Remarks;
                        lvapplication.CreatedBy = lvshort.CreatedBy;
                        lvapplication.LvStatus = "P";
                        lvapplication.CompanyID = lvshort.CompanyID;
                        lvapplication.Active = true;
                        LeaveController LvProcessController = new LeaveController();
                        if (LvProcessController.HasLeaveQuota(lvapplication.EmpID, lvapplication.LvType))
                        {
                            if (lvapplication.IsHalf != true)
                            {

                                if (LvProcessController.CheckDuplicateLeave(lvapplication))
                                {
                                    //Check leave Balance
                                    if (LvProcessController.CheckLeaveBalance(lvapplication))
                                    {
                                        lvapplication.LvDate = DateTime.Today;
                                        int _userID = Convert.ToInt32(Session["LogedUserID"].ToString());
                                        lvapplication.CreatedBy = _userID;
                                db.LvApplications.Add(lvapplication);
                                        if (db.SaveChanges() > 0)
                                        {
                                            HelperClass.MyHelper.SaveAuditLog(_userID, (byte)MyEnums.FormName.Leave, (byte)MyEnums.Operation.Add, DateTime.Now);
                                            LvProcessController.AddLeaveToLeaveData(lvapplication);
                                            LvProcessController.AddLeaveToLeaveAttData(lvapplication);
                                             return 2;
                                        }
                                        else
                                        {
                                            ModelState.AddModelError("Remarks", "There is an error while creating leave.");
                                        }

                                    }
                                    else
                                        ModelState.AddModelError("Remarks", "Leave Balance Exceeds, Please check the balance");
                                }
                                else
                                    ModelState.AddModelError("Remarks", "This Employee already has leave of this date ");
                            }
                      }
                        else
                            ModelState.AddModelError("Remarks", "Leave Quota does not exist");

                    }

                }
                return 2;
            }
            else
                return 3;
        }
        private LvConsumed CheckMonthAndAddOneLeave(LvConsumed consume)
        {
            DateTime today = DateTime.Now;
            switch (today.Month)
            {

                case 1: consume.JanConsumed = consume.JanConsumed + 1;
                    break;
                case 2: consume.FebConsumed = consume.FebConsumed + 1;
                    break;
                case 3: consume.MarchConsumed = consume.MarchConsumed + 1;
                    break;
                case 4: consume.AprConsumed = consume.AprConsumed + 1;
                    break;
                case 5: consume.MayConsumed = consume.MayConsumed + 1;
                    break;
                case 6: consume.JuneConsumed = consume.JuneConsumed + 1;
                    break;
                case 7: consume.JulyConsumed = consume.JulyConsumed + 1;
                    break;
                case 8: consume.AugustConsumed = consume.AugustConsumed + 1;
                    break;
                case 9: consume.AugustConsumed = consume.AugustConsumed + 1;
                    break;
                case 10: consume.SepConsumed = consume.SepConsumed + 1;
                    break;
                case 11: consume.OctConsumed = consume.OctConsumed + 1;
                    break;
                case 12: consume.DecConsumed = consume.DecConsumed + 1;
                    break;

            }
            return consume;
        }
        public void GenerateLeaveQuotaAttributes(List<Emp> _emp, List<LvType> _lvType,int AL,int CL,int SL)
        {
            using (var ctx = new TAS2013Entities())
            {
                foreach (var emp in _emp)
                {
                    List<LvConsumed> lvcon = ctx.LvConsumeds.Where(aa => aa.EmpID == emp.EmpID).ToList();
                    foreach (var lvType in _lvType)
                    {
                        string empLvType = emp.EmpID.ToString()+lvType.LvType1;
                        List<LvConsumed> lvConsumedlvType = new List<LvConsumed>();
                        if (lvcon.Where(aa => aa.EmpLvType == empLvType).Count() == 0)
                        {
                            string empType = emp.EmpID.ToString() + lvType.LvType1;
                            LvConsumed lvConsumed = new LvConsumed();
                            lvConsumed.EmpLvType = empType;
                            lvConsumed.EmpID = emp.EmpID;
                            lvConsumed.LeaveType = lvType.LvType1;
                            lvConsumed.JanConsumed = 0;
                            lvConsumed.FebConsumed = 0;
                            lvConsumed.MarchConsumed = 0;
                            lvConsumed.AprConsumed = 0;
                            lvConsumed.MayConsumed = 0;
                            lvConsumed.JuneConsumed = 0;
                            lvConsumed.JulyConsumed = 0;
                            lvConsumed.AugustConsumed = 0;
                            lvConsumed.SepConsumed = 0;
                            lvConsumed.OctConsumed = 0;
                            lvConsumed.NovConsumed = 0;
                            lvConsumed.DecConsumed = 0;
                            lvConsumed.CompanyID = emp.CompanyID;
                            switch (lvType.LvType1)
                            {
                                case "A"://CL
                                    lvConsumed.TotalForYear = CL;
                                    lvConsumed.YearRemaining = CL;
                                    lvConsumed.GrandTotal = CL;
                                    lvConsumed.GrandTotalRemaining = CL;
                                    break;
                                case "B"://AL
                                    lvConsumed.TotalForYear = AL;
                                    lvConsumed.YearRemaining = AL;
                                    lvConsumed.GrandTotal = AL;
                                    lvConsumed.GrandTotalRemaining = AL;
                                    break;
                                case "C"://SL
                                    lvConsumed.TotalForYear = SL;
                                    lvConsumed.YearRemaining = SL;
                                    lvConsumed.GrandTotal = SL;
                                    lvConsumed.GrandTotalRemaining = SL;
                                    break;
                            }
                            ctx.LvConsumeds.Add(lvConsumed);
                            ctx.SaveChanges();
                        }
                    }
                }

                ctx.Dispose();
            }
        }