Example #1
0
 public function getList($id_lang, $orderBy = NULL, $orderWay = NULL, $start = 0, $limit = NULL)
 {
     $orderByPriceFinal = empty($orderBy) ? Tools::getValue($this->table . 'Orderby', 'id_' . $this->table) : $orderBy;
     $orderWayPriceFinal = empty($orderWay) ? Tools::getValue($this->table . 'Orderway', 'ASC') : $orderWay;
     if ($orderByPriceFinal == 'price_final') {
         $orderBy = 'id_' . $this->table;
         $orderWay = 'ASC';
     }
     parent::getList($id_lang, $orderBy, $orderWay, $start, $limit);
     /* update product quantity with attributes ...*/
     if ($this->_list) {
         $nb = count($this->_list);
         for ($i = 0; $i < $nb; $i++) {
             Attribute::updateQtyProduct($this->_list[$i]);
         }
         /* update product final price */
         for ($i = 0; $i < $nb; $i++) {
             //Product::getBasePriceStaticLC does not allways return an array. Added cast to array.
             $this->_list[$i] = array_merge($this->_list[$i], (array) Product::getBasePriceStaticLC($this->_list[$i]['id_product'], $id_product_attribute = NULL));
             $this->_list[$i]['price_tmp'] = Product::getPriceStaticLC($this->_list[$i]['id_product'], $usetax = true, $id_product_attribute = NULL, $decimals = 6, $divisor = NULL, $only_reduc = false, $usereduc = true, $quantity = 1, $forceAssociatedTax = true);
         }
     }
     if ($orderByPriceFinal == 'price_final') {
         if (strtolower($orderWayPriceFinal) == 'desc') {
             uasort($this->_list, 'cmpPriceDesc');
         } else {
             uasort($this->_list, 'cmpPriceAsc');
         }
     }
     for ($i = 0; $this->_list and $i < $nb; $i++) {
         $this->_list[$i]['price_final'] = $this->_list[$i]['price_tmp'];
         unset($this->_list[$i]['price_tmp']);
     }
 }
Example #2
0
    public static function getDiscountFromQuantity($id_product, $quantity)
    {
        /* Well, we don't get $id_product_attribute from
           anywhere so I guess we can't do much, but the DB
           schema accommodates for price reductions per
           attribute... */
        $base_price = Product::getBasePriceStaticLC($id_product, NULL);
        $result = Db::getInstance()->getRow('
		SELECT dq.`id_discount_quantity`
		FROM ' . _DB_PREFIX_ . 'discount_quantity dq
		WHERE dq.`quantity` <= ' . intval($quantity) . '
		AND dq.`id_product_price` = ' . intval($base_price['id_product_price']) . '
        ORDER BY quantity DESC');
        if (!$result) {
            return false;
        }
        return new QuantityDiscount($result['id_discount_quantity']);
    }
Example #3
0
    /**
     * Return cart products
     *
     * @result array Products
     */
    public function getProducts($refresh = false, $id_product = false)
    {
        if (!$this->id) {
            return array();
        }
        if ($this->_products and !$refresh) {
            return $this->_products;
        }
        $sql = '
		SELECT cp.`id_product_attribute`, cp.`id_product`, cp.`quantity` AS cart_quantity, pl.`name`,
		pl.`description_short`, pl.`available_now`, pl.`available_later`, p.`id_product`, p.`id_category_default`, p.`id_supplier`, p.`id_manufacturer`,
		p.`quantity`, p.`weight`, p.`out_of_stock`, p.`active`, p.`date_add`, p.`date_upd`,
		pa.`quantity` AS quantity_attribute, 
        i.`id_image`, il.`legend`, pl.`link_rewrite`, cl.`link_rewrite` AS category, CONCAT(cp.`id_product`, cp.`id_product_attribute`) AS unique_id,
        IF (IFNULL(pa.`reference`, \'\') = \'\', p.`reference`, pa.`reference`) AS reference, 
        IF (IFNULL(pa.`supplier_reference`, \'\') = \'\', p.`supplier_reference`, pa.`supplier_reference`) AS supplier_reference, 
        IF (IFNULL(pa.`weight`, 0) = \'\', p.`weight`, pa.`weight`) AS weight_attribute,
        IF (IFNULL(pa.`ean13`, \'\') = \'\', p.`ean13`, pa.`ean13`) AS ean13
		FROM `' . _DB_PREFIX_ . 'cart_product` cp
		LEFT JOIN `' . _DB_PREFIX_ . 'product` p ON p.`id_product` = cp.`id_product`
		LEFT JOIN `' . _DB_PREFIX_ . 'product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = ' . intval($this->id_lang) . ')
		LEFT JOIN `' . _DB_PREFIX_ . 'product_attribute` pa ON (pa.`id_product_attribute` = cp.`id_product_attribute`)
		LEFT JOIN `' . _DB_PREFIX_ . 'product_attribute_image` pai ON (pai.`id_product_attribute` = cp.`id_product_attribute`)
		LEFT JOIN `' . _DB_PREFIX_ . 'image` i ON (i.`id_product` = cp.`id_product` AND (IF(pai.`id_image`, pai.`id_image` = i.`id_image`, i.`cover` = 1)))
		LEFT JOIN `' . _DB_PREFIX_ . 'image_lang` il ON (i.`id_image` = il.`id_image` AND il.`id_lang` = ' . intval($this->id_lang) . ')
		LEFT JOIN `' . _DB_PREFIX_ . 'category_lang` cl ON (p.`id_category_default` = cl.`id_category` AND cl.`id_lang` = ' . intval($this->id_lang) . ')
		WHERE `id_cart` = ' . intval($this->id) . '
		' . ($id_product ? ' AND cp.`id_product` = ' . intval($id_product) : '') . '
		AND p.`id_product` IS NOT NULL
		GROUP BY unique_id
		ORDER BY cp.date_add ASC';
        $result = Db::getInstance()->ExecuteS($sql);
        /* Modify SQL results */
        $products = array();
        if (empty($result)) {
            return array();
        }
        foreach ($result as $k => $row) {
            $row = array_merge($row, Product::getBasePriceStaticLC($row['id_product'], $row['id_product_attribute']));
            $row['price_attribute'] = $row['attribute_price'];
            // Backward compatibility
            $row['ecotax_attr'] = $row['attribute_ecotax'];
            // Backward compatibility
            $sql = "\n                         SELECT\n                          tl.`name` AS tax, t.`rate`\n                         FROM\n                          PREFIX_tax t\n                          LEFT JOIN PREFIX_tax_lang tl ON\n                           t.`id_tax` = {$row['id_tax']}\n\t\t\t   AND t.`id_tax` = tl.`id_tax`\n\t\t\t   AND tl.`id_lang` = {$this->id_lang}\n\t\t\t";
            $sql = str_replace('PREFIX_', _DB_PREFIX_, $sql);
            $row = array_merge($row, Db::getInstance()->getRow($sql));
            if (isset($row['ecotax_attr']) and $row['ecotax_attr'] > 0) {
                $row['ecotax'] = floatval($row['ecotax_attr']);
            }
            $row['stock_quantity'] = intval($row['quantity']);
            $row['weight'] = $row['weight_attribute'];
            $row['quantity'] = intval($row['cart_quantity']);
            $row['price'] = Product::getPriceStaticLC(intval($row['id_product']), false, isset($row['id_product_attribute']) ? intval($row['id_product_attribute']) : NULL, 6, NULL, false, true, intval($row['quantity']));
            $row['price_wt'] = Product::getPriceStaticLC(intval($row['id_product']), true, isset($row['id_product_attribute']) ? intval($row['id_product_attribute']) : NULL, 6, NULL, false, true, intval($row['quantity']));
            $row['total'] = $row['price'] * intval($row['quantity']);
            $row['total_wt'] = $row['price_wt'] * intval($row['quantity']);
            $row['id_image'] = Product::defineProductImage($row);
            $row['allow_oosp'] = Product::isAvailableWhenOutOfStock($row['out_of_stock']);
            $row['features'] = Product::getFeaturesStatic(intval($row['id_product']));
            /* Add attributes to the SQL result if needed */
            if (isset($row['id_product_attribute']) and intval($row['id_product_attribute'])) {
                $result2 = Db::getInstance()->ExecuteS('
				SELECT agl.`public_name` AS public_group_name, al.`name` AS attribute_name
				FROM `' . _DB_PREFIX_ . 'product_attribute_combination` pac
				LEFT JOIN `' . _DB_PREFIX_ . 'attribute` a ON a.`id_attribute` = pac.`id_attribute`
				LEFT JOIN `' . _DB_PREFIX_ . 'attribute_group` ag ON ag.`id_attribute_group` = a.`id_attribute_group`
				LEFT JOIN `' . _DB_PREFIX_ . 'attribute_lang` al ON (a.`id_attribute` = al.`id_attribute` AND al.`id_lang` = ' . intval($this->id_lang) . ')
				LEFT JOIN `' . _DB_PREFIX_ . 'attribute_group_lang` agl ON (ag.`id_attribute_group` = agl.`id_attribute_group` AND agl.`id_lang` = ' . intval($this->id_lang) . ')
				WHERE pac.`id_product_attribute` = ' . intval($row['id_product_attribute']));
                $attributesList = '';
                $attributesListSmall = '';
                if ($result2) {
                    foreach ($result2 as $k2 => $row2) {
                        $attributesList .= $row2['public_group_name'] . ' : ' . $row2['attribute_name'] . ', ';
                        $attributesListSmall .= $row2['attribute_name'] . ', ';
                    }
                }
                $attributesList = rtrim($attributesList, ', ');
                $attributesListSmall = rtrim($attributesListSmall, ', ');
                $row['attributes'] = $attributesList;
                $row['attributes_small'] = $attributesListSmall;
                $row['stock_quantity'] = $row['quantity_attribute'];
            }
            $products[] = $row;
        }
        $this->_products = $products;
        return $this->_products;
    }
Example #4
0
         $cover = $image;
         $cover['id_image'] = intval($product->id) . '-' . $cover['id_image'];
         $cover['id_image_only'] = intval($image['id_image']);
     }
     $productImages[intval($image['id_image'])] = $image;
 }
 if (!isset($cover)) {
     $cover = array('id_image' => Language::getIsoById($cookie->id_lang) . '-default', 'legend' => 'No picture', 'title' => 'No picture');
 }
 $size = Image::getSize('large');
 $smarty->assign(array('cover' => $cover, 'imgWidth' => intval($size['width']), 'mediumSize' => Image::getSize('medium'), 'accessories' => $product->getAccessories(intval($cookie->id_lang))));
 if (sizeof($productImages)) {
     $smarty->assign('images', $productImages);
 }
 // Tax
 $tax_datas = Product::getBasePriceStaticLC($product->id);
 $tax = floatval(Tax::getApplicableTax(intval($tax_datas['id_tax']), floatval($tax_datas['rate'])));
 /* Attributes / Groups & colors */
 $colors = array();
 $attributesGroups = $product->getAttributesGroups(intval($cookie->id_lang));
 if (Db::getInstance()->numRows()) {
     $combinationImages = $product->getCombinationImages(intval($cookie->id_lang));
     foreach ($attributesGroups as $k => $row) {
         /* Color management */
         if (isset($row['attribute_color']) and $row['attribute_color'] and $row['id_attribute_group'] == $product->id_color_default) {
             $colors[$row['id_attribute']]['value'] = $row['attribute_color'];
             $colors[$row['id_attribute']]['name'] = $row['attribute_name'];
         }
         $groups[$row['id_attribute_group']]['attributes'][$row['id_attribute']] = $row['attribute_name'];
         $groups[$row['id_attribute_group']]['name'] = $row['public_group_name'];
         if ($row['default_on']) {