Merge pull request #7710 from joolsr/patch-1

Update customer.md
diff --git a/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.py b/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.py
index 747eb43..254523f 100644
--- a/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.py
+++ b/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.py
@@ -9,12 +9,12 @@
 
 def execute(filters=None):
 	period_list = get_period_list(filters.from_fiscal_year, filters.to_fiscal_year, filters.periodicity)
-	
+
 	income = get_data(filters.company, "Income", "Credit", period_list, filters = filters,
 		accumulated_values=filters.accumulated_values, ignore_closing_entries=True, ignore_accumulated_values_for_fy= True)
 	expense = get_data(filters.company, "Expense", "Debit", period_list, filters=filters,
 		accumulated_values=filters.accumulated_values, ignore_closing_entries=True, ignore_accumulated_values_for_fy= True)
-	
+
 	net_profit_loss = get_net_profit_loss(income, expense, period_list, filters.company)
 
 	data = []
@@ -24,7 +24,7 @@
 		data.append(net_profit_loss)
 
 	columns = get_columns(filters.periodicity, period_list, filters.accumulated_values, filters.company)
-	
+
 	chart = get_chart_data(filters, columns, income, expense, net_profit_loss)
 
 	return columns, data, None, chart
@@ -43,21 +43,21 @@
 
 		for period in period_list:
 			net_profit_loss[period.key] = flt(income[-2][period.key] - expense[-2][period.key], 3)
-			
+
 			if net_profit_loss[period.key]:
 				has_value=True
-			
+
 			total += flt(net_profit_loss[period.key])
 			net_profit_loss["total"] = total
-		
+
 		if has_value:
 			return net_profit_loss
 
 def get_chart_data(filters, columns, income, expense, net_profit_loss):
 	x_intervals = ['x'] + [d.get("label") for d in columns[2:]]
-	
+
 	income_data, expense_data, net_profit = [], [], []
-	
+
 	for p in columns[2:]:
 		if income:
 			income_data.append(income[-2].get(p.get("fieldname")))
@@ -65,7 +65,7 @@
 			expense_data.append(expense[-2].get(p.get("fieldname")))
 		if net_profit_loss:
 			net_profit.append(net_profit_loss.get(p.get("fieldname")))
-			
+
 	columns = [x_intervals]
 	if income_data:
 		columns.append(["Income"] + income_data)
@@ -73,15 +73,20 @@
 		columns.append(["Expense"] + expense_data)
 	if net_profit:
 		columns.append(["Net Profit/Loss"] + net_profit)
-		
+
 	chart = {
 		"data": {
 			'x': 'x',
-			'columns': columns
+			'columns': columns,
+			'colors': {
+				'Income': '#5E64FF',
+				'Expense': '#b8c2cc',
+				'Net Profit/Loss': '#ff5858'
+			}
 		}
 	}
-	
+
 	if not filters.accumulated_values:
 		chart["chart_type"] = "bar"
-		
+
 	return chart
\ No newline at end of file
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.js b/erpnext/buying/doctype/purchase_order/purchase_order.js
index f2f04fe..0a577c3 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order.js
+++ b/erpnext/buying/doctype/purchase_order/purchase_order.js
@@ -66,7 +66,7 @@
 
 		if(doc.docstatus == 1 && doc.status != "Closed") {
 			if(flt(doc.per_received, 2) < 100 && allow_receipt) {
-				cur_frm.add_custom_button(__('Receive'), this.make_purchase_receipt, __("Make"));
+				cur_frm.add_custom_button(__('Receipt'), this.make_purchase_receipt, __("Make"));
 
 				if(doc.is_subcontracted==="Yes") {
 					cur_frm.add_custom_button(__('Material to Supplier'),
diff --git a/erpnext/config/setup.py b/erpnext/config/setup.py
index 9c9bae2..878b2f2 100644
--- a/erpnext/config/setup.py
+++ b/erpnext/config/setup.py
@@ -96,6 +96,12 @@
 			"items": [
 				{
 					"type": "doctype",
+					"name": "Feedback Trigger",
+					"label": _("Feedback Trigger"),
+					"description": _("Automatically triggers the feedback request based on conditions.")
+				},
+				{
+					"type": "doctype",
 					"name": "Email Digest",
 					"description": _("Create and manage daily, weekly and monthly email digests.")
 				},
diff --git a/erpnext/docs/assets/img/setup/feedback/__init__.py b/erpnext/docs/assets/img/setup/feedback/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/docs/assets/img/setup/feedback/__init__.py
diff --git a/erpnext/docs/assets/img/setup/feedback/feedback-trigger-condition.png b/erpnext/docs/assets/img/setup/feedback/feedback-trigger-condition.png
new file mode 100644
index 0000000..5fdae3c
--- /dev/null
+++ b/erpnext/docs/assets/img/setup/feedback/feedback-trigger-condition.png
Binary files differ
diff --git a/erpnext/docs/assets/img/setup/feedback/feedback-trigger-subject.png b/erpnext/docs/assets/img/setup/feedback/feedback-trigger-subject.png
new file mode 100644
index 0000000..22c3f4c
--- /dev/null
+++ b/erpnext/docs/assets/img/setup/feedback/feedback-trigger-subject.png
Binary files differ
diff --git a/erpnext/docs/assets/img/setup/feedback/manual-feedback-request-option.png b/erpnext/docs/assets/img/setup/feedback/manual-feedback-request-option.png
new file mode 100644
index 0000000..e9f6487
--- /dev/null
+++ b/erpnext/docs/assets/img/setup/feedback/manual-feedback-request-option.png
Binary files differ
diff --git a/erpnext/docs/assets/img/setup/feedback/manual-feedback-request.png b/erpnext/docs/assets/img/setup/feedback/manual-feedback-request.png
new file mode 100644
index 0000000..cf9ecc0
--- /dev/null
+++ b/erpnext/docs/assets/img/setup/feedback/manual-feedback-request.png
Binary files differ
diff --git a/erpnext/docs/assets/img/setup/feedback/resend-feedback-request-button.png b/erpnext/docs/assets/img/setup/feedback/resend-feedback-request-button.png
new file mode 100644
index 0000000..9a4b19d
--- /dev/null
+++ b/erpnext/docs/assets/img/setup/feedback/resend-feedback-request-button.png
Binary files differ
diff --git a/erpnext/docs/assets/img/setup/feedback/resend-feedback-request-custom-message.png b/erpnext/docs/assets/img/setup/feedback/resend-feedback-request-custom-message.png
new file mode 100644
index 0000000..a68f520
--- /dev/null
+++ b/erpnext/docs/assets/img/setup/feedback/resend-feedback-request-custom-message.png
Binary files differ
diff --git a/erpnext/docs/assets/img/setup/feedback/setting-up-feedback-trigger-message.png b/erpnext/docs/assets/img/setup/feedback/setting-up-feedback-trigger-message.png
new file mode 100644
index 0000000..6bc802e
--- /dev/null
+++ b/erpnext/docs/assets/img/setup/feedback/setting-up-feedback-trigger-message.png
Binary files differ
diff --git a/erpnext/docs/assets/img/setup/feedback/setting-up-feedback-trigger.png b/erpnext/docs/assets/img/setup/feedback/setting-up-feedback-trigger.png
new file mode 100644
index 0000000..dec0336
--- /dev/null
+++ b/erpnext/docs/assets/img/setup/feedback/setting-up-feedback-trigger.png
Binary files differ
diff --git a/erpnext/docs/assets/img/setup/feedback/sidebar-ratings.png b/erpnext/docs/assets/img/setup/feedback/sidebar-ratings.png
new file mode 100644
index 0000000..72f4377
--- /dev/null
+++ b/erpnext/docs/assets/img/setup/feedback/sidebar-ratings.png
Binary files differ
diff --git a/erpnext/docs/assets/img/setup/feedback/submit-feedback.png b/erpnext/docs/assets/img/setup/feedback/submit-feedback.png
new file mode 100644
index 0000000..a1ccf0d
--- /dev/null
+++ b/erpnext/docs/assets/img/setup/feedback/submit-feedback.png
Binary files differ
diff --git a/erpnext/docs/assets/img/setup/feedback/timeline-rating-and-feedback.png b/erpnext/docs/assets/img/setup/feedback/timeline-rating-and-feedback.png
new file mode 100644
index 0000000..0f691d3
--- /dev/null
+++ b/erpnext/docs/assets/img/setup/feedback/timeline-rating-and-feedback.png
Binary files differ
diff --git a/erpnext/docs/user/manual/en/setting-up/feedback/__init__.py b/erpnext/docs/user/manual/en/setting-up/feedback/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/docs/user/manual/en/setting-up/feedback/__init__.py
diff --git a/erpnext/docs/user/manual/en/setting-up/feedback/index.md b/erpnext/docs/user/manual/en/setting-up/feedback/index.md
new file mode 100644
index 0000000..bb2efaf
--- /dev/null
+++ b/erpnext/docs/user/manual/en/setting-up/feedback/index.md
@@ -0,0 +1,7 @@
+# Feedback
+
+Customer/User Feedback for a Product or Services can be useful for business as it can be used to make decisions for improvements either in products or services.
+
+### Topics
+
+{index}
diff --git a/erpnext/docs/user/manual/en/setting-up/feedback/index.txt b/erpnext/docs/user/manual/en/setting-up/feedback/index.txt
new file mode 100644
index 0000000..08160cc
--- /dev/null
+++ b/erpnext/docs/user/manual/en/setting-up/feedback/index.txt
@@ -0,0 +1,4 @@
+setting-up-feedback
+submit-feedback
+resend-feedback-request
+manual-feedback-request
diff --git a/erpnext/docs/user/manual/en/setting-up/feedback/manual-feedback-request.md b/erpnext/docs/user/manual/en/setting-up/feedback/manual-feedback-request.md
new file mode 100644
index 0000000..4afaee1
--- /dev/null
+++ b/erpnext/docs/user/manual/en/setting-up/feedback/manual-feedback-request.md
@@ -0,0 +1,17 @@
+# Manual Feedback Request
+
+We can also send the feedback request to Customer/User without configuring the
+Feedback Trigger.
+
+To request a feedback manually go to respective document e.g. Sales Order, Issue etc.
+and click on Ask a Feedback option in Menu.
+
+<img class="screenshot" alt="Setting Condition" src="{{docs_base_url}}/assets/img/setup/feedback/manual-feedback-request-option.png">
+
+Then, user can enter the feedback request details like email id, message and send the
+feedback request mail.
+
+<img class="screenshot" alt="Setting Condition" src="{{docs_base_url}}/assets/img/setup/feedback/manual-feedback-request.png">
+
+Note. If Feedback Trigger is already configured for the document then system will fetch
+Feedback Request details (email id, message)
diff --git a/erpnext/docs/user/manual/en/setting-up/feedback/resend-feedback-request.md b/erpnext/docs/user/manual/en/setting-up/feedback/resend-feedback-request.md
new file mode 100644
index 0000000..0dbb3b7
--- /dev/null
+++ b/erpnext/docs/user/manual/en/setting-up/feedback/resend-feedback-request.md
@@ -0,0 +1,16 @@
+# Resend Feedback Request
+
+We can also Resend the Feedback Request to the Customer/User.
+
+<img class="screenshot" alt="Setting Condition" src="{{docs_base_url}}/assets/img/setup/feedback/timeline-rating-and-feedback.png">
+
+To resend the Feedback Request we will need to navigate the Communication by clicking the `Details` link on Timeline Feedback.
+
+<img class="screenshot" alt="Setting Condition" src="{{docs_base_url}}/assets/img/setup/feedback/resend-feedback-request-button.png">
+
+On Resend Button click a dialog with the Feedback Request message will appear user can either send the
+Feedback Request with same message or he/she can make the changes in the Feedback Request message.
+
+<img class="screenshot" alt="Setting Condition" src="{{docs_base_url}}/assets/img/setup/feedback/resend-feedback-request-custom-message.png">
+
+{next}
diff --git a/erpnext/docs/user/manual/en/setting-up/feedback/setting-up-feedback.md b/erpnext/docs/user/manual/en/setting-up/feedback/setting-up-feedback.md
new file mode 100644
index 0000000..373d703
--- /dev/null
+++ b/erpnext/docs/user/manual/en/setting-up/feedback/setting-up-feedback.md
@@ -0,0 +1,53 @@
+# Feedback Trigger
+
+You can set up the Feedback Trigger for various documents to get the Feedback from the user.
+
+For this, you will need to setup the Feedback Trigger,
+
+> Setup > Email > Feedback Trigger
+
+### Setting Up Feedback Trigger
+
+To Setup an Feedback:
+
+1. Select which Document Type you want to send feedback request mail.
+2. Select the Email Field, This field will be used to get the recipients email id.
+3. Set the Subject for feedback request mail.
+4. Set the conditions, if all the conditions are met only then the feedback request mail will be sent.
+5. Compose the message.
+
+### Setting a Subject
+You can retrieve the data for a particular field by using `doc.[field_name]`. To use it in your subject/message, you have to surround it with `{% raw %}{{ }}{% endraw %}`. These are called [Jinja](http://jinja.pocoo.org/) tags. So, for example, to get the name of a document, you use `{% raw %}{{ doc.name }}{% endraw %}`. The below example sends an feedback request whenever Issue is Closed with the Subject, "ISS-##### Issue is Resolved"
+
+<img class="screenshot" alt="Setting Subject" src="{{docs_base_url}}/assets/img/setup/feedback/feedback-trigger-subject.png">
+
+### Setting Conditions
+
+Feedback Trigger allows you to set conditions according to the field data in your documents. The feedback request email will be sent on document save only if the all conditions are true For example if you want to trigger the feedback request mail to a customer if an Issue is has been saved as "Closed" as it's status, you put `doc.status == "Closed"` in the conditions textbox. You can also set more complex conditions by combining them.
+
+<img class="screenshot" alt="Setting Condition" src="{{docs_base_url}}/assets/img/setup/feedback/feedback-trigger-condition.png">
+
+### Setting a Message
+
+You can use both Jinja Tags (`{% raw %}{{ doc.[field_name] }}{% endraw %}`) and HTML tags in the message textbox.
+
+	{% raw %}<h3>Your Support Ticket is Resolved</h3>
+
+	<p>Issue {{ doc.name }} Is resolved. Please check and confirm the same.</p>
+	<p> Your Feedback is important for us. Please give us your Feedback for {{ doc.name }}</p>
+	<p> Please visit the following url for feedback.</p>
+
+	{{ feedback_url }}
+	{% endraw %}
+
+---
+
+### Example
+
+1. Setting up Feedback Trigger
+    <img class="screenshot" alt="Defining Criteria" src="{{docs_base_url}}/assets/img/setup/feedback/setting-up-feedback-trigger.png">
+
+1. Setting the Recipients and Message
+    <img class="screenshot" alt="Set Message" src="{{docs_base_url}}/assets/img/setup/feedback/setting-up-feedback-trigger-message.png">
+
+{next}
diff --git a/erpnext/docs/user/manual/en/setting-up/feedback/submit-feedback.md b/erpnext/docs/user/manual/en/setting-up/feedback/submit-feedback.md
new file mode 100644
index 0000000..9069f37
--- /dev/null
+++ b/erpnext/docs/user/manual/en/setting-up/feedback/submit-feedback.md
@@ -0,0 +1,19 @@
+# Submit Feedback
+
+Once feedback request mail is sent the user/customer. He/She can visit the URL to submit the feedback
+as well as rating for the document.
+
+<img class="screenshot" alt="Setting Condition" src="{{docs_base_url}}/assets/img/setup/feedback/submit-feedback.png">
+
+Once Feedback is submitted the feedback details message and ratings will be recorded and will be shown on Document sidebar and timeline. Also once the Feedback is successfully submitted by the user the link shared to the user will be expired and can not be used to submit the Feedback again.
+
+On Document sidebar the latest feedback ratings will displayed.
+
+<img class="screenshot" alt="Setting Condition" src="{{docs_base_url}}/assets/img/setup/feedback/sidebar-ratings.png">
+
+Also, The Feedback details such as Feedback message and ratings will be shown in the Document's Timeline along
+with Comment, Email.
+
+<img class="screenshot" alt="Setting Condition" src="{{docs_base_url}}/assets/img/setup/feedback/timeline-rating-and-feedback.png">
+
+{next}
\ No newline at end of file
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.js b/erpnext/stock/doctype/stock_entry/stock_entry.js
index 37f9b68..ed044a9 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.js
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.js
@@ -2,6 +2,188 @@
 
 frappe.provide("erpnext.stock");
 
+frappe.ui.form.on('Stock Entry', {
+	setup: function(frm) {
+		$.extend(frm.cscript, new erpnext.stock.StockEntry({frm: frm}));
+
+		frm.set_query('production_order', function() {
+			return {
+				filters: [
+					['Production Order', 'docstatus', '=', 1],
+					['Production Order', 'qty', '>','`tabProduction Order`.produced_qty'],
+					['Production Order', 'company', '=', frm.doc.company]
+				]
+			}
+		});
+	// },
+	// onload_post_render: function(frm) {
+
+		frm.set_query('batch_no', 'items', function(doc, cdt, cdn) {
+			var item = locals[cdt][cdn];
+			if(!item.item_code) {
+				frappe.throw(__("Please enter Item Code to get Batch Number"));
+			} else {
+				if (in_list(["Material Transfer for Manufacture", "Manufacture", "Repack", "Subcontract"], doc.purpose)) {
+					var filters = {
+						'item_code': item.item_code,
+						'posting_date': frm.doc.posting_date || nowdate()
+					}
+				} else {
+					var filters = {
+						'item_code': item.item_code
+					}
+				}
+
+				if(item.s_warehouse) filters["warehouse"] = item.s_warehouse;
+				return {
+					query : "erpnext.controllers.queries.get_batch_no",
+					filters: filters
+				}
+			}
+		});
+	},
+	refresh: function(frm) {
+		if(!frm.doc.docstatus) {
+			frm.add_custom_button(__('Make Material Request'), function() {
+				frappe.model.with_doctype('Material Request', function() {
+					var mr = frappe.model.get_new_doc('Material Request');
+					var items = frm.get_field('items').grid.get_selected_children();
+					if(!items.length) {
+						items = frm.doc.items;
+					}
+					items.forEach(function(item) {
+						var mr_item = frappe.model.add_child(mr, 'items');
+						mr_item.item_code = item.item_code;
+						mr_item.item_name = item.item_name;
+						mr_item.uom = item.uom;
+						mr_item.item_group = item.item_group;
+						mr_item.description = item.description;
+						mr_item.image = item.image;
+						mr_item.qty = item.qty;
+						mr_item.warehouse = item.s_warehouse;
+						mr_item.required_date = frappe.datetime.nowdate();
+					});
+					frappe.set_route('Form', 'Material Request', mr.name);
+				});
+			});
+		}
+	},
+	purpose: function(frm) {
+		frm.fields_dict.items.grid.refresh();
+		frm.cscript.toggle_related_fields(frm.doc);
+	},
+	company: function(frm) {
+		if(frm.doc.company) {
+			var company_doc = frappe.get_doc(":Company", frm.doc.company);
+			if(company_doc.default_letter_head) {
+				frm.set_value("letter_head", company_doc.default_letter_head);
+			}
+		}
+	},
+	set_serial_no: function(frm, cdt, cdn) {
+		var d = frappe.model.get_doc(cdt, cdn);
+		if(!d.item_code && !d.s_warehouse && !d.qty) return;
+		var	args = {
+			'item_code'	: d.item_code,
+			'warehouse'	: cstr(d.s_warehouse),
+			'qty'		: d.qty
+		};
+		frappe.call({
+			method: "erpnext.stock.get_item_details.get_serial_no",
+			args: {"args": args},
+			callback: function(r) {
+				if (!r.exe){
+					frappe.model.set_value(cdt, cdn, "serial_no", r.message);
+				}
+			}
+		});
+	},
+})
+
+frappe.ui.form.on('Stock Entry Detail', {
+	qty: function(frm, cdt, cdn) {
+		frm.events.set_serial_no(frm, cdt, cdn);
+	},
+
+	s_warehouse: function(frm, cdt, cdn) {
+		frm.events.set_serial_no(frm, cdt, cdn);
+	},
+	barcode: function(doc, cdt, cdn) {
+		var d = locals[cdt][cdn];
+		if (d.barcode) {
+			frappe.call({
+				method: "erpnext.stock.get_item_details.get_item_code",
+				args: {"barcode": d.barcode },
+				callback: function(r) {
+					if (!r.exe){
+						frappe.model.set_value(cdt, cdn, "item_code", r.message);
+					}
+				}
+			});
+		}
+	},
+	uom: function(doc, cdt, cdn) {
+		var d = locals[cdt][cdn];
+		if(d.uom && d.item_code){
+			return frappe.call({
+				method: "erpnext.stock.doctype.stock_entry.stock_entry.get_uom_details",
+				args: {
+					item_code: d.item_code,
+					uom: d.uom,
+					qty: d.qty
+				},
+				callback: function(r) {
+					if(r.message) {
+						frappe.model.set_value(cdt, cdn, r.message);
+					}
+				}
+			});
+		}
+	},
+	item_code: function(frm, cdt, cdn) {
+		var d = locals[cdt][cdn];
+		if(d.item_code) {
+			args = {
+				'item_code'			: d.item_code,
+				'warehouse'			: cstr(d.s_warehouse) || cstr(d.t_warehouse),
+				'transfer_qty'		: d.transfer_qty,
+				'serial_no	'		: d.serial_no,
+				'bom_no'			: d.bom_no,
+				'expense_account'	: d.expense_account,
+				'cost_center'		: d.cost_center,
+				'company'			: frm.doc.company,
+				'qty'				: d.qty
+			};
+			return frappe.call({
+				doc: frm.doc,
+				method: "get_item_details",
+				args: args,
+				callback: function(r) {
+					if(r.message) {
+						var d = locals[cdt][cdn];
+						$.each(r.message, function(k, v) {
+							d[k] = v;
+						});
+						refresh_field("items");
+					}
+				}
+			});
+		}
+	},
+	expense_account: function(frm, cdt, cdn) {
+		erpnext.utils.copy_value_in_all_row(frm.doc, cdt, cdn, "items", "expense_account");
+	},
+	cost_center: function(doc, cdt, cdn) {
+		erpnext.utils.copy_value_in_all_row(frm.doc, cdt, cdn, "items", "cost_center");
+	}
+});
+
+frappe.ui.form.on('Landed Cost Taxes and Charges', {
+	amount: function(frm) {
+		frm.events.calculate_amount();
+	}
+});
+
 erpnext.stock.StockEntry = erpnext.stock.StockController.extend({
 	setup: function() {
 		var me = this;
@@ -51,7 +233,7 @@
 		var me = this;
 		this.set_default_account(function() {
 			if(me.frm.doc.__islocal && me.frm.doc.company && !me.frm.doc.amended_from) {
-				cur_frm.script_manager.trigger("company");
+				me.frm.trigger("company");
 			}
 		});
 
@@ -180,7 +362,7 @@
 				excise.voucher_type = 'Excise Entry';
 				frappe.set_route('Form', 'Journal Entry', excise.name);
 			}, __("Make"));
-			cur_frm.page.set_inner_btn_group_as_primary(__("Make"));
+			this.frm.page.set_inner_btn_group_as_primary(__("Make"));
 	},
 
 	items_add: function(doc, cdt, cdn) {
@@ -309,204 +491,32 @@
 
 		this.frm.set_value("total_additional_costs", flt(total_additional_costs, precision("total_additional_costs")));
 	},
-});
 
-cur_frm.script_manager.make(erpnext.stock.StockEntry);
+	toggle_related_fields: function(doc) {
+		this.frm.toggle_enable("from_warehouse", doc.purpose!='Material Receipt');
+		this.frm.toggle_enable("to_warehouse", doc.purpose!='Material Issue');
 
-cur_frm.cscript.toggle_related_fields = function(doc) {
-	cur_frm.toggle_enable("from_warehouse", doc.purpose!='Material Receipt');
-	cur_frm.toggle_enable("to_warehouse", doc.purpose!='Material Issue');
+		this.frm.fields_dict["items"].grid.set_column_disp("s_warehouse", doc.purpose!='Material Receipt');
+		this.frm.fields_dict["items"].grid.set_column_disp("t_warehouse", doc.purpose!='Material Issue');
 
-	cur_frm.fields_dict["items"].grid.set_column_disp("s_warehouse", doc.purpose!='Material Receipt');
-	cur_frm.fields_dict["items"].grid.set_column_disp("t_warehouse", doc.purpose!='Material Issue');
+		this.frm.cscript.toggle_enable_bom();
 
-	cur_frm.cscript.toggle_enable_bom();
-
-	if (doc.purpose == 'Subcontract') {
-		doc.customer = doc.customer_name = doc.customer_address =
-			doc.delivery_note_no = doc.sales_invoice_no = null;
-	} else {
-		doc.customer = doc.customer_name = doc.customer_address =
-			doc.delivery_note_no = doc.sales_invoice_no = doc.supplier =
-			doc.supplier_name = doc.supplier_address = doc.purchase_receipt_no = null;
-	}
-	if(doc.purpose == "Material Receipt") {
-		cur_frm.set_value("from_bom", 0);
-	}
-
-	// Addition costs based on purpose
-	cur_frm.toggle_display(["additional_costs", "total_additional_costs", "additional_costs_section"],
-		doc.purpose!='Material Issue');
-
-	cur_frm.fields_dict["items"].grid.set_column_disp("additional_cost", doc.purpose!='Material Issue');
-}
-
-cur_frm.fields_dict['production_order'].get_query = function(doc) {
-	return {
-		filters: [
-			['Production Order', 'docstatus', '=', 1],
-			['Production Order', 'qty', '>','`tabProduction Order`.produced_qty'],
-			['Production Order', 'company', '=', cur_frm.doc.company]
-		]
-	}
-}
-
-cur_frm.cscript.purpose = function(doc, cdt, cdn) {
-	cur_frm.fields_dict.items.grid.refresh();
-	cur_frm.cscript.toggle_related_fields(doc);
-}
-
-// Overloaded query for link batch_no
-cur_frm.fields_dict['items'].grid.get_field('batch_no').get_query = function(doc, cdt, cdn) {
-	var item = locals[cdt][cdn];
-	if(!item.item_code) {
-		frappe.throw(__("Please enter Item Code to get batch no"));
-	}
-	else {
-		if (in_list(["Material Transfer for Manufacture", "Manufacture", "Repack", "Subcontract"], doc.purpose)) {
-			var filters = {
-				'item_code': item.item_code,
-				'posting_date': me.frm.doc.posting_date || nowdate()
-			}
+		if (doc.purpose == 'Subcontract') {
+			doc.customer = doc.customer_name = doc.customer_address =
+				doc.delivery_note_no = doc.sales_invoice_no = null;
 		} else {
-			var filters = {
-				'item_code': item.item_code
-			}
+			doc.customer = doc.customer_name = doc.customer_address =
+				doc.delivery_note_no = doc.sales_invoice_no = doc.supplier =
+				doc.supplier_name = doc.supplier_address = doc.purchase_receipt_no = null;
+		}
+		if(doc.purpose == "Material Receipt") {
+			frm.set_value("from_bom", 0);
 		}
 
+		// Addition costs based on purpose
+		this.frm.toggle_display(["additional_costs", "total_additional_costs", "additional_costs_section"],
+			doc.purpose!='Material Issue');
 
-		if(item.s_warehouse) filters["warehouse"] = item.s_warehouse
-		return {
-			query : "erpnext.controllers.queries.get_batch_no",
-			filters: filters
-		}
+		this.frm.fields_dict["items"].grid.set_column_disp("additional_cost", doc.purpose!='Material Issue');
 	}
-}
-
-cur_frm.cscript.validate = function(doc, cdt, cdn) {
-	cur_frm.cscript.validate_items(doc);
-}
-
-cur_frm.cscript.validate_items = function(doc) {
-	cl = doc.items || [];
-	if (!cl.length) {
-		msgprint(__("Item table can not be blank"));
-		validated = false;
-	}
-}
-
-cur_frm.cscript.expense_account = function(doc, cdt, cdn) {
-	erpnext.utils.copy_value_in_all_row(doc, cdt, cdn, "items", "expense_account");
-}
-
-cur_frm.cscript.cost_center = function(doc, cdt, cdn) {
-	erpnext.utils.copy_value_in_all_row(doc, cdt, cdn, "items", "cost_center");
-}
-
-
-frappe.ui.form.on('Landed Cost Taxes and Charges', {
-	amount: function(frm) {
-		frm.cscript.calculate_amount();
-	}
-})
-
-frappe.ui.form.on('Stock Entry Detail', {
-	qty: function(frm, cdt, cdn) {
-		frm.events.set_serial_no(frm, cdt, cdn);
-	},
-
-	s_warehouse: function(frm, cdt, cdn) {
-		frm.events.set_serial_no(frm, cdt, cdn);
-	},
-	barcode: function(doc, cdt, cdn) {
-		var d = locals[cdt][cdn];
-		if (d.barcode) {
-			frappe.call({
-				method: "erpnext.stock.get_item_details.get_item_code",
-				args: {"barcode": d.barcode },
-				callback: function(r) {
-					if (!r.exe){
-						frappe.model.set_value(cdt, cdn, "item_code", r.message);
-					}
-				}
-			});
-		}
-	},
-	uom: function(doc, cdt, cdn) {
-		var d = locals[cdt][cdn];
-		if(d.uom && d.item_code){
-			return frappe.call({
-				method: "erpnext.stock.doctype.stock_entry.stock_entry.get_uom_details",
-				args: {
-					item_code: d.item_code,
-					uom: d.uom,
-					qty: d.qty
-				},
-				callback: function(r) {
-					if(r.message) {
-						frappe.model.set_value(cdt, cdn, r.message);
-					}
-				}
-			});
-		}
-	},
-	item_code: function(doc, cdt, cdn) {
-		var d = locals[cdt][cdn];
-		if(d.item_code) {
-			args = {
-				'item_code'			: d.item_code,
-				'warehouse'			: cstr(d.s_warehouse) || cstr(d.t_warehouse),
-				'transfer_qty'		: d.transfer_qty,
-				'serial_no	'		: d.serial_no,
-				'bom_no'			: d.bom_no,
-				'expense_account'	: d.expense_account,
-				'cost_center'		: d.cost_center,
-				'company'			: cur_frm.doc.company,
-				'qty'				: d.qty
-			};
-			return frappe.call({
-				doc: cur_frm.doc,
-				method: "get_item_details",
-				args: args,
-				callback: function(r) {
-					if(r.message) {
-						var d = locals[cdt][cdn];
-						$.each(r.message, function(k, v) {
-							d[k] = v;
-						});
-						refresh_field("items");
-					}
-				}
-			});
-		}
-	}
-})
-
-frappe.ui.form.on('Stock Entry', {
-	company: function(doc, cdt, cdn) {
-		if(doc.company) {
-			var company_doc = frappe.get_doc(":Company", doc.company);
-			if(company_doc.default_letter_head) {
-				cur_frm.set_value("letter_head", company_doc.default_letter_head);
-			}
-		}
-	},
-	set_serial_no: function(doc, cdt, cdn) {
-		var d = frappe.model.get_doc(cdt, cdn);
-		if(!d.item_code && !d.s_warehouse && !d.qty) return;
-		var	args = {
-				'item_code'	: d.item_code,
-				'warehouse'	: cstr(d.s_warehouse),
-				'qty'		: d.qty
-			};
-			frappe.call({
-				method: "erpnext.stock.get_item_details.get_serial_no",
-				args: {"args": args},
-				callback: function(r) {
-					if (!r.exe){
-						frappe.model.set_value(cdt, cdn, "serial_no", r.message);
-					}
-				}
-			});
-		},
-})
+});
\ No newline at end of file