* @copyright 2007-2014 PrestaShop SA * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) * International Registered Trademark & Property of PrestaShop SA */ /** * @deprecated 1.5.0.1 */ class DiscountCore extends CartRule { const PERCENT = 1; const AMOUNT = 2; const FREE_SHIPPING = 3; public function __get($key) { Tools::displayAsDeprecated(); if ($key == 'id_group') return 0; if ($key == 'id_discount_type') { if ($this->free_shipping) return Discount::FREE_SHIPPING; if ($this->reduction_percent > 0) return Discount::PERCENT; if ($this->reduction_amount > 0) return Discount::AMOUNT; } if ($key == 'name') return $this->code; if ($key == 'value') { if ($this->reduction_percent > 0) return $this->reduction_percent; if ($this->reduction_amount > 0) return $this->reduction_amount; } if ($key == 'cumulable') return $this->cart_rule_restriction; if ($key == 'cumulable_reduction') return false; if ($key == 'minimal') return $this->minimum_amount; if ($key == 'include_tax') return $this->reduction_tax; if ($key == 'behavior_not_exhausted') return $this->partial_use; if ($key == 'cart_display') return true; return $this->{$key}; } public function __set($key, $value) { Tools::displayAsDeprecated(); if ($key == 'id_discount_type') { if ($value == Discount::FREE_SHIPPING) { $this->free_shipping = true; $this->reduction_percent = false; $this->reduction_amount = false; } if ($value == Discount::PERCENT) { $this->free_shipping = false; $this->reduction_percent = true; $this->reduction_amount = false; } if ($value == Discount::AMOUNT) { $this->free_shipping = false; $this->reduction_percent = false; $this->reduction_amount = true; } } if ($key == 'code') $this->name[Configuration::get('PS_LANG_DEFAULT')] = $value; if ($key == 'value') { if ($this->reduction_percent) $this->reduction_percent = $value; if ($this->reduction_amount) $this->reduction_amount = $value; } if ($key == 'cumulable') $this->cart_rule_restriction = 1; if ($key == 'minimal') $this->minimum_amount = $value; if ($key == 'include_tax') $this->reduction_tax = $value; if ($key == 'behavior_not_exhausted') $this->partial_use = $value; $this->{$key} = $value; } public function __call($method, $args) { Tools::displayAsDeprecated(); $obj = $this->parent; if (in_array($method, array('add', 'update', 'getIdByName', 'getCustomerDiscounts', 'getValue', 'discountExists', 'createOrderDiscount', 'getVouchersToCartDisplay', 'display'))) $obj = $this; return call_user_func_array(array($obj, $method), $args); } /** * @deprecated 1.5.0.1 */ public function add($autodate = true, $nullValues = false, $categories = null) { $r = parent::add($autodate, $nullValues); // Todo : manage categories return $r; } /** * @deprecated 1.5.0.1 */ public function update($autodate = true, $nullValues = false, $categories = null) { $r = parent::update($autodate, $nullValues); // Todo : manage categories return $r; } /** * @deprecated 1.5.0.1 */ public static function getIdByName($code) { return parent::getIdByCode($code); } /** * @deprecated 1.5.0.1 */ public static function getCustomerDiscounts($id_lang, $id_customer, $active = false, $includeGenericOnes = true, $hasStock = false, Cart $cart = null) { return parent::getCustomerCartRules($id_lang, $id_customer, $active, $includeGenericOnes, $hasStock, $cart); } /** * @deprecated 1.5.0.1 */ public static function getVouchersToCartDisplay($id_lang, $id_customer) { return CartRule::getCustomerCartRules($id_lang, $id_customer); } /** * @deprecated 1.5.0.1 */ public function getValue($nb_discounts = 0, $order_total_products = 0, $shipping_fees = 0, $id_cart = false, $useTax = true, Currency $currency = null, Shop $shop = null) { $context = Context::getContext(); if ((int)$id_cart) $context->cart = new Cart($id_cart); if (Validate::isLoadedObject($currency)) $context->currency = $currency; if (Validate::isLoadedObject($shop)) $context->shop = $shop; return parent::getContextualValue($useTax, $context); } /** * @deprecated 1.5.0.1 */ public static function discountExists($discountName, $id_discount = 0) { return parent::cartRuleExists($discountName); } /** * @deprecated 1.5.0.1 */ public static function createOrderDiscount($order, $productList, $qtyList, $name, $shipping_cost = false, $id_category = 0, $subcategory = 0) { $languages = Language::getLanguages($order); $products = $order->getProducts(false, $productList, $qtyList); // Totals are stored in the order currency (or at least should be) $total = $order->getTotalProductsWithTaxes($products); $discounts = $order->getDiscounts(true); $total_tmp = $total; foreach ($discounts as $discount) { if ($discount['id_discount_type'] == Discount::PERCENT) $total -= $total_tmp * ($discount['value'] / 100); elseif ($discount['id_discount_type'] == Discount::AMOUNT) $total -= ($discount['value'] * ($total_tmp / $order->total_products_wt)); } if ($shipping_cost) $total += $order->total_shipping; // create discount $voucher = new Discount(); $voucher->id_discount_type = Discount::AMOUNT; foreach ($languages as $language) $voucher->description[$language['id_lang']] = strval($name).(int)($order->id); $voucher->value = (float)($total); $voucher->name = 'V0C'.(int)($order->id_customer).'O'.(int)($order->id); $voucher->id_customer = (int)($order->id_customer); $voucher->id_currency = (int)($order->id_currency); $voucher->quantity = 1; $voucher->quantity_per_user = 1; $voucher->cumulable = 1; $voucher->cumulable_reduction = 1; $voucher->minimal = (float)($voucher->value); $voucher->active = 1; $voucher->cart_display = 1; $now = time(); $voucher->date_from = date('Y-m-d H:i:s', $now); $voucher->date_to = date('Y-m-d H:i:s', $now + (3600 * 24 * 365.25)); /* 1 year */ if (!$voucher->validateFieldsLang(false) || !$voucher->add()) return false; // set correct name $voucher->name = 'V'.(int)($voucher->id).'C'.(int)($order->id_customer).'O'.$order->id; if (!$voucher->update()) return false; return $voucher; } /** * @deprecated 1.5.0.1 */ public static function display($value, $type, $currency = null) { if ((float)$value && (int)$type) { if ($type == 1) return $value.chr(37); // ASCII #37 --> % (percent) elseif ($type == 2) return Tools::displayPrice($value, $currency); } return ''; // return a string because it's a display method } }