public ActionResult Disagree(ulong id) { DBQuery dbq = new DBQuery(); Boolean result = false; result = dbq.UpdateVacationRequestStatus(id, VacationRequestProcessingState.rejectedByDeputy, DateTime.Now); if (result) { VacationRequest vr = dbq.SelectVacationRequest(id); CommunicationManagement.EmailService message = new CommunicationManagement.EmailService(); message.sendMessage(vr, CommunicationManagement.EmailService.CONFIRMATION_EMAIL_REJECTED); TempData["success"] = "Die Vertretungsanfrage wurde abgelehnt."; } else { ErrorState.ErrorStateInstance.setError(ErrorState.DATABASE_ERROR); //TempData["error"] = "Die Änderung konnte nicht in die Datenbank übernommen werden!"; } int lastError = ErrorState.ErrorStateInstance.getLastError(); if (lastError != ErrorState.OK) { TempData["error"] = ErrorState.ErrorStateInstance.getErrorMessage(lastError); } return RedirectToAction("Index", "VacationRequests"); }
/// <summary> /// informs the respective persons about the new status /// </summary> /// <param name="VacationRequest">VacationRequest of the Requester</param> /// <param name="message">Content of email</param> /// <returns></returns> public void sendMessage(VacationRequest vacationRequest, String message) { DBQuery dbq = new DBQuery(); if (message.Equals("SUBMISSION")) { Employee deputy = dbq.SelectDeputy(vacationRequest.getEmployeeID()); Employee divisionManager = dbq.SelectDivisionManager(vacationRequest.getEmployeeID()); // TODO: implement Email sending procedure } else if (message.Equals("AGREED")) { Employee divisionManager = dbq.SelectDivisionManager(vacationRequest.getEmployeeID()); Employee requester = dbq.SelectRequester(vacationRequest.getVacationRequestID()); // TODO: implement Email sending procedure } else if (message.Equals("PERMITTED")) { } else if (message.Equals("REJECTED")) { Employee requester = dbq.SelectRequester(vacationRequest.getVacationRequestID()); // TODO: implement Email sending procedure } }
/// <summary> /// /// </summary> /// <returns></returns> public List<PendingVacationRequestViewItem> GetPendingRequests() { String currentUserId = User.Identity.GetUserId(); List<String> statesListWithShiftPartner = new List<string> { DBQuery.AGREED, DBQuery.REJECTED_BY_DEPUTY }; List<String> statesListWithoutShiftPartner = new List<string> { DBQuery.SUBMITTED }; DBQuery dbq = new DBQuery(); var DivisionVacationRequestList = new List<PendingVacationRequestViewItem>(); var SortedDivisionVacationRequestList = new List<PendingVacationRequestViewItem>(); var EmployeeList = new List<Employee>(); EmployeeList.AddRange(dbq.SelectEmployeesOfDivision(currentUserId)); if (EmployeeList.Count() > 0) { foreach (Employee e in EmployeeList) { // look for all employees of division but Division Manager self if (!e.getEmployeeID().Equals(currentUserId)) { var vrList = new List<VacationManagement.VacationRequest>(); String requesterName = e.getFullName(); String deputyID = dbq.SelectShiftPartner(e.getEmployeeID()); int remainingVacationDays = dbq.SelectRemainingVacationDays(e.getEmployeeID()); // has shiftpartner if (!deputyID.Equals("null")) { String deputyName = dbq.SelectEmployeeFullName(deputyID); foreach (string s in statesListWithShiftPartner) { vrList.AddRange(dbq.SelectVacationRequestsInState(e.getEmployeeID(), s)); } foreach (VacationManagement.VacationRequest vr in vrList) { DivisionVacationRequestList.Add(new PendingVacationRequestViewItem(vr, requesterName, deputyName, remainingVacationDays)); } } else { String deputyName = "-"; foreach (string s in statesListWithoutShiftPartner) { vrList.AddRange(dbq.SelectVacationRequestsInState(e.getEmployeeID(), s)); } foreach (VacationManagement.VacationRequest vr in vrList) { DivisionVacationRequestList.Add(new PendingVacationRequestViewItem(vr, requesterName, deputyName, remainingVacationDays)); } } } } // Sort all Vacation Requests by Startdate, Ascending SortedDivisionVacationRequestList = DivisionVacationRequestList.OrderBy(c => c.getVacationStartDate()).ToList(); } return SortedDivisionVacationRequestList; }
public ActionResult ShowVacationSummary() { String currentUserId = User.Identity.GetUserId(); DBQuery dbq = new DBQuery(); int remaining = dbq.SelectRemainingVacationDays(currentUserId); int total = dbq.SelectVacationDaysTotal(currentUserId); int prevYear = dbq.SelectVacationDaysPreviousYear(currentUserId); GUIManagement.VacationEntitlementViewItem summary = new GUIManagement.VacationEntitlementViewItem(currentUserId,remaining,total,prevYear); return View(summary); }
// POST: VacationRequests/Delete/5 public ActionResult Cancel(ulong id) { DBQuery dbq = new DBQuery(); Boolean result = dbq.UpdateVacationRequestStatus(id, VacationRequestProcessingState.canceled, DateTime.Now); if (result) { VacationRequest vr = dbq.SelectVacationRequest(id); //Restore Net Vacation Days of VacationRequest to Employee's VacationEntitlement result = RestoreVacationDaysInEmployeeVacationEntitlement(vr); if (result) { TempData["success"] = "Der Urlaubsantrag wurde erfolgreich storniert."; } else { ErrorState.ErrorStateInstance.setError(ErrorState.DATABASE_ERROR); //TempData["error"] = "Die Gutschrift der Urlaubstage konnte nicht durchgeführt werden!"; } // set NetVacationDays of cancelled VacationRequest to zero result = ClearNetVacationDaysOfCanceledVacationRequest(vr.getVacationRequestID()); if (!result) { ErrorState.ErrorStateInstance.setError(ErrorState.DATABASE_ERROR); } // remove any VacationPeriodOverlapNotes in VacationRequests of ShiftPartner, if applicable if (vr.getVacationPeriodOverlapNote()) { result = RemoveVacationPeriodOverlapNote(vr); if (!result) { ErrorState.ErrorStateInstance.setError(ErrorState.DATABASE_ERROR); } } } else { ErrorState.ErrorStateInstance.setError(ErrorState.DATABASE_ERROR); //TempData["error"] = "Die Änderung konnte nicht in die Datenbank übernommen werden!"; } int lastError = ErrorState.ErrorStateInstance.getLastError(); if (lastError != ErrorState.OK) { TempData["error"] = "Der Urlaubsantrag konnte nicht storniert werden. Grund: " + ErrorState.ErrorStateInstance.getErrorMessage(lastError); } return RedirectToAction("Index"); }
/// <summary> /// Dependent on the checktype, method checks either for overlaps between the new submitted vacation request and DB-stored lock periods, /// or between overlaps with a vacation request by the deputy /// </summary> /// <param name="CheckType"> an int value that choose the test type</param> /// <returns> true if no lock or overlap is present, else false</returns> public Boolean Validate(int CheckType) { Boolean result = true; // assumes that no locks or overlaps exist switch (CheckType) { case CHECK_CATEGORY_LOCK_PERIOD: DBQuery dbqLock = new DBQuery(); // the DB Query checks whether on ore more lock period(s) lie(s) in vacation request time period var lockList = dbqLock.SelectLockPeriods(_vacationRequest); if (lockList.Count() > 0) { result = false; } break; case CHECK_CATEGORY_VACATION_OVERLAP_PERIOD: DBQuery dbqDeputy = new DBQuery(); String deputyID = dbqDeputy.SelectDeputy(_vacationRequest); if ( !deputyID.Equals("null") && deputyID != String.Empty) { var overlapList = dbqDeputy.SelectUncanceledEmployeeVacationRequestInTimePeriod(_vacationRequest, deputyID); if (overlapList.Count() > 0) { foreach (var i in overlapList) { //change OverlapNote of existing VacationRequest of Deputy DBQuery dbq = new DBQuery(); dbq.UpdateVacationRequestPeriodOverlapNote(i.Item1, true); } result = false; } } break; default: break; } return result; }
private Boolean RestoreVacationDaysInEmployeeVacationEntitlement(VacationRequest vacationRequest) { Boolean result = false; DBQuery dbq = new DBQuery(); int netWorkingDays = vacationRequest.getNetVacationDays(); int remainingVacationDays = dbq.SelectRemainingVacationDays(vacationRequest.getEmployeeID()); result = dbq.UpdateRemainingVacationDays(vacationRequest.getEmployeeID(), netWorkingDays + remainingVacationDays); return result; }
/// <summary> /// Removes the TRUE-flag in all vacation requests of the shift partner, if the given vacation request is cancelled by its requester. /// Use requester ID of vacation request to identity the shiftpartner and startdate and enddate to retrieve vacation requests of the deputy /// </summary> /// <param name="vacationRequest">use requesterID to find deputy, use time period to specify overlap time period </param> /// <returns>TRUE if successful, else FALSE</returns> private Boolean RemoveVacationPeriodOverlapNote(VacationRequest vacationRequest) { Boolean result = true; DBQuery dbq = new DBQuery(); String deputyID = dbq.SelectDeputy(vacationRequest); if (!deputyID.Equals("null") && deputyID != String.Empty) { var overlapList = dbq.SelectUncanceledEmployeeVacationRequestInTimePeriod(vacationRequest, deputyID); if (overlapList.Count > 0) { foreach (var i in overlapList) { //change OverlapNote of existing VacationRequest of Deputy result = dbq.UpdateVacationRequestPeriodOverlapNote(i.Item1, false); if (!result) break; } } } return result; }
private Boolean ClearNetVacationDaysOfCanceledVacationRequest(ulong vacationRequestID) { Boolean result = false; DBQuery dbq = new DBQuery(); result = dbq.UpdateNetVacationDays(vacationRequestID, 0); return result; }
public List<EmployeeVacationRequestViewItem> GetVacationRequests() { String currentUserId = User.Identity.GetUserId(); List<GUIManagement.EmployeeVacationRequestViewItem> resultList = new List<GUIManagement.EmployeeVacationRequestViewItem>(); DBQuery dbq = new DBQuery(); List<VacationManagement.VacationRequest> vacationRequestList = dbq.SelectAllVacationRequestsOfEmployee(currentUserId); String shiftPartnerID = dbq.SelectShiftPartner(currentUserId); String shiftParterName = "-"; if (shiftPartnerID != null) { Employee shiftPartner = dbq.SelectDeputy(currentUserId); shiftParterName = dbq.SelectEmployeeFullName(shiftPartner.getEmployeeID()); } foreach (VacationManagement.VacationRequest vr in vacationRequestList) { var employeeVacationRequest = new GUIManagement.EmployeeVacationRequestViewItem(vr, shiftParterName); resultList.Add(employeeVacationRequest); } return resultList; }
public List<AllVacationRequestViewItem> GetAllVacationRequests() { List<GUIManagement.AllVacationRequestViewItem> resultList = new List<GUIManagement.AllVacationRequestViewItem>(); DBQuery dbq = new DBQuery(); List<VacationManagement.VacationRequest> vacationRequestList = dbq.SelectAllVacationRequestsOfDivision(1); // hier muss eine Funktionr ein der die Bereichsid übermittelt string requesterFullName = "-"; foreach (VacationManagement.VacationRequest vr in vacationRequestList) { requesterFullName = dbq.SelectEmployeeFullName(vr.getEmployeeID()); var employeeVacationRequest = new GUIManagement.AllVacationRequestViewItem(vr, requesterFullName); resultList.Add(employeeVacationRequest); } return resultList; }
public ActionResult Delete(ulong id) { DBQuery dbq = new DBQuery(); VacationRequest vr = dbq.SelectVacationRequest(id); int netWorkingDays = vr.getNetVacationDays(); int remainingVacationDays = dbq.SelectRemainingVacationDays(vr.getEmployeeID()); Boolean update = dbq.UpdateRemainingVacationDays(vr.getEmployeeID(), netWorkingDays + remainingVacationDays); if (update) { Boolean result = dbq.DeleteVacationRequest(id); if (result) { ErrorState.ErrorStateInstance.setError(ErrorState.DATABASE_ERROR); TempData["success"] = "Der Urlaubsantrag wurde erfolgreich gelöscht"; } else { ErrorState.ErrorStateInstance.setError(ErrorState.DATABASE_ERROR); //TempData["error"] = "Die Änderung konnte nicht in die Datenbank übernommen werden!"; } } else { ErrorState.ErrorStateInstance.setError(ErrorState.DATABASE_ERROR); //TempData["error"] = "Die Änderung konnte nicht in die Datenbank übernommen werden!"; } int lastError = ErrorState.ErrorStateInstance.getLastError(); if (lastError != ErrorState.OK) { TempData["error"] = "Der Urlaubsantrag konnte nicht gelöscht werden. Grund: " + ErrorState.ErrorStateInstance.getErrorMessage(lastError); } return RedirectToAction("All"); }
/// <summary> /// Calculates the needed vacation days for the desired holiday period. Weekends and holidays are deducted. /// </summary> /// <param name="VacationRequest">VacationRequest of the Requester</param> /// <returns>number of needed vacation days</returns> public static int DetermineWorkingDaysInVacationRequest(VacationRequest VacationRequest) { int workingDays = 0; int holiDays = 0; int netWorkingDays = 0; //count weekdays between vacation start day and vacation end day int n = 0; while (VacationRequest.getVacationStartDate().AddDays(n) <= VacationRequest.getVacationEndDate()) // vacation start day == vacation start day is possible { if (VacationRequest.getVacationStartDate().AddDays(n).DayOfWeek != DayOfWeek.Saturday && VacationRequest.getVacationStartDate().AddDays(n).DayOfWeek != DayOfWeek.Sunday) //== no weekday { workingDays++; } n++; } // check if holidays days are in the vacation period DBQuery dbq = new DBQuery(); holiDays = dbq.SelectHolidays(VacationRequest); // correct required vacation days netWorkingDays = workingDays - holiDays; return netWorkingDays; }
public ActionResult Reject(ulong id) { String currentUserId = User.Identity.GetUserId(); DBQuery dbq = new DBQuery(); Boolean result = false; result = dbq.UpdateVacationRequestStatus(id, VacationRequestProcessingState.rejectedByDivisionManager, DateTime.Now); if (result) { // Restore VacationEntitlement to Employee VacationRequest vr = dbq.SelectVacationRequest(id); CommunicationManagement.EmailService message = new CommunicationManagement.EmailService(); message.sendMessage(vr, CommunicationManagement.EmailService.CONFIRMATION_EMAIL_REJECTED); TempData["success"] = "Der Urlaubsantrag wurde abgelehnt."; } else { ErrorState.ErrorStateInstance.setError(ErrorState.DATABASE_ERROR); // TempData["error"] = "Die Änderung konnte nicht in die Datenbank übernommen werden!"; } int lastError = ErrorState.ErrorStateInstance.getLastError(); if (lastError != ErrorState.OK) { TempData["error"] = ErrorState.ErrorStateInstance.getErrorMessage(lastError); } return View("Index", GetAllPendingVacationRequestsOfDivision()); }
public ActionResult Permit(ulong id) { DBQuery dbq = new DBQuery(); VacationRequest vr1 = dbq.SelectVacationRequest(id); Boolean result = false; // if vacationRequestStartDate is in the past then the status will be set to "taken" if (vr1.getVacationStartDate() < DateTime.Now) { result = dbq.UpdateVacationRequestStatus(id, VacationRequestProcessingState.taken, DateTime.Now); } else { result = dbq.UpdateVacationRequestStatus(id, VacationRequestProcessingState.permitted, DateTime.Now); } if (result) { VacationRequest vr = dbq.SelectVacationRequest(id); CommunicationManagement.EmailService message = new CommunicationManagement.EmailService(); message.sendMessage(vr, CommunicationManagement.EmailService.CONFIRMATION_EMAIL_PERMITTED); TempData["success"] = "Der Urlaubsantrag wurde befürwortet."; } else { ErrorState.ErrorStateInstance.setError(ErrorState.DATABASE_ERROR); //TempData["error"] = "Die Änderung konnte nicht in die Datenbank übernommen werden!"; } int lastError = ErrorState.ErrorStateInstance.getLastError(); if (lastError != ErrorState.OK) { TempData["error"] = ErrorState.ErrorStateInstance.getErrorMessage(lastError); } return View("Index", GetAllPendingVacationRequestsOfDivision()); }
// GET: VacationReplacementRequests public ActionResult Index() { // identify logged-in user String currentUserId = User.Identity.GetUserId(); DBQuery dbq = new DBQuery(); var ReplacementReqList = new List<GUIManagement.VacationReplacementRequestViewItem>(); String shiftPartnerID = dbq.SelectShiftPartner(currentUserId); if (shiftPartnerID != null) { var VRList = dbq.SelectSubmittedVacationRequestsOfShiftPartner(shiftPartnerID); String name = dbq.SelectEmployeeFullName(shiftPartnerID); foreach (VacationManagement.VacationRequest vr in VRList) { GUIManagement.VacationReplacementRequestViewItem vrr = new GUIManagement.VacationReplacementRequestViewItem(vr, name); ReplacementReqList.Add(vrr); } } else { // Labelausgabe GUI } return View(ReplacementReqList); }
/// <summary> /// (1) checks if remaining vacation days of employee suffice, /// (2) sets lock period flag if appropriate, /// (3) sets vacation period overlap flag if appropriate /// </summary> /// <param name="VacationRequest"> a vacation request, passed by reference</param> /// <returns></returns> public Boolean Validate(VacationRequest VacationRequest) { Boolean result = false; ///<remarks> this value must be numeric</remarks> //checks remaining vacation days DBQuery dbq = new DBQuery(); int remainingVacationDays = dbq.SelectRemainingVacationDays(VacationRequest.getEmployeeID()); // determine working days in vacation request int vacationWorkingDays = VacationRequest.DetermineWorkingDaysInVacationRequest(VacationRequest); // only proceed if time period of vacation request contains working days if (vacationWorkingDays > 0) { VacationRequest.setNetVacationDays(vacationWorkingDays); // Check VacationRequest overlap with others already existing VacationRequests of Requester without state "canceled" var VRList = dbq.SelectUncanceledEmployeeVacationRequestInTimePeriod(VacationRequest, VacationRequest.getEmployeeID()); Boolean overlap = false; Boolean insufficientRemainingVacationDays = false; if (VRList.Count > 0) { overlap = true; ErrorState.ErrorStateInstance.setError(ErrorState.OVERLAP_WITH_OWN_VACATION_REQUEST); } if (remainingVacationDays < vacationWorkingDays) { insufficientRemainingVacationDays = true; ErrorState.ErrorStateInstance.setError(ErrorState.INSUFFICIENT_REMAINING_VACATION_DAYS); } // if requester has enough remaining Vacation Days AND no submitted vacation request(s) in this time period, go ahead if (!insufficientRemainingVacationDays && !overlap) { TimePeriodOverlapCheck check = new TimePeriodOverlapCheck(VacationRequest); //check lock period if (!check.Validate(TimePeriodOverlapCheck.CHECK_CATEGORY_LOCK_PERIOD)) { //overlap existing VacationRequest.setVacationLockPeriodNote(true); } //check overlap period with Deputy if (!check.Validate(TimePeriodOverlapCheck.CHECK_CATEGORY_VACATION_OVERLAP_PERIOD)) { //overlap existing VacationRequest.setVacationPeriodOverlapNote(true); } if (VacationRequest.getVacationStartDate() < DateTime.Now) { //if VacationRequestEndDate is in past the new Processingstatus is: agreed, so the decision of the DivisionManager is the next step VacationRequest.setVacationRequestProcessingState(VacationRequestProcessingState.agreed); } result = true; } } else { ErrorState.ErrorStateInstance.setError(ErrorState.ZERO_NET_VACATION_DAYS_IN_VACATION_REQUEST); } return result; }
/// <summary> /// 1. writes an information email /// 2. writes vacation request in the database /// </summary> /// <returns>Boolean status if the insert into database was successful</returns> private Boolean SendDataToDB() { Boolean result = false; DBQuery dbq = new DBQuery(); result = dbq.InsertNewVacationRequest(this); if (result) { int remainingVacationDays = dbq.SelectRemainingVacationDays(_employeeID) - this._netVacationDays; result = dbq.UpdateRemainingVacationDays(_employeeID, remainingVacationDays); } if (!result) { ErrorState.ErrorStateInstance.setError(ErrorState.DATABASE_ERROR); } return result; }