added company in leave application and global holiday block list
diff --git a/hr/doctype/holiday_block_list/holiday_block_list.py b/hr/doctype/holiday_block_list/holiday_block_list.py
index 619f373..87ab705 100644
--- a/hr/doctype/holiday_block_list/holiday_block_list.py
+++ b/hr/doctype/holiday_block_list/holiday_block_list.py
@@ -23,7 +23,8 @@
 test_records = [[{
 		"doctype":"Holiday Block List",
 		"holiday_block_list_name": "_Test Holiday Block List",
-		"year": "_Test Fiscal Year"
+		"year": "_Test Fiscal Year",
+		"company": "_Test Company"
 	}, {
 		"doctype": "Holiday Block List Date",
 		"parent": "_Test Holiday Block List",
diff --git a/hr/doctype/holiday_block_list/holiday_block_list.txt b/hr/doctype/holiday_block_list/holiday_block_list.txt
index 31b2f98..23b70e2 100644
--- a/hr/doctype/holiday_block_list/holiday_block_list.txt
+++ b/hr/doctype/holiday_block_list/holiday_block_list.txt
@@ -2,7 +2,7 @@
  {
   "creation": "2013-02-04 15:31:29", 
   "docstatus": 0, 
-  "modified": "2013-02-06 14:39:09", 
+  "modified": "2013-02-07 08:47:25", 
   "modified_by": "Administrator", 
   "owner": "Administrator"
  }, 
@@ -54,6 +54,21 @@
   "reqd": 1
  }, 
  {
+  "doctype": "DocField", 
+  "fieldname": "company", 
+  "fieldtype": "Link", 
+  "label": "Company", 
+  "options": "Company", 
+  "reqd": 1
+ }, 
+ {
+  "description": "If not checked, the list will have to be added to each Department where it has to be applied.", 
+  "doctype": "DocField", 
+  "fieldname": "applies_to_all_departments", 
+  "fieldtype": "Check", 
+  "label": "Applies to all Departments"
+ }, 
+ {
   "description": "Stop users from making Leave Applications on following days.", 
   "doctype": "DocField", 
   "fieldname": "block_days", 
diff --git a/hr/doctype/leave_application/leave_application.py b/hr/doctype/leave_application/leave_application.py
index cab8f17..9c6278d 100755
--- a/hr/doctype/leave_application/leave_application.py
+++ b/hr/doctype/leave_application/leave_application.py
@@ -46,22 +46,39 @@
 				raise_exception=True)
 
 	def validate_block_days(self):
-		from_date = getdate(self.doc.from_date)
-		to_date = getdate(self.doc.to_date)
-		
+		for block_list in self.get_applicable_block_lists():
+			self.check_block_dates(block_list)
+
+	def get_applicable_block_lists(self):
+		block_lists = []
+		def add_block_list(block_list):
+			if block_list:
+				if not self.is_user_in_allow_list(block_list):
+					block_lists.append(block_list)
+
+		# per department
 		department = webnotes.conn.get_value("Employee", self.doc.employee, "department")
 		if department:
 			block_list = webnotes.conn.get_value("Department", department, "holiday_block_list")
-			if block_list:
-				if self.is_user_in_allow_list(block_list):
-					return
-				for d in webnotes.conn.sql("""select block_date, reason from
-					`tabHoliday Block List Date` where parent=%s""", block_list, as_dict=1):
-					block_date = getdate(d.block_date)
-					if block_date > from_date and block_date < to_date:
-						webnotes.msgprint(_("You cannot apply for a leave on the following date because it is blocked")
-							+ ": " + formatdate(d.block_date) + _(" Reason: ") + d.reason)
-						raise LeaveDayBlockedError
+			add_block_list(block_list)
+
+		# global
+		for block_list in webnotes.conn.sql_list("""select name from `tabHoliday Block List`
+			where ifnull(applies_to_all_departments,0)=1 and company=%s""", self.doc.company):
+			add_block_list(block_list)
+				
+		return block_lists
+
+	def check_block_dates(self, block_list):
+		from_date = getdate(self.doc.from_date)
+		to_date = getdate(self.doc.to_date)
+		for d in webnotes.conn.sql("""select block_date, reason from
+			`tabHoliday Block List Date` where parent=%s""", block_list, as_dict=1):
+			block_date = getdate(d.block_date)
+			if block_date > from_date and block_date < to_date:
+				webnotes.msgprint(_("You cannot apply for a leave on the following date because it is blocked")
+					+ ": " + formatdate(d.block_date) + _(" Reason: ") + d.reason)
+				raise LeaveDayBlockedError
 
 	def is_user_in_allow_list(self, block_list):
 		return webnotes.session.user in webnotes.conn.sql_list("""select allow_user
diff --git a/hr/doctype/leave_application/leave_application.txt b/hr/doctype/leave_application/leave_application.txt
index 4436d3c..e105dff 100644
--- a/hr/doctype/leave_application/leave_application.txt
+++ b/hr/doctype/leave_application/leave_application.txt
@@ -1,8 +1,8 @@
 [
  {
-  "creation": "2013-01-10 16:34:14", 
+  "creation": "2013-02-02 14:40:08", 
   "docstatus": 0, 
-  "modified": "2013-02-01 10:34:14", 
+  "modified": "2013-02-07 08:54:22", 
   "modified_by": "Administrator", 
   "owner": "Administrator"
  }, 
@@ -182,6 +182,15 @@
  }, 
  {
   "doctype": "DocField", 
+  "fieldname": "company", 
+  "fieldtype": "Link", 
+  "label": "Company", 
+  "options": "Company", 
+  "permlevel": 0, 
+  "reqd": 1
+ }, 
+ {
+  "doctype": "DocField", 
   "fieldname": "letter_head", 
   "fieldtype": "Link", 
   "label": "Letter Head", 
@@ -241,4 +250,4 @@
   "role": "Leave Approver", 
   "submit": 0
  }
-]
+]
\ No newline at end of file
diff --git a/hr/doctype/leave_application/test_leave_application.py b/hr/doctype/leave_application/test_leave_application.py
index e485289..e7c1bcc 100644
--- a/hr/doctype/leave_application/test_leave_application.py
+++ b/hr/doctype/leave_application/test_leave_application.py
@@ -4,20 +4,33 @@
 from hr.doctype.leave_application.leave_application import LeaveDayBlockedError
 
 class TestLeaveApplication(unittest.TestCase):
+	def get_application(self):
+		application = webnotes.model_wrapper(test_records[1])
+		application.doc.from_date = "2013-01-01"
+		application.doc.to_date = "2013-01-05"
+		return application
+
 	def test_block_list(self):
 		import webnotes
 		webnotes.conn.set_value("Employee", "_T-Employee-0001", "department", 
 			"_Test Department with Block List")
 		
-		application = webnotes.model_wrapper(test_records[1])
-		application.doc.from_date = "2013-01-01"
-		application.doc.to_date = "2013-01-05"
+		application = self.get_application()
 		self.assertRaises(LeaveDayBlockedError, application.insert)
 		
 		webnotes.session.user = "test1@erpnext.com"
 		webnotes.get_obj("Profile", "test1@erpnext.com").add_role("HR User")
 		self.assertTrue(application.insert())
 		
+	def test_global_block_list(self):
+		application = self.get_application()
+		webnotes.conn.set_value("Holiday Block List", "_Test Holiday Block List", 
+			"applies_to_all_departments", 1)
+		webnotes.conn.set_value("Employee", "_T-Employee-0001", "department", 
+			"_Test Department")
+		webnotes.session.user = "test@erpnext.com"
+
+		self.assertRaises(LeaveDayBlockedError, application.insert)
 
 test_records = [
 	[{
@@ -35,7 +48,8 @@
 		"to_date": "2013-05-05",
 		"posting_date": "2013-01-02",
 		"fiscal_year": "_Test Fiscal Year",
-		"employee": "_T-Employee-0001"
+		"employee": "_T-Employee-0001",
+		"company": "_Test Company"
 	}]]
 
 if __name__=="__main__":
diff --git a/patches/february_2013/update_company_in_leave_application.py b/patches/february_2013/update_company_in_leave_application.py
new file mode 100644
index 0000000..098c7e3
--- /dev/null
+++ b/patches/february_2013/update_company_in_leave_application.py
@@ -0,0 +1,9 @@
+def execute():
+	import webnotes
+	webnotes.conn.sql("""update `tabLeave Application`, `tabEmployee` set
+		`tabLeave Application`.company = `tabEmployee`.company where
+		`tabLeave Application`.employee = `tabEmployee`.name""")
+		
+	company = webnotes.conn.get_default("company")
+	webnotes.conn.sql("""update `tabLeave Application`
+		set company = %s where ifnull(company,'')=''""", company)
\ No newline at end of file
diff --git a/patches/patch_list.py b/patches/patch_list.py
index cf9c189..467c6b0 100644
--- a/patches/patch_list.py
+++ b/patches/patch_list.py
@@ -166,4 +166,5 @@
 	"patches.february_2013.remove_sales_order_pending_items",
 	"patches.february_2013.account_negative_balance",
 	"patches.february_2013.remove_account_utils_folder",
+	"patches.february_2013.update_company_in_leave_application"
 ]
\ No newline at end of file