Reviewers: ,
Please review this at http://codereview.tryton.org/30004/
Affected files:
M CHANGELOG
M company.py
M tests/test_company.py
Index: CHANGELOG
===================================================================
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,5 @@
+* Allow to change user company with context
+
Version 2.0.0 - 2011-04-27
* Bug fixes (see mercurial logs for details)
Index: company.py
===================================================================
--- a/company.py
+++ b/company.py
@@ -167,6 +167,33 @@
res = copy.deepcopy(res)
return res
+ def read(self, ids, fields_names=None):
+ user_id = Transaction().user
+ if user_id == 0 and 'user' in Transaction().context:
+ user_id = Transaction().context['user']
+ result = super(User, self).read(ids, fields_names=fields_names)
+ if (fields_names
+ and 'company' in fields_names
+ and 'company' in Transaction().context):
+ values = None
+ if isinstance(ids, (int, long)):
+ if int(user_id) == ids:
+ values = result
+ else:
+ if int(user_id) in ids:
+ for vals in result:
+ if vals['id'] == int(user_id):
+ values = vals
+ break
+ if values:
+ with Transaction().reset_context():
+ companies = self.read(user_id,
['companies'])['companies']
+ company_id = Transaction().context['company']
+ if ((company_id and company_id in companies)
+ or not company_id):
+ values['company'] = company_id
+ return result
+
User()
Index: tests/test_company.py
===================================================================
--- a/tests/test_company.py
+++ b/tests/test_company.py
@@ -24,6 +24,7 @@
self.company = POOL.get('company.company')
self.employee = POOL.get('company.employee')
self.currency = POOL.get('currency.currency')
+ self.user = POOL.get('res.user')
def test0005views(self):
'''
@@ -87,6 +88,63 @@
})
transaction.cursor.commit()
+ def test0040user(self):
+ '''
+ Test user company
+ '''
+ with Transaction().start(DB_NAME, USER, CONTEXT) as transaction:
+ currency1_id = self.currency.search([
+ ('code', '=', 'cu1'),
+ ], 0, 1, None)[0]
+
+ company1_id = self.company.search([
+ ('name', '=', 'B2CK'),
+ ], 0, 1, None)[0]
+
+ company2_id = self.company.create({
+ 'name': 'B2CK Branch',
+ 'parent': company1_id,
+ 'currency': currency1_id,
+ })
+ user1_id = self.user.create({
+ 'name': 'Test 1',
+ 'login': 'test1',
+ 'main_company': company1_id,
+ 'company': company1_id,
+ })
+ user2_id = self.user.create({
+ 'name': 'Test 2',
+ 'login': 'test2',
+ 'main_company': company2_id,
+ 'company': company2_id,
+ })
+ self.assert_(user1_id)
+
+ with transaction.set_user(user1_id):
+ company_id = self.user.read(user1_id,
['company'])['company']
+ self.assertEqual(company_id, company1_id)
+
+ user1, user2 = self.user.browse([user1_id, user2_id])
+ self.assertEqual(user1.company.id, company1_id)
+ self.assertEqual(user2.company.id, company2_id)
+
+ with transaction.set_context({'company': company2_id}):
+ company_id = self.user.read(user1_id,
['company'])['company']
+ self.assertEqual(company_id, company2_id)
+
+ user1, user2 = self.user.browse([user1_id, user2_id])
+ self.assertEqual(user1.company.id, company2_id)
+ self.assertEqual(user2.company.id, company2_id)
+
+ with transaction.set_context({'company': False}):
+ company_id = self.user.read(user1_id,
['company'])['company']
+ self.assertEqual(company_id, False)
+
+ user1, user2 = self.user.browse([user1_id, user2_id])
+ self.assertEqual(user1.company.id, False)
+ self.assertEqual(user2.company.id, company2_id)
+
+
def suite():
suite = trytond.tests.test_tryton.suite()
from trytond.modules.currency.tests import test_currency
--
[email protected] mailing list