/** * @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; }
/** * 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); }