src/UI/Admin/Controller/OnboardingUserController.php line 22

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\UI\Admin\Controller;
  4. use App\Application\OnboardingUser\Command\RefreshOnboardingUserStatus\RefreshOnboardingUserStatusCommand;
  5. use App\Infrastructure\OnboardingUser\BankXs\Exception\BankXsOnboardingException;
  6. use App\Infrastructure\Shared\Bus\Command\CommandBusInterface;
  7. use App\UI\Admin\Datatable\OnboardingUserDatatable;
  8. use App\UI\Admin\Form\Type\OnboardingUser\OnboardingUserCreateType;
  9. use App\UI\Shared\Controller\AbstractController;
  10. use Sg\DatatablesBundle\Response\DatatableResponse;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use Symfony\Component\Routing\Annotation\Route;
  14. #[Route('/onboarding-users')]
  15. class OnboardingUserController extends AbstractController
  16. {
  17.     #[Route(path: '/', name: 'admin_onboarding_users')]
  18.     public function index(
  19.         Request $request,
  20.         OnboardingUserDatatable $datatable,
  21.         DatatableResponse $datatableResponse
  22.     ): Response {
  23.         $isAjax = $request->isXmlHttpRequest();
  24.         $datatable->buildDatatable();
  25.         if ($isAjax) {
  26.             $datatableResponse->setDatatable($datatable);
  27.             $datatableResponse->getDatatableQueryBuilder();
  28.             return $datatableResponse->getResponse();
  29.         }
  30.         return $this->render('admin/onboarding_user/index.html.twig', [
  31.             'datatable' => $datatable,
  32.         ]);
  33.     }
  34.     #[Route(path: '/create', name: 'admin_onboarding_users_create')]
  35.     public function create(Request $request, CommandBusInterface $commandBus): Response
  36.     {
  37.         $form = $this->createForm(OnboardingUserCreateType::class, null, [
  38.             'action' => $this->generateUrl('admin_onboarding_users_create'),
  39.         ]);
  40.         $form->handleRequest($request);
  41.         if ($form->isSubmitted()) {
  42.             if (!$form->isValid() && $request->isXmlHttpRequest()) {
  43.                 return $this->createFormErrorsJsonResponse($form);
  44.             }
  45.             try {
  46.                 $uiUrlRedirect = $commandBus->dispatch($form->getData());
  47.             } catch (BankXsOnboardingException $exception) {
  48.                 return $this->createErrorJsonResponse('Unable to create the onboarding user. Please try again.');
  49.             }
  50.             return $this->json(['redirectUrl' => $uiUrlRedirect]);
  51.         }
  52.         return $this->renderForm('admin/onboarding_user/create.html.twig', [
  53.             'form' => $form,
  54.         ]);
  55.     }
  56.     #[Route(path: '/{userId}/refresh-status', name: 'admin_onboarding_users_refresh_status')]
  57.     public function refreshStatus(string $userId, CommandBusInterface $commandBus): Response
  58.     {
  59.         try {
  60.             $status = $commandBus->dispatch(new RefreshOnboardingUserStatusCommand($userId));
  61.         } catch (BankXsOnboardingException $exception) {
  62.             return $this->createErrorJsonResponse('Unable to refresh the onboarding status. Please try again.');
  63.         }
  64.         return $this->json(['status' => $status]);
  65.     }
  66.     #[Route(path: '/onboarding/tab/close', name: 'admin_onboarding_tab_close')]
  67.     public function closeOnboardingTab(): Response
  68.     {
  69.         return new Response(
  70.             '<script>window.close();</script>',
  71.             Response::HTTP_OK,
  72.             ['Content-Type' => 'text/html']
  73.         );
  74.     }
  75. }