src/Controller/WarehouseController.php line 29

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Device;
  4. use App\Repository\DeviceRepository;
  5. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  6. use Symfony\Component\HttpFoundation\JsonResponse;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Symfony\Component\Routing\Annotation\Route;
  10. use Symfony\Component\Uid\Uuid;
  11. class WarehouseController extends AbstractController
  12. {
  13.     private DeviceRepository $deviceRepository;
  14.     /**
  15.      * @param DeviceRepository $deviceRepository
  16.      */
  17.     public function __construct(DeviceRepository $deviceRepository)
  18.     {
  19.         $this->deviceRepository $deviceRepository;
  20.     }
  21.     /**
  22.      * @Route("/warehouse", name="warehouse")
  23.      */
  24.     public function index(): Response
  25.     {
  26.         return $this->render('warehouse/index.html.twig', [
  27.             'controller_name' => 'WarehouseController',
  28.         ]);
  29.     }
  30.     /**
  31.      * @param Request $request
  32.      * @return JsonResponse
  33.      *
  34.      * @Route("/warehouse/search", path="warehouse_search")
  35.      */
  36.     public function search(Request $request): JsonResponse
  37.     {
  38.         $result $this->deviceRepository->searchBySerialNumber(
  39.             $request->query->get('search'''),
  40.             $request->query->get('filter''')
  41.         );
  42.         $results = [];
  43.         foreach ($result as $item) {
  44.             $response = [
  45.                 'id' => Uuid::fromBinary($item['id'])->toRfc4122(),
  46.                 'engineer' => !empty($item['engineer']) ? $item['engineer'] : '',
  47.                 'admissionDate' => !empty($item['hangover_date']) ? $item['hangover_date'] : '',
  48.                 'deviceModel' => sprintf('%s (Indeks: %s)'$item['name'], $item['indeks']),
  49.                 'serialNumber' => $item['serial_number'],
  50.                 'releaseDate' => $item['assembled_date'] ?? '',
  51.                 'notes' => $item['notes'] ?? ''
  52.             ];
  53.             if ($item['finished_type'] === Device::HANGOVER_FROM_WAREHOUSE) {
  54.                 $response['hangoverFromWarehouse'] = true;
  55.             }
  56.             $results[] = $response;
  57.         }
  58.         return JsonResponse::create($resultsJsonResponse::HTTP_OK);
  59.     }
  60.     /**
  61.      * @param Request $request
  62.      * @return JsonResponse
  63.      *
  64.      * @Route("/warehouse/findByNumber", path="warehouse_search")
  65.      */
  66.     public function findBySerialNumber(Request $request): JsonResponse
  67.     {
  68.         $result $this->deviceRepository->findOneBySerialNumber($request->query->get('search'''));
  69.         if ($result !== null) {
  70.             return JsonResponse::create([
  71.                 'id' => Uuid::fromBinary($result['id'])->toRfc4122(),
  72.                 'deviceModel' => sprintf('%s (Indeks: %s)'$result['name'], $result['indeks']),
  73.                 'serialNumber' => $result['serial_number'],
  74.             ], JsonResponse::HTTP_OK);
  75.         }
  76.         return JsonResponse::create([], JsonResponse::HTTP_OK);
  77.     }
  78.     /**
  79.      * @Route("/warehouse/details/{engineerId}", name="warehouse_details_engineer")
  80.      */
  81.     public function details(Request $request): Response
  82.     {
  83.         return $this->render('warehouse/details.html.twig', [
  84.             'devices' => $this->deviceRepository->warehouseDevicesByEngineer(
  85.                 Uuid::fromString($request->get('engineerId'))
  86.             )
  87.         ]);
  88.     }
  89.     /**
  90.      * @Route("/warehouse/return", name="warehouse_return_to_warehouse")
  91.      */
  92.     public function returnToWarehouse(Request $request): Response
  93.     {
  94.         $this->deviceRepository->returnToWarehouse(Uuid::fromRfc4122($request->get('deviceId')));
  95.         return $this->redirectToRoute('warehouse');
  96.     }
  97. }