[Fixes] Drop Shipping
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
index 95e5a1c..d89a39e 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
@@ -50,6 +50,13 @@
 		if(doc.update_stock) this.show_stock_ledger();
 
 		if(doc.docstatus==1 && !doc.is_return) {
+			
+			var flag_delivery_note = false;
+			
+			flag_delivery_note = cur_frm.doc.items.some(function(item){
+				return item.is_drop_ship ? true : false;
+			})
+			
 			cur_frm.add_custom_button(doc.update_stock ? __('Sales Return') : __('Credit Note'),
 				this.make_sales_return);
 
@@ -61,7 +68,7 @@
 						return item.delivery_note ? true : false;
 					});
 
-				if(!from_delivery_note) {
+				if(!from_delivery_note && flag_delivery_note) {
 					cur_frm.add_custom_button(__('Delivery'), cur_frm.cscript['Make Delivery Note']).addClass("btn-primary");
 				}
 			}
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index a0b0c4e..dee2b7b 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -667,7 +667,8 @@
 				"sales_order": "against_sales_order",
 				"so_detail": "so_detail"
 			},
-			"postprocess": update_item
+			"postprocess": update_item,
+			"condition": lambda doc: doc.is_drop_ship!=1
 		},
 		"Sales Taxes and Charges": {
 			"doctype": "Sales Taxes and Charges",
diff --git a/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json b/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json
index 32b2ccd..c8a65f5 100644
--- a/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json
+++ b/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json
@@ -683,6 +683,94 @@
   {
    "allow_on_submit": 0, 
    "bold": 0, 
+   "collapsible": 0, 
+   "fieldname": "drop_ship", 
+   "fieldtype": "Section Break", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Drop Ship", 
+   "no_copy": 0, 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "read_only": 0, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "fieldname": "is_drop_ship", 
+   "fieldtype": "Check", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Is Drop Ship Item", 
+   "no_copy": 0, 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "read_only": 1, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "fieldname": "column_break_33", 
+   "fieldtype": "Column Break", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "no_copy": 0, 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "read_only": 0, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "fieldname": "supplier", 
+   "fieldtype": "Link", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Supplier", 
+   "no_copy": 0, 
+   "options": "Supplier", 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "read_only": 1, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_on_submit": 0, 
+   "bold": 0, 
    "collapsible": 1, 
    "fieldname": "accounting", 
    "fieldtype": "Section Break", 
diff --git a/erpnext/controllers/status_updater.py b/erpnext/controllers/status_updater.py
index 94cddee..f666eed 100644
--- a/erpnext/controllers/status_updater.py
+++ b/erpnext/controllers/status_updater.py
@@ -37,6 +37,7 @@
 		["Completed", "eval:self.order_type == 'Maintenance' and self.per_billed == 100 and self.docstatus == 1"],
 		["Stopped", "eval:self.status=='Stopped'"],
 		["Cancelled", "eval:self.docstatus==2"],
+		["Closed", "eval:self.status=='Closed'"],
 	],
 	"Purchase Order": [
 		["Draft", None],
@@ -210,6 +211,16 @@
 	def _update_percent_field(self, args):
 		"""Update percent field in parent transaction"""
 		unique_transactions = set([d.get(args['percent_join_field']) for d in self.get_all_children(args['source_dt'])])
+		
+		args["drop_ship_cond"] = ''
+		
+		if getattr(self, "drop_ship", None):
+			if self.drop_ship == 1:
+				args["drop_ship_cond"] = " and is_drop_ship=1 "
+			
+		else:
+			if self.doctype=="Delivery Note":
+				args["drop_ship_cond"] = " and is_drop_ship!=1 "
 
 		for name in unique_transactions:
 			if not name:
@@ -223,7 +234,7 @@
 					set %(target_parent_field)s = round((select sum(if(%(target_ref_field)s >
 						ifnull(%(target_field)s, 0), %(target_field)s,
 						%(target_ref_field)s))/sum(%(target_ref_field)s)*100
-						from `tab%(target_dt)s` where parent="%(name)s"), 2) %(set_modified)s
+						from `tab%(target_dt)s` where parent="%(name)s" %(drop_ship_cond)s), 2) %(set_modified)s
 					where name='%(name)s'""" % args)
 
 			# update field
diff --git a/erpnext/selling/doctype/sales_order/sales_order.js b/erpnext/selling/doctype/sales_order/sales_order.js
index f46c16a..57162a1 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.js
+++ b/erpnext/selling/doctype/sales_order/sales_order.js
@@ -15,9 +15,20 @@
 	refresh: function(doc, dt, dn) {
 		this._super();
 		this.frm.dashboard.reset();
-
+		var flag_drop_ship = false;
+		var flag_delivery_note = false;
+		
 		if(doc.docstatus==1) {
-			if(doc.status != 'Stopped') {
+			if(doc.status != 'Stopped' && doc.status != 'Closed') {
+				
+				$.each(cur_frm.doc.items, function(i, item){
+					if(item.is_drop_ship == 1){
+						flag_drop_ship = true;
+					}
+					else{
+						flag_delivery_note = true;
+					}
+				})
 
 				// cur_frm.dashboard.add_progress(cint(doc.per_delivered) + __("% Delivered"),
 				// 	doc.per_delivered);
@@ -25,7 +36,7 @@
 				// 	doc.per_billed);
 
 				// indent
-				if(!doc.order_type || ["Sales", "Shopping Cart"].indexOf(doc.order_type)!==-1 && doc.drop_ship!=1)
+				if(!doc.order_type || ["Sales", "Shopping Cart"].indexOf(doc.order_type)!==-1)
 					cur_frm.add_custom_button(__('Material Request'), this.make_material_request);
 
 				if(flt(doc.per_billed)==0) {
@@ -33,30 +44,36 @@
 				}
 
 				// stop
-				if(flt(doc.per_delivered, 2) < 100 || doc.per_billed < 100)
-					cur_frm.add_custom_button(__('Stop'), cur_frm.cscript['Stop Sales Order'])
-
-					// maintenance
-					if(flt(doc.per_delivered, 2) < 100 && ["Sales", "Shopping Cart"].indexOf(doc.order_type)===-1 && doc.drop_ship!=1) {
-						cur_frm.add_custom_button(__('Maint. Visit'), this.make_maintenance_visit);
-						cur_frm.add_custom_button(__('Maint. Schedule'), this.make_maintenance_schedule);
+				if((flt(doc.per_delivered, 2) < 100 && flag_delivery_note) || doc.per_billed < 100 
+					|| (flt(doc.per_ordered,2) < 100 && flag_drop_ship)){
+						cur_frm.add_custom_button(__('Stop'), cur_frm.cscript['Stop Sales Order'])
 					}
+				
+				
+				cur_frm.add_custom_button(__('Close'), cur_frm.cscript['Close Sales Order'])
 
-					// delivery note
-					if(flt(doc.per_delivered, 2) < 100 && ["Sales", "Shopping Cart"].indexOf(doc.order_type)!==-1 && doc.drop_ship!=1)
-						cur_frm.add_custom_button(__('Delivery'), this.make_delivery_note).addClass("btn-primary");
+				// maintenance
+				if(flt(doc.per_delivered, 2) < 100 && ["Sales", "Shopping Cart"].indexOf(doc.order_type)===-1) {
+					cur_frm.add_custom_button(__('Maint. Visit'), this.make_maintenance_visit);
+					cur_frm.add_custom_button(__('Maint. Schedule'), this.make_maintenance_schedule);
+				}
 
-					// sales invoice
-					if(flt(doc.per_billed, 2) < 100) {
-						cur_frm.add_custom_button(__('Invoice'), this.make_sales_invoice).addClass("btn-primary");
-					}
-					
-					if(doc.drop_ship==1 && flt(doc.per_ordered, 2) < 100)
-						cur_frm.add_custom_button(__('Make Shipment'), cur_frm.cscript.make_drop_shipment);
+				// delivery note
+				if(flt(doc.per_delivered, 2) < 100 && ["Sales", "Shopping Cart"].indexOf(doc.order_type)!==-1 && flag_delivery_note)
+					cur_frm.add_custom_button(__('Delivery'), this.make_delivery_note).addClass("btn-primary");
+
+				// sales invoice
+				if(flt(doc.per_billed, 2) < 100) {
+					cur_frm.add_custom_button(__('Invoice'), this.make_sales_invoice).addClass("btn-primary");
+				}
+				
+				if(flt(doc.per_ordered, 2) < 100 && flag_drop_ship)
+					cur_frm.add_custom_button(__('Make Shipment'), cur_frm.cscript.make_drop_shipment).addClass("btn-primary");
 
 			} else {
 				// un-stop
-				cur_frm.add_custom_button(__('Unstop'), cur_frm.cscript['Unstop Sales Order']);
+				if( doc.status != 'Closed')
+					cur_frm.add_custom_button(__('Unstop'), cur_frm.cscript['Unstop Sales Order']);
 			}
 		}
 
@@ -150,10 +167,36 @@
 		});
 	},
 	make_drop_shipment: function(){
-		frappe.model.open_mapped_doc({
-			method: "erpnext.selling.doctype.sales_order.sales_order.make_drop_shipment",
-			frm: cur_frm
-		})
+		var dialog = new frappe.ui.Dialog({
+			title: __("For Supplier"),
+			fields: [
+				{"fieldtype": "Link", "label": __("Supplier"), "fieldname": "supplier", "options":"Supplier",
+					"reqd": 1 },
+				{"fieldtype": "Button", "label": __("Proceed"), "fieldname": "proceed"},
+			]
+		});
+
+		dialog.fields_dict.proceed.$input.click(function() {
+			args = dialog.get_values();
+			if(!args) return;
+			dialog.hide();
+			return frappe.call({
+				type: "GET",
+				method: "erpnext.selling.doctype.sales_order.sales_order.make_drop_shipment",
+				args: {
+					"source_name": cur_frm.doc.name,
+					"for_supplier": args.supplier
+				},
+				freeze: true,
+				callback: function(r) {
+					if(!r.exc) {
+						var doc = frappe.model.sync(r.message);
+						frappe.set_route("Form", r.message.doctype, r.message.name);
+					}
+				}
+			})
+		});
+		dialog.show();
 	}
 
 });
@@ -185,7 +228,24 @@
 	if (check) {
 		return $c('runserverobj', {
 			'method':'stop_sales_order',
-			'docs': doc
+			'docs': doc,
+			'arg': "Stopped"
+			}, function(r,rt) {
+			cur_frm.refresh();
+		});
+	}
+}
+
+cur_frm.cscript['Close Sales Order'] = function(){
+	var doc = cur_frm.doc;
+
+	var check = confirm(__("Are you sure you want to CLOSE ") + doc.name);
+
+	if (check) {
+		return $c('runserverobj', {
+			'method':'stop_sales_order',
+			'docs': doc,
+			'arg': "Closed"
 			}, function(r,rt) {
 			cur_frm.refresh();
 		});
diff --git a/erpnext/selling/doctype/sales_order/sales_order.json b/erpnext/selling/doctype/sales_order/sales_order.json
index 97f5d36..b8680b8 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.json
+++ b/erpnext/selling/doctype/sales_order/sales_order.json
@@ -234,7 +234,7 @@
    "bold": 0, 
    "collapsible": 0, 
    "default": "Sales", 
-   "depends_on": "eval:doc.drop_ship!=1", 
+   "depends_on": "", 
    "fieldname": "order_type", 
    "fieldtype": "Select", 
    "hidden": 0, 
@@ -259,28 +259,6 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
-   "fieldname": "drop_ship", 
-   "fieldtype": "Check", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Drop Ship", 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "read_only": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
    "fieldname": "column_break1", 
    "fieldtype": "Column Break", 
    "hidden": 0, 
@@ -404,7 +382,7 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
-   "depends_on": "eval:doc.drop_ship!=1", 
+   "depends_on": "", 
    "description": "", 
    "fieldname": "po_no", 
    "fieldtype": "Data", 
@@ -2001,7 +1979,7 @@
    "no_copy": 1, 
    "oldfieldname": "status", 
    "oldfieldtype": "Select", 
-   "options": "\nDraft\nTo Deliver and Bill\nTo Bill\nTo Deliver\nCompleted\nStopped\nCancelled", 
+   "options": "\nDraft\nTo Deliver and Bill\nTo Bill\nTo Deliver\nCompleted\nStopped\nCancelled\nClosed", 
    "permlevel": 0, 
    "print_hide": 1, 
    "read_only": 1, 
@@ -2600,7 +2578,7 @@
  "is_submittable": 1, 
  "issingle": 0, 
  "istable": 0, 
- "modified": "2015-10-15 15:27:34.592276", 
+ "modified": "2015-10-19 11:34:16.668148", 
  "modified_by": "Administrator", 
  "module": "Selling", 
  "name": "Sales Order", 
diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py
index c9cda38..ab5ddbd 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.py
+++ b/erpnext/selling/doctype/sales_order/sales_order.py
@@ -214,9 +214,9 @@
 		if date_diff and date_diff[0][0]:
 			frappe.throw(_("{0} {1} has been modified. Please refresh.").format(self.doctype, self.name))
 
-	def stop_sales_order(self):
+	def stop_sales_order(self, status):
 		self.check_modified_date()
-		self.db_set('status', 'Stopped')
+		self.db_set('status', status)
 		self.update_reserved_qty()
 		self.notify_update()
 		clear_doctype_notifications(self)
@@ -350,7 +350,7 @@
 				"parent": "against_sales_order",
 			},
 			"postprocess": update_item,
-			"condition": lambda doc: doc.delivered_qty < doc.qty
+			"condition": lambda doc: doc.delivered_qty < doc.qty and doc.is_drop_ship!=1
 		},
 		"Sales Taxes and Charges": {
 			"doctype": "Sales Taxes and Charges",
@@ -490,7 +490,7 @@
 	return data
 
 @frappe.whitelist()
-def make_drop_shipment(source_name, target_doc=None):
+def make_drop_shipment(source_name, for_supplier, target_doc=None):
 	def postprocess(source, target):
 		set_missing_values(source, target)
 		
@@ -500,7 +500,7 @@
 		target.contact_mobile = ""
 		target.contact_email = ""
 		target.contact_person = ""
-		target.ignore_pricing_rule = 1
+		target.drop_ship = 1
 		target.run_method("set_missing_values")
 		target.run_method("calculate_taxes_and_totals")
 
@@ -529,10 +529,11 @@
 				["name", "prevdoc_detail_docname"],
 				["parent", "prevdoc_docname"],
 				["parenttype", "prevdoc_doctype"],
-				["uom", "stock_uom"]
+				["uom", "stock_uom"],
+				["delivery_date", "schedule_date"]
 			],
 			"postprocess": update_item,
-			"condition": lambda doc: doc.delivered_qty < doc.qty
+			"condition": lambda doc: doc.ordered_qty < doc.qty and doc.is_drop_ship==1 and doc.supplier == for_supplier
 		},
 		"Sales Taxes and Charges": {
 			"doctype": "Purchase Taxes and Charges",
diff --git a/erpnext/selling/doctype/sales_order/sales_order_list.js b/erpnext/selling/doctype/sales_order/sales_order_list.js
index f9842a1..6c6254b 100644
--- a/erpnext/selling/doctype/sales_order/sales_order_list.js
+++ b/erpnext/selling/doctype/sales_order/sales_order_list.js
@@ -1,16 +1,19 @@
 frappe.listview_settings['Sales Order'] = {
 	add_fields: ["base_grand_total", "customer_name", "currency", "delivery_date", "per_delivered", "per_billed",
-		"status", "order_type", "per_ordered", "drop_ship"],
+		"status", "order_type"],
 	get_indicator: function(doc) {
         if(doc.status==="Stopped") {
 			return [__("Stopped"), "darkgrey", "status,=,Stopped"];
 
-        } else if (doc.order_type !== "Maintenance" && doc.drop_ship !=1 
+        } else if(doc.status==="Closed"){
+        	return [__("Closed"), "green", "status,=,Closed"];
+			
+        } else if (doc.order_type !== "Maintenance"
 			&& flt(doc.per_delivered, 2) < 100 && frappe.datetime.get_diff(doc.delivery_date) < 0) {
 			// to bill & overdue
 			return [__("Overdue"), "red", "per_delivered,<,100|delivery_date,<,Today|status,!=,Stopped"];
 
-		} else if (doc.order_type !== "Maintenance" && doc.drop_ship !=1 
+		} else if (doc.order_type !== "Maintenance"
 			&& flt(doc.per_delivered, 2) < 100 && doc.status!=="Stopped") {
 			// not delivered
 
@@ -20,43 +23,22 @@
 				return [__("To Deliver and Bill"), "orange",
 					"per_delivered,<,100|per_billed,<,100|status,!=,Stopped"];
 			} else {
-				// not delivered
+				// not billed
 
 				return [__("To Deliver"), "orange",
 					"per_delivered,<,100|per_billed,=,100|status,!=,Stopped"];
 			}
 
-		} else if ((doc.order_type === "Maintenance" || flt(doc.per_delivered, 2) == 100 || 
-			(doc.drop_ship == 1 && flt(doc.per_ordered, 2) == 100  ) ) && flt(doc.per_billed, 2) < 100 
-			&& doc.status!=="Stopped") {
+		} else if ((doc.order_type === "Maintenance" || flt(doc.per_delivered, 2) == 100)
+			&& flt(doc.per_billed, 2) < 100 && doc.status!=="Stopped") {
 
 			// to bill
-			return [__("To Bill"), "orange", "per_delivered,=,100|per_billed,<,100|status,!=,Stopped|per_ordered,<,100"];
+			return [__("To Bill"), "orange", "per_delivered,=,100|per_billed,<,100|status,!=,Stopped"];
 
 		} else if((doc.order_type === "Maintenance" || flt(doc.per_delivered, 2) == 100)
 			&& flt(doc.per_billed, 2) == 100 && doc.status!=="Stopped") {
 
 			return [__("Completed"), "green", "per_delivered,=,100|per_billed,=,100|status,!=,Stopped"];
-		} else if ( doc.drop_ship == 1 && flt(doc.per_delivered, 2) < 100 
-			&& frappe.datetime.get_diff(doc.delivery_date) < 0) {
-			// to bill & overdue
-			return [__("Overdue"), "red", "per_ordered,<,100|delivery_date,<,Today|status,!=,Stopped"];
-
-		} else if ( doc.drop_ship == 1 && flt(doc.per_ordered, 2) < 100 && doc.status!=="Stopped") {
-			// not ordered
-			
-			if(flt(doc.per_billed, 2) < 100) {
-				// not delivered & not billed
-
-				return [__("To Order and Bill"), "orange",
-					"per_ordered,<,100|per_billed,<,100|status,!=,Stopped"];
-			} else {
-				// not ordered
-
-				return [__("To Order"), "orange",
-					"per_ordered,<,100|per_billed,=,100|status,!=,Stopped"];
-			}
-
 		}
 	},
 	onload: function(listview) {
@@ -71,4 +53,4 @@
 		});
 
 	}
-};
+};
\ No newline at end of file
diff --git a/erpnext/selling/doctype/sales_order_item/sales_order_item.json b/erpnext/selling/doctype/sales_order_item/sales_order_item.json
index 4192100..8acb16a 100644
--- a/erpnext/selling/doctype/sales_order_item/sales_order_item.json
+++ b/erpnext/selling/doctype/sales_order_item/sales_order_item.json
@@ -686,6 +686,95 @@
   {
    "allow_on_submit": 0, 
    "bold": 0, 
+   "collapsible": 1, 
+   "collapsible_depends_on": "eval:doc.is_drop_ship==1", 
+   "fieldname": "drop_ship", 
+   "fieldtype": "Section Break", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Drop Ship", 
+   "no_copy": 0, 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "read_only": 0, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_on_submit": 1, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "fieldname": "is_drop_ship", 
+   "fieldtype": "Check", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Is Drop Ship Item", 
+   "no_copy": 0, 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "read_only": 0, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "fieldname": "column_break_32", 
+   "fieldtype": "Column Break", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "no_copy": 0, 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "read_only": 0, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_on_submit": 1, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "fieldname": "supplier", 
+   "fieldtype": "Link", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Supplier", 
+   "no_copy": 0, 
+   "options": "Supplier", 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "read_only": 0, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_on_submit": 0, 
+   "bold": 0, 
    "collapsible": 0, 
    "fieldname": "warehouse_and_reference", 
    "fieldtype": "Section Break", 
diff --git a/erpnext/stock/doctype/item/item.json b/erpnext/stock/doctype/item/item.json
index bef4e25..bd812a0 100644
--- a/erpnext/stock/doctype/item/item.json
+++ b/erpnext/stock/doctype/item/item.json
@@ -250,6 +250,28 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
+   "fieldname": "is_drop_ship", 
+   "fieldtype": "Check", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Is Drop Ship", 
+   "no_copy": 0, 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "read_only": 0, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "image", 
    "fieldtype": "Attach", 
    "hidden": 0, 
diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py
index 1f0b637..8f47ebc 100644
--- a/erpnext/stock/get_item_details.py
+++ b/erpnext/stock/get_item_details.py
@@ -31,6 +31,7 @@
 			"transaction_type": "selling",
 			"ignore_pricing_rule": 0/1
 			"project_name": "",
+			"default_supplier":""
 		}
 	"""
 	args = process_args(args)
@@ -69,7 +70,7 @@
 
 	if args.get("is_subcontracted") == "Yes":
 		out.bom = get_default_bom(args.item_code)
-
+		
 	return out
 
 def process_args(args):
@@ -172,7 +173,9 @@
 		"base_amount": 0.0,
 		"net_rate": 0.0,
 		"net_amount": 0.0,
-		"discount_percentage": 0.0
+		"discount_percentage": 0.0,
+		"supplier": item.default_supplier,
+		"is_drop_ship": item.is_drop_ship,
 	})
 
 	# if default specified in item is for another company, fetch from company
diff --git a/erpnext/stock/stock_balance.py b/erpnext/stock/stock_balance.py
index efc604b..b0654e2 100644
--- a/erpnext/stock/stock_balance.py
+++ b/erpnext/stock/stock_balance.py
@@ -90,7 +90,7 @@
 					and parenttype="Sales Order"
 					and item_code != parent_item
 					and exists (select * from `tabSales Order` so
-					where name = dnpi_in.parent and docstatus = 1 and status != 'Stopped')
+					where name = dnpi_in.parent and docstatus = 1 and status not in ('Stopped','Closed'))
 				) dnpi)
 			union
 				(select qty as dnpi_qty, qty as so_item_qty,
@@ -99,7 +99,7 @@
 				where item_code = %s and warehouse = %s
 				and exists(select * from `tabSales Order` so
 					where so.name = so_item.parent and so.docstatus = 1
-					and so.status != 'Stopped'))
+					and so.status not in ('Stopped','Closed')))
 			) tab
 		where
 			so_item_qty >= so_item_delivered_qty