From 0903d0f5dd85b4464e2d2cec93cb41f720fc3de5 Mon Sep 17 00:00:00 2001 From: mDeflotte Date: Tue, 17 Apr 2012 13:19:13 +0000 Subject: [PATCH] [-] BO : #PSCFI-5378 - Create voucher from the BO after a product return --- controllers/admin/AdminOrdersController.php | 61 ++++++++++++++++++--- 1 file changed, 53 insertions(+), 8 deletions(-) diff --git a/controllers/admin/AdminOrdersController.php b/controllers/admin/AdminOrdersController.php index 1cd85b2be..5f6ed9c19 100755 --- a/controllers/admin/AdminOrdersController.php +++ b/controllers/admin/AdminOrdersController.php @@ -650,17 +650,62 @@ class AdminOrdersControllerCore extends AdminController // Generate voucher if (Tools::isSubmit('generateDiscount') && !count($this->errors)) { - // @todo generate a voucher using cartrules - if (true || !$voucher = Discount::createOrderDiscount($order, $full_product_list, $full_quantity_list, $this->l('Credit Slip for order #'), Tools::isSubmit('shippingBack'))) + $cartrule = new CartRule(); + $languages = Language::getLanguages($order); + foreach ($languages as $language) + { + $voucher->description[$language['id_lang']] = $this->l('Credit Slip for order #').(int)($order->id); + // Define a temporary name + $cartrule->name[$language['id_lang']] = 'V0C'.(int)($order->id_customer).'O'.(int)($order->id); + } + // Define a temporary code + $cartrule->code = 'V0C'.(int)($order->id_customer).'O'.(int)($order->id); + $cartrule->quantity = 1; + $cartrule->quantity_per_user = 1; + // Specific to the customer + $cartrule->id_customer = $order->id_customer; + $now = time(); + $cartrule->date_from = date('Y-m-d H:i:s', $now); + $cartrule->date_to = date('Y-m-d H:i:s', $now + (3600 * 24 * 365.25)); /* 1 year */ + $cartrule->active = 1; + + // Calculate the amount of the discount + $products = $order->getProducts(false, $full_product_list, $full_quantity_list); + // 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 (Tools::isSubmit('shippingBack')) + $total += $order->total_shipping; + + $cartrule->reduction_amount = $total; + + if (!$cartrule->add()) $this->errors[] = Tools::displayError('Cannot generate voucher'); else { - $currency = $this->context->currency; - $params['{voucher_amount}'] = Tools::displayPrice($voucher->value, $currency, false); - $params['{voucher_num}'] = $voucher->name; - @Mail::Send((int)$order->id_lang, 'voucher', Mail::l('New voucher regarding your order', (int)$order->id_lang), - $params, $customer->email, $customer->firstname.' '.$customer->lastname, null, null, null, - null, _PS_MAIL_DIR_, true); + // Update the voucher code and name + foreach ($languages as $language) + $cartrule->name[$language['id_lang']] = 'V'.(int)($voucher->id).'C'.(int)($order->id_customer).'O'.$order->id; + $cartrule->code = 'V'.(int)($voucher->id).'C'.(int)($order->id_customer).'O'.$order->id; + if (!$cartrule->update()) + $this->errors[] = Tools::displayError('Cannot generate voucher'); + else + { + $currency = $this->context->currency; + $params['{voucher_amount}'] = Tools::displayPrice($cartrule->reduction_amount, $currency, false); + $params['{voucher_num}'] = $cartrule->code; + @Mail::Send((int)$order->id_lang, 'voucher', Mail::l('New voucher regarding your order', (int)$order->id_lang), + $params, $customer->email, $customer->firstname.' '.$customer->lastname, null, null, null, + null, _PS_MAIL_DIR_, true); + } } } }