- In order to test the purchase flow,I start by creating a new product 'iPod' - !record {model: product.product, id: product_product_ipod0}: categ_id: 'product.product_category_3' cost_method: standard mes_type: fixed name: iPod price_margin: 2.0 procure_method: make_to_stock property_stock_inventory: stock.location_inventory property_stock_procurement: stock.location_procurement property_stock_production: stock.location_production seller_delay: '1' standard_price: 100.0 supply_method: buy type: product uom_id: product.product_uom_unit uom_po_id: product.product_uom_unit volume: 0.0 warranty: 0.0 weight: 0.0 weight_net: 0.0 - In order to test the purchase flow,I create a new record where "invoice_method" is From Picking - I create purchase order for iPod. - !record {model: purchase.order, id: purchase_order_po2}: company_id: base.main_company date_order: !eval time.strftime('%Y-%m-%d') invoice_method: picking location_id: stock.stock_location_stock order_line: - date_planned: !eval time.strftime('%Y-%m-%d') name: iPod price_unit: 100.0 product_id: 'product_product_ipod0' product_qty: 10.0 product_uom: product.product_uom_unit state: draft partner_address_id: base.res_partner_address_7 partner_id: base.res_partner_4 pricelist_id: purchase.list0 - Initially purchase order is in the draft state. - !assert {model: purchase.order, id: purchase_order_po2}: - state == 'draft' - I confirm the purchase order for iPod. - !workflow {model: purchase.order, action: purchase_confirm, ref: purchase_order_po2} - I check that the order which was initially in the draft state has transit to confirm state. - !assert {model: purchase.order, id: purchase_order_po2}: - state == 'approved' - I check that an entry gets created in the "Lines to Invoice" of Invoice Control on the basis of purchase order line. - !python {model: purchase.order}: | from tools.translate import _ pur_order_obj=self.browse(cr, uid, ref("purchase_order_po2")) pur_line=self.pool.get( 'purchase.order.line') search_ids=pur_line.search(cr, uid, [('order_id', '=', pur_order_obj.name) ]) assert search_ids, _('Purchase order line is not created!') - To check that wizard "Create Invoices" gets opened. - I create purchase order line invoice entry. - !record {model: purchase.order.line_invoice, id: purchase_order_line_invoice_0}: {} - I create invoice for products in the purchase order. - !python {model: purchase.order.line_invoice}: | pur_obj=self.pool.get('purchase.order') ids = [] pur_id1=pur_obj.browse(cr, uid, ref("purchase_order_po2")) for line in pur_id1.order_line: ids.append(line.id) self.makeInvoices(cr, uid, [1], context={'active_ids': ids}) - I check that invoice gets created. - !python {model: purchase.order}: | from tools.translate import _ pur_order_obj=self.browse(cr, uid, ref("purchase_order_po2")) pur_line=self.pool.get( 'purchase.order.line') search_ids=pur_line.search(cr, uid, [('order_id', '=', pur_order_obj.name),('invoiced', '=', '1') ]) assert search_ids, _('Invoice is not created!') - I check that a record gets created in the Pending Invoices. - !python {model: purchase.order}: | from tools.translate import _ pur_id1=self.browse(cr, uid, ref("purchase_order_po2")) account_obj = self.pool.get('account.invoice') ids = account_obj.search(cr, uid, [('origin', '=', 'PO-'+str(pur_id1.id))]) assert ids, _('Pending Invoice is not created!') - I check that the order which was initially in the confirmed state has transit to approved state. - !assert {model: purchase.order, id: purchase_order_po2}: - state == 'approved' - I check that date_approve field of Delivery&Invoices gets bind with the date on which it has been approved. - !python {model: purchase.order}: | pur_id=self.browse(cr, uid, ref("purchase_order_po2")) assert(pur_id.date_approve) - I check that an entry gets created in the stock.picking. - !python {model: purchase.order}: | pur_id=self.browse(cr, uid, ref("purchase_order_po2")) assert(pur_id.picking_ids) - I check that an entry gets created related to stock move. - !python {model: purchase.order}: | pur_id1=self.browse(cr, uid, ref("purchase_order_po2")) picking_obj = self.pool.get('stock.picking') ids = picking_obj.search(cr, uid, [('origin', '=', pur_id1.name)]) pick_id = picking_obj.browse(cr, uid, ids)[0] move_obj = self.pool.get('stock.move') search_id = move_obj.search(cr, uid, [('picking_id', '=', pick_id.name)]) assert search_id, 'No Incoming Product!' - Then I create an invoice from picking by clicking on "Create Invoice" wizard - !python {model: stock.invoice.onshipping}: | import time pur_obj=self.pool.get('purchase.order') pur_id1=pur_obj.browse(cr, uid, ref("purchase_order_po2")) pick_ids = [x.id for x in pur_id1.picking_ids] id = self.create(cr, uid, {'invoice_date': time.strftime('%Y-%m-%d'), 'journal_id': ref('account.expenses_journal')}, {'active_ids': pick_ids}) self.create_invoice(cr, uid, [id], {"active_ids": pick_ids, "active_id": pick_ids[0]}) - I check that an invoice_ids field of Delivery&Invoices gets bind with the value. - !python {model: purchase.order}: | pur_id2=self.browse(cr, uid, ref("purchase_order_po2")) assert(pur_id2.invoice_ids)