workflow->can($disposition, 'upload_contract'); $isUploadInvoice = $this->workflow->can($disposition, 'upload_invoice'); // Create dummy form without fields to generate POST requests $form = $this->createForm(TeamerDispositionType::class, $disposition, [ 'enable_pickup' => $isUploadContract, 'enable_invoice_confirmation' => $isUploadInvoice, ]); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $uploadSession = $this->uploadHandler->getUploadSession(); if (0 < $uploadSession->getCount()) { if (true === $isUploadContract) { $this->uploadContract($disposition, $uploadSession); } if (true === $isUploadInvoice) { $this->uploadInvoice($disposition, $uploadSession); } } return $this->redirectToRoute('app_teamer_disposition_detail', [ 'uuid' => $disposition->getUuid(), 'r' => $request->query->get('r'), ]); } return $this->render('teamer/disposition/detail.html.twig', [ 'disposition' => $disposition, 'form' => $form->createView(), 'returnUrl' => $this->getReturnUrl($request, 'app_teamer_index'), ]); } private function uploadContract(Disposition $disposition, UploadSessionDto $uploadSession): void { if (null !== $existingUpload = $disposition->getDocumentByType(Upload::TYPE_CONTRACT)) { $this->entityManager->remove($existingUpload); } /** @var User $user */ $user = $this->getUser(); $upload = Upload::fromUploadDto( $uploadSession->getUploadsByType(Upload::TYPE_CONTRACT)->first(), $user, Upload::TYPE_CONTRACT ); $upload->setStatus(Upload::STATUS_NEW); $disposition->addDocument($upload); $this->workflow->apply($disposition, 'upload_contract'); $this->uploadHandler->moveUploadSessionFilesFromOrphanage(Upload::TYPE_CONTRACT, $uploadSession); $this->uploadHandler->removeUploadSessionUploadsByType(Upload::TYPE_CONTRACT); if (true === $this->featureManager->isActive('sanitize_uploads')) { $this->uploadHandler->ensurePdf($upload); } $this->entityManager->flush(); $this->addFlash('success', 'Der Honorarvertrag wurde hochgeladen'); $this->logger->info('Upload contract', [ 'user' => $user->getUserIdentifier(), ]); $this->eventDispatcher->dispatch(new DocumentUploadedEvent($upload), DocumentUploadedEvent::NAME); } private function uploadInvoice(Disposition $disposition, UploadSessionDto $uploadSession): void { if (null !== $existingUpload = $disposition->getDocumentByType(Upload::TYPE_INVOICE)) { $this->entityManager->remove($existingUpload); } /** @var User $user */ $user = $this->getUser(); $upload = Upload::fromUploadDto( $uploadSession->getUploadsByType(Upload::TYPE_INVOICE)->first(), $user, Upload::TYPE_INVOICE ); $upload->setStatus(Upload::STATUS_NEW); $disposition->addDocument($upload); $this->workflow->apply($disposition, 'upload_invoice'); $this->uploadHandler->moveUploadSessionFilesFromOrphanage(Upload::TYPE_INVOICE, $uploadSession); $this->uploadHandler->removeUploadSessionUploadsByType(Upload::TYPE_INVOICE); if (true === $this->featureManager->isActive('sanitize_uploads')) { $this->uploadHandler->ensurePdf($upload); } $this->entityManager->flush(); $this->addFlash('success', 'Die Honornote wurde hochgeladen'); $this->logger->info('Upload invoice', [ 'user' => $user->getUserIdentifier(), ]); $this->eventDispatcher->dispatch(new DocumentUploadedEvent($upload), DocumentUploadedEvent::NAME); } }