Exemple #1
0
 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);
 }
Exemple #2
0
 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;
 }