← Back to team overview

openerp-community-reviewer team mailing list archive

[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