mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-19 13:09:17 +00:00
Merge pull request #23729 from AfshanKhan/fix-po-no-fetching
fix: copying po no when mapping doc
This commit is contained in:
@@ -1401,6 +1401,7 @@ def make_delivery_note(source_name, target_doc=None):
|
|||||||
def set_missing_values(source, target):
|
def set_missing_values(source, target):
|
||||||
target.ignore_pricing_rule = 1
|
target.ignore_pricing_rule = 1
|
||||||
target.run_method("set_missing_values")
|
target.run_method("set_missing_values")
|
||||||
|
target.run_method("set_po_nos")
|
||||||
target.run_method("calculate_taxes_and_totals")
|
target.run_method("calculate_taxes_and_totals")
|
||||||
|
|
||||||
def update_item(source_doc, target_doc, source_parent):
|
def update_item(source_doc, target_doc, source_parent):
|
||||||
|
|||||||
@@ -371,13 +371,27 @@ class SellingController(StockController):
|
|||||||
self.make_sl_entries(sl_entries)
|
self.make_sl_entries(sl_entries)
|
||||||
|
|
||||||
def set_po_nos(self):
|
def set_po_nos(self):
|
||||||
if self.doctype in ("Delivery Note", "Sales Invoice") and hasattr(self, "items"):
|
if self.doctype == 'Sales Invoice' and hasattr(self, "items"):
|
||||||
ref_fieldname = "against_sales_order" if self.doctype == "Delivery Note" else "sales_order"
|
self.set_pos_for_sales_invoice()
|
||||||
sales_orders = list(set([d.get(ref_fieldname) for d in self.items if d.get(ref_fieldname)]))
|
if self.doctype == 'Delivery Note' and hasattr(self, "items"):
|
||||||
if sales_orders:
|
self.set_pos_for_delivery_note()
|
||||||
po_nos = frappe.get_all('Sales Order', 'po_no', filters = {'name': ('in', sales_orders)})
|
|
||||||
if po_nos and po_nos[0].get('po_no'):
|
def set_pos_for_sales_invoice(self):
|
||||||
self.po_no = ', '.join(list(set([d.po_no for d in po_nos if d.po_no])))
|
po_nos = []
|
||||||
|
self.get_po_nos('Sales Order', 'sales_order', po_nos)
|
||||||
|
self.get_po_nos('Delivery Note', 'delivery_note', po_nos)
|
||||||
|
self.po_no = ', '.join(list(set(x.strip() for x in ','.join(po_nos).split(','))))
|
||||||
|
|
||||||
|
def set_pos_for_delivery_note(self):
|
||||||
|
po_nos = []
|
||||||
|
self.get_po_nos('Sales Order', 'against_sales_order', po_nos)
|
||||||
|
self.get_po_nos('Sales Invoice', 'against_sales_invoice', po_nos)
|
||||||
|
self.po_no = ', '.join(list(set(x.strip() for x in ','.join(po_nos).split(','))))
|
||||||
|
|
||||||
|
def get_po_nos(self, ref_doctype, ref_fieldname, po_nos):
|
||||||
|
doc_list = list(set([d.get(ref_fieldname) for d in self.items if d.get(ref_fieldname)]))
|
||||||
|
if doc_list:
|
||||||
|
po_nos += [d.po_no for d in frappe.get_all(ref_doctype, 'po_no', filters = {'name': ('in', doc_list)}) if d.get('po_no')]
|
||||||
|
|
||||||
def set_gross_profit(self):
|
def set_gross_profit(self):
|
||||||
if self.doctype in ["Sales Order", "Quotation"]:
|
if self.doctype in ["Sales Order", "Quotation"]:
|
||||||
|
|||||||
@@ -1064,6 +1064,7 @@ def make_sales_order(**args):
|
|||||||
so.company = args.company or "_Test Company"
|
so.company = args.company or "_Test Company"
|
||||||
so.customer = args.customer or "_Test Customer"
|
so.customer = args.customer or "_Test Customer"
|
||||||
so.currency = args.currency or "INR"
|
so.currency = args.currency or "INR"
|
||||||
|
so.po_no = args.po_no or '12345'
|
||||||
if args.selling_price_list:
|
if args.selling_price_list:
|
||||||
so.selling_price_list = args.selling_price_list
|
so.selling_price_list = args.selling_price_list
|
||||||
|
|
||||||
|
|||||||
@@ -442,9 +442,15 @@ class TestDeliveryNote(unittest.TestCase):
|
|||||||
self.assertEqual(dn.status, "To Bill")
|
self.assertEqual(dn.status, "To Bill")
|
||||||
self.assertEqual(dn.per_billed, 0)
|
self.assertEqual(dn.per_billed, 0)
|
||||||
|
|
||||||
|
# Testing if Customer's Purchase Order No was rightly copied
|
||||||
|
self.assertEqual(dn.po_no, so.po_no)
|
||||||
|
|
||||||
si = make_sales_invoice(dn.name)
|
si = make_sales_invoice(dn.name)
|
||||||
si.submit()
|
si.submit()
|
||||||
|
|
||||||
|
# Testing if Customer's Purchase Order No was rightly copied
|
||||||
|
self.assertEqual(dn.po_no, si.po_no)
|
||||||
|
|
||||||
dn.load_from_db()
|
dn.load_from_db()
|
||||||
self.assertEqual(dn.get("items")[0].billed_amt, 200)
|
self.assertEqual(dn.get("items")[0].billed_amt, 200)
|
||||||
self.assertEqual(dn.per_billed, 100)
|
self.assertEqual(dn.per_billed, 100)
|
||||||
@@ -461,16 +467,25 @@ class TestDeliveryNote(unittest.TestCase):
|
|||||||
si.insert()
|
si.insert()
|
||||||
si.submit()
|
si.submit()
|
||||||
|
|
||||||
|
# Testing if Customer's Purchase Order No was rightly copied
|
||||||
|
self.assertEqual(so.po_no, si.po_no)
|
||||||
|
|
||||||
frappe.db.set_value("Stock Settings", None, "allow_negative_stock", 1)
|
frappe.db.set_value("Stock Settings", None, "allow_negative_stock", 1)
|
||||||
|
|
||||||
dn1 = make_delivery_note(so.name)
|
dn1 = make_delivery_note(so.name)
|
||||||
dn1.get("items")[0].qty = 2
|
dn1.get("items")[0].qty = 2
|
||||||
dn1.submit()
|
dn1.submit()
|
||||||
|
|
||||||
|
# Testing if Customer's Purchase Order No was rightly copied
|
||||||
|
self.assertEqual(so.po_no, dn1.po_no)
|
||||||
|
|
||||||
dn2 = make_delivery_note(so.name)
|
dn2 = make_delivery_note(so.name)
|
||||||
dn2.get("items")[0].qty = 3
|
dn2.get("items")[0].qty = 3
|
||||||
dn2.submit()
|
dn2.submit()
|
||||||
|
|
||||||
|
# Testing if Customer's Purchase Order No was rightly copied
|
||||||
|
self.assertEqual(so.po_no, dn2.po_no)
|
||||||
|
|
||||||
dn1.load_from_db()
|
dn1.load_from_db()
|
||||||
self.assertEqual(dn1.get("items")[0].billed_amt, 200)
|
self.assertEqual(dn1.get("items")[0].billed_amt, 200)
|
||||||
self.assertEqual(dn1.per_billed, 100)
|
self.assertEqual(dn1.per_billed, 100)
|
||||||
@@ -492,9 +507,15 @@ class TestDeliveryNote(unittest.TestCase):
|
|||||||
dn1.get("items")[0].qty = 2
|
dn1.get("items")[0].qty = 2
|
||||||
dn1.submit()
|
dn1.submit()
|
||||||
|
|
||||||
|
# Testing if Customer's Purchase Order No was rightly copied
|
||||||
|
self.assertEqual(dn1.po_no, so.po_no)
|
||||||
|
|
||||||
si1 = make_sales_invoice(dn1.name)
|
si1 = make_sales_invoice(dn1.name)
|
||||||
si1.submit()
|
si1.submit()
|
||||||
|
|
||||||
|
# Testing if Customer's Purchase Order No was rightly copied
|
||||||
|
self.assertEqual(dn1.po_no, si1.po_no)
|
||||||
|
|
||||||
dn1.load_from_db()
|
dn1.load_from_db()
|
||||||
self.assertEqual(dn1.per_billed, 100)
|
self.assertEqual(dn1.per_billed, 100)
|
||||||
|
|
||||||
@@ -502,10 +523,16 @@ class TestDeliveryNote(unittest.TestCase):
|
|||||||
si2.get("items")[0].qty = 4
|
si2.get("items")[0].qty = 4
|
||||||
si2.submit()
|
si2.submit()
|
||||||
|
|
||||||
|
# Testing if Customer's Purchase Order No was rightly copied
|
||||||
|
self.assertEqual(si2.po_no, so.po_no)
|
||||||
|
|
||||||
dn2 = make_delivery_note(so.name)
|
dn2 = make_delivery_note(so.name)
|
||||||
dn2.get("items")[0].qty = 5
|
dn2.get("items")[0].qty = 5
|
||||||
dn2.submit()
|
dn2.submit()
|
||||||
|
|
||||||
|
# Testing if Customer's Purchase Order No was rightly copied
|
||||||
|
self.assertEqual(dn2.po_no, so.po_no)
|
||||||
|
|
||||||
dn1.load_from_db()
|
dn1.load_from_db()
|
||||||
self.assertEqual(dn1.get("items")[0].billed_amt, 200)
|
self.assertEqual(dn1.get("items")[0].billed_amt, 200)
|
||||||
self.assertEqual(dn1.per_billed, 100)
|
self.assertEqual(dn1.per_billed, 100)
|
||||||
@@ -525,9 +552,15 @@ class TestDeliveryNote(unittest.TestCase):
|
|||||||
si = make_sales_invoice(so.name)
|
si = make_sales_invoice(so.name)
|
||||||
si.submit()
|
si.submit()
|
||||||
|
|
||||||
|
# Testing if Customer's Purchase Order No was rightly copied
|
||||||
|
self.assertEqual(so.po_no, si.po_no)
|
||||||
|
|
||||||
dn = make_delivery_note(si.name)
|
dn = make_delivery_note(si.name)
|
||||||
dn.submit()
|
dn.submit()
|
||||||
|
|
||||||
|
# Testing if Customer's Purchase Order No was rightly copied
|
||||||
|
self.assertEqual(dn.po_no, si.po_no)
|
||||||
|
|
||||||
self.assertEqual(dn.get("items")[0].billed_amt, 1000)
|
self.assertEqual(dn.get("items")[0].billed_amt, 1000)
|
||||||
self.assertEqual(dn.per_billed, 100)
|
self.assertEqual(dn.per_billed, 100)
|
||||||
self.assertEqual(dn.status, "Completed")
|
self.assertEqual(dn.status, "Completed")
|
||||||
|
|||||||
Reference in New Issue
Block a user