<?php
namespace App\Controller;
use App\Entity\Delivery;
use App\Entity\Device;
use App\Repository\DeliveryRepository;
use App\Repository\DeviceModelRepository;
use App\Repository\DeviceRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Uid\Uuid;
class AcceptanceOfDeliveryController extends AbstractController
{
private DeviceModelRepository $deviceModelRepository;
private DeliveryRepository $deliveryRepository;
private DeviceRepository $deviceRepository;
/**
* @param DeviceModelRepository $deviceModelRepository
*/
public function __construct(
DeviceModelRepository $deviceModelRepository,
DeliveryRepository $deliveryRepository,
DeviceRepository $deviceRepository
) {
$this->deviceModelRepository = $deviceModelRepository;
$this->deliveryRepository = $deliveryRepository;
$this->deviceRepository = $deviceRepository;
}
/**
* @Route("/acceptance/of/delivery", name="acceptance_of_delivery")
*/
public function index(Request $request): Response
{
if ($request->getMethod() === 'POST') {
$form = $request->request->get('form');
$deviceType = $form['deviceType'];
$deliveryDate = $form['deliveryDate'];
$deliveryNumber = $form['deliveryNumber'];
$deviceSerialNumbers = $form['devicesSerialNumber'];
$delivery = new Delivery(
$deviceTypeId = Uuid::fromString($deviceType),
$deliveryNumber ?? 'brak numeru dostawy',
new \DateTimeImmutable($deliveryDate)
);
$delivery->addDevice($deviceSerialNumbers);
$devices = [];
foreach ($deviceSerialNumbers as $deviceSerialNumber) {
if ($this->deviceRepository->findDeviceBySerialNumber($deviceSerialNumber) === null) {
$devices[] = new Device(
$deviceTypeId,
$deviceSerialNumber
);
}
}
$this->deliveryRepository->save($delivery);
$this->deviceRepository->saveArray($devices);
}
return $this->render('acceptance_of_delivery/index.html.twig', [
'controller_name' => 'AcceptanceOfDeliveryController',
'devicesModel' => $this->deviceModelRepository->findActiveAll(),
]);
}
}