<?php
namespace App\Controller;
use App\Entity\Device;
use App\Repository\DeviceRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Uid\Uuid;
class WarehouseController extends AbstractController
{
private DeviceRepository $deviceRepository;
/**
* @param DeviceRepository $deviceRepository
*/
public function __construct(DeviceRepository $deviceRepository)
{
$this->deviceRepository = $deviceRepository;
}
/**
* @Route("/warehouse", name="warehouse")
*/
public function index(): Response
{
return $this->render('warehouse/index.html.twig', [
'controller_name' => 'WarehouseController',
]);
}
/**
* @param Request $request
* @return JsonResponse
*
* @Route("/warehouse/search", path="warehouse_search")
*/
public function search(Request $request): JsonResponse
{
$result = $this->deviceRepository->searchBySerialNumber(
$request->query->get('search', ''),
$request->query->get('filter', '')
);
$results = [];
foreach ($result as $item) {
$response = [
'id' => Uuid::fromBinary($item['id'])->toRfc4122(),
'engineer' => !empty($item['engineer']) ? $item['engineer'] : '',
'admissionDate' => !empty($item['hangover_date']) ? $item['hangover_date'] : '',
'deviceModel' => sprintf('%s (Indeks: %s)', $item['name'], $item['indeks']),
'serialNumber' => $item['serial_number'],
'releaseDate' => $item['assembled_date'] ?? '',
'notes' => $item['notes'] ?? ''
];
if ($item['finished_type'] === Device::HANGOVER_FROM_WAREHOUSE) {
$response['hangoverFromWarehouse'] = true;
}
$results[] = $response;
}
return JsonResponse::create($results, JsonResponse::HTTP_OK);
}
/**
* @param Request $request
* @return JsonResponse
*
* @Route("/warehouse/findByNumber", path="warehouse_search")
*/
public function findBySerialNumber(Request $request): JsonResponse
{
$result = $this->deviceRepository->findOneBySerialNumber($request->query->get('search', ''));
if ($result !== null) {
return JsonResponse::create([
'id' => Uuid::fromBinary($result['id'])->toRfc4122(),
'deviceModel' => sprintf('%s (Indeks: %s)', $result['name'], $result['indeks']),
'serialNumber' => $result['serial_number'],
], JsonResponse::HTTP_OK);
}
return JsonResponse::create([], JsonResponse::HTTP_OK);
}
/**
* @Route("/warehouse/details/{engineerId}", name="warehouse_details_engineer")
*/
public function details(Request $request): Response
{
return $this->render('warehouse/details.html.twig', [
'devices' => $this->deviceRepository->warehouseDevicesByEngineer(
Uuid::fromString($request->get('engineerId'))
)
]);
}
/**
* @Route("/warehouse/return", name="warehouse_return_to_warehouse")
*/
public function returnToWarehouse(Request $request): Response
{
$this->deviceRepository->returnToWarehouse(Uuid::fromRfc4122($request->get('deviceId')));
return $this->redirectToRoute('warehouse');
}
}