@@ -498,10 +498,34 @@ def update_reserved_qty(self):
498498 sales_order .update_reserved_qty (so_item_rows )
499499
500500 def set_incoming_rate (self ):
501+ def reset_incoming_rate ():
502+ old_item = next (
503+ (
504+ item
505+ for item in (old_doc .get ("items" ) + (old_doc .get ("packed_items" ) or []))
506+ if item .name == d .name
507+ ),
508+ None ,
509+ )
510+ if old_item :
511+ old_qty = flt (old_item .get ("stock_qty" ) or old_item .get ("actual_qty" ) or old_item .get ("qty" ))
512+ if (
513+ old_item .item_code != d .item_code
514+ or old_item .warehouse != d .warehouse
515+ or old_qty != qty
516+ or old_item .serial_no != d .serial_no
517+ or get_serial_nos (old_item .serial_and_batch_bundle )
518+ != get_serial_nos (d .serial_and_batch_bundle )
519+ or old_item .batch_no != d .batch_no
520+ or get_batch_nos (old_item .serial_and_batch_bundle )
521+ != get_batch_nos (d .serial_and_batch_bundle )
522+ ):
523+ d .incoming_rate = 0
524+
501525 if self .doctype not in ("Delivery Note" , "Sales Invoice" ):
502526 return
503527
504- from erpnext .stock .serial_batch_bundle import get_batch_nos
528+ from erpnext .stock .serial_batch_bundle import get_batch_nos , get_serial_nos
505529
506530 allow_at_arms_length_price = frappe .get_cached_value (
507531 "Stock Settings" , None , "allow_internal_transfer_at_arms_length_price"
@@ -510,6 +534,8 @@ def set_incoming_rate(self):
510534 "Selling Settings" , "set_zero_rate_for_expired_batch"
511535 )
512536
537+ is_standalone = self .is_return and not self .return_against
538+
513539 old_doc = self .get_doc_before_save ()
514540 items = self .get ("items" ) + (self .get ("packed_items" ) or [])
515541 for d in items :
@@ -541,27 +567,7 @@ def set_incoming_rate(self):
541567 qty = flt (d .get ("stock_qty" ) or d .get ("actual_qty" ) or d .get ("qty" ))
542568
543569 if old_doc :
544- old_item = next (
545- (
546- item
547- for item in (old_doc .get ("items" ) + (old_doc .get ("packed_items" ) or []))
548- if item .name == d .name
549- ),
550- None ,
551- )
552- if old_item :
553- old_qty = flt (
554- old_item .get ("stock_qty" ) or old_item .get ("actual_qty" ) or old_item .get ("qty" )
555- )
556- if (
557- old_item .item_code != d .item_code
558- or old_item .warehouse != d .warehouse
559- or old_qty != qty
560- or old_item .batch_no != d .batch_no
561- or get_batch_nos (old_item .serial_and_batch_bundle )
562- != get_batch_nos (d .serial_and_batch_bundle )
563- ):
564- d .incoming_rate = 0
570+ reset_incoming_rate ()
565571
566572 if (
567573 not d .incoming_rate
@@ -583,11 +589,12 @@ def set_incoming_rate(self):
583589 "voucher_type" : self .doctype ,
584590 "voucher_no" : self .name ,
585591 "voucher_detail_no" : d .name ,
586- "allow_zero_valuation" : d .get ("allow_zero_valuation " ),
592+ "allow_zero_valuation" : d .get ("allow_zero_valuation_rate " ),
587593 "batch_no" : d .batch_no ,
588594 "serial_no" : d .serial_no ,
589595 },
590- raise_error_if_no_rate = False ,
596+ raise_error_if_no_rate = is_standalone ,
597+ fallbacks = not is_standalone ,
591598 )
592599
593600 if (
0 commit comments