src/EventSubscriber/OrderRequestStateChangeGuardEventSubscriber.php line 30

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\OrderRequest;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Symfony\Component\Workflow\Event\GuardEvent;
  6. class OrderRequestStateChangeGuardEventSubscriber implements EventSubscriberInterface
  7. {
  8. public static function getSubscribedEvents()
  9. {
  10. return [
  11. 'workflow.order_request.guard.place_order' => 'guardPlaceOrder',
  12. ];
  13. }
  14. /**
  15. * Only orders with the following fields are allowed to be placed
  16. * - an order must have a name
  17. * - an order must have at least one service selected
  18. * - an order must have a batch number
  19. * - an order must have orderDetails filled out
  20. * @see https://ga-lab.atlassian.net/browse/GA-18
  21. *
  22. * @param GuardEvent $event
  23. */
  24. function guardPlaceOrder(GuardEvent $event)
  25. {
  26. /**
  27. * @var $orderRequest OrderRequest
  28. */
  29. $orderRequest = $event->getSubject();
  30. $event->setBlocked(true, 'At least one required field is missing, see GA-18 for more details!');
  31. if ($this->isEmpty($orderRequest->getName())) {
  32. return;
  33. }
  34. if ($orderRequest->getLineItems()->isEmpty()) {
  35. return;
  36. }
  37. if ($this->isEmpty($orderRequest->getBatchNumber())) {
  38. return;
  39. }
  40. if ($this->isEmpty($orderRequest->getOrderDetails())) {
  41. return;
  42. }
  43. $event->setBlocked(false, '');
  44. }
  45. private function isEmpty($value)
  46. {
  47. if (!$value) {
  48. return true;
  49. }
  50. if (!strlen($value)) {
  51. return true;
  52. }
  53. return false;
  54. }
  55. }