From 8cfb45d5504376a9ade6e486af0375140a7d91c8 Mon Sep 17 00:00:00 2001 From: "Kirti Savalia (OpenERP)" Date: Wed, 30 Nov 2011 16:13:34 +0530 Subject: [PATCH 1/6] [ADD]:demo data for the product with account information bzr revid: ksa@tinyerp.com-20111130104334-h7zjiuvq922n43nq --- addons/purchase/purchase_demo.xml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/addons/purchase/purchase_demo.xml b/addons/purchase/purchase_demo.xml index 6999f85b076..406e8d89abc 100644 --- a/addons/purchase/purchase_demo.xml +++ b/addons/purchase/purchase_demo.xml @@ -14,6 +14,13 @@ + + + + + + + From 8029e57b00f9a2fddfec3f9034dc36e1930fbc6b Mon Sep 17 00:00:00 2001 From: "Kirti Savalia (OpenERP)" Date: Wed, 30 Nov 2011 16:16:18 +0530 Subject: [PATCH 2/6] [ADD]:yml for stock real time accounting valuation bzr revid: ksa@tinyerp.com-20111130104618-r3p550bnov9wjjhf --- addons/purchase/__openerp__.py | 1 + .../test/process/real_time_valuation.yml | 42 +++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 addons/purchase/test/process/real_time_valuation.yml diff --git a/addons/purchase/__openerp__.py b/addons/purchase/__openerp__.py index b4f3a9adf30..68e490d23f1 100644 --- a/addons/purchase/__openerp__.py +++ b/addons/purchase/__openerp__.py @@ -67,6 +67,7 @@ Dashboard for purchase management that includes: 'test/process/run_scheduler.yml', 'test/process/merge_order.yml', 'test/process/edi_purchase_order.yml', + 'test/process/real_time_valuation.yml', 'test/ui/print_report.yml', 'test/ui/duplicate_order.yml', 'test/ui/delete_order.yml', diff --git a/addons/purchase/test/process/real_time_valuation.yml b/addons/purchase/test/process/real_time_valuation.yml new file mode 100644 index 00000000000..d1b4cb267f1 --- /dev/null +++ b/addons/purchase/test/process/real_time_valuation.yml @@ -0,0 +1,42 @@ +- + In order to test real time stock valuation flow,I start by creating a new product 'Sugar' +- + !record {model: product.product, id: product_sugar_id_50kg}: + name: Sugar + procure_method: make_to_stock + supply_method: buy + cost_method: standard + standard_price: 3600.0 + uom_id: product.product_uom_kgm + uom_po_id: product.product_uom_gram + valuation: real_time + categ_id: product.product_category_rawmaterial0 +- + I create a draft Purchase Order +- + !record {model: purchase.order, id: purchase_order_sugar}: + partner_id: base.res_partner_agrolait + partner_address_id: base.res_partner_address_8invoice + pricelist_id: 1 + order_line: + - product_id: product_sugar_id_50kg + product_qty: 1.0 + product_uom: product.product_uom_gram + price_unit: 3600000 + name: 'Sugar' + date_planned: '2011-08-31' +- + I confirm the purchase order +- + !workflow {model: purchase.order, ref: purchase_order_sugar, action: purchase_confirm} +- + I check that the invoice of order and values. +- + !python {model: purchase.order}: | + purchase_order = self.browse(cr, uid, ref("purchase_order_sugar")) + for purchase_line in purchase_order.order_line: + assert purchase_line.price_unit == 3600000.0 + assert len(purchase_order.invoice_ids) == 1, "Invoice should be generated." + for invoice_line in purchase_order.invoice_ids: + for data in invoice_line.invoice_line: + assert data.price_unit == 3600000.0, "unit price is not same, got %s, expected 3600000.0"%(purchase_line.price_unit,) From 296622e5f755ed7bab5f44a7825e80bbe6c9ed0d Mon Sep 17 00:00:00 2001 From: "Kirti Savalia (OpenERP)" Date: Mon, 5 Dec 2011 16:13:22 +0530 Subject: [PATCH 3/6] [ADD]: demo data for different uom bzr revid: ksa@tinyerp.com-20111205104322-f63d4ujlt64kl0p1 --- addons/product/product_demo.xml | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/addons/product/product_demo.xml b/addons/product/product_demo.xml index 3aebec13715..a95b41e546c 100644 --- a/addons/product/product_demo.xml +++ b/addons/product/product_demo.xml @@ -636,6 +636,20 @@ + + SUGAR50KG + buy + + 110.0 + 3600.0 + + + SUGAR of 50KG + + product + + + @@ -777,6 +791,15 @@ 5 + + + 10 + 1 + 5 + + 5 + + From 8af8d336375d6f0ddc4e278b9bfddb695713cccd Mon Sep 17 00:00:00 2001 From: "Kirti Savalia (OpenERP)" Date: Mon, 5 Dec 2011 16:14:59 +0530 Subject: [PATCH 4/6] [IMP]:code for product onchange when uom is different bzr revid: ksa@tinyerp.com-20111205104459-p2hnekd0tazuia2n --- addons/purchase/purchase.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index 0dc015834a0..cea5aeeef4f 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -727,10 +727,12 @@ class purchase_order_line(osv.osv): # - name of method should "onchange_product_id" # - docstring # - merge 'product_uom_change' method - # - split into small internal methods for clearity + # - split into small internal methods for clearity def product_id_change(self, cr, uid, ids, pricelist, product, qty, uom, partner_id, date_order=False, fiscal_position=False, date_planned=False, - name=False, price_unit=False, notes=False, context={}): + name=False, price_unit=False, notes=False, context=None): + if context is None: + context = {} if not pricelist: raise osv.except_osv(_('No Pricelist !'), _('You have to select a pricelist or a supplier in the purchase form !\nPlease set one before choosing a product.')) if not partner_id: @@ -744,11 +746,14 @@ class purchase_order_line(osv.osv): lang=False if partner_id: lang=self.pool.get('res.partner').read(cr, uid, partner_id, ['lang'])['lang'] - context={'lang':lang} + context['lang'] = lang context['partner_id'] = partner_id prod = self.pool.get('product.product').browse(cr, uid, product, context=context) prod_uom_po = prod.uom_po_id.id + + if uom and prod and (uom <> prod_uom_po): + uom = prod_uom_po if not uom: uom = prod_uom_po if not date_order: @@ -773,6 +778,7 @@ class purchase_order_line(osv.osv): if qty < temp_qty: # If the supplier quantity is greater than entered from user, set minimal. qty = temp_qty res.update({'warning': {'title': _('Warning'), 'message': _('The selected supplier has a minimal quantity set to %s, you should not purchase less.') % qty}}) + uom = context.get('uom_change', uom) qty_in_product_uom = product_uom_pool._compute_qty(cr, uid, uom, qty, to_uom_id=prod.uom_id.id) price = self.pool.get('product.pricelist').price_get(cr,uid,[pricelist], product, qty_in_product_uom or 1.0, partner_id, { @@ -786,7 +792,7 @@ class purchase_order_line(osv.osv): 'taxes_id':map(lambda x: x.id, prod.supplier_taxes_id), 'date_planned': date_planned or dt,'notes': notes or prod.description_purchase, 'product_qty': qty, - 'product_uom': prod.uom_id.id}}) + 'product_uom': uom or prod_uom_po}}) domain = {} taxes = self.pool.get('account.tax').browse(cr, uid,map(lambda x: x.id, prod.supplier_taxes_id)) @@ -808,7 +814,7 @@ class purchase_order_line(osv.osv): name=False, price_unit=False, notes=False, context={}): res = self.product_id_change(cr, uid, ids, pricelist, product, qty, uom, partner_id, date_order=date_order, fiscal_position=fiscal_position, date_planned=date_planned, - name=name, price_unit=price_unit, notes=notes, context=context) + name=name, price_unit=price_unit, notes=notes, context={'uom_change': uom}) if 'product_uom' in res['value']: if uom and (uom != res['value']['product_uom']) and res['value']['product_uom']: seller_uom_name = self.pool.get('product.uom').read(cr, uid, [res['value']['product_uom']], ['name'])[0]['name'] From 6709a80bbcb8f7f2fe3dccd528cd7743c54182d9 Mon Sep 17 00:00:00 2001 From: "Kirti Savalia (OpenERP)" Date: Mon, 5 Dec 2011 16:15:41 +0530 Subject: [PATCH 5/6] [IMP]:yml for real time valuation value bzr revid: ksa@tinyerp.com-20111205104541-suka3mhly9ry8xdc --- addons/purchase/purchase_order_demo.yml | 5 +++ .../test/process/real_time_valuation.yml | 42 ++----------------- 2 files changed, 9 insertions(+), 38 deletions(-) diff --git a/addons/purchase/purchase_order_demo.yml b/addons/purchase/purchase_order_demo.yml index abfaa102033..8cd9271de45 100644 --- a/addons/purchase/purchase_order_demo.yml +++ b/addons/purchase/purchase_order_demo.yml @@ -74,3 +74,8 @@ - product_id: product.product_product_1 product_qty: 15 +- + !record {model: purchase.order, id: order_purchase8}: + partner_id: base.res_partner_asus + order_line: + - product_id: product.product_sugar_id_50kg diff --git a/addons/purchase/test/process/real_time_valuation.yml b/addons/purchase/test/process/real_time_valuation.yml index d1b4cb267f1..69b04071f40 100644 --- a/addons/purchase/test/process/real_time_valuation.yml +++ b/addons/purchase/test/process/real_time_valuation.yml @@ -1,42 +1,8 @@ - - In order to test real time stock valuation flow,I start by creating a new product 'Sugar' -- - !record {model: product.product, id: product_sugar_id_50kg}: - name: Sugar - procure_method: make_to_stock - supply_method: buy - cost_method: standard - standard_price: 3600.0 - uom_id: product.product_uom_kgm - uom_po_id: product.product_uom_gram - valuation: real_time - categ_id: product.product_category_rawmaterial0 -- - I create a draft Purchase Order -- - !record {model: purchase.order, id: purchase_order_sugar}: - partner_id: base.res_partner_agrolait - partner_address_id: base.res_partner_address_8invoice - pricelist_id: 1 - order_line: - - product_id: product_sugar_id_50kg - product_qty: 1.0 - product_uom: product.product_uom_gram - price_unit: 3600000 - name: 'Sugar' - date_planned: '2011-08-31' -- - I confirm the purchase order -- - !workflow {model: purchase.order, ref: purchase_order_sugar, action: purchase_confirm} -- - I check that the invoice of order and values. + In order to test real time stock valuation flow, when default UoM and purchase UoM is different - !python {model: purchase.order}: | - purchase_order = self.browse(cr, uid, ref("purchase_order_sugar")) + purchase_order = self.browse(cr, uid, ref("order_purchase8")) + assert len(purchase_order.order_line) == 1, "orderline should be generated." for purchase_line in purchase_order.order_line: - assert purchase_line.price_unit == 3600000.0 - assert len(purchase_order.invoice_ids) == 1, "Invoice should be generated." - for invoice_line in purchase_order.invoice_ids: - for data in invoice_line.invoice_line: - assert data.price_unit == 3600000.0, "unit price is not same, got %s, expected 3600000.0"%(purchase_line.price_unit,) + assert purchase_line.price_unit == 3.6 ,"unit price is not same, got %s, expected 3.6"%(purchase_line.price_unit,) \ No newline at end of file From 31f3f8651031f4c4de3c16f6e90bf4d1f6619600 Mon Sep 17 00:00:00 2001 From: "Kirti Savalia (OpenERP)" Date: Thu, 8 Dec 2011 15:25:59 +0530 Subject: [PATCH 6/6] [IMP]:check the flow when default UoM and purchase UoM is different bzr revid: ksa@tinyerp.com-20111208095559-9qt47pftmtr55yh1 --- addons/product/product_demo.xml | 23 ----------- addons/purchase/purchase_demo.xml | 7 ---- addons/purchase/purchase_order_demo.yml | 19 ++++++++- .../test/process/real_time_valuation.yml | 39 ++++++++++++++++--- 4 files changed, 51 insertions(+), 37 deletions(-) diff --git a/addons/product/product_demo.xml b/addons/product/product_demo.xml index a95b41e546c..3aebec13715 100644 --- a/addons/product/product_demo.xml +++ b/addons/product/product_demo.xml @@ -636,20 +636,6 @@ - - SUGAR50KG - buy - - 110.0 - 3600.0 - - - SUGAR of 50KG - - product - - - @@ -791,15 +777,6 @@ 5 - - - 10 - 1 - 5 - - 5 - - diff --git a/addons/purchase/purchase_demo.xml b/addons/purchase/purchase_demo.xml index 406e8d89abc..6999f85b076 100644 --- a/addons/purchase/purchase_demo.xml +++ b/addons/purchase/purchase_demo.xml @@ -14,13 +14,6 @@ - - - - - - - diff --git a/addons/purchase/purchase_order_demo.yml b/addons/purchase/purchase_order_demo.yml index 8cd9271de45..0ea29b2a242 100644 --- a/addons/purchase/purchase_order_demo.yml +++ b/addons/purchase/purchase_order_demo.yml @@ -75,7 +75,22 @@ product_qty: 15 - - !record {model: purchase.order, id: order_purchase8}: + !record {model: product.product, id: product_sugar_id_50kg}: + default_code: SUGAR50KG + supply_method: buy + list_price: 110.0 + standard_price: 3600.0 + uom_id: product.product_uom_kgm + uom_po_id: product.product_uom_gram + name: SUGAR of 50KG + valuation: real_time + property_stock_account_input: account.o_expense + property_stock_account_output: account.o_income + categ_id: product.product_category_rawmaterial0 + +- + !record {model: purchase.order, id: order_purchase_sugar}: partner_id: base.res_partner_asus order_line: - - product_id: product.product_sugar_id_50kg + - product_id: product_sugar_id_50kg + diff --git a/addons/purchase/test/process/real_time_valuation.yml b/addons/purchase/test/process/real_time_valuation.yml index 69b04071f40..f0234888ba6 100644 --- a/addons/purchase/test/process/real_time_valuation.yml +++ b/addons/purchase/test/process/real_time_valuation.yml @@ -1,8 +1,37 @@ - - In order to test real time stock valuation flow, when default UoM and purchase UoM is different + In order to test real time stock valuation flow, I confirmed the purchase order. +- + !workflow {model: purchase.order, action: purchase_confirm, ref: order_purchase_sugar} +- + I check that the order which was initially in the draft state has transmit to approved state. +- + !assert {model: purchase.order, id: order_purchase_sugar}: + - state == 'approved' +- + In order to test check that picking is generated or not. - !python {model: purchase.order}: | - purchase_order = self.browse(cr, uid, ref("order_purchase8")) - assert len(purchase_order.order_line) == 1, "orderline should be generated." - for purchase_line in purchase_order.order_line: - assert purchase_line.price_unit == 3.6 ,"unit price is not same, got %s, expected 3.6"%(purchase_line.price_unit,) \ No newline at end of file + purchase_order = self.browse(cr, uid, ref("order_purchase_sugar")) + assert len(purchase_order.picking_ids) >= 1, "You should have only one reception order" + for picking in purchase_order.picking_ids: + assert picking.purchase_id.id == purchase_order.id +- + 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("order_purchase_sugar")).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]) +- + Check the Journal having proper amount or not. +- + !python {model: account.move.line}: | + pick_ids = self.pool.get('purchase.order').browse(cr, uid, ref("order_purchase_sugar")).picking_ids + for data in pick_ids: + for moveline in data.move_lines: + ids = self.pool.get('account.move.line').search(cr, uid, [('ref','=',data.name),('partner_id','=',data.partner_id.id)]) + item_data = self.pool.get('account.move.line').browse(cr, uid, ids) + for item in item_data: + if item.account_id.id == moveline.product_id.property_stock_account_input.id: + assert item.credit == 3.6, "Journal items have not proper credit amount" + assert item.debit == 0.0, "Journal items have not proper debit amount"