示例#1
0
        public void Setup()
        {
            _testEmployee = new Employee
            {
                ContactStartDate = DateTime.Today.AddDays(-90),
                EmployeeId       = 1,
                IsMarried        = true,
                LastName         = "lastName",
                Name             = "Name",
                Salary           = 10000
            };

            _testEmployeeLeaveRequest = new EmployeeLeaveRequest()
            {
                EmployeeId         = _testEmployee.EmployeeId,
                IsApproved         = true,
                LeaveEndDateTime   = DateTime.Today.AddDays(3),
                LeaveStartDateTime = DateTime.Today
            };
            _leaveStartDate = _testEmployeeLeaveRequest.LeaveStartDateTime;
            _days           = (_testEmployeeLeaveRequest.LeaveEndDateTime - _testEmployeeLeaveRequest.LeaveStartDateTime).Days;
            _reason         = "reason";
            _employeeId     = _testEmployee.EmployeeId;

            _log = new CustomLog();
        }
示例#2
0
        public void ProcessLeaveRequest(DateTime leaveStartDate, int days, string reason, int employeeId)
        {
            var employee = FindEmployee(employeeId);

            if ((DateTime.Now - employee.ContactStartDate).TotalDays <= 90 && !employee.IsMarried)
            {
                var ex = new Exception("Invalid leave request.");
                _log.Error(ex.Message, ex);
                return;
            }

            if (days > 20)
            {
                var ex = new Exception("Invalid leave request.");
                _log.Error(ex.Message, ex);
                return;
            }

            var leaveRequest = new EmployeeLeaveRequest
            {
                EmployeeId         = employeeId,
                LeaveStartDateTime = leaveStartDate,
                LeaveEndDateTime   = leaveStartDate.AddDays(days),
                IsApproved         = true
            };

            _dataContext.ProcessLeaveRequest(leaveRequest);
        }
 public bool IsLeaveRequest(EmployeeLeaveRequest employeeLeaveRequest)
 {
     try
     {
         const string query   = "select * from EmployeeLeaveRequest where (StartDate <= @EndDate AND EndDate >= @StartDate AND EmployeeId = @EmployeeId)";
         var          command = new SqlCommand(query, Connection);
         Connection.Open();
         command.Parameters.Clear();
         command.Parameters.Add("StartDate", SqlDbType.Date);
         command.Parameters["StartDate"].Value = employeeLeaveRequest.StartDate;
         command.Parameters.Add("EndDate", SqlDbType.Date);
         command.Parameters["EndDate"].Value = employeeLeaveRequest.EndDate;
         command.Parameters.Add("EmployeeId", SqlDbType.Int);
         command.Parameters["EmployeeId"].Value = employeeLeaveRequest.EmployeeId;
         SqlDataReader reader = command.ExecuteReader();
         reader.Read();
         bool isExist = reader.HasRows;
         reader.Close();
         return(isExist);
     }
     catch (Exception exception)
     {
         throw new Exception("Unable to connect server", exception);
     }
     finally
     {
         Connection.Close();
     }
 }
        public List <EmployeeLeaveRequest> GetTotalCasualLeaveByEmployeeId(int employeeId)
        {
            string query = @"SELECT SUM(TotalDay) as number
            FROM EmployeeLeaveRequest
            WHERE EmployeeId ='" + employeeId + "' and LeaveTypeId = '" + 2 + "' and Status = '" + "Approve" + "'";

            try
            {
                var com = new SqlCommand(query, Connection);
                Connection.Open();
                SqlDataReader dr = com.ExecuteReader();
                var           totalSickLeaves = new List <EmployeeLeaveRequest>();
                while (dr.Read())
                {
                    var leave = new EmployeeLeaveRequest
                    {
                        TotalDay = !object.ReferenceEquals(dr["number"], DBNull.Value) ? Convert.ToInt32(dr["number"]) : 0
                    };

                    totalSickLeaves.Add(leave);
                }
                dr.Close();
                return(totalSickLeaves.ToList());
            }
            catch (Exception exception)
            {
                throw new Exception("Unable to connect Server", exception);
            }
            finally
            {
                Connection.Close();
            }
        }
示例#5
0
        public async Task <ActionResult> Application(Guid id, int statusID, string reason)
        {
            var      userID      = new Guid(Session["EmployeeID"].ToString());
            Employee currentUser = hrEntities.Employees.SingleOrDefault(e => e.ID == userID);

            EmployeeLeaveRequest employeeLeaveRequest =
                hrEntities.EmployeeLeaveRequests.SingleOrDefault(
                    elr => elr.ID == id &&
                    ((elr.Employee.Supervisor != null && elr.Employee.Supervisor.ID == currentUser.ID) ||
                     currentUser.IsAdmin));

            var newStatus = hrEntities.LeaveStatuses.SingleOrDefault(ls => ls.ID == statusID);
            var employee  = employeeLeaveRequest.Employee;

            employeeLeaveRequest.EmployeeLeaveRequestStatusChanges.Add(new EmployeeLeaveRequestStatusChanx
            {
                DateTime            = DateTime.Now,
                ChangedByEmployeeID = userID,
                LeaveStatus         = newStatus,
                Reason = reason
            });

            var saveToDB = hrEntities.SaveChangesAsync();


            string applicationURL = @Url.Action("Application", "Leave",
                                                new RouteValueDictionary {
                { "ID", id }
            }, Request.Url.Scheme);

            var notificationMessage = new MailMessage(AppSettings.DefaultMailAddress,
                                                      employee.GetMailAddress())
            {
                IsBodyHtml = true,
                Subject    = "Your leave application has been " + newStatus.Status.ToLower(),
                Body       =
                    "<h1>" + newStatus.Status + "</h1>Your leave application has been " + newStatus.Status.ToLower() + " by " + currentUser.Name + " " + currentUser.Surname + ". You can <a href='" + applicationURL + "'>go directly to this application</a> for more details."
            };

            HostingEnvironment.QueueBackgroundWorkItem(
                ct => AppSettings.SmtpClient.SendMailAsync(notificationMessage));

            await saveToDB;

            return(RedirectToAction("Application", new RouteValueDictionary {
                { "ID", id }
            }));
        }
        private static void SaveLeaveRequest(EmployeeLeaveRequest leaveRequest)
        {
            var sqlConnection = new SqlConnection("Data Source=local;Initial Catalog=Employee;Integrated Security=True");

            sqlConnection.Open();
            var cmd = new SqlCommand
            {
                CommandText =
                    "Insert into EmployeeLeave (EmployeeId, StartDateTime, EndDateTime) values ('@EmployeeId','@StartDateTime', '@EndDateTime')"
            };

            cmd.Parameters.AddWithValue("EmployeeId", leaveRequest.EmployeeId);
            cmd.Parameters.AddWithValue("StartDateTime", leaveRequest.LeaveStartDateTime);
            cmd.Parameters.AddWithValue("EndDateTime", leaveRequest.LeaveEndDateTime);
            cmd.ExecuteNonQuery();
        }
示例#7
0
        public ActionResult EmployeeLeaveRequest(EmployeeLeaveRequest leaveRequest)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    if (superadminManager.IsLeaveRequest(leaveRequest))
                    {
                        ViewBag.ShowMsg = "Date Overlapping Problem!";
                    }
                    else
                    {
                        leaveRequest.Status    = "Pending";
                        leaveRequest.EntryDate = DateTime.Now;
                        int message = userManager.SendEmployeeLeaveApplication(leaveRequest);
                        if (message > 0)
                        {
                            ViewBag.ShowMsg = "Leave Application Submit Successfully!";
                            List <SubmitedApplicationInfo> userEmail = superadminManager.GetUserEmailAndName(leaveRequest.EmployeeId);
                            bool result = superadminManager.SendEmail(userEmail[0].Email, "About your leave application",
                                                                      "<p>Hello '" + userEmail[0].EmployeeName + "' <br/>Your Leave Application start date '" +
                                                                      leaveRequest.StartDate.ToString("dd/MM/yyyy") + "' and end date '" + leaveRequest.EndDate.ToString("dd/MM/yyyy") + "', total day " +
                                                                      leaveRequest.TotalDay + " are received by HR Admin<br/>Thank You<br/>PBL-001</p>");
                        }
                        else
                        {
                            ViewBag.ShowMsg = "Opps! Application Not Saved! Try Again Please";
                        }
                    }
                }
                catch (Exception exception)
                {
                    throw new Exception(exception.Message);
                }
            }

            ViewBag.casualLeaveLeft   = superadminManager.CasualLeaveLeft(leaveRequest.EmployeeId);
            ViewBag.totalCasualkLeave = superadminManager.TotalCasualLeave(leaveRequest.EmployeeId);
            ViewBag.sickLeaveLeft     = superadminManager.SickLeaveLeft(leaveRequest.EmployeeId);
            ViewBag.totalSickLeave    = superadminManager.TotalSickLeave(leaveRequest.EmployeeId);
            ViewBag.ListOfLeaveType   = superadminManager.GetLeaveType();
            ViewBag.ListOfEmployees   = superadminManager.ListOfEmployee();

            return(View());
        }
        public int SendEmployeeLeaveApplication(EmployeeLeaveRequest leaveRequest)
        {
            string query = "INSERT INTO EmployeeLeaveRequest (EmployeeId,LeaveTypeId,Reason,StartDate,EndDate,EntryDate,TotalDay,Status) VALUES ('" + leaveRequest.EmployeeId + "','" + leaveRequest.LeaveTypeId + "','" + leaveRequest.Reason + "','" + leaveRequest.StartDate + "','" + leaveRequest.EndDate + "','" + leaveRequest.EntryDate + "','" + leaveRequest.TotalDay + "','" + leaveRequest.Status + "')";

            try
            {
                SqlCommand Command = new SqlCommand(query, Connection);
                Connection.Open();
                int rowAffected = Command.ExecuteNonQuery();
                return(rowAffected);
            }
            catch (Exception exception)
            {
                throw new Exception("Unable to connect Server", exception);
            }
            finally
            {
                Connection.Close();
            }
        }
示例#9
0
        public ActionResult Application(Guid id)
        {
            var      userID      = new Guid(Session["EmployeeID"].ToString());
            Employee currentUser = hrEntities.Employees.SingleOrDefault(e => e.ID == userID);

            ViewBag.CurrentUser = currentUser;

            EmployeeLeaveRequest employeeLeaveRequest =
                hrEntities.EmployeeLeaveRequests.SingleOrDefault(
                    elr => elr.ID == id &&
                    (elr.EmployeeID == currentUser.ID ||
                     (elr.Employee.Supervisor != null && elr.Employee.Supervisor.ID == currentUser.ID) ||
                     currentUser.IsAdmin));

            if (employeeLeaveRequest == null)
            {
                return(HttpNotFound());
            }

            return(View(employeeLeaveRequest));
        }
示例#10
0
 public int SendEmployeeLeaveApplication(EmployeeLeaveRequest leaveRequest)
 {
     return(userGateway.SendEmployeeLeaveApplication(leaveRequest));
 }
 public void ProcessLeaveRequest(EmployeeLeaveRequest leaveRequest)
 {
     SaveLeaveRequest(leaveRequest);
 }
 public bool IsLeaveRequest(EmployeeLeaveRequest employeeLeaveRequest)
 {
     return(_superadminGateway.IsLeaveRequest(employeeLeaveRequest));
 }
示例#13
0
        public async Task <JsonResult> Book(BookLeaveRequest bookLeaveRequest)
        {
            var      userID      = new Guid(Session["EmployeeID"].ToString());
            Employee currentUser = hrEntities.Employees.SingleOrDefault(e => e.ID == userID);
            Employee supervisor  = currentUser.Supervisor;

            var leaveRequest = new EmployeeLeaveRequest
            {
                ID          = Guid.NewGuid(),
                DateTime    = DateTime.Now,
                LeaveTypeID = bookLeaveRequest.LeaveType,
            };

            foreach (BookLeaveRequestDate bookLeaveRequestDate in bookLeaveRequest.Dates)
            {
                leaveRequest.EmployeeLeaveRequestDates.Add(new EmployeeLeaveRequestDate
                {
                    Day       = bookLeaveRequestDate.Date,
                    IsFullDay = bookLeaveRequestDate.IsFullDay == 1 ? true : false
                });
            }

            if (supervisor == null)
            {
                leaveRequest.EmployeeLeaveRequestStatusChanges.Add(new EmployeeLeaveRequestStatusChanx
                {
                    ChangedByEmployee = currentUser,
                    DateTime          = DateTime.Now,
                    LeaveStatusID     = 2,
                    Reason            = "Auto-Approved"
                });
            }

            currentUser.EmployeeLeaveRequests.Add(leaveRequest);

            var saveToDB = hrEntities.SaveChangesAsync();

            if (supervisor != null)
            {
                string approvalURL = @Url.Action("Application", "Leave",
                                                 new RouteValueDictionary {
                    { "ID", leaveRequest.ID }
                }, Request.Url.Scheme);

                var supervisorMailMessage = new MailMessage(AppSettings.DefaultMailAddress,
                                                            supervisor.GetMailAddress())
                {
                    IsBodyHtml = true,
                    Subject    = "New Leave Application from " + currentUser.Name + " " + currentUser.Surname,
                    Body       =
                        "You have a new leave application to approve. You can <a href='" + approvalURL + "'>go directly to this application</a> to approve or reject it."
                };

                HostingEnvironment.QueueBackgroundWorkItem(
                    ct => AppSettings.SmtpClient.SendMailAsync(supervisorMailMessage));
            }

            await saveToDB;

            return(Json(leaveRequest.ID));
        }
示例#14
0
 public void ProcessLeaveRequest(EmployeeLeaveRequest leaveRequest)
 {
     EmployeeLeaveStore.Add(leaveRequest);
 }