[FIX] account_anglo_saxon: backport of revision 8787 of trunk

bzr revid: qdp-launchpad@openerp.com-20130710215655-5ym1u4ecsmqdw30n
This commit is contained in:
Quentin (OpenERP) 2013-07-10 23:56:55 +02:00
parent 962dedda51
commit 84a134c46d
3 changed files with 30 additions and 52 deletions

View File

@ -26,17 +26,15 @@ class purchase_order(osv.osv):
_inherit = "purchase.order" _inherit = "purchase.order"
_description = "Purchase Order" _description = "Purchase Order"
def _prepare_inv_line(self, cr, uid, account_id, order_line, context=None): def _choose_account_from_po_line(self, cr, uid, order_line, context=None):
line = super(purchase_order, self)._prepare_inv_line(cr, uid, account_id, order_line, context=context) account_id = super(purchase_order, self)._choose_account_from_po_line(cr, uid, order_line, context=context)
if order_line.product_id and not order_line.product_id.type == 'service': if order_line.product_id and not order_line.product_id.type == 'service':
acc_id = order_line.product_id.property_stock_account_input and order_line.product_id.property_stock_account_input.id acc_id = order_line.product_id.property_stock_account_input and order_line.product_id.property_stock_account_input.id
if not acc_id: if not acc_id:
acc_id = order_line.product_id.categ_id.property_stock_account_input_categ and order_line.product_id.categ_id.property_stock_account_input_categ.id acc_id = order_line.product_id.categ_id.property_stock_account_input_categ and order_line.product_id.categ_id.property_stock_account_input_categ.id
if acc_id: if acc_id:
fpos = order_line.order_id.fiscal_position or False fpos = order_line.order_id.fiscal_position or False
new_account_id = self.pool.get('account.fiscal.position').map_account(cr, uid, fpos, acc_id) account_id = self.pool.get('account.fiscal.position').map_account(cr, uid, fpos, acc_id)
line.update({'account_id': new_account_id}) return account_id
return line
purchase_order()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -465,6 +465,20 @@ class purchase_order(osv.osv):
self.write(cr, uid, [id], {'state' : 'confirmed', 'validator' : uid}) self.write(cr, uid, [id], {'state' : 'confirmed', 'validator' : uid})
return True return True
def _choose_account_from_po_line(self, cr, uid, po_line, context=None):
fiscal_obj = self.pool.get('account.fiscal.position')
property_obj = self.pool.get('ir.property')
if po_line.product_id:
acc_id = po_line.product_id.property_account_expense.id
if not acc_id:
acc_id = po_line.product_id.categ_id.property_account_expense_categ.id
if not acc_id:
raise osv.except_osv(_('Error!'), _('Define expense account for this company: "%s" (id:%d).') % (po_line.product_id.name, po_line.product_id.id,))
else:
acc_id = property_obj.get(cr, uid, 'property_account_expense_categ', 'product.category').id
fpos = po_line.order_id.fiscal_position or False
return fiscal_obj.map_account(cr, uid, fpos, acc_id)
def _prepare_inv_line(self, cr, uid, account_id, order_line, context=None): def _prepare_inv_line(self, cr, uid, account_id, order_line, context=None):
"""Collects require data from purchase order line that is used to create invoice line """Collects require data from purchase order line that is used to create invoice line
for that purchase order line for that purchase order line
@ -506,8 +520,6 @@ class purchase_order(osv.osv):
journal_obj = self.pool.get('account.journal') journal_obj = self.pool.get('account.journal')
inv_obj = self.pool.get('account.invoice') inv_obj = self.pool.get('account.invoice')
inv_line_obj = self.pool.get('account.invoice.line') inv_line_obj = self.pool.get('account.invoice.line')
fiscal_obj = self.pool.get('account.fiscal.position')
property_obj = self.pool.get('ir.property')
for order in self.browse(cr, uid, ids, context=context): for order in self.browse(cr, uid, ids, context=context):
pay_acc_id = order.partner_id.property_account_payable.id pay_acc_id = order.partner_id.property_account_payable.id
@ -519,17 +531,7 @@ class purchase_order(osv.osv):
# generate invoice line correspond to PO line and link that to created invoice (inv_id) and PO line # generate invoice line correspond to PO line and link that to created invoice (inv_id) and PO line
inv_lines = [] inv_lines = []
for po_line in order.order_line: for po_line in order.order_line:
if po_line.product_id: acc_id = self._choose_account_from_po_line(cr, uid, po_line, context=context)
acc_id = po_line.product_id.property_account_expense.id
if not acc_id:
acc_id = po_line.product_id.categ_id.property_account_expense_categ.id
if not acc_id:
raise osv.except_osv(_('Error!'), _('Define expense account for this company: "%s" (id:%d).') % (po_line.product_id.name, po_line.product_id.id,))
else:
acc_id = property_obj.get(cr, uid, 'property_account_expense_categ', 'product.category').id
fpos = order.fiscal_position or False
acc_id = fiscal_obj.map_account(cr, uid, fpos, acc_id)
inv_line_data = self._prepare_inv_line(cr, uid, acc_id, po_line, context=context) inv_line_data = self._prepare_inv_line(cr, uid, acc_id, po_line, context=context)
inv_line_id = inv_line_obj.create(cr, uid, inv_line_data, context=context) inv_line_id = inv_line_obj.create(cr, uid, inv_line_data, context=context)
inv_lines.append(inv_line_id) inv_lines.append(inv_line_id)

View File

@ -48,12 +48,11 @@ class purchase_line_invoice(osv.osv_memory):
if record_ids: if record_ids:
res = False res = False
invoices = {} invoices = {}
invoice_obj=self.pool.get('account.invoice') invoice_obj = self.pool.get('account.invoice')
purchase_line_obj=self.pool.get('purchase.order.line') purchase_obj = self.pool.get('purchase.order')
property_obj=self.pool.get('ir.property') purchase_line_obj = self.pool.get('purchase.order.line')
account_fiscal_obj=self.pool.get('account.fiscal.position') invoice_line_obj = self.pool.get('account.invoice.line')
invoice_line_obj=self.pool.get('account.invoice.line') account_jrnl_obj = self.pool.get('account.journal')
account_jrnl_obj=self.pool.get('account.journal')
def multiple_order_invoice_notes(orders): def multiple_order_invoice_notes(orders):
notes = "" notes = ""
@ -93,35 +92,14 @@ class purchase_line_invoice(osv.osv_memory):
order.write({'invoice_ids': [(4, inv_id)]}) order.write({'invoice_ids': [(4, inv_id)]})
return inv_id return inv_id
for line in purchase_line_obj.browse(cr,uid,record_ids): for line in purchase_line_obj.browse(cr, uid, record_ids, context=context):
if (not line.invoiced) and (line.state not in ('draft','cancel')): if (not line.invoiced) and (line.state not in ('draft', 'cancel')):
if not line.partner_id.id in invoices: if not line.partner_id.id in invoices:
invoices[line.partner_id.id] = [] invoices[line.partner_id.id] = []
if line.product_id: acc_id = purchase_obj._choose_account_from_po_line(cr, uid, line, context=context)
a = line.product_id.property_account_expense.id inv_line_data = purchase_obj._prepare_inv_line(cr, uid, acc_id, line, context=context)
if not a: inv_line_data.update({'origin': line.order_id.name})
a = line.product_id.categ_id.property_account_expense_categ.id inv_id = invoice_line_obj.create(cr, uid, inv_line_data, context=context)
if not a:
raise osv.except_osv(_('Error!'),
_('Define expense account for this product: "%s" (id:%d).') % \
(line.product_id.name, line.product_id.id,))
else:
a = property_obj.get(cr, uid,
'property_account_expense_categ', 'product.category',
context=context).id
fpos = line.order_id.fiscal_position or False
a = account_fiscal_obj.map_account(cr, uid, fpos, a)
inv_id = invoice_line_obj.create(cr, uid, {
'name': line.name,
'origin': line.order_id.name,
'account_id': a,
'price_unit': line.price_unit,
'quantity': line.product_qty,
'uos_id': line.product_uom.id,
'product_id': line.product_id.id or False,
'invoice_line_tax_id': [(6, 0, [x.id for x in line.taxes_id])],
'account_analytic_id': line.account_analytic_id and line.account_analytic_id.id or False,
})
purchase_line_obj.write(cr, uid, [line.id], {'invoiced': True, 'invoice_lines': [(4, inv_id)]}) purchase_line_obj.write(cr, uid, [line.id], {'invoiced': True, 'invoice_lines': [(4, inv_id)]})
invoices[line.partner_id.id].append((line,inv_id)) invoices[line.partner_id.id].append((line,inv_id))