kaktusy/classes/QuantityDiscount.php

94 lines
2.9 KiB
PHP

<?php
/**
* Quantity discount class, QuantityDiscount.php
* Discount breaks management
* @category classes
*
* @author PrestaShop <support@prestashop.com>
* @copyright PrestaShop
* @license http://www.opensource.org/licenses/osl-3.0.php Open-source licence 3.0
* @version 1.3
*
*/
class QuantityDiscount extends ObjectModel
{
/** @var integer Discount type id */
public $id_discount_type;
/** @var integer Product id */
public $id_product;
/** @var integer Product attribute combinaison id */
public $id_product_attribute;
/** @var integer Quantity range */
public $quantity;
/** @var float Rate (%) or reduction */
public $value;
protected $fieldsRequired = array('id_discount_type', 'id_product', 'quantity', 'value');
protected $fieldsValidate = array('id_discount_type' => 'isUnsignedId', 'id_product' => 'isUnsignedId',
'id_product_attribute' => 'isUnsignedId', 'quantity' => 'IsUnsignedInt', 'value' => 'isFloat');
protected $table = 'discount_quantity';
protected $identifier = 'id_discount_quantity';
public function getFields()
{
parent::validateFields();
$fields['id_discount_type'] = intval($this->id_discount_type);
$fields['id_product'] = intval($this->id_product);
$fields['id_product_attribute'] = intval($this->id_product_attribute);
$fields['quantity'] = intval($this->quantity);
$fields['value'] = floatval($this->value);
return $fields;
}
public static function getValue($product_price, $id_discount_type, $value, $usetax = true, $taxrate = 1)
{
if ($id_discount_type == 1)
{
$percentage = $value / 100;
return $percentage * floatval($product_price);
}
elseif ($id_discount_type == 2)
return !$usetax ? ($value / (1 + ($taxrate / 100))) : $value;
return 0;
}
public static function getQuantityDiscounts($id_product, $price)
{
global $cookie;
$result = Db::getInstance()->ExecuteS('
SELECT *
FROM '._DB_PREFIX_.'discount_quantity dq
LEFT JOIN `'._DB_PREFIX_.'discount_type_lang` dtl ON (dq.`id_discount_type` = dtl.`id_discount_type` AND dtl.`id_lang` = '.intval($cookie->id_lang).')
WHERE dq.`id_product` = '.intval($id_product).' ORDER BY dq.`quantity` ASC');
foreach ($result AS $key => &$row)
{
$row['real_value'] = QuantityDiscount::getValue(floatval($price), intval($row['id_discount_type']), $row['value']);
$row['nextQuantity'] = (isset($result[$key + 1]) ? intval($result[$key + 1]['quantity']) : -1);
}
return $result;
}
public static function getDiscountFromQuantity($id_product, $quantity)
{
$result = Db::getInstance()->getRow('
SELECT dq.`id_discount_quantity`
FROM '._DB_PREFIX_.'discount_quantity dq
WHERE dq.`quantity` <= '.intval($quantity).'
AND dq.`id_product` = '.intval($id_product).'
ORDER BY quantity DESC');
if (!$result)
return false;
return new QuantityDiscount($result['id_discount_quantity']);
}
}
?>