Sylvain LE GAL
11 years ago
13 changed files with 303 additions and 0 deletions
-
7web_easy_switch_company/__init__.py
-
66web_easy_switch_company/__openerp__.py
-
6web_easy_switch_company/controllers/__init__.py
-
13web_easy_switch_company/controllers/main.py
-
7web_easy_switch_company/model/__init__.py
-
32web_easy_switch_company/model/res_company.py
-
13web_easy_switch_company/model/res_users.py
-
BINweb_easy_switch_company/static/src/img/icon.png
-
BINweb_easy_switch_company/static/src/img/selection-off.png
-
BINweb_easy_switch_company/static/src/img/selection-on.png
-
115web_easy_switch_company/static/src/js/switch_company.js
-
29web_easy_switch_company/static/src/xml/switch_company.xml
-
15web_easy_switch_company/view/res_users_view.xml
@ -0,0 +1,7 @@ |
|||
# -*- encoding: utf-8 -*- |
|||
################################################################################ |
|||
# See __openerp__.py file for Copyright and Licence Informations. |
|||
################################################################################ |
|||
|
|||
import model |
|||
import controllers |
@ -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@grap.coop> 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, |
|||
} |
@ -0,0 +1,6 @@ |
|||
# -*- encoding: utf-8 -*- |
|||
################################################################################ |
|||
# See __openerp__.py file for Copyright and Licence Informations. |
|||
################################################################################ |
|||
|
|||
import main |
@ -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) |
@ -0,0 +1,7 @@ |
|||
# -*- encoding: utf-8 -*- |
|||
################################################################################ |
|||
# See __openerp__.py file for Copyright and Licence Informations. |
|||
################################################################################ |
|||
|
|||
import res_users |
|||
import res_company |
@ -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), |
|||
}), |
|||
} |
@ -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}) |
After Width: 128 | Height: 128 | Size: 6.0 KiB |
After Width: 16 | Height: 16 | Size: 112 B |
After Width: 16 | Height: 16 | Size: 445 B |
@ -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')); |
|||
}, |
|||
|
|||
}); |
|||
|
|||
}; |
|||
|
@ -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> |
|||
|
@ -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> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue