Skip to content

Commit

Permalink
fix: purchase return without item code not working (#39014)
Browse files Browse the repository at this point in the history
(cherry picked from commit f983e09)
  • Loading branch information
rohitwaghchaure authored and mergify[bot] committed Dec 29, 2023
1 parent 2e91934 commit 428f894
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 8 deletions.
21 changes: 21 additions & 0 deletions erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
Original file line number Diff line number Diff line change
Expand Up @@ -1985,6 +1985,26 @@ def test_default_cost_center_for_purchase(self):

self.assertEqual(pi.items[0].cost_center, "_Test Cost Center Buying - _TC")

def test_debit_note_without_item(self):
pi = make_purchase_invoice(item_name="_Test Item", qty=10, do_not_submit=True)
pi.items[0].item_code = ""
pi.save()

self.assertFalse(pi.items[0].item_code)
pi.submit()

return_pi = make_purchase_invoice(
item_name="_Test Item",
is_return=1,
return_against=pi.name,
qty=-10,
do_not_save=True,
)
return_pi.items[0].item_code = ""
return_pi.save()
return_pi.submit()
self.assertEqual(return_pi.docstatus, 1)


def set_advance_flag(company, flag, default_account):
frappe.db.set_value(
Expand Down Expand Up @@ -2121,6 +2141,7 @@ def make_purchase_invoice(**args):
"items",
{
"item_code": args.item or args.item_code or "_Test Item",
"item_name": args.item_name,
"warehouse": args.warehouse or "_Test Warehouse - _TC",
"qty": args.qty or 5,
"received_qty": args.received_qty or 0,
Expand Down
17 changes: 9 additions & 8 deletions erpnext/controllers/sales_and_purchase_return.py
Original file line number Diff line number Diff line change
Expand Up @@ -562,16 +562,17 @@ def update_item(source_doc, target_doc, source_parent):
if default_warehouse_for_sales_return:
target_doc.warehouse = default_warehouse_for_sales_return

item_details = frappe.get_cached_value(
"Item", source_doc.item_code, ["has_batch_no", "has_serial_no"], as_dict=1
)
if source_doc.item_code:
item_details = frappe.get_cached_value(
"Item", source_doc.item_code, ["has_batch_no", "has_serial_no"], as_dict=1
)

if not item_details.has_batch_no and not item_details.has_serial_no:
return
if not item_details.has_batch_no and not item_details.has_serial_no:
return

for qty_field in ["stock_qty", "rejected_qty"]:
if target_doc.get(qty_field):
update_serial_batch_no(source_doc, target_doc, source_parent, item_details, qty_field)
for qty_field in ["stock_qty", "rejected_qty"]:
if target_doc.get(qty_field):
update_serial_batch_no(source_doc, target_doc, source_parent, item_details, qty_field)

def update_terms(source_doc, target_doc, source_parent):
target_doc.payment_amount = -source_doc.payment_amount
Expand Down

0 comments on commit 428f894

Please sign in to comment.