public function process() { $this->application->getRouter()->removeAutoAppendVariable('currency'); if (!$this->response instanceof ActionResponse) { return; } $products = $this->response->get('products'); $parents = $variations = array(); foreach ($products as $key => $product) { if ($product['parentID']) { $parents[$product['parentID']] = true; $variations[$key] = $product; } } if (!$parents) { return; } $loadedParents = array(); foreach (ActiveRecordModel::getRecordSetArray('Product', select(in(f('Product.ID'), array_keys($parents))), array('Manufacturer', 'DefaultImage' => 'ProductImage', 'Category')) as $parent) { $loadedParents[$parent['ID']] = $parent; } ProductSpecification::loadSpecificationForRecordSetArray($loadedParents); ProductPrice::loadPricesForRecordSetArray($loadedParents); foreach ($products as $key => $product) { if ($product['parentID']) { $parent = $loadedParents[$product['parentID']]; foreach ($parent as $field => $value) { if (empty($product[$field])) { $product[$field] = $parent[$field]; } } foreach (array('price_USD', 'price_CAD', 'formattedPrice', 'formattedListPrice') as $field) { if (isset($parent[$field])) { $product[$field] = $parent[$field]; } } ///var_dump($parent);exit; $products[$key] = $product; } } ProductSet::loadVariationsForProductArray($variations); foreach ($variations as $key => $variation) { $vars = array(); foreach ($variation['variationTypes'] as $type) { $vars[] = $type['name_lang']; } if ($vars) { $products[$key]['name_lang'] .= ' (' . implode(' / ', $vars) . ')'; } } $this->response->set('products', $products); }
private function getBestsellerData($sql, $order = 'DESC') { $this->setChartType(self::TABLE); $q = $this->getQuery($sql); $f = $q->getFilter(); $f->resetOrder(); $f->resetGrouping(); $f->setOrder(new ARExpressionHandle('cnt'), $order); $q->addField('OrderedItem.productID'); $f->setGrouping(new ARExpressionHandle('OrderedItem.productID')); $f->mergeCondition(new EqualsCond(new ARFieldHandle('CustomerOrder', 'isFinalized'), 1)); $f->setLimit(self::TABLE_LIMIT); $q->joinTable('CustomerOrder', 'OrderedItem', 'ID', 'customerOrderID'); $this->getReportData($q); $ids = array(); foreach ($this->values as $product) { $ids[$product['productID']] = $product['cnt']; } // fetch product details $fields = array_flip(array('sku', 'name', 'cnt')); $products = ActiveRecordModel::getRecordSetArray('Product', new ARSelectFilter(new INCond(new ARFieldHandle('Product', 'ID'), array_keys($ids))), array('Parent')); ProductSet::loadVariationsForProductArray($products); foreach ($products as $product) { $product['cnt'] = $ids[$product['ID']]; if (empty($product['name'])) { if (!empty($product['parentID'])) { $parent = Product::getInstanceByID($product['parentID'], true); $product['name'] = $parent->getValueByLang('name'); } else { $product['name'] = ''; } } if (isset($product['variationValues'])) { $product['name'] .= ' (' . implode(' / ', $product['variationValues']) . ')'; } // array_merge to put all array values in the same order $ids[$product['ID']] = array_merge($fields, array_intersect_key($product, $fields)); } $this->values = $ids; }