/**
  * @param RepeatedDrivingAssertionPlan $assertionPlan
  * @return RepeatedDrivingAssertionRegisterDTO
  */
 public function toRepeatedRegisterDTO(RepeatedDrivingAssertionPlan $assertionPlan)
 {
     $assertionDTO = new RepeatedDrivingAssertionRegisterDTO();
     $assertionDTO->id = $assertionPlan->getId();
     $assertionDTO->subject = $assertionPlan->getSubject();
     $assertionDTO->memo = $assertionPlan->getMemo();
     $assertionDTO->anchorDate = $assertionPlan->getAnchorDate();
     $assertionDTO->endDate = $assertionPlan->getEndingDate() != DateTimeService::getMaxDateTime() ? $assertionPlan->getEndingDate() : null;
     $assertionDTO->frequency = $assertionPlan->getFrequency();
     $assertionDTO->withHolidays = $assertionPlan->getWithHolidays();
     if ($assertionDTO->frequency === 'weekly') {
         /** @var RepeatedWeeklyDrivingAssertion $weeklyAssertion */
         foreach ($assertionPlan->getRepeatedDrivingAssertions() as $weeklyAssertion) {
             $assertionDTO->weeklyDaysSelector[] = WeekdayService::$numericToWeekdayConverter[$weeklyAssertion->getWeekday()];
             $assertionDTO->weeklyShiftSelections->add($this->createShiftSelectionDTO('day', WeekdayService::$numericToWeekdayConverter[$weeklyAssertion->getWeekday()], $weeklyAssertion->getShiftTypes()->toArray()));
         }
     } else {
         if ($assertionDTO->frequency === 'monthly') {
             /** @var RepeatedMonthlyDrivingAssertion $monthlyAssertion */
             foreach ($assertionPlan->getRepeatedDrivingAssertions() as $monthlyAssertion) {
                 if ($monthlyAssertion->getRelativeWeekAsText() === 'first') {
                     $assertionDTO->monthlyFirstWeeklySelector[] = $monthlyAssertion->getWeekdayAsText();
                 } else {
                     if ($monthlyAssertion->getRelativeWeekAsText() === 'second') {
                         $assertionDTO->monthlySecondWeeklySelector[] = $monthlyAssertion->getWeekdayAsText();
                     } else {
                         if ($monthlyAssertion->getRelativeWeekAsText() === 'third') {
                             $assertionDTO->monthlyThirdWeeklySelector[] = $monthlyAssertion->getWeekdayAsText();
                         } else {
                             if ($monthlyAssertion->getRelativeWeekAsText() === 'fourth') {
                                 $assertionDTO->monthlyFourthWeeklySelector[] = $monthlyAssertion->getWeekdayAsText();
                             } else {
                                 if ($monthlyAssertion->getRelativeWeekAsText() === 'last') {
                                     $assertionDTO->monthlyLastWeeklySelector[] = $monthlyAssertion->getWeekdayAsText();
                                 }
                             }
                         }
                     }
                 }
                 $assertionDTO->monthlyShiftSelections->add($this->createShiftSelectionDTO($monthlyAssertion->getRelativeWeekAsText(), $monthlyAssertion->getWeekdayAsText(), $monthlyAssertion->getShiftTypes()->toArray()));
             }
         } else {
             // todo frequency === 'unique'
         }
     }
     return $assertionDTO;
 }