<?php
namespace App\EventSubscriber;
use App\Entity\OrderRequest;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Workflow\Event\GuardEvent;
class OrderRequestStateChangeGuardEventSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return [
'workflow.order_request.guard.place_order' => 'guardPlaceOrder',
];
}
/**
* Only orders with the following fields are allowed to be placed
* - an order must have a name
* - an order must have at least one service selected
* - an order must have a batch number
* - an order must have orderDetails filled out
* @see https://ga-lab.atlassian.net/browse/GA-18
*
* @param GuardEvent $event
*/
function guardPlaceOrder(GuardEvent $event)
{
/**
* @var $orderRequest OrderRequest
*/
$orderRequest = $event->getSubject();
$event->setBlocked(true, 'At least one required field is missing, see GA-18 for more details!');
if ($this->isEmpty($orderRequest->getName())) {
return;
}
if ($orderRequest->getLineItems()->isEmpty()) {
return;
}
if ($this->isEmpty($orderRequest->getBatchNumber())) {
return;
}
if ($this->isEmpty($orderRequest->getOrderDetails())) {
return;
}
$event->setBlocked(false, '');
}
private function isEmpty($value)
{
if (!$value) {
return true;
}
if (!strlen($value)) {
return true;
}
return false;
}
}