OrderExists() == false) { if ($secure_key !== false AND $secure_key != $cart->secure_key) die(Tools::displayError()); // Copying data from cart $order = new Order(); $order->id_carrier = (int)($cart->id_carrier); $order->id_customer = (int)($cart->id_customer); $order->id_address_invoice = (int)($cart->id_address_invoice); $order->id_address_delivery = (int)($cart->id_address_delivery); $vat_address = new Address((int)($order->{Configuration::get('PS_TAX_ADDRESS_TYPE')})); $order->id_currency = ($currency_special ? (int)($currency_special) : (int)($cart->id_currency)); $order->id_lang = (int)($cart->id_lang); $order->id_cart = (int)($cart->id); $customer = new Customer((int)($order->id_customer)); $order->secure_key = ($secure_key ? pSQL($secure_key) : pSQL($customer->secure_key)); $order->payment = $paymentMethod; if (isset($this->name)) $order->module = $this->name; $order->recyclable = $cart->recyclable; $order->gift = (int)($cart->gift); $order->gift_message = $cart->gift_message; $currency = new Currency($order->id_currency); $order->conversion_rate = $currency->conversion_rate; $amountPaid = !$dont_touch_amount ? Tools::ps_round((float)($amountPaid), 2) : $amountPaid; $order->total_paid_real = $amountPaid; $order->total_products = (float)($cart->getOrderTotal(false, Cart::ONLY_PRODUCTS)); $order->total_products_wt = (float)($cart->getOrderTotal(true, Cart::ONLY_PRODUCTS)); $order->total_discounts = (float)(abs($cart->getOrderTotal(true, Cart::ONLY_DISCOUNTS))); $order->total_shipping = (float)($cart->getOrderShippingCost()); $order->carrier_tax_rate = (float)Tax::getCarrierTaxRate($cart->id_carrier, (int)$cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')}); $order->total_wrapping = (float)(abs($cart->getOrderTotal(true, Cart::ONLY_WRAPPING))); $order->total_paid = (float)(Tools::ps_round((float)($cart->getOrderTotal(true, Cart::BOTH)), 2)); $order->invoice_date = '0000-00-00 00:00:00'; $order->delivery_date = '0000-00-00 00:00:00'; // Amount paid by customer is not the right one -> Status = payment error // We don't use the following condition to avoid the float precision issues : http://www.php.net/manual/en/language.types.float.php // if ($order->total_paid != $order->total_paid_real) // We use number_format in order to compare two string if (number_format($order->total_paid, 2) != number_format($order->total_paid_real, 2)) $id_order_state = Configuration::get('PS_OS_ERROR'); // Creating order if ($cart->OrderExists() == false) $result = $order->add(); else { $errorMessage = Tools::displayError('An order has already been placed using this cart.'); Logger::addLog($errorMessage, 4, '0000001', 'Cart', intval($order->id_cart)); die($errorMessage); } // Next ! if ($result AND isset($order->id)) { if (!$secure_key) $message .= $this->l('Warning : the secure key is empty, check your payment account before validation'); // Optional message to attach to this order if (isset($message) AND !empty($message)) { $msg = new Message(); $message = strip_tags($message, '
'); if (Validate::isCleanHtml($message)) { $msg->message = $message; $msg->id_order = intval($order->id); $msg->private = 1; $msg->add(); } } // Insert products from cart into order_detail table $products = $cart->getProducts(); $productsList = ''; $db = Db::getInstance(); $query = 'INSERT INTO `'._DB_PREFIX_.'order_detail` (`id_order`, `product_id`, `product_attribute_id`, `product_name`, `product_quantity`, `product_quantity_in_stock`, `product_price`, `reduction_percent`, `reduction_amount`, `group_reduction`, `product_quantity_discount`, `product_ean13`, `product_upc`, `product_reference`, `product_supplier_reference`, `product_weight`, `tax_name`, `tax_rate`, `ecotax`, `ecotax_tax_rate`, `discount_quantity_applied`, `download_deadline`, `download_hash`) VALUES '; $customizedDatas = Product::getAllCustomizedDatas((int)($order->id_cart)); Product::addCustomizationPrice($products, $customizedDatas); $outOfStock = false; $storeAllTaxes = array(); foreach ($products AS $key => $product) { $productQuantity = (int)(Product::getQuantity((int)($product['id_product']), ($product['id_product_attribute'] ? (int)($product['id_product_attribute']) : NULL))); $quantityInStock = ($productQuantity - (int)($product['cart_quantity']) < 0) ? $productQuantity : (int)($product['cart_quantity']); if ($id_order_state != Configuration::get('PS_OS_CANCELED') AND $id_order_state != Configuration::get('PS_OS_ERROR')) { if (Product::updateQuantity($product, (int)$order->id)) $product['stock_quantity'] -= $product['cart_quantity']; if ($product['stock_quantity'] < 0 && Configuration::get('PS_STOCK_MANAGEMENT')) $outOfStock = true; Product::updateDefaultAttribute($product['id_product']); } $price = Product::getPriceStatic((int)($product['id_product']), false, ($product['id_product_attribute'] ? (int)($product['id_product_attribute']) : NULL), 6, NULL, false, true, $product['cart_quantity'], false, (int)($order->id_customer), (int)($order->id_cart), (int)($order->{Configuration::get('PS_TAX_ADDRESS_TYPE')})); $price_wt = Product::getPriceStatic((int)($product['id_product']), true, ($product['id_product_attribute'] ? (int)($product['id_product_attribute']) : NULL), 2, NULL, false, true, $product['cart_quantity'], false, (int)($order->id_customer), (int)($order->id_cart), (int)($order->{Configuration::get('PS_TAX_ADDRESS_TYPE')})); /* Store tax info */ $id_country = (int)Country::getDefaultCountryId(); $id_state = 0; $id_county = 0; $rate = 0; $id_address = $cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')}; $address_infos = Address::getCountryAndState($id_address); if ($address_infos['id_country']) { $id_country = (int)($address_infos['id_country']); $id_state = (int)$address_infos['id_state']; $id_county = (int)County::getIdCountyByZipCode($address_infos['id_state'], $address_infos['postcode']); } $allTaxes = TaxRulesGroup::getTaxes((int)Product::getIdTaxRulesGroupByIdProduct((int)$product['id_product']), $id_country, $id_state, $id_county); $nTax = 0; foreach ($allTaxes AS $res) { if (!isset($storeAllTaxes[$res->id])) $storeAllTaxes[$res->id] = array(); $storeAllTaxes[$res->id]['name'] = $res->name[(int)$order->id_lang]; $storeAllTaxes[$res->id]['rate'] = $res->rate; if (!$nTax++) $storeAllTaxes[$res->id]['amount'] = ($price * (1 + ($res->rate * 0.01))) - $price; else { $priceTmp = $price_wt / (1 + ($res->rate * 0.01)); $storeAllTaxes[$res->id]['amount'] = $price_wt - $priceTmp; } } /* End */ // Add some informations for virtual products $deadline = '0000-00-00 00:00:00'; $download_hash = NULL; if ($id_product_download = ProductDownload::getIdFromIdProduct((int)($product['id_product']))) { $productDownload = new ProductDownload((int)($id_product_download)); $deadline = $productDownload->getDeadLine(); $download_hash = $productDownload->getHash(); } // Exclude VAT if (Tax::excludeTaxeOption()) { $product['tax'] = 0; $product['rate'] = 0; $tax_rate = 0; } else $tax_rate = Tax::getProductTaxRate((int)($product['id_product']), $cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')}); $ecotaxTaxRate = 0; if (!empty($product['ecotax'])) $ecotaxTaxRate = Tax::getProductEcotaxRate($order->{Configuration::get('PS_TAX_ADDRESS_TYPE')}); $product_price = (float)Product::getPriceStatic((int)($product['id_product']), false, ($product['id_product_attribute'] ? (int)($product['id_product_attribute']) : NULL), (Product::getTaxCalculationMethod((int)($order->id_customer)) == PS_TAX_EXC ? 2 : 6), NULL, false, false, $product['cart_quantity'], false, (int)($order->id_customer), (int)($order->id_cart), (int)($order->{Configuration::get('PS_TAX_ADDRESS_TYPE')}), $specificPrice, false, false); $group_reduction = (float)GroupReduction::getValueForProduct((int)$product['id_product'], $customer->id_default_group) * 100; if (!$group_reduction) $group_reduction = Group::getReduction((int)$order->id_customer); $quantityDiscount = SpecificPrice::getQuantityDiscount((int)$product['id_product'], Shop::getCurrentShop(), (int)$cart->id_currency, (int)$vat_address->id_country, (int)$customer->id_default_group, (int)$product['cart_quantity']); $unitPrice = Product::getPriceStatic((int)$product['id_product'], true, ($product['id_product_attribute'] ? intval($product['id_product_attribute']) : NULL), 2, NULL, false, true, 1, false, (int)$order->id_customer, NULL, (int)$order->{Configuration::get('PS_TAX_ADDRESS_TYPE')}); $quantityDiscountValue = $quantityDiscount ? ((Product::getTaxCalculationMethod((int)$order->id_customer) == PS_TAX_EXC ? Tools::ps_round($unitPrice, 2) : $unitPrice) - $quantityDiscount['price'] * (1 + $tax_rate / 100)) : 0.00; $query .= '('.(int)($order->id).', '.(int)($product['id_product']).', '.(isset($product['id_product_attribute']) ? (int)($product['id_product_attribute']) : 'NULL').', \''.pSQL($product['name'].((isset($product['attributes']) AND $product['attributes'] != NULL) ? ' - '.$product['attributes'] : '')).'\', '.(int)($product['cart_quantity']).', '.$quantityInStock.', '.$product_price.', '.(float)(($specificPrice AND $specificPrice['reduction_type'] == 'percentage') ? $specificPrice['reduction'] * 100 : 0.00).', '.(float)(($specificPrice AND $specificPrice['reduction_type'] == 'amount') ? (!$specificPrice['id_currency'] ? Tools::convertPrice($specificPrice['reduction'], $order->id_currency) : $specificPrice['reduction']) : 0.00).', '.$group_reduction.', '.$quantityDiscountValue.', '.(empty($product['ean13']) ? 'NULL' : '\''.pSQL($product['ean13']).'\'').', '.(empty($product['upc']) ? 'NULL' : '\''.pSQL($product['upc']).'\'').', '.(empty($product['reference']) ? 'NULL' : '\''.pSQL($product['reference']).'\'').', '.(empty($product['supplier_reference']) ? 'NULL' : '\''.pSQL($product['supplier_reference']).'\'').', '.(float)($product['id_product_attribute'] ? $product['weight_attribute'] : $product['weight']).', \''.(empty($tax_rate) ? '' : pSQL($product['tax'])).'\', '.(float)($tax_rate).', '.(float)Tools::convertPrice(floatval($product['ecotax']), intval($order->id_currency)).', '.(float)$ecotaxTaxRate.', '.(($specificPrice AND $specificPrice['from_quantity'] > 1) ? 1 : 0).', \''.pSQL($deadline).'\', \''.pSQL($download_hash).'\'),'; $customizationQuantity = 0; if (isset($customizedDatas[$product['id_product']][$product['id_product_attribute']])) { $customizationText = ''; foreach ($customizedDatas[$product['id_product']][$product['id_product_attribute']] AS $customization) { if (isset($customization['datas'][_CUSTOMIZE_TEXTFIELD_])) foreach ($customization['datas'][_CUSTOMIZE_TEXTFIELD_] AS $text) $customizationText .= $text['name'].':'.' '.$text['value'].'
'; if (isset($customization['datas'][_CUSTOMIZE_FILE_])) $customizationText .= sizeof($customization['datas'][_CUSTOMIZE_FILE_]) .' '. Tools::displayError('image(s)').'
'; $customizationText .= '---
'; } $customizationText = rtrim($customizationText, '---
'); $customizationQuantity = (int)($product['customizationQuantityTotal']); $productsList .= ' '.$product['reference'].' '.$product['name'].(isset($product['attributes']) ? ' - '.$product['attributes'] : '').' - '.$this->l('Customized').(!empty($customizationText) ? ' - '.$customizationText : '').' '.Tools::displayPrice(Product::getTaxCalculationMethod() == PS_TAX_EXC ? $price : $price_wt, $currency, false).' '.$customizationQuantity.' '.Tools::displayPrice($customizationQuantity * (Product::getTaxCalculationMethod() == PS_TAX_EXC ? $price : $price_wt), $currency, false).' '; } if (!$customizationQuantity OR (int)$product['cart_quantity'] > $customizationQuantity) $productsList .= ' '.$product['reference'].' '.$product['name'].(isset($product['attributes']) ? ' - '.$product['attributes'] : '').' '.Tools::displayPrice(Product::getTaxCalculationMethod() == PS_TAX_EXC ? $price : $price_wt, $currency, false).' '.((int)($product['cart_quantity']) - $customizationQuantity).' '.Tools::displayPrice(((int)($product['cart_quantity']) - $customizationQuantity) * (Product::getTaxCalculationMethod() == PS_TAX_EXC ? $price : $price_wt), $currency, false).' '; } // end foreach ($products) $query = rtrim($query, ','); $result = $db->Execute($query); /* Add carrier tax */ $shippingCostTaxExcl = $cart->getOrderShippingCost((int)$order->id_carrier, false); $allTaxes = TaxRulesGroup::getTaxes((int)Carrier::getIdTaxRulesGroupByIdCarrier((int)$order->id_carrier), $id_country, $id_state, $id_county); $nTax = 0; foreach ($allTaxes AS $res) { if (!isset($res->id)) continue; if (!isset($storeAllTaxes[$res->id])) $storeAllTaxes[$res->id] = array(); if (!isset($storeAllTaxes[$res->id]['amount'])) $storeAllTaxes[$res->id]['amount'] = 0; $storeAllTaxes[$res->id]['name'] = $res->name[(int)$order->id_lang]; $storeAllTaxes[$res->id]['rate'] = $res->rate; if (!$nTax++) $storeAllTaxes[$res->id]['amount'] += ($shippingCostTaxExcl * (1 + ($res->rate * 0.01))) - $shippingCostTaxExcl; else { $priceTmp = $order->total_shipping / (1 + ($res->rate * 0.01)); $storeAllTaxes[$res->id]['amount'] += $order->total_shipping - $priceTmp; } } /* Store taxes */ foreach ($storeAllTaxes AS $t) Db::getInstance()->Execute(' INSERT INTO '._DB_PREFIX_.'order_tax (id_order, tax_name, tax_rate, amount) VALUES ('.(int)$order->id.', \''.pSQL($t['name']).'\', \''.(float)($t['rate']).'\', '.(float)$t['amount'].')'); // Insert discounts from cart into order_discount table $discounts = $cart->getDiscounts(); $discountsList = ''; $total_discount_value = 0; $shrunk = false; foreach ($discounts AS $discount) { $objDiscount = new Discount((int)$discount['id_discount']); $value = $objDiscount->getValue(sizeof($discounts), $cart->getOrderTotal(true, Cart::ONLY_PRODUCTS), $order->total_shipping, $cart->id); if ($objDiscount->id_discount_type == 2 AND in_array($objDiscount->behavior_not_exhausted, array(1,2))) $shrunk = true; if ($shrunk AND ($total_discount_value + $value) > ($order->total_products_wt + $order->total_shipping + $order->total_wrapping)) { $amount_to_add = ($order->total_products_wt + $order->total_shipping + $order->total_wrapping) - $total_discount_value; if ($objDiscount->id_discount_type == 2 AND $objDiscount->behavior_not_exhausted == 2) { $voucher = new Discount(); foreach ($objDiscount AS $key => $discountValue) $voucher->$key = $discountValue; $voucher->name = 'VSRK'.(int)$order->id_customer.'O'.(int)$order->id; $voucher->value = (float)$value - $amount_to_add; $voucher->add(); $params['{voucher_amount}'] = Tools::displayPrice($voucher->value, $currency, false); $params['{voucher_num}'] = $voucher->name; $params['{firstname}'] = $customer->firstname; $params['{lastname}'] = $customer->lastname; $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); } } else $amount_to_add = $value; $order->addDiscount($objDiscount->id, $objDiscount->name, $amount_to_add); $total_discount_value += $amount_to_add; if ($id_order_state != Configuration::get('PS_OS_ERROR') AND $id_order_state != Configuration::get('PS_OS_CANCELED')) $objDiscount->quantity = $objDiscount->quantity - 1; $objDiscount->update(); $discountsList .= ' '.$this->l('Voucher code:').' '.$objDiscount->name.' '.($value != 0.00 ? '-' : '').Tools::displayPrice($value, $currency, false).' '; } // Specify order id for message $oldMessage = Message::getMessageByCartId((int)($cart->id)); if ($oldMessage) { $message = new Message((int)$oldMessage['id_message']); $message->id_order = (int)$order->id; $message->update(); } // Hook new order $orderStatus = new OrderState((int)$id_order_state, (int)$order->id_lang); if (Validate::isLoadedObject($orderStatus)) { Hook::newOrder($cart, $order, $customer, $currency, $orderStatus); foreach ($cart->getProducts() AS $product) if ($orderStatus->logable) ProductSale::addProductSale((int)$product['id_product'], (int)$product['cart_quantity']); } if (isset($outOfStock) && $outOfStock && Configuration::get('PS_STOCK_MANAGEMENT')) { $history = new OrderHistory(); $history->id_order = (int)$order->id; $history->changeIdOrderState(Configuration::get('PS_OS_OUTOFSTOCK'), (int)$order->id); $history->addWithemail(); } // Set order state in order history ONLY even if the "out of stock" status has not been yet reached // So you migth have two order states $new_history = new OrderHistory(); $new_history->id_order = (int)$order->id; $new_history->changeIdOrderState((int)$id_order_state, (int)$order->id); $new_history->addWithemail(true, $extraVars); // Order is reloaded because the status just changed $order = new Order($order->id); // Send an e-mail to customer if ($id_order_state != Configuration::get('PS_OS_ERROR') AND $id_order_state != Configuration::get('PS_OS_CANCELED') AND $customer->id) { $invoice = new Address((int)($order->id_address_invoice)); $delivery = new Address((int)($order->id_address_delivery)); $carrier = new Carrier((int)($order->id_carrier), $order->id_lang); /** * #Override Antadis - Mondiale relay - Socol */ $_tr_delivery_desc = array(); $_tr_delivery_desc[2] = array( 'MR' => "

Votre colis sera livré chez un commerçant du réseau Mondial Relay. Vous serez prévenu de la mise à disposition de votre colis par e-mail. Vous disposez alors de 10 jours ouvrables pour le récupérer. Passé ce délai, il nous sera automatiquement retourné.

", 'SOCOL_OOH' => "

Vous serez prévenu de la mise à disposition de votre colis par e-mail. Vous disposez alors de 10 jours ouvrables pour le récupérer. Passé ce délai, il nous sera automatiquement retourné.

", 'DOM' => "

Vos produits vous seront remis en main propre à l’adresse de votre commande. Vous recevrez un email contenant le numéro de suivi du colis 48h avant. En cas d’absence, votre colis sera déposé dans votre boîte aux lettres si son volume le permet.
Dans le cas contraire, un avis de passage vous sera remis. Vous disposez alors de 10 jours ouvrables pour retirer votre colis dans votre bureau de poste. Passé ce délai, celui-ci nous sera automatiquement renvoyé. Et nous vous contacterons.

", ); $_tr_delivery_desc[3] = array( 'DOM' => "

Recibirás un email con el número de seguimiento de tu pedido 48h antes.

" ); $socol_carriers = array_map('intval',explode(',', Configuration::get('ANT_CARRIERS_SOCOL'))); $mr_carriers = array_map('intval',explode(',', Configuration::get('ANT_CARRIERS_MR'))); $dom_carriers = (int)Configuration::get('ANT_CARRIER_DOM'); $drop_carriers = (int)Configuration::get('ANT_CARRIER_DROP'); if((int)$order->id_carrier == $dom_carriers || (int)$order->id_carrier == $drop_carriers) { $delivery_carrier = 'DOM'; } elseif (in_array((int)$order->id_carrier, $socol_carriers)) { $delivery_carrier = 'SOCOL_OOH'; } elseif (in_array((int)$order->id_carrier, $mr_carriers)) { $delivery_carrier = 'MR'; } else { $delivery_carrier = 'DOM'; } $delivery_state = $delivery->id_state ? new State((int)($delivery->id_state)) : false; $invoice_state = $invoice->id_state ? new State((int)($invoice->id_state)) : false; // $date = new DateTime(); // $date->add(new DateInterval('P21D')); // $date = $date->format('d/m/Y'); $date_order = new DateTime(); $date_order = $date_order->format('d/m/Y'); $date = new DateTime(); $date->add(new DateInterval('P21D')); $date = $date->format('d/m/Y'); $date_int = new DateTime(); $date_int->add(new DateInterval('P25D')); $date_int = $date_int->format('d/m/Y'); // Hook module delay $params = array('id_order' => $order->id, 'id_lang' => $cookie->id_lang); $delivery_date = Module::hookExec('deliveryDelay', $params); // @Override Mondial relay delivery if ($mr = Db::getInstance()->getRow(' SELECT s.*, c.`id_country` FROM `' . _DB_PREFIX_ . 'mr_selected` s LEFT JOIN `' . _DB_PREFIX_ . 'mr_method` m ON m.`id_mr_method` = s.`id_method` LEFT JOIN `' . _DB_PREFIX_ . 'country` c ON c.`iso_code` = s.`MR_Selected_Pays` WHERE m.`id_carrier` = ' . (int) $order->id_carrier . ' AND s.`id_cart` = ' . (int) $order->id_cart . ' AND s.`MR_Selected_Num` IS NOT NULL AND m.`id_mr_method` IS NOT NULL ')) { $delivery->firstname = $mr['MR_Selected_LgAdr1']; $delivery->lastname = $mr['MR_Selected_LgAdr2']; $delivery->address1 = $mr['MR_Selected_LgAdr3']; $delivery->address2 = $mr['MR_Selected_LgAdr4']; $delivery->postcode = $mr['MR_Selected_CP']; $delivery->city = $mr['MR_Selected_Ville']; $delivery->id_country = isset($mr['id_country']) && $mr['id_country'] ? (int) $mr['id_country'] : 8; } $delivery_block_html = $this->_getFormatedAddress( $delivery, "
", array( 'firstname' => '%s', 'lastname' => '%s') ); $data = array( '{firstname}' => $customer->firstname, '{lastname}' => $customer->lastname, '{email}' => $customer->email, '{delivery_block_txt}' => $this->_getFormatedAddress($delivery, "\n"), '{invoice_block_txt}' => $this->_getFormatedAddress($invoice, "\n"), '{delivery_block_html}' => $delivery_block_html, '{invoice_block_html}' => $this->_getFormatedAddress($invoice, "
", array( 'firstname' => '%s', 'lastname' => '%s')), '{delivery_company}' => $delivery->company, '{delivery_firstname}' => $delivery->firstname, '{delivery_lastname}' => $delivery->lastname, '{delivery_address1}' => $delivery->address1, '{delivery_address2}' => $delivery->address2, '{delivery_city}' => $delivery->city, '{delivery_postal_code}' => $delivery->postcode, '{delivery_country}' => $delivery->country, '{delivery_state}' => $delivery->id_state ? $delivery_state->name : '', '{delivery_phone}' => ($delivery->phone) ? $delivery->phone : $delivery->phone_mobile, '{delivery_other}' => $delivery->other, '{invoice_company}' => $invoice->company, '{invoice_vat_number}' => $invoice->vat_number, '{invoice_firstname}' => $invoice->firstname, '{invoice_lastname}' => $invoice->lastname, '{invoice_address2}' => $invoice->address2, '{invoice_address1}' => $invoice->address1, '{invoice_city}' => $invoice->city, '{invoice_postal_code}' => $invoice->postcode, '{invoice_country}' => $invoice->country, '{invoice_state}' => $invoice->id_state ? $invoice_state->name : '', '{invoice_phone}' => ($invoice->phone) ? $invoice->phone : $invoice->phone_mobile, '{invoice_other}' => $invoice->other, '{order_name}' => sprintf("#%06d", (int)($order->id)), '{date}' => $date_order, //Tools::displayDate(date('Y-m-d H:i:s'), (int)($order->id_lang), 1), '{delivery_date}' => $delivery_date, '{carrier}' => $carrier->name, '{payment}' => Tools::substr($order->payment, 0, 32), '{products}' => $productsList, '{discounts}' => $discountsList, '{total_paid}' => Tools::displayPrice($order->total_paid, $currency, false), '{total_products}' => Tools::displayPrice($order->total_paid - $order->total_shipping - $order->total_wrapping + $order->total_discounts, $currency, false), '{total_discounts}' => Tools::displayPrice($order->total_discounts, $currency, false), '{total_shipping}' => Tools::displayPrice($order->total_shipping, $currency, false), '{total_wrapping}' => Tools::displayPrice($order->total_wrapping, $currency, false), '{delivery_desc}' => $_tr_delivery_desc[(int) $cart->id_lang][$delivery_carrier] ); if (is_array($extraVars)) $data = array_merge($data, $extraVars); // Join PDF invoice if ((int)(Configuration::get('PS_INVOICE')) AND Validate::isLoadedObject($orderStatus) AND $orderStatus->invoice AND $order->invoice_number) { $fileAttachment['content'] = PDF::invoice($order, 'S'); $fileAttachment['name'] = Configuration::get('PS_INVOICE_PREFIX', (int)($order->id_lang)).sprintf('%06d', $order->invoice_number).'.pdf'; $fileAttachment['mime'] = 'application/pdf'; } else $fileAttachment = NULL; if (Validate::isEmail($customer->email)){ Mail::Send((int)$order->id_lang, 'order_conf', Mail::l('Order confirmation', (int)$order->id_lang), $data, $customer->email, $customer->firstname.' '.$customer->lastname, NULL, NULL, $fileAttachment); } } $this->currentOrder = (int)$order->id; return true; } else { $errorMessage = Tools::displayError('Order creation failed'); Logger::addLog($errorMessage, 4, '0000002', 'Cart', intval($order->id_cart)); die($errorMessage); } } else { $errorMessage = Tools::displayError('Cart can\'t be loaded or an order has already been placed using this cart'); Logger::addLog($errorMessage, 4, '0000001', 'Cart', intval($cart->id)); die($errorMessage); } } protected function _getFormatedAddress(Address $the_address, $line_sep, $fields_style = array()) { return AddressFormat::generateAddress($the_address, array('avoid' => array()), $line_sep, ' ', $fields_style); } }