openerp-community-reviewer team mailing list archive
-
openerp-community-reviewer team
-
Mailing list archive
-
Message #04645
[Merge] lp:~sylvain-legal/web-addons/7.0-web_easy_switch_company into lp:web-addons
Sylvain LE GAL (GRAP) has proposed merging lp:~sylvain-legal/web-addons/7.0-web_easy_switch_company into lp:web-addons.
Requested reviews:
Web-Addons Core Editors (webaddons-core-editors)
For more details, see:
https://code.launchpad.net/~sylvain-legal/web-addons/7.0-web_easy_switch_company/+merge/210289
Add a new module 'web_easy_switch_company'.
This module allow a user to switch from a company to another more easily. (with just 2 mouse click & without warning message).
--
https://code.launchpad.net/~sylvain-legal/web-addons/7.0-web_easy_switch_company/+merge/210289
Your team Web-Addons Core Editors is requested to review the proposed merge of lp:~sylvain-legal/web-addons/7.0-web_easy_switch_company into lp:web-addons.
=== added directory 'web_easy_switch_company'
=== added file 'web_easy_switch_company/__init__.py'
--- web_easy_switch_company/__init__.py 1970-01-01 00:00:00 +0000
+++ web_easy_switch_company/__init__.py 2014-03-10 20:16:22 +0000
@@ -0,0 +1,7 @@
+# -*- encoding: utf-8 -*-
+################################################################################
+# See __openerp__.py file for Copyright and Licence Informations.
+################################################################################
+
+import model
+import controllers
=== added file 'web_easy_switch_company/__openerp__.py'
--- web_easy_switch_company/__openerp__.py 1970-01-01 00:00:00 +0000
+++ web_easy_switch_company/__openerp__.py 2014-03-10 20:16:22 +0000
@@ -0,0 +1,66 @@
+# -*- encoding: utf-8 -*-
+################################################################################
+# See Copyright and Licence Informations undermentioned.
+################################################################################
+
+{
+ 'name': 'Multicompany - Easy Switch Company',
+ 'version': '1.0',
+ 'category': 'web',
+ 'description': """
+Add menu to allow user to switch to another company more easily
+===============================================================
+
+Functionnalities :
+------------------
+ * Add a new menu in the top bar to switch to another company more easily;
+ * Remove the old behaviour to switch company;
+ * Remove the display of the current company after the name of the user,
+ the information is redundant and because the name of the company is displayed
+ only if company_id != 1 by default.
+
+Documentations :
+----------------
+ * Video : http://www.youtube.com/watch?v=Cpm6dg-IEQQ
+
+Technical informations :
+------------------------
+ * 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 and Licence :
+-----------------------
+ * 2014, Groupement Régional Alimentaire de Proximité
+ * Licence : AGPL-3 (http://www.gnu.org/licenses/)
+
+Contacts :
+----------
+ * Sylvain LE GAL (https://twitter.com/legalsylvain);
+ * <informatique@xxxxxxxxx> for any help or question about this module.
+ """,
+ 'author': 'GRAP',
+ 'website': 'http://www.grap.coop',
+ 'license': 'AGPL-3',
+ 'depends': [
+ 'web',
+ ],
+ 'data': [
+ 'view/res_users_view.xml',
+ ],
+ 'demo': [],
+ 'js': [
+ 'static/src/js/switch_company.js',
+ ],
+ 'css': [],
+ 'qweb': [
+ 'static/src/xml/switch_company.xml',
+ ],
+ 'images': [],
+ 'post_load': '',
+ 'application': False,
+ 'installable': True,
+ 'auto_install': False,
+}
=== added directory 'web_easy_switch_company/controllers'
=== added file 'web_easy_switch_company/controllers/__init__.py'
--- web_easy_switch_company/controllers/__init__.py 1970-01-01 00:00:00 +0000
+++ web_easy_switch_company/controllers/__init__.py 2014-03-10 20:16:22 +0000
@@ -0,0 +1,6 @@
+# -*- encoding: utf-8 -*-
+################################################################################
+# See __openerp__.py file for Copyright and Licence Informations.
+################################################################################
+
+import main
=== added file 'web_easy_switch_company/controllers/main.py'
--- web_easy_switch_company/controllers/main.py 1970-01-01 00:00:00 +0000
+++ web_easy_switch_company/controllers/main.py 2014-03-10 20:16:22 +0000
@@ -0,0 +1,13 @@
+# -*- encoding: utf-8 -*-
+################################################################################
+# See __openerp__.py file for Copyright and Licence Informations.
+################################################################################
+
+import openerp
+
+class WebEasySwitchCompanyController(openerp.addons.web.http.Controller):
+ _cp_path = '/web_easy_switch_company/switch'
+
+ @openerp.addons.web.http.jsonrequest
+ def change_current_company(self, req, company_id):
+ req.session.model('res.users').change_current_company(company_id)
=== added directory 'web_easy_switch_company/model'
=== added file 'web_easy_switch_company/model/__init__.py'
--- web_easy_switch_company/model/__init__.py 1970-01-01 00:00:00 +0000
+++ web_easy_switch_company/model/__init__.py 2014-03-10 20:16:22 +0000
@@ -0,0 +1,7 @@
+# -*- encoding: utf-8 -*-
+################################################################################
+# See __openerp__.py file for Copyright and Licence Informations.
+################################################################################
+
+import res_users
+import res_company
=== added file 'web_easy_switch_company/model/res_company.py'
--- web_easy_switch_company/model/res_company.py 1970-01-01 00:00:00 +0000
+++ web_easy_switch_company/model/res_company.py 2014-03-10 20:16:22 +0000
@@ -0,0 +1,32 @@
+## -*- encoding: utf-8 -*-
+#################################################################################
+## See __openerp__.py file for Copyright and Licence Informations.
+#################################################################################
+
+from openerp.osv.orm import Model
+from openerp.osv import fields
+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),
+ }),
+ }
=== added file 'web_easy_switch_company/model/res_users.py'
--- web_easy_switch_company/model/res_users.py 1970-01-01 00:00:00 +0000
+++ web_easy_switch_company/model/res_users.py 2014-03-10 20:16:22 +0000
@@ -0,0 +1,13 @@
+# -*- encoding: utf-8 -*-
+################################################################################
+# See __openerp__.py file for Copyright and Licence Informations.
+################################################################################
+
+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})
=== added directory 'web_easy_switch_company/static'
=== added directory 'web_easy_switch_company/static/src'
=== added directory 'web_easy_switch_company/static/src/img'
=== added file 'web_easy_switch_company/static/src/img/icon.png'
Binary files web_easy_switch_company/static/src/img/icon.png 1970-01-01 00:00:00 +0000 and web_easy_switch_company/static/src/img/icon.png 2014-03-10 20:16:22 +0000 differ
=== added file 'web_easy_switch_company/static/src/img/selection-off.png'
Binary files web_easy_switch_company/static/src/img/selection-off.png 1970-01-01 00:00:00 +0000 and web_easy_switch_company/static/src/img/selection-off.png 2014-03-10 20:16:22 +0000 differ
=== added file 'web_easy_switch_company/static/src/img/selection-on.png'
Binary files web_easy_switch_company/static/src/img/selection-on.png 1970-01-01 00:00:00 +0000 and web_easy_switch_company/static/src/img/selection-on.png 2014-03-10 20:16:22 +0000 differ
=== added directory 'web_easy_switch_company/static/src/js'
=== added file 'web_easy_switch_company/static/src/js/switch_company.js'
--- web_easy_switch_company/static/src/js/switch_company.js 1970-01-01 00:00:00 +0000
+++ web_easy_switch_company/static/src/js/switch_company.js 2014-03-10 20:16:22 +0000
@@ -0,0 +1,115 @@
+/******************************************************************************/
+/* See __openerp__.py file for Copyright and Licence Informations. */
+/******************************************************************************/
+
+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();
+ 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','company_ids'],[['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
+ self._fetch('res.company',['name',],[['id','in', res_users[0].company_ids]]).then(function(res_company){
+ for ( var i=0 ; i < res_company.length; i++) {
+ res_company[i]['logo_topbar'] = self.session.url(
+ '/web/binary/image', {
+ model:'res.company',
+ field: 'logo_topbar',
+ id: res_company[i].id
+ });
+ if (res_company[i].id == self.current_company_id){
+ res_company[i]['logo_state'] = '/web_easy_switch_company/static/src/img/selection-on.png';
+ }
+ else{
+ res_company[i]['logo_state'] = '/web_easy_switch_company/static/src/img/selection-off.png';
+ }
+ self.companies.push(res_company[i]);
+ }
+ // 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'));
+ },
+
+ });
+
+};
+
=== added directory 'web_easy_switch_company/static/src/xml'
=== added file 'web_easy_switch_company/static/src/xml/switch_company.xml'
--- web_easy_switch_company/static/src/xml/switch_company.xml 1970-01-01 00:00:00 +0000
+++ web_easy_switch_company/static/src/xml/switch_company.xml 2014-03-10 20:16:22 +0000
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- *********************************************************************** -->
+<!-- See __openerp__.py file for Copyright and Licence Informations. -->
+<!-- *********************************************************************** -->
+<template>
+
+ <t t-name="web_easy_switch_company.SwitchCompanyWidget">
+ <span class="oe_user_menu oe_topbar_item oe_dropdown_toggle oe_dropdown_arrow">
+ <span>
+ <t t-esc="widget.current_company_name"/>
+ </span>
+ <ul class="oe_dropdown_menu">
+ <t t-foreach="widget.companies" t-as="company">
+ <li>
+ <a class="easy_switch_company_company_item"
+ href="#"
+ t-att-data-company-id="company.id">
+ <img class="oe_topbar_avatar" t-att-src="company.logo_topbar"/>
+ <img class="oe_topbar_avatar" t-att-src="company.logo_state"/>
+ <t t-esc="company.name"/>
+ </a>
+ </li>
+ </t>
+ </ul>
+ </span>
+ </t>
+
+</template>
+
=== added directory 'web_easy_switch_company/view'
=== added file 'web_easy_switch_company/view/res_users_view.xml'
--- web_easy_switch_company/view/res_users_view.xml 1970-01-01 00:00:00 +0000
+++ web_easy_switch_company/view/res_users_view.xml 2014-03-10 20:16:22 +0000
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<openerp>
+ <data>
+
+ <record id="view_res_users_simple_modif_form" model="ir.ui.view">
+ <field name="name">res.users.form</field>
+ <field name="model">res.users</field>
+ <field name="inherit_id" ref="base.view_users_form_simple_modif"/>
+ <field name="arch" type="xml">
+ <!-- hide old behaviour to change company -->
+ <field name="company_id" position="replace" />
+ </field>
+ </record>
+ </data>
+</openerp>
Follow ups
-
[Merge] lp:~sylvain-legal/web-addons/7.0-web_easy_switch_company into lp:web-addons
From: Sylvain LE GAL (GRAP), 2014-04-02
-
Re: [Merge] lp:~sylvain-legal/web-addons/7.0-web_easy_switch_company into lp:web-addons
From: Sylvain LE GAL (GRAP), 2014-03-24
-
Re: [Merge] lp:~sylvain-legal/web-addons/7.0-web_easy_switch_company into lp:web-addons
From: Guewen Baconnier @ Camptocamp, 2014-03-24
-
Re: [Merge] lp:~sylvain-legal/web-addons/7.0-web_easy_switch_company into lp:web-addons
From: Sylvain LE GAL (GRAP), 2014-03-23
-
Re: [Merge] lp:~sylvain-legal/web-addons/7.0-web_easy_switch_company into lp:web-addons
From: Guewen Baconnier @ Camptocamp, 2014-03-21
-
Re: [Merge] lp:~sylvain-legal/web-addons/7.0-web_easy_switch_company into lp:web-addons
From: Pedro Manuel Baeza, 2014-03-20
-
Re: [Merge] lp:~sylvain-legal/web-addons/7.0-web_easy_switch_company into lp:web-addons
From: Pedro Manuel Baeza, 2014-03-20
-
Re: [Merge] lp:~sylvain-legal/web-addons/7.0-web_easy_switch_company into lp:web-addons
From: Sylvain LE GAL (GRAP), 2014-03-20
-
Re: [Merge] lp:~sylvain-legal/web-addons/7.0-web_easy_switch_company into lp:web-addons
From: Pedro Manuel Baeza, 2014-03-20
-
Re: [Merge] lp:~sylvain-legal/web-addons/7.0-web_easy_switch_company into lp:web-addons
From: Sylvain LE GAL (GRAP), 2014-03-20
-
Re: [Merge] lp:~sylvain-legal/web-addons/7.0-web_easy_switch_company into lp:web-addons
From: arthru, 2014-03-18
-
Re: [Merge] lp:~sylvain-legal/web-addons/7.0-web_easy_switch_company into lp:web-addons
From: Sylvain LE GAL (GRAP), 2014-03-10