Skip to content

Commit

Permalink
[MIG] pos_default_empty_image: Migrate to 10.0
Browse files Browse the repository at this point in the history
  • Loading branch information
Invitu committed Mar 3, 2017
1 parent 5e4feef commit a52d9d0
Show file tree
Hide file tree
Showing 7 changed files with 152 additions and 0 deletions.
85 changes: 85 additions & 0 deletions pos_default_empty_image/README.rst
Original file line number Diff line number Diff line change
@@ -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.
1 change: 1 addition & 0 deletions pos_default_empty_image/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import models
15 changes: 15 additions & 0 deletions pos_default_empty_image/__manifest__.py
Original file line number Diff line number Diff line change
@@ -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': '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)",
'website': "https://akretion.com",
'license': 'AGPL-3',
'depends': ['point_of_sale'],
'data': ['view/view.xml'],
'qweb': [],
}
1 change: 1 addition & 0 deletions pos_default_empty_image/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import product
16 changes: 16 additions & 0 deletions pos_default_empty_image/models/product.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# -*- coding: utf-8 -*-
# © <2015> <Akretion, GRAP, OCA>
# 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')
26 changes: 26 additions & 0 deletions pos_default_empty_image/static/src/js/pos_default_empty_image.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
odoo.define('pos_default_empty_image', function (require) {
"use strict";

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

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);
},
});
});
8 changes: 8 additions & 0 deletions pos_default_empty_image/view/view.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<template id="assets_backend" name="pos_default_empty_image assets" inherit_id="point_of_sale.assets">
<xpath expr="." position="inside">
<script type="text/javascript" src="/pos_default_empty_image/static/src/js/pos_default_empty_image.js"></script>
</xpath>
</template>
</odoo>

0 comments on commit a52d9d0

Please sign in to comment.