[FIX] stock: invoice on delivery can be done on picking that aren't linked to a sale order/procurement. It fixes a bug in anlgo saxon yml test also

bzr revid: qdp-launchpad@openerp.com-20130909091056-40uvicvymia2yui2
This commit is contained in:
Quentin (OpenERP) 2013-09-09 11:10:56 +02:00
parent f5ad729ab5
commit 6c9490d11c
3 changed files with 41 additions and 30 deletions

View File

@ -192,7 +192,7 @@
- company_id: base.main_company
location_id: stock.stock_location_stock
product_id: product.product_product_3
product_qty: 1.0
product_uom_qty: 1.0
product_uom: product.product_uom_unit
location_dest_id: stock.stock_location_customers
invoice_state: 2binvoiced
@ -235,9 +235,7 @@
!python {model: stock.invoice.onshipping}: |
wiz_id = self.create(cr, uid, {'invoice_date': '2013-03-04', 'journal_id': ref('account.sales_journal')},
{'active_ids': [ref("stock_picking_out001")], "active_model": "stock.picking"})
self.create_invoice(cr, uid, [wiz_id], {"lang": "en_US",
"search_default_available": 1, "tz": False, "active_model": "stock.picking",
"contact_display": "partner", "active_ids": [ref("stock_picking_out001")], "active_id": ref("stock_picking_out001")})
self.create_invoice(cr, uid, [wiz_id], {"active_ids": [ref("stock_picking_out001")], "active_id": ref("stock_picking_out001")})
-
I check that the customer invoice is created successfully.
-

View File

@ -133,7 +133,7 @@ class stock_picking(osv.osv):
for picking in self.browse(cr, uid, ids, context=context):
key = group and picking.id or True
for move in picking.move_lines:
if move.procurement_id and (move.procurement_id.invoice_state=='2binvoiced'):
if move.procurement_id and (move.procurement_id.invoice_state == '2binvoiced') or move.invoice_state == '2binvoiced':
if (move.state <> 'cancel') and not move.scrapped:
todo.setdefault(key, [])
todo[key].append(move)
@ -146,12 +146,26 @@ class stock_picking(osv.osv):
invoice_obj = self.pool.get('account.invoice')
invoices = {}
for move in moves:
sale_line = move.procurement_id.sale_line_id
sale = sale_line.order_id
partner = sale.partner_invoice_id
currency_id = sale.pricelist_id.currency_id.id
key = (partner.id, currency_id, sale.company_id.id, sale.user_id and sale.user_id.id or False)
company = move.company_id
account_analytic_id = False
if move.procurement_id:
sale_line = move.procurement_id.sale_line_id
sale = sale_line.order_id
user_id = self.user_id.id
partner = sale.partner_invoice_id
currency_id = sale.pricelist_id.currency_id.id
origin = sale.name
account_analytic_id = sale.project_id and sale.project_id.id or False
unit_price = sale_line.price_unit
discount = sale_line.discount
else:
partner = move.picking_id.partner_id
currency_id = company.currency_id.id
user_id = uid
origin = move.picking_id.name
unit_price = move.product_id.list_price #TODO: use price_get
discount = 0
key = (partner.id, currency_id, company.id, user_id)
if key not in invoices:
# Get account and payment terms
@ -163,16 +177,16 @@ class stock_picking(osv.osv):
payment_term = partner.property_supplier_payment_term.id or False
invoice_id = invoice_obj.create(cr, uid, {
'origin': sale.name,
'origin': origin,
'date_invoice': context.get('date_inv', False),
'user_id': sale.user_id and sale.user_id.id or False,
'user_id': user_id,
'partner_id': partner.id,
'account_id': account_id,
'payment_term': payment_term,
'type': inv_type,
'fiscal_position': partner.property_account_position.id,
'company_id': sale.company_id.id,
'currency_id': sale.pricelist_id.currency_id.id,
'company_id': company.id,
'currency_id': currency_id,
'journal_id': journal_id,
}, context=context)
invoices[key] = invoice_id
@ -206,22 +220,23 @@ class stock_picking(osv.osv):
'product_id': move.product_id.id,
'uos_id': uos_id,
'quantity': quantity,
'price_unit': sale_line.price_unit,
'discount': sale_line.discount,
'invoice_line_tax_id': [(6, 0, [x.id for x in sale_line.tax_id])],
'account_analytic_id': sale.project_id and sale.project_id.id or False,
'price_unit': unit_price,
'discount': discount,
#'invoice_line_tax_id': [(6, 0, [x.id for x in sale_line.tax_id])], TODO add me back
'account_analytic_id': account_analytic_id,
}, context=context)
self.pool.get('sale.order.line').write(cr, uid, [sale_line.id], {
'invoice_lines': [(4, invoice_line_id)]
}, context=context)
self.pool.get('sale.order').write(cr, uid, [sale.id], {
'invoice_ids': [(4, invoices[key])],
})
if move.procurement_id:
self.pool.get('sale.order.line').write(cr, uid, [sale_line.id], {
'invoice_lines': [(4, invoice_line_id)]
}, context=context)
self.pool.get('sale.order').write(cr, uid, [sale.id], {
'invoice_ids': [(4, invoices[key])],
})
self.pool.get('procurement.order').write(cr, uid, [move.procurement_id.id], {
'invoice_state': 'invoiced',
}, context=context)
self.pool.get('procurement.order').write(cr, uid, [move.procurement_id.id], {
'invoice_state': 'invoiced',
}, context=context)
invoice_obj.button_compute(cr, uid, invoices.values(), context=context, set_total=(inv_type in ('in_invoice', 'in_refund')))
return invoices.values()

View File

@ -71,7 +71,6 @@ class stock_invoice_onshipping(osv.osv_memory):
def open_invoice(self, cr, uid, ids, context=None):
if context is None:
context = {}
print 'Create Invoice', context
invoice_ids = self.create_invoice(cr, uid, ids, context=context)
if not invoice_ids:
raise osv.except_osv(_('Error!'), _('No invoice created!'))
@ -97,7 +96,6 @@ class stock_invoice_onshipping(osv.osv_memory):
def create_invoice(self, cr, uid, ids, context=None):
context = context or {}
picking_pool = self.pool.get('stock.picking')
onshipdata_obj = self.read(cr, uid, ids, ['journal_id', 'group', 'invoice_date', 'inv_type'])