Browse Source

[FIX] - handle the case where product is not an object

when `pos_cache` is installed, the product is read from the cache and
became a `dict` instance instead of `OdooClass` object instance.

This PR, assures that `get_price` is always processed with an `OdooClass` object.

fixes: #274
pull/492/head
sbejaoui 5 years ago
parent
commit
d6a704f55f
  1. 13
      pos_pricelist/static/src/js/models.js
  2. 6
      pos_pricelist/static/src/js/screens.js
  3. 6
      pos_pricelist/static/src/xml/pos.xml

13
pos_pricelist/static/src/js/models.js

@ -206,12 +206,13 @@ odoo.define("pos_pricelist.models", function (require) {
models.Orderline.prototype.initialize = function (attr, options) { models.Orderline.prototype.initialize = function (attr, options) {
_Orderline_initialize.apply(this, arguments); _Orderline_initialize.apply(this, arguments);
if (options.product) { if (options.product) {
var product = new exports.Product(this.product);
this.set_unit_price( this.set_unit_price(
options.product.price ||
this.product.get_price(
product.get_price(
this.order.pricelist, this.order.pricelist,
this.get_quantity() this.get_quantity()
)
) ||
options.product.price
); );
} }
}; };
@ -225,7 +226,8 @@ odoo.define("pos_pricelist.models", function (require) {
delete this.keep_price; delete this.keep_price;
// just like in sale.order changing the quantity will recompute the unit price // just like in sale.order changing the quantity will recompute the unit price
if (!keep_price) { if (!keep_price) {
this.set_unit_price(this.product.get_price(
var product = new exports.Product(this.product);
this.set_unit_price(product.get_price(
this.order.pricelist, this.order.pricelist,
this.get_quantity() this.get_quantity()
)); ));
@ -260,8 +262,9 @@ odoo.define("pos_pricelist.models", function (require) {
var self = this; var self = this;
this.pricelist = pricelist; this.pricelist = pricelist;
_.each(this.get_orderlines(), function (line) { _.each(this.get_orderlines(), function (line) {
var product = new exports.Product(line.product);
line.set_unit_price( line.set_unit_price(
line.product.get_price(self.pricelist, line.get_quantity())
product.get_price(self.pricelist, line.get_quantity())
); );
self.fix_tax_included_price(line); self.fix_tax_included_price(line);
}); });

6
pos_pricelist/static/src/js/screens.js

@ -8,6 +8,7 @@ odoo.define("pos_pricelist.screens", function (require) {
var screens = require("point_of_sale.screens"); var screens = require("point_of_sale.screens");
var _t = core._t; var _t = core._t;
var exports = {}; var exports = {};
var models = require("pos_pricelist.models");
screens.ScaleScreenWidget.include({ screens.ScaleScreenWidget.include({
_get_active_pricelist: function() { _get_active_pricelist: function() {
@ -56,6 +57,7 @@ odoo.define("pos_pricelist.screens", function (require) {
screens.ProductListWidget.include({ screens.ProductListWidget.include({
init: function () { init: function () {
this.models = models;
this._super.apply(this, arguments); this._super.apply(this, arguments);
this.pos.get('orders').bind( this.pos.get('orders').bind(
'add remove change', 'add remove change',
@ -84,6 +86,10 @@ odoo.define("pos_pricelist.screens", function (require) {
} }
return current_pricelist; return current_pricelist;
}, },
get_price: function(product, pricelist, quantity) {
var product = new this.models.Product(product);
return product.get_price(pricelist, quantity);
},
}); });
screens.ClientListScreenWidget.include({ screens.ClientListScreenWidget.include({

6
pos_pricelist/static/src/xml/pos.xml

@ -41,11 +41,11 @@
<t t-extend="Product"> <t t-extend="Product">
<t t-jquery=".price-tag:eq(0)" t-operation="inner"> <t t-jquery=".price-tag:eq(0)" t-operation="inner">
<t t-esc="widget.format_currency(product.get_price(widget._get_active_pricelist(), 1),'Product Price')"/>
<t t-esc="widget.format_currency(widget.get_price(product, widget._get_active_pricelist(), 1),'Product Price')"/>
</t> </t>
<t t-jquery=".price-tag:eq(0)" t-operation="inner">
<t t-esc="widget.format_currency(product.get_price(widget._get_active_pricelist(), 1),'Product Price')+'/'+widget.pos.units_by_id[product.uom_id[0]].name"/>
<t t-jquery=".price-tag:eq(1)" t-operation="inner">
<t t-esc="widget.format_currency(widget.get_price(product, widget._get_active_pricelist(), 1),'Product Price')+'/'+widget.pos.units_by_id[product.uom_id[0]].name"/>
</t> </t>
</t> </t>
</templates> </templates>
Loading…
Cancel
Save