fix: refactor and test

This commit is contained in:
Afshan
2020-11-05 11:59:45 +05:30
parent 17a8874c50
commit 7e6c79819a
3 changed files with 49 additions and 25 deletions

View File

@@ -365,39 +365,29 @@ class SellingController(StockController):
self.make_sl_entries(sl_entries)
def set_po_nos(self):
self.po_no = ''
if self.doctype == 'Sales Invoice' and hasattr(self, "items"):
self.set_pos_for_sales_invoice()
if self.doctype == 'Delivery Note' and hasattr(self, "items"):
self.set_pos_for_delivery_note()
def set_pos_for_sales_invoice(self):
ref_fieldname1 = "sales_order"
ref_fieldname2 = "delivery_note"
sales_orders = list(set([d.get(ref_fieldname1) for d in self.items if d.get(ref_fieldname1)]))
if sales_orders:
so_po_nos = frappe.get_all('Sales Order', 'po_no', filters = {'name': ('in', sales_orders)})
if so_po_nos and so_po_nos[0].get('po_no'):
self.po_no += ', '.join(list(set([d.po_no for d in so_po_nos if d.po_no])))
delivery_notes = list(set([d.get(ref_fieldname2) for d in self.items if d.get(ref_fieldname2)]))
if delivery_notes:
dn_po_nos = frappe.get_all('Delivery Note', 'po_no', filters = {'name': ('in', delivery_notes)})
if dn_po_nos and dn_po_nos[0].get('po_no'):
self.po_no += ', '.join(list(set([d.po_no for d in dn_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(po_nos)))
def set_pos_for_delivery_note(self):
ref_fieldname1 = "against_sales_order"
ref_fieldname2 = "against_sales_invoice"
sales_orders = list(set([d.get(ref_fieldname1) for d in self.items if d.get(ref_fieldname1)]))
sales_invoices = list(set([d.get(ref_fieldname2) for d in self.items if d.get(ref_fieldname2)]))
if sales_orders:
so_po_nos = frappe.get_all('Sales Order', 'po_no', filters = {'name': ('in', sales_orders)})
if so_po_nos and so_po_nos[0].get('po_no'):
self.po_no += ', '.join(list(set([d.po_no for d in so_po_nos if d.po_no])))
if sales_invoices:
si_po_nos = frappe.get_all('Sales Invoice', 'po_no', filters = {'name': ('in', sales_invoices)})
if si_po_nos and si_po_nos[0].get('po_no'):
self.po_no += ', '.join(list(set([d.po_no for d in si_po_nos if d.po_no])))
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(po_nos)))
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_no_list = frappe.get_all(ref_doctype, 'po_no', filters = {'name': ('in', doc_list)})
if po_no_list and po_no_list[0].get('po_no'):
po_nos += [d.po_no for d in po_no_list if d.po_no]
def set_gross_profit(self):
if self.doctype == "Sales Order":

View File

@@ -1050,6 +1050,7 @@ def make_sales_order(**args):
so.company = args.company or "_Test Company"
so.customer = args.customer or "_Test Customer"
so.currency = args.currency or "INR"
so.po_no = args.po_no or '12345'
if args.selling_price_list:
so.selling_price_list = args.selling_price_list

View File

@@ -442,9 +442,15 @@ class TestDeliveryNote(unittest.TestCase):
self.assertEqual(dn.status, "To Bill")
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.submit()
# Testing if Customer's Purchase Order No was rightly copied
self.assertEqual(dn.po_no, si.po_no)
dn.load_from_db()
self.assertEqual(dn.get("items")[0].billed_amt, 200)
self.assertEqual(dn.per_billed, 100)
@@ -461,6 +467,9 @@ class TestDeliveryNote(unittest.TestCase):
si.insert()
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)
dn1 = make_delivery_note(so.name)
@@ -469,6 +478,9 @@ class TestDeliveryNote(unittest.TestCase):
dn1.get("items")[0].qty = 2
dn1.submit()
# Testing if Customer's Purchase Order No was rightly copied
self.assertEqual(so.po_no, dn1.po_no)
self.assertEqual(dn1.get("items")[0].billed_amt, 200)
self.assertEqual(dn1.per_billed, 100)
self.assertEqual(dn1.status, "Completed")
@@ -479,6 +491,9 @@ class TestDeliveryNote(unittest.TestCase):
dn2.get("items")[0].qty = 4
dn2.submit()
# Testing if Customer's Purchase Order No was rightly copied
self.assertEqual(so.po_no, dn2.po_no)
dn1.load_from_db()
self.assertEqual(dn1.get("items")[0].billed_amt, 100)
self.assertEqual(dn1.per_billed, 50)
@@ -502,9 +517,15 @@ class TestDeliveryNote(unittest.TestCase):
dn1.get("items")[0].qty = 2
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.submit()
# Testing if Customer's Purchase Order No was rightly copied
self.assertEqual(dn1.po_no, si1.po_no)
dn1.load_from_db()
self.assertEqual(dn1.per_billed, 100)
@@ -512,11 +533,17 @@ class TestDeliveryNote(unittest.TestCase):
si2.get("items")[0].qty = 4
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.posting_time = "08:00"
dn2.get("items")[0].qty = 5
dn2.submit()
# Testing if Customer's Purchase Order No was rightly copied
self.assertEqual(dn2.po_no, so.po_no)
dn1.load_from_db()
self.assertEqual(dn1.get("items")[0].billed_amt, 200)
self.assertEqual(dn1.per_billed, 100)
@@ -536,9 +563,15 @@ class TestDeliveryNote(unittest.TestCase):
si = make_sales_invoice(so.name)
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.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.per_billed, 100)
self.assertEqual(dn.status, "Completed")