Merge branch 'master' of github.com:webnotes/erpnext
diff --git a/accounts/doctype/sales_invoice/sales_invoice.py b/accounts/doctype/sales_invoice/sales_invoice.py
index 7068c72..e5e53f2 100644
--- a/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/accounts/doctype/sales_invoice/sales_invoice.py
@@ -108,6 +108,8 @@
 		self.update_time_log_batch(self.doc.name)
 		self.convert_to_recurring()
 
+	def before_cancel(self):
+		self.update_time_log_batch(None)
 
 	def on_cancel(self):
 		if cint(self.doc.is_pos) == 1:
@@ -122,8 +124,7 @@
 		sales_com_obj.check_stop_sales_order(self)
 		self.check_next_docstatus()
 		sales_com_obj.update_prevdoc_detail(0, self)
-
-		self.update_time_log_batch(None)
+		
 		self.make_gl_entries(is_cancel=1)
 
 	def on_update_after_submit(self):
diff --git a/accounts/doctype/sales_invoice/test_sales_invoice.py b/accounts/doctype/sales_invoice/test_sales_invoice.py
index 9059978..fb290d2 100644
--- a/accounts/doctype/sales_invoice/test_sales_invoice.py
+++ b/accounts/doctype/sales_invoice/test_sales_invoice.py
@@ -33,10 +33,10 @@
 		tlb = webnotes.bean("Time Log Batch", "_T-Time Log Batch-00001")
 		tlb.submit()
 		
-		w = webnotes.bean(webnotes.copy_doclist(test_records[0]))
-		w.doclist[1].time_log_batch = "_T-Time Log Batch-00001"
-		w.insert()
-		w.submit()
+		si = webnotes.bean(webnotes.copy_doclist(test_records[0]))
+		si.doclist[1].time_log_batch = "_T-Time Log Batch-00001"
+		si.insert()
+		si.submit()
 		
 		self.assertEquals(webnotes.conn.get_value("Time Log Batch", "_T-Time Log Batch-00001", "status"), 
 			"Billed")
@@ -44,7 +44,7 @@
 		self.assertEquals(webnotes.conn.get_value("Time Log", "_T-Time Log-00001", "status"), 
 			"Billed")
 
-		w.cancel()
+		si.cancel()
 
 		self.assertEquals(webnotes.conn.get_value("Time Log Batch", "_T-Time Log Batch-00001", "status"), 
 			"Submitted")
diff --git a/patches/patch_list.py b/patches/patch_list.py
index 0870cee..d1110da 100644
--- a/patches/patch_list.py
+++ b/patches/patch_list.py
@@ -203,4 +203,5 @@
 	"execute:(not webnotes.conn.exists('UOM', 'Hour')) and webnotes.doc({'uom_name': 'Unit', 'doctype': 'UOM', 'name': 'Hour'}).insert()",
 	"patches.february_2013.p09_remove_cancelled_warehouses",
 	"patches.march_2013.update_po_prevdoc_doctype",
+	"patches.february_2013.p09_timesheets",
 ]
\ No newline at end of file
diff --git a/setup/doctype/item_group/item_group.py b/setup/doctype/item_group/item_group.py
index 13112fe..ba4ea77 100644
--- a/setup/doctype/item_group/item_group.py
+++ b/setup/doctype/item_group/item_group.py
@@ -31,9 +31,12 @@
 		
 		self.validate_name_with_item()
 		
+		from website.helpers.product import invalidate_cache_for
+		
+		
 		if self.doc.show_in_website:
-			# webpage updates
 			from website.utils import update_page_name
+			# webpage updates
 			page_name = self.doc.name
 			if webnotes.conn.get_value("Product Settings", None, 
 				"default_product_category")==self.doc.name:
@@ -43,8 +46,17 @@
 				
 			update_page_name(self.doc, page_name)
 			
-			from website.helpers.product import invalidate_cache_for
 			invalidate_cache_for(self.doc.name)
+
+		elif self.doc.page_name:
+			# if unchecked show in website
+			
+			from website.utils import delete_page_cache
+			delete_page_cache(self.doc.page_name)
+			
+			invalidate_cache_for(self.doc.name)
+			
+			webnotes.conn.set(self.doc, "page_name", None)
 		
 	def validate_name_with_item(self):
 		if webnotes.conn.exists("Item", self.doc.name):
diff --git a/stock/doctype/item/item.py b/stock/doctype/item/item.py
index 4c78347..334af298 100644
--- a/stock/doctype/item/item.py
+++ b/stock/doctype/item/item.py
@@ -39,9 +39,8 @@
 	def on_update(self):
 		self.validate_name_with_item_group()
 		
-		if self.doc.show_in_website:
-			# webpage updates
-			self.update_website()
+		# webpage updates
+		self.update_website()
 			
 		bin = sql("select stock_uom from `tabBin` where item_code = '%s' " % self.doc.item_code)
 		if bin and cstr(bin[0][0]) != cstr(self.doc.stock_uom):
@@ -81,19 +80,33 @@
 				self.doc.name, raise_exception=1)
 
 	def update_website(self):
-		from website.utils import update_page_name
-		if self.doc.name==self.doc.item_name:
-			page_name_from = self.doc.name
-		else:
-			page_name_from = self.doc.name + " " + self.doc.item_name
+		def _invalidate_cache():
+			from website.helpers.product import invalidate_cache_for
+			
+			invalidate_cache_for(self.doc.item_group)
 
-		update_page_name(self.doc, page_name_from)
+			[invalidate_cache_for(d.item_group) for d in \
+				self.doclist.get({"doctype":"Website Item Group"})]
 		
-		from website.helpers.product import invalidate_cache_for
-		invalidate_cache_for(self.doc.item_group)
+		if self.doc.show_in_website:
+			from website.utils import update_page_name
+			if self.doc.name==self.doc.item_name:
+				page_name_from = self.doc.name
+			else:
+				page_name_from = self.doc.name + " " + self.doc.item_name
 
-		[invalidate_cache_for(d.item_group) for d in \
-			self.doclist.get({"doctype":"Website Item Group"})]
+			update_page_name(self.doc, page_name_from)
+			
+			_invalidate_cache()
+		
+		elif self.doc.page_name:
+			# if unchecked show in website
+			from website.utils import delete_page_cache
+			delete_page_cache(self.doc.page_name)
+			
+			_invalidate_cache()
+			
+			webnotes.conn.set(self.doc, "page_name", None)
 
 	# On delete 1. Delete BIN (if none of the corrosponding transactions present, it gets deleted. if present, rolled back due to exception)
 	def on_trash(self):