public ActionResult ApplyLeave() { int roleid = Convert.ToInt32(Session["RoleId"]); int empCode = Convert.ToInt32(Session["EmpCode"]); LeaveApplicationAddViewModel lavm = new LeaveApplicationAddViewModel(); lavm.Employees = _employeeServices.GetEmployeeList(roleid).Where(x => x.EmpCode != empCode); lavm.SerializedActiveYearData = JsonConvert.SerializeObject(_leaveServices.GetActiveYear()); return(View(lavm)); }
public ActionResult ApplyLeave(LeaveApplicationDTO leave) { int empCode = leave.LeaveEmpCode; int curentemp = Convert.ToInt32(Session["Empcode"]); int roleid = Convert.ToInt32(Session["RoleId"]); leave.LeaveDaysType = "F"; leave.RecommededEmpCode = Convert.ToInt32(Session["Empcode"]); leave.RecommendStatus = 2; leave.RecommenderMessage = leave.LeaveDetails; leave.RecommendStatusDate = DateTime.Now; double leavedays = _leaveServices.LeaveDayCalculations(leave.LeaveTypeId, leave.LeaveStartDate, leave.LeaveEndDate); LeaveApplicationAddViewModel lavm = new LeaveApplicationAddViewModel(); LeaveYearDTO year = _leaveServices.GetActiveYear(); lavm.Employees = _employeeServices.GetEmployeeList(roleid).Where(x => x.EmpCode != curentemp); lavm.SerializedActiveYearData = JsonConvert.SerializeObject(_leaveServices.GetActiveYear()); if (!ModelState.IsValid) { return(View(lavm)); } List <LeaveStatViewModel> StatList = _leaveServices.GetLeaveStatus(empCode, year.YearId).ToList(); LeaveStatViewModel targetData = StatList.Find(x => x.LeaveTypeId == leave.LeaveTypeId); LeaveYearDTO currentYear = _leaveServices.GetActiveYear(); if (leave.IsHalfDayLeave == true) { leave.LeaveEndDate = leave.LeaveStartDate; } DateTime startDate = Convert.ToDateTime(leave.LeaveStartDate); DateTime endDate = Convert.ToDateTime(leave.LeaveEndDate); if (startDate > currentYear.YearStartDate && startDate < currentYear.YearEndDate && endDate > currentYear.YearStartDate && endDate < currentYear.YearEndDate) { #region ApplyBeforeZeroDays if (targetData.LeaveApplyBeforeDays == 0) { if (startDate > endDate) { ModelState.AddModelError("StartDateGreaterError", "The start Date is greater than the End Date."); return(View(lavm)); } leave.LeaveEmpCode = empCode; leave.LeaveYearId = currentYear.YearId; leave.LeaveStatus = 1; leave.LeaveStatusDate = DateTime.Now; if (leave.IsHalfDayLeave == true) { leave.LeaveDays = 0.5M; } else { leave.LeaveDays = leave.LeaveEndDate.Date.Subtract(leave.LeaveStartDate.Date).Duration().Days + 1; } leave.LeaveAppliedDate = DateTime.Now; leave.LeaveGUICode = Guid.NewGuid().ToString(); leave.PaidLeave = targetData.IsPayable; if (leave.IsHalfDayLeave) { leave.LeaveDaysType = "H"; if (leave.LeaveDaysPart == null) { ModelState.AddModelError("LeaveDaysPartError", "Leave Day Part is not selected."); return(View(lavm)); } if ((leave.LeaveEndDate.Date.Subtract(leave.LeaveStartDate.Date).Duration().Days + 1) / 2 > targetData.TotalRemainingDays) { ModelState.AddModelError("LeaveBalanceError", "You do not have enough leave balance for this leave type."); return(View(lavm)); } } else { if ((leave.LeaveEndDate.Date.Subtract(leave.LeaveStartDate.Date).Duration().Days + 1) > targetData.TotalRemainingDays) { ModelState.AddModelError("LeaveBalanceError", "You do not have enough leave balance for this leave type."); return(View(lavm)); } } LeaveApplicationDTO reLeaveApplication1 = _leaveServices.InsertLeaveApplication(leave); string leaveName1 = targetData.LeaveTypeName; Session["Success"] = "Your leave application of leave type \"" + leaveName1 + "\" has been inserted."; ModelState.Clear(); return(RedirectToAction("Index")); } #endregion #region HAlfDayLeaveCondition else if (leave.IsHalfDayLeave == true) { leave.LeaveEmpCode = empCode; leave.LeaveYearId = currentYear.YearId; leave.RecommendStatus = 1; leave.RecommendStatusDate = DateTime.Now; leave.LeaveStatus = 1; leave.LeaveStatusDate = DateTime.Now; leave.LeaveAppliedDate = DateTime.Now; leave.LeaveGUICode = Guid.NewGuid().ToString(); leave.PaidLeave = targetData.IsPayable; leave.LeaveDays = 0.5M; leave.LeaveDaysType = "H"; if (targetData.TotalRemainingDays == 0) { ModelState.AddModelError("LeaveBalanceError", "You do not have enough leave balance for this leave type."); return(View(lavm)); } if (leave.LeaveDaysPart == null) { ModelState.AddModelError("LeaveDaysPartError", "Leave Day Part is not selected."); return(View(lavm)); } LeaveApplicationDTO reLeaveApplication1 = _leaveServices.InsertLeaveApplication(leave); string leaveName1 = targetData.LeaveTypeName; Session["Success"] = "Your leave application of leave type \"" + leaveName1 + "\" has been inserted."; ModelState.Clear(); return(RedirectToAction("Index")); } #endregion else if (startDate > endDate) { ModelState.AddModelError("StartDateGreaterError", "The start Date is greater than the End Date."); return(View(lavm)); } else { #region NormalLeaveCondition leave.LeaveEmpCode = empCode; leave.LeaveYearId = currentYear.YearId; leave.RecommendStatus = 2; leave.RecommendStatusDate = DateTime.Now; leave.LeaveStatus = 1; leave.LeaveStatusDate = DateTime.Now; leave.LeaveDays = leave.LeaveEndDate.Date.Subtract(leave.LeaveStartDate.Date).Duration().Days + 1; leave.LeaveAppliedDate = DateTime.Now; leave.LeaveGUICode = Guid.NewGuid().ToString(); leave.PaidLeave = targetData.IsPayable; if ((leave.LeaveEndDate.Date.Subtract(leave.LeaveStartDate.Date).Duration().Days + 1) > targetData.TotalRemainingDays) { ModelState.AddModelError("LeaveBalanceError", "You do not have enough leave balance for this leave type."); return(View(lavm)); } LeaveApplicationDTO reLeaveApplication = _leaveServices.InsertLeaveApplication(leave); string leaveName = targetData.LeaveTypeName; Session["Success"] = "Your leave application of leave type \"" + leaveName + "\" has been inserted."; ModelState.Clear(); return(RedirectToAction("Index")); #endregion } } else { ModelState.AddModelError("DateRangeError", "The Leave start date or end date you stated does not lie in the current year."); return(View(lavm)); } }