-
  In order to test the purchase order flow I compute the total of the listed products
-
  I check the total untaxed amount of the RFQ is correctly computed
-
  !assert {model: purchase.order, id: purchase_order_1, string: The amount of RFQ is not correctly computed}:
    - round(sum([l.price_subtotal for l in order_line]), 2) == round(amount_untaxed, 2)
-
  I confirm the RFQ.
-
  !workflow {model: purchase.order, action: purchase_confirm, ref: purchase_order_1}
-
  I check the "Approved" status  after confirmed RFQ.
-
  !assert {model: purchase.order, id: purchase_order_1}:
    - state == 'approved'
-
  I check that the invoice details which is generated after confirmed RFQ.
-
  !python {model: purchase.order}: |
    purchase_order = self.browse(cr, uid, ref("purchase_order_1"))
    assert len(purchase_order.invoice_ids) >= 1, "Invoice is not generated more or less than one"
    for invoice in purchase_order.invoice_ids:
      assert invoice.state == "draft", "Invoice state should be draft"
      assert invoice.partner_id.id == purchase_order.partner_id.id, "Supplier is not correspond with purchase order"
      assert invoice.reference == purchase_order.partner_ref or purchase_order.name,"Invoice reference is not correspond with purchase order"
      assert invoice.type == 'in_invoice',"Invoice type is not correspond with purchase order"
      assert invoice.currency_id.id == purchase_order.pricelist_id.currency_id.id ,"Invoice currency is not correspond with purchase order"
      assert invoice.origin == purchase_order.name,"Invoice origin is not correspond with purchase order"
      assert invoice.company_id.id == purchase_order.company_id.id ,"Invoice company is not correspond with purchase order"
      assert invoice.amount_untaxed == purchase_order.amount_untaxed, "Invoice untaxed amount is not correspond with purchase order"
      assert invoice.amount_tax == purchase_order.amount_tax, "Invoice tax amount is not correspond with purchase order"
      assert invoice.amount_total == purchase_order.amount_total, "Invoice total amount is not correspond with purchase order"
      assert len(invoice.invoice_line) == len(purchase_order.order_line), "Lines of Invoice and Purchase Order are not correspond"
-
  I check that Reception details after confirmed RFQ.
-
  !python {model: purchase.order}: |
    purchase_order = self.browse(cr, uid, ref("purchase_order_1"))
    assert len(purchase_order.picking_ids) >= 1, "You should have only one reception order"
    for picking in purchase_order.picking_ids:
      assert picking.state == "assigned", "Reception state should be in assigned state"
      assert picking.partner_id.id == purchase_order.partner_id.id, "Delivery address of reception id is different from order"
      assert picking.company_id.id == purchase_order.company_id.id, "Company is not correspond with purchase order"
-
  Reception is ready for process so now done the reception.
-
  !python {model: stock.partial.picking}: |
    pick_ids = self.pool.get('purchase.order').browse(cr, uid, ref("purchase_order_1")).picking_ids
    partial_id = self.create(cr, uid, {},context={'active_model': 'stock.picking','active_ids': [pick_ids[0].id]})
    self.do_partial(cr, uid, [partial_id])
-
  I check that purchase order is shipped.
-
  !python {model: purchase.order}: |
     assert self.browse(cr, uid, ref("purchase_order_1")).shipped == True,"Purchase order should be delivered"

-
  I Validate Invoice of Purchase Order.
-
  !python {model: purchase.order}: |
    import netsvc
    invoice_ids = [x.id for x in self.browse(cr, uid, ref("purchase_order_1")).invoice_ids]
    wf_service = netsvc.LocalService("workflow")
    for invoice in invoice_ids:
      wf_service.trg_validate(uid, 'account.invoice', invoice, 'invoice_open', cr)
-
  I check that purchase order is invoiced.
-
  !python {model: purchase.order}: |
     assert self.browse(cr, uid, ref("purchase_order_1")).invoiced == True,"Purchase Order should be invoiced"

