diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py index fa566f62ef0c..7645266ebb52 100644 --- a/erpnext/controllers/buying_controller.py +++ b/erpnext/controllers/buying_controller.py @@ -30,6 +30,8 @@ def get_feed(self): return _("From {0} | {1} {2}").format(self.supplier_name, self.currency, self.grand_total) def validate(self): + self.set_rate_for_standalone_debit_note() + super(BuyingController, self).validate() if getattr(self, "supplier", None) and not self.supplier_name: self.supplier_name = frappe.db.get_value("Supplier", self.supplier, "supplier_name") @@ -72,6 +74,61 @@ def onload(self): ), ) +<<<<<<< HEAD +======= + def create_package_for_transfer(self) -> None: + """Create serial and batch package for Sourece Warehouse in case of inter transfer.""" + + if self.is_internal_transfer() and ( + self.doctype == "Purchase Receipt" or (self.doctype == "Purchase Invoice" and self.update_stock) + ): + field = "delivery_note_item" if self.doctype == "Purchase Receipt" else "sales_invoice_item" + + doctype = "Delivery Note Item" if self.doctype == "Purchase Receipt" else "Sales Invoice Item" + + ids = [d.get(field) for d in self.get("items") if d.get(field)] + bundle_ids = {} + if ids: + for bundle in frappe.get_all( + doctype, filters={"name": ("in", ids)}, fields=["serial_and_batch_bundle", "name"] + ): + bundle_ids[bundle.name] = bundle.serial_and_batch_bundle + + if not bundle_ids: + return + + for item in self.get("items"): + if item.get(field) and not item.serial_and_batch_bundle and bundle_ids.get(item.get(field)): + item.serial_and_batch_bundle = self.make_package_for_transfer( + bundle_ids.get(item.get(field)), + item.from_warehouse, + type_of_transaction="Outward", + do_not_submit=True, + ) + + def set_rate_for_standalone_debit_note(self): + if self.get("is_return") and self.get("update_stock") and not self.return_against: + for row in self.items: + row.rate = get_incoming_rate( + { + "item_code": row.item_code, + "warehouse": row.warehouse, + "posting_date": self.get("posting_date"), + "posting_time": self.get("posting_time"), + "qty": row.qty, + "serial_and_batch_bundle": row.get("serial_and_batch_bundle"), + "company": self.company, + "voucher_type": self.doctype, + "voucher_no": self.name, + }, + raise_error_if_no_rate=False, + ) + + row.discount_percentage = 0.0 + row.discount_amount = 0.0 + row.margin_rate_or_amount = 0.0 + +>>>>>>> 6e198188ff (fix: incorrect gl entries for standalone debit note with update stock) def set_missing_values(self, for_validate=False): super(BuyingController, self).set_missing_values(for_validate)