/** ------------------------- * Create driving assertions for a working day * Called for a new repeated driving assertion plan or new working day * * @param RepeatedDrivingAssertionPlan$repeatedDrivingAssertionPlan * @param WorkingDay $workingDay * @param array $errors */ protected function handleRepeatedDrivingAssertionsForWorkingDay($repeatedDrivingAssertionPlan, $workingDay, &$errors) { /** @var DrivingAssertionRepository $drivingAssertionRepository */ $drivingAssertionRepository = $this->container->get('drivingassertion_repository'); $driver = $repeatedDrivingAssertionPlan->getDriver(); $shifts = $workingDay->getShifts(); /** @var Shift $shift */ foreach ($shifts as $shift) { if ($this->matching($shift, $repeatedDrivingAssertionPlan)) { if (!$driver->hasDrivingAssertionForShift($shift)) { $drivingAssertion = DrivingAssertion::registerDrivingAssertion($driver, $shift); $drivingAssertion->assignedRepeatedDrivingAssertionPlan($repeatedDrivingAssertionPlan); $repeatedDrivingAssertionPlan->assignDrivingAssertion($drivingAssertion); $drivingAssertionRepository->store($drivingAssertion); } else { $daPlanId = $this->getPlanIdFor($driver, $shift); if (is_null($repeatedDrivingAssertionPlan->getId()) or $daPlanId != $repeatedDrivingAssertionPlan->getId()) { $errors[] = $this->translate('repeateddrivingassertion.error.occupied') . " " . $workingDay->getDate()->format('d.m.Y') . " " . $this->translate($workingDay->getWeekDayAsString()) . " " . $shift->getShiftType()->getName(); } } } } }
/** * Set all pool DTOs for the current date * * @param DailyPlanEditDTO $dto * @param WorkingDay $workingDay * @param string $errorMessage * @return array DailyPlanEditPoolDTO[] */ private function setPoolDTOs(DailyPlanEditDTO $dto, WorkingDay $workingDay, &$errorMessage) { $dto->pools = array(); $tr = $this->container->get('translator'); /** @var Shift $shift */ foreach ($workingDay->getShifts() as $shift) { /** @var DrivingPool $drivingPool */ foreach ($shift->getDrivingPools() as $drivingPool) { $poolDTO = new DailyPlanEditPoolDTO(); $errors = array(); $poolDTO->hasErrorMessage = self::NO; $poolDTO->poolId = $drivingPool->getId(); $vehicle = $drivingPool->getVehicle(); if (null === $vehicle) { $errorMessage .= "<p>" . $tr->trans('dailyplan.error.no.vehicle') . " (" . $shift->getShiftType()->getName() . ")" . "</p>"; continue; // show available vehicles only } $poolDTO->vehicleId = $vehicle->getId(); /** @var Driver $driver */ $driver = $drivingPool->getDriver(); $poolDTO->title = $shift->getShiftType()->getName() . ', ' . $tr->trans('dailyplan.field.poolId') . $drivingPool->getId() . '
' . $tr->trans('dailyplan.field.driver') . ': '; if (null !== $driver) { $poolDTO->driverId = $driver->getId(); $poolDTO->title .= $driver->getNameStringForContact(); } else { // no driver assigned $poolDTO->driverId = 0; $poolDTO->title .= $tr->trans('dailyplan.warning.no.driver'); if ($drivingPool->hasAssociatedDrivingMissions()) { $errors[] = $tr->trans('dailyplan.error.no.driver'); } } if ($shift->getManuallyEdited()) { // manual edited shift may contain errors ... $poolDTO->hasErrorMessage = self::YES; $poolDTO->title .= '
' . $tr->trans('dailyplan.error.beware') . ":" . '
' . $tr->trans('dailyplam.error.manual.shift'); } $start = $drivingPool->getShift()->getStart(); $poolDTO->shiftBeginMin = $this->dateTimeService->getMinutesOfDay($this->dateTimeService->convertToLocalDateTime($start)); $end = $drivingPool->getShift()->getEnd(); $poolDTO->shiftEndMin = $this->dateTimeService->getMinutesOfDay($this->dateTimeService->convertToLocalDateTime($end)); $poolDTO->isManual = self::NO; // todo shared-ride code here ... if (count($errors) > 0) { $poolDTO->hasErrorMessage = self::YES; $poolDTO->title = $this->setErrorMessagesInTitle($errors, $poolDTO->title); } $dto->pools[] = $poolDTO; } } }