diff --git a/admin-dev/themes/default/template/controllers/supply_orders/form.tpl b/admin-dev/themes/default/template/controllers/supply_orders/form.tpl index b3bf12a59..707987687 100644 --- a/admin-dev/themes/default/template/controllers/supply_orders/form.tpl +++ b/admin-dev/themes/default/template/controllers/supply_orders/form.tpl @@ -138,6 +138,9 @@ return false; } + if (!product_infos.unit_price_te) + product_infos.unit_price_te = 0; + // add a new line in the products table $('#products_in_supply_order > tbody:last').append( ''+ @@ -145,7 +148,7 @@ ''+product_infos.ean13+''+ ''+product_infos.upc+''+ ''+product_infos.name+''+ - '{$currency->prefix}  {$currency->suffix}'+ + '{$currency->prefix}  {$currency->suffix}'+ ''+ '%'+ '%'+ @@ -184,8 +187,9 @@ product_ids.splice(position, 1); var input_id = $('input[name~="input_id_'+product_id+'"]'); - if (input_id.length > 0) - product_ids_to_delete.push(product_id); + if (input_id != 'undefined') + if (input_id.length > 0) + product_ids_to_delete.push(product_id); // update the product_ids hidden field $('#product_ids').val(product_ids.join('|')); @@ -216,7 +220,7 @@ // set autocomplete on search field $('#cur_product_name').autocomplete("ajax-tab.php", { delay: 100, - minChars: 3, + minChars: 4, autoFill: true, max:20, matchContains: true, @@ -225,14 +229,15 @@ cacheLength:0, dataType: 'json', extraParams: { - supplier_id: '{$supplier_id}', + id_supplier: '{$supplier_id}', + id_currency: '{$currency->id}', ajax : '1', controller : 'AdminSupplyOrders', token : '{$token}', action : 'searchProduct', }, parse: function(data) { - return $.map(data, function(row) { + var res = $.map(data, function(row) { // filter the data to chaeck if the product is already added to the order if (jQuery.inArray(row.id, product_ids) == -1) return { @@ -241,12 +246,15 @@ value: row.id } }); + return res; }, formatItem: function(item) { return item.reference + ' - ' + item.name; } }).result(function(event, item){ product_infos = item; + if (typeof(ajax_running_timeout) !== 'undefined') + clearTimeout(ajax_running_timeout); }); }); diff --git a/classes/ProductSupplier.php b/classes/ProductSupplier.php index a355afb62..478d7d435 100644 --- a/classes/ProductSupplier.php +++ b/classes/ProductSupplier.php @@ -137,20 +137,27 @@ class ProductSupplierCore extends ObjectModel * @param int $id_product * @param int $id_product_attribute * @param int $id_supplier + * @param bool $with_currency Optional * @return array */ - public static function getProductSupplierPrice($id_product, $id_product_attribute, $id_supplier) + public static function getProductSupplierPrice($id_product, $id_product_attribute, $id_supplier, $with_currency = false) { // build query $query = new DbQuery(); $query->select('ps.product_supplier_price_te'); + if ($with_currency) + $query->select('ps.id_currency'); $query->from('product_supplier', 'ps'); $query->where('ps.id_product = '.(int)$id_product.' AND ps.id_product_attribute = '.(int)$id_product_attribute.' AND ps.id_supplier = '.(int)$id_supplier ); - return Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($query); + if (!$with_currency) + return Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($query); + + $res = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($query); + return $res[0]; } /** diff --git a/classes/stock/SupplyOrder.php b/classes/stock/SupplyOrder.php index 775c2495f..b9ec1e357 100755 --- a/classes/stock/SupplyOrder.php +++ b/classes/stock/SupplyOrder.php @@ -481,7 +481,7 @@ class SupplyOrderCore extends ObjectModel // formats prices and floats if ($this->def['fields'][$key]['validate'] == 'isFloat' || $this->def['fields'][$key]['validate'] == 'isPrice') - $value = number_format($value, 2); + $value = Tools::ps_round($value, 6); $this->$key = $value; } } diff --git a/classes/stock/SupplyOrderDetail.php b/classes/stock/SupplyOrderDetail.php index 478704e30..990bcdfec 100755 --- a/classes/stock/SupplyOrderDetail.php +++ b/classes/stock/SupplyOrderDetail.php @@ -219,22 +219,22 @@ class SupplyOrderDetailCore extends ObjectModel protected function calculatePrices() { // calculates entry price - $this->price_te = (float)Tools::ps_round((float)$this->unit_price_te * (int)$this->quantity_expected, 6); + $this->price_te = Tools::ps_round((float)$this->unit_price_te * (int)$this->quantity_expected, 6); // calculates entry discount value if ($this->discount_rate != null && (is_float($this->discount_rate) || is_numeric($this->discount_rate)) && $this->discount_rate > 0) - $this->discount_value_te = (float)Tools::ps_round((float)$this->price_te * ($this->discount_rate / 100), 6); + $this->discount_value_te = Tools::ps_round((float)$this->price_te * ($this->discount_rate / 100), 6); // calculates entry price with discount - $this->price_with_discount_te = (float)Tools::ps_round($this->price_te - $this->discount_value_te, 6); + $this->price_with_discount_te = Tools::ps_round($this->price_te - $this->discount_value_te, 6); // calculates tax value - $this->tax_value = (float)Tools::ps_round($this->price_with_discount_te * ((float)$this->tax_rate / 100), 6); - $this->price_ti = (float)Tools::ps_round($this->price_with_discount_te + $this->tax_value, 6); + $this->tax_value = Tools::ps_round($this->price_with_discount_te * ((float)$this->tax_rate / 100), 6); + $this->price_ti = Tools::ps_round($this->price_with_discount_te + $this->tax_value, 6); // defines default values for order discount fields - $this->tax_value_with_order_discount = (float)Tools::ps_round($this->tax_value, 6); - $this->price_with_order_discount_te = (float)Tools::ps_round($this->price_with_discount_te, 6); + $this->tax_value_with_order_discount = Tools::ps_round($this->tax_value, 6); + $this->price_with_order_discount_te = Tools::ps_round($this->price_with_discount_te, 6); } /** @@ -248,14 +248,14 @@ class SupplyOrderDetailCore extends ObjectModel if ($discount_rate != null && is_numeric($discount_rate) && (float)$discount_rate > 0) { // calculates new price, with global order discount, tax ecluded - $discount_value = $this->price_with_discount_te - ($this->price_with_discount_te * ((float)$discount_rate / 100)); + $discount_value = $this->price_with_discount_te - (($this->price_with_discount_te * (float)$discount_rate) / 100); - $this->price_with_order_discount_te = (float)Tools::ps_round($discount_value, 6); + $this->price_with_order_discount_te = Tools::ps_round($discount_value, 6); // calculates new tax value, with global order discount - $this->tax_value_with_order_discount = (float)Tools::ps_round($this->price_with_order_discount_te * ((float)$this->tax_rate / 100), 6); + $this->tax_value_with_order_discount = Tools::ps_round($this->price_with_order_discount_te * ((float)$this->tax_rate / 100), 6); - $this->update(); + parent::update(); } } @@ -329,7 +329,7 @@ class SupplyOrderDetailCore extends ObjectModel // formats prices and floats if ($this->def['fields'][$key]['validate'] == 'isFloat' || $this->def['fields'][$key]['validate'] == 'isPrice') - $value = number_format($value, 2); + $value = Tools::ps_round($value, 6); $this->$key = $value; } } diff --git a/controllers/admin/AdminSupplyOrdersController.php b/controllers/admin/AdminSupplyOrdersController.php index 8d5fb207e..773407855 100644 --- a/controllers/admin/AdminSupplyOrdersController.php +++ b/controllers/admin/AdminSupplyOrdersController.php @@ -972,7 +972,6 @@ class AdminSupplyOrdersControllerCore extends AdminController $id_currency = (int)Tools::getValue('id_currency', 0); if ($id_currency <= 0 || ( !($result = Currency::getCurrency($id_currency)) || empty($result) )) $this->errors[] = Tools::displayError($this->l('The selected currency is not valid.')); - // get delivery date $delivery_expected = new DateTime(pSQL(Tools::getValue('date_delivery_expected'))); // converts date to timestamp @@ -1002,6 +1001,10 @@ class AdminSupplyOrdersControllerCore extends AdminController // manage each associated product $this->manageOrderProducts(); + + // if the threshold is defined and we are saving the order + if (Tools::isSubmit('submitAddsupply_order') && $quantity_threshold != null) + $this->loadProducts($quantity_threshold); } // Manage state change @@ -1093,10 +1096,6 @@ class AdminSupplyOrdersControllerCore extends AdminController if ((!count($this->errors) && $this->is_editing_order) || !$this->is_editing_order) parent::postProcess(); - - // if the threshold is defined and we are saving the order - if (Tools::isSubmit('submitAddsupply_order') && $quantity_threshold != null) - $this->loadProducts($quantity_threshold); } /** @@ -1519,6 +1518,9 @@ class AdminSupplyOrdersControllerCore extends AdminController // get supplier id $id_supplier = (int)Tools::getValue('id_supplier', false); + // gets the currency + $id_currency = (int)Tools::getValue('id_currency', false); + // get lang from context $id_lang = (int)Context::getContext()->language->id; @@ -1552,10 +1554,18 @@ class AdminSupplyOrdersControllerCore extends AdminController $items = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($query); + foreach ($items as &$item) + { + $ids = explode('_', $item['id']); + $prices = ProductSupplier::getProductSupplierPrice($ids[0], $ids[1], $id_supplier, true); + $item['unit_price_te'] = Tools::convertPriceFull($prices['product_supplier_price_te'], + new Currency((int)$prices['id_currency']), + new Currency($id_currency)); + } if ($items) die(Tools::jsonEncode($items)); - die(); + die(1); } /** @@ -1920,7 +1930,7 @@ class AdminSupplyOrdersControllerCore extends AdminController $items = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($query); // loads order currency - $order_currency = new Currency($supply_order->id_ref_currency); + $order_currency = new Currency($supply_order->id_currency); if (!Validate::isLoadedObject($order_currency)) return; @@ -1947,7 +1957,7 @@ class AdminSupplyOrdersControllerCore extends AdminController $product_currency = new Currency($item['id_currency']); if (Validate::isLoadedObject($product_currency)) - $supply_order_detail->unit_price_te = Tools::convertPriceFull($item['unit_price_te'], $order_currency, $product_currency); + $supply_order_detail->unit_price_te = Tools::convertPriceFull($item['unit_price_te'], $product_currency, $order_currency); else $supply_order_detail->unit_price_te = 0; $supply_order_detail->save();