/**
  * @param Order $order
  * @return array
  */
 public function getWorkflows($order)
 {
     $workflows = array();
     // allow to add orders as long as Order status is confirmed
     if ($order->getStatus()->getId() === OrderStatus::STATUS_CONFIRMED) {
         $workflows = array(array('section' => $this->getName(), 'title' => 'salesorder.orders.shipping.create', 'route' => $this->getRoute($order->getId(), 'order', 'shippings')));
     }
     return $workflows;
 }
Example #2
0
 /**
  * Processes items defined in an order and creates item entities.
  *
  * @param array $data
  * @param Order $order
  * @param string $locale
  * @param int $userId
  *
  * @throws Exception\OrderException
  *
  * @return bool
  */
 private function processItems(array $data, Order $order, $locale, $userId = null)
 {
     $result = true;
     $lastProcessedProductItem = null;
     try {
         if ($this->checkIfSet('items', $data)) {
             // items has to be an array
             if (!is_array($data['items'])) {
                 throw new MissingOrderAttributeException('items array');
             }
             $items = $data['items'];
             $get = function ($item) {
                 return $item->getId();
             };
             $delete = function ($item) use($order) {
                 $this->removeItem($item->getEntity(), $order->getEntity());
             };
             $update = function ($item, $matchedEntry) use($locale, $userId, $order, &$lastProcessedProductItem) {
                 $item = $item->getEntity();
                 $itemEntity = $this->updateItem($item, $matchedEntry, $locale, $userId, $order->getEntity(), $lastProcessedProductItem);
                 if ($item->getType() === BaseItem::TYPE_PRODUCT) {
                     $lastProcessedProductItem = $item;
                 }
                 return $itemEntity ? true : false;
             };
             $add = function ($itemData) use($locale, $userId, $order, &$lastProcessedProductItem) {
                 $item = $this->addItem($itemData, $locale, $userId, $order->getEntity(), $lastProcessedProductItem);
                 if ($item->getType() === BaseItem::TYPE_PRODUCT) {
                     $lastProcessedProductItem = $item->getEntity();
                 }
                 return $item;
             };
             $result = $this->processSubEntities($order->getItems(), $items, $get, $add, $update, $delete);
         }
     } catch (\Exception $e) {
         throw new OrderException('Error while creating items: ' . $e->getMessage());
     }
     return $result;
 }
 /**
  * Returns all possible workflows for the current entity.
  *
  * @param Order $order
  *
  * @return array
  */
 public function getWorkflows($order)
 {
     $workflows = array('confirm' => array('section' => $this->getName(), 'title' => 'salesorder.orders.confirm', 'event' => 'sulu.salesorder.order.confirm.clicked', 'disabled' => true), 'edit' => array('section' => $this->getName(), 'title' => 'salesorder.orders.edit', 'event' => 'sulu.salesorder.order.edit.clicked', 'disabled' => true));
     // define workflows by order's status
     $orderStatusId = $order->getStatus()->getId();
     // order is in created state
     if ($orderStatusId === OrderStatus::STATUS_CREATED) {
         $workflows['confirm']['disabled'] = false;
     } else {
         if ($orderStatusId === OrderStatus::STATUS_CONFIRMED) {
             $workflows['edit']['disabled'] = false;
         }
     }
     // get workflows from dependencies
     /** @var SalesDependencyClassInterface $dependency */
     foreach ($this->dependencyClasses as $dependency) {
         $workflows = array_merge($workflows, $dependency->getWorkflows($order));
     }
     return array_values($workflows);
 }