/** * Return cart discounts * * @result array Discounts */ public function getDiscounts($lite = false, $refresh = false) { if (!$this->id) { return array(); } // if (!$lite AND !$refresh AND isset(self::$_discounts[$this->id])) // return self::$_discounts[$this->id]; // if ($lite AND isset(self::$_discountsLite[$this->id])) // return self::$_discountsLite[$this->id]; $sql = 'SELECT d.*, `id_cart` FROM `' . _DB_PREFIX_ . 'cart_discount` c LEFT JOIN `' . _DB_PREFIX_ . 'discount` d ON c.`id_discount` = d.`id_discount` WHERE `id_cart` = ' . (int) $this->id; $result = Db::getInstance()->ExecuteS($sql); $products = $this->getProducts(); foreach ($result as $k => $discount) { $categories = Discount::getCategories((int) $discount['id_discount']); $in_category = false; foreach ($products as $product) { if (Product::idIsOnCategoryId((int) $product['id_product'], $categories)) { $in_category = true; break; } } if (!$in_category) { unset($result[$k]); } } if ($lite) { self::$_discountsLite[$this->id] = $result; return $result; } $total_products_wt = $this->getOrderTotal(true, Cart::ONLY_PRODUCTS); $total_products = $this->getOrderTotal(false, Cart::ONLY_PRODUCTS); $shipping_wt = $this->getOrderShippingCost(); $shipping = $this->getOrderShippingCost(NULL, false); self::$_discounts[$this->id] = array(); foreach ($result as $row) { $discount = new Discount($row['id_discount'], (int) $this->id_lang); $row['description'] = $discount->description ? $discount->description : $discount->name; $row['value_real'] = $discount->getValueByCartObj(sizeof($result), $total_products_wt, $shipping_wt, $this); $row['value_tax_exc'] = $discount->getValueByCartObj(sizeof($result), $total_products, $shipping, $this, false); self::$_discounts[$this->id][] = $row; } return isset(self::$_discounts[$this->id]) ? self::$_discounts[$this->id] : NULL; }