diff --git a/classes/Cart.php b/classes/Cart.php index 86d7129e6..b75390c09 100644 --- a/classes/Cart.php +++ b/classes/Cart.php @@ -692,10 +692,19 @@ class CartCore extends ObjectModel public function addCartRule($id_cart_rule) { - return Db::getInstance()->insert('cart_cart_rule', array( + // You can't add a cart rule that does not exist + $cartRule = new CartRule($id_cart_rule, Context::getContext()->lang->id); + if (!Validate::isLoadedObject($cartRule)) + return false; + + // Add the cart rule to the cart + if (!Db::getInstance()->insert('cart_cart_rule', array( 'id_cart_rule' => (int)$id_cart_rule, 'id_cart' => (int)$this->id - )); + ))) + return false; + + return true; } public function containsProduct($id_product, $id_product_attribute = 0, $id_customization = false, $id_address_delivery = 0) diff --git a/classes/CartRule.php b/classes/CartRule.php index c65968823..b7a947e4a 100644 --- a/classes/CartRule.php +++ b/classes/CartRule.php @@ -477,8 +477,6 @@ class CartRuleCore extends ObjectModel if ($this->minimum_amount_currency != Configuration::get('PS_CURRENCY_DEFAULT')) { $minimumAmountCurrency = new Currency($this->minimum_amount_currency); - //p($this->minimum_amount_currency); - if ($this->minimum_amount == 0 || $minimumAmountCurrency->conversion_rate == 0) $minimum_amount = 0; else diff --git a/controllers/admin/AdminOrdersController.php b/controllers/admin/AdminOrdersController.php index 4f1837216..22b802de3 100755 --- a/controllers/admin/AdminOrdersController.php +++ b/controllers/admin/AdminOrdersController.php @@ -930,33 +930,63 @@ class AdminOrdersControllerCore extends AdminController $this->applyDiscountOnInvoice($order_invoice, $cart_rules[$order_invoice->id]['value_tax_incl'], $cart_rules[$order_invoice->id]['value_tax_excl']); } } + else + { + $cart_rules[0]['value_tax_incl'] = $order->total_shipping_tax_incl; + $cart_rules[0]['value_tax_excl'] = $order->total_shipping_tax_excl; + } break; default: $this->errors[] = Tools::displayError('Discount type is invalid'); } $res = true; - foreach ($cart_rules as $id_order_invoice => $cart_rule) + foreach ($cart_rules as &$cart_rule) { - // Create OrderCartRule - $order_cart_rule = new OrderCartRule(); - $order_cart_rule->id_order = $order->id; - $order_cart_rule->id_order_invoice = $id_order_invoice; - $order_cart_rule->name = Tools::getValue('discount_name'); - $order_cart_rule->value = $cart_rule['value_tax_incl']; - $order_cart_rule->value_tax_excl = $cart_rule['value_tax_excl']; - $res &= $order_cart_rule->add(); - - $order->total_discounts += $order_cart_rule->value; - $order->total_discounts_tax_incl += $order_cart_rule->value; - $order->total_discounts_tax_excl += $order_cart_rule->value_tax_excl; - $order->total_paid -= $order_cart_rule->value; - $order->total_paid_tax_incl -= $order_cart_rule->value; - $order->total_paid_tax_excl -= $order_cart_rule->value_tax_excl; + $cartRuleObj = new CartRule(); + $cartRuleObj->date_from = date('Y-m-d H:i:s', strtotime('-1 hour', strtotime($order->date_add))); + $cartRuleObj->date_to = date('Y-m-d H:i:s', strtotime('+1 hour')); + $cartRuleObj->name[Configuration::get('PS_LANG_DEFAULT')] = Tools::getValue('discount_name'); + $cartRuleObj->quantity = 0; + $cartRuleObj->quantity_per_user = 1; + if (Tools::getValue('discount_type') == 1) + $cartRuleObj->reduction_percent = Tools::getValue('discount_value'); + elseif (Tools::getValue('discount_type') == 2) + $cartRuleObj->reduction_amount = $cart_rule['value_tax_excl']; + elseif (Tools::getValue('discount_type') == 3) + $cartRuleObj->free_shipping = 1; + $cartRuleObj->active = 0; + if ($res = $cartRuleObj->add()) + $cart_rule['id'] = $cartRuleObj->id; + else + break; } + + if ($res) + { + foreach ($cart_rules as $id_order_invoice => $cart_rule) + { + // Create OrderCartRule + $order_cart_rule = new OrderCartRule(); + $order_cart_rule->id_order = $order->id; + $order_cart_rule->id_cart_rule = $cart_rule['id']; + $order_cart_rule->id_order_invoice = $id_order_invoice; + $order_cart_rule->name = Tools::getValue('discount_name'); + $order_cart_rule->value = $cart_rule['value_tax_incl']; + $order_cart_rule->value_tax_excl = $cart_rule['value_tax_excl']; + $res &= $order_cart_rule->add(); - // Update Order - $res &= $order->update(); + $order->total_discounts += $order_cart_rule->value; + $order->total_discounts_tax_incl += $order_cart_rule->value; + $order->total_discounts_tax_excl += $order_cart_rule->value_tax_excl; + $order->total_paid -= $order_cart_rule->value; + $order->total_paid_tax_incl -= $order_cart_rule->value; + $order->total_paid_tax_excl -= $order_cart_rule->value_tax_excl; + } + + // Update Order + $res &= $order->update(); + } if ($res) Tools::redirectAdmin(self::$currentIndex.'&id_order='.$order->id.'&vieworder&conf=4&token='.$this->token);