// Vouchers are shrinkable again (must be tested more thoroughly)

This commit is contained in:
dMetzger
2011-11-20 15:53:31 +00:00
parent 4fe28d5107
commit 40bcbf55c5
2 changed files with 42 additions and 21 deletions
+21
View File
@@ -159,6 +159,27 @@ class CartRuleCore extends ObjectModel
Db::getInstance()->Execute('DELETE FROM `'._DB_PREFIX_.'cart_rule_product_rule_value` WHERE `id_product_rule` NOT IN (SELECT `id_product_rule` FROM `'._DB_PREFIX_.'cart_rule_product_rule`)'); Db::getInstance()->Execute('DELETE FROM `'._DB_PREFIX_.'cart_rule_product_rule_value` WHERE `id_product_rule` NOT IN (SELECT `id_product_rule` FROM `'._DB_PREFIX_.'cart_rule_product_rule`)');
} }
public static function copyConditions($id_cart_rule_source, $id_cart_rule_destination)
{
Db::getInstance()->Execute('
INSERT INTO `'._DB_PREFIX_.'cart_rule_carrier` (`id_cart_rule`, `id_carrier`)
(SELECT '.(int)$id_cart_rule_destination.', id_carrier FROM `'._DB_PREFIX_.'cart_rule_carrier` WHERE `id_cart_rule` = '.(int)$id_cart_rule_source.')');
Db::getInstance()->Execute('
INSERT INTO `'._DB_PREFIX_.'cart_rule_group` (`id_cart_rule`, `id_group`)
(SELECT '.(int)$id_cart_rule_destination.', id_group FROM `'._DB_PREFIX_.'cart_rule_group` WHERE `id_cart_rule` = '.(int)$id_cart_rule_source.')');
Db::getInstance()->Execute('
INSERT INTO `'._DB_PREFIX_.'cart_rule_country` (`id_cart_rule`, `id_country`)
(SELECT '.(int)$id_cart_rule_destination.', id_country FROM `'._DB_PREFIX_.'cart_rule_country` WHERE `id_cart_rule` = '.(int)$id_cart_rule_source.')');
Db::getInstance()->Execute('
INSERT INTO `'._DB_PREFIX_.'cart_rule_cart_rule` (`id_cart_rule_1`, `id_cart_rule_2`)
(SELECT '.(int)$id_cart_rule_destination.', IF(id_cart_rule_1 != '.(int)$id_cart_rule_source.', id_cart_rule_1, id_cart_rule_2) FROM `'._DB_PREFIX_.'cart_rule_cart_rule`
WHERE `id_cart_rule_1` = '.(int)$id_cart_rule_source.' OR `id_cart_rule_2` = '.(int)$id_cart_rule_source.')');
// Todo : should be changed soon, be must be copied too
// Db::getInstance()->Execute('DELETE FROM `'._DB_PREFIX_.'cart_rule_product_rule` WHERE `id_cart_rule` = '.(int)$this->id);
// Db::getInstance()->Execute('DELETE FROM `'._DB_PREFIX_.'cart_rule_product_rule_value` WHERE `id_product_rule` NOT IN (SELECT `id_product_rule` FROM `'._DB_PREFIX_.'cart_rule_product_rule`)');
}
public static function getIdByCode($code) public static function getIdByCode($code)
{ {
if (!Validate::isDiscountName($code)) if (!Validate::isDiscountName($code))
+21 -21
View File
@@ -300,29 +300,29 @@ abstract class PaymentModuleCore extends Module
$result = $cart->getCartRules(); $result = $cart->getCartRules();
$cartRules = ObjectModel::hydrateCollection('CartRule', $result, (int)$order->id_lang); $cartRules = ObjectModel::hydrateCollection('CartRule', $result, (int)$order->id_lang);
// @todo How to menage cart rules, with multiple shipping? // @todo How to menage cart rules, with multiple shipping?
foreach ($cartRules AS $cartRule) foreach ($cartRules as $cartRule)
{ {
$value = $cartRule->getContextualValue(true); $value = $cartRule->getContextualValue(true);
// Todo: repair shrunk // Todo : has not been tested because order processing wasn't functionnal
// if ($shrunk AND ($total_discount_value + $value) > ($order->total_products_wt + $order->total_shipping + $order->total_wrapping)) if ($value > $order->total_products_wt && $cartRule->partial_use == 1 && $cartRule->reduction_amount > 0)
// { {
// $amount_to_add = ($order->total_products_wt + $order->total_shipping + $order->total_wrapping) - $total_discount_value; $voucher = clone $cartRule;
// if ($cartRule->id_discount_type == Discount::AMOUNT AND $cartRule->behavior_not_exhausted == 2) unset($voucher->id);
// { $voucher->code = empty($voucher->code) ? substr(md5($order->id.'-'.$order->id_customer.'-'.$cartRule->id), 0, 16) : $voucher->code.'-2';
// $voucher = new Discount(); $voucher->reduction_amount = $value - $order->total_products_wt;
// foreach ($cartRule AS $key => $discountValue) $voucher->id_customer = $order->id_customer;
// $voucher->$key = $discountValue; $voucher->quantity = 1;
// $voucher->name = 'VSRK'.(int)$order->id_customer.'O'.(int)$order->id; if ($voucher->add())
// $voucher->value = (float)$value - $amount_to_add; {
// $voucher->add(); CartRule::copyConditions($cartRule->id, $voucher->id);
// $params['{voucher_amount}'] = Tools::displayPrice($voucher->value, $currency, false); $params['{voucher_amount}'] = Tools::displayPrice($voucher->reduction_amount, $currency, false);
// $params['{voucher_num}'] = $voucher->name; $params['{voucher_num}'] = $voucher->code;
// $params['{firstname}'] = $customer->firstname; $params['{firstname}'] = $customer->firstname;
// $params['{lastname}'] = $customer->lastname; $params['{lastname}'] = $customer->lastname;
// $params['{id_order}'] = $order->id; $params['{id_order}'] = $order->id;
// @Mail::Send((int)$order->id_lang, 'voucher', Mail::l('New voucher regarding your order #').$order->id, $params, $customer->email, $customer->firstname.' '.$customer->lastname); Mail::Send((int)$order->id_lang, 'voucher', Mail::l('New voucher regarding your order #').$order->id, $params, $customer->email, $customer->firstname.' '.$customer->lastname);
// } }
// } }
$order->addCartRule($cartRule->id, $cartRule->name, $value); $order->addCartRule($cartRule->id, $cartRule->name, $value);
if ($id_order_state != Configuration::get('PS_OS_ERROR') AND $id_order_state != Configuration::get('PS_OS_CANCELED')) if ($id_order_state != Configuration::get('PS_OS_ERROR') AND $id_order_state != Configuration::get('PS_OS_CANCELED'))