[ExtensionOf(tablestr(HcmWorker))] final class HcmWorkerTableNetwaysProcrementEnahancement_Extension { public static HcmPositionRecId getPrimaryPosition(HcmWorker _hcmWorker, utcdatetime _asOfDate = DateTimeUtil::utcNow()) { HcmPositionRecId positionRecId = 0; HcmPositionWorkerAssignment hcmPositionWorkerAssignment; HcmPositionWorkerAssignmentRecId hcmPositionWorkerAssignmentRecId; HcmWorkerRecId _workerRecId; _workerRecId=_hcmWorker.RecId; hcmPositionWorkerAssignmentRecId = HcmWorker::getPrimaryPositionAssignment(_hcmWorker); hcmPositionWorkerAssignment = HcmPositionWorkerAssignment::find(hcmPositionWorkerAssignmentRecId); if (hcmPositionWorkerAssignment) { positionRecId = hcmPositionWorkerAssignment.Position; } return positionRecId; } public static HcmPositionWorkerAssignmentRecId getPrimaryPositionAssignment(HcmWorker _hcmWorker,utcdatetime _asOfDate = DateTimeUtil::utcNow()) { HcmPositionRecId positionRecId = 0; HcmPositionWorkerAssignmentRecId positionWorkerAssignmentRecId = 0; HcmPositionWorkerAssignment hcmPositionWorkerAssignment; HcmPositionDuration hcmPositionDuration; boolean isValidPosition = true; HcmWorkerPrimaryPosition hcmWorkerPrimaryPosition; HcmWorkerRecId _workerRecId; _workerRecId=_hcmWorker.RecId; // check whether the worker has a primary position assignment select firstonly ValidTimeState(_asOfDate) PositionAssignment from hcmWorkerPrimaryPosition where hcmWorkerPrimaryPosition.Worker == _workerRecId exists join hcmPositionWorkerAssignment where hcmPositionWorkerAssignment.Worker == hcmWorkerPrimaryPosition.Worker && hcmPositionWorkerAssignment.RecId == hcmWorkerPrimaryPosition.PositionAssignment exists join hcmPositionDuration where hcmPositionDuration.Position == hcmPositionWorkerAssignment.Position; positionWorkerAssignmentRecId = hcmWorkerPrimaryPosition.PositionAssignment; if (positionWorkerAssignmentRecId == 0) { // no valid primary position existed for the worker, so retrieve the position // assignment for the worker in which the worker has the longest active seniority select ValidTimeState(_asOfDate) Position, RecId from hcmPositionWorkerAssignment order by ValidFrom asc where hcmPositionWorkerAssignment.Worker == _workerRecId exists join hcmPositionDuration where hcmPositionDuration.Position == hcmPositionWorkerAssignment.Position; positionWorkerAssignmentRecId = hcmPositionWorkerAssignment.RecId; } return positionWorkerAssignmentRecId; } public static OMDepartmentRecId getPrimaryDepartmentRecId(HcmWorker _hcmWorker,utcdatetime _asOfDate = DateTimeUtil::utcNow()) { HcmPositionRecId positionRecId; HcmPositionDetail positionDetail; HcmWorkerRecId _workerRecId; _workerRecId=_hcmWorker.RecId; // Determine the primary position of the worker. positionRecId = HcmWorker::getPrimaryPosition(_hcmWorker); if (positionRecId) { // Retrieve the corresponding position. positionDetail = HcmPositionDetail::findByPosition(positionRecId, _asOfDate); } return positionDetail.Department; } }