示例#1
0
        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));
        }
示例#2
0
        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));
            }
        }