[minor] user properties and leave application
diff --git a/accounts/page/accounts_browser/accounts_browser.css b/accounts/page/accounts_browser/accounts_browser.css
deleted file mode 100644
index 718da36..0000000
--- a/accounts/page/accounts_browser/accounts_browser.css
+++ /dev/null
@@ -1,29 +0,0 @@
-select.accbrowser-company-select {
-	width: 200px;
-	margin-top: 2px;
-	margin-left: 10px;
-}
-
-span.tree-node-toolbar {
-	padding: 2px;
-	margin-left: 15px;
-	border-radius: 3px;
-	-moz-border-radius: 3px;
-	-webkit-border-radius: 3px;
-	border-radius: 3px;
-	background-color: #ddd;
-}
-
-.tree-area a.selected {
-	font-weight: bold;
-	text-decoration: underline;
-}
-
-span.balance-area {
-	float: right; 
-	height: 13px;
-}
-
-span.balance-bold {
-	font-weight: bold;
-}
\ No newline at end of file
diff --git a/accounts/page/accounts_browser/accounts_browser.js b/accounts/page/accounts_browser/accounts_browser.js
index 235e6ab..66a40b1 100644
--- a/accounts/page/accounts_browser/accounts_browser.js
+++ b/accounts/page/accounts_browser/accounts_browser.js
@@ -8,7 +8,6 @@
 // see ledger
 
 pscript['onload_Accounts Browser'] = function(wrapper){
-	console.log($(wrapper).html());
 	wn.ui.make_app_page({
 		parent: wrapper,
 		single_column: true
@@ -122,14 +121,14 @@
 				}
 				
 				// bold
-				$('.balance-bold').removeClass('balance-bold'); // deselect
-				$(link).parent().find('.balance-area:first').addClass('balance-bold'); // select
+				$('.bold').removeClass('bold'); // deselect
+				$(link).parent().find('.balance-area:first').addClass('bold'); // select
 
 			},
 			onrender: function(treenode) {
 				if (ctype == 'Account' && treenode.data) {
 					if(treenode.data.balance) {
-						treenode.parent.append('<span class="balance-area">' 
+						treenode.parent.append('<span class="balance-area pull-right">' 
 							+ format_currency(treenode.data.balance, treenode.data.currency) 
 							+ '</span>');
 					}
@@ -142,7 +141,7 @@
 		var data = $(link).data('node-data');
 		if(!data) return;
 
-		link.toolbar = $('<span class="tree-node-toolbar"></span>').insertAfter(link);
+		link.toolbar = $('<span class="tree-node-toolbar highlight"></span>').insertAfter(link);
 		
 		var node_links = [];
 		// edit
diff --git a/hr/doctype/leave_application/leave_application.py b/hr/doctype/leave_application/leave_application.py
index f2f34d7..b547d3d 100755
--- a/hr/doctype/leave_application/leave_application.py
+++ b/hr/doctype/leave_application/leave_application.py
@@ -12,6 +12,7 @@
 class LeaveDayBlockedError(webnotes.ValidationError): pass
 class OverlapError(webnotes.ValidationError): pass
 class InvalidLeaveApproverError(webnotes.ValidationError): pass
+class LeaveApproverIdentityError(webnotes.ValidationError): pass
 	
 from webnotes.model.controller import DocListController
 class DocType(DocListController):
@@ -161,6 +162,10 @@
 			where parent=%s and role='Leave Approver'""", self.doc.leave_approver):
 				msgprint(get_fullname(self.doc.leave_approver) + ": " \
 					+ _("does not have role 'Leave Approver'"), raise_exception=InvalidLeaveApproverError)
+					
+		elif self.doc.docstatus==1 and len(leave_approvers) and self.doc.leave_approver != webnotes.session.user:
+			msgprint(_("Only the selected Leave Approver can submit this Leave Application"),
+				raise_exception=LeaveApproverIdentityError)
 			
 	def notify_employee(self, status):
 		employee = webnotes.doc("Employee", self.doc.employee)
diff --git a/hr/doctype/leave_application/test_leave_application.py b/hr/doctype/leave_application/test_leave_application.py
index ee15041..2c4f376 100644
--- a/hr/doctype/leave_application/test_leave_application.py
+++ b/hr/doctype/leave_application/test_leave_application.py
@@ -163,8 +163,8 @@
 		webnotes.set_user("test1@example.com")
 		application.doc.status = "Approved"
 		
-		from webnotes.model.bean import BeanPermissionError
-		self.assertRaises(BeanPermissionError, application.submit)
+		from hr.doctype.leave_application.leave_application import LeaveApproverIdentityError
+		self.assertRaises(LeaveApproverIdentityError, application.submit)
 
 		webnotes.conn.sql("""delete from `tabEmployee Leave Approver` where parent=%s""",
 			"_T-Employee-0001")
diff --git a/patches/1311/p06_update_user_properties.py b/patches/1311/p06_update_user_properties.py
index de19df2..51da19f 100644
--- a/patches/1311/p06_update_user_properties.py
+++ b/patches/1311/p06_update_user_properties.py
@@ -6,7 +6,9 @@
 
 def execute():
 	update_user_properties()
+	update_user_match()
 	update_permissions()
+	remove_duplicate_restrictions()
 	webnotes.clear_cache()
 
 def update_user_properties():
@@ -23,6 +25,49 @@
 				where defkey=%s and 
 				parent not in ('__global', 'Control Panel')""", (df[0].options, d.defkey))
 				
+def update_user_match():
+	import webnotes.defaults
+	doctype_matches = {}
+	for doctype, match in webnotes.conn.sql("""select parent, `match` from `tabDocPerm`
+		where `match` like %s""", "%:user"):
+		doctype_matches.setdefault(doctype, []).append(match)
+	
+	for doctype, user_matches in doctype_matches.items():
+		
+		# get permissions of this doctype
+		perms = webnotes.conn.sql("""select role, `match` from `tabDocPerm` 
+			where parent=%s and permlevel=0 and read=1""", doctype, as_dict=True)
+		
+		# for each user with roles of this doctype, check if match condition applies
+		for profile in webnotes.conn.sql_list("""select name from `tabProfile`
+			where enabled=1 and user_type='System User'"""):
+			
+			roles = webnotes.get_roles(profile)
+			
+			user_match = False
+			for perm in perms:
+				if perm.role in roles and (perm.match and \
+					(perm.match.endswith(":user") or perm.match.endswith(":profile"))):
+					user_match = True
+					break
+			
+			if not user_match:
+				continue
+			
+			# if match condition applies, restrict that user
+			# add that doc's restriction to that user
+			for match in user_matches:
+				for name in webnotes.conn.sql_list("""select name from `tab{doctype}`
+					where `{field}`=%s""".format(doctype=doctype, field=match.split(":")[0]), profile):
+					
+					webnotes.defaults.add_default(doctype, name, profile, "Restriction")
+
+def update_permissions():
+	# clear match conditions other than owner
+	webnotes.conn.sql("""update tabDocPerm set `match`=''
+		where ifnull(`match`,'') not in ('', 'owner')""")
+		
+def remove_duplicate_restrictions():
 	# remove duplicate restrictions (if they exist)
 	for d in webnotes.conn.sql("""select parent, defkey, defvalue, 
 		count(*) as cnt from tabDefaultValue 
@@ -30,9 +75,4 @@
 		group by parent, defkey, defvalue""", as_dict=1):
 		if d.cnt > 1:
 			webnotes.conn.sql("""delete from tabDefaultValue where parent=%s, defkey=%s, 
-				defvalue=%s limit %s""", (d.parent, d.defkey, d.defvalue, d.cnt-1))
-				
-def update_permissions():
-	# clear match conditions other than owner
-	webnotes.conn.sql("""update tabDocPerm set `match`=''
-		where ifnull(`match`,'') not in ('', 'owner')""")
\ No newline at end of file
+				defvalue=%s limit %s""", (d.parent, d.defkey, d.defvalue, d.cnt-1))
\ No newline at end of file
diff --git a/support/doctype/customer_issue/customer_issue.txt b/support/doctype/customer_issue/customer_issue.txt
index f9fbc6b..c677654 100644
--- a/support/doctype/customer_issue/customer_issue.txt
+++ b/support/doctype/customer_issue/customer_issue.txt
@@ -2,7 +2,7 @@
  {
   "creation": "2013-01-10 16:34:30", 
   "docstatus": 0, 
-  "modified": "2013-11-02 16:59:22", 
+  "modified": "2013-12-11 11:14:32", 
   "modified_by": "Administrator", 
   "owner": "harshada@webnotestech.com"
  }, 
@@ -13,7 +13,7 @@
   "is_submittable": 0, 
   "module": "Support", 
   "name": "__common__", 
-  "search_fields": "status,customer,customer_name,allocated_to,allocated_on, territory"
+  "search_fields": "status,customer,customer_name,territory"
  }, 
  {
   "doctype": "DocField", 
diff --git a/utilities/demo/make_demo.py b/utilities/demo/make_demo.py
index b98fd7a..87c0527 100644
--- a/utilities/demo/make_demo.py
+++ b/utilities/demo/make_demo.py
@@ -3,7 +3,7 @@
 
 import webnotes, os, datetime
 import webnotes.utils
-from webnotes.utils import random_string
+from webnotes.utils import random_string, cstr
 from webnotes.widgets import query_report
 import random
 import json
@@ -153,7 +153,7 @@
 		for po in list(set([r[0] for r in query_report.run(report)["result"] if r[0]!="Total"]))[:how_many("Purchase Receipt")]:
 			pr = webnotes.bean(make_purchase_receipt(po))
 			pr.doc.posting_date = current_date
-			pr.doc.fiscal_year = current_date.year
+			pr.doc.fiscal_year = cstr(current_date.year)
 			pr.insert()
 			try:
 				pr.submit()
@@ -169,7 +169,7 @@
 		for so in list(set([r[0] for r in query_report.run(report)["result"] if r[0]!="Total"]))[:how_many("Delivery Note")]:
 			dn = webnotes.bean(make_delivery_note(so))
 			dn.doc.posting_date = current_date
-			dn.doc.fiscal_year = current_date.year
+			dn.doc.fiscal_year = cstr(current_date.year)
 			dn.insert()
 			try:
 				dn.submit()
@@ -192,7 +192,7 @@
 			mr = webnotes.new_bean("Material Request")
 			mr.doc.material_request_type = "Purchase"
 			mr.doc.transaction_date = current_date
-			mr.doc.fiscal_year = current_date.year
+			mr.doc.fiscal_year = cstr(current_date.year)
 			mr.doclist.append({
 				"doctype": "Material Request Item",
 				"parentfield": "indent_details",
@@ -211,7 +211,7 @@
 			if row[0] != "Total":
 				sq = webnotes.bean(make_supplier_quotation(row[0]))
 				sq.doc.transaction_date = current_date
-				sq.doc.fiscal_year = current_date.year
+				sq.doc.fiscal_year = cstr(current_date.year)
 				sq.insert()
 				sq.submit()
 				webnotes.conn.commit()
@@ -224,7 +224,7 @@
 			if row[0] != "Total":
 				po = webnotes.bean(make_purchase_order(row[0]))
 				po.doc.transaction_date = current_date
-				po.doc.fiscal_year = current_date.year
+				po.doc.fiscal_year = cstr(current_date.year)
 				po.insert()
 				po.submit()
 				webnotes.conn.commit()
@@ -283,7 +283,7 @@
 	try:
 		st = webnotes.bean(make_stock_entry(pro_id, purpose))
 		st.doc.posting_date = current_date
-		st.doc.fiscal_year = current_date.year
+		st.doc.fiscal_year = cstr(current_date.year)
 		for d in st.doclist.get({"parentfield": "mtn_details"}):
 			d.expense_account = "Stock Adjustment - " + company_abbr
 			d.cost_center = "Main - " + company_abbr
@@ -303,7 +303,7 @@
 		"customer": get_random("Customer"),
 		"order_type": "Sales",
 		"transaction_date": current_date,
-		"fiscal_year": current_date.year
+		"fiscal_year": cstr(current_date.year)
 	}])
 	
 	add_random_children(b, {