public ActionResult Create(LeaveApplication lvapplication) { VMLoggedUser LoggedInUser = Session["LoggedInUser"] as VMLoggedUser; if (lvapplication.FromDate.Date > lvapplication.ToDate.Date) { ModelState.AddModelError("FromDate", "From Date should be smaller than To Date"); } FinancialYear dbFinancialYear = DDService.GetFinancialYear().Where(aa => aa.PFinancialYearID == lvapplication.FinancialYearID).First(); if (lvapplication.ToDate > dbFinancialYear.FYEndDate || lvapplication.ToDate < dbFinancialYear.FYStartDate) { ModelState.AddModelError("FromDate", "To Date must lie in selected financial year"); } Expression <Func <PayrollPeriod, bool> > SpecificEntries3 = c => c.PeriodStageID == "O"; PayrollPeriod dbpayrollperiod = PayrollPeriodService.GetIndexSpecific(SpecificEntries3).First(); if (lvapplication.FromDate < dbpayrollperiod.PRStartDate) { ModelState.AddModelError("FromDate", "Cannot Create leaves in the Closed Payroll Period"); } string _EmpNo = Request.Form["EmpNo"].ToString(); List <VHR_EmployeeProfile> _emp = DDService.GetEmployeeInfo(LoggedInUser).Where(aa => aa.OEmpID == _EmpNo).ToList(); Expression <Func <VHR_EmployeeProfile, bool> > SpecificEntries121 = c => c.OEmpID == _EmpNo; VHR_EmployeeProfile employee = VHR_EmployeeProfile.GetIndexSpecific(SpecificEntries121).First(); lvapplication.EmpID = employee.PEmployeeID; var RBValue = Request.Form["HalfLvHA"]; if (RBValue == "false") { lvapplication.IsHalf = false; } else { lvapplication.IsHalf = true; } LeavePolicy lvPolicy = new LeavePolicy(); LeaveType lvType = DDService.GetLeaveType().First(aa => aa.PLeaveTypeID == lvapplication.LeaveTypeID); if (_emp.Count == 0) { ModelState.AddModelError("EmpID", "Invalid Department Access or Employee Resigned."); } else { if (_emp.First().Status == "Resigned") { if (_emp.First().ResignDate <= lvapplication.ToDate) { ModelState.AddModelError("ToDate", "Cannot Apply leaves of Resigned Employee."); } } lvapplication.EmpID = employee.PEmployeeID; lvPolicy = AssistantLeave.GetEmployeeLeavePolicyID(_emp, lvapplication.LeaveTypeID, DDService.GetLeavePolicy().ToList()); //lvType = db.Att_LeaveType.First(aa => aa.LvTypeID == lvapplication.LeaveTypeID); Expression <Func <VAT_LeaveApplication, bool> > SpecificEntries = aa => aa.EmpID == lvapplication.EmpID && lvapplication.FromDate >= aa.FromDate && lvapplication.FromDate <= aa.ToDate && lvapplication.ToDate > aa.FromDate; if (VATLeaveApplicationService.GetIndexSpecific(SpecificEntries).Count() > 0) { ModelState.AddModelError("FromDate", "Duplicate leave applied for one or more days"); } } if (lvapplication.IsHalf == false && lvapplication.IsDeducted == false) { List <DailyAttendance> att = new List <DailyAttendance>(); Expression <Func <DailyAttendance, bool> > SpecificEntries2 = aa => aa.EmpID == lvapplication.EmpID && aa.AttDate >= lvapplication.FromDate && aa.AttDate <= lvapplication.ToDate; att = DailyAttendanceService.GetIndexSpecific(SpecificEntries2); if (att.Count > 0) { foreach (var at in att) { if (at.TimeIn != null || at.TimeOut != null) { ModelState.AddModelError("LeaveTypeID", "This employee has attendance for Specific day, Please clear his attendance first to proceed further"); } } } } // CL cannot be taken after next to AL consective day if (lvapplication.LeaveTypeID == 2) { if (LeaveApplicationService.CheckForALConsectiveDay(lvapplication)) { ModelState.AddModelError("FromDate", "You have applied AL leave for previous date"); } } float noofDays = LeaveApplicationService.CalculateNoOfDays(lvapplication, lvType, lvPolicy); if (lvapplication.LeaveTypeID == 11) { if (noofDays < lvPolicy.MinimumDays) { ModelState.AddModelError("LeaveTypeID", "Cannot Apply Academic for Less than" + lvPolicy.MinimumDays.ToString() + " days"); } } { if (noofDays < lvPolicy.MinimumDays) { ModelState.AddModelError("LeaveTypeID", "Cannot Apply CME/Workshop for Less than" + lvPolicy.MinimumDays.ToString() + " days"); } } if (lvapplication.IsHalf != true) { Expression <Func <VAT_JobCardApplication, bool> > SpecificEntries1 = aa => aa.OEmpID == _EmpNo && aa.DateStarted == lvapplication.FromDate && aa.DateStarted <= lvapplication.ToDate && aa.DateEnded > lvapplication.FromDate; if (JobcardAppService.GetIndexSpecific(SpecificEntries1).Count() > 0) { ModelState.AddModelError("FromDate", "Job card exist for same date"); } } Expression <Func <Shift, bool> > SpecificEntries97 = c => c.PShiftID == employee.ShiftID; Shift shifts = ShiftService.GetIndexSpecific(SpecificEntries97).First(); if (shifts.GZDays == true) { List <Holiday> holiday = DDService.GetHolidays().Where(aa => aa.HolidayDate == lvapplication.FromDate).ToList(); if (holiday.Count > 0) { ModelState.AddModelError("FromDate", "Cannot apply leave of the Gazetted Holiday"); } } Expression <Func <PayrollPeriod, bool> > SpecificEntries96 = c => lvapplication.FromDate >= c.PRStartDate && lvapplication.FromDate <= c.PREndDate && c.PeriodStageID == "C"; List <PayrollPeriod> dbPayrollPeriods = PayrollPeriodService.GetIndexSpecific(SpecificEntries96).ToList(); if (dbPayrollPeriods.Count() > 0) { ModelState.AddModelError("FromDate", "Cannot enter leaves in Closed Payroll Period"); } //if (!DDService.IsDateLieBetweenActivePayroll(lvapplication.FromDate)) // ModelState.AddModelError("FromDate", "Payroll Period is Closed for this date"); if (ModelState.IsValid) { if (LeaveApplicationService.CheckDuplicateLeave(lvapplication)) { // max days float CalenderDays = LeaveApplicationService.CalculateCalenderDays(lvapplication, lvType, lvPolicy); lvapplication.ReturnDate = LeaveApplicationService.GetReturnDate(lvapplication, lvType, lvPolicy); lvapplication.NoOfDays = noofDays; lvapplication.CalenderDays = CalenderDays; int _UserID = LoggedInUser.PUserID; lvapplication.CreatedBy = _UserID; if (lvPolicy.PLeavePolicyID == 0) { LeaveApplicationService.CreateLeave(lvapplication, lvType, LoggedInUser, lvPolicy); return(Json("OK", JsonRequestBehavior.AllowGet)); } else { //check for employee eligible for leave if (AssistantLeave.EmployeeEligbleForLeave(lvPolicy, _emp)) { if (lvPolicy.UpdateBalance == true) { if (LeaveApplicationService.HasLeaveQuota(lvapplication.EmpID, lvPolicy, (int)lvapplication.FinancialYearID)) { if (LeaveApplicationService.CheckLeaveBalance(lvapplication, lvPolicy)) { //if (LeaveApplicationService.CheckForMaxMonthDays(lvapplication, lvPolicy, LvProcessController.GetFinancialYearID(db.PR_FinancialYear.ToList(), lvapplication.FromDate))) { LeaveApplicationService.CreateLeave(lvapplication, lvType, LoggedInUser, lvPolicy); return(Json("OK", JsonRequestBehavior.AllowGet)); } //else // ModelState.AddModelError("FromDate", "Leave Monthly Quota Exceeds"); } else { ModelState.AddModelError("LeaveTypeID", "Leave Balance Exceeds!!!"); } } else { ModelState.AddModelError("LeaveTypeID", "Leave Quota does not exist"); } } else { LeaveApplicationService.CreateLeave(lvapplication, lvType, LoggedInUser, lvPolicy); return(Json("OK", JsonRequestBehavior.AllowGet)); } } else { ModelState.AddModelError("LeaveTypeID", "Employee is not eligible for leave"); } } } else { ModelState.AddModelError("FromDate", "This Employee already has leave in this range of dates"); } } HelperMethod(lvapplication); return(PartialView("Create", lvapplication)); }
public ActionResult Create(LeaveApplication lvapplication) { VMLoggedUser LoggedInUser = Session["LoggedInUser"] as VMLoggedUser; if (lvapplication.LeaveAddress == "" || lvapplication.LeaveAddress == null) { ModelState.AddModelError("LeaveAddress", "Contact number is mandatory !"); } if (lvapplication.LeaveAddress != null) { Match match = Regex.Match(lvapplication.LeaveAddress, @"^-*[0-9,\-]+$"); if (!match.Success) { ModelState.AddModelError("LeaveAddress", "Enter a valid Contact No"); } } if (lvapplication.FromDate.Date > lvapplication.ToDate.Date) { ModelState.AddModelError("FromDate", "From Date should be smaller than To Date"); } FinancialYear dbFinancialYear = DDService.GetFinancialYear().Where(aa => aa.PFinancialYearID == lvapplication.FinancialYearID).First(); if (lvapplication.ToDate >= dbFinancialYear.FYEndDate || lvapplication.ToDate <= dbFinancialYear.FYStartDate) { ModelState.AddModelError("FromDate", "To Date must lie in selected financial year"); } if (lvapplication.ToDate > AppAssistant.MaxDate) { ModelState.AddModelError("ToDate", "Date cannot be greater than " + AppAssistant.MaxDate.ToString("dd-MM-yyyy")); } if (lvapplication.FromDate < AppAssistant.MinDate) { ModelState.AddModelError("FromDate", "Date cannot be less than " + AppAssistant.MinDate.ToString("dd-MM-yyyy")); } string _EmpNo = Request.Form["EmpNo"].ToString(); List <VHR_EmployeeProfile> _emp = DDService.GetEmployeeInfo(LoggedInUser).Where(aa => aa.OEmpID == _EmpNo).ToList(); VHR_EmployeeProfile employee = DDService.GetEmployeeInfo(LoggedInUser).Where(aa => aa.OEmpID == _EmpNo).First(); var RBValue = Request.Form["HalfLvHA"]; if (_emp.First().LineManagerID == null) { ModelState.AddModelError("EmpID", "There is no Line Manager associated with your profile. Please contact HR"); } { LeavePolicy lvPolicy = new LeavePolicy(); LeaveType lvType = DDService.GetLeaveType().First(aa => aa.PLeaveTypeID == lvapplication.LeaveTypeID); if (_emp.Count == 0) { ModelState.AddModelError("FromDate", "Emp No not exist"); } else { lvapplication.EmpID = _emp.FirstOrDefault().PEmployeeID; lvPolicy = AssistantLeave.GetEmployeeLeavePolicyID(_emp, lvapplication.LeaveTypeID, DDService.GetLeavePolicy().ToList()); //lvType = db.Att_LeaveType.First(aa => aa.LvTypeID == lvapplication.LeaveTypeID); } if (lvapplication.IsHalf == false && lvapplication.IsDeducted == false) { List <DailyAttendance> att = new List <DailyAttendance>(); Expression <Func <DailyAttendance, bool> > SpecificEntries = aa => aa.EmpID == lvapplication.EmpID && aa.AttDate >= lvapplication.FromDate && aa.AttDate <= lvapplication.ToDate; att = DailyAttendanceService.GetIndexSpecific(SpecificEntries); if (att.Count > 0) { foreach (var at in att) { if (at.TimeIn != null || at.TimeOut != null) { ModelState.AddModelError("LeaveTypeID", "This employee has attendance for Specific day, Please clear his attendance first to proceed further"); } } } } // CL cannot be taken after next to AL consective day float noofDays = LeaveApplicationService.CalculateNoOfDays(lvapplication, lvType, lvPolicy); if (lvapplication.LeaveTypeID == 2) { if (LeaveApplicationService.CheckForALConsectiveDay(lvapplication)) { ModelState.AddModelError("FromDate", "You have applied AL leave for previous date"); } } // Check for Minimum Days of Attachment of Sick Leave if (lvapplication.LeaveTypeID == 3) { if (noofDays < lvPolicy.MinimumDays) { ModelState.AddModelError("LeaveTypeID", "Cannot Apply SL for Less than" + lvPolicy.MinimumDays.ToString() + " days"); } } //if (LeaveForHoliday(lvapplication)) //{ // ModelState.AddModelError("LeaveTypeID", "This employee has Rest Or GZ for specific Day"); //} //if (!CheckForLvTypeHasLvPolicyForEmp(_emp, lvType)) //{ // ModelState.AddModelError("LeaveTypeID", "This employee does not have Leave Policy, Please add Leave Policy first"); //} //if (!DDService.IsDateLieBetweenActivePayroll(lvapplication.FromDate)) // ModelState.AddModelError("FromDate", "Payroll Period is Closed for this date"); Expression <Func <Shift, bool> > SpecificEntries97 = c => c.PShiftID == employee.ShiftID; Shift shifts = ShiftService.GetIndexSpecific(SpecificEntries97).First(); if (shifts.GZDays == true) { List <Holiday> holiday = DDService.GetHolidays().Where(aa => aa.HolidayDate == lvapplication.FromDate).ToList(); if (holiday.Count > 0) { ModelState.AddModelError("FromDate", "Cannot apply leave of the Gazetted Holiday"); } } Expression <Func <PayrollPeriod, bool> > SpecificEntries96 = c => lvapplication.FromDate >= c.PRStartDate && lvapplication.FromDate <= c.PREndDate && c.PeriodStageID == "C"; List <PayrollPeriod> dbPayrollPeriods = PayrollPeriodService.GetIndexSpecific(SpecificEntries96).ToList(); if (dbPayrollPeriods.Count() > 0) { ModelState.AddModelError("FromDate", "Cannot enter leaves in Closed Payroll Period"); } if (ModelState.IsValid) { if (LeaveApplicationService.CheckDuplicateLeave(lvapplication)) { // max days float CalenderDays = LeaveApplicationService.CalculateCalenderDays(lvapplication, lvType, lvPolicy); lvapplication.ReturnDate = LeaveApplicationService.GetReturnDate(lvapplication, lvType, lvPolicy); lvapplication.IsDeducted = false; lvapplication.NoOfDays = noofDays; lvapplication.CalenderDays = CalenderDays; int _UserID = LoggedInUser.PUserID; lvapplication.CreatedBy = _UserID; if (lvPolicy.PLeavePolicyID == 0) { ESSPLeaveService.CreateLeave(lvapplication, lvType, LoggedInUser); return(RedirectToAction("Index")); } else { //check for employee eligible for leave if (AssistantLeave.EmployeeEligbleForLeave(lvPolicy, _emp)) { if (lvPolicy.UpdateBalance == true) { if (LeaveApplicationService.HasLeaveQuota(lvapplication.EmpID, lvPolicy, (int)lvapplication.FinancialYearID)) { if (LeaveApplicationService.CheckLeaveBalance(lvapplication, lvPolicy)) { //if (LeaveApplicationService.CheckForMaxMonthDays(lvapplication, lvPolicy, LvProcessController.GetFinancialYearID(db.PR_FinancialYear.ToList(), lvapplication.FromDate))) { lvapplication.LineManagerID = (int)_emp.First().LineManagerID; ESSPLeaveService.CreateLeave(lvapplication, lvType, LoggedInUser); ToasterMessages.Add("Leave applied successfully."); Session["ToasterMessages"] = ToasterMessages; return(Json(lvapplication.PLeaveAppID, JsonRequestBehavior.AllowGet)); } //else // ModelState.AddModelError("FromDate", "Leave Monthly Quota Exceeds"); } else { ModelState.AddModelError("LeaveTypeID", "Leave Balance Exceeds, Please check the balance"); } } else { ModelState.AddModelError("LeaveTypeID", "Leave Quota does not exist"); } } else { } } else { ModelState.AddModelError("LeaveTypeID", "Employee is not eligible for leave"); } } } else { ModelState.AddModelError("FromDate", "This Employee already has leave in this range of dates"); } } HelperMethod(lvapplication); return(PartialView("Create", lvapplication)); } }