@@ -51,6 +51,49 @@ def test_customer_provided_item_cost_field(self):
5151 for item in rm_in .get ("items" ):
5252 self .assertEqual (item .customer_provided_item_cost , 15 )
5353
54+ def test_customer_provided_item_cost_with_multiple_receipts (self ):
55+ """
56+ Validate that rate is calculated correctly (Weighted Average) when multiple receipts
57+ occur for the same SCIO Received Item.
58+ """
59+ so , scio = create_so_scio ()
60+ rm_item = "Basic RM"
61+
62+ # Receipt 1: 5 Qty @ Unit Cost 10
63+ rm_in_1 = frappe .new_doc ("Stock Entry" ).update (scio .make_rm_stock_entry_inward ())
64+ rm_in_1 .items = [item for item in rm_in_1 .items if item .item_code == rm_item ]
65+ rm_in_1 .items [0 ].qty = 5
66+ rm_in_1 .items [0 ].basic_rate = 10
67+ rm_in_1 .items [0 ].transfer_qty = 5
68+ rm_in_1 .submit ()
69+
70+ scio .reload ()
71+ received_item = next (item for item in scio .received_items if item .rm_item_code == rm_item )
72+ self .assertEqual (received_item .rate , 10 )
73+
74+ # Receipt 2: 5 Qty @ Unit Cost 20
75+ rm_in_2 = frappe .new_doc ("Stock Entry" ).update (scio .make_rm_stock_entry_inward ())
76+ rm_in_2 .items = [item for item in rm_in_2 .items if item .item_code == rm_item ]
77+ rm_in_2 .items [0 ].qty = 5
78+ rm_in_2 .items [0 ].basic_rate = 20
79+ rm_in_2 .items [0 ].transfer_qty = 5
80+ rm_in_2 .save ()
81+ rm_in_2 .submit ()
82+
83+ # Check 2: Rate should be Weighted Average
84+ # (5 * 10 + 5 * 20) / 10 = 150 / 10 = 15
85+ scio .reload ()
86+ received_item = next (item for item in scio .received_items if item .rm_item_code == rm_item )
87+ self .assertEqual (received_item .rate , 15 )
88+
89+ # Cancel Receipt 2: Rate should revert to original
90+ # (15 * 10 - 20 * 5) / 5 = 50 / 5 = 10
91+ rm_in_2 .cancel ()
92+ scio .reload ()
93+ received_item = next (item for item in scio .received_items if item .rm_item_code == rm_item )
94+ self .assertEqual (received_item .received_qty , 5 )
95+ self .assertEqual (received_item .rate , 10 )
96+
5497 def test_add_extra_customer_provided_item (self ):
5598 so , scio = create_so_scio ()
5699
0 commit comments