Browse Source
Migrate web_easy_switch_company to the last v8
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 toolbarpull/18/head
Adil Houmadi
11 years ago
13 changed files with 494 additions and 0 deletions
-
23web_easy_switch_company/__init__.py
-
71web_easy_switch_company/__openerp__.py
-
23web_easy_switch_company/controllers/__init__.py
-
36web_easy_switch_company/controllers/main.py
-
24web_easy_switch_company/model/__init__.py
-
57web_easy_switch_company/model/res_company.py
-
31web_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
-
155web_easy_switch_company/static/src/js/switch_company.js
-
50web_easy_switch_company/static/src/xml/switch_company.xml
-
24web_easy_switch_company/view/res_users_view.xml
@ -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 <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################## |
||||
|
from . import model |
||||
|
from . import controllers |
@ -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 <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################## |
||||
|
|
||||
|
{ |
||||
|
'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, |
||||
|
} |
@ -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 <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################## |
||||
|
|
||||
|
from . import main |
@ -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 <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################## |
||||
|
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 |
||||
|
|
@ -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 <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################## |
||||
|
|
||||
|
from . import res_users |
||||
|
from . import res_company |
@ -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 <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################## |
||||
|
|
||||
|
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), |
||||
|
} |
||||
|
), |
||||
|
} |
@ -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 <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################## |
||||
|
|
||||
|
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,155 @@ |
|||||
|
/****************************************************************************** |
||||
|
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 <http://www.gnu.org/licenses/>.
|
||||
|
******************************************************************************/ |
||||
|
|
||||
|
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')); |
||||
|
} |
||||
|
|
||||
|
}); |
||||
|
|
||||
|
}; |
||||
|
|
@ -0,0 +1,50 @@ |
|||||
|
<?xml version="1.0" 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 <http://www.gnu.org/licenses/>. --> |
||||
|
<!-- ********************************************************************** --> |
||||
|
<template> |
||||
|
|
||||
|
<t t-name="web_easy_switch_company.SwitchCompanyWidget"> |
||||
|
<ul class="nav navbar-nav navbar-right oe_user_menu_placeholder" style="margin-right:10px"> |
||||
|
<li class="dropdown"> |
||||
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#"> |
||||
|
<span class="oe_topbar_name"> |
||||
|
<t t-esc="widget.current_company_name"/> |
||||
|
</span> |
||||
|
<b class="caret"></b> |
||||
|
</a> |
||||
|
<ul class="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> |
||||
|
</li> |
||||
|
</ul> |
||||
|
</t> |
||||
|
|
||||
|
</template> |
||||
|
|
@ -0,0 +1,24 @@ |
|||||
|
<?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="attributes"> |
||||
|
<attribute name="invisible">1</attribute> |
||||
|
</field> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<template id="assets_backend" name="web_tests assets" inherit_id="web.assets_backend"> |
||||
|
<xpath expr="." position="inside"> |
||||
|
<script type="text/javascript" src="/web_easy_switch_company/static/src/js/switch_company.js"></script> |
||||
|
</xpath> |
||||
|
</template> |
||||
|
|
||||
|
</data> |
||||
|
</openerp> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue