From 3cc05ec6f96af8a9f3d464d0ddf3c2bf8177bf21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Bidoul?= <> Date: Wed, 15 Jun 2011 18:43:26 +0530 Subject: [PATCH] [FIX] hr_expense: Fixed problem of company id when creating invoice from expenses. lp bug: https://launchpad.net/bugs/796363 fixed bzr revid: uco@tinyerp.com-20110615131326-64npowgjwy4jk4xy --- addons/hr_expense/hr_expense.py | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/addons/hr_expense/hr_expense.py b/addons/hr_expense/hr_expense.py index 2e7020306b5..07e3ef94063 100644 --- a/addons/hr_expense/hr_expense.py +++ b/addons/hr_expense/hr_expense.py @@ -24,6 +24,7 @@ import time from osv import fields, osv from tools.translate import _ import decimal_precision as dp +import netsvc def _employee_get(obj, cr, uid, context=None): if context is None: @@ -54,6 +55,12 @@ class hr_expense_expense(osv.osv): else: return self.pool.get('res.currency').search(cr, uid, [('rate','=',1.0)], context=context)[0] + def _company_get(obj, cr, uid, context=None): + employee_id = _employee_get(obj, cr, uid, context) + if employee_id: + return obj.pool.get('hr.employee').read(cr, uid, [employee_id], ['company_id'], context)[0]['company_id'] + return False + _name = "hr.expense.expense" _description = "Expense" _columns = { @@ -91,14 +98,18 @@ class hr_expense_expense(osv.osv): 'employee_id': _employee_get, 'user_id': lambda cr, uid, id, c={}: id, 'currency_id': _get_currency, - 'company_id': lambda self, cr, uid, c: self.pool.get('res.users').browse(cr, uid, uid, c).company_id.id, + 'company_id': _company_get, } def onchange_employee_id(self, cr, uid, ids, employee_id, context=None): + emp_obj = self.pool.get('hr.employee') department_id = False + company_id = False if employee_id: - department_id = self.pool.get('hr.employee').browse(cr, uid, employee_id, context=context).department_id.id or False - return {'value':{'department_id':department_id}} + employee = emp_obj.browse(cr, uid, employee_id, context=context) + department_id = employee.department_id.id or False + company_id = employee.company_id.id or False + return {'value':{'department_id':department_id, 'company_id':company_id}} def expense_confirm(self, cr, uid, ids, *args): self.write(cr, uid, ids, { @@ -153,6 +164,7 @@ class hr_expense_expense(osv.osv): analytic_journal_obj = self.pool.get('account.analytic.journal') account_journal = self.pool.get('account.journal') for exp in self.browse(cr, uid, ids): + company_id = exp.company_id.id lines = [] for l in exp.line_ids: tax_id = [] @@ -162,10 +174,9 @@ class hr_expense_expense(osv.osv): acc = l.product_id.categ_id.property_account_expense_categ tax_id = [x.id for x in l.product_id.supplier_taxes_id] else: - acc = property_obj.get(cr, uid, 'property_account_expense_categ', 'product.category') + acc = property_obj.get(cr, uid, 'property_account_expense_categ', 'product.category', context={'force_company': company_id}) if not acc: raise osv.except_osv(_('Error !'), _('Please configure Default Expense account for Product purchase, `property_account_expense_categ`')) - lines.append((0, False, { 'name': l.name, 'account_id': acc.id, @@ -190,6 +201,7 @@ class hr_expense_expense(osv.osv): 'partner_id': exp.employee_id.address_home_id.partner_id.id, 'address_invoice_id': exp.employee_id.address_home_id.id, 'address_contact_id': exp.employee_id.address_home_id.id, + 'company_id': company_id, 'origin': exp.name, 'invoice_line': lines, 'currency_id': exp.currency_id.id, @@ -205,7 +217,7 @@ class hr_expense_expense(osv.osv): inv['journal_id']=exp.journal_id.id journal = exp.journal_id else: - journal_id = invoice_obj._get_journal(cr, uid, context={'type': 'in_invoice'}) + journal_id = invoice_obj._get_journal(cr, uid, context={'type': 'in_invoice', 'company_id': company_id}) if journal_id: inv['journal_id'] = journal_id journal = account_journal.browse(cr, uid, journal_id) @@ -248,7 +260,7 @@ class hr_expense_line(osv.osv): 'unit_amount': fields.float('Unit Price', digits_compute=dp.get_precision('Account')), 'unit_quantity': fields.float('Quantities' ), 'product_id': fields.many2one('product.product', 'Product', domain=[('hr_expense_ok','=',True)]), - 'uom_id': fields.many2one('product.uom', 'UoM' ), + 'uom_id': fields.many2one('product.uom', 'UoM'), 'description': fields.text('Description'), 'analytic_account': fields.many2one('account.analytic.account','Analytic account'), 'ref': fields.char('Reference', size=32),