From be4cdb1eef4c55fd965ccdd89bef845d0d17e268 Mon Sep 17 00:00:00 2001 From: Hparfr Date: Wed, 24 Feb 2016 15:05:53 +0100 Subject: [PATCH 01/16] Add module pos_default_empty_image Big perf improvement for loading POS if you have thousand of products without image --- pos_default_empty_image/README.rst | 72 +++++++++++++++++++ pos_default_empty_image/__init__.py | 1 + pos_default_empty_image/__openerp__.py | 44 ++++++++++++ pos_default_empty_image/product.py | 20 ++++++ .../static/src/js/pos_default_empty_image.js | 34 +++++++++ pos_default_empty_image/view/view.xml | 10 +++ 6 files changed, 181 insertions(+) create mode 100644 pos_default_empty_image/README.rst create mode 100644 pos_default_empty_image/__init__.py create mode 100644 pos_default_empty_image/__openerp__.py create mode 100644 pos_default_empty_image/product.py create mode 100644 pos_default_empty_image/static/src/js/pos_default_empty_image.js create mode 100644 pos_default_empty_image/view/view.xml diff --git a/pos_default_empty_image/README.rst b/pos_default_empty_image/README.rst new file mode 100644 index 00000000..9f49d1a9 --- /dev/null +++ b/pos_default_empty_image/README.rst @@ -0,0 +1,72 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +=========================== +POS Default Empty Image +=========================== + +In the point of sale, trying to load known inexistant images is a waste of time. + + +When you have 8000 products in your Point of Sale and most of them don't have images, +you are happy to save thousands of useless requests : the POS load way faster. + +Technical information +===================== + +Each time the pos instantiate a product, it will add an + + + +The browser will trigger as many requests than there is different url. + + +If you have many products, the browser will soon reach his limit of network connections to Odoo server and +will wait for free slots instead of loading other valuable contents. Then the POS is then very slow to work with. + + +This module adds a field _has_image_ in product.template and will change the product image url to his default placeholder directly in the POS. + +Because there is only one url for this placeholder, you will have only one request for all the products with no images. + +Indeed, if the product has an image, it will load normally. + +Known issues +============ + + +Updates +======= + * Feb 2016 : First version + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed feedback `here `_. + + +Credits +======= + +Contributors +------------ + +* Hparfr (Akretion)[https://akretion.com] + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +This module is maintained by the OCA. + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +To contribute to this module, please visit http://odoo-community.org. diff --git a/pos_default_empty_image/__init__.py b/pos_default_empty_image/__init__.py new file mode 100644 index 00000000..7c68785e --- /dev/null +++ b/pos_default_empty_image/__init__.py @@ -0,0 +1 @@ +# -*- coding: utf-8 -*- \ No newline at end of file diff --git a/pos_default_empty_image/__openerp__.py b/pos_default_empty_image/__openerp__.py new file mode 100644 index 00000000..29526f77 --- /dev/null +++ b/pos_default_empty_image/__openerp__.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +# © <2015> +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +{ + 'name': 'POS Default empty image', + 'version': '8.0.0.1.0', + 'category': 'Point Of Sale', + 'summary': 'Optimise load time for products with no image', + 'description': """ +POS Default empty Image +======================= + +In the point of sale, trying to load known inexistant images is a waste of time. + + +When you have 8000 products in your Point of Sale and most of them don't have images, +you are happy to save thousands of useless requests : the POS load way faster. + +Technical information +===================== + +Each time the pos instantiate a product, it will add an + to DOM. +The browser will trigger as many requests than there is different url. +If you have many products, the browser will soon reach his limit of network connections to Odoo server and +will wait for free slots instead of loading other valuable contents. +The POS is then very slow to work with. + + +This module adds a field _has_image_ in product.template and will change +the product image url to his default placeholder directly in the POS. +Because there is only one url for this placeholder, you will have only one request for all the products with +no images. + +Indeed, if the product has an image, it will load normally. + + """, + 'author': "Akretion / Odoo Community Association (OCA)", + 'website': "https://akretion.com", + 'license': 'AGPL-3', + 'depends': ['point_of_sale'], + 'data': [ 'view/view.xml'], + 'qweb': [], +} diff --git a/pos_default_empty_image/product.py b/pos_default_empty_image/product.py new file mode 100644 index 00000000..03384a3b --- /dev/null +++ b/pos_default_empty_image/product.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# © <2015> +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp import models, fields, api + +class ProductTemplate(models.Model): + _inherit = ['product.template'] + _name = 'product.template' + + @api.multi + @api.depends('field.image') + def _has_image(self): + for record in self: + record.has_image = bool(record.image) + + has_image = fields.Boolean( + compute='_has_image', + store=True, + readonly=True) diff --git a/pos_default_empty_image/static/src/js/pos_default_empty_image.js b/pos_default_empty_image/static/src/js/pos_default_empty_image.js new file mode 100644 index 00000000..10d65a9f --- /dev/null +++ b/pos_default_empty_image/static/src/js/pos_default_empty_image.js @@ -0,0 +1,34 @@ +'use strict'; + +openerp.pos_default_empty_image = function (instance) { + var module = instance.point_of_sale; + var _t = instance.web._t; + + //don't try to get an image if we know the product ain't one + module.ProductListWidget = module.ProductListWidget.extend({ + get_product_image_url: function(product){ + if (product.has_image) + return this._super(product); + + return '/web/static/src/img/placeholder.png'; + } + }); + + //we can't extend it because self.pos not ready yet + var _initializePosModel_ = module.PosModel.prototype.initialize; + module.PosModel.prototype.initialize = function(session, attributes){ + //add has_image to the request of product product + this.models.some(function (m, idx) { + if (m.model !== "product.product") + return false; + + //check if not already done by someone else + if (m.fields.indexOf('has_image') === -1) { + m.fields.push('has_image'); + } + + return true; //no need to continue + }); + return _initializePosModel_.call(this, session, attributes); + }; +}; diff --git a/pos_default_empty_image/view/view.xml b/pos_default_empty_image/view/view.xml new file mode 100644 index 00000000..b3de3a4b --- /dev/null +++ b/pos_default_empty_image/view/view.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file From 4281cd02fb2a615d706d7e969bdd639ca6890365 Mon Sep 17 00:00:00 2001 From: raph Date: Fri, 26 Feb 2016 10:20:00 +0100 Subject: [PATCH 02/16] Limit lines to < 80 chars --- pos_default_empty_image/__openerp__.py | 23 ++++++++++++++--------- pos_default_empty_image/product.py | 1 + 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/pos_default_empty_image/__openerp__.py b/pos_default_empty_image/__openerp__.py index 29526f77..72641663 100644 --- a/pos_default_empty_image/__openerp__.py +++ b/pos_default_empty_image/__openerp__.py @@ -10,11 +10,14 @@ POS Default empty Image ======================= -In the point of sale, trying to load known inexistant images is a waste of time. +In the point of sale, trying to load known inexistant images is +a waste of time. -When you have 8000 products in your Point of Sale and most of them don't have images, -you are happy to save thousands of useless requests : the POS load way faster. +When you have 8000 products in your Point of Sale and most of them +don't have images, you are happy to save thousands of useless requests : +the POS load way faster. + Technical information ===================== @@ -22,15 +25,17 @@ Technical information Each time the pos instantiate a product, it will add an to DOM. The browser will trigger as many requests than there is different url. -If you have many products, the browser will soon reach his limit of network connections to Odoo server and -will wait for free slots instead of loading other valuable contents. +If you have many products, the browser will soon reach his limit of +network connections to Odoo server and +will wait for free slots instead of loading other valuable contents. The POS is then very slow to work with. -This module adds a field _has_image_ in product.template and will change +This module adds a field _has_image_ in product.template and will change the product image url to his default placeholder directly in the POS. -Because there is only one url for this placeholder, you will have only one request for all the products with -no images. +Because there is only one url for this placeholder, you will have +only one request for all the products with no images. + Indeed, if the product has an image, it will load normally. @@ -39,6 +44,6 @@ Indeed, if the product has an image, it will load normally. 'website': "https://akretion.com", 'license': 'AGPL-3', 'depends': ['point_of_sale'], - 'data': [ 'view/view.xml'], + 'data': ['view/view.xml'], 'qweb': [], } diff --git a/pos_default_empty_image/product.py b/pos_default_empty_image/product.py index 03384a3b..7f30664c 100644 --- a/pos_default_empty_image/product.py +++ b/pos_default_empty_image/product.py @@ -4,6 +4,7 @@ from openerp import models, fields, api + class ProductTemplate(models.Model): _inherit = ['product.template'] _name = 'product.template' From d21f2f960a42c136444fdc977f464dd3355fcb31 Mon Sep 17 00:00:00 2001 From: raph Date: Fri, 26 Feb 2016 10:26:44 +0100 Subject: [PATCH 03/16] No new line at end of file --- pos_default_empty_image/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pos_default_empty_image/__init__.py b/pos_default_empty_image/__init__.py index 7c68785e..40a96afc 100644 --- a/pos_default_empty_image/__init__.py +++ b/pos_default_empty_image/__init__.py @@ -1 +1 @@ -# -*- coding: utf-8 -*- \ No newline at end of file +# -*- coding: utf-8 -*- From 9dfaca69871a37342aff902babaf7a9540f5c428 Mon Sep 17 00:00:00 2001 From: raph Date: Fri, 26 Feb 2016 12:27:34 +0100 Subject: [PATCH 04/16] Add missing credits --- pos_default_empty_image/README.rst | 6 ++++++ pos_default_empty_image/__openerp__.py | 14 ++++++++++++-- pos_default_empty_image/product.py | 2 +- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/pos_default_empty_image/README.rst b/pos_default_empty_image/README.rst index 9f49d1a9..49f24983 100644 --- a/pos_default_empty_image/README.rst +++ b/pos_default_empty_image/README.rst @@ -55,6 +55,12 @@ Contributors ------------ * Hparfr (Akretion)[https://akretion.com] +* Sylvain LE GAL + +See also this module: [pos_improve_images from GRAP] +(https://github.com/grap/odoo-addons-grap/tree/7.0/pos_improve_images) + for OpenERP 7. + Maintainer ---------- diff --git a/pos_default_empty_image/__openerp__.py b/pos_default_empty_image/__openerp__.py index 72641663..654e940b 100644 --- a/pos_default_empty_image/__openerp__.py +++ b/pos_default_empty_image/__openerp__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# © <2015> +# © <2015> # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). { 'name': 'POS Default empty image', @@ -39,8 +39,18 @@ only one request for all the products with no images. Indeed, if the product has an image, it will load normally. + +Other +===== + +See also this module: [pos_improve_images from GRAP] +(https://github.com/grap/odoo-addons-grap/tree/7.0/pos_improve_images) + for OpenERP 7 which emphasis the name of the product +instead of displaying the placeholder. + + """, - 'author': "Akretion / Odoo Community Association (OCA)", + 'author': "Akretion, GRAP, Odoo Community Association (OCA)", 'website': "https://akretion.com", 'license': 'AGPL-3', 'depends': ['point_of_sale'], diff --git a/pos_default_empty_image/product.py b/pos_default_empty_image/product.py index 7f30664c..09c7999d 100644 --- a/pos_default_empty_image/product.py +++ b/pos_default_empty_image/product.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# © <2015> +# © <2015> # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from openerp import models, fields, api From cd6572874202f314fed0685e8538ba0f003daeae Mon Sep 17 00:00:00 2001 From: Sylvain LE GAL Date: Fri, 26 Feb 2016 13:54:35 +0100 Subject: [PATCH 05/16] description file; --- pos_default_empty_image/README.rst | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/pos_default_empty_image/README.rst b/pos_default_empty_image/README.rst index 49f24983..714be00f 100644 --- a/pos_default_empty_image/README.rst +++ b/pos_default_empty_image/README.rst @@ -2,9 +2,9 @@ :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 -=========================== +======================= POS Default Empty Image -=========================== +======================= In the point of sale, trying to load known inexistant images is a waste of time. @@ -17,7 +17,7 @@ Technical information Each time the pos instantiate a product, it will add an - + The browser will trigger as many requests than there is different url. @@ -38,14 +38,15 @@ Known issues Updates ======= - * Feb 2016 : First version + +* Feb 2016 : First version Bug Tracker =========== Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. -If you spotted it first, help us smashing it by providing a detailed and welcomed feedback `here `_. +If you spotted it first, help us smashing it by providing a detailed and welcomed feedback `here `_. Credits @@ -54,12 +55,10 @@ Credits Contributors ------------ -* Hparfr (Akretion)[https://akretion.com] +* Hparfr `Akretion `_ * Sylvain LE GAL -See also this module: [pos_improve_images from GRAP] -(https://github.com/grap/odoo-addons-grap/tree/7.0/pos_improve_images) - for OpenERP 7. +See also this module `pos_improve_images from GRAP `_ for OpenERP 7. Maintainer From 0370dd7c674ebec545f390144c06ac67edeb988a Mon Sep 17 00:00:00 2001 From: raph Date: Fri, 26 Feb 2016 14:35:09 +0100 Subject: [PATCH 06/16] Fix line length in readme Remove __openerp.py_.description Remove _name Remove unneeded contents in init --- pos_default_empty_image/README.rst | 24 +++++++++----- pos_default_empty_image/__init__.py | 1 - pos_default_empty_image/__openerp__.py | 44 -------------------------- pos_default_empty_image/product.py | 1 - 4 files changed, 16 insertions(+), 54 deletions(-) diff --git a/pos_default_empty_image/README.rst b/pos_default_empty_image/README.rst index 714be00f..abe091b5 100644 --- a/pos_default_empty_image/README.rst +++ b/pos_default_empty_image/README.rst @@ -6,11 +6,13 @@ POS Default Empty Image ======================= -In the point of sale, trying to load known inexistant images is a waste of time. +In the point of sale, trying to load known inexistant images +is a waste of time. -When you have 8000 products in your Point of Sale and most of them don't have images, -you are happy to save thousands of useless requests : the POS load way faster. +When you have 8000 products in your Point of Sale and most of them +don't have images, you are happy to save thousands of useless requests: +the POS load way faster. Technical information ===================== @@ -22,16 +24,21 @@ Each time the pos instantiate a product, it will add an The browser will trigger as many requests than there is different url. -If you have many products, the browser will soon reach his limit of network connections to Odoo server and -will wait for free slots instead of loading other valuable contents. Then the POS is then very slow to work with. +If you have many products, the browser will soon reach his limit of +network connections to Odoo server and will wait for free slots instead of +loading other valuable contents. Then the POS is then very slow to work with. -This module adds a field _has_image_ in product.template and will change the product image url to his default placeholder directly in the POS. +This module adds a field _has_image_ in product.template and will +change the product image url to his default placeholder directly in the POS. + +Because there is only one url for this placeholder, +you will have only one request for all the products with no images. -Because there is only one url for this placeholder, you will have only one request for all the products with no images. Indeed, if the product has an image, it will load normally. + Known issues ============ @@ -58,7 +65,8 @@ Contributors * Hparfr `Akretion `_ * Sylvain LE GAL -See also this module `pos_improve_images from GRAP `_ for OpenERP 7. +See also this module `pos_improve_images from GRAP +`_ for OpenERP 7. Maintainer diff --git a/pos_default_empty_image/__init__.py b/pos_default_empty_image/__init__.py index 40a96afc..e69de29b 100644 --- a/pos_default_empty_image/__init__.py +++ b/pos_default_empty_image/__init__.py @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/pos_default_empty_image/__openerp__.py b/pos_default_empty_image/__openerp__.py index 654e940b..b0fa5408 100644 --- a/pos_default_empty_image/__openerp__.py +++ b/pos_default_empty_image/__openerp__.py @@ -6,50 +6,6 @@ 'version': '8.0.0.1.0', 'category': 'Point Of Sale', 'summary': 'Optimise load time for products with no image', - 'description': """ -POS Default empty Image -======================= - -In the point of sale, trying to load known inexistant images is -a waste of time. - - -When you have 8000 products in your Point of Sale and most of them -don't have images, you are happy to save thousands of useless requests : -the POS load way faster. - - -Technical information -===================== - -Each time the pos instantiate a product, it will add an - to DOM. -The browser will trigger as many requests than there is different url. -If you have many products, the browser will soon reach his limit of -network connections to Odoo server and -will wait for free slots instead of loading other valuable contents. -The POS is then very slow to work with. - - -This module adds a field _has_image_ in product.template and will change -the product image url to his default placeholder directly in the POS. -Because there is only one url for this placeholder, you will have -only one request for all the products with no images. - - -Indeed, if the product has an image, it will load normally. - - -Other -===== - -See also this module: [pos_improve_images from GRAP] -(https://github.com/grap/odoo-addons-grap/tree/7.0/pos_improve_images) - for OpenERP 7 which emphasis the name of the product -instead of displaying the placeholder. - - - """, 'author': "Akretion, GRAP, Odoo Community Association (OCA)", 'website': "https://akretion.com", 'license': 'AGPL-3', diff --git a/pos_default_empty_image/product.py b/pos_default_empty_image/product.py index 09c7999d..44c1d09c 100644 --- a/pos_default_empty_image/product.py +++ b/pos_default_empty_image/product.py @@ -7,7 +7,6 @@ from openerp import models, fields, api class ProductTemplate(models.Model): _inherit = ['product.template'] - _name = 'product.template' @api.multi @api.depends('field.image') From c0fd62427b5ac889240bd4ec45a898c7b56c706f Mon Sep 17 00:00:00 2001 From: Sylvain LE GAL Date: Mon, 17 Apr 2017 11:03:38 +0200 Subject: [PATCH 07/16] [PORT] pos_default_empty_image courtesy @invitu --- pos_default_empty_image/__init__.py | 1 + .../{__openerp__.py => __manifest__.py} | 2 +- pos_default_empty_image/models/product.py | 16 ++++++ pos_default_empty_image/product.py | 20 -------- .../static/src/js/pos_default_empty_image.js | 50 ++++++++----------- pos_default_empty_image/view/view.xml | 10 ---- pos_default_empty_image/views/view.xml | 8 +++ 7 files changed, 47 insertions(+), 60 deletions(-) rename pos_default_empty_image/{__openerp__.py => __manifest__.py} (94%) create mode 100644 pos_default_empty_image/models/product.py delete mode 100644 pos_default_empty_image/product.py delete mode 100644 pos_default_empty_image/view/view.xml create mode 100644 pos_default_empty_image/views/view.xml diff --git a/pos_default_empty_image/__init__.py b/pos_default_empty_image/__init__.py index e69de29b..0650744f 100644 --- a/pos_default_empty_image/__init__.py +++ b/pos_default_empty_image/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/pos_default_empty_image/__openerp__.py b/pos_default_empty_image/__manifest__.py similarity index 94% rename from pos_default_empty_image/__openerp__.py rename to pos_default_empty_image/__manifest__.py index b0fa5408..3f2d6771 100644 --- a/pos_default_empty_image/__openerp__.py +++ b/pos_default_empty_image/__manifest__.py @@ -3,7 +3,7 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). { 'name': 'POS Default empty image', - 'version': '8.0.0.1.0', + 'version': '10.0.0.1.0', 'category': 'Point Of Sale', 'summary': 'Optimise load time for products with no image', 'author': "Akretion, GRAP, Odoo Community Association (OCA)", diff --git a/pos_default_empty_image/models/product.py b/pos_default_empty_image/models/product.py new file mode 100644 index 00000000..0a9344db --- /dev/null +++ b/pos_default_empty_image/models/product.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# © <2015> +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import models, fields, api + + +class ProductTemplate(models.Model): + _inherit = 'product.template' + + @api.multi + def _get_has_image(self): + self.ensure_one() + self.has_image = self.image is not False + + has_image = fields.Boolean(compute='_get_has_image', string='Has Image') diff --git a/pos_default_empty_image/product.py b/pos_default_empty_image/product.py deleted file mode 100644 index 44c1d09c..00000000 --- a/pos_default_empty_image/product.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# © <2015> -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). - -from openerp import models, fields, api - - -class ProductTemplate(models.Model): - _inherit = ['product.template'] - - @api.multi - @api.depends('field.image') - def _has_image(self): - for record in self: - record.has_image = bool(record.image) - - has_image = fields.Boolean( - compute='_has_image', - store=True, - readonly=True) diff --git a/pos_default_empty_image/static/src/js/pos_default_empty_image.js b/pos_default_empty_image/static/src/js/pos_default_empty_image.js index 10d65a9f..f73442ca 100644 --- a/pos_default_empty_image/static/src/js/pos_default_empty_image.js +++ b/pos_default_empty_image/static/src/js/pos_default_empty_image.js @@ -1,34 +1,26 @@ -'use strict'; +odoo.define('pos_default_empty_image', function (require) { +"use strict"; -openerp.pos_default_empty_image = function (instance) { - var module = instance.point_of_sale; - var _t = instance.web._t; + var models = require('point_of_sale.models'); + var screens = require('point_of_sale.screens'); - //don't try to get an image if we know the product ain't one - module.ProductListWidget = module.ProductListWidget.extend({ - get_product_image_url: function(product){ - if (product.has_image) - return this._super(product); + //don't try to get an image if we know the product ain't one + var ProductListImageWidget = screens.ProductListWidget.include({ + get_product_image_url: function(product){ + if (product.has_image) + return this._super(product); - return '/web/static/src/img/placeholder.png'; - } - }); + return '/web/static/src/img/placeholder.png'; + } + }); - //we can't extend it because self.pos not ready yet - var _initializePosModel_ = module.PosModel.prototype.initialize; - module.PosModel.prototype.initialize = function(session, attributes){ - //add has_image to the request of product product - this.models.some(function (m, idx) { - if (m.model !== "product.product") - return false; + var _super_posmodel = models.PosModel.prototype; + models.PosModel = models.PosModel.extend({ + initialize: function (session, attributes) { + var product_model = _.find(this.models, function(model){ return model.model === 'product.product'; }); + product_model.fields.push('has_image'); - //check if not already done by someone else - if (m.fields.indexOf('has_image') === -1) { - m.fields.push('has_image'); - } - - return true; //no need to continue - }); - return _initializePosModel_.call(this, session, attributes); - }; -}; + return _super_posmodel.initialize.call(this, session, attributes); + }, + }); +}); diff --git a/pos_default_empty_image/view/view.xml b/pos_default_empty_image/view/view.xml deleted file mode 100644 index b3de3a4b..00000000 --- a/pos_default_empty_image/view/view.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/pos_default_empty_image/views/view.xml b/pos_default_empty_image/views/view.xml new file mode 100644 index 00000000..06c99f73 --- /dev/null +++ b/pos_default_empty_image/views/view.xml @@ -0,0 +1,8 @@ + + + + From 29dccd8e4188302638f70a48fcee708dad2169ab Mon Sep 17 00:00:00 2001 From: Sylvain LE GAL Date: Mon, 17 Apr 2017 11:09:36 +0200 Subject: [PATCH 08/16] [IMP] pos_default_empty_image courtesy @invitu --- pos_default_empty_image/README.rst | 20 +++++----- pos_default_empty_image/__manifest__.py | 13 +++++-- pos_default_empty_image/models/__init__.py | 1 + .../src/css/pos_default_empty_image.css | 38 +++++++++++++++++++ .../static/src/js/pos_default_empty_image.js | 31 +++++++++++++-- .../src/xml/pos_default_empty_image.xml | 23 +++++++++++ .../views/{view.xml => templates.xml} | 3 ++ 7 files changed, 114 insertions(+), 15 deletions(-) create mode 100644 pos_default_empty_image/models/__init__.py create mode 100644 pos_default_empty_image/static/src/css/pos_default_empty_image.css create mode 100644 pos_default_empty_image/static/src/xml/pos_default_empty_image.xml rename pos_default_empty_image/views/{view.xml => templates.xml} (64%) diff --git a/pos_default_empty_image/README.rst b/pos_default_empty_image/README.rst index abe091b5..77c13d62 100644 --- a/pos_default_empty_image/README.rst +++ b/pos_default_empty_image/README.rst @@ -29,15 +29,17 @@ network connections to Odoo server and will wait for free slots instead of loading other valuable contents. Then the POS is then very slow to work with. -This module adds a field _has_image_ in product.template and will -change the product image url to his default placeholder directly in the POS. +This module adds a field _has_image in product.template. -Because there is only one url for this placeholder, -you will have only one request for all the products with no images. +If product has no image, the product image url is not sent to the POS +In the product list, the display of the product is changed, + (Size of the name is increased for better visibility); Indeed, if the product has an image, it will load normally. +This module is compatible with pos_product_template + Known issues ============ @@ -47,13 +49,16 @@ Updates ======= * Feb 2016 : First version +* Feb 2017 : migration to v10 and improvements for Display - taken from + this module `pos_improve_images from GRAP + `_ for OpenERP 7. Bug Tracker =========== -Bugs are tracked on `GitHub Issues `_. +Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. -If you spotted it first, help us smashing it by providing a detailed and welcomed feedback `here `_. +If you spotted it first, help us smashing it by providing a detailed and welcomed feedback `here `_. Credits @@ -65,9 +70,6 @@ Contributors * Hparfr `Akretion `_ * Sylvain LE GAL -See also this module `pos_improve_images from GRAP -`_ for OpenERP 7. - Maintainer ---------- diff --git a/pos_default_empty_image/__manifest__.py b/pos_default_empty_image/__manifest__.py index 3f2d6771..e08c1364 100644 --- a/pos_default_empty_image/__manifest__.py +++ b/pos_default_empty_image/__manifest__.py @@ -9,7 +9,14 @@ 'author': "Akretion, GRAP, Odoo Community Association (OCA)", 'website': "https://akretion.com", 'license': 'AGPL-3', - 'depends': ['point_of_sale'], - 'data': ['view/view.xml'], - 'qweb': [], + 'depends': [ + 'point_of_sale', + ], + 'data': [ + 'views/templates.xml', + ], + 'qweb': [ + 'static/src/xml/pos_default_empty_image.xml', + ], + 'installable': True, } diff --git a/pos_default_empty_image/models/__init__.py b/pos_default_empty_image/models/__init__.py new file mode 100644 index 00000000..9649db77 --- /dev/null +++ b/pos_default_empty_image/models/__init__.py @@ -0,0 +1 @@ +from . import product diff --git a/pos_default_empty_image/static/src/css/pos_default_empty_image.css b/pos_default_empty_image/static/src/css/pos_default_empty_image.css new file mode 100644 index 00000000..3d88ab07 --- /dev/null +++ b/pos_default_empty_image/static/src/css/pos_default_empty_image.css @@ -0,0 +1,38 @@ +/****************************************************************************** + Point Of Sale - Improve Images module for OpenERP + Copyright (C) 2014 GRAP (http://www.grap.coop) + @author Julien WESTE + @author Sylvain LE GAL (https://twitter.com/legalsylvain) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +******************************************************************************/ + +/* + New display for 'product-img' and 'product-name' where there isn't image; +*/ + +.product-img-without-image{ + height:25px !important; +} + +.product-name-without-image{ + bottom:auto !important; + top:25px !important; + padding-top:3px !important; + height:80px !important; + font-size: 24px !important; + line-height: 20px; + text-align: center; + word-wrap: break-word; +} diff --git a/pos_default_empty_image/static/src/js/pos_default_empty_image.js b/pos_default_empty_image/static/src/js/pos_default_empty_image.js index f73442ca..15abc508 100644 --- a/pos_default_empty_image/static/src/js/pos_default_empty_image.js +++ b/pos_default_empty_image/static/src/js/pos_default_empty_image.js @@ -1,17 +1,42 @@ odoo.define('pos_default_empty_image', function (require) { -"use strict"; + "use strict"; var models = require('point_of_sale.models'); var screens = require('point_of_sale.screens'); + var core = require('web.core'); + + var QWeb = core.qweb; + //don't try to get an image if we know the product ain't one var ProductListImageWidget = screens.ProductListWidget.include({ get_product_image_url: function(product){ if (product.has_image) return this._super(product); + }, - return '/web/static/src/img/placeholder.png'; - } + // Change product display if product has no image; + render_product: function(product){ + if (product.has_image){ + return this._super(product); + } + else { + var cached = this.product_cache.get_node(product.id); + if(!cached){ + var image_url = this.get_product_image_url(product); + var product_html = QWeb.render('ProductNoImage',{ + widget: this, + product: product, + }); + var product_node = document.createElement('div'); + product_node.innerHTML = product_html; + product_node = product_node.childNodes[1]; + this.product_cache.cache_node(product.id,product_node); + return product_node; + } + return cached; + } + }, }); var _super_posmodel = models.PosModel.prototype; diff --git a/pos_default_empty_image/static/src/xml/pos_default_empty_image.xml b/pos_default_empty_image/static/src/xml/pos_default_empty_image.xml new file mode 100644 index 00000000..46060953 --- /dev/null +++ b/pos_default_empty_image/static/src/xml/pos_default_empty_image.xml @@ -0,0 +1,23 @@ + + + + +
+ + + + + + + + + + +
+
+ +
+
+
+
+ diff --git a/pos_default_empty_image/views/view.xml b/pos_default_empty_image/views/templates.xml similarity index 64% rename from pos_default_empty_image/views/view.xml rename to pos_default_empty_image/views/templates.xml index 06c99f73..ce1ee79f 100644 --- a/pos_default_empty_image/views/view.xml +++ b/pos_default_empty_image/views/templates.xml @@ -4,5 +4,8 @@ + + + From 1c98932294c8ee2bf8f6d9ba4319ea18ee92a4aa Mon Sep 17 00:00:00 2001 From: Sylvain LE GAL Date: Mon, 17 Apr 2017 19:05:27 +0200 Subject: [PATCH 09/16] [FIX] set has_image on 'product.product' model [IMP] make has_image stored [REF] improve description and add screenshots [REF] OCA convention --- pos_default_empty_image/README.rst | 58 ++++++++++-------- pos_default_empty_image/models/__init__.py | 2 +- pos_default_empty_image/models/product.py | 16 ----- .../models/product_product.py | 18 ++++++ .../description/pos_display_default.png | Bin 0 -> 52475 bytes .../description/pos_display_improved.png | Bin 0 -> 54804 bytes .../src/css/pos_default_empty_image.css | 25 ++------ pos_default_empty_image/static/src/js/db.js | 17 +++++ ...{pos_default_empty_image.js => widgets.js} | 13 +--- pos_default_empty_image/views/templates.xml | 3 +- 10 files changed, 76 insertions(+), 76 deletions(-) delete mode 100644 pos_default_empty_image/models/product.py create mode 100644 pos_default_empty_image/models/product_product.py create mode 100644 pos_default_empty_image/static/description/pos_display_default.png create mode 100644 pos_default_empty_image/static/description/pos_display_improved.png create mode 100644 pos_default_empty_image/static/src/js/db.js rename pos_default_empty_image/static/src/js/{pos_default_empty_image.js => widgets.js} (72%) diff --git a/pos_default_empty_image/README.rst b/pos_default_empty_image/README.rst index 77c13d62..2623a082 100644 --- a/pos_default_empty_image/README.rst +++ b/pos_default_empty_image/README.rst @@ -6,59 +6,66 @@ POS Default Empty Image ======================= -In the point of sale, trying to load known inexistant images -is a waste of time. +This module extends the functionality of point of sale to make PoS load faster +and to improve products display. +Point Of Sale Load faster +------------------------- + +In the point of sale, trying to load known inexistant images is a waste of time. When you have 8000 products in your Point of Sale and most of them don't have images, you are happy to save thousands of useless requests: the POS load way faster. -Technical information -===================== - -Each time the pos instantiate a product, it will add an - +Improve products display +------------------------ -The browser will trigger as many requests than there is different url. +By default, Odoo PoS display a useless generic image for products that doesn't +have images. + .. figure:: /pos_default_empty_image/static/description/pos_display_default.png + :width: 800 px -If you have many products, the browser will soon reach his limit of -network connections to Odoo server and will wait for free slots instead of -loading other valuable contents. Then the POS is then very slow to work with. +With this module, the display of the product is changed, (Size of the name +is increased for better visibility); + .. figure:: /pos_default_empty_image/static/description/pos_display_improved.png + :width: 800 px -This module adds a field _has_image in product.template. +Technical information +===================== -If product has no image, the product image url is not sent to the POS +Each time the pos instantiate a product, it will add this code for each product -In the product list, the display of the product is changed, - (Size of the name is increased for better visibility); +.. code:: html -Indeed, if the product has an image, it will load normally. + -This module is compatible with pos_product_template +The browser will trigger as many requests than there are different urls. +If you have many products, the browser will soon reach his limit of +network connections to Odoo server and will wait for free slots instead of +loading other valuable contents. Then the POS is then very slow to work with. -Known issues -============ +This module adds a field has_image in product.product model. +If product has no image, the product image url is not sent to the POS Updates ======= * Feb 2016 : First version -* Feb 2017 : migration to v10 and improvements for Display - taken from - this module `pos_improve_images from GRAP - `_ for OpenERP 7. +* Feb 2017 : migration to v10 and improvements for Display Bug Tracker =========== -Bugs are tracked on `GitHub Issues `_. -In case of trouble, please check there if your issue has already been reported. -If you spotted it first, help us smashing it by providing a detailed and welcomed feedback `here `_. +Bugs are tracked on `GitHub Issues +`_. In case of trouble, please +check there if your issue has already been reported. If you spotted it first, +help us smash it by providing detailed and welcomed feedback. Credits @@ -69,6 +76,7 @@ Contributors * Hparfr `Akretion `_ * Sylvain LE GAL +* Invitu Maintainer diff --git a/pos_default_empty_image/models/__init__.py b/pos_default_empty_image/models/__init__.py index 9649db77..5c74c8c3 100644 --- a/pos_default_empty_image/models/__init__.py +++ b/pos_default_empty_image/models/__init__.py @@ -1 +1 @@ -from . import product +from . import product_product diff --git a/pos_default_empty_image/models/product.py b/pos_default_empty_image/models/product.py deleted file mode 100644 index 0a9344db..00000000 --- a/pos_default_empty_image/models/product.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- coding: utf-8 -*- -# © <2015> -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). - -from odoo import models, fields, api - - -class ProductTemplate(models.Model): - _inherit = 'product.template' - - @api.multi - def _get_has_image(self): - self.ensure_one() - self.has_image = self.image is not False - - has_image = fields.Boolean(compute='_get_has_image', string='Has Image') diff --git a/pos_default_empty_image/models/product_product.py b/pos_default_empty_image/models/product_product.py new file mode 100644 index 00000000..53f93a0f --- /dev/null +++ b/pos_default_empty_image/models/product_product.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +# © <2015> +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import models, fields, api + + +class ProductProduct(models.Model): + _inherit = 'product.product' + + @api.multi + @api.depends('image') + def _compute_has_image(self): + for product in self: + product.has_image = product.image is not False + + has_image = fields.Boolean( + compute='_compute_has_image', string='Has Image', store=True) diff --git a/pos_default_empty_image/static/description/pos_display_default.png b/pos_default_empty_image/static/description/pos_display_default.png new file mode 100644 index 0000000000000000000000000000000000000000..6974e40d14580020681fa8243b59b68f8cbc6b98 GIT binary patch literal 52475 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 T_ao@mTAGG9eB70BFevp8_goaA literal 0 HcmV?d00001 diff --git a/pos_default_empty_image/static/description/pos_display_improved.png b/pos_default_empty_image/static/description/pos_display_improved.png new file mode 100644 index 0000000000000000000000000000000000000000..0ec18e43511a292295cb4fa62fdf290276a8e09f GIT binary patch literal 54804 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 literal 0 HcmV?d00001 diff --git a/pos_default_empty_image/static/src/css/pos_default_empty_image.css b/pos_default_empty_image/static/src/css/pos_default_empty_image.css index 3d88ab07..5452eabf 100644 --- a/pos_default_empty_image/static/src/css/pos_default_empty_image.css +++ b/pos_default_empty_image/static/src/css/pos_default_empty_image.css @@ -1,25 +1,8 @@ -/****************************************************************************** - Point Of Sale - Improve Images module for OpenERP - Copyright (C) 2014 GRAP (http://www.grap.coop) +/* + Copyright (C) 2014 - Today: GRAP (http://www.grap.coop) @author Julien WESTE - @author Sylvain LE GAL (https://twitter.com/legalsylvain) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as - published by the Free Software Foundation, either version 3 of the - License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . -******************************************************************************/ - -/* - New display for 'product-img' and 'product-name' where there isn't image; + @author: Sylvain LE GAL (https://twitter.com/legalsylvain) + License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). */ .product-img-without-image{ diff --git a/pos_default_empty_image/static/src/js/db.js b/pos_default_empty_image/static/src/js/db.js new file mode 100644 index 00000000..8615de67 --- /dev/null +++ b/pos_default_empty_image/static/src/js/db.js @@ -0,0 +1,17 @@ +odoo.define('pos_default_empty_image.db', function (require) { + "use strict"; + + var models = require('point_of_sale.models'); + + var _super_posmodel = models.PosModel.prototype; + + // load new field 'has_image' for 'product.product' model + models.PosModel = models.PosModel.extend({ + initialize: function (session, attributes) { + var product_model = _.find(this.models, function(model){ return model.model === 'product.product'; }); + product_model.fields.push('has_image'); + + return _super_posmodel.initialize.call(this, session, attributes); + }, + }); +}); diff --git a/pos_default_empty_image/static/src/js/pos_default_empty_image.js b/pos_default_empty_image/static/src/js/widgets.js similarity index 72% rename from pos_default_empty_image/static/src/js/pos_default_empty_image.js rename to pos_default_empty_image/static/src/js/widgets.js index 15abc508..ab7c82b5 100644 --- a/pos_default_empty_image/static/src/js/pos_default_empty_image.js +++ b/pos_default_empty_image/static/src/js/widgets.js @@ -1,7 +1,6 @@ -odoo.define('pos_default_empty_image', function (require) { +odoo.define('pos_default_empty_image.widgets', function (require) { "use strict"; - var models = require('point_of_sale.models'); var screens = require('point_of_sale.screens'); var core = require('web.core'); @@ -38,14 +37,4 @@ odoo.define('pos_default_empty_image', function (require) { } }, }); - - var _super_posmodel = models.PosModel.prototype; - models.PosModel = models.PosModel.extend({ - initialize: function (session, attributes) { - var product_model = _.find(this.models, function(model){ return model.model === 'product.product'; }); - product_model.fields.push('has_image'); - - return _super_posmodel.initialize.call(this, session, attributes); - }, - }); }); diff --git a/pos_default_empty_image/views/templates.xml b/pos_default_empty_image/views/templates.xml index ce1ee79f..8df12918 100644 --- a/pos_default_empty_image/views/templates.xml +++ b/pos_default_empty_image/views/templates.xml @@ -2,7 +2,8 @@