/** * @param Item $order * @return JBCartOrder */ protected function _convertOrder(Item $order) { $newOrder = new JBCartOrder(); $cartElement = current($order->getElementsByType('jbbasketitems')); if (!$cartElement) { return null; } $orderItems = $cartElement->getOrderItems(); $data = (array) $cartElement->data(); $newOrder->id = -1; $newOrder->modified = $order->modified; $newOrder->created = $order->created; $newOrder->created_by = $order->created_by; $newOrder->params = new ParameterData(); $newOrder->params->set('config', array('default_currency' => $this->_migrate->getCurrency(), 'migration_currency' => $this->_migrate->getCurrency())); $paymentElement = $this->_createPayment($data); $paymentElement->setOrder($newOrder); $newOrder->setPaymentElement($paymentElement); $fieldsElement = $this->_createOrderElement($order); $fieldsElement->setOrder($newOrder); $newOrder->addOrderElement($fieldsElement); $newOrder->setStatusList($this->_statusList); $newList = array(); $totalSum = $newOrder->val(0); foreach ($orderItems as $orderItem) { $key = md5(serialize($orderItem)); $orderItem = $this->app->data->create($orderItem); $totalPrice = $newOrder->val($orderItem->get('price') . ' ' . $orderItem->get('currency')); $newList[$key] = array('key' => $key, 'item_id' => $orderItem->get('itemId'), 'item_name' => $orderItem->get('name'), 'element_id' => '', 'total' => $totalPrice->data(true), 'quantity' => $orderItem->get('quantity'), 'template' => array(), 'values' => (array) $orderItem->get('priceParams'), 'elements' => array('_value' => $totalPrice->data(true), '_sku' => $orderItem->get('sku'), '_description' => $orderItem->get('priceDesc')), 'params' => array('quantity' => array('min' => 1, 'max' => 1000, 'step' => 1, 'default' => 1, 'decimals' => 0)), 'modifiers' => array(), 'variations' => array(), 'variant' => 0); $totalSum->add($totalPrice); } $newOrder->setItemsData(json_encode($newList)); $newOrder->total = $totalSum->val(); if (isset($data['order_info'])) { if (isset($data['order_info']['status'])) { $newOrder->setStatus($data['order_info']['status'], JBCart::STATUS_ORDER); $newOrder->setStatus($data['order_info']['status'], JBCart::STATUS_PAYMENT); } if (isset($data['order_info']['description'])) { $newOrder->comment = $data['order_info']['description']; } } return $newOrder; }
/** * Create form fields */ public function formFields() { $configModel = JBModelConfig::model(); $application = $this->_migrate->getCartApp(); $templatePath = null; $orderFields = null; if ($application) { $templatePath = $application->getTemplate()->getPath(); $orderFields = $this->_migrate->getOrderFields(); } if ($templatePath && $orderFields) { $posFile = $templatePath . '/renderer/item/positions.config'; $renderParams = array(); if (JFile::exists($posFile)) { $posFile = $this->app->data->create(json_decode(file_get_contents($posFile), true)); foreach ($posFile->get('jbuniversal.order.order', array()) as $position) { foreach ($position as $element) { $renderParams[$element['element']] = $element; } } } foreach ($renderParams as $elemId => $renderParam) { if (!isset($orderFields[$elemId])) { continue; } /** * @var AppData $config * @var AppData $renderParam */ $config = $this->app->data->create($orderFields[$elemId]); $renderParam = $this->app->data->create($renderParam); $elemType = isset($this->_elementMap[$config['type']]) ? $this->_elementMap[$config['type']] : 'text'; $orderElement = $this->_element->create($elemType, JBCart::ELEMENT_TYPE_ORDER, array('name' => $config->get('name'), 'description' => $config->get('description'), 'access' => $config->get('access'), 'default' => $config->get('default'), 'option' => $config->get('option'), 'multiple' => $config->get('multiple'))); $list = $configModel->getGroup('cart.field'); $list[JBCart::DEFAULT_POSITION][$orderElement->identifier] = (array) $orderElement->config; $configModel->setGroup('cart.field', $list); $renderElement = array('user_field' => '', 'showlabel' => '0', 'altlabel' => $renderParam->get('altlabel'), 'required' => $renderParam->get('required', 0), 'type' => $orderElement->getElementType(), 'group' => $orderElement->getElementGroup(), 'identifier' => $orderElement->identifier); $list = $configModel->getGroup('cart.field_tmpl.default'); $list[JBCart::DEFAULT_POSITION][] = $renderElement; $configModel->setGroup('cart.field_tmpl.default', $list); } } }