⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 leave.php

📁 国外的人才求职招聘最新版
💻 PHP
📖 第 1 页 / 共 2 页
字号:
	 *
	 * @return int
	 * @param String LeaveTypeId, [int status]
	 *
	 */
	public function countLeave($leaveTypeId, $year=null, $status=null) {
		if ($year == null) {
			$year = date('Y');
		}

		if ($status == null) {
			$status = $this->statusLeaveTaken;
		}

		$totalLeaveLength = 0;

		$leaveLengths = array($this->lengthFullDay, $this->lengthHalfDayAfternoon, $this->lengthHalfDayMorning);

		$sqlBuilder = new SQLQBuilder();

		$arrFields[0] = 'SUM(ABS(`leave_length_days`))';

		$arrTable = "`hs_hr_leave`";

		$selectConditions[1] = "`employee_id` = '".$this->getEmployeeId()."'";
		$selectConditions[2] = "`leave_status` = ".$status;
		$selectConditions[3] = "`leave_type_id` = '".$leaveTypeId."'";
		$selectConditions[4] = "`leave_date` BETWEEN DATE('".$year."-01-01') AND DATE('".$year."-12-31')";

		$query = $sqlBuilder->simpleSelect($arrTable, $arrFields, $selectConditions);

		$dbConnection = new DMLFunctions();

		$result = $dbConnection->executeQuery($query);

		$count = mysql_fetch_row($result);

		$totalLeaveLength = $count[0];

		return $totalLeaveLength;
	}

	protected function _adjustLeaveLength() {
		$timeOff = $this->_timeOffLength($this->getLeaveDate());
		$shift = Leave::LEAVE_LENGTH_FULL_DAY;
		$workShift = Workshift::getWorkshiftForEmployee($this->getEmployeeId());

		if (isset($workShift)) {
			$shift = $workShift->getHoursPerDay();
		}

		$hours=$shift;
		$days=1;

		if ($this->getLeaveLengthHours() != null) {
			$hours = $this->getLeaveLengthHours() - ($timeOff * $shift);
			$days = round(($hours/$shift), 2);
		} else if ($this->getLeaveLengthDays() != null) {
			$hours = ($this->getLeaveLengthDays() - $timeOff) * $shift;
			$days = round(($hours/$shift), 2);
		}

		if (0 > $hours) {
			$hours=0;
		}
		if (0 > $days) {
			$days=0;
		}

		$this->setLeaveLengthHours($hours);
		$this->setLeaveLengthDays($days);
	}

	/**
	 * Adds Leave
	 *
	 * @access protected
	 */
	protected function _addLeave() {

		$this->leaveId = UniqueIDGenerator::getInstance()->getNextID('hs_hr_leave', 'leave_id');

		$this->_getLeaveTypeName();
		$this->setDateApplied(date('Y-m-d'));

		$this->_adjustLeaveLength();

		$insertFields[0] = '`leave_id`';
		$insertFields[1] = '`leave_date`';
		$insertFields[2] = '`leave_length_hours`';
		$insertFields[3] = '`leave_length_days`';
		$insertFields[4] = '`leave_status`';
		$insertFields[5] = '`leave_comments`';
		$insertFields[6] = '`leave_request_id`';
		$insertFields[7] = '`leave_type_id`';
		$insertFields[8] = '`employee_id`';

		$arrRecordsList[0] = $this->getLeaveId();
		$arrRecordsList[1] = "'". $this->getLeaveDate()."'";
		$arrRecordsList[2] = "'". $this->getLeaveLengthHours()."'";
		$arrRecordsList[3] = "'". $this->getLeaveLengthDays()."'";
		$arrRecordsList[4] = $this->statusLeavePendingApproval;
		$arrRecordsList[5] = "'".$this->getLeaveComments()."'";
		$arrRecordsList[6] = "'". $this->getLeaveRequestId(). "'";
		$arrRecordsList[7] = "'".$this->getLeaveTypeId()."'";
		$arrRecordsList[8] = "'". $this->getEmployeeId() . "'";

		if (($this->getStartTime() != null) && ($this->getEndTime() != null)) {
			$insertFields[9] = '`start_time`';
			$arrRecordsList[9] = "'". $this->getStartTime() . "'";

			$insertFields[10] = '`end_time`';
			$arrRecordsList[10] = "'". $this->getEndTime() . "'";
		}

		$arrTable = "`hs_hr_leave`";

		$sqlBuilder = new SQLQBuilder();

		$query = $sqlBuilder->simpleInsert($arrTable, $arrRecordsList, $insertFields);

		$dbConnection = new DMLFunctions();

		$result = $dbConnection -> executeQuery($query);
		return $result;
	}

	/**
	 * function _changeLeaveStatus, access is private, will not be documented
	 *
	 * @access private
	 */
	protected function _changeLeaveStatus() {

		$sqlBuilder = new SQLQBuilder();

		$table = "`hs_hr_leave`";

		$changeFields[0] = "`leave_status`";
		$changeFields[1] = "`leave_comments`";

		$changeValues[0] = $this->getLeaveStatus();
		$changeValues[1] = "'".$this->getLeaveComments()."'";

		$updateConditions[0] = "`leave_id` = ".$this->getLeaveId();

		$query = $sqlBuilder->simpleUpdate($table, $changeFields, $changeValues, $updateConditions);

		$dbConnection = new DMLFunctions();

		$result = $dbConnection->executeQuery($query);

		if (isset($result) && (mysql_affected_rows() > 0)) {
			return true;
		};

		return false;
	}

	/**
	 *
	 * function _getLeaveTypeName, access is private, will not be documented
	 *
	 * @access private
	 *
	 */
	protected function _getLeaveTypeName() {

		$sqlBuilder = new SQLQBuilder();
		$leave_Type  = new LeaveType();

		$selectTable = "`hs_hr_leavetype`";
		$selectFields[0] = '`leave_type_name`';
    	$updateConditions[1] = "`leave_type_id` = '".$this->getLeaveTypeId()."'";

    	$query = $sqlBuilder->simpleSelect($selectTable, $selectFields, $updateConditions, null, null, null);
		//echo $query;
		$dbConnection = new DMLFunctions();

		$result = $dbConnection -> executeQuery($query);

		$row = mysql_fetch_row($result);

		$this->setLeaveTypeName($row[0]);
	}

	/**
	 * Calculates the time off for a particular date
	 *
	 * Return values:
	 * Eg: Returns 1 for full day off, 0.5 for half day off, 0 for no off time
	 *
	 * @param String $date
	 * @return integer $timeOff
	 */
	protected function _timeOffLength($date) {
		$timeOff = 0;

		if (isset($this->weekends[date('N', strtotime($date))-1])) {
			$timeOff = $this->weekends[date('N', strtotime($date))-1]->getLength();
		}

		$holidaysObj = new Holidays();

		$length = $holidaysObj->isHoliday($date);

		if ($length > $timeOff) {
			$timeOff = $length;
		}

		return $timeOff / 8;
	}

	/**
	 * Calculates required length of leave.
	 *
	 * @param integer $length - leave lenth
	 * @param integer $timeOff - time off for that day
	 * @return integer $reqiredLength - length of leave required.
	 */
	protected function _leaveLength($length, $timeOff) {
		$factor = 1;
		if ($length < 0) {
			$factor = -1;
		}

		$length = abs($length);
		if ($timeOff > $length) {
			return 0;
		}
		$requiredLength = $length-$timeOff;

		return $requiredLength*$factor;
	}

	/**
	 *
	 * function _buildObjArr, access is private, will not be documented
	 *
	 * @access protected
	 */
	protected function _buildObjArr($result, $supervisor=false) {

		$objArr = null;

		while ($row = mysql_fetch_assoc($result)) {

			$tmpLeaveArr = new Leave();

			$tmpLeaveArr->setLeaveDate($row['leave_date']);
			$tmpLeaveArr->setLeaveStatus($row['leave_status']);

			$leaveLengthHours = $row['leave_length_hours'];
			$leaveLengthDays = $row['leave_length_days'];

			$tmpLeaveArr->setLeaveLengthHours($leaveLengthHours);
			$tmpLeaveArr->setLeaveLengthDays($leaveLengthDays);
			$tmpLeaveArr->setLeaveComments($row['leave_comments']);
			$tmpLeaveArr->setLeaveId($row['leave_id']);

			if (isset($row['employee_id'])) {
				$tmpLeaveArr->setEmployeeId($row['employee_id']);
			}

			if (isset($row['leave_type_name'])) {
				$tmpLeaveArr->setLeaveTypeName($row['leave_type_name']);
			}

			if (isset($row['leave_type_id'])) {
				$tmpLeaveArr->setLeaveTypeId($row['leave_type_id']);
			}

			if (isset($row['leave_request_id'])) {
				$tmpLeaveArr->setLeaveRequestId($row['leave_request_id']);
			}

			if (!empty($row['start_time']) && !empty($row['start_time'])) {
				$tmpLeaveArr->setStartTime(date("H:i", strtotime($row['start_time'])));
				$tmpLeaveArr->setEndTime(date("H:i", strtotime($row['end_time'])));
			}

			if ($supervisor && isset($row['employee_id'])) {
				$tmpLeaveArr->setEmployeeName("{$row['emp_firstname']} {$row['emp_lastname']}");
			}

			$objArr[] = $tmpLeaveArr;
		}

		return $objArr;
	}

	/**
	 * Retrieve the years where there are any leave records
	 * returns at least current year
	 *
	 * @return String[]
	 * @access public
	 */
	public function getLeaveYears() {

		$sqlBuilder = new SQLQBuilder();

		$selectTable = "`hs_hr_leave`";

		$selectFields[] = "DISTINCT YEAR(`leave_date`) ";

		$selectConditions[] = "`leave_date` < '".date('Y')."-01-01'";

		$selectOrder = "ASC";

		$selectOrderBy = "`leave_date`";

		$query = $sqlBuilder->simpleSelect($selectTable, $selectFields, $selectConditions, $selectOrderBy, $selectOrder, 1);

		$dbConnection = new DMLFunctions();

		$result = $dbConnection -> executeQuery($query);

		if ($row = mysql_fetch_row($result)) {
			$firstYears = $row[0];

			for ($i=$firstYears; $i<date('Y'); $i++) {
				$years[] = $i;
			}
		}

		$years[] = date('Y');

		$years[] = date('Y')+1;

		$years = array_unique($years);

		rsort($years);

		return $years;

	}

	/**
	 * Changes the leave status to taken if the date is before
	 * or on today
	 *
	 * @access public
	 */
	 public function takeLeave() {

		$sqlBuilder = new SQLQBuilder();

		$selectFields[0] = '`leave_date`';
		$selectFields[1] = '`leave_status`';
		$selectFields[2] = '`leave_length_hours`';
		$selectFields[3] = '`leave_length_days`';
		$selectFields[4] = '`leave_comments`';
		$selectFields[5] = '`leave_id`';
		$selectFields[6] = '`employee_id`';
		$selectFields[7] = '`leave_type_id`';

		$selectTable = '`hs_hr_leave`';

		$selectConditions[] = "`leave_status` = ".$this->statusLeaveApproved;
		$selectConditions[] = "`leave_date` <= NOW()";

		$query = $sqlBuilder->simpleSelect($selectTable, $selectFields, $selectConditions);

		$dbConnection = new DMLFunctions();

		$result = $dbConnection -> executeQuery($query);

		if (isset($result) && !empty($result)) {
			if (mysql_num_rows($result) > 0) {

				$leaveObjs = $this->_buildObjArr($result);

				foreach ($leaveObjs as $leaveObj) {
					$leaveObj->setLeaveStatus(self::LEAVE_STATUS_LEAVE_TAKEN);
					$leaveObj->changeLeaveToTaken();
					$leaveObj->storeLeaveTaken();
				}

				return true;
			}
		}

		return false;
	 }

	 /**
	  * This is the workhorse function for takeLeave() function.
	  * This needs to be publicly accessible, still this is expected
	  * to be called from takeLeave()
	  *
	  * @return boolean
	  */
	 public function changeLeaveToTaken() {
	 	$sqlBuilder = new SQLQBuilder();

		$table = "`hs_hr_leave`";

		$changeFields[0] = "`leave_status`";
		$changeFields[1] = "`leave_length_hours`";

		$changeValues[0] = $this->getLeaveStatus();
		$changeValues[1] = "'".$this->getLeaveLengthHours()."'";

		$updateConditions[0] = "`leave_id` = ".$this->getLeaveId();

		$query = $sqlBuilder->simpleUpdate($table, $changeFields, $changeValues, $updateConditions);

		$dbConnection = new DMLFunctions();

		$result = $dbConnection->executeQuery($query);

		if (isset($result) && (mysql_affected_rows() > 0)) {
			return true;
		};

		return false;
	 }

	public function storeLeaveTaken() {

	 	$sqlBuilder = new SQLQBuilder();

	 	$updateTable = '`hs_hr_employee_leave_quota`';

	 	$updateFields[] = '`leave_taken`';

	 	$updateValues[] = "`leave_taken`+{$this->getLeaveLengthDays()}";

		$year = substr($this->getLeaveDate(), 0, 4); // To get the year from the date.
	 	$updateConditions[] = "`year` = {$year}";
	 	$updateConditions[] = "`leave_type_id` = '" . $this->getLeaveTypeId() . "'";
	 	$updateConditions[] = "`employee_id` = {$this->getEmployeeId()}";

		$query = $sqlBuilder->simpleUpdate($updateTable, $updateFields, $updateValues, $updateConditions, false);

		$dbConnection = new DMLFunctions();

		$result = $dbConnection->executeQuery($query);

		if (isset($result) && (mysql_affected_rows() > 0)) {
			return true;
		};

		return false;
	}

	/**
	 * This function will delete leave records for the given date. This will only for leave status other than 'taken'
	 * @param $date - string date for delete records
	 */
	public static function deleteLeavesForDate($date) {

		$sql_builder = new SQLQBuilder();

		$deleteTable = "`hs_hr_leave`";

		$deleteConditions[] = "`leave_date` = '" . $date . "'";
		$deleteConditions[] = "`leave_status` <> '" . self::LEAVE_STATUS_LEAVE_TAKEN . "'";

		$query = $sql_builder->simpleDelete($deleteTable, $deleteConditions);

		//echo $query."\n";

		$dbConnection = new DMLFunctions();

		$result = $dbConnection->executeQuery($query);
	}
}

?>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -