/// <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; }
/// <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> /// 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; }