From 69640a3fd00a2fdc4d326021ce1dced51970666b Mon Sep 17 00:00:00 2001 From: hpar Date: Tue, 28 Nov 2017 15:37:16 +0100 Subject: [PATCH] Add mobule pos_backend_partner --- pos_backend_partner/README.rst | 53 +++++++++++++ pos_backend_partner/__init__.py | 1 + pos_backend_partner/__manifest__.py | 25 ++++++ pos_backend_partner/models/__init__.py | 1 + pos_backend_partner/models/partner.py | 24 ++++++ .../static/src/js/back_partner.js | 17 ++++ .../static/src/js/pos_partner.js | 78 +++++++++++++++++++ pos_backend_partner/views/assets.xml | 15 ++++ pos_backend_partner/views/backend_partner.xml | 37 +++++++++ 9 files changed, 251 insertions(+) create mode 100644 pos_backend_partner/README.rst create mode 100644 pos_backend_partner/__init__.py create mode 100644 pos_backend_partner/__manifest__.py create mode 100644 pos_backend_partner/models/__init__.py create mode 100644 pos_backend_partner/models/partner.py create mode 100644 pos_backend_partner/static/src/js/back_partner.js create mode 100644 pos_backend_partner/static/src/js/pos_partner.js create mode 100644 pos_backend_partner/views/assets.xml create mode 100644 pos_backend_partner/views/backend_partner.xml diff --git a/pos_backend_partner/README.rst b/pos_backend_partner/README.rst new file mode 100644 index 00000000..643d16ef --- /dev/null +++ b/pos_backend_partner/README.rst @@ -0,0 +1,53 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :alt: License + +POS Backend Partner +=================== + +Choose a POS customer from the backend. + + +- Replace customer selection screen in POS by a backend view. +- Perf improvement : Full customer list is not downloaded anymore by the POS at startup. +- Benefit from the backend features: advanced search, easy to extend views, etc. + + +Configuration +============= + +On each client's browser, during the first run, the permission for opening popup is prompted, it should be allowed. + + +Roadmap +======= + + +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 +------------ + +* Raphaël Reverdy + +Maintainer +---------- + +.. image:: http://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: http://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_backend_partner/__init__.py b/pos_backend_partner/__init__.py new file mode 100644 index 00000000..9a7e03ed --- /dev/null +++ b/pos_backend_partner/__init__.py @@ -0,0 +1 @@ +from . import models \ No newline at end of file diff --git a/pos_backend_partner/__manifest__.py b/pos_backend_partner/__manifest__.py new file mode 100644 index 00000000..8c04888a --- /dev/null +++ b/pos_backend_partner/__manifest__.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# Copyright 2017 Akretion (http://www.akretion.com). +# @author Raphaël Reverdy +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Pos Backend customer", + "summary": "Choose point of sale customers in backend", + "version": "10.0.1.0.0", + "category": "Uncategorized", + "website": "www.akretion.com", + "author": " Akretion", + "license": "AGPL-3", + "application": False, + 'installable': True, + "depends": [ + "pos_backend_communication", + ], + "data": [ + 'views/assets.xml', + 'views/backend_partner.xml', + ], + "qweb": [ + ] +} diff --git a/pos_backend_partner/models/__init__.py b/pos_backend_partner/models/__init__.py new file mode 100644 index 00000000..3f4a5ff4 --- /dev/null +++ b/pos_backend_partner/models/__init__.py @@ -0,0 +1 @@ +from . import partner \ No newline at end of file diff --git a/pos_backend_partner/models/partner.py b/pos_backend_partner/models/partner.py new file mode 100644 index 00000000..6e943e6a --- /dev/null +++ b/pos_backend_partner/models/partner.py @@ -0,0 +1,24 @@ +# coding: utf-8 +# @author Raphael Reverdy +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp import models, api + + +class Partner(models.Model): + _inherit = "res.partner" + + @api.multi + def select_in_pos_current_order(self): + """Set point of sale customer to this partner. + + Action called from view with self.id = a res.partner. + """ + return { + 'type': 'ir.actions.act_tell_pos', + 'payload': { + 'type': 'partner.partner_selected', + 'partner_id': self.id, + 'name': self.name, + }, + } diff --git a/pos_backend_partner/static/src/js/back_partner.js b/pos_backend_partner/static/src/js/back_partner.js new file mode 100644 index 00000000..4a945113 --- /dev/null +++ b/pos_backend_partner/static/src/js/back_partner.js @@ -0,0 +1,17 @@ +'use strict'; +odoo.define('pos_backend_partner.partner_back', function (require) { + var translation = require('web.translation'); + var _t = translation._t; + + var tools = require('pos_backend_communication.back'); + + if (tools.is_tied_to_pos()) { + tools.callbacks['partner.choose'] = function() { + //get focus with alert + //TODO: replace with notifications + alert(_t('Choose a customer')); + }; + //tell the POS we are ready to receive + tools.sendMessage({type: 'partner.ready'}); + } +}); \ No newline at end of file diff --git a/pos_backend_partner/static/src/js/pos_partner.js b/pos_backend_partner/static/src/js/pos_partner.js new file mode 100644 index 00000000..b7e063d8 --- /dev/null +++ b/pos_backend_partner/static/src/js/pos_partner.js @@ -0,0 +1,78 @@ +'use strict'; + +odoo.define('pos_backend_partner.partner_pos', function (require) { + var tools = require('pos_backend_communication.tools'); + var session = require('web.session'); + var ProductScreenWidget = require('point_of_sale.screens'); + var translation = require('web.translation'); + var _t = translation._t; + var action_url = null; + var pos_instance = null; + + function set_client(message)  { + var data = message.data; + var partner_info = { + 'id': parseInt(data.id, 10), + 'name': data.name + }; + pos_instance.get('selectedOrder').set_client(partner_info); + alert(_t('Customer set')); //try to get the focus back + } + + function open_backend(message) { + console.log('open backend partner'); + //lookup action_id + action_url = action_url || session.rpc( + '/web/action/load', { "action_id":"pos_backend_partner.action_select_partner_pos"}) + .then(function (e) { return e.id; }); + + action_url.then(function (action_id) { + var url = "/web#view_type=list&model=res.partner&action=" + action_id; + var msg = {'type': 'partner.choose'}; + tools.open_page(url, msg, 'partner'); + }); + } + + ProductScreenWidget.ActionpadWidget.include({ + init: function(parent, options) { + this._super(parent, options); + pos_instance = this.pos; + + }, + renderElement: function() { + var self = this; + this._super(); + this.$('.set-customer').unbind('click'); + this.$('.set-customer').click(function(){ + open_backend(); + }); + } + }); + + tools.callbacks['partner.partner_selected'] = set_client; + + return { + callbacks: tools.callbacks + }; +}); + +odoo.define('pos_backend_partner.prevent_model_load', function (require) { + // Prevent res.partner to be loaded at startup of the POS + // we load partners from the back office + + //huge perf improvement server side AND client side AND network side + // we don't need it since the client is picked from the backoffice + var pos_models = require('point_of_sale.models'); + var partnerModelId = null; + pos_models.PosModel.prototype.models.some(function (m, idx) { + if (m.model !== "res.partner") + return false; + partnerModelId = idx; //got her ! + return true; //exit early + }); + if (partnerModelId) { + pos_models.PosModel.prototype.models.splice(partnerModelId, 1); + //remove the model without changing the reference to the array + } +}); + diff --git a/pos_backend_partner/views/assets.xml b/pos_backend_partner/views/assets.xml new file mode 100644 index 00000000..a2424f66 --- /dev/null +++ b/pos_backend_partner/views/assets.xml @@ -0,0 +1,15 @@ + + + + + + + diff --git a/pos_backend_partner/views/backend_partner.xml b/pos_backend_partner/views/backend_partner.xml new file mode 100644 index 00000000..d5c6076a --- /dev/null +++ b/pos_backend_partner/views/backend_partner.xml @@ -0,0 +1,37 @@ + + + + + res.partner + + + +