I set this bug as won't fix as we will have to do a complete project to
review the multi-company features.
** Changed in: openobject-addons
Status: Triaged => Won't Fix
--
You received this bug notification because you are a member of OpenERP
Indian Team, which is subscribed to OpenERP Addons.
https://bugs.launchpad.net/bugs/909248
Title:
Invoice account search in PO is not multi-company
Status in OpenERP Addons (modules):
Won't Fix
Bug description:
When creating a PO in multi-company environment, accounts selected for the
invoice are in the wrong company due to this piece of code:
if ol.product_id:
acc_id =
ol.product_id.product_tmpl_id.property_account_expense.id
if not acc_id:
acc_id =
ol.product_id.categ_id.property_account_expense_categ.id
If there are 2 companies, it selects the accounts for the first company,
whatever the company of the PO.
I suggest the following code as a patch (inspired from invoice.py) to
search for the correct code.
def action_invoice_create(self, cr, uid, ids, *args):
res = False
journal_obj = self.pool.get('account.journal')
for o in self.browse(cr, uid, ids):
il = []
todo = []
for ol in o.order_line:
todo.append(ol.id)
if ol.product_id:
if o.company_id.id:
company_id=o.company_id.id
property_obj = self.pool.get('ir.property')
account_obj = self.pool.get('account.account')
exp_pro_id = property_obj.search(cr, uid,
[('name','=','property_account_expense'),('res_id','=','product.template,'+str(ol.product_id.product_tmpl_id.id)+''),('company_id','=',company_id)])
if not exp_pro_id:
exp_pro_id = property_obj.search(cr, uid,
[('name','=','property_account_expense_categ'),('res_id','=','product.category,'+str(ol.product_id.categ_id.id)+''),('company_id','=',company_id)])#EC
if not exp_pro_id:
ex_acc =
ol.product_id.product_tmpl_id.property_account_expense
ex_acc_cate =
ol.product_id.categ_id.property_account_expense_categ
if ex_acc:
app_acc_exp = ex_acc
else:
app_acc_exp = ex_acc_cate
else:
# Get the fields from the ir.property record
my_value =
property_obj.read(cr,uid,exp_pro_id,['name','value_reference','res_id'])
# Parse the value_reference field to get the ID
of the account.account record
account_id = int
(my_value[0]["value_reference"].split(",")[1])
# Use the ID of the account.account record in the
browse for the account.account record
app_acc_exp = account_obj.browse(cr, uid,
account_id)
if not exp_pro_id:
ex_acc =
ol.product_id.product_tmpl_id.property_account_expense
ex_acc_cate =
ol.product_id.categ_id.property_account_expense_categ
if ex_acc:
app_acc_exp = ex_acc
else:
app_acc_exp = ex_acc_cate
if app_acc_exp and app_acc_exp.company_id.id !=
company_id:
exp_res_id = account_obj.search(cr, uid,
[('name','=',app_acc_exp.name),('company_id','=',company_id)])
if not exp_res_id:
raise osv.except_osv(_('Configuration Error
!'),
_('Can not find account chart for this
company, Please Create account.'))
exp_obj_acc = account_obj.browse(cr, uid,
exp_res_id)
if ex_acc:
ol.product_id.product_tmpl_id.property_account_expense = exp_obj_acc[0]
else:
ol.product_id.categ_id.property_account_expense_categ = exp_obj_acc[0]
a = app_acc_exp.id
else:
a = ol.product_tmpl_id.property_account_expense.id
if not a:
a = ol.categ_id.property_account_expense_categ.id
if not a:
raise osv.except_osv(_('Error !'), _('There is no
expense account defined for this product: "%s" (id:%d)') % (ol.product_id.name,
ol.product_id.id,))
else:
a = self.pool.get('ir.property').get(cr, uid,
'property_account_expense_categ', 'product.category').id
fpos = o.fiscal_position or False
a = self.pool.get('account.fiscal.position').map_account(cr,
uid, fpos, a)
il.append(self.inv_line_create(cr, uid, a, ol))
a = o.partner_id.property_account_payable.id
journal_ids = journal_obj.search(cr, uid, [('type',
'=','purchase'),('company_id', '=', o.company_id.id)], limit=1)
if not journal_ids:
raise osv.except_osv(_('Error !'),
_('There is no purchase journal defined for this company:
"%s" (id:%d)') % (o.company_id.name, o.company_id.id))
inv = {
'name': o.partner_ref or o.name,
'reference': o.partner_ref or o.name,
'account_id': a,
'type': 'in_invoice',
'partner_id': o.partner_id.id,
'currency_id': o.pricelist_id.currency_id.id,
'address_invoice_id': o.partner_address_id.id,
'address_contact_id': o.partner_address_id.id,
'journal_id': len(journal_ids) and journal_ids[0] or False,
'origin': o.name,
'invoice_line': il,
'fiscal_position': o.fiscal_position.id or
o.partner_id.property_account_position.id,
'payment_term': o.partner_id.property_payment_term and
o.partner_id.property_payment_term.id or False,
'company_id': o.company_id.id,
}
inv_id = self.pool.get('account.invoice').create(cr, uid, inv,
{'type':'in_invoice'})
self.pool.get('account.invoice').button_compute(cr, uid,
[inv_id], {'type':'in_invoice'}, set_total=True)
self.pool.get('purchase.order.line').write(cr, uid, todo,
{'invoiced':True})
self.write(cr, uid, [o.id], {'invoice_ids': [(4, inv_id)]})
res = inv_id
return res
To manage notifications about this bug go to:
https://bugs.launchpad.net/openobject-addons/+bug/909248/+subscriptions
_______________________________________________
Mailing list: https://launchpad.net/~openerp-india
Post to : [email protected]
Unsubscribe : https://launchpad.net/~openerp-india
More help : https://help.launchpad.net/ListHelp