Files
kupshop/bundles/External/FlexiBeeBundle/Controller/FlexiBeeController.php
2025-08-02 16:30:27 +02:00

76 lines
2.5 KiB
PHP

<?php
declare(strict_types=1);
namespace External\FlexiBeeBundle\Controller;
use External\FlexiBeeBundle\Exception\FlexiBeeException;
use External\FlexiBeeBundle\Synchronizers\OrderSynchronizer;
use External\FlexiBeeBundle\Util\FlexiBeeLocator;
use KupShop\AdminBundle\AdminRequiredControllerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Annotation\Route;
class FlexiBeeController extends AbstractController implements AdminRequiredControllerInterface
{
/**
* @Route("/_flexi/dump_order/{id_order}/")
* @Route("/_flexi/dump_order/{id_order}/{type}/", requirements={"type"="(create|realize)"})
*/
public function dumpOrder(OrderSynchronizer $orderSynchronizer, int $id_order, ?string $type = null): JsonResponse
{
try {
$order = \Order::get($id_order);
} catch (\Throwable $e) {
throw new NotFoundHttpException('Order not found');
}
switch ($type) {
case 'realize':
$data = [
'realize' => $orderSynchronizer->getOrderRealizeData($order),
'invoice' => $orderSynchronizer->getOrderInvoiceData($order),
];
break;
default:
$data = $orderSynchronizer->getOrderData($order);
}
return new JsonResponse(
$data
);
}
/**
* @Route("/_flexi/{type}/")
*/
public function syncType(FlexiBeeLocator $locator, string $type): JsonResponse
{
try {
$synchronizer = $locator->getServiceByType($type);
$synchronizer->sync();
} catch (FlexiBeeException $e) {
return new JsonResponse(['success' => false, 'message' => $e->getMessage()]);
}
return new JsonResponse(['success' => true, 'message' => sprintf('Synchronization of "%s" done', $type)]);
}
/**
* @Route("/_flexi/{type}/{id}/")
*/
public function syncSingleItem(FlexiBeeLocator $locator, string $type, int $id): JsonResponse
{
try {
$synchronizer = $locator->getServiceByType($type);
$synchronizer->syncSingleItem($id);
} catch (FlexiBeeException $e) {
return new JsonResponse(['success' => false, 'message' => $e->getMessage()]);
}
return new JsonResponse(['success' => true, 'message' => 'Single item synchronization completed']);
}
}