parent
f5b8a0875e
commit
b3939a9ce7
|
@ -955,51 +955,6 @@ class stock_picking(osv.osv):
|
|||
else:
|
||||
inv_type = 'out_invoice'
|
||||
return inv_type
|
||||
|
||||
def _prepare_invoice(self, cr, uid, picking, partner, payment_term_id, account_id, inv_type, journal_id, context=False):
|
||||
|
||||
address_contact_id, address_invoice_id = \
|
||||
self._get_address_invoice(cr, uid, picking).values()
|
||||
|
||||
return {
|
||||
'name': picking.name,
|
||||
'origin': (picking.name or '') + (picking.origin and (':' + picking.origin) or ''),
|
||||
'type': inv_type,
|
||||
'account_id': account_id,
|
||||
'partner_id': partner.id,
|
||||
'address_invoice_id': address_invoice_id,
|
||||
'address_contact_id': address_contact_id,
|
||||
'comment': self._get_comment_invoice(cr, uid, picking),
|
||||
'payment_term': payment_term_id,
|
||||
'fiscal_position': partner.property_account_position.id,
|
||||
'date_invoice': context.get('date_inv',False),
|
||||
'company_id': picking.company_id.id,
|
||||
'user_id':uid,
|
||||
'currency_id': self.get_currency_id(cr, uid, picking) or False,
|
||||
'journal_id': journal_id,
|
||||
}
|
||||
|
||||
def _prepare_invoice_line(self, cr, uid, group, picking, move_line, invoice_id, account_id, inv_type, context=False):
|
||||
|
||||
#set UoS if it's a sale and the picking doesn't have one
|
||||
uos_id = move_line.product_uos and move_line.product_uos.id or False
|
||||
if not uos_id and inv_type in ('out_invoice', 'out_refund'):
|
||||
uos_id = move_line.product_uom.id
|
||||
|
||||
return {
|
||||
'name': group and picking.name and picking.name + '-' + move_line.name or move_line.name,
|
||||
'origin': move_line.picking_id.origin and move_line.picking_id.name and (move_line.picking_id.origin + ':' + move_line.picking_id.name) or (move_line.picking_id.name or ''),
|
||||
'invoice_id': invoice_id,
|
||||
'uos_id': uos_id,
|
||||
'product_id': move_line.product_id.id,
|
||||
'account_id': account_id,
|
||||
'price_unit': self._get_price_unit_invoice(cr, uid,move_line, inv_type),
|
||||
'discount': self._get_discount_invoice(cr, uid, move_line),
|
||||
'quantity': move_line.product_uos_qty or move_line.product_qty,
|
||||
'invoice_line_tax_id': [(6, 0, self._get_taxes_invoice(cr, uid, move_line, inv_type))],
|
||||
'account_analytic_id': self._get_account_analytic_invoice(cr, uid, picking, move_line),
|
||||
}
|
||||
|
||||
|
||||
def action_invoice_create(self, cr, uid, ids, journal_id=False,
|
||||
group=False, type='out_invoice', context=None):
|
||||
|
@ -1053,14 +1008,41 @@ class stock_picking(osv.osv):
|
|||
}
|
||||
invoice_obj.write(cr, uid, [invoice_id], invoice_vals, context=context)
|
||||
else:
|
||||
invoice_id = invoice_obj.create(cr, uid, self._prepare_invoice(cr, uid, picking, partner, \
|
||||
payment_term_id, account_id, inv_type, journal_id, context), context=context)
|
||||
invoice_vals = {
|
||||
'name': picking.name,
|
||||
'origin': (picking.name or '') + (picking.origin and (':' + picking.origin) or ''),
|
||||
'type': inv_type,
|
||||
'account_id': account_id,
|
||||
'partner_id': address.partner_id.id,
|
||||
'address_invoice_id': address_invoice_id,
|
||||
'address_contact_id': address_contact_id,
|
||||
'comment': comment,
|
||||
'payment_term': payment_term_id,
|
||||
'fiscal_position': partner.property_account_position.id,
|
||||
'date_invoice': context.get('date_inv',False),
|
||||
'company_id': picking.company_id.id,
|
||||
'user_id':uid
|
||||
}
|
||||
cur_id = self.get_currency_id(cr, uid, picking)
|
||||
if cur_id:
|
||||
invoice_vals['currency_id'] = cur_id
|
||||
if journal_id:
|
||||
invoice_vals['journal_id'] = journal_id
|
||||
invoice_id = invoice_obj.create(cr, uid, invoice_vals,
|
||||
context=context)
|
||||
invoices_group[partner.id] = invoice_id
|
||||
res[picking.id] = invoice_id
|
||||
for move_line in picking.move_lines:
|
||||
if move_line.state == 'cancel':
|
||||
continue
|
||||
|
||||
origin = move_line.picking_id.name or ''
|
||||
if move_line.picking_id.origin:
|
||||
origin += ':' + move_line.picking_id.origin
|
||||
if group:
|
||||
name = (picking.name or '') + '-' + move_line.name
|
||||
else:
|
||||
name = move_line.name
|
||||
|
||||
if inv_type in ('out_invoice', 'out_refund'):
|
||||
account_id = move_line.product_id.product_tmpl_id.\
|
||||
property_account_income.id
|
||||
|
@ -1073,11 +1055,32 @@ class stock_picking(osv.osv):
|
|||
if not account_id:
|
||||
account_id = move_line.product_id.categ_id.\
|
||||
property_account_expense_categ.id
|
||||
|
||||
|
||||
price_unit = self._get_price_unit_invoice(cr, uid,
|
||||
move_line, inv_type)
|
||||
discount = self._get_discount_invoice(cr, uid, move_line)
|
||||
tax_ids = self._get_taxes_invoice(cr, uid, move_line, inv_type)
|
||||
account_analytic_id = self._get_account_analytic_invoice(cr, uid, picking, move_line)
|
||||
|
||||
#set UoS if it's a sale and the picking doesn't have one
|
||||
uos_id = move_line.product_uos and move_line.product_uos.id or False
|
||||
if not uos_id and inv_type in ('out_invoice', 'out_refund'):
|
||||
uos_id = move_line.product_uom.id
|
||||
|
||||
account_id = self.pool.get('account.fiscal.position').map_account(cr, uid, partner.property_account_position, account_id)
|
||||
|
||||
invoice_line_id = invoice_line_obj.create(cr, uid, self._prepare_invoice_line(cr, uid, group, picking, move_line, \
|
||||
invoice_id, account_id, inv_type, context=context), context=context)
|
||||
invoice_line_id = invoice_line_obj.create(cr, uid, {
|
||||
'name': name,
|
||||
'origin': origin,
|
||||
'invoice_id': invoice_id,
|
||||
'uos_id': uos_id,
|
||||
'product_id': move_line.product_id.id,
|
||||
'account_id': account_id,
|
||||
'price_unit': price_unit,
|
||||
'discount': discount,
|
||||
'quantity': move_line.product_uos_qty or move_line.product_qty,
|
||||
'invoice_line_tax_id': [(6, 0, tax_ids)],
|
||||
'account_analytic_id': account_analytic_id,
|
||||
}, context=context)
|
||||
self._invoice_line_hook(cr, uid, move_line, invoice_line_id)
|
||||
|
||||
invoice_obj.button_compute(cr, uid, [invoice_id], context=context,
|
||||
|
|
Loading…
Reference in New Issue