From c879ba6f27925fea94b2768f2b8db5d8c86cd9e8 Mon Sep 17 00:00:00 2001 From: hparfr Date: Fri, 13 Apr 2018 12:07:33 +0200 Subject: [PATCH] Add pos_fix_search_limit module --- pos_fix_search_limit/README.rst | 77 +++++++++++++++++++ pos_fix_search_limit/__init__.py | 0 pos_fix_search_limit/__manifest__.py | 19 +++++ .../static/src/js/pos_fix_search_limit.js | 49 ++++++++++++ pos_fix_search_limit/views/pos_fix_limit.xml | 11 +++ 5 files changed, 156 insertions(+) create mode 100644 pos_fix_search_limit/README.rst create mode 100644 pos_fix_search_limit/__init__.py create mode 100644 pos_fix_search_limit/__manifest__.py create mode 100644 pos_fix_search_limit/static/src/js/pos_fix_search_limit.js create mode 100644 pos_fix_search_limit/views/pos_fix_limit.xml diff --git a/pos_fix_search_limit/README.rst b/pos_fix_search_limit/README.rst new file mode 100644 index 00000000..0b238001 --- /dev/null +++ b/pos_fix_search_limit/README.rst @@ -0,0 +1,77 @@ +.. image:: https://img.shields.io/badge/license-AGPL--3-blue.png + :target: https://www.gnu.org/licenses/agpl + :alt: License: AGPL-3 + +==================== +Pos Fix Search Limit +==================== + +This module makes the distinction between the limit of search results +and the limit of product displayed. + +Without this module, if you have many products, all the searches are limited +to 100 firsts results. + +This module increase the limit of search results to a high number +and keep the number of product displayed to 100. + + +Usage +===== + +This module is a dependecy of other modules like pos_product_template. + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/184/10.0 + +Known issues / Roadmap +====================== + +* Display a last element like "More products" to let the user know his search has been truncated. +* Truncate the list of partners with the display limit. + +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 smash it by providing detailed and welcomed feedback. + +Credits +======= + +Images +------ + +* Odoo Community Association: `Icon `_. + +Contributors +------------ + +* Raphaël Reverdy (https://www.akretion.com) + +Do not contact contributors directly about support or help with technical issues. + +Funders +------- + +The development of this module has been financially supported by: + +* Akretion + +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 https://odoo-community.org. diff --git a/pos_fix_search_limit/__init__.py b/pos_fix_search_limit/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/pos_fix_search_limit/__manifest__.py b/pos_fix_search_limit/__manifest__.py new file mode 100644 index 00000000..6b8b2490 --- /dev/null +++ b/pos_fix_search_limit/__manifest__.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Copyright 2018 Akretion +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +{ + "name": "Pos Fix Search Limit", + "summary": "Increase search in the PoS", + "version": "10.0.1.0.0", + "category": "Point of Sale", + "author": "Akretion, Odoo Community Association (OCA)", + "license": "AGPL-3", + "application": False, + "installable": True, + "depends": [ + "point_of_sale", + ], + "data": [ + "views/pos_fix_limit.xml", + ] +} diff --git a/pos_fix_search_limit/static/src/js/pos_fix_search_limit.js b/pos_fix_search_limit/static/src/js/pos_fix_search_limit.js new file mode 100644 index 00000000..1d2824b6 --- /dev/null +++ b/pos_fix_search_limit/static/src/js/pos_fix_search_limit.js @@ -0,0 +1,49 @@ +/* Copyright 2018 Akretion - Raphaël Reverdy + License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). */ +odoo.define("pos_fix_search_limit.db", function (require) { + "use strict"; + var PosDB = require("point_of_sale.DB"); + PosDB.include({ + limit: 314159265, // the maximum number of results returned by a search + }); +}); + +odoo.define('pos_fix_search_limit.product_list', function(require) { + "use strict"; + var screens = require('point_of_sale.screens'); + var core = require('web.core'); + var qweb = core.qweb; + + screens.ProductListWidget.include({ + displayLimit: 100, //number of elements displayed + renderElement: function() { + //Limit the number of elements to displayLimit (instead of db.limit) + // (db.limit has been increased to return more results) + // (but we still want to limit the display) + //And make use of document fragment, because better perfs + var self = this; + var i = 0; + var len = Math.min(this.product_list.length, this.displayLimit); + var frag = document.createDocumentFragment(); + var product_node = null; + + var el_str = qweb.render(this.template, {widget: this}); + var el_node = document.createElement('div'); + el_node.innerHTML = el_str; + el_node = el_node.childNodes[1]; + + if(this.el && this.el.parentNode){ + this.el.parentNode.replaceChild(el_node,this.el); + } + this.el = el_node; + + var list_container = el_node.querySelector('.product-list'); + for(i=0; i < len; i++){ + product_node = this.render_product(this.product_list[i]); + product_node.addEventListener('click',this.click_product_handler); + frag.appendChild(product_node); + } + list_container.appendChild(frag); + } + }); +}); diff --git a/pos_fix_search_limit/views/pos_fix_limit.xml b/pos_fix_search_limit/views/pos_fix_limit.xml new file mode 100644 index 00000000..5b27a735 --- /dev/null +++ b/pos_fix_search_limit/views/pos_fix_limit.xml @@ -0,0 +1,11 @@ + + + + + + +