[fixes] salary manager #3554
diff --git a/erpnext/hr/doctype/salary_manager/salary_manager.js b/erpnext/hr/doctype/salary_manager/salary_manager.js
index 240547c..ca70226 100644
--- a/erpnext/hr/doctype/salary_manager/salary_manager.js
+++ b/erpnext/hr/doctype/salary_manager/salary_manager.js
@@ -1,30 +1,44 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-var display_activity_log = function(msg) {
+cur_frm.cscript.display_activity_log = function(msg) {
 	if(!cur_frm.ss_html)
 		cur_frm.ss_html = $a(cur_frm.fields_dict['activity_log'].wrapper,'div');
-	cur_frm.ss_html.innerHTML =
-		'<div class="padding"><h4>'+__("Activity Log:")+'</h4>'+msg+'</div>';
+	if(msg) {
+		cur_frm.ss_html.innerHTML =
+			'<div class="padding"><h4>'+__("Activity Log:")+'</h4>'+msg+'</div>';
+	} else {
+		cur_frm.ss_html.innerHTML = "";
+	}
 }
 
 //Create salary slip
 //-----------------------
 cur_frm.cscript.create_salary_slip = function(doc, cdt, cdn) {
+	cur_frm.cscript.display_activity_log("");
 	var callback = function(r, rt){
 		if (r.message)
-			display_activity_log(r.message);
+			cur_frm.cscript.display_activity_log(r.message);
 	}
 	return $c('runserverobj', args={'method':'create_sal_slip','docs':doc},callback);
 }
 
 cur_frm.cscript.submit_salary_slip = function(doc, cdt, cdn) {
+	cur_frm.cscript.display_activity_log("");
 	var check = confirm(__("Do you really want to Submit all Salary Slip for month {0} and year {1}", [doc.month, doc.fiscal_year]));
 	if(check){
+		// clear all in locals
+		if(locals["Salary Slip"]) {
+			$.each(locals["Salary Slip"], function(name, d) {
+				frappe.model.remove_from_locals("Salary Slip", name);
+			});
+		}
+
 		var callback = function(r, rt){
 			if (r.message)
-				display_activity_log(r.message);
+				cur_frm.cscript.display_activity_log(r.message);
 		}
+
 		return $c('runserverobj', args={'method':'submit_salary_slip','docs':doc},callback);
 	}
 }
@@ -47,4 +61,4 @@
 
 frappe.ui.form.on("Salary Manager", "refresh", function(frm) {
 	frm.disable_save();
-});
\ No newline at end of file
+});
diff --git a/erpnext/hr/doctype/salary_manager/salary_manager.py b/erpnext/hr/doctype/salary_manager/salary_manager.py
index eeb6ac0..3e0b53e 100644
--- a/erpnext/hr/doctype/salary_manager/salary_manager.py
+++ b/erpnext/hr/doctype/salary_manager/salary_manager.py
@@ -101,7 +101,7 @@
 		log = "<p>No employee for the above selected criteria OR salary slip already created</p>"
 		if ss_list:
 			log = "<b>Salary Slip Created For</b>\
-			<br><br>%s" % '<br>'.join(ss_list)
+			<br><br>%s" % '<br>'.join(self.format_as_links(ss_list))
 		return log
 
 
@@ -144,7 +144,7 @@
 		else:
 			all_ss = [d[0] for d in all_ss]
 
-		submitted_ss = list(set(all_ss) - set(not_submitted_ss))
+		submitted_ss = self.format_as_links(list(set(all_ss) - set(not_submitted_ss)))
 		if submitted_ss:
 			mail_sent_msg = self.send_email and " (Mail has been sent to the employee)" or ""
 			log = """
@@ -164,6 +164,9 @@
 			"""% ('<br>'.join(not_submitted_ss))
 		return log
 
+	def format_as_links(self, ss_list):
+		return ['<a href="#Form/Salary Slip/{0}">{0}</a>'.format(s) for s in ss_list]
+
 
 	def get_total_salary(self):
 		"""
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.js b/erpnext/stock/doctype/stock_entry/stock_entry.js
index 1135bc7..249cf74 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.js
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.js
@@ -498,9 +498,9 @@
 }
 
 cur_frm.cscript.validate = function(doc, cdt, cdn) {
-	cur_frm.cscript.validate_items(doc);
 	if($.inArray(cur_frm.doc.purpose, ["Purchase Return", "Sales Return"])!==-1)
 		validated = cur_frm.cscript.get_doctype_docname() ? true : false;
+	cur_frm.cscript.validate_items(doc);
 }
 
 cur_frm.cscript.validate_items = function(doc) {