[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