<?php
namespace App\Controller;
use App\Entity\DisassembledDevice;
use App\Entity\Order;
use App\Repository\DeviceModelRepository;
use App\Repository\DeviceRepository;
use App\Repository\DisassemledDeviceRepository;
use App\Repository\OrderRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Uid\Uuid;
class NewOrderController extends AbstractController
{
private DeviceModelRepository $deviceModelRepository;
private OrderRepository $orderRepository;
private DisassemledDeviceRepository $dissasemledDeviceRepository;
private DeviceRepository $deviceRepository;
/**
* @param DeviceModelRepository $deviceModelRepository
*/
public function __construct(
DeviceModelRepository $deviceModelRepository,
OrderRepository $orderRepository,
DisassemledDeviceRepository $disassemledDeviceRepository,
DeviceRepository $deviceRepository
) {
$this->deviceModelRepository = $deviceModelRepository;
$this->orderRepository = $orderRepository;
$this->dissasemledDeviceRepository = $disassemledDeviceRepository;
$this->deviceRepository = $deviceRepository;
}
/**
* @Route("/new/order", name="new_order")
*/
public function index(Request $request): Response
{
if ($request->getMethod() === 'POST') {
$form = $request->request->get('form');
$orderDate = new \DateTimeImmutable($form['orderDate']);
$orderAddress = $form['orderAddress'];
$orderNumber = $form['orderNumber'];
$disassembledDeviceTypeIds = $form['disassembledDeviceTypeId'] ?? [];
$disassembledSerialNumbers = $form['disassembledSerialNumber'] ?? [];
$assembledIds = $form['assembledId'] ?? [];
$disassembledDevices = [];
foreach ($disassembledDeviceTypeIds as $key => $disassembledDeviceTypeId) {
$deviceModel = $this->deviceModelRepository->findOneById(Uuid::fromString($disassembledDeviceTypeId));
$disassembledDevices[] = [
'name' => $deviceModel->getName(),
'indeks' => $deviceModel->getIndeks(),
'serialNumber' => $disassembledSerialNumbers[$key]
];
$this->dissasemledDeviceRepository->save(
new DisassembledDevice(
Uuid::fromString($disassembledDeviceTypeId),
$disassembledSerialNumbers[$key],
$orderDate
)
);
}
$assembled = [];
$engineer = '';
foreach ($assembledIds as $assembledId) {
$this->deviceRepository->assembled(
Uuid::fromString($assembledId),
$orderDate,
$orderNumber
);
$device = $this->deviceRepository->findDeviceById(Uuid::fromString($assembledId));
if (empty($engineer) && !empty($device['engineer'])) {
$engineer = $device['engineer'];
}
$assembled[] = [
'name' => $device['name'],
'indeks' => $device['indeks'],
'serialNumber' => $device['serial_number']
];
}
$order = new Order();
$order->setOrderDate($orderDate);
$order->setAddress(mb_strtoupper($orderAddress));
$order->setOrderNumber(mb_strtoupper($orderNumber));
$order->setDisassembled($disassembledDevices);
$order->setAssembled($assembled);
$order->setEngineer($engineer);
$order->setCreatedBy($this->getUser()->getFullName());
$this->orderRepository->save($order);
}
return $this->render('new_order/index.html.twig', [
'workday' => (new \DateTime('-1 weekday'))->format('Y-m-d'),
'devicesModel' => $this->deviceModelRepository->findAll()
]);
}
}