responseRepository->findOneByDisposition(QuestionnaireCatalog::TEAMER_ESCORT, $disposition); if (true === $response?->isSubmitted()) { return $this->redirectToRoute('app_teamer_questionnaire_detail', ['uuid' => $disposition->getUuid()]); } $definition = $this->catalog->get(QuestionnaireCatalog::TEAMER_ESCORT); $form = $this->createForm(QuestionnaireType::class, $response?->getAnswers() ?? [], [ 'definition' => $definition, ]); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { if (null === $response) { $response = QuestionnaireResponse::forDisposition($definition, $disposition); $this->entityManager->persist($response); } $context = DispositionContext::build($disposition); $final = QuestionnaireType::isFinal($form); if (true === $final) { $response->submit($definition, $form->getData(), $context, new \DateTimeImmutable()); } else { $response->saveDraft($form->getData(), $context); } $this->entityManager->flush(); $this->logger->info($final ? 'Submit questionnaire' : 'Save questionnaire draft', [ 'questionnaire' => $response->getQuestionnaire(), 'questionnaire_response_id' => $response->getId(), 'disposition_id' => $disposition->getId(), 'teamer_id' => $disposition->getTeamer()->getId(), ]); if (true === $final) { $this->addFlash('success', 'Danke! Dein Fragebogen wurde abgeschickt.'); return $this->redirectToRoute('app_teamer_questionnaire_detail', ['uuid' => $disposition->getUuid()]); } $this->addFlash('success', 'Dein Entwurf wurde gespeichert.'); return $this->redirectToRoute('app_teamer_questionnaire_edit', ['uuid' => $disposition->getUuid()]); } return $this->render('teamer/questionnaire/edit.html.twig', [ 'disposition' => $disposition, 'definition' => $definition, 'response' => $response, 'form' => $form, ]); } }