- Now I confirm the Quotation with "Invoice on order after delivery" policy. - !workflow {model: sale.order, action: order_confirm, ref: order2} - I check that related delivery order after confirmed. - !python {model: sale.order}: | sale_order = self.browse(cr, uid, ref("order2")) assert sale_order.picking_ids, "Delivery Order should be created." assert len(sale_order.invoice_ids) == False, "Invoice should be not created." - Now, I dispatch delivery order. - !python {model: stock.partial.picking}: | order = self.pool.get('sale.order').browse(cr, uid, ref("order2")) for pick in order.picking_ids: data = pick.force_assign() if data == True: partial_id = self.create(cr, uid, {}, context={'active_model': 'stock.picking','active_ids': [pick.id]}) self.do_partial(cr, uid, [partial_id]) - I open the invoice. - !python {model: sale.order}: | import netsvc wf_service = netsvc.LocalService("workflow") order = self.browse(cr, uid, ref("order2")) #assert order.invoice_ids, "Invoice should be created after dispatch delivery order." for invoice in order.invoice_ids: wf_service.trg_validate(uid, 'account.invoice', invoice.id, 'invoice_open', cr) - I pay the invoice. - !python {model: account.invoice}: | sale_order = self.pool.get('sale.order') order = sale_order.browse(cr, uid, ref("order2")) journal_ids = self.pool.get('account.journal').search(cr, uid, [('type', '=', 'cash'), ('company_id', '=', order.company_id.id)], limit=1) for invoice in order.invoice_ids: invoice.pay_and_reconcile( invoice.amount_total, ref('account.cash'), ref('account.period_8'), journal_ids[0], ref('account.cash'), ref('account.period_8'), journal_ids[0], name='test') - I check that an order has been invoiced, shipped and closed. - !python {model: sale.order}: | order = self.browse(cr, uid, ref("order2")) assert order.picked_rate == 100, "Shipment progress is not 100%." #assert order.shipped, "Delivery Order should be dispatch." #TOFIX: procurement is gone in idle state so order never shipped, invoiced. after install mrp, it will be normal. #assert order.invoiced == True, "Sale order is not invoiced." #assert order.invoiced_rate == 100, "Invoiced progress is not 100%." #assert order.state == 'done', 'Order should be in closed.'