From cc8f1afa568514247669f54f0ef8cf483348c971 Mon Sep 17 00:00:00 2001 From: Saurabh Date: Mon, 26 Oct 2015 19:12:05 +0530 Subject: [PATCH] [fixes] test case fixes for drop shipping --- .../purchase_order/purchase_order.json | 8 ++-- .../doctype/purchase_order/purchase_order.py | 3 +- .../doctype/sales_order/sales_order.js | 9 +++-- .../doctype/sales_order/test_sales_order.py | 38 +++++++++++++------ erpnext/stock/stock_balance.py | 2 +- 5 files changed, 38 insertions(+), 22 deletions(-) diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.json b/erpnext/buying/doctype/purchase_order/purchase_order.json index 318813c6d3f..a866e81a995 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.json +++ b/erpnext/buying/doctype/purchase_order/purchase_order.json @@ -465,17 +465,17 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, - "fieldname": "is_drop_ship", + "fieldname": "delivered_by_supplier", "fieldtype": "Check", "hidden": 0, "ignore_user_permissions": 0, "in_filter": 0, "in_list_view": 0, - "label": "Is Drop Ship", + "label": "Delivered By Supplier", "no_copy": 0, "permlevel": 0, "precision": "", - "print_hide": 1, + "print_hide": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -2238,7 +2238,7 @@ "is_submittable": 1, "issingle": 0, "istable": 0, - "modified": "2015-10-22 19:03:10.932738", + "modified": "2015-10-26 09:09:06.796558", "modified_by": "Administrator", "module": "Buying", "name": "Purchase Order", diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py index 45444b98a17..3fe833f36e0 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/purchase_order.py @@ -224,7 +224,8 @@ class PurchaseOrder(BuyingController): self.status_updater[0].update({ "target_parent_dt": "Sales Order", "target_dt": "Sales Order Item", - 'target_field': 'ordered_qty' + 'target_field': 'ordered_qty', + "target_parent_field": '' }) @frappe.whitelist() diff --git a/erpnext/selling/doctype/sales_order/sales_order.js b/erpnext/selling/doctype/sales_order/sales_order.js index 2951d288a7e..af300f662fc 100644 --- a/erpnext/selling/doctype/sales_order/sales_order.js +++ b/erpnext/selling/doctype/sales_order/sales_order.js @@ -22,11 +22,12 @@ erpnext.selling.SalesOrderController = erpnext.selling.SellingController.extend( if(doc.status != 'Stopped' && doc.status != 'Closed') { $.each(cur_frm.doc.items, function(i, item){ - if(item.is_delivered_by_supplier == 1 || item.supplier){ + if((item.delivered_by_supplier == 1 || item.supplier) && (item.qty > item.ordered_qty)){ is_delivered_by_supplier = true; } else{ - is_delivery_note = true; + if(item.qty > item.delivered_qty) + is_delivery_note = true; } }) @@ -177,11 +178,11 @@ erpnext.selling.SalesOrderController = erpnext.selling.SellingController.extend( filters: {'parent': cur_frm.doc.name} } }, "reqd": 1 }, - {"fieldtype": "Button", "label": __("Proceed"), "fieldname": "proceed"}, + {"fieldtype": "Button", "label": __("Make Purchase Order"), "fieldname": "make_purchase_order"}, ] }); - dialog.fields_dict.proceed.$input.click(function() { + dialog.fields_dict.make_purchase_order.$input.click(function() { args = dialog.get_values(); if(!args) return; dialog.hide(); diff --git a/erpnext/selling/doctype/sales_order/test_sales_order.py b/erpnext/selling/doctype/sales_order/test_sales_order.py index 667f21b617b..3ef1a25bc50 100644 --- a/erpnext/selling/doctype/sales_order/test_sales_order.py +++ b/erpnext/selling/doctype/sales_order/test_sales_order.py @@ -302,10 +302,14 @@ class TestSalesOrder(unittest.TestCase): from erpnext.buying.doctype.purchase_order.purchase_order import delivered_by_supplier po_item = make_item("_Test Item for Drop Shipping", {"is_stock_item": 1, "is_sales_item": 1, - "is_purchase_item": 1, "delivered_by_supplier": 1, 'default_supplier': '_Test Supplier'}) + "is_purchase_item": 1, "delivered_by_supplier": 1, 'default_supplier': '_Test Supplier', + "expense_account": "_Test Account Cost for Goods Sold - _TC", + "cost_center": "_Test Cost Center - _TC" + }) dn_item = make_item("_Test Regular Item", {"is_stock_item": 1, "is_sales_item": 1, - "is_purchase_item": 1}) + "is_purchase_item": 1, "expense_account": "_Test Account Cost for Goods Sold - _TC", + "cost_center": "_Test Cost Center - _TC"}) so_items = [ { @@ -326,8 +330,8 @@ class TestSalesOrder(unittest.TestCase): } ] - existing_ordered_qty, existing_reserved_qty = frappe.db.get_value("Bin", - {"item_code": po_item.item_code, "warehouse": "_Test Warehouse - _TC"}, ["ordered_qty", "reserved_qty"]) + bin = frappe.get_all("Bin", filters={"item_code": po_item.item_code, "warehouse": "_Test Warehouse - _TC"}, + fields=["ordered_qty", "reserved_qty"]) so = make_sales_order(item_list=so_items, do_not_submit=True) so.submit() @@ -335,7 +339,7 @@ class TestSalesOrder(unittest.TestCase): po = make_purchase_order_for_drop_shipment(so.name, '_Test Supplier') po.submit() - dn = create_dn_against_so(so, delivered_qty=1) + dn = create_dn_against_so(so.name, delivered_qty=1) self.assertEquals(so.customer, po.customer) self.assertEquals(po.items[0].prevdoc_doctype, "Sales Order") @@ -344,19 +348,29 @@ class TestSalesOrder(unittest.TestCase): self.assertEquals(dn.items[0].item_code, dn_item.item_code) #test ordered_qty and reserved_qty - ordered_qty, reserved_qty = frappe.db.get_value("Bin", - {"item_code": po_item.item_code, "warehouse": "_Test Warehouse - _TC"}, ["ordered_qty", "reserved_qty"]) + ordered_qty, reserved_qty = frappe.db.get_value("Bin", + {"item_code": po_item.item_code, "warehouse": "_Test Warehouse - _TC"}, ["ordered_qty", "reserved_qty"]) + + existing_ordered_qty = bin[0].ordered_qty if bin else 0.0 + existing_reserved_qty = bin[0].reserved_qty if bin else 0.0 - self.assertEquals(abs(ordered_qty), (existing_ordered_qty + so_items[0]['qty'])) - self.assertEquals(abs(reserved_qty), (existing_reserved_qty + so_items[0]['qty'])) + self.assertEquals(abs(ordered_qty), existing_ordered_qty + so_items[0]['qty']) + self.assertEquals(abs(reserved_qty), existing_reserved_qty + so_items[0]['qty']) #test po_item length self.assertEquals(len(po.items), 1) - #test per_ordered status + #test per_delivered status delivered_by_supplier(po.name) - per_delivered = frappe.db.get_value("Sales Order", so.name, "per_delivered") - self.assertEquals(per_delivered, ) + per_delivered = frappe.db.sql("""select sum(if(qty > ifnull(delivered_qty, 0), delivered_qty, qty))/sum(qty)*100 as per_delivered + from `tabSales Order Item` where parent="{0}" """.format(so.name)) + + self.assertEquals(frappe.db.get_value("Sales Order", so.name, "per_delivered"), per_delivered[0][0]) + + dn = create_dn_against_so(so.name, delivered_qty=1) + + so.db_set('status', "Closed") + so.update_reserved_qty() def test_reserved_qty_for_closing_so(self): from erpnext.stock.doctype.item.test_item import make_item diff --git a/erpnext/stock/stock_balance.py b/erpnext/stock/stock_balance.py index b1e8b220633..609c986c446 100644 --- a/erpnext/stock/stock_balance.py +++ b/erpnext/stock/stock_balance.py @@ -122,7 +122,7 @@ def get_ordered_qty(item_code, warehouse): from `tabPurchase Order Item` po_item, `tabPurchase Order` po where po_item.item_code=%s and po_item.warehouse=%s and po_item.qty > ifnull(po_item.received_qty, 0) and po_item.parent=po.name - and po.status not in ('Stopped', 'Closed') and po.docstatus=1""", (item_code, warehouse)) + and po.status not in ('Stopped', 'Closed', 'Delivered') and po.docstatus=1""", (item_code, warehouse)) return flt(ordered_qty[0][0]) if ordered_qty else 0