/** -------------------------
  * 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();
                 }
             }
         }
     }
 }
 /**
  * @param WorkingDay $workingDay
  * @param $workingMonthId
  * @return MonthlyPlanEditDTO
  */
 public function workingDayToEditDTO(WorkingDay $workingDay, $workingMonthId)
 {
     $dto = new MonthlyPlanEditDTO();
     $dto->workingMonthId = $workingMonthId;
     $dto->workingDayId = $workingDay->getId();
     $dto->workingMonthDateString = $workingDay->getWorkingMonth()->getDateString();
     $dto->workingDayWeekdayString = $workingDay->getWeekDayAsString();
     $dto->workingDayDateString = $workingDay->getDateString();
     $dto->workingDayDate = $workingDay->getDate();
     $today = new \DateTime();
     $today->setTime(0, 0, 0);
     $dto->editMode = $workingDay->getDate() < $today ? 'show' : 'edit';
     $vehicleRepo = $this->container->get('vehicle_repository');
     $vehicles = $vehicleRepo->findAllNotDeleted();
     $dto->allVehicles = $this->workingDayToEditVehiclesDTO($vehicles, $workingDay->getDate());
     $shifts = $workingDay->getShiftsOrderedByStartTime();
     /** @var Shift $shift */
     foreach ($shifts as $shift) {
         $shiftDTO = new MonthlyPlanEditShiftDTO();
         $shiftDTO->shiftId = $shift->getId();
         $shiftDTO->shiftDisplayName = $shift->getShiftType()->getName();
         $shiftDTO->shiftTitle = $this->getShiftTitle($shift->getStatusString(), $shift->getManuallyEdited());
         $shiftDTO->iconColor = $this->getMonthlyPlanGetShiftDTO($shift)->iconColor;
         $pools = $shift->getDrivingPoolsAsArray();
         foreach ($pools as $pool) {
             $shiftDTO->assignedPools[] = $this->getAssignedPools($pool, $dto->allVehicles);
         }
         $shiftDTO->spareVehicles = $this->getSpareVehicles($shift, $dto->allVehicles);
         $shiftDTO->spareDrivers = $this->getSpareDrivers($shift);
         $dto->shifts[] = $shiftDTO;
     }
     return $dto;
 }