public function postProcess() { $sid = Configuration::get('TWOCHECKOUTPP_SID'); $secret_word = Configuration::get('TWOCHECKOUTPP_SECRET'); $credit_card_processed = $_REQUEST['credit_card_processed']; $order_number = $_REQUEST['order_number']; $cart_id = $_REQUEST['merchant_order_id']; $cart = new Cart($cart_id); $checkout = new twocheckoutpp(); if (Configuration::get('TWOCHECKOUTPP_CURRENCY') > 0) { $amount = number_format($cart->getOrderTotal(true, 3), 2, '.', ''); $currency_from = Currency::getCurrency($cart->id_currency); $currency_to = Currency::getCurrency(Configuration::get('TWOCHECKOUTPP_CURRENCY')); $amount = Tools::ps_round($amount / $currency_from['conversion_rate'], 2); $total = number_format(Tools::ps_round($amount *= $currency_to['conversion_rate'], 2), 2, '.', ''); } else { $total = number_format($cart->getOrderTotal(true, 3), 2, '.', ''); } //Check the hash $compare_string = $secret_word . $sid . $order_number . $total; $compare_hash1 = strtoupper(md5($compare_string)); $compare_hash2 = $_REQUEST['key']; if ($compare_hash1 == $compare_hash2) { $customer = new Customer($cart->id_customer); $total = (double) $cart->getOrderTotal(true, Cart::BOTH); $checkout->validateOrder($cart_id, _PS_OS_PAYMENT_, $total, $checkout->displayName, '', array(), NULL, false, $customer->secure_key); $order = new Order($checkout->currentOrder); Tools::redirect('index.php?controller=order-confirmation&id_cart=' . (int) $cart->id . '&id_module=' . (int) $this->module->id . '&id_order=' . $checkout->currentOrder); } else { echo 'Hash Mismatch! Please contact the seller directly for assistance.</br>'; echo 'Total: ' . $total . '</br>'; echo '2CO Total: ' . $_REQUEST['total']; } }
function hookRightColumn($params) { global $smarty; if ($special = Product::getRandomSpecial(intval($params['cookie']->id_lang))) { $smarty->assign(array('special' => $special, 'priceWithoutReduction_tax_excl' => Tools::ps_round($special['price_without_reduction'] / (1 + $special['rate'] / 100), 2), 'oldPrice' => $special['price'] + $special['reduction'], 'mediumSize' => Image::getSize('medium'))); } return $this->display(__FILE__, 'blockspecials.tpl'); }
protected function _assignSummaryInformations() { $summary = $this->context->cart->getSummaryDetails(); $customizedDatas = Product::getAllCustomizedDatas($this->context->cart->id); // override customization tax rate with real tax (tax rules) if ($customizedDatas) { foreach ($summary['products'] as &$productUpdate) { $productId = (int) isset($productUpdate['id_product']) ? $productUpdate['id_product'] : $productUpdate['product_id']; $productAttributeId = (int) isset($productUpdate['id_product_attribute']) ? $productUpdate['id_product_attribute'] : $productUpdate['product_attribute_id']; if (isset($customizedDatas[$productId][$productAttributeId])) { $productUpdate['tax_rate'] = Tax::getProductTaxRate($productId, $this->context->cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')}); } } Product::addCustomizationPrice($summary['products'], $customizedDatas); } $cart_product_context = Context::getContext()->cloneContext(); foreach ($summary['products'] as $key => &$product) { $product['quantity'] = $product['cart_quantity']; // for compatibility with 1.2 themes if ($cart_product_context->shop->id != $product['id_shop']) { $cart_product_context->shop = new Shop((int) $product['id_shop']); } $product['price_without_specific_price'] = Product::getPriceStatic($product['id_product'], !Product::getTaxCalculationMethod(), $product['id_product_attribute'], _PS_PRICE_COMPUTE_PRECISION_, null, false, false, 1, false, null, null, null, $null, true, true, $cart_product_context); /** * ABU edit: variable is_discount set à 1 à tord, calcul foireux de presta * @bugfix: https://github.com/PrestaShop/PrestaShop/commit/379e28b341730ea95c0b2d6567817305ea841b23 * @perso: soustraction de l'ecotax au price_without_specific_price @else */ if (Product::getTaxCalculationMethod()) { // $product['is_discounted'] = $product['price_without_specific_price'] != Tools::ps_round($product['price'], _PS_PRICE_COMPUTE_PRECISION_); $product['is_discounted'] = Tools::ps_round($product['price_without_specific_price'], _PS_PRICE_COMPUTE_PRECISION_) != Tools::ps_round($product['price'], _PS_PRICE_COMPUTE_PRECISION_); } else { // $product['is_discounted'] = $product['price_without_specific_price'] != Tools::ps_round($product['price_wt'], _PS_PRICE_COMPUTE_PRECISION_); $product['is_discounted'] = Tools::ps_round($product['price_without_specific_price'] - $product['ecotax'], _PS_PRICE_COMPUTE_PRECISION_) != Tools::ps_round($product['price_wt'], _PS_PRICE_COMPUTE_PRECISION_); } } // Get available cart rules and unset the cart rules already in the cart $available_cart_rules = CartRule::getCustomerCartRules($this->context->language->id, isset($this->context->customer->id) ? $this->context->customer->id : 0, true, true, true, $this->context->cart); $cart_cart_rules = $this->context->cart->getCartRules(); foreach ($available_cart_rules as $key => $available_cart_rule) { if (!$available_cart_rule['highlight'] || strpos($available_cart_rule['code'], CartRule::BO_ORDER_CODE_PREFIX) === 0) { unset($available_cart_rules[$key]); continue; } foreach ($cart_cart_rules as $cart_cart_rule) { if ($available_cart_rule['id_cart_rule'] == $cart_cart_rule['id_cart_rule']) { unset($available_cart_rules[$key]); continue 2; } } } $show_option_allow_separate_package = !$this->context->cart->isAllProductsInStock(true) && Configuration::get('PS_SHIP_WHEN_AVAILABLE'); $this->context->smarty->assign($summary); $this->context->smarty->assign(array('token_cart' => Tools::getToken(false), 'isLogged' => $this->isLogged, 'isVirtualCart' => $this->context->cart->isVirtualCart(), 'productNumber' => $this->context->cart->nbProducts(), 'voucherAllowed' => CartRule::isFeatureActive(), 'shippingCost' => $this->context->cart->getOrderTotal(true, Cart::ONLY_SHIPPING), 'shippingCostTaxExc' => $this->context->cart->getOrderTotal(false, Cart::ONLY_SHIPPING), 'customizedDatas' => $customizedDatas, 'CUSTOMIZE_FILE' => Product::CUSTOMIZE_FILE, 'CUSTOMIZE_TEXTFIELD' => Product::CUSTOMIZE_TEXTFIELD, 'lastProductAdded' => $this->context->cart->getLastProduct(), 'displayVouchers' => $available_cart_rules, 'show_option_allow_separate_package' => $show_option_allow_separate_package, 'smallSize' => Image::getSize(ImageType::getFormatedName('small')))); $this->context->smarty->assign(array('HOOK_SHOPPING_CART' => Hook::exec('displayShoppingCartFooter', $summary), 'HOOK_SHOPPING_CART_EXTRA' => Hook::exec('displayShoppingCart', $summary))); }
function update_order_canada() { $sql = 'SHOW TABLES LIKE \'' . _DB_PREFIX_ . 'order_tax\''; $table = Db::getInstance()->ExecuteS($sql); if (!count($table)) { Db::getInstance()->Execute(' CREATE TABLE IF NOT EXISTS `' . _DB_PREFIX_ . 'order_tax` ( `id_order` int(11) NOT NULL, `tax_name` varchar(40) NOT NULL, `tax_rate` decimal(6,3) NOT NULL, `amount` decimal(20,6) NOT NULL ) ENGINE=ENGINE_TYPE DEFAULT CHARSET=utf8'); $address_field = Configuration::get('PS_TAX_ADDRESS_TYPE'); $sql = 'SELECT `id_order` FROM `' . _DB_PREFIX_ . 'orders` o LEFT JOIN `' . _DB_PREFIX_ . 'address` a ON (a.`id_address` = o.`' . bqSQL($address_field) . '`) LEFT JOIN `' . _DB_PREFIX_ . 'country` c ON (c.`id_country` = a.`id_country`) WHERE c.`iso_code` = "CA"'; $id_order_list = Db::getInstance()->ExecuteS($sql); $values = ''; foreach ($id_order_list as $id_order) { $amount = array(); $id_order = $id_order['id_order']; $order = new Order((int) $id_order); if (!Validate::isLoadedObject($order)) { continue; } $products = $order->getProducts(); foreach ($products as $product) { if (!array_key_exists($product['tax_name'], $amount)) { $amount[$product['tax_name']] = array('amount' => 0, 'rate' => $product['tax_rate']); } if ($order->getTaxCalculationMethod() == PS_TAX_EXC) { $total_product = $product['product_price'] * $product['product_quantity']; $amount_tmp = Tools::ps_round($total_product * ($product['tax_rate'] / 100), 2); $amount[$product['tax_name']]['amount'] += Tools::ps_round($total_product * ($product['tax_rate'] / 100), 2); } else { $total_product = $product['product_price'] * $product['product_quantity']; $amount_tmp = Tools::ps_round($total_product - $total_product / (1 + $product['tax_rate'] / 100), 2); $amount[$product['tax_name']]['amount'] += Tools::ps_round($total_product - $total_product / (1 + $product['tax_rate'] / 100), 2); } } foreach ($amount as $tax_name => $tax_infos) { $values .= '(' . (int) $order->id . ', \'' . pSQL($tax_name) . '\', \'' . pSQL($tax_infos['rate']) . '\', ' . (double) $tax_infos['amount'] . '),'; } unset($order); } if (!empty($values)) { $values = rtrim($values, ","); Db::getInstance()->Execute(' INSERT INTO `' . _DB_PREFIX_ . 'order_tax` (id_order, tax_name, tax_rate, amount) VALUES ' . $values); } } }
public function assignContentVars($params) { global $errors; // Set currency if ((int) $params['cart']->id_currency && (int) $params['cart']->id_currency != $this->context->currency->id) { $currency = new Currency((int) $params['cart']->id_currency); } else { $currency = $this->context->currency; } $taxCalculationMethod = Group::getPriceDisplayMethod((int) Group::getCurrent()->id); $useTax = !($taxCalculationMethod == PS_TAX_EXC); $products = $params['cart']->getProducts(true); $nbTotalProducts = 0; foreach ($products as $product) { $nbTotalProducts += (int) $product['cart_quantity']; } $cart_rules = $params['cart']->getCartRules(); $base_shipping = $params['cart']->getOrderTotal($useTax, Cart::ONLY_SHIPPING); $shipping_cost = Tools::displayPrice($base_shipping, $currency); $shipping_cost_float = Tools::convertPrice($base_shipping, $currency); $wrappingCost = (double) $params['cart']->getOrderTotal($useTax, Cart::ONLY_WRAPPING); $totalToPay = $params['cart']->getOrderTotal($useTax); if ($useTax && Configuration::get('PS_TAX_DISPLAY') == 1) { $totalToPayWithoutTaxes = $params['cart']->getOrderTotal(false); $this->smarty->assign('tax_cost', Tools::displayPrice($totalToPay - $totalToPayWithoutTaxes, $currency)); } // The cart content is altered for display foreach ($cart_rules as &$cart_rule) { if ($cart_rule['free_shipping']) { $shipping_cost = Tools::displayPrice(0, $currency); $shipping_cost_float = 0; $cart_rule['value_real'] -= Tools::convertPrice($params['cart']->getOrderTotal(true, Cart::ONLY_SHIPPING), $currency); $cart_rule['value_tax_exc'] = Tools::convertPrice($params['cart']->getOrderTotal(false, Cart::ONLY_SHIPPING), $currency); } if ($cart_rule['gift_product']) { foreach ($products as &$product) { if ($product['id_product'] == $cart_rule['gift_product'] && $product['id_product_attribute'] == $cart_rule['gift_product_attribute']) { $product['is_gift'] = 1; $product['total_wt'] = Tools::ps_round($product['total_wt'] - $product['price_wt'], (int) $currency->decimals * _PS_PRICE_DISPLAY_PRECISION_); $product['total'] = Tools::ps_round($product['total'] - $product['price'], (int) $currency->decimals * _PS_PRICE_DISPLAY_PRECISION_); $cart_rule['value_real'] = Tools::ps_round($cart_rule['value_real'] - $product['price_wt'], (int) $currency->decimals * _PS_PRICE_DISPLAY_PRECISION_); $cart_rule['value_tax_exc'] = Tools::ps_round($cart_rule['value_tax_exc'] - $product['price'], (int) $currency->decimals * _PS_PRICE_DISPLAY_PRECISION_); } } } } $this->smarty->assign(array('products' => $products, 'customizedDatas' => Product::getAllCustomizedDatas((int) $params['cart']->id), 'CUSTOMIZE_FILE' => _CUSTOMIZE_FILE_, 'CUSTOMIZE_TEXTFIELD' => _CUSTOMIZE_TEXTFIELD_, 'discounts' => $cart_rules, 'nb_total_products' => (int) $nbTotalProducts, 'shipping_cost' => $shipping_cost, 'shipping_cost_float' => $shipping_cost_float, 'show_wrapping' => $wrappingCost > 0 ? true : false, 'show_tax' => (int) (Configuration::get('PS_TAX_DISPLAY') == 1 && (int) Configuration::get('PS_TAX')), 'wrapping_cost' => Tools::displayPrice($wrappingCost, $currency), 'product_total' => Tools::displayPrice($params['cart']->getOrderTotal($useTax, Cart::BOTH_WITHOUT_SHIPPING), $currency), 'total' => Tools::displayPrice($totalToPay, $currency), 'order_process' => Configuration::get('PS_ORDER_PROCESS_TYPE') ? 'order-opc' : 'order', 'ajax_allowed' => (int) Configuration::get('PS_BLOCK_CART_AJAX') == 1 ? true : false, 'static_token' => Tools::getToken(false))); if (count($errors)) { $this->smarty->assign('errors', $errors); } if (isset($this->context->cookie->ajax_blockcart_display)) { $this->smarty->assign('colapseExpandStatus', $this->context->cookie->ajax_blockcart_display); } }
public function hookRightColumn($params) { if (Configuration::get('PS_CATALOG_MODE')) { return; } if (!($special = Product::getRandomSpecial((int) $params['cookie']->id_lang)) && !Configuration::get('PS_BLOCK_SPECIALS_DISPLAY')) { return; } $this->smarty->assign(array('special' => $special, 'priceWithoutReduction_tax_excl' => Tools::ps_round($special['price_without_reduction'], 2), 'mediumSize' => Image::getSize(ImageType::getFormatedName('medium')))); return $this->display(__FILE__, 'blockspecials.tpl'); }
public function hookRightColumn($params) { if (Configuration::get('PS_CATALOG_MODE')) { return; } // We need to create multiple caches because the products are sorted randomly $random = date('Ymd') . '|' . round(rand(1, max(Configuration::get('BLOCKSPECIALS_NB_CACHES'), 1))); if (!Configuration::get('BLOCKSPECIALS_NB_CACHES') || !$this->isCached('blockspecials.tpl', $this->getCacheId('blockspecials|' . $random))) { $countSpecial = Product::getCountSpecial((int) $params['cookie']->id_lang, 4); $this->smarty->assign(array('special' => $countSpecial, 'priceWithoutReduction_tax_excl' => Tools::ps_round(isset($special) ? $special['price_without_reduction'] : 0, 2), 'mediumSize' => Image::getSize(ImageType::getFormatedName('medium')))); } return $this->display(__FILE__, 'blockspecials.tpl', Configuration::get('BLOCKSPECIALS_NB_CACHES') ? $this->getCacheId('blockspecials|' . $random) : null); }
public function hookHome($params) { if (Configuration::get('PS_CATALOG_MODE')) { return; } global $smarty; $tmp = Product::getPricesDrop(intval($params['cookie']->id_lang)); asort($tmp); if (!($special = Product::getRandomSpecial((int) $params['cookie']->id_lang)) && !Configuration::get('PS_BLOCK_SPECIALS_DISPLAY')) { return; } $this->smarty->assign(array('special' => $special, 'specials' => $tmp, 'priceWithoutReduction_tax_excl' => Tools::ps_round($special['price_without_reduction'], 2), 'mediumSize' => Image::getSize('medium_default'))); return $this->display(__FILE__, 'tmspecials.tpl'); }
public function confirmOrder($custom) { $cart = new Cart((int) $custom['id_cart']); $cart_details = $cart->getSummaryDetails(null, true); $cart_hash = sha1(serialize($cart->nbProducts())); $this->context->cart = $cart; $address = new Address((int) $cart->id_address_invoice); $this->context->country = new Country((int) $address->id_country); $this->context->customer = new Customer((int) $cart->id_customer); $this->context->language = new Language((int) $cart->id_lang); $this->context->currency = new Currency((int) $cart->id_currency); if (isset($cart->id_shop)) { $this->context->shop = new Shop($cart->id_shop); } $res = $this->getResult(); if (strcmp($res, "VERIFIED") == 0) { $currency_decimals = is_array($this->context->currency) ? (int) $this->context->currency['decimals'] : (int) $this->context->currency->decimals; $this->decimals = $currency_decimals * _PS_PRICE_DISPLAY_PRECISION_; $message = null; $mc_gross = Tools::ps_round(Tools::getValue('mc_gross'), $this->decimals); $cart_details = $cart->getSummaryDetails(null, true); $shipping = $cart_details['total_shipping_tax_exc']; $subtotal = $cart_details['total_price_without_tax'] - $cart_details['total_shipping_tax_exc']; $tax = $cart_details['total_tax']; $total_price = Tools::ps_round($shipping + $subtotal + $tax, $this->decimals); if (bccomp($mc_gross, $total_price, 2) !== 0) { $payment = (int) Configuration::get('PS_OS_ERROR'); $message = $this->l('Price paid on paypal is not the same that on PrestaShop.') . '<br />'; } elseif ($custom['hash'] != $cart_hash) { $payment = (int) Configuration::get('PS_OS_ERROR'); $message = $this->l('Cart changed, please retry.') . '<br />'; } else { $payment = (int) Configuration::get('PS_OS_PAYMENT'); $message = $this->l('Payment accepted.') . '<br />'; } $customer = new Customer((int) $cart->id_customer); $transaction = PayPalOrder::getTransactionDetails(false); if (_PS_VERSION_ < '1.5') { $shop = null; } else { $shop_id = $this->context->shop->id; $shop = new Shop($shop_id); } $this->validateOrder($cart->id, $payment, $total_price, $this->displayName, $message, $transaction, $cart->id_currency, false, $customer->secure_key, $shop); } }
/** * Assign price and tax to the template */ protected function assignPriceAndTax() { die('coucou'); $id_customer = isset($this->context->customer) ? (int) $this->context->customer->id : 0; $id_group = (int) Group::getCurrent()->id; $id_country = $id_customer ? (int) Customer::getCurrentCountry($id_customer) : (int) Tools::getCountry(); $group_reduction = GroupReduction::getValueForProduct($this->product->id, $id_group); if ($group_reduction === false) { $group_reduction = Group::getReduction((int) $this->context->cookie->id_customer) / 100; } // Tax $tax = (double) $this->product->getTaxesRate(new Address((int) $this->context->cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')})); $this->context->smarty->assign('tax_rate', $tax); $product_price_with_tax = Product::getPriceStatic($this->product->id, true, null, 6) * 10; if (Product::$_taxCalculationMethod == PS_TAX_INC) { $product_price_with_tax = Tools::ps_round($product_price_with_tax, 2); } $product_price_without_eco_tax = (double) $product_price_with_tax - $this->product->ecotax; $ecotax_rate = (double) Tax::getProductEcotaxRate($this->context->cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')}); $ecotax_tax_amount = Tools::ps_round($this->product->ecotax, 2); if (Product::$_taxCalculationMethod == PS_TAX_INC && (int) Configuration::get('PS_TAX')) { $ecotax_tax_amount = Tools::ps_round($ecotax_tax_amount * (1 + $ecotax_rate / 100), 2); } $id_currency = (int) $this->context->cookie->id_currency; $id_product = (int) $this->product->id; $id_shop = $this->context->shop->id; $quantity_discounts = SpecificPrice::getQuantityDiscounts($id_product, $id_shop, $id_currency, $id_country, $id_group, null, true, (int) $this->context->customer->id); foreach ($quantity_discounts as &$quantity_discount) { if ($quantity_discount['id_product_attribute']) { $combination = new Combination((int) $quantity_discount['id_product_attribute']); $attributes = $combination->getAttributesName((int) $this->context->language->id); foreach ($attributes as $attribute) { $quantity_discount['attributes'] = $attribute['name'] . ' - '; } $quantity_discount['attributes'] = rtrim($quantity_discount['attributes'], ' - '); } if ((int) $quantity_discount['id_currency'] == 0 && $quantity_discount['reduction_type'] == 'amount') { $quantity_discount['reduction'] = Tools::convertPriceFull($quantity_discount['reduction'], null, Context::getContext()->currency); } } $product_price = $this->product->getPrice(Product::$_taxCalculationMethod == PS_TAX_INC, false) * 10; $address = new Address($this->context->cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')}); $this->context->smarty->assign(array('quantity_discounts' => $this->formatQuantityDiscounts($quantity_discounts, $product_price, (double) $tax, $ecotax_tax_amount), 'ecotax_tax_inc' => $ecotax_tax_amount, 'ecotax_tax_exc' => Tools::ps_round($this->product->ecotax, 2), 'ecotaxTax_rate' => $ecotax_rate, 'productPriceWithoutEcoTax' => (double) $product_price_without_eco_tax, 'group_reduction' => $group_reduction, 'no_tax' => Tax::excludeTaxeOption() || !$this->product->getTaxesRate($address), 'ecotax' => !count($this->errors) && $this->product->ecotax > 0 ? Tools::convertPrice((double) $this->product->ecotax) : 0, 'tax_enabled' => Configuration::get('PS_TAX') && !Configuration::get('AEUC_LABEL_TAX_INC_EXC'), 'customer_group_without_tax' => Group::getPriceDisplayMethod($this->context->customer->id_default_group))); }
public function hookOrderConfirmation($params) { // Setting parameters $parameters = Configuration::getMultiple(array('PS_LANG_DEFAULT')); $order = $params['objOrder']; if (Validate::isLoadedObject($order)) { $conversion_rate = 1; $amount = isset($order->total_paid_tax_excl) ? $order->total_paid_tax_excl : 0; $shipping = isset($order->total_shipping_tax_incl) ? $order->total_shipping_tax_incl : 0; $conversionAmount = $amount - $shipping; // Order general information $trans = array('id' => (int) $order->id, 'total' => Tools::ps_round((double) $conversionAmount / (double) $conversion_rate, 2)); $tapfiliate_id = Configuration::get('TAPFILIATE_ID'); $this->context->smarty->assign('trans', $trans); $this->context->smarty->assign('tapfiliate_id', $tapfiliate_id); $this->context->smarty->assign('isOrder', true); return $this->display(__FILE__, 'views/templates/hook/footer.tpl'); } }
public function confirmOrder($custom) { $cart = new Cart((int) $custom['id_cart']); $cart_details = $cart->getSummaryDetails(null, true); $cart_hash = sha1(serialize($cart->nbProducts())); $this->context->cart = $cart; $address = new Address((int) $cart->id_address_invoice); $this->context->country = new Country((int) $address->id_country); $this->context->customer = new Customer((int) $cart->id_customer); $this->context->language = new Language((int) $cart->id_lang); $this->context->currency = new Currency((int) $cart->id_currency); if (isset($cart->id_shop)) { $this->context->shop = new Shop($cart->id_shop); } $this->createLog($cart->getProducts(true)); $mc_gross = Tools::getValue('mc_gross'); $total_price = Tools::ps_round($cart_details['total_price'], 2); $message = null; $result = $this->verify(); if (strcmp($result, VERIFIED) == 0) { if ($mc_gross != $total_price) { $payment = (int) Configuration::get('PS_OS_ERROR'); $message = $this->l('Price payed on paypal is not the same that on PrestaShop.') . '<br />'; } elseif ($custom['hash'] != $cart_hash) { $payment = (int) Configuration::get('PS_OS_ERROR'); $message = $this->l('Cart changed, please retry.') . '<br />'; } else { $payment = (int) Configuration::get('PS_OS_WS_PAYMENT'); $message = $this->l('Payment accepted.') . '<br />'; } $customer = new Customer((int) $cart->id_customer); $id_order = (int) Order::getOrderByCartId((int) $cart->id); $transaction = array('currency' => pSQL(Tools::getValue(CURRENCY)), 'id_invoice' => pSQL(Tools::getValue(ID_INVOICE)), 'id_transaction' => pSQL(Tools::getValue(ID_TRANSACTION)), 'payment_date' => pSQL(Tools::getValue(PAYMENT_DATE)), 'shipping' => (double) Tools::getValue(SHIPPING), 'total_paid' => (double) Tools::getValue(TOTAL_PAID)); $this->validateOrder($cart->id, $payment, $total_price, $this->displayName, $message, $transaction, $cart->id_currency, false, $customer->secure_key); $history = new OrderHistory(); $history->id_order = (int) $id_order; $history->changeIdOrderState((int) $payment, (int) $id_order); $history->addWithemail(); $history->add(); } }
/** * Convert the entities data into an xml object and return the xml object as a string * * @param array $aEntity Entity data */ public function formatEntityToXML($aEntity) { $dom = new DOMDocument('1.0', 'utf-8'); // Set the root of the XML $root = $dom->createElement($this->sEntity); $dom->appendChild($root); $oOrder = new Order((int) $aEntity['id_order']); $root->setAttribute("isodate", date('c', strtotime($oOrder->invoice_date))); $userid = $dom->createElement('userid', (int) $oOrder->id_customer); $root->appendChild($userid); $transactionid = $dom->createElement('transactionid', (int) $oOrder->id); $root->appendChild($transactionid); $aOrderProducts = $oOrder->getProducts(); $sReturn = false; if (is_array($aOrderProducts) && count($aOrderProducts) > 0) { foreach ($aOrderProducts as $aOrderProduct) { $item = $dom->createElement('item'); $root->appendChild($item); $itemid = $dom->createElement('itemid', (int) $aOrderProduct['product_id']); $item->appendChild($itemid); $profile = $dom->createElement('profile', (int) $oOrder->id_lang); $item->appendChild($profile); if ($oOrder->getTaxCalculationMethod() == PS_TAX_EXC) { $product_price = $aOrderProduct['product_price'] + $aOrderProduct['ecotax']; } else { $product_price = $aOrderProduct['product_price_wt']; } $price = $dom->createElement('price', number_format(Tools::ps_round($product_price, 2), 2, '.', '')); $item->appendChild($price); $quantity = $dom->createElement('quantity', (int) $aOrderProduct['product_quantity']); $item->appendChild($quantity); } $sReturn = $dom->saveHTML(); } unset($dom); unset($oOrder); unset($aOrderProducts); return $sReturn; }
public function getTaxesAmount($price_before_tax, $price_after_tax = null, $round_precision = 2, $round_mode = null) { $amounts = array(); $total_base = 0; foreach ($this->getProductTaxes() as $row) { if (!array_key_exists($row['id_tax'], $amounts)) { $amounts[$row['id_tax']] = array('rate' => $row['rate'], 'base' => 0); } $amounts[$row['id_tax']]['base'] += $row['total_price_tax_excl']; $total_base += $row['total_price_tax_excl']; } $actual_tax = 0; foreach ($amounts as &$data) { $data = Tools::ps_round($price_before_tax * ($data['base'] / $total_base) * $data['rate'] / 100, $round_precision, $round_mode); $actual_tax += $data; } unset($data); if ($price_after_tax) { Tools::spreadAmount($price_after_tax - $price_before_tax - $actual_tax, $round_precision, $amounts, 'id_tax'); } return $amounts; }
protected function setDetailProductPrice(Order $order, Cart $cart, $product) { $this->setContext((int) $product['id_shop']); $specific_price = $null = null; Product::getPriceStatic((int) $product['id_product'], true, (int) $product['id_product_attribute'], 6, null, false, true, array($product['cart_quantity'], $product['cart_quantity_fractional']), false, (int) $order->id_customer, (int) $order->id_cart, (int) $order->{Configuration::get('PS_TAX_ADDRESS_TYPE')}, $specific_price, true, true, $this->context); $this->specificPrice = $specific_price; $this->original_product_price = Product::getPriceStatic($product['id_product'], false, (int) $product['id_product_attribute'], 6, null, false, false, 1, false, null, null, null, $null, true, true, $this->context); $this->product_price = $this->original_product_price; $this->unit_price_tax_incl = (double) $product['price_wt']; $this->unit_price_tax_excl = (double) $product['price']; $this->total_price_tax_incl = (double) $product['total_wt']; $this->total_price_tax_excl = (double) $product['total']; $this->purchase_supplier_price = (double) $product['wholesale_price']; if ($product['id_supplier'] > 0 && ($supplier_price = ProductSupplier::getProductPrice((int) $product['id_supplier'], $product['id_product'], $product['id_product_attribute'], true)) > 0) { $this->purchase_supplier_price = (double) $supplier_price; } $this->setSpecificPrice($order, $product); $this->group_reduction = (double) Group::getReduction((int) $order->id_customer); $shop_id = $this->context->shop->id; $quantity_discount = SpecificPrice::getQuantityDiscount((int) $product['id_product'], $shop_id, (int) $cart->id_currency, (int) $this->vat_address->id_country, (int) $this->customer->id_default_group, (int) PP::resolveQty($product['cart_quantity'], $product['cart_quantity_fractional']), false, null, null, $null, true, true, $this->context); $unit_price = Product::getPriceStatic((int) $product['id_product'], true, $product['id_product_attribute'] ? (int) $product['id_product_attribute'] : null, 2, null, false, true, 1, false, (int) $order->id_customer, null, (int) $order->{Configuration::get('PS_TAX_ADDRESS_TYPE')}, $null, true, true, $this->context); $this->product_quantity_discount = 0.0; if ($quantity_discount) { $this->product_quantity_discount = $unit_price; if (Product::getTaxCalculationMethod((int) $order->id_customer) == PS_TAX_EXC) { $this->product_quantity_discount = Tools::ps_round($unit_price, 2); } if (isset($this->tax_calculator)) { $this->product_quantity_discount -= $this->tax_calculator->addTaxes($quantity_discount['price']); } } $this->discount_quantity_applied = $this->specificPrice && $this->specificPrice['from_quantity'] > PP::getSpecificPriceFromQty((int) $product['id_product']) ? 1 : 0; $this->id_cart_product = (int) $product['id_cart_product']; $this->product_quantity_fractional = (double) $product['cart_quantity_fractional']; $ppropertiessmartprice_hook3 = null; }
/** * Récupération du prix de shipping pour un produit id * @param $shipping * @return float */ public function getShippingPrice($product_id, $attribute_id, $id_carrier = 0, $id_zone = 0) { $product = new Product($product_id); $shipping = 0; $carrier = new Carrier((int) $id_carrier); if ($id_zone == 0) { $defaultCountry = new Country(Configuration::get('PS_COUNTRY_DEFAULT'), Configuration::get('PS_LANG_DEFAULT')); $id_zone = (int) $defaultCountry->id_zone; } $carrierTax = Tax::getCarrierTaxRate((int) $carrier->id); $free_weight = Configuration::get('PS_SHIPPING_FREE_WEIGHT'); $shipping_handling = Configuration::get('PS_SHIPPING_HANDLING'); if ($product->getPrice(true, $attribute_id, 2, NULL, false, true, 1) >= (double) $free_weight and (double) $free_weight > 0) { $shipping = 0; } elseif (isset($free_weight) and $product->weight >= (double) $free_weight and (double) $free_weight > 0) { $shipping = 0; } else { if (isset($shipping_handling) and $carrier->shipping_handling) { $shipping = (double) $shipping_handling; } if ($carrier->getShippingMethod() == Carrier::SHIPPING_METHOD_WEIGHT) { $shipping += $carrier->getDeliveryPriceByWeight($product->weight, $id_zone); } else { $shipping += $carrier->getDeliveryPriceByPrice($product->getPrice(true, $attribute_id, 2, NULL, false, true, 1), $id_zone); } $shipping *= 1 + $carrierTax / 100; $shipping = (double) Tools::ps_round((double) $shipping, 2); } unset($product); return $shipping; }
function content_5590d87d4ca0e9_00902120($_smarty_tpl) { if ($_smarty_tpl->tpl_vars['product']->value['customizedDatas']) { ?> <?php if ($_smarty_tpl->tpl_vars['order']->value->getTaxCalculationMethod() == @constant('PS_TAX_EXC')) { ?> <?php $_smarty_tpl->tpl_vars['product_price'] = new Smarty_variable($_smarty_tpl->tpl_vars['product']->value['unit_price_tax_excl'] + $_smarty_tpl->tpl_vars['product']->value['ecotax'], null, 0); } else { ?> <?php $_smarty_tpl->tpl_vars['product_price'] = new Smarty_variable($_smarty_tpl->tpl_vars['product']->value['unit_price_tax_incl'], null, 0); } ?> <tr class="customized customized-<?php echo intval($_smarty_tpl->tpl_vars['product']->value['id_order_detail']); ?> product-line-row"> <td> <input type="hidden" class="edit_product_id_order_detail" value="<?php echo intval($_smarty_tpl->tpl_vars['product']->value['id_order_detail']); ?> " /> <?php if (isset($_smarty_tpl->tpl_vars['product']->value['image']) && intval($_smarty_tpl->tpl_vars['product']->value['image']->id)) { echo $_smarty_tpl->tpl_vars['product']->value['image_tag']; } else { ?> --<?php } ?> </td> <td> <a href="<?php echo htmlspecialchars($_smarty_tpl->tpl_vars['link']->value->getAdminLink('AdminProducts'), ENT_QUOTES, 'UTF-8', true); ?> &id_product=<?php echo intval($_smarty_tpl->tpl_vars['product']->value['product_id']); ?> &updateproduct&token=<?php echo $_smarty_tpl->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION]['getAdminToken'][0][0]->getAdminTokenLiteSmarty(array('tab' => 'AdminProducts'), $_smarty_tpl); ?> "> <span class="productName"><?php echo $_smarty_tpl->tpl_vars['product']->value['product_name']; ?> - <?php echo smartyTranslate(array('s' => 'Customized'), $_smarty_tpl); ?> </span><br /> <?php if ($_smarty_tpl->tpl_vars['product']->value['product_reference']) { echo smartyTranslate(array('s' => 'Reference number:'), $_smarty_tpl); ?> <?php echo $_smarty_tpl->tpl_vars['product']->value['product_reference']; ?> <br /><?php } ?> <?php if ($_smarty_tpl->tpl_vars['product']->value['product_supplier_reference']) { echo smartyTranslate(array('s' => 'Supplier reference:'), $_smarty_tpl); ?> <?php echo $_smarty_tpl->tpl_vars['product']->value['product_supplier_reference']; } ?> </a> </td> <td> <span class="product_price_show"><?php echo $_smarty_tpl->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION]['displayPrice'][0][0]->displayPriceSmarty(array('price' => $_smarty_tpl->tpl_vars['product_price']->value, 'currency' => intval($_smarty_tpl->tpl_vars['currency']->value->id)), $_smarty_tpl); ?> </span> <?php if ($_smarty_tpl->tpl_vars['can_edit']->value) { ?> <div class="product_price_edit" style="display:none;"> <input type="hidden" name="product_id_order_detail" class="edit_product_id_order_detail" value="<?php echo intval($_smarty_tpl->tpl_vars['product']->value['id_order_detail']); ?> " /> <div class="form-group"> <div class="fixed-width-xl"> <div class="input-group"> <?php if ($_smarty_tpl->tpl_vars['currency']->value->format % 2) { ?> <div class="input-group-addon"><?php echo $_smarty_tpl->tpl_vars['currency']->value->sign; ?> <?php echo smartyTranslate(array('s' => 'tax excl.'), $_smarty_tpl); ?> </div><?php } ?> <input type="text" name="product_price_tax_excl" class="edit_product_price_tax_excl edit_product_price" value="<?php echo Tools::ps_round($_smarty_tpl->tpl_vars['product']->value['unit_price_tax_excl'], 2); ?> " size="5" /> <?php if (!$_smarty_tpl->tpl_vars['currency']->value->format % 2) { ?> <div class="input-group-addon"><?php echo $_smarty_tpl->tpl_vars['currency']->value->sign; ?> <?php echo smartyTranslate(array('s' => 'tax excl.'), $_smarty_tpl); ?> </div><?php } ?> </div> </div> <br/> <div class="fixed-width-xl"> <div class="input-group"> <?php if ($_smarty_tpl->tpl_vars['currency']->value->format % 2) { ?> <div class="input-group-addon"><?php echo $_smarty_tpl->tpl_vars['currency']->value->sign; ?> <?php echo smartyTranslate(array('s' => 'tax incl.'), $_smarty_tpl); ?> </div><?php } ?> <input type="text" name="product_price_tax_incl" class="edit_product_price_tax_incl edit_product_price" value="<?php echo Tools::ps_round($_smarty_tpl->tpl_vars['product']->value['unit_price_tax_incl'], 2); ?> " size="5" /> <?php if (!$_smarty_tpl->tpl_vars['currency']->value->format % 2) { ?> <div class="input-group-addon"><?php echo $_smarty_tpl->tpl_vars['currency']->value->sign; ?> <?php echo smartyTranslate(array('s' => 'tax incl.'), $_smarty_tpl); ?> </div><?php } ?> </div> </div> </div> </div> <?php } ?> </td> <td class="productQuantity text-center"><?php echo $_smarty_tpl->tpl_vars['product']->value['customizationQuantityTotal']; ?> </td> <?php if ($_smarty_tpl->tpl_vars['display_warehouse']->value) { ?> <td> </td><?php } ?> <?php if ($_smarty_tpl->tpl_vars['order']->value->hasBeenPaid()) { ?> <td class="productQuantity text-center"><?php echo $_smarty_tpl->tpl_vars['product']->value['customizationQuantityRefunded']; ?> </td><?php } ?> <?php if ($_smarty_tpl->tpl_vars['order']->value->hasBeenDelivered() || $_smarty_tpl->tpl_vars['order']->value->hasProductReturned()) { ?> <td class="productQuantity text-center"><?php echo $_smarty_tpl->tpl_vars['product']->value['customizationQuantityReturned']; ?> </td><?php } ?> <?php if ($_smarty_tpl->tpl_vars['stock_management']->value) { ?> <td class="text-center"><?php echo $_smarty_tpl->tpl_vars['product']->value['current_stock']; ?> </td><?php } ?> <td class="total_product"> <?php if ($_smarty_tpl->tpl_vars['order']->value->getTaxCalculationMethod() == @constant('PS_TAX_EXC')) { ?> <?php echo $_smarty_tpl->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION]['displayPrice'][0][0]->displayPriceSmarty(array('price' => Tools::ps_round($_smarty_tpl->tpl_vars['product']->value['product_price'] * $_smarty_tpl->tpl_vars['product']->value['customizationQuantityTotal'], 2), 'currency' => intval($_smarty_tpl->tpl_vars['currency']->value->id)), $_smarty_tpl); ?> <?php } else { ?> <?php echo $_smarty_tpl->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION]['displayPrice'][0][0]->displayPriceSmarty(array('price' => Tools::ps_round($_smarty_tpl->tpl_vars['product']->value['product_price_wt'] * $_smarty_tpl->tpl_vars['product']->value['customizationQuantityTotal'], 2), 'currency' => intval($_smarty_tpl->tpl_vars['currency']->value->id)), $_smarty_tpl); ?> <?php } ?> </td> <td class="cancelQuantity standard_refund_fields current-edit" style="display:none" colspan="2"> </td> <td class="edit_product_fields" colspan="2" style="display:none"> </td> <td class="partial_refund_fields current-edit" style="text-align:left;display:none;"></td> <?php if ($_smarty_tpl->tpl_vars['can_edit']->value && !$_smarty_tpl->tpl_vars['order']->value->hasBeenDelivered()) { ?> <td class="product_action text-right"> <div class="btn-group"> <button type="button" class="btn btn-default edit_product_change_link"> <i class="icon-pencil"></i> <?php echo smartyTranslate(array('s' => 'Edit'), $_smarty_tpl); ?> </button> <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"> <span class="caret"></span> </button> <ul class="dropdown-menu" role="menu"> <li> <a href="#" class="delete_product_line"> <i class="icon-trash"></i> <?php echo smartyTranslate(array('s' => 'Delete'), $_smarty_tpl); ?> </a> </li> </ul> </div> <button type="button" class="btn btn-default submitProductChange" style="display: none;"> <i class="icon-ok"></i> <?php echo smartyTranslate(array('s' => 'Update'), $_smarty_tpl); ?> </button> <button type="button" class="btn btn-default cancel_product_change_link" style="display: none;"> <i class="icon-remove"></i> <?php echo smartyTranslate(array('s' => 'Cancel'), $_smarty_tpl); ?> </button> </td> <?php } ?> </tr> <?php $_smarty_tpl->tpl_vars['customizationPerAddress'] = new Smarty_Variable(); $_smarty_tpl->tpl_vars['customizationPerAddress']->_loop = false; $_from = $_smarty_tpl->tpl_vars['product']->value['customizedDatas']; if (!is_array($_from) && !is_object($_from)) { settype($_from, 'array'); } foreach ($_from as $_smarty_tpl->tpl_vars['customizationPerAddress']->key => $_smarty_tpl->tpl_vars['customizationPerAddress']->value) { $_smarty_tpl->tpl_vars['customizationPerAddress']->_loop = true; ?> <?php $_smarty_tpl->tpl_vars['customization'] = new Smarty_Variable(); $_smarty_tpl->tpl_vars['customization']->_loop = false; $_smarty_tpl->tpl_vars['customizationId'] = new Smarty_Variable(); $_from = $_smarty_tpl->tpl_vars['customizationPerAddress']->value; if (!is_array($_from) && !is_object($_from)) { settype($_from, 'array'); } foreach ($_from as $_smarty_tpl->tpl_vars['customization']->key => $_smarty_tpl->tpl_vars['customization']->value) { $_smarty_tpl->tpl_vars['customization']->_loop = true; $_smarty_tpl->tpl_vars['customizationId']->value = $_smarty_tpl->tpl_vars['customization']->key; ?> <tr class="customized customized-<?php echo intval($_smarty_tpl->tpl_vars['product']->value['id_order_detail']); ?> "> <td colspan="2"> <input type="hidden" class="edit_product_id_order_detail" value="<?php echo intval($_smarty_tpl->tpl_vars['product']->value['id_order_detail']); ?> " /> <div class="form-horizontal"> <?php $_smarty_tpl->tpl_vars['datas'] = new Smarty_Variable(); $_smarty_tpl->tpl_vars['datas']->_loop = false; $_smarty_tpl->tpl_vars['type'] = new Smarty_Variable(); $_from = $_smarty_tpl->tpl_vars['customization']->value['datas']; if (!is_array($_from) && !is_object($_from)) { settype($_from, 'array'); } foreach ($_from as $_smarty_tpl->tpl_vars['datas']->key => $_smarty_tpl->tpl_vars['datas']->value) { $_smarty_tpl->tpl_vars['datas']->_loop = true; $_smarty_tpl->tpl_vars['type']->value = $_smarty_tpl->tpl_vars['datas']->key; ?> <?php if ($_smarty_tpl->tpl_vars['type']->value == Product::CUSTOMIZE_FILE) { ?> <?php $_smarty_tpl->tpl_vars['data'] = new Smarty_Variable(); $_smarty_tpl->tpl_vars['data']->_loop = false; $_from = $_smarty_tpl->tpl_vars['datas']->value; if (!is_array($_from) && !is_object($_from)) { settype($_from, 'array'); } $_smarty_tpl->tpl_vars['data']->iteration = 0; foreach ($_from as $_smarty_tpl->tpl_vars['data']->key => $_smarty_tpl->tpl_vars['data']->value) { $_smarty_tpl->tpl_vars['data']->_loop = true; $_smarty_tpl->tpl_vars['data']->iteration++; ?> <div class="form-group"> <span class="col-lg-4 control-label"><strong><?php if ($_smarty_tpl->tpl_vars['data']->value['name']) { echo $_smarty_tpl->tpl_vars['data']->value['name']; } else { echo smartyTranslate(array('s' => 'Picture #'), $_smarty_tpl); echo $_smarty_tpl->tpl_vars['data']->iteration; } ?> </strong></span> <div class="col-lg-8"> <a href="displayImage.php?img=<?php echo $_smarty_tpl->tpl_vars['data']->value['value']; ?> &name=<?php echo intval($_smarty_tpl->tpl_vars['order']->value->id); ?> -file<?php echo $_smarty_tpl->tpl_vars['data']->iteration; ?> " class="_blank"> <img class="img-thumbnail" src="<?php echo @constant('_THEME_PROD_PIC_DIR_'); echo $_smarty_tpl->tpl_vars['data']->value['value']; ?> _small" alt=""/> </a> </div> </div> <?php } ?> <?php } elseif ($_smarty_tpl->tpl_vars['type']->value == Product::CUSTOMIZE_TEXTFIELD) { ?> <?php $_smarty_tpl->tpl_vars['data'] = new Smarty_Variable(); $_smarty_tpl->tpl_vars['data']->_loop = false; $_from = $_smarty_tpl->tpl_vars['datas']->value; if (!is_array($_from) && !is_object($_from)) { settype($_from, 'array'); } $_smarty_tpl->tpl_vars['data']->iteration = 0; foreach ($_from as $_smarty_tpl->tpl_vars['data']->key => $_smarty_tpl->tpl_vars['data']->value) { $_smarty_tpl->tpl_vars['data']->_loop = true; $_smarty_tpl->tpl_vars['data']->iteration++; ?> <div class="form-group"> <span class="col-lg-4 control-label"><strong><?php if ($_smarty_tpl->tpl_vars['data']->value['name']) { echo smartyTranslate(array('s' => '%s', 'sprintf' => $_smarty_tpl->tpl_vars['data']->value['name']), $_smarty_tpl); } else { echo smartyTranslate(array('s' => 'Text #%s', 'sprintf' => $_smarty_tpl->tpl_vars['data']->iteration), $_smarty_tpl); } ?> </strong></span> <div class="col-lg-8"> <p class="form-control-static"><?php echo $_smarty_tpl->tpl_vars['data']->value['value']; ?> </p> </div> </div> <?php } ?> <?php } ?> <?php } ?> </div> </td> <td>-</td> <td class="productQuantity text-center"> <span class="product_quantity_show<?php if ((int) $_smarty_tpl->tpl_vars['customization']->value['quantity'] > 1) { ?> red bold<?php } ?> "><?php echo $_smarty_tpl->tpl_vars['customization']->value['quantity']; ?> </span> <?php if ($_smarty_tpl->tpl_vars['can_edit']->value) { ?> <span class="product_quantity_edit" style="display:none;"> <input type="text" name="product_quantity[<?php echo intval($_smarty_tpl->tpl_vars['customizationId']->value); ?> ]" class="edit_product_quantity" value="<?php echo htmlentities($_smarty_tpl->tpl_vars['customization']->value['quantity']); ?> " size="2" /> </span> <?php } ?> </td> <?php if ($_smarty_tpl->tpl_vars['display_warehouse']->value) { ?> <td> </td><?php } ?> <?php if ($_smarty_tpl->tpl_vars['order']->value->hasBeenPaid()) { ?> <td class="text-center"> <?php if (!empty($_smarty_tpl->tpl_vars['product']->value['amount_refund'])) { ?> <?php echo smartyTranslate(array('s' => '%s (%s refund)', 'sprintf' => array($_smarty_tpl->tpl_vars['customization']->value['quantity_refunded'], $_smarty_tpl->tpl_vars['product']->value['amount_refund'])), $_smarty_tpl); ?> <?php } ?> <input type="hidden" value="<?php echo $_smarty_tpl->tpl_vars['product']->value['quantity_refundable']; ?> " class="partialRefundProductQuantity" /> <input type="hidden" value="<?php echo Tools::ps_round($_smarty_tpl->tpl_vars['product_price']->value, 2) * ($_smarty_tpl->tpl_vars['product']->value['product_quantity'] - $_smarty_tpl->tpl_vars['product']->value['customizationQuantityTotal']); ?> " class="partialRefundProductAmount" /> </td> <?php } ?> <?php if ($_smarty_tpl->tpl_vars['order']->value->hasBeenDelivered()) { ?> <td class="text-center"><?php echo $_smarty_tpl->tpl_vars['customization']->value['quantity_returned']; ?> </td><?php } ?> <td class="text-center">-</td> <td class="total_product"> <?php if ($_smarty_tpl->tpl_vars['order']->value->getTaxCalculationMethod() == @constant('PS_TAX_EXC')) { ?> <?php echo $_smarty_tpl->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION]['displayPrice'][0][0]->displayPriceSmarty(array('price' => Tools::ps_round($_smarty_tpl->tpl_vars['product']->value['product_price'] * $_smarty_tpl->tpl_vars['customization']->value['quantity'], 2), 'currency' => intval($_smarty_tpl->tpl_vars['currency']->value->id)), $_smarty_tpl); ?> <?php } else { ?> <?php echo $_smarty_tpl->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION]['displayPrice'][0][0]->displayPriceSmarty(array('price' => Tools::ps_round($_smarty_tpl->tpl_vars['product']->value['product_price_wt'] * $_smarty_tpl->tpl_vars['customization']->value['quantity'], 2), 'currency' => intval($_smarty_tpl->tpl_vars['currency']->value->id)), $_smarty_tpl); ?> <?php } ?> </td> <td class="cancelCheck standard_refund_fields current-edit" style="display:none"> <input type="hidden" name="totalQtyReturn" id="totalQtyReturn" value="<?php echo intval($_smarty_tpl->tpl_vars['customization']->value['quantity_returned']); ?> " /> <input type="hidden" name="totalQty" id="totalQty" value="<?php echo intval($_smarty_tpl->tpl_vars['customization']->value['quantity']); ?> " /> <input type="hidden" name="productName" id="productName" value="<?php echo $_smarty_tpl->tpl_vars['product']->value['product_name']; ?> " /> <?php if ((!$_smarty_tpl->tpl_vars['order']->value->hasBeenDelivered() || Configuration::get('PS_ORDER_RETURN')) && (int) $_smarty_tpl->tpl_vars['customization']->value['quantity_returned'] < (int) $_smarty_tpl->tpl_vars['customization']->value['quantity']) { ?> <input type="checkbox" name="id_customization[<?php echo intval($_smarty_tpl->tpl_vars['customizationId']->value); ?> ]" id="id_customization[<?php echo intval($_smarty_tpl->tpl_vars['customizationId']->value); ?> ]" value="<?php echo intval($_smarty_tpl->tpl_vars['product']->value['id_order_detail']); ?> " onchange="setCancelQuantity(this, <?php echo intval($_smarty_tpl->tpl_vars['customizationId']->value); ?> , <?php echo $_smarty_tpl->tpl_vars['customization']->value['quantity'] - $_smarty_tpl->tpl_vars['product']->value['customizationQuantityTotal'] - $_smarty_tpl->tpl_vars['product']->value['product_quantity_reinjected']; ?> )" <?php if ($_smarty_tpl->tpl_vars['product']->value['product_quantity_return'] + $_smarty_tpl->tpl_vars['product']->value['product_quantity_refunded'] >= $_smarty_tpl->tpl_vars['product']->value['product_quantity']) { ?> disabled="disabled" <?php } ?> /> <?php } else { ?> -- <?php } ?> </td> <td class="cancelQuantity standard_refund_fields current-edit" style="display:none"> <?php if ($_smarty_tpl->tpl_vars['customization']->value['quantity_returned'] + $_smarty_tpl->tpl_vars['customization']->value['quantity_refunded'] >= $_smarty_tpl->tpl_vars['customization']->value['quantity']) { ?> <input type="hidden" name="cancelCustomizationQuantity[<?php echo intval($_smarty_tpl->tpl_vars['customizationId']->value); ?> ]" value="0" /> <?php } elseif (!$_smarty_tpl->tpl_vars['order']->value->hasBeenDelivered() || Configuration::get('PS_ORDER_RETURN')) { ?> <input type="text" id="cancelQuantity_<?php echo intval($_smarty_tpl->tpl_vars['customizationId']->value); ?> " name="cancelCustomizationQuantity[<?php echo intval($_smarty_tpl->tpl_vars['customizationId']->value); ?> ]" size="2" onclick="selectCheckbox(this);" value="" />0/<?php echo $_smarty_tpl->tpl_vars['customization']->value['quantity'] - $_smarty_tpl->tpl_vars['customization']->value['quantity_refunded']; ?> <?php } ?> </td> <td class="partial_refund_fields current-edit" style="display:none; width: 250px;"> <?php if ($_smarty_tpl->tpl_vars['product']->value['quantity_refundable'] > 0) { ?> <?php if ($_smarty_tpl->tpl_vars['order']->value->getTaxCalculationMethod() == @constant('PS_TAX_EXC')) { ?> <?php $_smarty_tpl->tpl_vars['amount_refundable'] = new Smarty_variable($_smarty_tpl->tpl_vars['product']->value['amount_refundable'], null, 0); ?> <?php } else { ?> <?php $_smarty_tpl->tpl_vars['amount_refundable'] = new Smarty_variable($_smarty_tpl->tpl_vars['product']->value['amount_refundable_tax_incl'], null, 0); ?> <?php } ?> <div class="form-group"> <div class="<?php if ($_smarty_tpl->tpl_vars['product']->value['amount_refundable'] > 0) { ?> col-lg-4<?php } else { ?> col-lg-12<?php } ?> "> <label class="control-label"> <?php echo smartyTranslate(array('s' => 'Quantity:'), $_smarty_tpl); ?> </label> <div class="input-group"> <input onchange="checkPartialRefundProductQuantity(this)" type="text" name="partialRefundProductQuantity[<?php echo intval($_smarty_tpl->tpl_vars['product']->value['id_order_detail']); ?> ]" value="<?php if ($_smarty_tpl->tpl_vars['customization']->value['quantity'] - $_smarty_tpl->tpl_vars['customization']->value['quantity_refunded'] > 0) { ?> 1<?php } else { ?> 0<?php } ?> " /> <div class="input-group-addon">/ <?php echo $_smarty_tpl->tpl_vars['product']->value['quantity_refundable']; ?> </div> </div> </div> <div class="<?php if ($_smarty_tpl->tpl_vars['product']->value['quantity_refundable'] > 0) { ?> col-lg-8<?php } else { ?> col-lg-12<?php } ?> "> <label class="control-label"> <span class="title_box "><?php echo smartyTranslate(array('s' => 'Amount:'), $_smarty_tpl); ?> </span> <small class="text-muted">(<?php echo Smarty::$_smarty_vars['capture']['TaxMethod']; ?> )</small> </label> <div class="input-group"> <?php if ($_smarty_tpl->tpl_vars['currency']->value->format % 2) { ?> <div class="input-group-addon"><?php echo $_smarty_tpl->tpl_vars['currency']->value->sign; ?> </div><?php } ?> <input onchange="checkPartialRefundProductAmount(this)" type="text" name="partialRefundProduct[<?php echo intval($_smarty_tpl->tpl_vars['product']->value['id_order_detail']); ?> ]" /> <?php if (!$_smarty_tpl->tpl_vars['currency']->value->format % 2) { ?> <div class="input-group-addon"><?php echo $_smarty_tpl->tpl_vars['currency']->value->sign; ?> </div><?php } ?> </div> <p class="help-block"><i class="icon-warning-sign"></i> <?php echo smartyTranslate(array('s' => '(Max %s %s)', 'sprintf' => array(Tools::displayPrice(Tools::ps_round($_smarty_tpl->tpl_vars['amount_refundable']->value, 2), $_smarty_tpl->tpl_vars['currency']->value->id), Smarty::$_smarty_vars['capture']['TaxMethod'])), $_smarty_tpl); ?> </p> </div> </div> <?php } ?> </td> <?php if ($_smarty_tpl->tpl_vars['can_edit']->value && !$_smarty_tpl->tpl_vars['order']->value->hasBeenDelivered()) { ?> <td class="edit_product_fields" colspan="2" style="display:none"></td> <td class="product_action" style="text-align:right"></td> <?php } ?> </tr> <?php } ?> <?php } } }
public function hookPayment($params) { if ($this->_allowToWork == false) { return; } // One page Checkout cause problem with event and document.write use by twenga script // (page completely deleted if (Configuration::get('PS_ORDER_PROCESS_TYPE') == 1) { return; } $customer = new Customer($params['cart']->id_customer); $currency = new Currency($params['cart']->id_currency); $address = $customer->getAddresses($params['cart']->id_lang); $address = $address[0]; // for 1.3 compatibility $type_both = 3; $type_only_shipping = 5; /* const ONLY_PRODUCTS = 1; const ONLY_DISCOUNTS = 2; const BOTH = 3; const BOTH_WITHOUT_SHIPPING = 4; const ONLY_SHIPPING = 5; const ONLY_WRAPPING = 6; const ONLY_PRODUCTS_WITHOUT_SHIPPING = 7; */ $tva = $params['cart']->getOrderTotal(true, $type_both) - $params['cart']->getOrderTotal(false, $type_both); $tax = $tva * 100 / $params['cart']->getOrderTotal(true, $type_both); $params_to_twenga = array(); // @todo delete or not ?? // $params_to_twenga['user_id'] = $customer->id; // $params_to_twenga['cli_email'] = $customer->email; $params_to_twenga['total_ht'] = $params['cart']->getOrderTotal(false, Twenga::ONLY_PRODUCTS_WITHOUT_SHIPPING); $params_to_twenga['basket_id'] = $params['cart']->id; $params_to_twenga['currency'] = $currency->iso_code; $params_to_twenga['total_ttc'] = $params['cart']->getOrderTotal(true, Twenga::BOTH); $params_to_twenga['shipping'] = $params['cart']->getOrderTotal(true, Twenga::ONLY_SHIPPING); $params_to_twenga['tax'] = Tools::ps_round($tax, 2); $params_to_twenga['tva'] = $tva; $params_to_twenga['cli_firstname'] = $customer->firstname; $params_to_twenga['cli_lastname'] = $customer->lastname; $params_to_twenga['cli_city'] = $address['city']; $params_to_twenga['cli_state'] = $address['state']; $params_to_twenga['cli_country'] = $address['country']; $params_to_twenga['items'] = array(); foreach ($params['cart']->getProducts() as $product) { $arr_item = array(); if ($product['total'] != '') { $arr_item['total_ht'] = (double) $product['total']; } if ($product['cart_quantity'] != '') { $arr_item['quantity'] = (int) $product['cart_quantity']; } if ($product['reference'] != '') { $arr_item['sku'] = (string) $product['reference']; } if ($product['name'] != '') { $arr_item['name'] = (string) $product['name']; } if ($product['category']) { $arr_item['category_name'] = (string) $product['category']; } $params_to_twenga['items'][] = $arr_item; } $params_to_twenga = array_filter($params_to_twenga); try { // twenga don't saved double orders with the same id, // so don't need to use TwengaObj::orderExist() method. $tracking_code = self::$obj_twenga->getTrackingScript($params_to_twenga); return $tracking_code; } catch (TwengaFieldsException $e) { return $this->l('Error occurred when params passed in Twenga API') . ' : <br />' . $e->getMessage(); } catch (Exception $e) { return $e->getMessage(); } }
public function getPackageShippingCost($id_carrier = null, $use_tax = true, Country $default_country = null, $product_list = null, $id_zone = null) { if (!Configuration::get('LEGAL_SHIPTAXMETH')) { return parent::getPackageShippingCost($id_carrier, $use_tax, $default_country, $product_list, $id_zone); } if ($this->isVirtualCart()) { return 0; } if (!$default_country) { $default_country = Context::getContext()->country; } if (!is_null($product_list)) { foreach ($product_list as $key => $value) { if ($value['is_virtual'] == 1) { unset($product_list[$key]); } } } $complete_product_list = $this->getProducts(); if (is_null($product_list)) { $products = $complete_product_list; } else { $products = $product_list; } if (Configuration::get('PS_TAX_ADDRESS_TYPE') == 'id_address_invoice') { $address_id = (int) $this->id_address_invoice; } elseif (count($product_list)) { $prod = current($product_list); $address_id = (int) $prod['id_address_delivery']; } else { $address_id = null; } if (!Address::addressExists($address_id)) { $address_id = null; } $cache_id = 'getPackageShippingCost_' . (int) $this->id . '_' . (int) $address_id . '_' . (int) $id_carrier . '_' . (int) $use_tax . '_' . (int) $default_country->id; if ($products) { foreach ($products as $product) { $cache_id .= '_' . (int) $product['id_product'] . '_' . (int) $product['id_product_attribute']; } } if (Cache::isStored($cache_id)) { return Cache::retrieve($cache_id); } // Order total in default currency without fees $order_total = $this->getOrderTotal(true, Cart::ONLY_PHYSICAL_PRODUCTS_WITHOUT_SHIPPING, $product_list); // Start with shipping cost at 0 $shipping_cost = 0; // If no product added, return 0 if (!count($products)) { Cache::store($cache_id, $shipping_cost); return $shipping_cost; } if (!isset($id_zone)) { // Get id zone if (!$this->isMultiAddressDelivery() && isset($this->id_address_delivery) && $this->id_address_delivery && Customer::customerHasAddress($this->id_customer, $this->id_address_delivery)) { $id_zone = Address::getZoneById((int) $this->id_address_delivery); } else { if (!Validate::isLoadedObject($default_country)) { $default_country = new Country(Configuration::get('PS_COUNTRY_DEFAULT'), Configuration::get('PS_LANG_DEFAULT')); } $id_zone = (int) $default_country->id_zone; } } if ($id_carrier && !$this->isCarrierInRange((int) $id_carrier, (int) $id_zone)) { $id_carrier = ''; } if (empty($id_carrier) && $this->isCarrierInRange((int) Configuration::get('PS_CARRIER_DEFAULT'), (int) $id_zone)) { $id_carrier = (int) Configuration::get('PS_CARRIER_DEFAULT'); } $total_package_without_shipping_tax_inc = $this->getOrderTotal(true, Cart::BOTH_WITHOUT_SHIPPING, $product_list); if (empty($id_carrier)) { if ((int) $this->id_customer) { $customer = new Customer((int) $this->id_customer); $result = Carrier::getCarriers((int) Configuration::get('PS_LANG_DEFAULT'), true, false, (int) $id_zone, $customer->getGroups()); unset($customer); } else { $result = Carrier::getCarriers((int) Configuration::get('PS_LANG_DEFAULT'), true, false, (int) $id_zone); } foreach ($result as $k => $row) { if ($row['id_carrier'] == Configuration::get('PS_CARRIER_DEFAULT')) { continue; } if (!isset(self::$_carriers[$row['id_carrier']])) { self::$_carriers[$row['id_carrier']] = new Carrier((int) $row['id_carrier']); } $carrier = self::$_carriers[$row['id_carrier']]; // Get only carriers that are compliant with shipping method if ($carrier->getShippingMethod() == Carrier::SHIPPING_METHOD_WEIGHT && $carrier->getMaxDeliveryPriceByWeight((int) $id_zone) === false || $carrier->getShippingMethod() == Carrier::SHIPPING_METHOD_PRICE && $carrier->getMaxDeliveryPriceByPrice((int) $id_zone) === false) { unset($result[$k]); continue; } // If out-of-range behavior carrier is set on "Desactivate carrier" if ($row['range_behavior']) { $check_delivery_price_by_weight = Carrier::checkDeliveryPriceByWeight($row['id_carrier'], $this->getTotalWeight(), (int) $id_zone); $total_order = $total_package_without_shipping_tax_inc; $check_delivery_price_by_price = Carrier::checkDeliveryPriceByPrice($row['id_carrier'], $total_order, (int) $id_zone, (int) $this->id_currency); // Get only carriers that have a range compatible with cart if ($carrier->getShippingMethod() == Carrier::SHIPPING_METHOD_WEIGHT && !$check_delivery_price_by_weight || $carrier->getShippingMethod() == Carrier::SHIPPING_METHOD_PRICE && !$check_delivery_price_by_price) { unset($result[$k]); continue; } } if ($carrier->getShippingMethod() == Carrier::SHIPPING_METHOD_WEIGHT) { $shipping = $carrier->getDeliveryPriceByWeight($this->getTotalWeight($product_list), (int) $id_zone); } else { $shipping = $carrier->getDeliveryPriceByPrice($order_total, (int) $id_zone, (int) $this->id_currency); } if (!isset($min_shipping_price)) { $min_shipping_price = $shipping; } if ($shipping <= $min_shipping_price) { $id_carrier = (int) $row['id_carrier']; $min_shipping_price = $shipping; } } } if (empty($id_carrier)) { $id_carrier = Configuration::get('PS_CARRIER_DEFAULT'); } if (!isset(self::$_carriers[$id_carrier])) { self::$_carriers[$id_carrier] = new Carrier((int) $id_carrier, Configuration::get('PS_LANG_DEFAULT')); } $carrier = self::$_carriers[$id_carrier]; // No valid Carrier or $id_carrier <= 0 ? if (!Validate::isLoadedObject($carrier)) { Cache::store($cache_id, 0); return 0; } if (!$carrier->active) { Cache::store($cache_id, $shipping_cost); return $shipping_cost; } // Free fees if free carrier if ($carrier->is_free == 1) { Cache::store($cache_id, 0); return 0; } // Select carrier tax if ($use_tax && !Tax::excludeTaxeOption()) { $address = Address::initialize((int) $address_id); $carrier_tax = $carrier->getTaxesRate($address); } $configuration = Configuration::getMultiple(array('PS_SHIPPING_FREE_PRICE', 'PS_SHIPPING_HANDLING', 'PS_SHIPPING_METHOD', 'PS_SHIPPING_FREE_WEIGHT')); // Free fees $free_fees_price = 0; if (isset($configuration['PS_SHIPPING_FREE_PRICE'])) { $free_fees_price = Tools::convertPrice((double) $configuration['PS_SHIPPING_FREE_PRICE'], Currency::getCurrencyInstance((int) $this->id_currency)); } $orderTotalwithDiscounts = $this->getOrderTotal(true, Cart::BOTH_WITHOUT_SHIPPING, null, null, false); if ($orderTotalwithDiscounts >= (double) $free_fees_price && (double) $free_fees_price > 0) { Cache::store($cache_id, $shipping_cost); return $shipping_cost; } if (isset($configuration['PS_SHIPPING_FREE_WEIGHT']) && $this->getTotalWeight() >= (double) $configuration['PS_SHIPPING_FREE_WEIGHT'] && (double) $configuration['PS_SHIPPING_FREE_WEIGHT'] > 0) { Cache::store($cache_id, $shipping_cost); return $shipping_cost; } // Get shipping cost using correct method if ($carrier->range_behavior) { if (!isset($id_zone)) { // Get id zone if (isset($this->id_address_delivery) && $this->id_address_delivery && Customer::customerHasAddress($this->id_customer, $this->id_address_delivery)) { $id_zone = Address::getZoneById((int) $this->id_address_delivery); } else { $id_zone = (int) $default_country->id_zone; } } if ($carrier->getShippingMethod() == Carrier::SHIPPING_METHOD_WEIGHT && !Carrier::checkDeliveryPriceByWeight($carrier->id, $this->getTotalWeight(), (int) $id_zone) || $carrier->getShippingMethod() == Carrier::SHIPPING_METHOD_PRICE && !Carrier::checkDeliveryPriceByPrice($carrier->id, $total_package_without_shipping_tax_inc, $id_zone, (int) $this->id_currency)) { $shipping_cost += 0; } else { if ($carrier->getShippingMethod() == Carrier::SHIPPING_METHOD_WEIGHT) { $shipping_cost += $carrier->getDeliveryPriceByWeight($this->getTotalWeight($product_list), $id_zone); } else { // by price $shipping_cost += $carrier->getDeliveryPriceByPrice($order_total, $id_zone, (int) $this->id_currency); } } } else { if ($carrier->getShippingMethod() == Carrier::SHIPPING_METHOD_WEIGHT) { $shipping_cost += $carrier->getDeliveryPriceByWeight($this->getTotalWeight($product_list), $id_zone); } else { $shipping_cost += $carrier->getDeliveryPriceByPrice($order_total, $id_zone, (int) $this->id_currency); } } // Adding handling charges if (isset($configuration['PS_SHIPPING_HANDLING']) && $carrier->shipping_handling) { $shipping_cost += (double) $configuration['PS_SHIPPING_HANDLING']; } // Additional Shipping Cost per product foreach ($products as $product) { if (!$product['is_virtual']) { $shipping_cost += $product['additional_shipping_cost'] * $product['cart_quantity']; } } $shipping_cost = Tools::convertPrice($shipping_cost, Currency::getCurrencyInstance((int) $this->id_currency)); //get external shipping cost from module if ($carrier->shipping_external) { $module_name = $carrier->external_module_name; $module = Module::getInstanceByName($module_name); if (Validate::isLoadedObject($module)) { if (array_key_exists('id_carrier', $module)) { $module->id_carrier = $carrier->id; } if ($carrier->need_range) { if (method_exists($module, 'getPackageShippingCost')) { $shipping_cost = $module->getPackageShippingCost($this, $shipping_cost, $products); } else { $shipping_cost = $module->getOrderShippingCost($this, $shipping_cost); } } else { $shipping_cost = $module->getOrderShippingCostExternal($this); } // Check if carrier is available if ($shipping_cost === false) { Cache::store($cache_id, false); return false; } } else { Cache::store($cache_id, false); return false; } } $shipping_cost = (double) Tools::ps_round((double) $shipping_cost, 2); Cache::store($cache_id, $shipping_cost); return $shipping_cost; }
/** * Returns the ecotax taxes breakdown * * @since 1.5 * @return array */ public function getEcoTaxTaxesBreakdown() { $result = Db::getInstance()->executeS(' SELECT `ecotax_tax_rate` as `rate`, SUM(`ecotax` * `product_quantity`) as `ecotax_tax_excl`, SUM(`ecotax` * `product_quantity`) as `ecotax_tax_incl` FROM `' . _DB_PREFIX_ . 'order_detail` WHERE `id_order` = ' . (int) $this->id_order . ' AND `id_order_invoice` = ' . (int) $this->id . ' GROUP BY `ecotax_tax_rate`'); $taxes = array(); foreach ($result as $row) { if ($row['ecotax_tax_excl'] > 0) { $row['ecotax_tax_incl'] = Tools::ps_round($row['ecotax_tax_excl'] + $row['ecotax_tax_excl'] * $row['rate'] / 100, _PS_PRICE_DISPLAY_PRECISION_); $row['ecotax_tax_excl'] = Tools::ps_round($row['ecotax_tax_excl'], _PS_PRICE_DISPLAY_PRECISION_); $taxes[] = $row; } } return $taxes; }
function content_564b5c4ce69b44_84864285($_smarty_tpl) { ?> <input type="hidden" name="supplier_loaded" value="1"> <?php if (isset($_smarty_tpl->tpl_vars['product']->value->id)) { ?> <div id="product-suppliers" class="panel product-tab"> <input type="hidden" name="submitted_tabs[]" value="Suppliers" /> <h3><?php echo smartyTranslate(array('s' => 'Suppliers of the current product'), $_smarty_tpl); ?> </h3> <div class="alert alert-info"> <?php echo smartyTranslate(array('s' => 'This interface allows you to specify the suppliers of the current product and eventually its combinations.'), $_smarty_tpl); ?> <br /> <?php echo smartyTranslate(array('s' => 'It is also possible to specify supplier references according to previously associated suppliers.'), $_smarty_tpl); ?> <br /> <br /> <?php echo smartyTranslate(array('s' => 'When using the advanced stock management tool (see Preferences/Products), the values you define (prices, references) will be used in supply orders.'), $_smarty_tpl); ?> </div> <label><?php echo smartyTranslate(array('s' => 'Please choose the suppliers associated with this product. Please select a default supplier, as well.'), $_smarty_tpl); ?> </label> <table class="table"> <thead> <tr> <th class="fixed-width-xs"><span class="title_box"><?php echo smartyTranslate(array('s' => 'Selected'), $_smarty_tpl); ?> </span></th> <th><span class="title_box"><?php echo smartyTranslate(array('s' => 'Supplier Name'), $_smarty_tpl); ?> </span></th> <th class="fixed-width-xs"><span class="title_box"><?php echo smartyTranslate(array('s' => 'Default'), $_smarty_tpl); ?> </span></th> </tr> </thead> <tbody> <?php $_smarty_tpl->tpl_vars['supplier'] = new Smarty_Variable(); $_smarty_tpl->tpl_vars['supplier']->_loop = false; $_from = $_smarty_tpl->tpl_vars['suppliers']->value; if (!is_array($_from) && !is_object($_from)) { settype($_from, 'array'); } foreach ($_from as $_smarty_tpl->tpl_vars['supplier']->key => $_smarty_tpl->tpl_vars['supplier']->value) { $_smarty_tpl->tpl_vars['supplier']->_loop = true; ?> <tr> <td><input type="checkbox" class="supplierCheckBox" name="check_supplier_<?php echo $_smarty_tpl->tpl_vars['supplier']->value['id_supplier']; ?> " <?php if ($_smarty_tpl->tpl_vars['supplier']->value['is_selected'] == true) { ?> checked="checked"<?php } ?> value="<?php echo $_smarty_tpl->tpl_vars['supplier']->value['id_supplier']; ?> " /></td> <td><?php echo $_smarty_tpl->tpl_vars['supplier']->value['name']; ?> </td> <td><input type="radio" id="default_supplier_<?php echo $_smarty_tpl->tpl_vars['supplier']->value['id_supplier']; ?> " name="default_supplier" value="<?php echo $_smarty_tpl->tpl_vars['supplier']->value['id_supplier']; ?> " <?php if ($_smarty_tpl->tpl_vars['supplier']->value['is_selected'] == false) { ?> disabled="disabled"<?php } ?> <?php if ($_smarty_tpl->tpl_vars['supplier']->value['is_default'] == true) { ?> checked="checked"<?php } ?> /></td> </tr> <?php } ?> </tbody> </table> <a class="btn btn-link bt-icon confirm_leave" href="<?php echo htmlspecialchars($_smarty_tpl->tpl_vars['link']->value->getAdminLink('AdminSuppliers'), ENT_QUOTES, 'UTF-8', true); ?> &addsupplier"> <i class="icon-plus"></i> <?php echo smartyTranslate(array('s' => 'Create a new supplier'), $_smarty_tpl); ?> <i class="icon-external-link-sign"></i> </a> <div class="panel-footer"> <a href="<?php echo htmlspecialchars($_smarty_tpl->tpl_vars['link']->value->getAdminLink('AdminProducts'), ENT_QUOTES, 'UTF-8', true); if (isset($_REQUEST['page']) && $_REQUEST['page'] > 1) { ?> &submitFilterproduct=<?php echo intval($_REQUEST['page']); } ?> " class="btn btn-default"><i class="process-icon-cancel"></i> <?php echo smartyTranslate(array('s' => 'Cancel'), $_smarty_tpl); ?> </a> <button type="submit" name="submitAddproduct" class="btn btn-default pull-right" disabled="disabled"><i class="process-icon-loading"></i> <?php echo smartyTranslate(array('s' => 'Save'), $_smarty_tpl); ?> </button> <button type="submit" name="submitAddproductAndStay" class="btn btn-default pull-right" disabled="disabled"><i class="process-icon-loading"></i> <?php echo smartyTranslate(array('s' => 'Save and stay'), $_smarty_tpl); ?> </button> </div> </div> <div class="panel"> <h3><?php echo smartyTranslate(array('s' => 'Supplier reference(s)'), $_smarty_tpl); ?> </h3> <div class="alert alert-info"> <?php if (count($_smarty_tpl->tpl_vars['associated_suppliers']->value) == 0) { ?> <?php echo smartyTranslate(array('s' => 'You must specify the suppliers associated with this product. You must also select the default product supplier before setting references.'), $_smarty_tpl); ?> <?php } else { ?> <?php echo smartyTranslate(array('s' => 'You can specify product reference(s) for each associated supplier.'), $_smarty_tpl); ?> <?php } ?> <?php echo smartyTranslate(array('s' => 'Click "Save and Stay" after changing selected suppliers to display the associated product references.'), $_smarty_tpl); ?> </div> <div class="panel-group" id="accordion-supplier"> <?php $_smarty_tpl->tpl_vars['supplier'] = new Smarty_Variable(); $_smarty_tpl->tpl_vars['supplier']->_loop = false; $_from = $_smarty_tpl->tpl_vars['associated_suppliers']->value; if (!is_array($_from) && !is_object($_from)) { settype($_from, 'array'); } foreach ($_from as $_smarty_tpl->tpl_vars['supplier']->key => $_smarty_tpl->tpl_vars['supplier']->value) { $_smarty_tpl->tpl_vars['supplier']->_loop = true; ?> <div class="panel"> <div class="panel-heading"> <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion-supplier" href="#supplier-<?php echo $_smarty_tpl->tpl_vars['supplier']->value->id; ?> "><?php if (isset($_smarty_tpl->tpl_vars['supplier']->value->name)) { echo $_smarty_tpl->tpl_vars['supplier']->value->name; } ?> </a> </div> <div id="supplier-<?php echo $_smarty_tpl->tpl_vars['supplier']->value->id; ?> "> <div class="panel-body"> <table class="table"> <thead> <tr> <th><span class="title_box"><?php echo smartyTranslate(array('s' => 'Product name'), $_smarty_tpl); ?> </span></th> <th><span class="title_box"><?php echo smartyTranslate(array('s' => 'Supplier reference'), $_smarty_tpl); ?> </span></th> <th><span class="title_box"><?php echo smartyTranslate(array('s' => 'Unit price tax excluded'), $_smarty_tpl); ?> </span></th> <th><span class="title_box"><?php echo smartyTranslate(array('s' => 'Unit price currency'), $_smarty_tpl); ?> </span></th> </tr> </thead> <tbody> <?php $_smarty_tpl->tpl_vars['attribute'] = new Smarty_Variable(); $_smarty_tpl->tpl_vars['attribute']->_loop = false; $_smarty_tpl->tpl_vars['index'] = new Smarty_Variable(); $_from = $_smarty_tpl->tpl_vars['attributes']->value; if (!is_array($_from) && !is_object($_from)) { settype($_from, 'array'); } foreach ($_from as $_smarty_tpl->tpl_vars['attribute']->key => $_smarty_tpl->tpl_vars['attribute']->value) { $_smarty_tpl->tpl_vars['attribute']->_loop = true; $_smarty_tpl->tpl_vars['index']->value = $_smarty_tpl->tpl_vars['attribute']->key; ?> <?php $_smarty_tpl->tpl_vars['reference'] = new Smarty_variable('', null, 0); ?> <?php $_smarty_tpl->tpl_vars['price_te'] = new Smarty_variable('', null, 0); ?> <?php $_smarty_tpl->tpl_vars['id_currency'] = new Smarty_variable($_smarty_tpl->tpl_vars['id_default_currency']->value, null, 0); ?> <?php $_smarty_tpl->tpl_vars['asc'] = new Smarty_Variable(); $_smarty_tpl->tpl_vars['asc']->_loop = false; $_from = $_smarty_tpl->tpl_vars['associated_suppliers_collection']->value; if (!is_array($_from) && !is_object($_from)) { settype($_from, 'array'); } foreach ($_from as $_smarty_tpl->tpl_vars['asc']->key => $_smarty_tpl->tpl_vars['asc']->value) { $_smarty_tpl->tpl_vars['asc']->_loop = true; ?> <?php if ($_smarty_tpl->tpl_vars['asc']->value->id_product == $_smarty_tpl->tpl_vars['attribute']->value['id_product'] && $_smarty_tpl->tpl_vars['asc']->value->id_product_attribute == $_smarty_tpl->tpl_vars['attribute']->value['id_product_attribute'] && $_smarty_tpl->tpl_vars['asc']->value->id_supplier == $_smarty_tpl->tpl_vars['supplier']->value->id_supplier) { ?> <?php $_smarty_tpl->tpl_vars['reference'] = new Smarty_variable($_smarty_tpl->tpl_vars['asc']->value->product_supplier_reference, null, 0); ?> <?php $_smarty_tpl->tpl_vars['price_te'] = new Smarty_variable(Tools::ps_round($_smarty_tpl->tpl_vars['asc']->value->product_supplier_price_te, 2), null, 0); ?> <?php if ($_smarty_tpl->tpl_vars['asc']->value->id_currency) { ?> <?php $_smarty_tpl->tpl_vars['id_currency'] = new Smarty_variable($_smarty_tpl->tpl_vars['asc']->value->id_currency, null, 0); ?> <?php } ?> <?php } ?> <?php } ?> <tr <?php if (1 & $_smarty_tpl->tpl_vars['index']->value) { ?> class="alt_row"<?php } ?> > <td><?php echo $_smarty_tpl->tpl_vars['product_designation']->value[$_smarty_tpl->tpl_vars['attribute']->value['id_product_attribute']]; ?> </td> <td> <input type="text" value="<?php echo htmlspecialchars($_smarty_tpl->tpl_vars['reference']->value, ENT_QUOTES, 'UTF-8', true); ?> " name="supplier_reference_<?php echo $_smarty_tpl->tpl_vars['attribute']->value['id_product']; ?> _<?php echo $_smarty_tpl->tpl_vars['attribute']->value['id_product_attribute']; ?> _<?php echo $_smarty_tpl->tpl_vars['supplier']->value->id_supplier; ?> " /> </td> <td> <input type="text" value="<?php echo htmlentities($_smarty_tpl->tpl_vars['price_te']->value); ?> " name="product_price_<?php echo $_smarty_tpl->tpl_vars['attribute']->value['id_product']; ?> _<?php echo $_smarty_tpl->tpl_vars['attribute']->value['id_product_attribute']; ?> _<?php echo $_smarty_tpl->tpl_vars['supplier']->value->id_supplier; ?> " /> </td> <td> <select name="product_price_currency_<?php echo $_smarty_tpl->tpl_vars['attribute']->value['id_product']; ?> _<?php echo $_smarty_tpl->tpl_vars['attribute']->value['id_product_attribute']; ?> _<?php echo $_smarty_tpl->tpl_vars['supplier']->value->id_supplier; ?> "> <?php $_smarty_tpl->tpl_vars['currency'] = new Smarty_Variable(); $_smarty_tpl->tpl_vars['currency']->_loop = false; $_from = $_smarty_tpl->tpl_vars['currencies']->value; if (!is_array($_from) && !is_object($_from)) { settype($_from, 'array'); } foreach ($_from as $_smarty_tpl->tpl_vars['currency']->key => $_smarty_tpl->tpl_vars['currency']->value) { $_smarty_tpl->tpl_vars['currency']->_loop = true; ?> <option value="<?php echo $_smarty_tpl->tpl_vars['currency']->value['id_currency']; ?> " <?php if ($_smarty_tpl->tpl_vars['currency']->value['id_currency'] == $_smarty_tpl->tpl_vars['id_currency']->value) { ?> selected="selected"<?php } ?> ><?php echo $_smarty_tpl->tpl_vars['currency']->value['name']; ?> </option> <?php } ?> </select> </td> </tr> <?php } ?> </tbody> </table> </div> </div> </div> <?php } ?> </div> <div class="panel-footer"> <a href="<?php echo htmlspecialchars($_smarty_tpl->tpl_vars['link']->value->getAdminLink('AdminProducts'), ENT_QUOTES, 'UTF-8', true); if (isset($_REQUEST['page']) && $_REQUEST['page'] > 1) { ?> &submitFilterproduct=<?php echo intval($_REQUEST['page']); } ?> " class="btn btn-default"><i class="process-icon-cancel"></i> <?php echo smartyTranslate(array('s' => 'Cancel'), $_smarty_tpl); ?> </a> <button type="submit" name="submitAddproduct" class="btn btn-default pull-right" disabled="disabled"><i class="process-icon-loading"></i> <?php echo smartyTranslate(array('s' => 'Save'), $_smarty_tpl); ?> </button> <button type="submit" name="submitAddproductAndStay" class="btn btn-default pull-right" disabled="disabled"><i class="process-icon-loading"></i> <?php echo smartyTranslate(array('s' => 'Save and stay'), $_smarty_tpl); ?> </button> </div> </div> <?php } }
public function ajaxProcessEditProductOnOrder() { // Return value $res = true; $order = new Order((int) Tools::getValue('id_order')); $order_detail = new OrderDetail((int) Tools::getValue('product_id_order_detail')); if (Tools::isSubmit('product_invoice')) { $order_invoice = new OrderInvoice((int) Tools::getValue('product_invoice')); } // Check fields validity $this->doEditProductValidation($order_detail, $order, isset($order_invoice) ? $order_invoice : null); // If multiple product_quantity, the order details concern a product customized $product_quantity = 0; if (is_array(Tools::getValue('product_quantity'))) { foreach (Tools::getValue('product_quantity') as $id_customization => $qty) { // Update quantity of each customization Db::getInstance()->update('customization', array('quantity' => $qty), 'id_customization = ' . (int) $id_customization); // Calculate the real quantity of the product $product_quantity += $qty; } } else { $product_quantity = Tools::getValue('product_quantity'); } $product_price_tax_incl = Tools::ps_round(Tools::getValue('product_price_tax_incl'), 2); $product_price_tax_excl = Tools::ps_round(Tools::getValue('product_price_tax_excl'), 2); $total_products_tax_incl = $product_price_tax_incl * $product_quantity; $total_products_tax_excl = $product_price_tax_excl * $product_quantity; // Calculate differences of price (Before / After) $diff_price_tax_incl = $total_products_tax_incl - $order_detail->total_price_tax_incl; $diff_price_tax_excl = $total_products_tax_excl - $order_detail->total_price_tax_excl; // Apply change on OrderInvoice if (isset($order_invoice)) { // If OrderInvoice to use is different, we update the old invoice and new invoice if ($order_detail->id_order_invoice != $order_invoice->id) { $old_order_invoice = new OrderInvoice($order_detail->id_order_invoice); // We remove cost of products $old_order_invoice->total_products -= $order_detail->total_price_tax_excl; $old_order_invoice->total_products_wt -= $order_detail->total_price_tax_incl; $old_order_invoice->total_paid_tax_excl -= $order_detail->total_price_tax_excl; $old_order_invoice->total_paid_tax_incl -= $order_detail->total_price_tax_incl; $res &= $old_order_invoice->update(); $order_invoice->total_products += $order_detail->total_price_tax_excl; $order_invoice->total_products_wt += $order_detail->total_price_tax_incl; $order_invoice->total_paid_tax_excl += $order_detail->total_price_tax_excl; $order_invoice->total_paid_tax_incl += $order_detail->total_price_tax_incl; $order_detail->id_order_invoice = $order_invoice->id; } } if ($diff_price_tax_incl != 0 && $diff_price_tax_excl != 0) { $order_detail->unit_price_tax_excl = $product_price_tax_excl; $order_detail->unit_price_tax_incl = $product_price_tax_incl; $order_detail->total_price_tax_incl += $diff_price_tax_incl; $order_detail->total_price_tax_excl += $diff_price_tax_excl; if (isset($order_invoice)) { // Apply changes on OrderInvoice $order_invoice->total_products += $diff_price_tax_excl; $order_invoice->total_products_wt += $diff_price_tax_incl; $order_invoice->total_paid_tax_excl += $diff_price_tax_excl; $order_invoice->total_paid_tax_incl += $diff_price_tax_incl; } // Apply changes on Order $order = new Order($order_detail->id_order); $order->total_products += $diff_price_tax_excl; $order->total_products_wt += $diff_price_tax_incl; $order->total_paid += $diff_price_tax_incl; $order->total_paid_tax_excl += $diff_price_tax_excl; $order->total_paid_tax_incl += $diff_price_tax_incl; $res &= $order->update(); } $old_quantity = $order_detail->product_quantity; $order_detail->product_quantity = $product_quantity; // update taxes $res &= $order_detail->updateTaxAmount($order); // Save order detail $res &= $order_detail->update(); // Update weight SUM $order_carrier = new OrderCarrier((int) $order->getIdOrderCarrier()); if (Validate::isLoadedObject($order_carrier)) { $order_carrier->weight = (double) $order->getTotalWeight(); $res &= $order_carrier->update(); if ($res) { $order->weight = sprintf("%.3f " . Configuration::get('PS_WEIGHT_UNIT'), $order_carrier->weight); } } // Save order invoice if (isset($order_invoice)) { $res &= $order_invoice->update(); } // Update product available quantity StockAvailable::updateQuantity($order_detail->product_id, $order_detail->product_attribute_id, $old_quantity - $order_detail->product_quantity, $order->id_shop); $products = $this->getProducts($order); // Get the last product $product = $products[$order_detail->id]; $resume = OrderSlip::getProductSlipResume($order_detail->id); $product['quantity_refundable'] = $product['product_quantity'] - $resume['product_quantity']; $product['amount_refundable'] = $product['total_price_tax_incl'] - $resume['amount_tax_incl']; $product['amount_refund'] = Tools::displayPrice($resume['amount_tax_incl']); $product['refund_history'] = OrderSlip::getProductSlipDetail($order_detail->id); if ($product['id_warehouse'] != 0) { $warehouse = new Warehouse((int) $product['id_warehouse']); $product['warehouse_name'] = $warehouse->name; } else { $product['warehouse_name'] = '--'; } // Get invoices collection $invoice_collection = $order->getInvoicesCollection(); $invoice_array = array(); foreach ($invoice_collection as $invoice) { $invoice->name = $invoice->getInvoiceNumberFormatted(Context::getContext()->language->id, (int) $order->id_shop); $invoice_array[] = $invoice; } // Assign to smarty informations in order to show the new product line $this->context->smarty->assign(array('product' => $product, 'order' => $order, 'currency' => new Currency($order->id_currency), 'can_edit' => $this->tabAccess['edit'], 'invoices_collection' => $invoice_collection, 'current_id_lang' => Context::getContext()->language->id, 'link' => Context::getContext()->link, 'current_index' => self::$currentIndex, 'display_warehouse' => (int) Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT'))); if (!$res) { die(Tools::jsonEncode(array('result' => $res, 'error' => Tools::displayError('An error occurred while editing the product line.')))); } if (is_array(Tools::getValue('product_quantity'))) { $view = $this->createTemplate('_customized_data.tpl')->fetch(); } else { $view = $this->createTemplate('_product_line.tpl')->fetch(); } $this->sendChangedNotification($order); die(Tools::jsonEncode(array('result' => $res, 'view' => $view, 'can_edit' => $this->tabAccess['add'], 'invoices_collection' => $invoice_collection, 'order' => $order, 'invoices' => $invoice_array, 'documents_html' => $this->createTemplate('_documents.tpl')->fetch(), 'shipping_html' => $this->createTemplate('_shipping.tpl')->fetch(), 'customized_product' => is_array(Tools::getValue('product_quantity'))))); }
private function _validateOrder($cart, $marketplace) { $payment = new SFPayment(); $payment->name = 'SFPayment'; $payment->active = true; //we need to flush the cart because of cache problems $cart->getPackageList(true); $cart->getDeliveryOptionList(null, true); $cart->getDeliveryOption(null, false, false); $payment->validateOrder((int) $cart->id, 2, (double) Tools::ps_round(Tools::convertPrice($cart->getOrderTotal(), new Currency($cart->id_currency)), 2), $marketplace, null, array(), $cart->id_currency, false, $cart->secure_key); return $payment; }
/** * Set the additional shipping information * * @param Order $order * @param $product */ public function setShippingCost(Order $order, $product) { $tax_rate = 0; $carrier = OrderInvoice::getCarrier((int) $this->id_order_invoice); if (isset($carrier) && Validate::isLoadedObject($carrier)) { $tax_rate = $carrier->getTaxesRate(new Address((int) $order->{Configuration::get('PS_TAX_ADDRESS_TYPE')})); } $this->total_shipping_price_tax_excl = (double) $product['additional_shipping_cost']; $this->total_shipping_price_tax_incl = (double) ($this->total_shipping_price_tax_excl * (1 + $tax_rate / 100)); $this->total_shipping_price_tax_incl = Tools::ps_round($this->total_shipping_price_tax_incl, 2); }
/** * Return useful informations for cart * * @return array Cart details */ public function getSummaryDetails($id_lang = null, $refresh = false) { $context = Context::getContext(); if (!$id_lang) { $id_lang = $context->language->id; } $delivery = new Address((int) $this->id_address_delivery); $invoice = new Address((int) $this->id_address_invoice); // New layout system with personalization fields $formatted_addresses = array('delivery' => AddressFormat::getFormattedLayoutData($delivery), 'invoice' => AddressFormat::getFormattedLayoutData($invoice)); $base_total_tax_inc = $this->getOrderTotal(true); $base_total_tax_exc = $this->getOrderTotal(false); $total_tax = $base_total_tax_inc - $base_total_tax_exc; if ($total_tax < 0) { $total_tax = 0; } $currency = new Currency($this->id_currency); $products = $this->getProducts($refresh); $gift_products = array(); $cart_rules = $this->getCartRules(); $total_shipping = $this->getTotalShippingCost(); $total_shipping_tax_exc = $this->getTotalShippingCost(null, false); $total_products_wt = $this->getOrderTotal(true, Cart::ONLY_PRODUCTS); $total_products = $this->getOrderTotal(false, Cart::ONLY_PRODUCTS); $total_discounts = $this->getOrderTotal(true, Cart::ONLY_DISCOUNTS); $total_discounts_tax_exc = $this->getOrderTotal(false, Cart::ONLY_DISCOUNTS); // The cart content is altered for display foreach ($cart_rules as &$cart_rule) { // If the cart rule is automatic (wihtout any code) and include free shipping, it should not be displayed as a cart rule but only set the shipping cost to 0 if ($cart_rule['free_shipping'] && (empty($cart_rule['code']) || preg_match('/^' . CartRule::BO_ORDER_CODE_PREFIX . '[0-9]+/', $cart_rule['code']))) { $cart_rule['value_real'] -= $total_shipping; $cart_rule['value_tax_exc'] -= $total_shipping_tax_exc; $cart_rule['value_real'] = Tools::ps_round($cart_rule['value_real'], (int) $context->currency->decimals * _PS_PRICE_DISPLAY_PRECISION_); $cart_rule['value_tax_exc'] = Tools::ps_round($cart_rule['value_tax_exc'], (int) $context->currency->decimals * _PS_PRICE_DISPLAY_PRECISION_); if ($total_discounts > $cart_rule['value_real']) { $total_discounts -= $total_shipping; } if ($total_discounts_tax_exc > $cart_rule['value_tax_exc']) { $total_discounts_tax_exc -= $total_shipping_tax_exc; } // Update total shipping $total_shipping = 0; $total_shipping_tax_exc = 0; } if ($cart_rule['gift_product']) { foreach ($products as $key => &$product) { if (empty($product['gift']) && $product['id_product'] == $cart_rule['gift_product'] && $product['id_product_attribute'] == $cart_rule['gift_product_attribute']) { // Update total products $total_products_wt = Tools::ps_round($total_products_wt - $product['price_wt'], (int) $context->currency->decimals * _PS_PRICE_DISPLAY_PRECISION_); $total_products = Tools::ps_round($total_products - $product['price'], (int) $context->currency->decimals * _PS_PRICE_DISPLAY_PRECISION_); // Update total discounts $total_discounts = Tools::ps_round($total_discounts - $product['price_wt'], (int) $context->currency->decimals * _PS_PRICE_DISPLAY_PRECISION_); $total_discounts_tax_exc = Tools::ps_round($total_discounts_tax_exc - $product['price'], (int) $context->currency->decimals * _PS_PRICE_DISPLAY_PRECISION_); // Update cart rule value $cart_rule['value_real'] = Tools::ps_round($cart_rule['value_real'] - $product['price_wt'], (int) $context->currency->decimals * _PS_PRICE_DISPLAY_PRECISION_); $cart_rule['value_tax_exc'] = Tools::ps_round($cart_rule['value_tax_exc'] - $product['price'], (int) $context->currency->decimals * _PS_PRICE_DISPLAY_PRECISION_); // Update product quantity $product['total_wt'] = Tools::ps_round($product['total_wt'] - $product['price_wt'], (int) $currency->decimals * _PS_PRICE_DISPLAY_PRECISION_); $product['total'] = Tools::ps_round($product['total'] - $product['price'], (int) $currency->decimals * _PS_PRICE_DISPLAY_PRECISION_); $product['cart_quantity']--; if (!$product['cart_quantity']) { unset($products[$key]); } // Add a new product line $gift_product = $product; $gift_product['cart_quantity'] = 1; $gift_product['price'] = 0; $gift_product['price_wt'] = 0; $gift_product['total_wt'] = 0; $gift_product['total'] = 0; $gift_product['gift'] = true; $gift_products[] = $gift_product; break; // One gift product per cart rule } } } } foreach ($cart_rules as $key => &$cart_rule) { if ($cart_rule['value_real'] == 0) { unset($cart_rules[$key]); } } return array('delivery' => $delivery, 'delivery_state' => State::getNameById($delivery->id_state), 'invoice' => $invoice, 'invoice_state' => State::getNameById($invoice->id_state), 'formattedAddresses' => $formatted_addresses, 'products' => array_values($products), 'gift_products' => $gift_products, 'discounts' => $cart_rules, 'is_virtual_cart' => (int) $this->isVirtualCart(), 'total_discounts' => $total_discounts, 'total_discounts_tax_exc' => $total_discounts_tax_exc, 'total_wrapping' => $this->getOrderTotal(true, Cart::ONLY_WRAPPING), 'total_wrapping_tax_exc' => $this->getOrderTotal(false, Cart::ONLY_WRAPPING), 'total_shipping' => $total_shipping, 'total_shipping_tax_exc' => $total_shipping_tax_exc, 'total_products_wt' => $total_products_wt, 'total_products' => $total_products, 'total_price' => $base_total_tax_inc, 'total_tax' => $total_tax, 'total_price_without_tax' => $base_total_tax_exc, 'is_multi_address_delivery' => $this->isMultiAddressDelivery() || (int) Tools::getValue('multi-shipping') == 1, 'free_ship' => $total_shipping ? 0 : 1, 'carrier' => new Carrier($this->id_carrier, $id_lang)); }
/** * * Convert amount from a currency to an other currency automatically * * @param float $amount * @param Currency $currency_from if null we used the default currency * @param Currency $currency_to if null we used the default currency */ public static function convertPriceFull($amount, Currency $currency_from = null, Currency $currency_to = null) { if ($currency_from === $currency_to) { return $amount; } if ($currency_from === null) { $currency_from = new Currency(Configuration::get('PS_CURRENCY_DEFAULT')); } if ($currency_to === null) { $currency_to = new Currency(Configuration::get('PS_CURRENCY_DEFAULT')); } if ($currency_from->id == Configuration::get('PS_CURRENCY_DEFAULT')) { $amount *= $currency_to->conversion_rate; } else { $conversion_rate = $currency_from->conversion_rate == 0 ? 1 : $currency_from->conversion_rate; // Convert amount to default currency (using the old currency rate) $amount = Tools::ps_round($amount / $conversion_rate, 2); // Convert to new currency $amount *= $currency_to->conversion_rate; } return Tools::ps_round($amount, 2); }
public static function getTotalAmountSold($id_seller) { $ovqdvnun = "sql"; ${"GLOBALS"}["vpyikzbsisjd"] = "result"; ${"GLOBALS"}["yibjtsiqdru"] = "totals"; ${"GLOBALS"}["lueftdnvr"] = "id_seller"; if (intval(${${"GLOBALS"}["tpubctvvlkrd"]}) <= 0) { return 0; } ${"GLOBALS"}["vtvlgprwkcq"] = "res"; ${"GLOBALS"}["jihfecydict"] = "sql"; ${$ovqdvnun} = "\n SELECT SUM( (product_quantity - product_quantity_refunded ) * \n (product_price \n - CASE WHEN reduction_percent>0 THEN product_price * reduction_percent/100 ELSE reduction_amount END\n - product_price * group_reduction/100\n )\n - CASE WHEN IFNULL(discount_quantity_applied,0) = 1 THEN IFNULL(product_quantity_discount,0) ELSE 0 END\n ) AS total\n\t\t\t\t\t\t,o.id_currency\n FROM `" . _DB_PREFIX_ . "order_detail` a\n LEFT JOIN `" . _DB_PREFIX_ . "order_owner` oo ON (a.id_order=oo.id_order)\n LEFT JOIN `" . _DB_PREFIX_ . "orders` o ON (a.id_order=o.id_order)\n WHERE oo.id_owner = " . intval(${${"GLOBALS"}["lueftdnvr"]}) . "\n\t\t\t\tGROUP BY o.id_currency\n "; $jtohdtq = "result"; ${${"GLOBALS"}["rqkzwch"]} = Db::getInstance()->ExecuteS(${${"GLOBALS"}["jihfecydict"]}); ${${"GLOBALS"}["pcsrqmmeqyh"]} = array(); if (empty(${${"GLOBALS"}["vpyikzbsisjd"]})) { return array(array("currency" => new Currency((int) Configuration::get("PS_CURRENCY_DEFAULT")), "amount" => 0)); } foreach (${$jtohdtq} as ${${"GLOBALS"}["vtvlgprwkcq"]}) { $iccpjpexvivn = "res"; ${${"GLOBALS"}["pcsrqmmeqyh"]}[] = array("currency" => new Currency(${${"GLOBALS"}["nsginhlnhc"]}["id_currency"]), "amount" => Tools::ps_round(${$iccpjpexvivn}["total"], 2)); } return ${${"GLOBALS"}["yibjtsiqdru"]}; }
public function getEcoTaxTaxesBreakdown() { $ecotax_detail = array(); foreach ($this->getOrdersSlipDetail((int) $this->id) as $order_slip_details) { $row = Db::getInstance()->getRow(' SELECT `ecotax_tax_rate` as `rate`, `ecotax` as `ecotax_tax_excl`, `ecotax` as `ecotax_tax_incl`, `product_quantity` FROM `' . _DB_PREFIX_ . 'order_detail` WHERE `id_order_detail` = ' . (int) $order_slip_details['id_order_detail']); if (!isset($ecotax_detail[$row['rate']])) { $ecotax_detail[$row['rate']] = array('ecotax_tax_incl' => 0, 'ecotax_tax_excl' => 0, 'rate' => $row['rate']); } $ecotax_detail[$row['rate']]['ecotax_tax_incl'] += Tools::ps_round($row['ecotax_tax_excl'] * $order_slip_details['product_quantity'] + $row['ecotax_tax_excl'] * $order_slip_details['product_quantity'] * $row['rate'] / 100, 2); $ecotax_detail[$row['rate']]['ecotax_tax_excl'] += Tools::ps_round($row['ecotax_tax_excl'] * $order_slip_details['product_quantity'], 2); } return $ecotax_detail; }
/** * @see ObjectModel::hydrate() */ public function hydrate(array $data, $id_lang = null) { $this->id_lang = $id_lang; if (isset($data[$this->def['primary']])) { $this->id = $data[$this->def['primary']]; } foreach ($data as $key => $value) { if (array_key_exists($key, $this)) { // formats prices and floats if ($this->def['fields'][$key]['validate'] == 'isFloat' || $this->def['fields'][$key]['validate'] == 'isPrice') { $value = Tools::ps_round($value, 6); } $this->{$key} = $value; } } }
protected function itemExportAttributes($row, $product) { //Prodcut attributes if ($product->hasAttributes()) { $attributes = $product->getAttributeCombinaisons($this->id_lang); $images = $product->getCombinationImages($this->id_lang); $combinations = array(); $attribute_groups = array(); foreach ($attributes as $a) { $combinations[$a['id_product_attribute']][$a['id_attribute_group']] = $a; $attribute_groups[$a['id_attribute_group']] = $a['group_name']; } $i = 1; foreach ($attribute_groups as $id => $name) { $row['attribute_' . $i++] = $name; } $r = $row; foreach ($combinations as $id => $c) { $combination = current($c); //Images $image_urls = array(); if (isset($images[$id]) && is_array($images[$id])) { foreach ($images[$id] as $i) { if (version_compare(_PS_VERSION_, '1.5.0.0', '>=')) { array_push($image_urls, $this->context->link->getImageLink($product->link_rewrite, $product->id . '-' . $i['id_image'], 'thickbox_default')); } elseif (version_compare(_PS_VERSION_, '1.5.0.0', '<') && version_compare(_PS_VERSION_, '1.4.0.0', '>=')) { // lower than 1.5.0.0 higher than 1.4.0.0 array_push($image_urls, $this->context->link->getImageLink($product->link_rewrite, $product->id . '-' . $i['id_image'], 'thickbox')); } else { // lower then 1.4.0.0 array_push($image_urls, _PS_BASE_URL_ . $this->context->link->getImageLink($product->link_rewrite, $product->id . '-' . $i['id_image'], 'thickbox')); } } } if ((version_compare(_PS_VERSION_, '1.4.0.2', '>=') && $product->available_for_order && $combination['quantity'] > 0 || version_compare(_PS_VERSION_, '1.4.0.2', '<')) && $combination['quantity'] > 0) { $availableText = $product->available_now; $r['is_available'] = 1; } else { $availableText = $product->available_later; $r['is_available'] = 0; } $r['item_number'] = self::prefix . $product->id . '_' . $id; $r['has_children'] = 0; $r['parent_item_number'] = $row['item_number']; $r['urls_images'] = implode('||', $image_urls); // getPrice(false...) then we get only the net amount $reduction = (double) $product->getPrice(false, (int) $id, 2, NULL, true); // getPrice(false...) then we get only the net amount $r['old_unit_amount_net'] = Tools::ps_round($reduction != 0 ? $product->getPrice(false, (int) $id, 2, NULL, false, false) : 0, 2); // getPrice(false...) then we get only the net amount $r['unit_amount_net'] = Tools::ps_round($product->getPrice(false, (int) $id, 2), 2); if (version_compare(_PS_VERSION_, '1.4.1.0', '>=') && !empty($product->unity) && $product->unit_price_ratio > 0.0) { // getPrice(false...) then we get only the net amount $r['basic_price'] = Tools::displayPrice($product->getPrice(false, (int) $id, 2) / $product->unit_price_ratio) . ' ' . $this->shopgateModul->l('per') . ' ' . $product->unity; } $r['stock_quantity'] = $combination['quantity']; $r['ean'] = $combination['ean13']; $r['weight'] = $row['weight'] + self::convertProductWeightToGrams($combination['weight']); if (version_compare(_PS_VERSION_, '1.4.0.2', '>=')) { $r['minimum_order_quantity'] = $combination['minimal_quantity']; } $r['available_text'] = $availableText; $r['item_number_public'] = array_key_exists('reference', $combination) && !empty($combination['reference']) ? $combination['reference'] : ''; $i = 1; foreach ($attribute_groups as $id => $name) { $r['attribute_' . $i++] = $c[$id]['attribute_name']; } $this->addItem($r); } } return $row; }