/** ------------------------- * Assign dto->drivingAssertions to dto->shifts if empty driving pools are * available. Otherwise do nothing. * * @param DispositionResourcesDTO $dto * @return mixed * @throws \Exception */ public function assignAssertionsToDrivingPools(DispositionResourcesDTO $dto) { if ($dto->countShifts() !== $dto->countDrivingAssertions()) { throw new \Exception('assignAssertionsToDrivingPools: ' . 'Unbalanced arrays: shifts(' . $dto->countShifts() . '), ' . 'assertions(' . $dto->countDrivingAssertions() . ')'); } $success = false; /** @var Shift $shift */ foreach ($dto->getShifts() as $idx => $shift) { /** @var DrivingAssertion $drivingAssertion */ $drivingAssertion = $dto->getDrivingAssertions()->get($idx); /** @var DrivingPool $drivingPool */ foreach ($shift->getDrivingPools() as $drivingPool) { if (!$drivingPool->hasAssociatedDriver()) { /* assign driving assertion to empty driving pool */ $drivingAssertion->assignDrivingPool($drivingPool); $success = true; break; // assertion-pool is a one to one association } } } return $success; }