src/UI/Admin/Controller/SiteController.php line 37

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\UI\Admin\Controller;
  4. use App\Application\PaymentGatewayConfig\Command\EditPaymentGatewayConfig\EditPaymentGatewayConfigCommand;
  5. use App\Application\Site\Command\ActivateSite\ActivateSiteCommand;
  6. use App\Application\Site\Command\EditSite\EditSiteCommand;
  7. use App\Application\Site\Command\EditSiteBillingInformation\EditSiteBillingInformationCommand;
  8. use App\Application\Site\Command\RemoveSite\RemoveSiteCommand;
  9. use App\Domain\PaymentGateway\Model\IbanXSConfiguration;
  10. use App\Domain\PaymentGateway\Model\YapilyPayConfiguration;
  11. use App\Domain\PaymentGateway\Model\DimocoPayConfiguration;
  12. use App\Domain\PaymentGateway\Model\FinXPConfiguration;
  13. use App\Domain\Site\Model\Site;
  14. use App\Infrastructure\Shared\Bus\Command\CommandBusInterface;
  15. use App\UI\Admin\ActionStackFactory\SiteActionStackFactory;
  16. use App\UI\Admin\Datatable\SiteDatatable;
  17. use App\UI\Admin\Form\Type\PaymentGateway\PaymentGatewayConfigEditType;
  18. use App\UI\Admin\Form\Type\Site\SiteCreateType;
  19. use App\UI\Admin\Form\Type\Site\SiteEditBillingInformationType;
  20. use App\UI\Admin\Form\Type\Site\SiteEditIntegrationDataType;
  21. use App\UI\Admin\Form\Type\Site\SiteEditType;
  22. use App\UI\Shared\Controller\AbstractController;
  23. use App\UI\Shared\Status\BooleanStatus;
  24. use Sg\DatatablesBundle\Response\DatatableResponse;
  25. use Symfony\Component\HttpFoundation\Request;
  26. use Symfony\Component\HttpFoundation\Response;
  27. use Symfony\Component\Routing\Annotation\Route;
  28. use Symfony\Component\Serializer\SerializerInterface;
  29. #[Route('/sites')]
  30. class SiteController extends AbstractController
  31. {
  32.     #[Route(path: '/', name: 'admin_sites')]
  33.     public function index(
  34.         Request $request,
  35.         SiteDatatable $datatable,
  36.         DatatableResponse $datatableResponse
  37.     ): Response {
  38.         $isAjax = $request->isXmlHttpRequest();
  39.         $datatable->buildDatatable();
  40.         if ($isAjax) {
  41.             $datatableResponse->setDatatable($datatable);
  42.             $datatableResponse->getDatatableQueryBuilder();
  43.             return $datatableResponse->getResponse();
  44.         }
  45.         return $this->render('admin/site/index.html.twig', [
  46.             'datatable' => $datatable,
  47.         ]);
  48.     }
  49.     #[Route(path: '/create', name: 'admin_sites_create')]
  50.     public function create(Request $request, CommandBusInterface $commandBus): Response
  51.     {
  52.         return $this->handleForm(
  53.             $request,
  54.             $commandBus,
  55.             SiteCreateType::class,
  56.             null,
  57.             [],
  58.             'admin/site/create.html.twig',
  59.             [],
  60.             'admin_sites_edit'
  61.         );
  62.     }
  63.     #[Route(path: '/{id}/edit', name: 'admin_sites_edit')]
  64.     public function edit(Request $request, Site $site, CommandBusInterface $commandBus): Response
  65.     {
  66.         return $this->handleForm(
  67.             $request,
  68.             $commandBus,
  69.             SiteEditType::class,
  70.             new EditSiteCommand(
  71.                 (string) $site->getId(),
  72.                 $site->getName(),
  73.                 $site->getDescription(),
  74.                 (string) $site->getMerchant()->getId()
  75.             ),
  76.             [],
  77.             'admin/site/edit.html.twig',
  78.             [
  79.                 'site' => $site,
  80.             ],
  81.         );
  82.     }
  83.     #[Route(path: '/{id}/edit-billing-information', name: 'admin_sites_edit_billing_information')]
  84.     public function editBillingInformation(Request $request, Site $site, CommandBusInterface $commandBus): Response
  85.     {
  86.         return $this->handleForm(
  87.             $request,
  88.             $commandBus,
  89.             SiteEditBillingInformationType::class,
  90.             new EditSiteBillingInformationCommand(
  91.                 (string) $site->getId(),
  92.                 $site->getBillingInformation()->getName(),
  93.                 $site->getBillingInformation()->getCountry(),
  94.                 $site->getBillingInformation()->getCity(),
  95.                 $site->getBillingInformation()->getStreet(),
  96.                 $site->getBillingInformation()->getStreetNumber(),
  97.                 $site->getBillingInformation()->getPostalCode(),
  98.                 $site->getBillingInformation()->getIban(),
  99.                 $site->getBillingInformation()->getIsBankWebhook()
  100.             ),
  101.             [
  102.                 'action' => $this->generateUrl('admin_sites_edit_billing_information', ['id' => $site->getId()]),
  103.             ],
  104.             'admin/site/_edit_billing_information.html.twig',
  105.             [
  106.                 'site' => $site,
  107.             ],
  108.         );
  109.     }
  110.     #[Route(path: '/{id}/edit-payment-gateway-config', name: 'admin_sites_edit_payment_gateway_config')]
  111.     public function editPaymentGatewayConfig(
  112.         Request $request,
  113.         Site $site,
  114.         CommandBusInterface $commandBus,
  115.         SerializerInterface $serializer
  116.     ): Response {
  117.         $paymentGatewayConfig = $site->getPaymentGatewayConfig();
  118.         $factoryName = $paymentGatewayConfig->getFactoryName();
  119.         $configArray = $paymentGatewayConfig->getConfig();
  120.         $config = null;
  121.         if (is_array($configArray) && count($configArray) > 0) {
  122.             // choose correct DTO/domain config class based on factory name
  123.             switch ($factoryName) {
  124.                 case 'iban_xs':
  125.                     $targetClass = IbanXSConfiguration::class;
  126.                     break;
  127.                 case 'yapily_pay':
  128.                     $targetClass = YapilyPayConfiguration::class;
  129.                     break;
  130.                 case 'dimoco_pay':
  131.                     $targetClass = DimocoPayConfiguration::class;
  132.                     break;
  133.                 case 'fin_xp':
  134.                     $targetClass = FinXPConfiguration::class;
  135.                     break;
  136.                 default:
  137.                     $targetClass = null;
  138.             }
  139.             if ($factoryName === 'fin_xp') {
  140.                 if (isset($configArray['channel_id']) && !isset($configArray['finxp_channel_id'])) {
  141.                     $configArray['finxp_channel_id'] = $configArray['channel_id'];
  142.                 }
  143.                 if (isset($configArray['tenant_id']) && !isset($configArray['finxp_tenant_id'])) {
  144.                     $configArray['finxp_tenant_id'] = $configArray['tenant_id'];
  145.                 }
  146.                 if (isset($configArray['client_id']) && !isset($configArray['finxp_client_id'])) {
  147.                     $configArray['finxp_client_id'] = $configArray['client_id'];
  148.                 }
  149.                 if (isset($configArray['client_secret']) && !isset($configArray['finxp_client_secret'])) {
  150.                     $configArray['finxp_client_secret'] = $configArray['client_secret'];
  151.                 }
  152.                 unset($configArray['finxp_sandbox']);
  153.             }
  154.             if ($targetClass) {
  155.                 $config = $serializer->deserialize(json_encode($configArray), $targetClass, 'json');
  156.             }
  157.         }
  158.         return $this->handleForm(
  159.             $request,
  160.             $commandBus,
  161.             PaymentGatewayConfigEditType::class,
  162.             new EditPaymentGatewayConfigCommand(
  163.                 (string) $paymentGatewayConfig->getId(),
  164.                 $paymentGatewayConfig->getFactoryName(),
  165.                 $config
  166.             ),
  167.             [
  168.                 'action' => $this->generateUrl('admin_sites_edit_payment_gateway_config', ['id' => $site->getId()]),
  169.             ],
  170.             'admin/site/_edit_payment_gateway_config.html.twig',
  171.             [
  172.                 'site' => $site,
  173.             ],
  174.         );
  175.     }
  176.     #[Route(path: '/{id}/edit-integration-data', name: 'admin_sites_edit_integration_data')]
  177.     public function editIntegrationData(Site $site): Response
  178.     {
  179.         $form = $this->createForm(SiteEditIntegrationDataType::class, [
  180.             'id' => $site->getId(),
  181.             'password' => $site->getPassword(),
  182.             'secret' => $site->getSecret(),
  183.         ], [
  184.             'action' => $this->generateUrl('admin_sites_edit_integration_data', [
  185.                 'id' => $site->getId(),
  186.             ]),
  187.         ]);
  188.         return $this->render('admin/site/_edit_integration_data.html.twig', [
  189.             'form' => $form->createView(),
  190.             'site' => $site,
  191.         ]);
  192.     }
  193.     #[Route(path: '/{id}/status', name: 'admin_sites_status')]
  194.     public function status(
  195.         Site $site,
  196.         SiteActionStackFactory $siteActionStackFactory
  197.     ): Response {
  198.         return $this->render('admin/site/status.html.twig', [
  199.             'site' => $site,
  200.             'status' => BooleanStatus::getHtmlStatus($site->isActive()),
  201.             'actionStack' => $siteActionStackFactory->create($site),
  202.         ]);
  203.     }
  204.     #[Route(path: '/{id}/remove', name: 'admin_sites_remove')]
  205.     public function remove(Site $site, CommandBusInterface $commandBus): Response
  206.     {
  207.         try {
  208.             $commandBus->dispatch(new RemoveSiteCommand((string) $site->getId()));
  209.         } catch (\Exception $exception) {
  210.             return $this->createErrorJsonResponse($exception->getMessage());
  211.         }
  212.         return new Response(null, Response::HTTP_NO_CONTENT);
  213.     }
  214.     #[Route(path: '/{id}/restore', name: 'admin_sites_restore')]
  215.     public function restore(Site $site, CommandBusInterface $commandBus): Response
  216.     {
  217.         try {
  218.             $commandBus->dispatch(new ActivateSiteCommand((string) $site->getId()));
  219.         } catch (\Exception $exception) {
  220.             return $this->createErrorJsonResponse($exception->getMessage());
  221.         }
  222.         return new Response(null, Response::HTTP_NO_CONTENT);
  223.     }
  224. }