You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

84 lines
3.4 KiB

4 years ago
  1. # Copyright (C) 2019 - Today: GRAP (http://www.grap.coop)
  2. # @author: Robin Keunen <robin@coopiteasy.be>
  3. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
  4. from odoo.tests.common import Form, TransactionCase
  5. class TestCPO(TransactionCase):
  6. def setUp(self):
  7. super().setUp()
  8. self.supplier = self.browse_ref("base.res_partner_1")
  9. self.pproduct1 = self.browse_ref("product.product_product_25")
  10. self.ptemplate1 = self.pproduct1.product_tmpl_id
  11. self.pproduct2 = self.browse_ref("product.product_delivery_02")
  12. self.ptemplate2 = self.pproduct2.product_tmpl_id
  13. def test_generate_pog(self):
  14. supplierinfo_obj = self.env["product.supplierinfo"]
  15. supplierinfo = supplierinfo_obj.search(
  16. [
  17. ("name", "=", self.supplier.id),
  18. ("product_tmpl_id", "=", self.ptemplate1.id),
  19. ]
  20. )
  21. supplierinfo2 = supplierinfo_obj.search(
  22. [
  23. ("name", "=", self.supplier.id),
  24. ("product_tmpl_id", "=", self.ptemplate2.id),
  25. ]
  26. )
  27. pog_obj = self.env["purchase.order.generator"]
  28. pog_action = pog_obj.with_context(
  29. active_ids=[self.ptemplate1.id]
  30. ).test_generate_pog()
  31. pog = pog_obj.browse(pog_action["res_id"])
  32. pogl = pog.pog_line_ids # expect one line
  33. self.assertEquals(pog.supplier_id, self.supplier)
  34. self.assertEquals(pogl.product_template_id, self.ptemplate1)
  35. self.assertEquals(pogl.product_price, supplierinfo.price)
  36. self.assertEquals(pogl.purchase_quantity, supplierinfo.min_qty)
  37. # testing triggers
  38. expected_subtotal = supplierinfo.price * supplierinfo.min_qty
  39. self.assertEquals(pogl.subtotal, expected_subtotal)
  40. pogl.purchase_quantity = 4
  41. expected_subtotal = supplierinfo.price * 4
  42. self.assertEquals(pogl.subtotal, expected_subtotal)
  43. pog_form = Form(pog)
  44. with pog_form.pog_line_ids.edit(index=0) as line_form:
  45. line_form.product_template_id = self.ptemplate2
  46. self.assertEquals(line_form.product_template_id, self.ptemplate2)
  47. pog = pog_form.save()
  48. pogl = pog.pog_line_ids
  49. expected_subtotal = supplierinfo2.price * supplierinfo2.min_qty
  50. self.assertEquals(pogl.product_price, supplierinfo2.price)
  51. self.assertEquals(pogl.purchase_quantity, supplierinfo2.min_qty)
  52. self.assertEquals(pogl.subtotal, expected_subtotal)
  53. def test_generate_po(self):
  54. cpo_obj = self.env["purchase.order.generator"]
  55. cpo_action = cpo_obj.with_context(
  56. active_ids=[self.ptemplate1.id, self.ptemplate2.id]
  57. ).test_generate_pog()
  58. cpo = cpo_obj.browse(cpo_action["res_id"])
  59. po_action = cpo.create_purchase_order()
  60. po = self.env["purchase.order"].browse(po_action["res_id"])
  61. self.assertEquals(cpo.supplier_id, po.partner_id)
  62. self.assertEquals(len(cpo.pog_line_ids), len(po.order_line))
  63. lines = zip(
  64. cpo.pog_line_ids.sorted(lambda l: l.product_template_id),
  65. po.order_line.sorted(lambda l: l.product_id.product_tmpl_id),
  66. )
  67. for cpol, pol in lines:
  68. self.assertEquals(
  69. cpol.product_template_id, pol.product_id.product_tmpl_id
  70. )
  71. self.assertEquals(cpol.purchase_quantity, pol.product_qty)