From 0c4acb4847b6df22300c3e9753c148eacb959db6 Mon Sep 17 00:00:00 2001 From: Adil Houmadi Date: Tue, 15 Jul 2014 10:53:32 +0200 Subject: [PATCH] Migrate web_easy_switch_company to the last v8 - change route in controller - adapt the JS to call the backend - modify the css to graft the widget in the toolbar --- web_easy_switch_company/__init__.py | 23 +++ web_easy_switch_company/__openerp__.py | 71 ++++++++ .../controllers/__init__.py | 23 +++ web_easy_switch_company/controllers/main.py | 36 ++++ web_easy_switch_company/model/__init__.py | 24 +++ web_easy_switch_company/model/res_company.py | 57 +++++++ web_easy_switch_company/model/res_users.py | 31 ++++ .../static/src/img/icon.png | Bin 0 -> 6125 bytes .../static/src/img/selection-off.png | Bin 0 -> 112 bytes .../static/src/img/selection-on.png | Bin 0 -> 445 bytes .../static/src/js/switch_company.js | 155 ++++++++++++++++++ .../static/src/xml/switch_company.xml | 50 ++++++ .../view/res_users_view.xml | 24 +++ 13 files changed, 494 insertions(+) create mode 100644 web_easy_switch_company/__init__.py create mode 100644 web_easy_switch_company/__openerp__.py create mode 100644 web_easy_switch_company/controllers/__init__.py create mode 100644 web_easy_switch_company/controllers/main.py create mode 100644 web_easy_switch_company/model/__init__.py create mode 100644 web_easy_switch_company/model/res_company.py create mode 100644 web_easy_switch_company/model/res_users.py create mode 100644 web_easy_switch_company/static/src/img/icon.png create mode 100644 web_easy_switch_company/static/src/img/selection-off.png create mode 100644 web_easy_switch_company/static/src/img/selection-on.png create mode 100644 web_easy_switch_company/static/src/js/switch_company.js create mode 100644 web_easy_switch_company/static/src/xml/switch_company.xml create mode 100644 web_easy_switch_company/view/res_users_view.xml diff --git a/web_easy_switch_company/__init__.py b/web_easy_switch_company/__init__.py new file mode 100644 index 00000000..546a4603 --- /dev/null +++ b/web_easy_switch_company/__init__.py @@ -0,0 +1,23 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# Web Easy Switch Company module for OpenERP +# Copyright (C) 2014 GRAP (http://www.grap.coop) +# @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 . +# +############################################################################## +from . import model +from . import controllers diff --git a/web_easy_switch_company/__openerp__.py b/web_easy_switch_company/__openerp__.py new file mode 100644 index 00000000..05f0ea9d --- /dev/null +++ b/web_easy_switch_company/__openerp__.py @@ -0,0 +1,71 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# Web Easy Switch Company module for OpenERP +# Copyright (C) 2014 GRAP (http://www.grap.coop) +# @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 . +# +############################################################################## + +{ + 'name': 'Multicompany - Easy Switch Company', + 'version': '1.0', + 'category': 'web', + 'description': """ +Add menu to allow user to switch to another company more easily +=============================================================== + +Functionality: +-------------- + * Add a new menu in the top bar to switch to another company more easily; + * Remove the old behaviour to switch company; + +Documentations: +--------------- + * Video : http://www.youtube.com/watch?v=Cpm6dg-IEQQ + +Technical information: +---------------------- + * Create a field function 'logo_topbar' in res_company to have a good""" + """resized logo; + +Limits: +------- + * It would be interesting to show the structure of the companies; + +Copyright, Author and Licence: +------------------------------ + * Copyright: 2014, Groupement Régional Alimentaire de Proximité; + * Author: Sylvain LE GAL (https://twitter.com/legalsylvain); + * Licence: AGPL-3 (http://www.gnu.org/licenses/)""", + 'author': 'GRAP', + 'website': 'http://www.grap.coop', + 'license': 'AGPL-3', + 'depends': [ + 'web', + ], + 'data': [ + 'view/res_users_view.xml', + ], + 'js': [ + 'static/src/js/switch_company.js', + ], + 'qweb': [ + 'static/src/xml/switch_company.xml', + ], + 'installable': True, + 'auto_install': False, +} diff --git a/web_easy_switch_company/controllers/__init__.py b/web_easy_switch_company/controllers/__init__.py new file mode 100644 index 00000000..b40fe569 --- /dev/null +++ b/web_easy_switch_company/controllers/__init__.py @@ -0,0 +1,23 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# Web Easy Switch Company module for OpenERP +# Copyright (C) 2014 GRAP (http://www.grap.coop) +# @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 . +# +############################################################################## + +from . import main diff --git a/web_easy_switch_company/controllers/main.py b/web_easy_switch_company/controllers/main.py new file mode 100644 index 00000000..b8b6a2b6 --- /dev/null +++ b/web_easy_switch_company/controllers/main.py @@ -0,0 +1,36 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# Web Easy Switch Company module for OpenERP +# Copyright (C) 2014 GRAP (http://www.grap.coop) +# @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 . +# +############################################################################## +import openerp +import openerp.http as http +from openerp.http import request + +class WebEasySwitchCompanyController(http.Controller): + + @http.route('/web_easy_switch_company/switch/change_current_company', type='json', auth='none') + def change_current_company(self, company_id): + registry = openerp.modules.registry.RegistryManager.get(request.session.db) + uid = request.session.uid + context = request.session.context + with registry.cursor() as cr: + res = registry.get("res.users").change_current_company(cr, uid, company_id) + return res + diff --git a/web_easy_switch_company/model/__init__.py b/web_easy_switch_company/model/__init__.py new file mode 100644 index 00000000..e1bd2b92 --- /dev/null +++ b/web_easy_switch_company/model/__init__.py @@ -0,0 +1,24 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# Web Easy Switch Company module for OpenERP +# Copyright (C) 2014 GRAP (http://www.grap.coop) +# @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 . +# +############################################################################## + +from . import res_users +from . import res_company diff --git a/web_easy_switch_company/model/res_company.py b/web_easy_switch_company/model/res_company.py new file mode 100644 index 00000000..000e21e1 --- /dev/null +++ b/web_easy_switch_company/model/res_company.py @@ -0,0 +1,57 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# Web Easy Switch Company module for OpenERP +# Copyright (C) 2014 GRAP (http://www.grap.coop) +# @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 . +# +############################################################################## + +from openerp.osv import fields +from openerp.osv.orm import Model +from openerp.tools import image_resize_image + + +class res_company(Model): + _inherit = 'res.company' + + # Custom Section + def _switch_company_get_companies_from_partner( + self, cr, uid, ids, context=None): + return self.pool['res.company'].search( + cr, uid, [('partner_id', 'in', ids)], context=context) + + # Fields function Section + def _get_logo_topbar(self, cr, uid, ids, _field_name, _args, context=None): + result = dict.fromkeys(ids, False) + for record in self.browse(cr, uid, ids, context=context): + size = (48, 48) + result[record.id] = image_resize_image( + record.partner_id.image, size) + return result + + # Columns Section + _columns = { + 'logo_topbar': fields.function( + _get_logo_topbar, + string="Logo displayed in the switch company menu", + type="binary", store={ + 'res.company': (lambda s, c, u, i, x: i, ['partner_id'], 10), + 'res.partner': (_switch_company_get_companies_from_partner, + ['image'], 10), + } + ), + } diff --git a/web_easy_switch_company/model/res_users.py b/web_easy_switch_company/model/res_users.py new file mode 100644 index 00000000..c2ab2c13 --- /dev/null +++ b/web_easy_switch_company/model/res_users.py @@ -0,0 +1,31 @@ +# -*- encoding: utf-8 -*- +# ############################################################################# +# +# Web Easy Switch Company module for OpenERP +# Copyright (C) 2014 GRAP (http://www.grap.coop) +# @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 . +# +############################################################################## + +from openerp.osv.orm import Model + + +class res_users(Model): + _inherit = 'res.users' + + # Custom Function Section + def change_current_company(self, cr, uid, company_id, context=None): + return self.write(cr, uid, uid, {'company_id': company_id}) diff --git a/web_easy_switch_company/static/src/img/icon.png b/web_easy_switch_company/static/src/img/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ee270eb32c8a2a81c134da15e544c50f69d07315 GIT binary patch literal 6125 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 literal 0 HcmV?d00001 diff --git a/web_easy_switch_company/static/src/img/selection-off.png b/web_easy_switch_company/static/src/img/selection-off.png new file mode 100644 index 0000000000000000000000000000000000000000..c8e922cc52b4e47aeb67397084070164ae6db15a GIT binary patch literal 112 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf4nJ z@ErkR#;MwT(m+8WPZ!4!i{9h}3D(64B0WqTKz#xXjP<@1eLz_TPgg&ebxsLQ09bVu A-T(jq literal 0 HcmV?d00001 diff --git a/web_easy_switch_company/static/src/img/selection-on.png b/web_easy_switch_company/static/src/img/selection-on.png new file mode 100644 index 0000000000000000000000000000000000000000..8faf7d4def9060c05b2bd335adc56a42a13834e4 GIT binary patch literal 445 zcmV;u0Yd(XP)F4y14e=>LK&E2J>|n? zM3tMqe1E_4{`>1Qx1|4g1e0bWq~F(`Pf=Y~KUqghTTw+?JC=t@Knq!(paDwaYN?V^ z5|+RIePwv@{^_x|zh9g~mS;ic7|<^RGU_VE+L`?HM<-@N)+4HRY6)0sH`a(sCC z_0fZ;H>T{)Vt9qq04-K|S0!!jqDL=p9pq`hvshVLFJD|zjPLuekALqyyuI%IkLRb+ zU5FBh6`SqP*&4X&{r>ZZ@yhLUuM}jIc)zp1. +******************************************************************************/ + +openerp.web_easy_switch_company = function (instance) { + + /*************************************************************************** + Create an new 'SwitchCompanyWidget' widget that allow users to switch + from a company to another more easily. + ***************************************************************************/ + instance.web.SwitchCompanyWidget = instance.web.Widget.extend({ + + template:'web_easy_switch_company.SwitchCompanyWidget', + + /*********************************************************************** + Overload section + ***********************************************************************/ + + /** + * Overload 'init' function to initialize the values of the widget. + */ + init: function(parent){ + this._super(parent); + this.companies = []; + this.current_company_id = 0; + this.current_company_name = ''; + }, + + /** + * Overload 'start' function to load datas from DB. + */ + start: function () { + this._super(); + this._load_data(); + }, + + /** + * Overload 'renderElement' function to set events on company items. + */ + renderElement: function() { + var self = this; + this._super(); + if (this.companies.length === 1) { + this.$el.hide(); + } + else{ + this.$el.show(); + this.$el.find('.easy_switch_company_company_item').on('click', function(ev) { + var company_id = $(ev.target).data("company-id"); + + + if (company_id != self.current_company_id){ + var func = '/web_easy_switch_company/switch/change_current_company'; + var param = {'company_id': company_id} + self.rpc(func, param).done(function(res) { + window.location.reload() + }); + } + }); + } + }, + + + /*********************************************************************** + Custom section + ***********************************************************************/ + + /** + * helper function to load data from the server + */ + _fetch: function(model, fields, domain, ctx){ + return new instance.web.Model(model).query(fields).filter(domain).context(ctx).all(); + }, + + /** + * - Load data of the companies allowed to the current users; + * - Launch the rendering of the current widget; + */ + _load_data: function(){ + var self = this; + // Request for current users information + this._fetch('res.users',['company_id'],[['id','=',this.session.uid]]).then(function(res_users){ + self.current_company_id = res_users[0].company_id[0]; + self.current_company_name = res_users[0].company_id[1]; + // Request for other companies + // We have to go through fields_view_get to emulate the + // exact (exotic) behavior of the user preferences form in + // fetching the allowed companies wrt record rules. + // Note: calling res.company.name_search with + // user_preference=True in the context does + // not work either. + new instance.web.Model('res.company').call('name_search',{context:{'user_preference':'True'}}).then(function(res){ + var res_company = res; + for ( var i=0 ; i < res_company.length; i++) { + var logo_topbar, logo_state; + // TODO: fetching the logo of other companies fails with the + // default res.company record rule, so we should + // probably remove the logos from the menu :( + logo_topbar = self.session.url( + '/web/binary/image', { + model:'res.company', + field: 'logo_topbar', + id: res_company[i][0] + }); + if (res_company[i][0] == self.current_company_id){ + logo_state = '/web_easy_switch_company/static/src/img/selection-on.png'; + } + else{ + logo_state = '/web_easy_switch_company/static/src/img/selection-off.png'; + } + self.companies.push({ + id: res_company[i][0], + name: res_company[i][1], + logo_topbar: logo_topbar, + logo_state: logo_state + }); + } + // Update rendering + self.renderElement(); + }); + }); + }, + + }); + + /*************************************************************************** + Extend 'UserMenu' Widget to insert a 'SwitchCompanyWidget' widget. + ***************************************************************************/ + instance.web.UserMenu = instance.web.UserMenu.extend({ + + init: function(parent) { + this._super(parent); + var switch_button = new instance.web.SwitchCompanyWidget(); + switch_button.appendTo(instance.webclient.$el.find('.oe_systray')); + } + + }); + +}; + diff --git a/web_easy_switch_company/static/src/xml/switch_company.xml b/web_easy_switch_company/static/src/xml/switch_company.xml new file mode 100644 index 00000000..1ffb12b2 --- /dev/null +++ b/web_easy_switch_company/static/src/xml/switch_company.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/web_easy_switch_company/view/res_users_view.xml b/web_easy_switch_company/view/res_users_view.xml new file mode 100644 index 00000000..e16259ed --- /dev/null +++ b/web_easy_switch_company/view/res_users_view.xml @@ -0,0 +1,24 @@ + + + + + + res.users.form + res.users + + + + + 1 + + + + + + + +