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