createForm(DocumentCheckType::class, $formData, ['document_type' => $document->getType()]); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { switch ($formData->getStatus()) { case Upload::STATUS_CHECKED: $this->confirmDocument($document, 'confirm_contract', Upload::STATUS_CHECKED); break; case Upload::STATUS_PAID: $this->confirmDocument($document, 'confirm_invoice', Upload::STATUS_PAID); break; case Upload::STATUS_REJECTED: $this->rejectDocument($document, $formData->getComment()); $this->eventDispatcher->dispatch(new DocumentRejectedEvent($formData), DocumentRejectedEvent::NAME); default: $document ->setStatus($formData->getStatus()) ->setComment($formData->getComment()) ; $this->entityManager->flush(); $this->addFlash('success', 'Der Status wurde aktualisiert'); $this->logger->info('Update document status', [ 'document_id' => $document->getId(), 'document_filename' => $document->getOriginalFilename(), 'owner' => $document->getOwner()->getFullName(), 'status' => $formData->getStatus(), ]); } return new HxRedirectResponse($this->generateUrl('app_admin_document_index')); } return $this->render('admin/document/modal_check.html.twig', [ 'document' => $document, 'form' => $form->createView(), ]); } private function rejectDocument(Upload $document, string $comment = null): void { $document ->setStatus(Upload::STATUS_REJECTED) ->setComment($comment) ; $this->addFlash('success', 'Das Dokument wurde abgelehnt'); $this->logger->info('Reject document', [ 'document_id' => $document->getId(), 'document_filename' => $document->getOriginalFilename(), 'owner' => $document->getOwner()->getFullName(), ]); $transition = Upload::TYPE_CONTRACT === $document->getType() ? 'reject_contract' : 'reject_invoice'; $this->workflow->apply($document->getDisposition(), $transition); $this->entityManager->flush(); } private function confirmDocument(Upload $document, string $transition, string $status): void { $document->setStatus($status); $this->addFlash('success', 'Das Dokument wurde bestÃĪtigt'); $this->logger->info('Confirm document', [ 'document_id' => $document->getId(), 'document_filename' => $document->getOriginalFilename(), 'owner' => $document->getOwner()->getFullName(), ]); if (true === $this->workflow->can($document->getDisposition(), $transition)) { $this->workflow->apply($document->getDisposition(), $transition); } else { $blockers = $this->workflow->buildTransitionBlockerList($document->getDisposition(), $transition); foreach ($blockers as $blocker) { $this->addFlash('error', $blocker->getMessage()); } } $this->entityManager->flush(); } }