summaryrefslogtreecommitdiff
path: root/addons/purchase_stock/tests/test_purchase_stock_report.py
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/purchase_stock/tests/test_purchase_stock_report.py
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/purchase_stock/tests/test_purchase_stock_report.py')
-rw-r--r--addons/purchase_stock/tests/test_purchase_stock_report.py147
1 files changed, 147 insertions, 0 deletions
diff --git a/addons/purchase_stock/tests/test_purchase_stock_report.py b/addons/purchase_stock/tests/test_purchase_stock_report.py
new file mode 100644
index 00000000..824a11e7
--- /dev/null
+++ b/addons/purchase_stock/tests/test_purchase_stock_report.py
@@ -0,0 +1,147 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo.tests.common import Form
+from odoo.addons.stock.tests.test_report import TestReportsCommon
+
+
+class TestPurchaseStockReports(TestReportsCommon):
+ def test_report_forecast_1_purchase_order_multi_receipt(self):
+ """ Create a PO for 5 product, receive them then increase the quantity to 10.
+ """
+ po_form = Form(self.env['purchase.order'])
+ po_form.partner_id = self.partner
+ with po_form.order_line.new() as line:
+ line.product_id = self.product
+ line.product_qty = 5
+ po = po_form.save()
+
+ # Checks the report.
+ report_values, docs, lines = self.get_report_forecast(product_template_ids=self.product_template.ids)
+ draft_picking_qty_in = docs['draft_picking_qty']['in']
+ draft_purchase_qty = docs['draft_purchase_qty']
+ pending_qty_in = docs['qty']['in']
+ self.assertEqual(len(lines), 0, "Must have 0 line for now.")
+ self.assertEqual(draft_picking_qty_in, 0)
+ self.assertEqual(draft_purchase_qty, 5)
+ self.assertEqual(pending_qty_in, 5)
+
+ # Confirms the PO and checks the report again.
+ po.button_confirm()
+ report_values, docs, lines = self.get_report_forecast(product_template_ids=self.product_template.ids)
+ draft_picking_qty_in = docs['draft_picking_qty']['in']
+ draft_purchase_qty = docs['draft_purchase_qty']
+ pending_qty_in = docs['qty']['in']
+ self.assertEqual(len(lines), 1)
+ self.assertEqual(lines[0]['document_in'].id, po.id)
+ self.assertEqual(lines[0]['quantity'], 5)
+ self.assertEqual(lines[0]['document_out'], False)
+ self.assertEqual(draft_picking_qty_in, 0)
+ self.assertEqual(draft_purchase_qty, 0)
+ self.assertEqual(pending_qty_in, 0)
+
+ # Receives 5 products.
+ receipt = po.picking_ids
+ res_dict = receipt.button_validate()
+ wizard = Form(self.env[res_dict['res_model']].with_context(res_dict['context'])).save()
+ wizard.process()
+ report_values, docs, lines = self.get_report_forecast(product_template_ids=self.product_template.ids)
+ draft_picking_qty_in = docs['draft_picking_qty']['in']
+ draft_purchase_qty = docs['draft_purchase_qty']
+ pending_qty_in = docs['qty']['in']
+ self.assertEqual(len(lines), 0)
+ self.assertEqual(draft_picking_qty_in, 0)
+ self.assertEqual(draft_purchase_qty, 0)
+ self.assertEqual(pending_qty_in, 0)
+
+ # Increase the PO quantity to 10, so must create a second receipt.
+ po_form = Form(po)
+ with po_form.order_line.edit(0) as line:
+ line.product_qty = 10
+ po = po_form.save()
+ # Checks the report.
+ report_values, docs, lines = self.get_report_forecast(product_template_ids=self.product_template.ids)
+ draft_picking_qty_in = docs['draft_picking_qty']['in']
+ draft_purchase_qty = docs['draft_purchase_qty']
+ pending_qty_in = docs['qty']['in']
+ self.assertEqual(len(lines), 1, "Must have 1 line for now.")
+ self.assertEqual(lines[0]['document_in'].id, po.id)
+ self.assertEqual(lines[0]['quantity'], 5)
+ self.assertEqual(draft_picking_qty_in, 0)
+ self.assertEqual(draft_purchase_qty, 0)
+ self.assertEqual(pending_qty_in, 0)
+
+ def test_report_forecast_2_purchase_order_three_step_receipt(self):
+ """ Create a PO for 4 product, receive them then increase the quantity
+ to 10, but use three steps receipt.
+ """
+ grp_multi_loc = self.env.ref('stock.group_stock_multi_locations')
+ grp_multi_routes = self.env.ref('stock.group_adv_location')
+ self.env.user.write({'groups_id': [(4, grp_multi_loc.id)]})
+ self.env.user.write({'groups_id': [(4, grp_multi_routes.id)]})
+ # Configure warehouse.
+ warehouse = self.env.ref('stock.warehouse0')
+ warehouse.reception_steps = 'three_steps'
+
+ po_form = Form(self.env['purchase.order'])
+ po_form.partner_id = self.partner
+ with po_form.order_line.new() as line:
+ line.product_id = self.product
+ line.product_qty = 4
+ po = po_form.save()
+
+ # Checks the report -> Must be empty for now, just display some pending qty.
+ report_values, docs, lines = self.get_report_forecast(product_template_ids=self.product_template.ids)
+ draft_picking_qty_in = docs['draft_picking_qty']['in']
+ draft_purchase_qty = docs['draft_purchase_qty']
+ pending_qty_in = docs['qty']['in']
+ self.assertEqual(len(lines), 0, "Must have 0 line for now.")
+ self.assertEqual(draft_picking_qty_in, 0)
+ self.assertEqual(draft_purchase_qty, 4)
+ self.assertEqual(pending_qty_in, 4)
+
+ # Confirms the PO and checks the report again.
+ po.button_confirm()
+ report_values, docs, lines = self.get_report_forecast(product_template_ids=self.product_template.ids)
+ draft_picking_qty_in = docs['draft_picking_qty']['in']
+ draft_purchase_qty = docs['draft_purchase_qty']
+ pending_qty_in = docs['qty']['in']
+ self.assertEqual(len(lines), 1)
+ self.assertEqual(lines[0]['document_in'].id, po.id)
+ self.assertEqual(lines[0]['quantity'], 4)
+ self.assertEqual(lines[0]['document_out'], False)
+ self.assertEqual(draft_picking_qty_in, 0)
+ self.assertEqual(draft_purchase_qty, 0)
+ self.assertEqual(pending_qty_in, 0)
+ # Get back the different transfers.
+ receipt = po.picking_ids
+
+ # Receives 4 products.
+ res_dict = receipt.button_validate()
+ wizard = Form(self.env[res_dict['res_model']].with_context(res_dict['context'])).save()
+ wizard.process()
+ report_values, docs, lines = self.get_report_forecast(product_template_ids=self.product_template.ids)
+ draft_picking_qty_in = docs['draft_picking_qty']['in']
+ draft_purchase_qty = docs['draft_purchase_qty']
+ pending_qty_in = docs['qty']['in']
+ self.assertEqual(len(lines), 0)
+ self.assertEqual(draft_picking_qty_in, 0)
+ self.assertEqual(draft_purchase_qty, 0)
+ self.assertEqual(pending_qty_in, 0)
+
+ # Increase the PO quantity to 10, so must create a second receipt.
+ po_form = Form(po)
+ with po_form.order_line.edit(0) as line:
+ line.product_qty = 10
+ po = po_form.save()
+ # Checks the report.
+ report_values, docs, lines = self.get_report_forecast(product_template_ids=self.product_template.ids)
+ draft_picking_qty_in = docs['draft_picking_qty']['in']
+ draft_purchase_qty = docs['draft_purchase_qty']
+ pending_qty_in = docs['qty']['in']
+ self.assertEqual(len(lines), 1)
+ self.assertEqual(lines[0]['document_in'].id, po.id)
+ self.assertEqual(lines[0]['quantity'], 6)
+ self.assertEqual(draft_picking_qty_in, 0)
+ self.assertEqual(draft_purchase_qty, 0)
+ self.assertEqual(pending_qty_in, 0)