Devishree Brahmbhatt (OpenERP) has proposed merging
lp:~openerp-dev/openobject-addons/trunk-coverage-purchase-requisition-dbr into
lp:openobject-addons.
Requested reviews:
OpenERP Core Team (openerp)
For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-coverage-purchase-requisition-dbr/+merge/83554
Hello,
Improve the purchase_requisition module YML test cases for following.
=> purchase_requisition.yml
Define the main flow of purchase requisition module.
=> purchase_requisition_exclusive.yml
Define the exclusive requisition test case
=> requisiton2request_quotation.yml
Define the test cases for requisition to request for Quotation
=> cancel_purchase_requisition.yml
Define the cancel process of purchase requisition from different state.
=> purchase_requisition_report.yml
Define the test case of report
=> delete_requisition.yml
Delete the requisition form different state.
==> Add:
========
Create new Folders in test:
- process
- ui
/process/cancel_purchase_requisition.yml
/process/purchase_requisition_exclusive.yml
/ui/requisiton2request_quotation.yml
/ui/duplicate_requisition.yml
==> Move:
=========
purchase_requisition.yml => test/process/purchase_requisition.yml
purchase_requisition_test.yml => test/ui/delete_requisition.yml
purchase_requisition_report.yml => test/ui/purchase_requisition_report.yml
==> Update:
===========
purchase_requisition_demo.xml : Add new record.
purchase_requisition_view.xml : For remove the error.
So, kindly review it.
Thanks.
--
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-coverage-purchase-requisition-dbr/+merge/83554
Your team OpenERP R&D Team is subscribed to branch
lp:~openerp-dev/openobject-addons/trunk-coverage-purchase-requisition-dbr.
=== modified file 'purchase/purchase_demo.xml'
--- purchase/purchase_demo.xml 2011-11-13 22:53:42 +0000
+++ purchase/purchase_demo.xml 2011-11-28 07:14:29 +0000
@@ -6,6 +6,203 @@
<field eval="[(4, ref('group_purchase_user'))]" name="groups_id"/>
</record>
+<<<<<<< TREE
+=======
+ <!--Resource: purchase.order-->
+
+ <record id="order_purchase1" model="purchase.order">
+ <field name="location_id" ref="stock.stock_location_stock"/>
+ <field name="pricelist_id" ref="purchase.list0"/>
+ <field name="partner_id" ref="base.res_partner_asus"/>
+ <field name="partner_address_id" ref="base.res_partner_address_tang"/>
+ </record>
+
+ <record id="order_purchase2" model="purchase.order">
+ <field name="location_id" ref="stock.stock_location_stock"/>
+ <field name="pricelist_id" ref="purchase.list0"/>
+ <field name="partner_id" ref="base.res_partner_3"/>
+ <field name="partner_address_id" ref="base.res_partner_address_zen"/>
+ </record>
+
+ <record id="order_purchase3" model="purchase.order">
+ <field name="location_id" ref="stock.stock_location_stock"/>
+ <field name="pricelist_id" ref="purchase.list0"/>
+ <field name="partner_id" ref="base.res_partner_desertic_hispafuentes"/>
+ <field name="partner_address_id" ref="base.res_partner_address_3000"/>
+ </record>
+
+ <record id="order_purchase4" model="purchase.order">
+ <field name="location_id" ref="stock.stock_location_stock"/>
+ <field name="pricelist_id" ref="purchase.list0"/>
+ <field name="partner_id" ref="base.res_partner_4"/>
+ <field name="partner_address_id" ref="base.res_partner_address_7"/>
+ </record>
+
+ <record id="order_purchase5" model="purchase.order">
+ <field name="location_id" ref="stock.stock_location_stock"/>
+ <field name="pricelist_id" ref="purchase.list0"/>
+ <field name="partner_id" ref="base.res_partner_maxtor"/>
+ <field name="partner_address_id" ref="base.res_partner_address_wong"/>
+ </record>
+
+ <record id="order_purchase6" model="purchase.order">
+ <field name="location_id" ref="stock.stock_location_stock"/>
+ <field name="pricelist_id" ref="purchase.list0"/>
+ <field name="partner_id" ref="base.res_partner_vickingdirect0"/>
+ <field name="partner_address_id" ref="base.res_partner_address_brussels0"/>
+ </record>
+ <!--Resource: purchase.order.line-->
+
+ <record id="line1_purchase" model="purchase.order.line">
+ <field name="order_id" ref="order_purchase1"/>
+ <field name="date_planned" eval="time.strftime('%Y/%m/%d')"/>
+ <field name="name">New server config + material</field>
+ <field model="product.product" name="product_id" search="[]"/>
+ <field model="product.uom" name="product_uom" search="[]"/>
+ <field name="price_unit">150</field>
+ <field name="product_qty">5</field>
+ </record>
+
+ <record id="line2_purchase" model="purchase.order.line">
+ <field name="order_id" ref="order_purchase1"/>
+ <field name="date_planned" eval="time.strftime('%Y/%m/%d')"/>
+ <field name="name">[PC1] Basic PC</field>
+ <field name="product_id" ref="product.product_product_pc1"/>
+ <field name="product_uom" ref="product.product_uom_unit"/>
+ <field name="price_unit">450</field>
+ <field name="product_qty">2</field>
+ </record>
+
+ <record id="line3_purchase" model="purchase.order.line">
+ <field name="order_id" ref="order_purchase2"/>
+ <field name="date_planned" eval="time.strftime('%Y/%m/%d')"/>
+ <field name="name">[PC3] Medium PC</field>
+ <field name="product_id" ref="product.product_product_pc3"/>
+ <field name="product_uom" ref="product.product_uom_unit"/>
+ <field name="price_unit">900</field>
+ <field name="product_qty">1</field>
+ </record>
+
+ <record id="line4_purchase" model="purchase.order.line">
+ <field name="order_id" ref="order_purchase3"/>
+ <field name="date_planned" eval="time.strftime('%Y/%m/%d')"/>
+ <field name="name">Onsite Senior Intervention</field>
+ <field name="product_id" ref="product.product_product_0"/>
+ <field name="product_uom" ref="product.product_uom_unit"/>
+ <field name="price_unit">900</field>
+ <field name="product_qty">10</field>
+ </record>
+
+ <record id="line5_purchase" model="purchase.order.line">
+ <field name="order_id" ref="order_purchase3"/>
+ <field name="date_planned" eval="time.strftime('%Y/%m/%d')"/>
+ <field name="name">Onsite Intervention</field>
+ <field name="product_id" ref="product.product_product_1"/>
+ <field name="product_uom" ref="product.product_uom_unit"/>
+ <field name="price_unit">100</field>
+ <field name="product_qty">5</field>
+ </record>
+
+ <record id="line6_purchase" model="purchase.order.line">
+ <field name="order_id" ref="order_purchase4"/>
+ <field name="date_planned" eval="time.strftime('%Y/%m/%d')"/>
+ <field name="name">[PC2] Basic+ PC (assembly on order)</field>
+ <field name="product_id" ref="product.product_product_pc2"/>
+ <field name="product_uom" ref="product.product_uom_unit"/>
+ <field name="price_unit">40</field>
+ <field name="product_qty">5</field>
+ </record>
+
+ <record id="line7_purchase" model="purchase.order.line">
+ <field name="order_id" ref="order_purchase4"/>
+ <field name="date_planned" eval="time.strftime('%Y/%m/%d')"/>
+ <field name="name">[MB1] Mainboard ASUStek A7N8X</field>
+ <field name="product_id" ref="product.product_product_mb1"/>
+ <field name="product_uom" ref="product.product_uom_unit"/>
+ <field name="price_unit">45</field>
+ <field name="product_qty">15</field>
+ </record>
+
+ <record id="line8_purchase" model="purchase.order.line">
+ <field name="order_id" ref="order_purchase4"/>
+ <field name="date_planned" eval="time.strftime('%Y/%m/%d')"/>
+ <field name="name">[MB2] Mainboard ASUStek A7V8X-X</field>
+ <field name="product_id" ref="product.product_product_mb2"/>
+ <field name="product_uom" ref="product.product_uom_unit"/>
+ <field name="price_unit">45</field>
+ <field name="product_qty">15</field>
+ </record>
+
+ <record id="line9_purchase" model="purchase.order.line">
+ <field name="order_id" ref="order_purchase5"/>
+ <field name="date_planned" eval="time.strftime('%Y/%m/%d')"/>
+ <field name="name">[CPU1] Processor AMD Athlon XP 1800+</field>
+ <field name="product_id" ref="product.product_product_cpu1"/>
+ <field name="product_uom" ref="product.product_uom_unit"/>
+ <field name="price_unit">60</field>
+ <field name="product_qty">3</field>
+ </record>
+
+ <record id="line10_purchase" model="purchase.order.line">
+ <field name="order_id" ref="order_purchase5"/>
+ <field name="date_planned" eval="time.strftime('%Y/%m/%d')"/>
+ <field name="name">[CPU3] Processor AMD Athlon XP 2200+</field>
+ <field name="product_id" ref="product.product_product_cpu3"/>
+ <field name="product_uom" ref="product.product_uom_unit"/>
+ <field name="price_unit">50</field>
+ <field name="product_qty">13</field>
+ </record>
+
+ <record id="line11_purchase" model="purchase.order.line">
+ <field name="order_id" ref="order_purchase5"/>
+ <field name="date_planned" eval="time.strftime('%Y/%m/%d')"/>
+ <field name="name">[HDD1] HDD Seagate 7200.8 80GB</field>
+ <field name="product_id" ref="product.product_product_hdd1"/>
+ <field name="product_uom" ref="product.product_uom_unit"/>
+ <field name="price_unit">70</field>
+ <field name="product_qty">10</field>
+ </record>
+
+ <record id="line15_purchase" model="purchase.order.line">
+ <field name="order_id" ref="order_purchase6"/>
+ <field name="date_planned" eval="time.strftime('%Y/%m/%d')"/>
+ <field name="name">[HDD3] HDD Seagate 7200.8 80GB</field>
+ <field name="product_id" ref="product.product_product_hdd3"/>
+ <field name="product_uom" ref="product.product_uom_unit"/>
+ <field name="price_unit">70</field>
+ <field name="product_qty">10</field>
+ </record>
+
+ <record id="line12_purchase" model="purchase.order.line">
+ <field name="order_id" ref="order_purchase5"/>
+ <field name="date_planned" eval="time.strftime('%Y/%m/%d')"/>
+ <field name="name">[HDD2] HDD Seagate 7200.8 120GB</field>
+ <field name="product_id" ref="product.product_product_hdd2"/>
+ <field name="product_uom" ref="product.product_uom_unit"/>
+ <field name="price_unit">70</field>
+ <field name="product_qty">10</field>
+ </record>
+
+ <record id="line12_purchase" model="purchase.order.line">
+ <field name="order_id" ref="order_purchase5"/>
+ <field name="date_planned" eval="time.strftime('%Y/%m/%d')"/>
+ <field name="name">[RAM] DDR 256MB PC400</field>
+ <field name="product_id" ref="product.product_product_ram"/>
+ <field name="product_uom" ref="product.product_uom_unit"/>
+ <field name="price_unit">700</field>
+ <field name="product_qty">10</field>
+ </record>
+
+ <record id="line13_purchase" model="purchase.order.line">
+ <field name="order_id" ref="order_purchase4"/>
+ <field name="date_planned" eval="time.strftime('%Y/%m/%d')"/>
+ <field name="name">[RAM512] DDR 512MB PC400</field>
+ <field name="product_id" ref="product.product_product_ram512"/>
+ <field name="product_uom" ref="product.product_uom_unit"/>
+ <field name="price_unit">1700</field>
+ <field name="product_qty">10</field>
+ </record>
+>>>>>>> MERGE-SOURCE
<workflow action="purchase_confirm" model="purchase.order" ref="order_purchase2"/>
<workflow action="purchase_confirm" model="purchase.order" ref="order_purchase6"/>
=== modified file 'purchase_requisition/__openerp__.py'
--- purchase_requisition/__openerp__.py 2011-10-16 01:28:00 +0000
+++ purchase_requisition/__openerp__.py 2011-11-28 07:14:29 +0000
@@ -43,8 +43,13 @@
"security/ir.model.access.csv","purchase_requisition_sequence.xml"
],
"active": False,
- "test":['test/purchase_requisition_report.yml',
- 'test/purchase_requisition_test.yml',
+ "test":[
+ 'test/process/purchase_requisition.yml',
+ 'test/process/purchase_requisition_exclusive.yml',
+ 'test/ui/requisiton2request_quotation.yml',
+ 'test/process/cancel_purchase_requisition.yml',
+ 'test/ui/purchase_requisition_report.yml',
+ 'test/ui/delete_requisition.yml',
],
"installable": True,
"certificate" : "001023264099823179629",
=== modified file 'purchase_requisition/purchase_requisition_demo.xml'
--- purchase_requisition/purchase_requisition_demo.xml 2011-01-14 00:11:01 +0000
+++ purchase_requisition/purchase_requisition_demo.xml 2011-11-28 07:14:29 +0000
@@ -10,7 +10,7 @@
<record id="order_purchase_requisition1" model="purchase.requisition">
<field name="user_id" model="res.users"/>
- <field name="exclusive">multiple</field>
+ <field name="exclusive">exclusive</field>
<field name="date_start" eval="time.strftime('%Y/%m/%d %H:%M:%S')"/>
<field name="warehouse_id" ref="stock.stock_warehouse_shop0"/>
</record>
@@ -24,6 +24,46 @@
<field name="product_qty">5</field>
</record>
+ <!--Resource: purchase.order-->
+
+ <record id="requisition_order1" model="purchase.order">
+ <field name="location_id" ref="stock.stock_location_stock"/>
+ <field name="pricelist_id" ref="purchase.list0"/>
+ <field name="partner_id" ref="base.res_partner_4"/>
+ <field name="partner_address_id" ref="base.res_partner_address_7"/>
+ <field name="requisition_id" ref="order_purchase_requisition1"/>
+ </record>
+
+ <record id="requisition_order2" model="purchase.order">
+ <field name="location_id" ref="stock.stock_location_stock"/>
+ <field name="pricelist_id" ref="purchase.list0"/>
+ <field name="partner_id" ref="base.res_partner_vickingdirect0"/>
+ <field name="partner_address_id" ref="base.res_partner_address_brussels0"/>
+ <field name="requisition_id" ref="order_purchase_requisition1"/>
+ </record>
+
+ <!--Resource: purchase.order.line-->
+
+ <record id="line9_purchase" model="purchase.order.line">
+ <field name="order_id" ref="requisition_order1"/>
+ <field name="date_planned" eval="time.strftime('%Y/%m/%d')"/>
+ <field name="name">[CPU1] Processor AMD Athlon XP 1800+</field>
+ <field name="product_id" ref="product.product_product_cpu1"/>
+ <field name="product_uom" ref="product.product_uom_unit"/>
+ <field name="price_unit">60</field>
+ <field name="product_qty">3</field>
+ </record>
+
+ <record id="line10_purchase" model="purchase.order.line">
+ <field name="order_id" ref="requisition_order2"/>
+ <field name="date_planned" eval="time.strftime('%Y/%m/%d')"/>
+ <field name="name">[CPU3] Processor AMD Athlon XP 2200+</field>
+ <field name="product_id" ref="product.product_product_cpu3"/>
+ <field name="product_uom" ref="product.product_uom_unit"/>
+ <field name="price_unit">50</field>
+ <field name="product_qty">13</field>
+ </record>
+
</data>
</openerp>
=== modified file 'purchase_requisition/purchase_requisition_view.xml'
--- purchase_requisition/purchase_requisition_view.xml 2011-11-24 12:14:33 +0000
+++ purchase_requisition/purchase_requisition_view.xml 2011-11-28 07:14:29 +0000
@@ -21,7 +21,11 @@
<field name="model">purchase.order</field>
<field name="inherit_id" ref="purchase.view_purchase_order_filter"/>
<field name="arch" type="xml">
+<<<<<<< TREE
<xpath expr="/search/group/filter[@name='not_invoiced']" position="after">
+=======
+ <xpath expr="/search/group/filter[@string='Quotations']" position="after">
+>>>>>>> MERGE-SOURCE
<separator orientation="vertical"/>
<filter icon="terp-gtk-jump-to-rtl" string="Requisition" domain="[('requisition_id','!=',False)]" help="Purchase Orders with requisition"/>
</xpath>
@@ -34,7 +38,11 @@
<field name="model">purchase.order</field>
<field name="inherit_id" ref="purchase.view_request_for_quotation_filter"/>
<field name="arch" type="xml">
+<<<<<<< TREE
<xpath expr="/search/group/filter[@name='not_invoiced']" position="after">
+=======
+ <xpath expr="/search/group/filter[@string='Quotations']" position="after">
+>>>>>>> MERGE-SOURCE
<separator orientation="vertical"/>
<filter icon="terp-gtk-jump-to-rtl" string="Requisition" domain="[('requisition_id','!=',False)]" help="Purchase Orders with requisition"/>
</xpath>
=== added directory 'purchase_requisition/test/process'
=== added file 'purchase_requisition/test/process/cancel_purchase_requisition.yml'
--- purchase_requisition/test/process/cancel_purchase_requisition.yml 1970-01-01 00:00:00 +0000
+++ purchase_requisition/test/process/cancel_purchase_requisition.yml 2011-11-28 07:14:29 +0000
@@ -0,0 +1,73 @@
+-
+ In order to test the cancel flow of purchase requisition order.
+-
+ I cancel the "New" purchase requisition order.
+-
+ !python {model: purchase.requisition}: |
+ self.tender_cancel(cr, uid, [ref("order_purchase_requisition1")])
+-
+ I check that purchase requisition order is cancelled.
+-
+ !assert {model: purchase.requisition, id: order_purchase_requisition1}:
+ - state == 'cancel'
+-
+ I reset the state of requisition as "New".
+-
+ !python {model: purchase.requisition}: |
+ self.tender_reset(cr, uid, ref('order_purchase_requisition1'))
+-
+ I change state of requisition in "In progress".
+-
+ !python {model: purchase.requisition}: |
+ self.tender_in_progress(cr, uid, ref('order_purchase_requisition1'))
+-
+ I check that purchase requisition order is "In progress".
+-
+ !assert {model: purchase.requisition, id: order_purchase_requisition1}:
+ - state == 'in_progress'
+-
+ I try to cancel "In progress" purchase requisition order.
+-
+ !python {model: purchase.requisition}: |
+ self.tender_cancel(cr, uid, [ref("order_purchase_requisition1")])
+-
+ I check that purchase requisition order is cancelled.
+-
+ !assert {model: purchase.requisition, id: order_purchase_requisition1}:
+ - state == 'cancel'
+-
+ I reset the state of requisition as "New".
+-
+ !python {model: purchase.requisition}: |
+ self.tender_reset(cr, uid, ref('order_purchase_requisition1'))
+-
+ I check that purchase requisition order is New.
+-
+ !assert {model: purchase.requisition, id: order_purchase_requisition1}:
+ - state == 'draft'
+-
+ I change state of requisition as "done".
+-
+ !python {model: purchase.requisition}: |
+ self.tender_done(cr, uid, ref('order_purchase_requisition1'))
+-
+ I check that purchase requisition order is Done.
+-
+ !assert {model: purchase.requisition, id: order_purchase_requisition1}:
+ - state == 'done'
+-
+ I try to cancel "Done" purchase requisition order.
+-
+ !python {model: purchase.requisition}: |
+ self.tender_cancel(cr, uid, [ref("order_purchase_requisition1")])
+-
+ I check that purchase requisition order is cancelled.
+-
+ !assert {model: purchase.requisition, id: order_purchase_requisition1}:
+ - state == 'cancel'
+-
+ I reset the state of requisition as "New".
+-
+ !python {model: purchase.requisition}: |
+ self.tender_reset(cr, uid, ref('order_purchase_requisition1'))
+
=== renamed file 'purchase_requisition/test/purchase_requisition.yml' => 'purchase_requisition/test/process/purchase_requisition.yml'
--- purchase_requisition/test/purchase_requisition.yml 2011-01-14 00:11:01 +0000
+++ purchase_requisition/test/process/purchase_requisition.yml 2011-11-28 07:14:29 +0000
@@ -1,189 +1,44 @@
-
--
- In order to test the purchase requisition module, I will do a sale order -> purchase_requisition ->
- purchase flow and I will buy the required products at two different suppliers.
--
- I start by creating a new product 'Laptop ACER', which is purchased at Asustek, in MTO,
- with the generation of purchase requisitions.
--
- !record {model: product.product, id: product_product_laptopacer0}:
- categ_id: product.product_category_3
- cost_method: standard
- mes_type: fixed
- name: Laptop ACER
- procure_method: make_to_order
- purchase_requisition: 1
- seller_ids:
- - delay: 1
- name: base.res_partner_asus
- qty: 5.0
- min_qty: 1.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
- list_price: 100.0
--
- Then I sell 5 Laptop ACER to the customer Agrolait, sale order TEST/TENDER/0001.
--
- !record {model: sale.order, id: sale_order_testtender0}:
- date_order: !eval time.strftime('%Y-%m-%d')
- invoice_quantity: order
- name: TEST/TENDER/0001
- order_line:
- - name: Laptop ACER
- price_unit: 100.0
- product_uom: product.product_uom_unit
- product_uom_qty: 5.0
- state: draft
- delay: 7.0
- product_id: product_product_laptopacer0
- product_uos_qty: 5.0
- th_weight: 0.0
- type: make_to_order
- order_policy: manual
- partner_id: base.res_partner_agrolait
- partner_invoice_id: base.res_partner_address_8
- partner_order_id: base.res_partner_address_8
- partner_shipping_id: base.res_partner_address_8
- picking_policy: direct
- pricelist_id: product.list0
- shop_id: sale.shop
--
- I confirm the sale order.
--
- !workflow {model: sale.order, action: order_confirm, ref: sale_order_testtender0}
--
- I launch the scheduler to compute all procurements, and specify all requisitions orders.
--
- !python {model: procurement.order.compute.all}: |
- proc_obj = self.pool.get('procurement.order')
- proc_obj._procure_confirm(cr,uid)
--
- On the purchase requisition, I create a new purchase order for the supplier 'DistriPC' by clicking on
- the button 'New RfQ'. This opens a window to ask me the supplier and I set DistriPC .
--
- !record {model: purchase.requisition.partner, id: purchase_requisition_partner_0}:
- partner_address_id: base.res_partner_address_7
- partner_id: base.res_partner_4
--
- I create a new purchase order.
--
- !python {model: purchase.requisition.partner}: |
- req_obj = self.pool.get('purchase.requisition')
- ids =req_obj.search(cr, uid, [('origin','=','Laptop ACER')])
- self.create_order(cr, uid, [ref("purchase_requisition_partner_0")], {"lang":
- 'en_US', "active_model": "purchase.requisition", "tz": False, "record_id":
- 1, "active_ids": ids, "active_id": ids[0], })
-
--
- I check that I have two purchase orders on the purchase requisition.
--
- !python {model: purchase.order}: |
- from tools.translate import _
- order_ids =self.search(cr, uid, [('origin','=','TEST/TENDER/0001')])
- ids=len(order_ids)
- assert(ids == 2), _('Purchase Order not Created')
-
--
- I set the purchase requisition as 'Not Exclusive'.
--
- !python {model: purchase.requisition}: |
- ids =self.search(cr, uid, [('origin','=','Laptop ACER')])
- self.write(cr,uid,ids[0],{'exclusive': 'multiple' })
--
- I change the quantities so that the purchase order for DistriPC includes 3 pieces and the
- purchase order for Asustek includes 2 pieces.
--
- !python {model: purchase.order}: |
- line_obj=self.pool.get('purchase.order.line')
- partner_obj=self.pool.get('res.partner')
- requistion_obj=self.pool.get('purchase.requisition')
- requistion_ids =requistion_obj.search(cr, uid, [('origin','=','Laptop ACER')])
- partner_id1=partner_obj.search(cr,uid,[('name','=','ASUStek')])[0]
- partner_id2=partner_obj.search(cr,uid,[('name','=','Distrib PC')])[0]
- purchase_id1= self.search(cr, uid, [('partner_id','=',partner_id1),('requisition_id','in',requistion_ids)])
- purchase_id2= self.search(cr, uid, [('partner_id','=',partner_id2),('requisition_id','in',requistion_ids)])
- order_line1=self.browse(cr, uid, purchase_id1, context)[0].order_line[0].id
- order_line2=self.browse(cr, uid, purchase_id2, context)[0].order_line[0].id
- line_obj.write(cr, uid, order_line1, {'product_qty':2})
- line_obj.write(cr, uid, order_line2, {'product_qty':3})
--
- I confirm and validate both purchase orders.
--
- !python {model: purchase.order}: |
- order_ids= self.search(cr, uid, [])
- import netsvc
- wf_service = netsvc.LocalService("workflow")
- for id in order_ids:
- wf_service.trg_validate(uid, 'purchase.order',id,'purchase_confirm', cr)
- wf_service.trg_validate(uid, 'purchase.order',id,'purchase_approve', cr)
--
- I check that the delivery order of the customer is in state 'Waiting Goods'.
--
- !python {model: stock.picking }: |
- from tools.translate import _
- picking_id = self.search(cr, uid, [('origin','=','TEST/TENDER/0001')])
- if picking_id:
- pick=self.browse(cr,uid,picking_id[0])
- assert (pick.state =='confirmed'),_('Picking is not in confirm state.')
- assert (pick.move_lines[0].state == 'waiting'), _('Stock Move is not Waiting state.')
-
--
- I receive the order of the supplier Asustek from the Incoming Products menu.
--
- !python {model: stock.picking }: |
- import time
- partner_obj=self.pool.get('res.partner')
- order_obj=self.pool.get('purchase.order')
- partner_id=partner_obj.search(cr,uid,[('name','=','ASUStek')])[0]
- picking_id = self.search(cr, uid, [('address_id.partner_id','=',partner_id),('type','=','in')])
- if picking_id:
- pick=self.browse(cr,uid,picking_id[0])
- move =pick.move_lines[0]
- partial_datas = {
- 'partner_id': pick.address_id.partner_id.id,
- 'address_id': pick.address_id.id,
- 'delivery_date' : time.strftime('%Y-%m-%d'),
- }
- partial_datas['move%s'%(move.id)]= {
- 'product_id': move.product_id.id,
- 'product_qty': move.product_qty,
- 'product_uom': move.product_uom.id,
- }
- self.do_partial(cr, uid, picking_id,partial_datas)
--
- I receive the order of the supplier DistriPC from the Incoming Shipments menu.
--
- !python {model: stock.picking }: |
- import time
- partner_id=self.pool.get('res.partner').search(cr,uid,[('name','=','Distrib PC')])[0]
- picking_id = self.search(cr, uid, [('address_id.partner_id','=',partner_id),('type','=','in')])
- if picking_id:
- pick=self.browse(cr,uid,picking_id[0])
- move =pick.move_lines[0]
- partial_datas = {
- 'partner_id':pick.address_id.partner_id.id,
- 'address_id': pick.address_id.id,
- 'delivery_date' : time.strftime('%Y-%m-%d'),
- }
- partial_datas['move%s'%(move.id)]= {
- 'product_id': move.product_id.id,
- 'product_qty': move.product_qty,
- 'product_uom': move.product_uom.id,
- }
- self.do_partial(cr, uid, picking_id,partial_datas)
--
- I check that the delivery order of the customer is in the state Available.
--
- !python {model: stock.picking }: |
- from tools.translate import _
- picking_id = self.search(cr, uid, [('origin','=','TEST/TENDER/0001'),('type','=','out')])
- if picking_id:
- pick=self.browse(cr,uid,picking_id[0])
- assert(pick.state == 'assigned'), _('Picking is not in available state')
-
+-
+ In order to test the purchase requisition module, I have to checked product's boolean field 'purchase requisition'.
+-
+ I start by Checking the product, Product must have requisition field checked.
+-
+ !record {model: product.product, id: product.product_product_hdd3}:
+ purchase_requisition: True
+-
+ I create the product's procurement order and run that procurement.
+ After Run the procurement I check created purchase requisition [Tender].
+-
+ !python {model: product.product}: |
+ import netsvc
+ mk_proc = self.pool.get('make.procurement')
+ proc_order = self.pool.get('procurement.order')
+ pur_req = self.pool.get('purchase.requisition')
+ pur_order = self.pool.get('purchase.order')
+ context = {'active_model': 'product.product','active_ids': [ref('product.product_product_hdd3')],'active_id': ref('product.product_product_hdd3')}
+ default_data = mk_proc.default_get(cr, uid, ['uom_id', 'warehouse_id', 'date_planned', 'product_id', 'qty'], context)
+ vals = {'uom_id': ref('product.product_uom_unit'),'warehouse_id': ref('stock.stock_warehouse_shop0'),'qty': default_data.get('qty'),'date_planned': default_data.get('date_planned')}
+ ids = mk_proc.create(cr, uid, vals, context)
+ req_id = mk_proc.make_procurement(cr, uid, [ids], context)
+ order = proc_order.browse(cr, uid, [req_id.get('res_id')])
+ assert order[0].state == "confirmed", "Procurement Order should be in Confirmed state"
+ assert order[0].product_id.id == ref('product.product_product_hdd3'),"Product is not correspond in procurement order"
+ assert order[0].product_qty == default_data.get('qty'),"Product's quantity is not correspond in procurement order"
+ assert order[0].product_uom.id == ref('product.product_uom_unit'),"Product's UOM is not correspond in procurement order"
+ wf_service = netsvc.LocalService("workflow")
+ for proc in order:
+ wf_service.trg_validate(uid, 'procurement.order',proc.id,'button_check', cr)
+ proc_ids = proc_order.search(cr, uid, [('id','=',req_id.get('res_id')),('state','in',['running'])])
+ proc_id = proc_order.browse(cr, uid, proc_ids)
+ assert proc_id[0].state == 'running',"Generated Procurement should be in Running state"
+ if proc_id[0].requisition_id:
+ po_id = pur_order.search(cr, uid, [('requisition_id','=',proc_id[0].requisition_id.id)])
+ po_req = pur_order.browse(cr, uid, po_id)[0].requisition_id
+ pur_req_rec = pur_req.browse(cr, uid, [proc_id[0].requisition_id.id])
+ assert po_req == proc_id[0].requisition_id,"Created Requisition is not properly linked in purchase order"
+ assert pur_req_rec[0].state == 'draft',"Created Requisition should be in draft state"
+ for record in pur_req_rec[0].line_ids:
+ assert record.product_id.id == ref('product.product_product_hdd3'),"Requisition Product is not correspond"
+ assert record.product_qty == default_data.get('qty'),"Requisition Product's quantity is not correspond"
+ assert record.product_uom_id.id == ref('product.product_uom_unit'),"Requisition Product's UOM is not correspond"
+
=== added file 'purchase_requisition/test/process/purchase_requisition_exclusive.yml'
--- purchase_requisition/test/process/purchase_requisition_exclusive.yml 1970-01-01 00:00:00 +0000
+++ purchase_requisition/test/process/purchase_requisition_exclusive.yml 2011-11-28 07:14:29 +0000
@@ -0,0 +1,34 @@
+-
+ In order to test the exclusive type requisition, I have to create two differ purchase order of one requisition [Tender]
+-
+ I select purchase requisition of '[CPU1] Processor AMD Athlon XP 1800+' and '[CPU3] Processor AMD Athlon XP 2200+'.
+ So, those products must have requisition field checked.
+-
+ I start by Checking requisition field for '[CPU1] Processor AMD Athlon XP 1800+' product.
+-
+ !record {model: product.product, id: product.product_product_cpu1}:
+ purchase_requisition: True
+-
+ Checked requisition field for '[CPU3] Processor AMD Athlon XP 2200+' product.
+-
+ !record {model: product.product, id: product.product_product_cpu3}:
+ purchase_requisition: True
+-
+ I search the purchase orders which have exclusive purchase requisition 'TE00001' and confirm any one of them.
+ Then check the remaining purchase orders goes in to cancel state.
+-
+ !python {model: purchase.order}: |
+ import netsvc
+ wf_service = netsvc.LocalService("workflow")
+ pur_order = self.pool.get('purchase.order')
+ ids = pur_order.search(cr, uid, [('requisition_id','=',ref('order_purchase_requisition1'))])
+ po_id = pur_order.browse(cr, uid, ids)
+ for po in po_id:
+ for line in po.order_line:
+ if line.product_id.purchase_requisition == False:
+ assert line.product_id.purchase_requisition == True, "Purchase Order's product must have requisition field checked"
+ po_confirm = po_id[0].id
+ wf_service.trg_validate(uid, 'purchase.order',po_confirm,'purchase_confirm', cr)
+ assert po_id[0].state == 'approved',"After confirm a purchase order it should be in confirm state"
+ assert po_id[1].state == 'cancel',"After confirmed a purchase order form the this requisition the second purchase order should be automatically goes in to cancelled state"
+
=== removed file 'purchase_requisition/test/purchase_requisition_exclusive.yml'
--- purchase_requisition/test/purchase_requisition_exclusive.yml 2011-01-14 00:11:01 +0000
+++ purchase_requisition/test/purchase_requisition_exclusive.yml 1970-01-01 00:00:00 +0000
@@ -1,113 +0,0 @@
--
- In order to test the purchase requisition module, I will do a sale order -> purchase_requisition ->
- purchase flow and I will buy the required products at two different suppliers.
--
- I start by creating a new product 'Laptop ACER', which is purchased at Asustek, in MTO,
- with the generation of purchase requisitions.
--
- !record {model: product.product, id: product_product_laptopacer1}:
- categ_id: product.product_category_3
- cost_method: standard
- list_price: 1000.0
- mes_type: fixed
- name: Laptop ACER1
- procure_method: make_to_order
- purchase_requisition: 1
- seller_ids:
- - delay: 1
- name: base.res_partner_asus
- qty: 5.0
- min_qty: 1.0
- supply_method: buy
- type: product
- uom_id: product.product_uom_unit
- uom_po_id: product.product_uom_unit
--
- Then I sell 5 Laptop ACER to the customer Agrolait, sale order TEST/TENDER/0002
--
- !record {model: sale.order, id: sale_order_testtender1}:
- date_order: !eval time.strftime('%Y-%m-%d')
- invoice_quantity: order
- name: TEST/TENDER/0002
- order_line:
- - name: Laptop ACER1
- price_unit: 1000.0
- product_uom: product.product_uom_unit
- product_uom_qty: 5.0
- state: draft
- 'delay': 7.0
- 'product_id': product_product_laptopacer1
- 'type': make_to_order
- order_policy: manual
- partner_id: base.res_partner_agrolait
- partner_invoice_id: base.res_partner_address_8
- partner_order_id: base.res_partner_address_8
- partner_shipping_id: base.res_partner_address_8
- picking_policy: direct
- pricelist_id: product.list0
- shop_id: sale.shop
--
- I confirm sale order.
--
- !workflow {model: sale.order, action: order_confirm, ref: sale_order_testtender1}
--
- I launch the scheduler to compute all procurements, and planify all requisitions orders.
--
- !python {model: procurement.order.compute.all}: |
- proc_obj = self.pool.get('procurement.order')
- proc_obj._procure_confirm(cr,uid)
--
- I should find a purchase requisition with the origin 'TEST/TENDER/0002', that includes a request for
- 5 Laptop ACER, and a purchase order on the default supplier for this product.
--
- !python {model: purchase.requisition}: |
- requisition_ids =self.search(cr, uid, [('origin','=','Laptop ACER1')])
- ids=len(requisition_ids)
- assert len(requisition_ids), "Purchase requisition hasn't Created"
--
- On the purchase requisition, I create a new purchase order for the supplier 'DistriPC' by clicking on
- the button 'New Request for Quotation'. This opens a window to ask me the supplier and I set DistriPC .
--
- I Create purchase.requisition.partner .
--
- !record {model: purchase.requisition.partner, id: purchase_requisition_partner_0}:
- partner_address_id: base.res_partner_address_7
- partner_id: base.res_partner_4
--
- I create a new purchase order for the supplier 'DistriPC'.
--
- !python {model: purchase.requisition.partner}: |
- req_obj = self.pool.get('purchase.requisition')
- ids =req_obj.search(cr, uid, [('origin','=','Laptop ACER1')])
- self.create_order(cr, uid, [ref("purchase_requisition_partner_0")], {"lang":
- 'en_US', "active_model": "purchase.requisition", "tz": False, "record_id":
- 1, "active_ids": ids, "active_id": ids[0], })
--
- I set the purchase requisition as 'Exclusive'
--
- !python {model: purchase.requisition}: |
- ids =self.search(cr, uid, [('origin','=','Laptop ACER1')])
- self.write(cr,uid,ids[0],{'exclusive': 'exclusive' })
--
- I confirm and validate the Request for Quotation of ASUStek.
--
- !python {model: purchase.order}: |
- partner_id=self.pool.get('res.partner').search(cr,uid,[('name','=','ASUStek')])[0]
- req_obj = self.pool.get('purchase.requisition')
- ids =req_obj.search(cr, uid, [('origin','=','Laptop ACER1')])
- purchase_id= self.search(cr, uid, [('partner_id','=',partner_id),('requisition_id','in',ids)])[0]
- import netsvc
- wf_service = netsvc.LocalService("workflow")
- if purchase_id:
- wf_service.trg_validate(uid, 'purchase.order',purchase_id,'purchase_confirm', cr)
- wf_service.trg_validate(uid, 'purchase.order',purchase_id,'purchase_approve', cr)
--
- I check that Request for Quotation of DistriPC is cancelled.
--
- !python {model: purchase.order}: |
- partner_id=self.pool.get('res.partner').search(cr,uid,[('name','=','Distrib PC')])[0]
- req_obj = self.pool.get('purchase.requisition')
- ids =req_obj.search(cr, uid, [('origin','=','Laptop ACER1')])
- purchase_id= self.search(cr, uid, [('partner_id','=',partner_id),('requisition_id','in',ids)])[0]
- state=self.browse(cr,uid,purchase_id).state
- assert (state=='cancel')
=== added directory 'purchase_requisition/test/ui'
=== renamed file 'purchase_requisition/test/purchase_requisition_test.yml' => 'purchase_requisition/test/ui/delete_requisition.yml'
--- purchase_requisition/test/purchase_requisition_test.yml 2011-10-10 11:50:02 +0000
+++ purchase_requisition/test/ui/delete_requisition.yml 2011-11-28 07:14:29 +0000
@@ -1,166 +1,19 @@
-
- In order to test the purchase requisition flow,I start by creating a new product 'MOB1'
--
- !record {model: product.product, id: product_product_mob1}:
- name: MOB1
- categ_id: product.product_category_3
- cost_method: standard
- mes_type: fixed
- 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
- standard_price: 2000.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
--
- I create purchase requisition for MOB1 for 1 quantity.
--
- !record {model: purchase.requisition, id: purchase_requisition_te0}:
- company_id: base.main_company
- exclusive: multiple
- line_ids:
- - company_id: base.main_company
- product_id: product_product_mob1
- product_qty: 10.0
- product_uom_id: product.product_uom_unit
- name: TE00009
--
- Initially purchase requisition is in draft state.
--
- !assert {model: purchase.requisition, id: purchase_requisition_te0}:
- - state == 'draft'
--
- Copy purchase requisition which is in draft state than confirm and Done it.
--
- !python {model: purchase.requisition}: |
- copy_id = self.copy(cr, uid, ref("purchase_requisition_te0"))
- self.tender_cancel(cr, uid, [copy_id], context=None)
- self.tender_reset(cr, uid, [copy_id], context=None)
- self.tender_in_progress(cr, uid, [copy_id], context=None)
- self.tender_done(cr, uid, [copy_id], context=None)
--
- I confirm the purchase requisition for MOB1.
--
- !python {model: purchase.requisition}: |
- self.tender_in_progress(cr, uid, [ref("purchase_requisition_te0")])
--
- I check that the purchase requisition which was initially in the draft state has transmit to In Progress after confirm it.
--
- !assert {model: purchase.requisition, id: purchase_requisition_te0}:
- - state == 'in_progress'
--
- In order to create a purchase order for 'Axelor', i click on the wizard 'Request a Quotation' and create record for wizard.
--
- !record {model: purchase.requisition.partner, id: purchase_requisition_partner_0}:
- partner_address_id: base.res_partner_address_3000
- partner_id: base.res_partner_desertic_hispafuentes
--
- I click on 'Create Quotation' for creating PO.
--
- !python {model: purchase.requisition.partner}: |
- self.create_order(cr, uid, [ref("purchase_requisition_partner_0")], {"active_model": "purchase.requisition",
- "active_ids": [ref("purchase_requisition_te0")],"active_id": ref("purchase_requisition_te0"), })
--
- I confirm the purchase order of Axelor.
--
- !python {model: purchase.order}: |
- purchase_id= self.search(cr, uid, [('requisition_id','=',ref("purchase_requisition_te0"))])
- import netsvc
- wf_service = netsvc.LocalService("workflow")
- if purchase_id:
- wf_service.trg_validate(uid, 'purchase.order',purchase_id[0],'purchase_confirm', cr)
- wf_service.trg_validate(uid, 'purchase.order',purchase_id[0],'purchase_approve', cr)
--
- I check that Quotation of Axelor is Approved.
--
- !python {model: purchase.order}: |
- purchase_id= self.search(cr, uid, [('requisition_id','=',ref("purchase_requisition_te0"))])[0]
- state=self.browse(cr,uid,purchase_id).state
- assert (state=='approved')
--
- I click on Done button
--
- !python {model: purchase.requisition}: |
- self.tender_done(cr, uid, [ref("purchase_requisition_te0")],)
--
- I check that after click on Done button state is in done.
--
- !assert {model: purchase.requisition, id: purchase_requisition_te0}:
- - state == 'done'
--
- In order to test the purchase requisition flow for Requisition Type is exclusive
--
- I create purchase requisition for Requisition Type is exclusive
--
- !record {model: purchase.requisition, id: purchase_requisition_ex1}:
- company_id: base.main_company
- exclusive: exclusive
- line_ids:
- - company_id: base.main_company
- product_id: product_product_mob1
- product_qty: 10.0
- product_uom_id: product.product_uom_unit
- name: TE000010
--
- I Create a First Purchase Order for the supplier 'Distrib PC'.
--
- !record {model: purchase.requisition.partner, id: purchase_requisition_partner_1}:
- partner_address_id: base.res_partner_address_7
- partner_id: base.res_partner_4
--
- I create Quotations For supplier 'Distrib PC'.
--
- !python {model: purchase.requisition.partner}: |
- self.create_order(cr, uid, [ref("purchase_requisition_partner_1")], {"active_model": "purchase.requisition",
- "active_ids": [ref("purchase_requisition_ex1")],"active_id": ref("purchase_requisition_ex1"), })
--
- I Create a Second Purchase Order for the supplier ASUStek.
--
- !record {model: purchase.requisition.partner, id: purchase_requisition_partner_2}:
- partner_address_id: base.res_partner_address_tang
- partner_id: base.res_partner_asus
--
- I create Quotations For supplier 'ASUStek'.
--
- !python {model: purchase.requisition.partner}: |
- self.create_order(cr, uid, [ref("purchase_requisition_partner_2")], {"active_model": "purchase.requisition",
- "active_ids": [ref("purchase_requisition_ex1")],"active_id": ref("purchase_requisition_ex1"), })
--
- I check that Initially purchase requisition is draft state.
--
- !assert {model: purchase.requisition, id: purchase_requisition_ex1}:
- - state == 'draft'
--
- I confirm the Second purchase order of ASUStek, than check that Quotation is Approved.
--
- !python {model: purchase.order}: |
- purchase_id= self.search(cr, uid, [('partner_id','=',ref("base.res_partner_asus")),('requisition_id','=',ref("purchase_requisition_ex1"))])
- import netsvc
- wf_service = netsvc.LocalService("workflow")
- if purchase_id:
- wf_service.trg_validate(uid, 'purchase.order',purchase_id[0],'purchase_confirm', cr)
- wf_service.trg_validate(uid, 'purchase.order',purchase_id[0],'purchase_approve', cr)
- state=self.browse(cr,uid,purchase_id[0]).state
- assert (state=='approved')
+ In order to test to delete process on purchase requisition order.
+-
+ I delete draft purchase requisition order.
+-
+ !python {model: purchase.order}: |
+ self.unlink(cr, uid, [ref("order_purchase_requisition1")])
+-
+ Now I try to cancel purchase requisition order.
+-
+ !python {model: purchase.requisition}: |
+ self.tender_cancel(cr, uid, [ref("order_purchase_requisition1")])
+-
+ I delete cancelled purchase requisition order.
+-
+ !python {model: purchase.order}: |
+ self.unlink(cr, uid, [ref("order_purchase_requisition1")])
+
--
- I check that Quotation of Distrib PC is cancelled.
--
- !python {model: purchase.order}: |
- partner_id=self.pool.get('res.partner').search(cr,uid,[('name','=','Distrib PC')])[0]
- purchase_id= self.search(cr, uid, [('partner_id','=',partner_id),('requisition_id','=',ref("purchase_requisition_ex1"))])[0]
- state=self.browse(cr,uid,purchase_id).state
- assert (state=='cancel')
--
- I check that Purchase Requisition is Done.
--
- !assert {model: purchase.requisition, id: purchase_requisition_ex1}:
- - state == 'done'
=== renamed file 'purchase_requisition/test/purchase_requisition_report.yml' => 'purchase_requisition/test/ui/purchase_requisition_report.yml'
=== added file 'purchase_requisition/test/ui/requisiton2request_quotation.yml'
--- purchase_requisition/test/ui/requisiton2request_quotation.yml 1970-01-01 00:00:00 +0000
+++ purchase_requisition/test/ui/requisiton2request_quotation.yml 2011-11-28 07:14:29 +0000
@@ -0,0 +1,23 @@
+-
+ In order to create a Quotatoion, I click on the wizard 'Request a Quotation' and create record from wizard.
+-
+ !record {model: purchase.requisition.partner, id: purchase_requisition_partner_0}:
+ partner_address_id: base.res_partner_address_3000
+ partner_id: base.res_partner_desertic_hispafuentes
+-
+ I click on 'Create Quotation' for creating a Quatation.
+-
+ !python {model: purchase.requisition.partner}: |
+ self.create_order(cr, uid, [ref("purchase_requisition_partner_0")], {"active_model": "purchase.requisition",
+ "active_ids": [ref("order_purchase_requisition1")],"active_id": ref("order_purchase_requisition1"), })
+-
+ I check that the purchase order created.
+-
+ !python {model: purchase.order}: |
+ purchase_ids= self.search(cr, uid, [('requisition_id','=',ref("order_purchase_requisition1"))])
+ assert purchase_ids, "Purchase Order is not created from this wizard"
+ rfq = self.browse(cr, uid, purchase_ids[0])
+ assert rfq.state == 'draft',"Purchase Order should be in draft state"
+ assert rfq.partner_address_id.id == ref('base.res_partner_address_3000'),"Purchase Order Partner address is not correspond"
+ assert rfq.partner_id.id == ref('base.res_partner_desertic_hispafuentes'),"Purchase Order Partner is not correspond"
+
_______________________________________________
Mailing list: https://launchpad.net/~openerp-dev-gtk
Post to : [email protected]
Unsubscribe : https://launchpad.net/~openerp-dev-gtk
More help : https://help.launchpad.net/ListHelp