mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-26 08:24:47 +00:00
fix: do not create a Purchase Receipt for returned items (Debit Note)
This commit is contained in:
@@ -2097,10 +2097,26 @@ def make_purchase_receipt(source_name, target_doc=None, args=None):
|
|||||||
if isinstance(args, str):
|
if isinstance(args, str):
|
||||||
args = json.loads(args)
|
args = json.loads(args)
|
||||||
|
|
||||||
|
def post_parent_process(source_parent, target_parent):
|
||||||
|
for row in target_parent.get("items"):
|
||||||
|
if row.get("qty") == 0:
|
||||||
|
target_parent.remove(row)
|
||||||
|
|
||||||
def update_item(obj, target, source_parent):
|
def update_item(obj, target, source_parent):
|
||||||
target.qty = flt(obj.qty) - flt(obj.received_qty)
|
from erpnext.controllers.sales_and_purchase_return import get_returned_qty_map_for_row
|
||||||
|
|
||||||
|
returned_qty_map = (
|
||||||
|
get_returned_qty_map_for_row(
|
||||||
|
source_parent.name, source_parent.supplier, obj.name, "Purchase Invoice"
|
||||||
|
)
|
||||||
|
or {}
|
||||||
|
)
|
||||||
|
|
||||||
|
target.qty = flt(obj.qty) - flt(obj.received_qty) - flt(returned_qty_map.get("qty"))
|
||||||
target.received_qty = flt(obj.qty) - flt(obj.received_qty)
|
target.received_qty = flt(obj.qty) - flt(obj.received_qty)
|
||||||
target.stock_qty = (flt(obj.qty) - flt(obj.received_qty)) * flt(obj.conversion_factor)
|
target.stock_qty = (flt(obj.qty) - flt(obj.received_qty) - flt(returned_qty_map.get("qty"))) * flt(
|
||||||
|
obj.conversion_factor
|
||||||
|
)
|
||||||
target.amount = (flt(obj.qty) - flt(obj.received_qty)) * flt(obj.rate)
|
target.amount = (flt(obj.qty) - flt(obj.received_qty)) * flt(obj.rate)
|
||||||
target.base_amount = (
|
target.base_amount = (
|
||||||
(flt(obj.qty) - flt(obj.received_qty)) * flt(obj.rate) * flt(source_parent.conversion_rate)
|
(flt(obj.qty) - flt(obj.received_qty)) * flt(obj.rate) * flt(source_parent.conversion_rate)
|
||||||
@@ -2139,6 +2155,7 @@ def make_purchase_receipt(source_name, target_doc=None, args=None):
|
|||||||
"Purchase Taxes and Charges": {"doctype": "Purchase Taxes and Charges"},
|
"Purchase Taxes and Charges": {"doctype": "Purchase Taxes and Charges"},
|
||||||
},
|
},
|
||||||
target_doc,
|
target_doc,
|
||||||
|
post_parent_process,
|
||||||
)
|
)
|
||||||
|
|
||||||
return doc
|
return doc
|
||||||
|
|||||||
@@ -2931,6 +2931,29 @@ class TestPurchaseInvoice(IntegrationTestCase, StockTestMixin):
|
|||||||
pi.save()
|
pi.save()
|
||||||
self.assertEqual(pi.discount_amount, discount_amount)
|
self.assertEqual(pi.discount_amount, discount_amount)
|
||||||
|
|
||||||
|
def test_returned_item_purchase_receipt(self):
|
||||||
|
from erpnext.accounts.doctype.purchase_invoice.purchase_invoice import (
|
||||||
|
make_purchase_receipt as make_purchase_receipt_from_pi,
|
||||||
|
)
|
||||||
|
|
||||||
|
item = create_item("_Test Returned Item Purchase Receipt", is_stock_item=1)
|
||||||
|
|
||||||
|
pi = make_purchase_invoice(item_code=item.name, qty=5, rate=100)
|
||||||
|
|
||||||
|
return_pi = make_purchase_invoice(
|
||||||
|
item_code=item.name,
|
||||||
|
is_return=1,
|
||||||
|
return_against=pi.name,
|
||||||
|
qty=-5,
|
||||||
|
do_not_submit=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
return_pi.items[0].purchase_invoice_item = pi.items[0].name
|
||||||
|
return_pi.submit()
|
||||||
|
|
||||||
|
pr = make_purchase_receipt_from_pi(pi.name)
|
||||||
|
self.assertFalse(pr.items)
|
||||||
|
|
||||||
|
|
||||||
def set_advance_flag(company, flag, default_account):
|
def set_advance_flag(company, flag, default_account):
|
||||||
frappe.db.set_value(
|
frappe.db.set_value(
|
||||||
|
|||||||
Reference in New Issue
Block a user