Esempio n. 1
0
    public static function getQuantityDiscounts($id_product, $id_shop, $id_currency, $id_country, $id_group, $id_product_attribute = null, $all_combinations = false, $id_customer = 0)
    {
        if (!SpecificPrice::isFeatureActive()) {
            return array();
        }
        $now = date('Y-m-d H:i:s');
        $res = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
			SELECT *,
					' . SpecificPrice::_getScoreQuery($id_product, $id_shop, $id_currency, $id_country, $id_group, $id_customer) . '
			FROM `' . _DB_PREFIX_ . 'specific_price`
			WHERE
					`id_product` IN(0, ' . (int) $id_product . ') AND
					' . (!$all_combinations ? '`id_product_attribute` IN(0, ' . (int) $id_product_attribute . ') AND ' : '') . '
					`id_shop` IN(0, ' . (int) $id_shop . ') AND
					`id_currency` IN(0, ' . (int) $id_currency . ') AND
					`id_country` IN(0, ' . (int) $id_country . ') AND
					`id_group` IN(0, ' . (int) $id_group . ') AND
					`id_customer` IN(0, ' . (int) $id_customer . ')
					AND
					(
						(`from` = \'0000-00-00 00:00:00\' OR \'' . $now . '\' >= `from`)
						AND
						(`to` = \'0000-00-00 00:00:00\' OR \'' . $now . '\' <= `to`)
					)
					ORDER BY `from_quantity` ASC, `id_specific_price_rule` ASC, `score` DESC
		');
        $targeted_prices = array();
        $last_quantity = array();
        foreach ($res as $specific_price) {
            if (!isset($last_quantity[(int) $specific_price['id_product_attribute']])) {
                $last_quantity[(int) $specific_price['id_product_attribute']] = $specific_price['from_quantity'];
            } elseif ($last_quantity[(int) $specific_price['id_product_attribute']] == $specific_price['from_quantity']) {
                continue;
            }
            $last_quantity[(int) $specific_price['id_product_attribute']] = $specific_price['from_quantity'];
            if ($specific_price['from_quantity'] > PP::getSpecificPriceFromQty((int) $id_product)) {
                $targeted_prices[] = $specific_price;
            }
        }
        return $targeted_prices;
    }
Esempio n. 2
0
    public static function getQuantityDiscount($id_product, $id_shop, $id_currency, $id_country, $id_group, $quantity, $id_product_attribute = null, $id_customer = 0)
    {
        $context = Context::getContext();
        if ($context->customer->id) {
            $groups = array();
            $customer_groups = Db::getInstance()->executeS("SELECT id_group FROM ps_customer_group WHERE id_customer={$context->customer->id}");
            foreach ($customer_groups as $row_group) {
                $groups[] = $row_group['id_group'];
            }
        } else {
            $groups = array($id_group);
        }
        $groups = implode(',', $groups);
        if (!SpecificPrice::isFeatureActive()) {
            return array();
        }
        $now = date('Y-m-d H:i:s');
        $sql = '
			SELECT *,
					' . SpecificPrice::_getScoreQuery($id_product, $id_shop, $id_currency, $id_country, $id_group, $id_customer) . '
			FROM `' . _DB_PREFIX_ . 'specific_price`
			WHERE
					`id_product` IN(0, ' . (int) $id_product . ') AND
					`id_product_attribute` IN(0, ' . (int) $id_product_attribute . ') AND
					`id_shop` IN(0, ' . (int) $id_shop . ') AND
					`id_currency` IN(0, ' . (int) $id_currency . ') AND
					`id_country` IN(0, ' . (int) $id_country . ') AND
					`id_group` IN(0, ' . $groups . ') AND
					`id_customer` IN(0, ' . (int) $id_customer . ') AND
					`from_quantity` >= ' . (int) $quantity . '
					AND
					(
						(`from` = \'0000-00-00 00:00:00\' OR \'' . $now . '\' >= `from`)
						AND
						(`to` = \'0000-00-00 00:00:00\' OR \'' . $now . '\' <= `to`)
					)
					ORDER BY `from_quantity` DESC, `score` DESC
		';
        return Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($sql);
    }
Esempio n. 3
0
    public static function getProductIdByDate($id_shop, $id_currency, $id_country, $id_group, $beginning, $ending, $id_customer = 0, $with_combination_id = false)
    {
        if (!SpecificPrice::isFeatureActive()) {
            return array();
        }
        $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
			SELECT `id_product`, `id_product_attribute`
			FROM `' . _DB_PREFIX_ . 'specific_price`
			WHERE	`id_shop` IN(0, ' . (int) $id_shop . ') AND
					`id_currency` IN(0, ' . (int) $id_currency . ') AND
					`id_country` IN(0, ' . (int) $id_country . ') AND
					`id_group` IN(0, ' . (int) $id_group . ') AND
					`id_customer` IN(0, ' . (int) $id_customer . ') AND
					`from_quantity` = 1 AND
					(
						(`from` = \'0000-00-00 00:00:00\' OR \'' . pSQL($beginning) . '\' >= `from`)
						AND
						(`to` = \'0000-00-00 00:00:00\' OR \'' . pSQL($ending) . '\' <= `to`)
					)
					AND
					`reduction` > 0
		', false);
        $ids_product = array();
        while ($row = Db::getInstance()->nextRow($result)) {
            $ids_product[] = $with_combination_id ? array('id_product' => (int) $row['id_product'], 'id_product_attribute' => (int) $row['id_product_attribute']) : (int) $row['id_product'];
        }
        return $ids_product;
    }
Esempio n. 4
0
    protected function _getProductIdByDate($beginning, $ending, Context $context = null, $with_combination_id = false, $id_customer = 0, $deal = false)
    {
        if (!$context) {
            $context = Context::getContext();
        }
        $id_address = $context->cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')};
        $ids = Address::getCountryAndState($id_address);
        $id_country = $ids['id_country'] ? (int) $ids['id_country'] : (int) Configuration::get('PS_COUNTRY_DEFAULT');
        if (!SpecificPrice::isFeatureActive()) {
            return array();
        }
        if ($deal == true) {
            $where = '(`from` = \'0000-00-00 00:00:00\' OR \'' . pSQL($beginning) . '\' >= `from`) AND (`to` != \'0000-00-00 00:00:00\' AND \'' . pSQL($ending) . '\' <= `to`)';
        } else {
            $where = '(`from` = \'0000-00-00 00:00:00\' OR \'' . pSQL($beginning) . '\' >= `from`) AND (`to` = \'0000-00-00 00:00:00\' OR \'' . pSQL($ending) . '\' <= `to`)';
        }
        $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
			SELECT `id_product`, `id_product_attribute`
			FROM `' . _DB_PREFIX_ . 'specific_price`
			WHERE	`id_shop` IN(0, ' . (int) $context->shop->id . ') AND
					`id_currency` IN(0, ' . (int) $context->currency->id . ') AND
					`id_country` IN(0, ' . (int) $id_country . ') AND
					`id_group` IN(0, ' . (int) $context->customer->id_default_group . ') AND
					`id_customer` IN(0, ' . (int) $id_customer . ') AND
					`from_quantity` = 1 AND
					(' . $where . ') 
					AND
					`reduction` > 0
		', false);
        $ids_product = array();
        while ($row = Db::getInstance()->nextRow($result)) {
            $ids_product[] = $with_combination_id ? array('id_product' => (int) $row['id_product'], 'id_product_attribute' => (int) $row['id_product_attribute']) : (int) $row['id_product'];
        }
        return $ids_product;
    }
Esempio n. 5
0
    public static function getProductIdByDate($id_shop, $id_currency, $id_country, $id_group, $beginning, $ending, $id_customer = 0, $with_combination_id = false)
    {
        if (!SpecificPrice::isFeatureActive()) {
            return array();
        }
        $query_extra = self::computeExtraConditions(null, null, $id_customer, null, $beginning, $ending);
        $results = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
			SELECT `id_product`, `id_product_attribute`
			FROM `' . _DB_PREFIX_ . 'specific_price`
			WHERE	`id_shop` ' . self::formatIntInQuery(0, $id_shop) . ' AND
					`id_currency` ' . self::formatIntInQuery(0, $id_currency) . ' AND
					`id_country` ' . self::formatIntInQuery(0, $id_country) . ' AND
					`id_group` ' . self::formatIntInQuery(0, $id_group) . ' AND
					`from_quantity` = 1 AND
					`reduction` > 0
		' . $query_extra);
        $ids_product = array();
        foreach ($results as $key => $value) {
            $ids_product[] = $with_combination_id ? array('id_product' => (int) $value['id_product'], 'id_product_attribute' => (int) $value['id_product_attribute']) : (int) $value['id_product'];
        }
        return $ids_product;
    }
Esempio n. 6
0
    public static function getSpecificPriceById($id_specific_price)
    {
        if (!SpecificPrice::isFeatureActive()) {
            return array();
        }
        $res = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
			SELECT *
			FROM `' . _DB_PREFIX_ . 'specific_price` sp
			WHERE `id_specific_price` =' . (int) $id_specific_price);
        return $res;
    }