src/Controller/DealerController.php line 43

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Service\AssociatePartnerService;
  4. use App\Service\DashboardService;
  5. use App\Service\DealerService;
  6. use App\Service\DefaultService;
  7. use App\Service\EstimateService;
  8. use App\Service\SmsService;
  9. use App\Service\UserService;
  10. use Symfony\Bundle\FrameworkBundle\Console\Application;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\Console\Input\ArrayInput;
  13. use Symfony\Component\Console\Output\NullOutput;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use Symfony\Component\HttpKernel\KernelInterface;
  17. use Symfony\Component\Routing\Annotation\Route;
  18. class DealerController extends AbstractController
  19. {
  20.     private $kernel;
  21.     public function __construct(KernelInterface $kernel)
  22.     {
  23.         $this->kernel $kernel;
  24.     }
  25.     /**
  26.      * @Route("/", name="homepage")
  27.      */
  28.     public function dashIndex(): Response
  29.     {
  30.         return $this->redirect('/dealer');
  31.     }
  32.     /**
  33.      * @Route("/dealer", name="dealer_dashboard")
  34.      */
  35.     public function index(SmsService $smsService): Response
  36.     {
  37.         return $this->render('dealer/index.html.twig');
  38.     }
  39.     /**
  40.      * @Route("/backoffice", name="backoffice_dashboard")
  41.      */
  42.     public function backoffice(): Response
  43.     {
  44.         return $this->render('backoffice/index.html.twig');
  45.     }
  46.     /**
  47.      * @Route("/backoffice/api/invoice", name="backoffice_api_invoice", methods={"POST"})
  48.      */
  49.     public function backofficeApiInvoice(Request $requestDealerService $dealerService): Response
  50.     {
  51.         //salva i dati di fatturazione dell'utente backoffice
  52.         $data json_decode($request->getContent(), true);
  53.         $dealerService->saveBackofficeInvoiceData($data);
  54.         if($dealerService->hasErrors()){
  55.             return $this->JsonErrorResponse($dealerService->getErrorMessage());
  56.         }
  57.         return $this->JsonOkResponse();
  58.     }
  59.     /**
  60.      * @Route("/dealer/api/dashboard-report", name="dealer_api_dashboard_report", methods={"GET"})
  61.      */
  62.     public function dealerApiDashboardReport(DashboardService $dashboardService): Response
  63.     {
  64.         $report $dashboardService->dealerDashboardReport();
  65.         if ($dashboardService->hasErrors()) {
  66.             return $this->JsonErrorResponse($dashboardService->getErrorMessage());
  67.         }
  68.         return $this->JsonOkResponse($report);
  69.     }
  70.     /**
  71.      * @Route("/dealer/api/search-partner", name="dealer_api_search_partner", methods={"POST"})
  72.      */
  73.     public function dealerApiSearchPartner(Request $requestAssociatePartnerService $associatePartnerService): Response
  74.     {
  75.         $data json_decode($request->getContent(), true);
  76.         if (!isset($data['vatCode']) || !$data['vatCode']) {
  77.             return $this->JsonErrorResponse('La partita iva è un campo obbligatorio');
  78.         }
  79.         $partnerArray $associatePartnerService->searchPartnerByVatCodeOnOpenapi($data['vatCode']);
  80.         if ($associatePartnerService->hasErrors()) {
  81.             return $this->JsonErrorResponse($associatePartnerService->getErrorMessage());
  82.         }
  83.         return $this->JsonOkResponse($partnerArray);
  84.     }
  85.     /**
  86.      * @Route("/dealer/api/search-vehicle", name="dealer_api_search_vehicle", methods={"GET"})
  87.      */
  88.     public function dealerApiSearchVehicle(Request $requestDefaultService $defaultService): Response
  89.     {
  90.         $plate $request->query->get('plate');
  91.         $vin $request->query->get('vin');
  92.         if (!$plate && !$vin) {
  93.             return $this->JsonErrorResponse("Required params not found");
  94.         }
  95.         $vehicleFound $defaultService->importVehicleByField($plate$vin);
  96.         if ($defaultService->hasErrors()) {
  97.             return $this->JsonErrorResponse($defaultService->getErrorMessage());
  98.         }
  99.         return $this->JsonOkResponse($vehicleFound);
  100.     }
  101.     /**
  102.      * @Route("/dealer/api/create-multiple-estimate-partners", name="dealer_api_create_multiple_estimate_partners", methods={"POST"})
  103.      */
  104.     public function dealerApiCreateMultipleEstimatePartnerVehicle(Request $requestEstimateService $estimateService): Response
  105.     {
  106.         $data json_decode($request->getContent(), true);
  107.         $estimateService->createMultipleEstimatePartner($data);
  108.         if ($estimateService->hasErrors()) {
  109.             return $this->JsonErrorResponse($estimateService->getErrorMessage());
  110.         }
  111.         return $this->JsonOkResponse(true);
  112.     }
  113.     /**
  114.      * @Route("/dealer/upload_logo", name="dealer_upload_logo", methods={"POST"})
  115.      */
  116.     public function dealerUploadLogo(Request $requestUserService $userService): Response
  117.     {
  118.         $uploadFile $request->files->get('file');
  119.         $imageUrl $userService->uploadDealerLogo($uploadFile);
  120.         if ($userService->hasErrors()) {
  121.             return $this->JsonErrorResponse($userService->getErrorMessage());
  122.         }
  123.         return $this->JsonOkResponse([
  124.             'imageUrl' => $imageUrl,
  125.         ]);
  126.     }
  127.     /**
  128.      * @Route("/dealer/delete_logo", name="dealer_delete_logo", methods={"POST"})
  129.      */
  130.     public function dealerDeleteLogo(Request $requestUserService $userService): Response
  131.     {
  132.         $response = new Response();
  133.         $data json_decode($request->getContent(), true);
  134.         if (!isset($data['dealerId'])) {
  135.             $response->setStatusCode(500);
  136.             return $response;
  137.         }
  138.         $deleted $userService->deleteDealerLogo($data['dealerId']);
  139.         return $deleted == true $this->JsonOkResponse() : $this->JsonErrorResponse($deleted);
  140.     }
  141.     /**
  142.      * @Route("/dealer/api/create", name="dealer_api_create", methods={"POST"})
  143.      */
  144.     public function dealerApiCreate(Request $requestDealerService $dealerService): Response
  145.     {
  146.         //crea nuovo dealer
  147.         $data json_decode($request->getContent(), true);
  148.         $requiredFieldsErrors = [];
  149.         if (!isset($data['dealerCode']) || !$data['dealerCode']) {
  150.             $requiredFieldsErrors[] = 'Il codice dealer è un campo obbligatorio';
  151.         }
  152.         if (!isset($data['companyName']) || !$data['companyName']) {
  153.             $requiredFieldsErrors[] = 'La ragione sociale è un campo obbligatorio';
  154.         }
  155.         if (!isset($data['vatCode']) || !$data['vatCode']) {
  156.             $requiredFieldsErrors[] = 'La ragione sociale è un campo obbligatorio';
  157.         }
  158.         if (count($requiredFieldsErrors) > 0) {
  159.             return $this->JsonErrorResponse(implode(', '$requiredFieldsErrors));
  160.         }
  161.         $dealer $dealerService->createNewDealer($data);
  162.         if ($dealerService->hasErrors()) {
  163.             return $this->JsonErrorResponse($dealerService->getErrorMessage());
  164.         }
  165.         //lancia command per creare jobs e parti di default del nuovo dealer
  166.         $this->createDealerJobs($dealer->getId());
  167.         return $this->JsonOkResponse($dealer);
  168.     }
  169.     /**
  170.      * @Route("/dealer/api/vehicle-uploaded-images", name="dealer_api_vehicle_uploaded_images", methods={"POST"})
  171.      */
  172.     public function dealerApiVehicleUploadedImages(Request $requestDealerService $dealerService)
  173.     {
  174.         if (!$this->isGranted('ROLE_DEALER')) {
  175.             return $this->JsonUnauthorizedResponse();
  176.         }
  177.         $data json_decode($request->getContent(), true);
  178.         if (!isset($data['estimateId']) || !$data['estimateId']) {
  179.             $this->JsonErrorResponse('Required params missing');
  180.         }
  181.         $uploadedImages $dealerService->getVehicleUploadedImages($data['estimateId']);
  182.         if ($dealerService->hasErrors()) {
  183.             return $this->JsonErrorResponse($dealerService->getErrorMessage());
  184.         }
  185.         //struttura array per frontend
  186.         $imagesArr = [];
  187.         foreach ($uploadedImages as $image) {
  188.             $vehicleTag $image['tags']['vehicle'];
  189.             if (isset($image['tags']['vehicle-part'])) {
  190.                 $imagesArr[$vehicleTag[0]['tagReference']][$image['tags']['vehicle-part'][0]['tagReference']][] = $image;
  191.             } else {
  192.                 $imagesArr[$vehicleTag[0]['tagReference']][] = $image;
  193.             }
  194.         }
  195.         return $this->JsonOkResponse($imagesArr);
  196.     }
  197.     /**
  198.      * @Route("/delaer/api/upload-image", name="dealer_api_upload_image", methods={"POST"})
  199.      */
  200.     public function dealerApiUploadImage(Request $requestDealerService $dealerService)
  201.     {
  202.         if (!$this->isGranted('ROLE_DEALER')) {
  203.             return $this->JsonUnauthorizedResponse();
  204.         }
  205.         $estimateId $request->request->get('estimateId');
  206.         $vehicleId $request->request->get('vehicleId');
  207.         $vehiclePartId $request->request->get('vehiclePartId');
  208.         $uploadFiles $request->files->get('files');
  209.         $uploadedImagesList $dealerService->uploadVehicleImage($estimateId$vehicleId$vehiclePartId$uploadFiles'desktop');
  210.         if ($dealerService->hasErrors()) {
  211.             return $this->JsonErrorResponse($dealerService->getErrorMessage());
  212.         }
  213.         return $this->JsonOkResponse($uploadedImagesList);
  214.     }
  215.     /**
  216.      * @Route("/delaer/api/delete-image", name="dealer_api_delete_image", methods={"POST"})
  217.      */
  218.     public function dealerApiDeleteImage(Request $requestDealerService $dealerService)
  219.     {
  220.         if (!$this->isGranted('ROLE_DEALER')) {
  221.             return $this->JsonUnauthorizedResponse();
  222.         }
  223.         $data json_decode($request->getContent(), true);
  224.         if (!isset($data['imageId']) || !$data['imageId']) {
  225.             $this->JsonErrorResponse('Required params missing');
  226.         }
  227.         $dealerService->deleteUploadedImage($data['imageId']);
  228.         if ($dealerService->hasErrors()) {
  229.             return $this->JsonErrorResponse($dealerService->getErrorMessage());
  230.         }
  231.         return $this->JsonOkResponse([]);
  232.     }
  233.     /**
  234.      * @Route("/dealer/api/archive-user", name="dealer_api_archive_user", methods={"POST"})
  235.      */
  236.     public function dealerApiArchiveUser(Request $requestDealerService $dealerService): Response
  237.     {
  238.         if (!$this->isGranted('ROLE_DEALER_RESPONSIBLE')) {
  239.             return $this->JsonUnauthorizedResponse();
  240.         }
  241.         $data json_decode($request->getContent(), true);
  242.         if (!isset($data['userId']) || !$data['userId']) {
  243.             $this->JsonErrorResponse('Required params missing');
  244.         }
  245.         $dealerService->archiveUser($data['userId']);
  246.         if ($dealerService->hasErrors()) {
  247.             return $this->JsonErrorResponse($dealerService->getErrorMessage());
  248.         }
  249.         return $this->JsonOkResponse([]);
  250.     }
  251.     /**
  252.      * @Route("/dealer/api/warehouses", name="dealer_api_warehouses", methods={"GET"})
  253.      */
  254.     public function dealerApiWarehouses(Request $requestDefaultService $defaultService): Response
  255.     {
  256.         $warehouses $defaultService->getEnabledWarehouses();
  257.         $listArr = [];
  258.         if($warehouses){
  259.             foreach($warehouses as $item){
  260.                 $listArr[] = [
  261.                     'id' => $item->getId(),
  262.                     'name' => $item->getName(),
  263.                     'email' => $item->getEmail(),
  264.                 ];
  265.             }
  266.         }
  267.         return $this->JsonOkResponse($listArr);
  268.     }
  269.     private function createDealerJobs($dealerId)
  270.     {
  271.         $application = new Application($this->kernel);
  272.         $application->setAutoExit(false);
  273.         $input = new ArrayInput([
  274.             'command' => 'dealer:create-jobs',
  275.             'dealerId' => $dealerId,
  276.         ]);
  277.         // You can use NullOutput() if you don't need the output
  278.         //$output = new BufferedOutput();
  279.         $output = new NullOutput();
  280.         $application->run($input$output);
  281.         // return the output, don't use if you used NullOutput()
  282.         //$content = $output->fetch();
  283.         return true;
  284.     }
  285.     private function JsonOkResponse($data = [])
  286.     {
  287.         return new Response(json_encode(['result' => 'OK''data' => $data]));
  288.     }
  289.     private function JsonErrorResponse($errmsg)
  290.     {
  291.         $json json_encode(['result' => 'ERROR''errmsg' => $errmsg]);
  292.         $response = new Response($json);
  293.         $response->setStatusCode(500);
  294.         return $response;
  295.     }
  296.     private function JsonUnauthorizedResponse()
  297.     {
  298.         $json json_encode(['result' => 'ERROR''errmsg' => 'Unauthorized']);
  299.         $response = new Response($json);
  300.         $response->setStatusCode(401);
  301.         return $response;
  302.     }
  303. }