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(); }
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(); } }
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(); }
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(); } }
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)); }
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)); }
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)); }
public void ProcessLeaveRequest(EmployeeLeaveRequest leaveRequest) { EmployeeLeaveStore.Add(leaveRequest); }