Reviewers: ,
Please review this at http://codereview.tryton.org/223001/
Affected files:
M CHANGELOG
M company.py
M company.xml
Index: CHANGELOG
===================================================================
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,5 @@
+* Allow to have more than one possible employee per user
+
Version 2.2.0 - 2011-10-24
* Bug fixes (see mercurial logs for details)
* Add currency name in status bar
Index: company.py
===================================================================
--- a/company.py
+++ b/company.py
@@ -74,29 +74,40 @@
Employee()
+class UserEmployee(ModelSQL):
+ 'User - Employee'
+ _name = 'res.user-company.employee'
+ _description = __doc__
+ user = fields.Many2One('res.user', 'User', ondelete='CASCADE',
select=True,
+ required=True)
+ employee = fields.Many2One('company.employee', 'Employee',
+ ondelete='CASCADE', select=True, required=True)
+
+UserEmployee()
+
+
class User(ModelSQL, ModelView):
_name = 'res.user'
main_company = fields.Many2One('company.company', 'Main Company',
- on_change=['main_company'])
+ on_change=['main_company'])
company = fields.Many2One('company.company', 'Current Company',
- domain=[('parent', 'child_of',
[Eval('main_company')], 'parent')],
- depends=['main_company'])
+ domain=[('parent', 'child_of', [Eval('main_company')], 'parent')],
+ depends=['main_company'], on_change=['company', 'employees'])
companies = fields.Function(fields.One2Many('company.company', None,
'Current Companies'), 'get_companies')
+ employees = fields.Many2Many('res.user-company.employee', 'user',
+ 'employee', 'Employees')
employee = fields.Many2One('company.employee', 'Employee',
- domain=[('company', 'child_of', [Eval('main_company')], 'parent')],
- depends=['main_company'])
+ domain=[
+ ('company', '=', Eval('company')),
+ ('id', 'in', Eval('employees', [])),
+ ],
+ depends=['company', 'employees'])
def __init__(self):
super(User, self).__init__()
self._context_fields.insert(0, 'company')
- self._constraints += [
- ('check_company', 'child_company'),
- ]
- self._error_messages.update({
- 'child_company': 'You can not set a company that is not ' \
- 'a child of your main company!',
- })
+ self._context_fields.insert(0, 'employee')
def default_main_company(self):
return Transaction().context.get('company') or False
@@ -136,26 +147,31 @@
return res
def on_change_main_company(self, vals):
- return {'company': vals.get('main_company', False)}
+ return {
+ 'company': vals.get('main_company', False),
+ 'employee': False,
+ }
- def check_company(self, ids):
- company_obj = Pool().get('company.company')
- for user in self.browse(ids):
- if user.main_company:
- companies = company_obj.search([
- ('parent', 'child_of', [user.main_company.id]),
+ def on_change_company(self, values):
+ employee_obj = Pool().get('company.employee')
+ result = {
+ 'employee': False,
+ }
+ if values.get('company') and values.get('employees'):
+ employee_ids = employee_obj.search([
+ ('id', 'in', [e['id'] for e in values['employees']]),
+ ('company', '=', values['company']),
])
- if user.company.id and (user.company.id not in companies):
- return False
- elif user.company:
- return False
- return True
+ if employee_ids:
+ result['employee'] = employee_ids[0]
+ return result
def _get_preferences(self, user, context_only=False):
res = super(User, self)._get_preferences(user,
context_only=context_only)
if not context_only:
res['main_company'] = user.main_company.id
+ res['employees'] = [e.id for e in user.employees]
if user.employee:
res['employee'] = user.employee.id
return res
Index: company.xml
===================================================================
--- a/company.xml
+++ b/company.xml
@@ -150,6 +150,7 @@
<field name="company" widget="selection"/>
<label name="employee"/>
<field name="employee"/>
+ <field name="employees" colspan="4"/>
</xpath>
</data>
]]>
@@ -166,6 +167,8 @@
position="before">
<label name="company"/>
<field name="company" widget="selection"/>
+ <label name="employee"/>
+ <field name="employee" widget="selection"/>
</xpath>
</data>
]]>
@@ -315,6 +318,7 @@
<field name="model">company.employee</field>
<field name="type">form</field>
<field name="inherit" ref="party.party_view_form"/>
+ <field name="priority">10</field>
<field name="arch" type="xml">
<![CDATA[
<data>
@@ -337,6 +341,23 @@
]]>
</field>
</record>
+
+ <record model="ir.ui.view" id="employee_view_form2">
+ <field name="model">company.employee</field>
+ <field name="type">form</field>
+ <field name="priority">20</field>
+ <field name="arch" type="xml">
+ <![CDATA[
+ <form string="Employee">
+ <label name="party"/>
+ <field name="party"/>
+ <label name="company"/>
+ <field name="company"/>
+ </form>
+ ]]>
+ </field>
+ </record>
+
<record model="ir.ui.view" id="employee_view_tree">
<field name="model">company.employee</field>
<field name="type">tree</field>
@@ -361,7 +382,7 @@
</record>
<record model="ir.action.act_window.view"
id="act_employee_form_view2">
<field name="sequence" eval="20"/>
- <field name="view" ref="employee_view_form"/>
+ <field name="view" ref="employee_view_form2"/>
<field name="act_window" ref="act_employee_form"/>
</record>
<menuitem parent="party.menu_configuration"
action="act_employee_form"
--
[email protected] mailing list