Browse Source

Merge pull request #82 from akretion/pos_default_empty_image

[ADD][8.0] Pos default empty image
pull/86/head
Sylvain LE GAL 9 years ago
parent
commit
db62af8d27
  1. 85
      pos_default_empty_image/README.rst
  2. 0
      pos_default_empty_image/__init__.py
  3. 15
      pos_default_empty_image/__openerp__.py
  4. 20
      pos_default_empty_image/product.py
  5. 34
      pos_default_empty_image/static/src/js/pos_default_empty_image.js
  6. 10
      pos_default_empty_image/view/view.xml

85
pos_default_empty_image/README.rst

@ -0,0 +1,85 @@
.. 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
<img src="'/web/binary/image?model=product.product&field=image_medium&id='+product.id;" />
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 <https://github.com/OCA/web/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 <https://github.com/OCA/web/issues/new?body=module:%20pos_default_empty_image%0Aversion:%200.1%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Credits
=======
Contributors
------------
* Hparfr <https://github.com/hparfr> `Akretion <https://akretion.com>`_
* Sylvain LE GAL <https://twitter.com/legalsylvain>
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
----------
.. 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.

0
pos_default_empty_image/__init__.py

15
pos_default_empty_image/__openerp__.py

@ -0,0 +1,15 @@
# -*- coding: utf-8 -*-
# © <2015> <Akretion, GRAP, OCA>
# 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',
'author': "Akretion, GRAP, Odoo Community Association (OCA)",
'website': "https://akretion.com",
'license': 'AGPL-3',
'depends': ['point_of_sale'],
'data': ['view/view.xml'],
'qweb': [],
}

20
pos_default_empty_image/product.py

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# © <2015> <Akretion, GRAP, OCA>
# 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)

34
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);
};
};

10
pos_default_empty_image/view/view.xml

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<openerp>
<data>
<template id="assets_backend" name="pos_default_empty_image assets" inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<script type="text/javascript" src="/pos_default_empty_image/static/src/js/pos_default_empty_image.js"></script>
</xpath>
</template>
</data>
</openerp>
Loading…
Cancel
Save