Merge branch 'shf_rename' of github.com:webnotes/erpnext into shf_rename
diff --git a/.gitignore b/.gitignore
index 95255be..29bb624 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,7 +1,7 @@
 *.pyc
 *.comp.js
 .DS_Store
-user_files
+files
 patch.log
 lib
 conf.py
diff --git a/css/all-app.css b/css/all-app.css
index 8ee043f..41feae8 100644
--- a/css/all-app.css
+++ b/css/all-app.css
@@ -1728,7 +1728,6 @@
 	padding: 0px;
 	font-size: 14px;
 	color: #000;
-	background-color: #e2e2e2;
 }
 
 /* font settings */
@@ -1848,12 +1847,12 @@
 div#body_div {
 	display: none;
 	padding-right: 7px;
-	width: 900px;
-	margin: auto;
-	margin-top: 56px;
+	padding-top: 70px;
+	padding-bottom: 50px;
 }
 
 .content {
+	margin: auto;
 	width: 900px;
 }
 
@@ -1864,23 +1863,19 @@
     transition: background 1s ease-in;
 }
 
-footer {
-	width: 900px;
-	margin: auto;
-}
 header .container {
 	width: 900px;
 	margin: auto;
 }
 
 @media (max-width: 1200px) {
-	div#body_div, header .container, .content, #opened-page-selector, footer {
+	header .container, .content {
 		width: 900px;
 	}
 }
 
 @media (min-width: 1200px) {
-	div#body_div, header .container, .content, #opened-page-selector, footer {
+	header .container, .content {
 		width: 1100px;
 	}
 }
@@ -1931,7 +1926,6 @@
 	-webkit-border-radius: 5px;
 	-moz-border-radius: 5px;
 	border-radius: 5px;	
-	margin-bottom: 30px;
 	overflow: hidden;
 }
 
@@ -3581,7 +3575,6 @@
 }
 
 body {
-	background: url(../images/redbeech.jpg) repeat;
 	color: #616161;
 }
 
diff --git a/css/all-web.css b/css/all-web.css
index cf8fe99..c3139d4 100644
--- a/css/all-web.css
+++ b/css/all-web.css
@@ -1196,6 +1196,387 @@
 }
 
 /*
+ *	lib/css/bootstrap/icons.css
+ */
+[class^="icon-"], [class*=" icon-"] {
+  display: inline-block;
+  width: 14px;
+  height: 14px;
+  line-height: 14px;
+  vertical-align: text-top;
+  background-image: url("../lib/images/icons/glyphicons-halflings.png");
+  background-position: 14px 14px;
+  background-repeat: no-repeat;
+  *margin-right: .3em;
+}
+[class^="icon-"]:last-child, [class*=" icon-"]:last-child {
+  *margin-left: 0;
+}
+.icon-white {
+  background-image: url("../lib/images/icons/glyphicons-halflings-white.png");
+}
+.icon-glass {
+  background-position: 0      0;
+}
+.icon-music {
+  background-position: -24px 0;
+}
+.icon-search {
+  background-position: -48px 0;
+}
+.icon-envelope {
+  background-position: -72px 0;
+}
+.icon-heart {
+  background-position: -96px 0;
+}
+.icon-star {
+  background-position: -120px 0;
+}
+.icon-star-empty {
+  background-position: -144px 0;
+}
+.icon-user {
+  background-position: -168px 0;
+}
+.icon-film {
+  background-position: -192px 0;
+}
+.icon-th-large {
+  background-position: -216px 0;
+}
+.icon-th {
+  background-position: -240px 0;
+}
+.icon-th-list {
+  background-position: -264px 0;
+}
+.icon-ok {
+  background-position: -288px 0;
+}
+.icon-remove {
+  background-position: -312px 0;
+}
+.icon-zoom-in {
+  background-position: -336px 0;
+}
+.icon-zoom-out {
+  background-position: -360px 0;
+}
+.icon-off {
+  background-position: -384px 0;
+}
+.icon-signal {
+  background-position: -408px 0;
+}
+.icon-cog {
+  background-position: -432px 0;
+}
+.icon-trash {
+  background-position: -456px 0;
+}
+.icon-home {
+  background-position: 0 -24px;
+}
+.icon-file {
+  background-position: -24px -24px;
+}
+.icon-time {
+  background-position: -48px -24px;
+}
+.icon-road {
+  background-position: -72px -24px;
+}
+.icon-download-alt {
+  background-position: -96px -24px;
+}
+.icon-download {
+  background-position: -120px -24px;
+}
+.icon-upload {
+  background-position: -144px -24px;
+}
+.icon-inbox {
+  background-position: -168px -24px;
+}
+.icon-play-circle {
+  background-position: -192px -24px;
+}
+.icon-repeat {
+  background-position: -216px -24px;
+}
+.icon-refresh {
+  background-position: -240px -24px;
+}
+.icon-list-alt {
+  background-position: -264px -24px;
+}
+.icon-lock {
+  background-position: -287px -24px;
+}
+.icon-flag {
+  background-position: -312px -24px;
+}
+.icon-headphones {
+  background-position: -336px -24px;
+}
+.icon-volume-off {
+  background-position: -360px -24px;
+}
+.icon-volume-down {
+  background-position: -384px -24px;
+}
+.icon-volume-up {
+  background-position: -408px -24px;
+}
+.icon-qrcode {
+  background-position: -432px -24px;
+}
+.icon-barcode {
+  background-position: -456px -24px;
+}
+.icon-tag {
+  background-position: 0 -48px;
+}
+.icon-tags {
+  background-position: -25px -48px;
+}
+.icon-book {
+  background-position: -48px -48px;
+}
+.icon-bookmark {
+  background-position: -72px -48px;
+}
+.icon-print {
+  background-position: -96px -48px;
+}
+.icon-camera {
+  background-position: -120px -48px;
+}
+.icon-font {
+  background-position: -144px -48px;
+}
+.icon-bold {
+  background-position: -167px -48px;
+}
+.icon-italic {
+  background-position: -192px -48px;
+}
+.icon-text-height {
+  background-position: -216px -48px;
+}
+.icon-text-width {
+  background-position: -240px -48px;
+}
+.icon-align-left {
+  background-position: -264px -48px;
+}
+.icon-align-center {
+  background-position: -288px -48px;
+}
+.icon-align-right {
+  background-position: -312px -48px;
+}
+.icon-align-justify {
+  background-position: -336px -48px;
+}
+.icon-list {
+  background-position: -360px -48px;
+}
+.icon-indent-left {
+  background-position: -384px -48px;
+}
+.icon-indent-right {
+  background-position: -408px -48px;
+}
+.icon-facetime-video {
+  background-position: -432px -48px;
+}
+.icon-picture {
+  background-position: -456px -48px;
+}
+.icon-pencil {
+  background-position: 0 -72px;
+}
+.icon-map-marker {
+  background-position: -24px -72px;
+}
+.icon-adjust {
+  background-position: -48px -72px;
+}
+.icon-tint {
+  background-position: -72px -72px;
+}
+.icon-edit {
+  background-position: -96px -72px;
+}
+.icon-share {
+  background-position: -120px -72px;
+}
+.icon-check {
+  background-position: -144px -72px;
+}
+.icon-move {
+  background-position: -168px -72px;
+}
+.icon-step-backward {
+  background-position: -192px -72px;
+}
+.icon-fast-backward {
+  background-position: -216px -72px;
+}
+.icon-backward {
+  background-position: -240px -72px;
+}
+.icon-play {
+  background-position: -264px -72px;
+}
+.icon-pause {
+  background-position: -288px -72px;
+}
+.icon-stop {
+  background-position: -312px -72px;
+}
+.icon-forward {
+  background-position: -336px -72px;
+}
+.icon-fast-forward {
+  background-position: -360px -72px;
+}
+.icon-step-forward {
+  background-position: -384px -72px;
+}
+.icon-eject {
+  background-position: -408px -72px;
+}
+.icon-chevron-left {
+  background-position: -432px -72px;
+}
+.icon-chevron-right {
+  background-position: -456px -72px;
+}
+.icon-plus-sign {
+  background-position: 0 -96px;
+}
+.icon-minus-sign {
+  background-position: -24px -96px;
+}
+.icon-remove-sign {
+  background-position: -48px -96px;
+}
+.icon-ok-sign {
+  background-position: -72px -96px;
+}
+.icon-question-sign {
+  background-position: -96px -96px;
+}
+.icon-info-sign {
+  background-position: -120px -96px;
+}
+.icon-screenshot {
+  background-position: -144px -96px;
+}
+.icon-remove-circle {
+  background-position: -168px -96px;
+}
+.icon-ok-circle {
+  background-position: -192px -96px;
+}
+.icon-ban-circle {
+  background-position: -216px -96px;
+}
+.icon-arrow-left {
+  background-position: -240px -96px;
+}
+.icon-arrow-right {
+  background-position: -264px -96px;
+}
+.icon-arrow-up {
+  background-position: -289px -96px;
+}
+.icon-arrow-down {
+  background-position: -312px -96px;
+}
+.icon-share-alt {
+  background-position: -336px -96px;
+}
+.icon-resize-full {
+  background-position: -360px -96px;
+}
+.icon-resize-small {
+  background-position: -384px -96px;
+}
+.icon-plus {
+  background-position: -408px -96px;
+}
+.icon-minus {
+  background-position: -433px -96px;
+}
+.icon-asterisk {
+  background-position: -456px -96px;
+}
+.icon-exclamation-sign {
+  background-position: 0 -120px;
+}
+.icon-gift {
+  background-position: -24px -120px;
+}
+.icon-leaf {
+  background-position: -48px -120px;
+}
+.icon-fire {
+  background-position: -72px -120px;
+}
+.icon-eye-open {
+  background-position: -96px -120px;
+}
+.icon-eye-close {
+  background-position: -120px -120px;
+}
+.icon-warning-sign {
+  background-position: -144px -120px;
+}
+.icon-plane {
+  background-position: -168px -120px;
+}
+.icon-calendar {
+  background-position: -192px -120px;
+}
+.icon-random {
+  background-position: -216px -120px;
+}
+.icon-comment {
+  background-position: -240px -120px;
+}
+.icon-magnet {
+  background-position: -264px -120px;
+}
+.icon-chevron-up {
+  background-position: -288px -120px;
+}
+.icon-chevron-down {
+  background-position: -313px -119px;
+}
+.icon-retweet {
+  background-position: -336px -120px;
+}
+.icon-shopping-cart {
+  background-position: -360px -120px;
+}
+.icon-folder-close {
+  background-position: -384px -120px;
+}
+.icon-folder-open {
+  background-position: -408px -120px;
+}
+.icon-resize-vertical {
+  background-position: -432px -119px;
+}
+.icon-resize-horizontal {
+  background-position: -456px -118px;
+}
+
+/*
  *	lib/css/legacy/body.css
  */
 html { 
@@ -1208,7 +1589,6 @@
 	padding: 0px;
 	font-size: 14px;
 	color: #000;
-	background-color: #e2e2e2;
 }
 
 /* font settings */
@@ -1328,12 +1708,12 @@
 div#body_div {
 	display: none;
 	padding-right: 7px;
-	width: 900px;
-	margin: auto;
-	margin-top: 56px;
+	padding-top: 70px;
+	padding-bottom: 50px;
 }
 
 .content {
+	margin: auto;
 	width: 900px;
 }
 
@@ -1344,23 +1724,19 @@
     transition: background 1s ease-in;
 }
 
-footer {
-	width: 900px;
-	margin: auto;
-}
 header .container {
 	width: 900px;
 	margin: auto;
 }
 
 @media (max-width: 1200px) {
-	div#body_div, header .container, .content, #opened-page-selector, footer {
+	header .container, .content {
 		width: 900px;
 	}
 }
 
 @media (min-width: 1200px) {
-	div#body_div, header .container, .content, #opened-page-selector, footer {
+	header .container, .content {
 		width: 1100px;
 	}
 }
@@ -1411,7 +1787,6 @@
 	-webkit-border-radius: 5px;
 	-moz-border-radius: 5px;
 	border-radius: 5px;	
-	margin-bottom: 30px;
 	overflow: hidden;
 }
 
@@ -1898,7 +2273,6 @@
 }
 
 body {
-	background: url(../images/redbeech.jpg) repeat;
 	color: #616161;
 }
 
@@ -1952,12 +2326,13 @@
 /*
  *	erpnext/website/css/website.css
  */
-div#body_div, header .container, .content, #opened-page-selector, footer {
+header .container, .content {
 	width: 900px;
 }
 
 div#body_div {
-	margin-top: 90px;
+	padding-top: 90px;
+	min-height: 400px;
 }
 
 p, li {
@@ -2016,19 +2391,23 @@
 	background-color: #444;
 }
 
+
 footer {
-	color: #777;	
+	background-color: #eee;
+	box-shadow: inset 0 10px 10px rgba(0,0,0,0.3), inset 0 3px 3px rgba(0,0,0,0.3);
+	border-top: 1px solid #555;
+	padding-top: 10px;
+	text-align: center;
 }
 
 .web-footer {
 	color: inherit;
-	text-align: center;
-	margin: 10px;
+	padding: 10px;
 	line-height: 1.7;
 }
 
 .web-footer div, .web-footer a {
-	font-size: 14px;
+	font-size: 12px;
 }
 
 .web-footer-menu {
@@ -2047,10 +2426,20 @@
 	border-right: 1px solid #999;
 }
 
+.web-footer-menu ul li:first-child {
+	padding-left: 0px;
+}
+
 .web-footer-menu ul li:last-child {
 	border-right: 0px solid #777 !important;
 }
 
+.web-footer-powered {
+	color: #888;
+	float: right;
+	margin-top: -12px;
+}
+
 /* slide view */
 
 .next-slide {
diff --git a/erpnext/accounts/doctype/gl_control/gl_control.py b/erpnext/accounts/doctype/gl_control/gl_control.py
index 84fea75..2edd2dc 100644
--- a/erpnext/accounts/doctype/gl_control/gl_control.py
+++ b/erpnext/accounts/doctype/gl_control/gl_control.py
@@ -198,10 +198,17 @@
 	# ----------------
 	def save_entries(self, cancel, adv_adj, update_outstanding):
 		for le in self.entries:
-			# cancel
-			if cancel or flt(le.debit) < 0 or flt(le.credit) < 0:
+			#toggle debit, credit if negative entry
+			if flt(le.debit) < 0 or flt(le.credit) < 0:
 				tmp=le.debit
 				le.debit, le.credit = abs(flt(le.credit)), abs(flt(tmp))
+			
+			# toggled debit/credit in two separate condition because both should be executed at the 
+			# time of cancellation when there is negative amount (tax discount)
+			if cancel:
+				tmp=le.debit
+				le.debit, le.credit = abs(flt(le.credit)), abs(flt(tmp))
+
 
 			le_obj = get_obj(doc=le)
 			# validate except on_cancel
diff --git a/erpnext/accounts/doctype/multi_ledger_report/multi_ledger_report.py b/erpnext/accounts/doctype/multi_ledger_report/multi_ledger_report.py
index 88a31f2..79ccfa9 100755
--- a/erpnext/accounts/doctype/multi_ledger_report/multi_ledger_report.py
+++ b/erpnext/accounts/doctype/multi_ledger_report/multi_ledger_report.py
@@ -49,14 +49,14 @@
 	
 	def add_header(self):
 		title = 'Ledger Balances Between ' + getdate(self.doc.from_date).strftime('%d-%m-%Y') + ' and ' + getdate(self.doc.to_date).strftime('%d-%m-%Y')
-		return [[title], ['Account', 'Opening(Dr)', 'Opening (Cr)', 'Debit', 'Credit', 'Closing(Dr)', 'Closing(Cr)'], ['', '', '', '', '', '', '', 'Posting Date', 'Voucher Type', 'Voucher No', 'Debit', 'Credit', 'Remarks']]
+		return [[title], ['Account', 'Posting Date', 'Voucher Type', 'Voucher No', 'Debit', 'Credit', 'Remarks']]
 		
 
 
 	def get_account_subtree(self, acc):		
 		return sql("""
 			SELECT 
-				CONCAT(REPEAT('    ', COUNT(parent.name) - (sub_tree.depth + 1)), node.name) as account, 
+				CONCAT(REPEAT('     ', COUNT(parent.name) - (sub_tree.depth + 1)), node.name) as account, 
 				node.lft AS lft, node.rgt AS rgt, 
 				node.debit_or_credit as dr_or_cr, node.group_or_ledger as group_or_ledger, node.is_pl_account as is_pl_account
 			FROM tabAccount AS node,
@@ -78,7 +78,7 @@
 
 
 
-	def show_acc_summary(self, glc, acc_det):
+	def get_acc_summary(self, glc, acc_det):
 		from_date_year = self.get_year(add_days(self.doc.from_date, -1))
 		to_date_year = self.get_year(self.doc.to_date)
 		acc = acc_det['account'].strip()
@@ -104,8 +104,8 @@
 		if acc_det['dr_or_cr'] == 'Credit':
 			opening, closing = -1*opening, -1*closing
 
-		return [acc_det['account'], flt(opening>0 and opening or 0), flt(opening<0 and -opening or 0), 
-				debit, credit, flt(closing>0.01 and closing or 0), flt(closing<-0.01 and -closing or 0)]
+		return flt(opening>0 and opening or 0), flt(opening<0 and -opening or 0), \
+			debit, credit, flt(closing>0.01 and closing or 0), flt(closing<-0.01 and -closing or 0)
 
 
 	def show_gl_entries(self, acc):
@@ -113,7 +113,7 @@
 		gle = sql("select posting_date, voucher_type, voucher_no, debit, credit, remarks from `tabGL Entry` WHERE account = %s and posting_date >= %s AND posting_date <= %s and ifnull(is_opening,	'No') = 'No' and ifnull(is_cancelled, 'No') = 'No'", (acc, self.doc.from_date, self.doc.to_date), as_dict=1)
 		entries, dr, cr = [], 0, 0
 		for d in gle:
-			entries.append(['', '', '', '', '', '', '', d['posting_date'], d['voucher_type'], d['voucher_no'], d['debit'], d['credit'], d['remarks']])
+			entries.append(['', d['posting_date'], d['voucher_type'], d['voucher_no'], d['debit'], d['credit'], d['remarks']])
 		return entries
 
 
@@ -133,13 +133,17 @@
 			sub_tree = self.get_account_subtree(d.account)
 
 			for acc_det in sub_tree:
-				acc_summary = self.show_acc_summary(glc, acc_det)
-				res.append(acc_summary)
-				
-				# Show gl entries if account is ledger
-				if acc_det['group_or_ledger'] == 'Ledger' and (acc_summary[3] or acc_summary[4]):
-					gle = self.show_gl_entries(acc_det['account'].strip())
-					res += gle
-
+				acc_summary = self.get_acc_summary(glc, acc_det)
+				if acc_summary[0] or acc_summary[1] or acc_summary[2] or acc_summary[3] or acc_summary[4] or acc_summary[5]:
+					res.append([acc_det['account']])
+					# Show gl entries if account is ledger
+					if acc_det['group_or_ledger'] == 'Ledger' and (acc_summary[2] or acc_summary[3]):
+						gle = self.show_gl_entries(acc_det['account'].strip())
+						res += gle
+	
+					# Totals
+					res.append(['', '', '', 'Total Debit/Credit', acc_summary[2], acc_summary[3]])
+					res.append(['', '', '', 'Opening Balance', acc_summary[0], acc_summary[1]])
+					res.append(['', '', '', 'Closing Balance', acc_summary[4], acc_summary[5]])
 
 		return res
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.txt b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.txt
index 666cd1c..18bd789 100755
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.txt
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.txt
@@ -5,7 +5,7 @@
 	{
 		'creation': '2012-04-13 11:56:17',
 		'docstatus': 0,
-		'modified': '2012-04-23 12:08:52',
+		'modified': '2012-04-27 11:21:21',
 		'modified_by': u'Administrator',
 		'owner': u'Administrator'
 	},
@@ -188,20 +188,6 @@
 
 	# DocField
 	{
-		'doctype': u'DocField',
-		'fieldname': u'amended_from',
-		'fieldtype': u'Link',
-		'label': u'Amended From',
-		'no_copy': 1,
-		'oldfieldname': u'amended_from',
-		'oldfieldtype': u'Link',
-		'options': u'Purchase Invoice',
-		'permlevel': 1,
-		'print_hide': 1
-	},
-
-	# DocField
-	{
 		'colour': u'White:FFF',
 		'doctype': u'DocField',
 		'fieldname': u'supplier',
@@ -361,6 +347,20 @@
 
 	# DocField
 	{
+		'doctype': u'DocField',
+		'fieldname': u'amended_from',
+		'fieldtype': u'Link',
+		'label': u'Amended From',
+		'no_copy': 1,
+		'oldfieldname': u'amended_from',
+		'oldfieldtype': u'Link',
+		'options': u'Purchase Invoice',
+		'permlevel': 1,
+		'print_hide': 1
+	},
+
+	# DocField
+	{
 		'description': u'The date at which current entry is corrected in the system.',
 		'doctype': u'DocField',
 		'fieldname': u'amendment_date',
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.js b/erpnext/buying/doctype/purchase_order/purchase_order.js
index 33dc481..096fec83 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order.js
+++ b/erpnext/buying/doctype/purchase_order/purchase_order.js
@@ -60,22 +60,10 @@
 	if (!cur_frm.cscript.is_onload) cur_frm.cscript.dynamic_label(doc, cdt, cdn);
 
 	if(doc.docstatus == 1 && doc.status != 'Stopped'){
-		var ch = getchildren('Purchase Order Item',doc.name,'po_details');
-		var allow_billing = 0; var allow_receipt = 0;
-		cur_frm.add_custom_button('Send SMS', cur_frm.cscript.send_sms);
-
-		for(var i in ch){
-			if(ch[i].qty > ch[i].received_qty) allow_receipt = 1; 
-			if(ch[i].qty > ch[i].billed_qty) allow_billing = 1;
-		}
-		if(allow_receipt)
-			cur_frm.add_custom_button('Make Purchase Receipt', cur_frm.cscript['Make Purchase Receipt']);
-			
-	if(allow_billing)
-			cur_frm.add_custom_button('Make Invoice', cur_frm.cscript['Make Purchase Invoice']);
-
-		if(allow_billing || allow_receipt)
-			cur_frm.add_custom_button('Stop', cur_frm.cscript['Stop Purchase Order']);
+		cur_frm.add_custom_button('Send SMS', cur_frm.cscript['Send SMS']);
+		if(doc.per_received < 100) cur_frm.add_custom_button('Make Purchase Receipt', cur_frm.cscript['Make Purchase Receipt']);	
+		if(doc.per_billed < 100) cur_frm.add_custom_button('Make Invoice', cur_frm.cscript['Make Purchase Invoice']);
+		if(doc.per_billed < 100 || doc.per_received < 100) cur_frm.add_custom_button('Stop', cur_frm.cscript['Stop Purchase Order']);
 	}
 		
 	if(doc.docstatus == 1 && doc.status == 'Stopped')
diff --git a/erpnext/buying/doctype/purchase_request/purchase_request.js b/erpnext/buying/doctype/purchase_request/purchase_request.js
index d20d50a..8e66543 100644
--- a/erpnext/buying/doctype/purchase_request/purchase_request.js
+++ b/erpnext/buying/doctype/purchase_request/purchase_request.js
@@ -46,19 +46,10 @@
 
 //======================= Refresh =====================================
 cur_frm.cscript.refresh = function(doc, cdt, cdn) { 
-
-	// Unhide Fields in Next Steps
-	// ---------------------------------
-	
 	cur_frm.clear_custom_buttons();
 
 	if(doc.docstatus == 1 && doc.status != 'Stopped'){
-		var ch = getchildren('Purchase Request Item',doc.name,'indent_details');
-		var is_closed = 1;
-		for(var i in ch){
-			if(flt(ch[i].qty) > flt(ch[i].ordered_qty)) is_closed = 0;
-		}
-		if(!is_closed) {
+		if(doc.per_ordered < 100) {
 			cur_frm.add_custom_button('Make Purchase Order', cur_frm.cscript['Make Purchase Order'])
 			cur_frm.add_custom_button('Stop Purchase Request', cur_frm.cscript['Stop Purchase Request'])
 		}
diff --git a/erpnext/patches/april_2012/after_sync_cleanup.py b/erpnext/patches/april_2012/after_sync_cleanup.py
index ab9e70e..33840a0 100644
--- a/erpnext/patches/april_2012/after_sync_cleanup.py
+++ b/erpnext/patches/april_2012/after_sync_cleanup.py
@@ -1,5 +1,5 @@
 def execute():
 	import webnotes
 	from webnotes.model import delete_doc
-
+	webnotes.conn.sql("update `tabDocType` set module = 'Utilities' where name in ('Question', 'Answer')")
 	delete_doc('Module Def', 'Knowledge Base')
diff --git a/erpnext/patches/april_2012/change_cacheitem_schema.py b/erpnext/patches/april_2012/change_cacheitem_schema.py
index ab127e3..dc3c253 100644
--- a/erpnext/patches/april_2012/change_cacheitem_schema.py
+++ b/erpnext/patches/april_2012/change_cacheitem_schema.py
@@ -1,3 +1,5 @@
 def execute():
 	import webnotes
+	webnotes.conn.commit()
 	webnotes.conn.sql("alter table __CacheItem modify `value` longtext")
+	webnotes.conn.begin()
diff --git a/erpnext/patches/april_2012/remove_default_from_rv_detail.py b/erpnext/patches/april_2012/remove_default_from_rv_detail.py
new file mode 100644
index 0000000..cf81f6d
--- /dev/null
+++ b/erpnext/patches/april_2012/remove_default_from_rv_detail.py
@@ -0,0 +1,3 @@
+def execute():
+	import webnotes
+	webnotes.conn.sql("update `tabDocField` set `default` = '' where fieldname = 'cost_center' and parent = 'RV Detail' and `default` = 'Purchase - TC'")
diff --git a/erpnext/patches/april_2012/serial_no_fixes.py b/erpnext/patches/april_2012/serial_no_fixes.py
new file mode 100644
index 0000000..b4fcf75
--- /dev/null
+++ b/erpnext/patches/april_2012/serial_no_fixes.py
@@ -0,0 +1,6 @@
+def execute():
+	import webnotes
+	from webnotes.modules.module_manager import reload_doc
+	reload_doc('stock', 'doctype', 'serial_no')
+
+	webnotes.conn.sql("update `tabSerial No` set sle_exists = 1")
diff --git a/erpnext/patches/april_2012/update_appraisal_permission.py b/erpnext/patches/april_2012/update_appraisal_permission.py
new file mode 100644
index 0000000..bd4578f
--- /dev/null
+++ b/erpnext/patches/april_2012/update_appraisal_permission.py
@@ -0,0 +1,14 @@
+def execute():
+	import webnotes
+	from webnotes.model.doc import addchild
+	from webnotes.model.code import get_obj
+	
+	webnotes.conn.sql("delete from `tabDocPerm` where role = 'All' and permlevel = 0 and parent in ('Appraisal', 'Ticket', 'Project')")
+
+	appr = get_obj('DocType', 'Appraisal', with_children=1)
+	ch = addchild(appr.doc, 'permissions', 'DocPerm', 0)
+	ch.permlevel = 0
+	ch.role = 'Employee'
+	ch.read = 1
+	ch.write = 1
+	ch.save()
diff --git a/erpnext/patches/april_2012/update_permlevel_in_address.py b/erpnext/patches/april_2012/update_permlevel_in_address.py
new file mode 100644
index 0000000..f8deb2c
--- /dev/null
+++ b/erpnext/patches/april_2012/update_permlevel_in_address.py
@@ -0,0 +1,3 @@
+def execute():
+	import webnotes
+	webnotes.conn.sql("update `tabDocPerm` set permlevel = 0 where parent = 'Address'")
diff --git a/erpnext/patches/april_2012/update_role_in_address.py b/erpnext/patches/april_2012/update_role_in_address.py
new file mode 100644
index 0000000..6917da4
--- /dev/null
+++ b/erpnext/patches/april_2012/update_role_in_address.py
@@ -0,0 +1,21 @@
+def execute():
+	import webnotes
+	from webnotes.model.doc import addchild
+	from webnotes.model.code import get_obj
+
+	webnotes.conn.sql("delete from `tabDocPerm` where role = 'All' and parent = 'Address'")
+
+	role1 = ['Sales User', 'Purchase User', 'Accounts User', 'Maintenance User']
+	role2 = ['Sales Manager', 'Sales Master Manager', 'Purchase Manager', 'Purchase Master Manager', 'Accounts Manager', 'Maintenance Manager']
+
+	addr = get_obj('DocType', 'Address', with_children=1)
+	for d in role1+role2:
+		ch = addchild(addr.doc, 'permissions', 'DocPerm', 0)
+		ch.role = d
+		ch.read = 1
+		ch.write = 1
+		ch.create = 1
+		if d in role2:
+			ch.cancel = 1
+
+		ch.save()
diff --git a/erpnext/patches/patch_list.py b/erpnext/patches/patch_list.py
index 7d8a095..e0f9ea3 100644
--- a/erpnext/patches/patch_list.py
+++ b/erpnext/patches/patch_list.py
@@ -282,4 +282,30 @@
 		'patch_file': 'change_cacheitem_schema',
 		'description': 'Modified datatype of `value` column from text to longtext'
 	},
+	{
+		'patch_module': 'patches.april_2012',
+		'patch_file': 'remove_default_from_rv_detail',
+		'description': ''
+	},
+	{
+		'patch_module': 'patches.april_2012',
+		'patch_file': 'update_role_in_address',
+		'description': 'updated roles in address'
+	},
+	{
+		'patch_module': 'patches.april_2012',
+		'patch_file': 'update_permlevel_in_address',
+		'description': 'updated permlevel in address'
+	},
+	{
+		'patch_module': 'patches.april_2012',
+		'patch_file': 'update_appraisal_permission',
+		'description': 'updated permission in appraisal'
+	},
+	{
+		'patch_module': 'patches.april_2012',
+		'patch_file': 'serial_no_fixes',
+		'description': 'fixes for sle creation while import'
+	},
+
 ]
diff --git a/erpnext/setup/doctype/notification_control/notification_control.js b/erpnext/setup/doctype/notification_control/notification_control.js
index 32919b6..5512697 100644
--- a/erpnext/setup/doctype/notification_control/notification_control.js
+++ b/erpnext/setup/doctype/notification_control/notification_control.js
@@ -14,19 +14,19 @@
 // You should have received a copy of the GNU General Public License
 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-cur_frm.cscript.select_transaction = function(doc, dt, dn) {
+cur_frm.cscript.select_transaction = function(doc, cdt, cdn) {
   if(doc.select_transaction) {
     var callback = function(r,rt) {
-      var doc = locals[dt][dn];
+      var doc = locals[cdt][cdn];
       doc.custom_message = r.message;
       refresh_field('custom_message');
     }
-    $c_obj('Notification Control','get_message',doc.select_transaction, callback)
+    $c_obj(make_doclist(cdt, cdn),'get_message',doc.select_transaction, callback)
 }
 }
 
 cur_frm.cscript.notify = function(doc, args) {
-	$c_obj('Notification Control', 'get_formatted_message', {
+	$c_obj(make_doclist(doc.doctype, doc.name), 'get_formatted_message', {
 		type: args['type'],
 		doctype: args['doctype'],
 		contact_name: args['contact_name'] || doc.contact_display
diff --git a/erpnext/setup/doctype/notification_control/notification_control.py b/erpnext/setup/doctype/notification_control/notification_control.py
index 650486e..2a21e80 100644
--- a/erpnext/setup/doctype/notification_control/notification_control.py
+++ b/erpnext/setup/doctype/notification_control/notification_control.py
@@ -39,7 +39,7 @@
 
 	# set custom text
 	# ---------------
-	def set_message(self, arg=''):
+	def set_message(self, arg = ''):
 		fn = self.doc.select_transaction.lower().replace(' ', '_') + '_message'
 		webnotes.conn.set(self.doc, fn, self.doc.custom_message)
 		msgprint("Custom Message for %s updated!" % self.doc.select_transaction)
diff --git a/erpnext/startup/startup.css b/erpnext/startup/startup.css
index 47f188b..490b2f4 100644
--- a/erpnext/startup/startup.css
+++ b/erpnext/startup/startup.css
@@ -13,7 +13,6 @@
 }
 
 body {
-	background: url(../images/redbeech.jpg) repeat;
 	color: #616161;
 }
 
diff --git a/erpnext/startup/startup.js b/erpnext/startup/startup.js
index c96a6a8..23a02cf 100644
--- a/erpnext/startup/startup.js
+++ b/erpnext/startup/startup.js
@@ -188,7 +188,7 @@
 }
 
 erpnext.set_user_background = function(src) {
-	set_style(repl('body { background: url("files/%(src)s") repeat;}', {src:src}))
+	set_style(repl('#body_div { background: url("files/%(src)s") repeat;}', {src:src}))
 }
 
 // start
diff --git a/erpnext/stock/doctype/bin/bin.py b/erpnext/stock/doctype/bin/bin.py
index a6fc1c4..f645e8f 100644
--- a/erpnext/stock/doctype/bin/bin.py
+++ b/erpnext/stock/doctype/bin/bin.py
@@ -44,6 +44,7 @@
 	def update_stock(self, actual_qty=0, reserved_qty=0, ordered_qty=0, indented_qty=0, planned_qty=0, dt=None, sle_id='', posting_time='', serial_no = '', is_cancelled = 'No',doc_type='',doc_name='',is_amended='No'):
 		if not dt: 
 			dt = nowdate()
+			
 		# update the stock values (for current quantities)
 		self.doc.actual_qty = flt(self.doc.actual_qty) + flt(actual_qty)
 		self.doc.ordered_qty = flt(self.doc.ordered_qty) + flt(ordered_qty)
@@ -295,7 +296,7 @@
 			order by timestamp(posting_date, posting_time) asc, name asc""", \
 				(self.doc.item_code, self.doc.warehouse, \
 					prev_sle.get('posting_date','1900-01-01'), prev_sle.get('posting_time', '12:00')), as_dict = 1)
-		for sle in sll:
+		for sle in sll:		
 			# block if stock level goes negative on any date
 			if val_method != 'Moving Average' or flt(allow_negative_stock) == 0:
 				self.validate_negative_stock(cqty, sle)
diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js
index 8761881..e32439c 100644
--- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js
+++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js
@@ -63,13 +63,8 @@
 
 
 	if(doc.docstatus == 1){
-		var ch = getchildren('Purchase Receipt Item',doc.name,'purchase_receipt_details');
-		allow_billing = 0;
-		for(var i in ch){
-			if(ch[i].qty > ch[i].billed_qty) allow_billing = 1;
-		}
-	 cur_frm.add_custom_button('Make Purchase Invoice', cur_frm.cscript['Make Purchase Invoice']);
-	 cur_frm.add_custom_button('Send SMS', cur_frm.cscript.send_sms);
+		if (doc.per_billed < 100) cur_frm.add_custom_button('Make Purchase Invoice', cur_frm.cscript['Make Purchase Invoice']);
+		cur_frm.add_custom_button('Send SMS', cur_frm.cscript['Send SMS']);
 	}
 }
 
diff --git a/erpnext/stock/doctype/sales_bom/sales_bom.py b/erpnext/stock/doctype/sales_bom/sales_bom.py
index ae3378e..f292164 100644
--- a/erpnext/stock/doctype/sales_bom/sales_bom.py
+++ b/erpnext/stock/doctype/sales_bom/sales_bom.py
@@ -67,7 +67,7 @@
 				msgprint("Sales Bom Item " + d.item_code +" cannot be child item.")
 				raise Exception
 			# Check if is_main_item is modified once saved
-			if not self.doc.fields.get('__islocal') and d.is_main_item == "Yes" and cstr(d.item_code) != cstr(self.doc.name)[:-3] :
+			if not self.doc.fields.get('__islocal') and d.is_main_item == "Yes" and cstr(d.item_code) != cstr(self.doc.new_item_code)[:-3] :
 				msgprint("Modifying the main item is not allowed.")
 				raise Exception
 		if len(is_main_item) > 1:
@@ -165,19 +165,18 @@
 			return
 		
 		# get all Sales BOM that have the first item	
-		sbl = sql("select distinct parent from `tabSales BOM Item` where item_code=%s", il[0].item_code)
+		sbl = sql("select distinct parent from `tabSales BOM Item` where item_code=%s and parent != %s and docstatus != 2", (il[0].item_code, self.doc.name))
 		
 		# check all siblings
 		sub_items = [[d.item_code, flt(d.qty)] for d in il]
 		
 		for s in sbl:
-			if not cstr(s[0]) == cstr(self.doc.name) :
-				t = sql("select item_code, qty from `tabSales BOM Item` where parent=%s", s[0])
-				t = [[d[0], flt(d[1])] for d in t]
+			t = sql("select item_code, qty from `tabSales BOM Item` where parent=%s and docstatus != 2", s[0])
+			t = [[d[0], flt(d[1])] for d in t]
 	
-				if self.has_same_items(sub_items, t):
-					msgprint("%s has the same Sales BOM details" % s[0])
-					raise Exception
+			if self.has_same_items(sub_items, t):
+				msgprint("%s has the same Sales BOM details" % s[0])
+				raise Exception
 		if finder:
 			msgprint("There is no Sales BOM present with the following Combination.")
 
diff --git a/erpnext/stock/doctype/sales_bom/sales_bom.txt b/erpnext/stock/doctype/sales_bom/sales_bom.txt
index 476a319..dfc2a65 100644
--- a/erpnext/stock/doctype/sales_bom/sales_bom.txt
+++ b/erpnext/stock/doctype/sales_bom/sales_bom.txt
@@ -3,9 +3,9 @@
 
 	# These values are common in all dictionaries
 	{
-		'creation': '2012-04-23 16:00:21',
+		'creation': '2012-04-26 13:04:56',
 		'docstatus': 0,
-		'modified': '2012-04-24 15:07:42',
+		'modified': '2012-04-27 11:00:18',
 		'modified_by': u'Administrator',
 		'owner': u'Administrator'
 	},
@@ -15,7 +15,6 @@
 		'_last_update': u'1322549701',
 		'allow_trash': 1,
 		'colour': u'White:FFF',
-		'default_print_format': u'Standard',
 		'doctype': 'DocType',
 		'document_type': u'Master',
 		'is_submittable': 1,
@@ -127,6 +126,24 @@
 	# DocField
 	{
 		'doctype': u'DocField',
+		'fieldname': u'basic_section',
+		'fieldtype': u'Section Break',
+		'label': u'Basic Section',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': u'DocField',
+		'fieldname': u'col1',
+		'fieldtype': u'Column Break',
+		'permlevel': 0,
+		'width': u'50%'
+	},
+
+	# DocField
+	{
+		'doctype': u'DocField',
 		'fieldname': u'new_item_code',
 		'fieldtype': u'Data',
 		'label': u'New Item Code',
@@ -176,6 +193,15 @@
 	# DocField
 	{
 		'doctype': u'DocField',
+		'fieldname': u'col2',
+		'fieldtype': u'Column Break',
+		'permlevel': 0,
+		'width': u'50%'
+	},
+
+	# DocField
+	{
+		'doctype': u'DocField',
 		'fieldname': u'item_group',
 		'fieldtype': u'Link',
 		'label': u'Item Group',
@@ -188,6 +214,18 @@
 
 	# DocField
 	{
+		'doctype': u'DocField',
+		'fieldname': u'stock_uom',
+		'fieldtype': u'Link',
+		'label': u'Stock UOM',
+		'oldfieldname': u'stock_uom',
+		'oldfieldtype': u'Link',
+		'options': u'UOM',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
 		'colour': u'White:FFF',
 		'doctype': u'DocField',
 		'fieldname': u'price_list',
@@ -216,42 +254,6 @@
 
 	# DocField
 	{
-		'colour': u'White:FFF',
-		'doctype': u'DocField',
-		'fieldname': u'find_sales_bom',
-		'fieldtype': u'Button',
-		'label': u'Find Sales BOM',
-		'oldfieldtype': u'Button',
-		'permlevel': 0,
-		'trigger': u'Client'
-	},
-
-	# DocField
-	{
-		'doctype': u'DocField',
-		'fieldname': u'sales_bom_items',
-		'fieldtype': u'Table',
-		'label': u'Sales BOM Items',
-		'oldfieldname': u'sales_bom_items',
-		'oldfieldtype': u'Table',
-		'options': u'Sales BOM Item',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		'doctype': u'DocField',
-		'fieldname': u'stock_uom',
-		'fieldtype': u'Link',
-		'label': u'Stock UOM',
-		'oldfieldname': u'stock_uom',
-		'oldfieldtype': u'Link',
-		'options': u'UOM',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
 		'depends_on': u'eval:doc.amended_from',
 		'description': u'The date at which current entry is corrected in the system.',
 		'doctype': u'DocField',
@@ -270,13 +272,46 @@
 		'fieldtype': u'Link',
 		'label': u'Amended From',
 		'no_copy': 1,
-		'options': u'Sales Invoice',
+		'options': u'Sales BOM',
 		'permlevel': 1,
 		'print_hide': 1
 	},
 
 	# DocField
 	{
+		'colour': u'White:FFF',
+		'doctype': u'DocField',
+		'fieldname': u'find_sales_bom',
+		'fieldtype': u'Button',
+		'label': u'Find Sales BOM',
+		'oldfieldtype': u'Button',
+		'permlevel': 0,
+		'trigger': u'Client'
+	},
+
+	# DocField
+	{
+		'doctype': u'DocField',
+		'fieldname': u'item_section',
+		'fieldtype': u'Section Break',
+		'label': u'Items',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': u'DocField',
+		'fieldname': u'sales_bom_items',
+		'fieldtype': u'Table',
+		'label': u'Sales BOM Items',
+		'oldfieldname': u'sales_bom_items',
+		'oldfieldtype': u'Table',
+		'options': u'Sales BOM Item',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
 		'doctype': u'DocField',
 		'fieldname': u'trash_reason',
 		'fieldtype': u'Small Text',
diff --git a/erpnext/stock/doctype/serial_no/serial_no.py b/erpnext/stock/doctype/serial_no/serial_no.py
index 2384171..88f1bf2 100644
--- a/erpnext/stock/doctype/serial_no/serial_no.py
+++ b/erpnext/stock/doctype/serial_no/serial_no.py
@@ -71,10 +71,13 @@
 		self.validate_warehouse()
 		self.validate_item()
 
+	def on_update(self):
+		if self.doc.warehouse and self.doc.status == 'In Store' and cint(self.doc.sle_exists) == 0 and \
+			not sql("select name from `tabStock Ledger Entry` where serial_no = %s and ifnull(is_cancelled, 'No') = 'No'", self.doc.name):
+			self.make_stock_ledger_entry(1)
+			webnotes.conn.set(self.doc, 'sle_exists', 1)
 
-	# ------------------------
-	# make stock ledger entry
-	# ------------------------
+
 	def make_stock_ledger_entry(self, qty):
 		from webnotes.model.code import get_obj
 		values = [{
@@ -91,21 +94,13 @@
 			'incoming_rate'			: self.doc.purchase_rate,
 			'company'				: self.doc.company,
 			'fiscal_year'			: self.doc.fiscal_year,
-			'is_cancelled'			: 'No', # is_cancelled is always 'No' because while deleted it can not find creation entry if it not created directly, voucher no != serial no.
+			'is_cancelled'			: 'No', # is_cancelled is always 'No' because while deleted it can not find creation entry if it not created directly, voucher no != serial no
 			'batch_no'				: '',
 			'serial_no'				: self.doc.name
 		}]
 		get_obj('Stock Ledger', 'Stock Ledger').update_stock(values)
 
 
-	# ----------
-	# on update
-	# ----------
-	def on_update(self):
-		if self.doc.localname and self.doc.warehouse and self.doc.status == 'In Store' and not sql("select name from `tabStock Ledger Entry` where serial_no = '%s' and ifnull(is_cancelled, 'No') = 'No'" % (self.doc.name)):
-			self.make_stock_ledger_entry(1)
-
-
 	# ---------
 	# on trash
 	# ---------
diff --git a/erpnext/stock/doctype/serial_no/serial_no.txt b/erpnext/stock/doctype/serial_no/serial_no.txt
index aa0ea66..8e32243 100644
--- a/erpnext/stock/doctype/serial_no/serial_no.txt
+++ b/erpnext/stock/doctype/serial_no/serial_no.txt
@@ -3,9 +3,9 @@
 
 	# These values are common in all dictionaries
 	{
-		'creation': '2012-03-27 14:36:37',
+		'creation': '2012-04-23 16:00:23',
 		'docstatus': 0,
-		'modified': '2012-03-27 14:36:37',
+		'modified': '2012-04-26 13:01:57',
 		'modified_by': u'Administrator',
 		'owner': u'Administrator'
 	},
@@ -13,6 +13,7 @@
 	# These values are common for all DocType
 	{
 		'_last_update': u'1325570647',
+		'allow_attach': 1,
 		'allow_trash': 1,
 		'autoname': u'field:serial_no',
 		'colour': u'White:FFF',
@@ -27,7 +28,7 @@
 		'show_in_menu': 0,
 		'subject': u'Item Code: %(item_code)s, Warehouse: %(warehouse)s',
 		'tag_fields': u'status',
-		'version': 191
+		'version': 1
 	},
 
 	# These values are common for all DocField
@@ -57,6 +58,54 @@
 
 	# DocPerm
 	{
+		'amend': 0,
+		'cancel': 0,
+		'create': 0,
+		'doctype': u'DocPerm',
+		'permlevel': 1,
+		'role': u'Material Manager',
+		'submit': 0,
+		'write': 0
+	},
+
+	# DocPerm
+	{
+		'amend': 0,
+		'cancel': 0,
+		'create': 0,
+		'doctype': u'DocPerm',
+		'permlevel': 0,
+		'role': u'Material Manager',
+		'submit': 0,
+		'write': 0
+	},
+
+	# DocPerm
+	{
+		'amend': 0,
+		'cancel': 0,
+		'create': 0,
+		'doctype': u'DocPerm',
+		'permlevel': 1,
+		'role': u'Material User',
+		'submit': 0,
+		'write': 0
+	},
+
+	# DocPerm
+	{
+		'amend': 0,
+		'cancel': 0,
+		'create': 0,
+		'doctype': u'DocPerm',
+		'permlevel': 0,
+		'role': u'Material User',
+		'submit': 0,
+		'write': 0
+	},
+
+	# DocPerm
+	{
 		'cancel': 1,
 		'create': 1,
 		'doctype': u'DocPerm',
@@ -89,54 +138,6 @@
 		'role': u'Sales Master Manager'
 	},
 
-	# DocPerm
-	{
-		'amend': 0,
-		'cancel': 0,
-		'create': 0,
-		'doctype': u'DocPerm',
-		'permlevel': 1,
-		'role': u'Material Manager',
-		'submit': 0,
-		'write': 0
-	},
-
-	# DocPerm
-	{
-		'amend': 0,
-		'cancel': 0,
-		'create': 0,
-		'doctype': u'DocPerm',
-		'permlevel': 0,
-		'role': u'Material Manager',
-		'submit': 0,
-		'write': 0
-	},
-
-	# DocPerm
-	{
-		'amend': 0,
-		'cancel': 0,
-		'create': 0,
-		'doctype': u'DocPerm',
-		'permlevel': 1,
-		'role': u'Material User',
-		'submit': 0,
-		'write': 0
-	},
-
-	# DocPerm
-	{
-		'amend': 0,
-		'cancel': 0,
-		'create': 0,
-		'doctype': u'DocPerm',
-		'permlevel': 0,
-		'role': u'Material User',
-		'submit': 0,
-		'write': 0
-	},
-
 	# DocField
 	{
 		'doctype': u'DocField',
@@ -700,5 +701,30 @@
 		'oldfieldname': u'trash_reason',
 		'oldfieldtype': u'Small Text',
 		'permlevel': 1
+	},
+
+	# DocField
+	{
+		'doctype': u'DocField',
+		'fieldname': u'file_list',
+		'fieldtype': u'Text',
+		'hidden': 1,
+		'label': u'File List',
+		'no_copy': 1,
+		'permlevel': 0,
+		'print_hide': 1
+	},
+
+	# DocField
+	{
+		'doctype': u'DocField',
+		'fieldname': u'sle_exists',
+		'fieldtype': u'Check',
+		'hidden': 1,
+		'label': u'SLE Exists',
+		'no_copy': 1,
+		'permlevel': 1,
+		'print_hide': 1,
+		'report_hide': 1
 	}
 ]
\ No newline at end of file
diff --git a/erpnext/stock/doctype/stock_ledger/stock_ledger.py b/erpnext/stock/doctype/stock_ledger/stock_ledger.py
index 577d2ef..1d3aabe 100644
--- a/erpnext/stock/doctype/stock_ledger/stock_ledger.py
+++ b/erpnext/stock/doctype/stock_ledger/stock_ledger.py
@@ -128,6 +128,7 @@
 		s.modified					=	nowdate()
 		s.modified_by				=	session['user']
 		s.serial_no					=	serial_no
+		s.sle_exists				=	1
 		s.fiscal_year				=	obj.doc.fiscal_year
 		s.company					=	obj.doc.company
 		s.save(new_rec)
@@ -211,7 +212,7 @@
 		import datetime
 		for d in getlist(obj.doclist, fname):
 			if d.serial_no:
-				serial_nos = self.get_sr_no_list(d.serial_no, d.qty)
+				serial_nos = self.get_sr_no_list(d.serial_no)
 				for a in serial_nos:
 					serial_no = a.strip()
 					if is_incoming:
diff --git a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
index bb23226..cf3bd2f 100644
--- a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
+++ b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
@@ -35,11 +35,14 @@
 	def actual_amt_check(self):
 		if self.doc.batch_no:
 			batch_bal = flt(sql("select sum(actual_qty) from `tabStock Ledger Entry` where warehouse = '%s' and item_code = '%s' and batch_no = '%s'"%(self.doc.warehouse,self.doc.item_code,self.doc.batch_no))[0][0])
-	
+			self.doc.fields.update({'batch_bal': batch_bal})
+
 			if (batch_bal + self.doc.actual_qty) < 0:
 				msgprint("""Not enough quantity (requested: %(actual_qty)s, current: %(batch_bal)s in Batch 
 		<b>%(batch_no)s</b> for Item <b>%(item_code)s</b> at Warehouse<b>%(warehouse)s</b> 
-		as on %(posting_date)s %(posting_time)s""" % self.doc.fields.update({'batch_bal': batch_bal}), raise_exception = 1)
+		as on %(posting_date)s %(posting_time)s""" % self.doc.fields, raise_exception = 1)
+
+			self.doc.fields.pop('batch_bal')
 			 
 
 	# mandatory
@@ -89,9 +92,17 @@
 			if getdate(self.doc.posting_date) <= getdate(stock_frozen_upto) and not stock_auth_role in webnotes.user.get_roles():
 				msgprint("You are not authorized to do / modify back dated stock entries before %s" % getdate(stock_frozen_upto).strftime('%d-%m-%Y'), raise_exception=1)
 
+	def validate_posting_time(self):
+		""" Validate posting time format"""
+		if self.doc.posting_time and len(cstr(self.doc.posting_time)) == 8 and cstr(self.doc.posting_time)[-2:] != '00':
+			msgprint("Wrong format of posting time, can not complete the transaction. If you think \
+				you entered posting time correctly, please contact ERPNext support team.")
+			raise Exception
+	
 
 	def validate(self):
 		self.validate_mandatory()
+		self.validate_posting_time()
 		self.validate_item()
 		self.actual_amt_check()
 		self.check_stock_frozen_date()
diff --git a/erpnext/stock/search_criteria/stock_report/stock_report.js b/erpnext/stock/search_criteria/stock_report/stock_report.js
index 5451eb1..d08d1e7 100644
--- a/erpnext/stock/search_criteria/stock_report/stock_report.js
+++ b/erpnext/stock/search_criteria/stock_report/stock_report.js
@@ -19,7 +19,7 @@
   this.mytabs.items['Select Columns'].hide()
   this.mytabs.items['More Filters'].hide()
   this.hide_all_filters();
-  this.add_filter({fieldname:'based_on', label:'Based On', fieldtype:'Select', options:'Warehouse'+NEWLINE+'Item Code',report_default:'Warehouse',ignore : 1,parent:'Stock Ledger Entry'});
+  this.add_filter({fieldname:'based_on', label:'Based On', fieldtype:'Select', options:'Warehouse'+NEWLINE+'Item Code',ignore : 1,parent:'Stock Ledger Entry'});
   this.filter_fields_dict['Stock Ledger Entry'+FILTER_SEP +'To Posting Date'].df.filter_hide = 0;
   this.filter_fields_dict['Stock Ledger Entry'+FILTER_SEP +'Item Code'].df.filter_hide = 0;
   this.filter_fields_dict['Stock Ledger Entry'+FILTER_SEP +'Warehouse'].df.filter_hide = 0;
@@ -57,8 +57,8 @@
     ware_type_cond = repl(' AND `tabWarehouse`.warehouse_type IN (%(war)s)', {war: war.substr(0,war.length-1)})
   }
   
-  if(based_on.length == 1){
-    if(based_on == 'Item Code'){
+  if(based_on.length == 1 && based_on[0]){
+    if(based_on[0] == 'Item Code'){
       cols = '`tabItem`.name AS "Item Code", `tabItem`.item_name AS "Item Name", `tabItem`.description AS "Description", `tabItem`.stock_uom AS "Stock UOM"';
       cond = '(IFNULL(`tabItem`.`end_of_life`,"") = "" OR `tabItem`.`end_of_life` = "0000-00-00" OR `tabItem`.`end_of_life` > NOW()) AND `tabItem`.is_stock_item = "Yes"';
       if(item_code) cond += repl(' AND `tabItem`.name = %(item)s', {item:'"'+item_code+'"'});
@@ -66,7 +66,7 @@
       tables = '`tabItem`';
       group_by = '`tabStock Ledger Entry`.item_code';
     }
-    else if(based_on == 'Warehouse'){
+    else if(based_on[0] == 'Warehouse'){
       cols = '`tabWarehouse`.name AS "Warehouse", `tabWarehouse`.warehouse_type AS "Warehouse Type"';
       cond = '`tabWarehouse`.docstatus < 2'
       if(warehouse) cond += repl(' AND `tabWarehouse`.name = %(warehouse)s', {warehouse:'"'+warehouse+'"'});
@@ -74,8 +74,7 @@
       tables = '`tabWarehouse`';
       group_by = '`tabStock Ledger Entry`.warehouse';
     }
-  }
-  else if(based_on.length == 2){
+  } else {
     cols = '`tabItem`.name AS "Item Code", `tabItem`.item_name AS "Item Name", `tabItem`.description AS "Description", `tabItem`.stock_uom AS "Stock UOM", `tabWarehouse`.name AS "Warehouse",  `tabWarehouse`.warehouse_type AS "Warehouse Type"';
     cond = '(IFNULL(`tabItem`.`end_of_life`,"") = "" OR `tabItem`.`end_of_life` = "0000-00-00" OR `tabItem`.`end_of_life` > NOW()) AND `tabItem`.is_stock_item = "Yes" AND `tabWarehouse`.docstatus < 2';
     if(item_code) cond += repl(" AND `tabItem`.name = %(item)s", {item:"'"+item_code+"'"});
@@ -87,4 +86,4 @@
 
   q = repl("SELECT %(cols)s FROM %(tables)s, `tabStock Ledger Entry` WHERE %(cond)s %(date_cond)s GROUP BY %(group_by)s", {cols:cols, tables:tables, cond:cond, date_cond:date_cond, group_by:group_by});
   return q;
-}
\ No newline at end of file
+}
diff --git a/erpnext/stock/search_criteria/stock_report/stock_report.py b/erpnext/stock/search_criteria/stock_report/stock_report.py
index 84866e9..b87f684 100644
--- a/erpnext/stock/search_criteria/stock_report/stock_report.py
+++ b/erpnext/stock/search_criteria/stock_report/stock_report.py
@@ -14,19 +14,16 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if not filter_values.get('based_on'):
-  msgprint("Please Select Based On")
-  raise Exception
 cols, columns = [], []
 # Add columns
 # ------------
 based_on = filter_values.get('based_on').split(NEWLINE)
-if len(based_on) == 1:
+if len(based_on) == 1 and based_on[0]:
   if based_on[0] == 'Item Code':
     cols = ["Item Code", "Item Name", "Description", "Stock UOM"]
   elif based_on[0] == 'Warehouse':
     cols = ["Warehouse", "Warehouse Type"]
-elif len(based_on) == 2:
+else:
   cols = ["Item Code", "Item Name", "Description", "Stock UOM", "Warehouse",  "Warehouse Type"]
 
 for d in cols:
@@ -65,7 +62,7 @@
 cl_bal,tot_stock = 0,0
   
 for r in res:
-  if len(based_on) == 1:
+  if len(based_on) == 1 and based_on[0]:
     if based_on[0] == 'Item Code': closing_balance, stock_value = get_values(msgprint, flt, posting_date, item_code = r[col_idx['Item Code']])
     elif based_on[0] == 'Warehouse': closing_balance, stock_value = get_values(msgprint, flt, posting_date, warehouse = r[col_idx['Warehouse']])
     r.append(closing_balance)
diff --git a/erpnext/website/css/website.css b/erpnext/website/css/website.css
index ad8702a..fa27d4a 100644
--- a/erpnext/website/css/website.css
+++ b/erpnext/website/css/website.css
@@ -1,9 +1,10 @@
-div#body_div, header .container, .content, #opened-page-selector, footer {
+header .container, .content {
 	width: 900px;
 }
 
 div#body_div {
-	margin-top: 90px;
+	padding-top: 90px;
+	min-height: 400px;
 }
 
 p, li {
@@ -62,19 +63,23 @@
 	background-color: #444;
 }
 
+
 footer {
-	color: #777;	
+	background-color: #eee;
+	box-shadow: inset 0 10px 10px rgba(0,0,0,0.3), inset 0 3px 3px rgba(0,0,0,0.3);
+	border-top: 1px solid #555;
+	padding-top: 10px;
+	text-align: center;
 }
 
 .web-footer {
 	color: inherit;
-	text-align: center;
-	margin: 10px;
+	padding: 10px;
 	line-height: 1.7;
 }
 
 .web-footer div, .web-footer a {
-	font-size: 14px;
+	font-size: 12px;
 }
 
 .web-footer-menu {
@@ -93,10 +98,20 @@
 	border-right: 1px solid #999;
 }
 
+.web-footer-menu ul li:first-child {
+	padding-left: 0px;
+}
+
 .web-footer-menu ul li:last-child {
 	border-right: 0px solid #777 !important;
 }
 
+.web-footer-powered {
+	color: #888;
+	float: right;
+	margin-top: -12px;
+}
+
 /* slide view */
 
 .next-slide {
diff --git a/erpnext/website/doctype/blog/blog.py b/erpnext/website/doctype/blog/blog.py
index 1f1b98b..c78a9cc 100644
--- a/erpnext/website/doctype/blog/blog.py
+++ b/erpnext/website/doctype/blog/blog.py
@@ -32,9 +32,11 @@
 		self.doc.name = website.utils.page_name(self.doc.title)
 	
 	def validate(self):
-		"""write/update 'Page' with the blog"""		
+		"""write/update 'Page' with the blog"""
+		if self.doc.page_name:
+			webnotes.conn.sql("""delete from tabPage where name=%s""", self.doc.page_name)
+		
 		p = website.utils.add_page(self.doc.title)
-		self.doc.name = p.name
 		
 		from jinja2 import Template
 		import markdown2
@@ -54,11 +56,11 @@
 		p.save()
 		
 		website.utils.add_guest_access_to_page(p.name)
+		self.doc.page_name = p.name
 		
 		# cleanup
 		for f in ['content_html', 'full_name', 'updated']:
 			if f in self.doc.fields:
-				del self.doc.fields[f]
-				
+				del self.doc.fields[f]				
 
 			
\ No newline at end of file
diff --git a/erpnext/website/doctype/blog/blog.txt b/erpnext/website/doctype/blog/blog.txt
index f9ff6fd..ad44d13 100644
--- a/erpnext/website/doctype/blog/blog.txt
+++ b/erpnext/website/doctype/blog/blog.txt
@@ -3,9 +3,9 @@
 
 	# These values are common in all dictionaries
 	{
-		'creation': '2012-03-27 14:36:47',
+		'creation': '2012-04-02 16:02:43',
 		'docstatus': 0,
-		'modified': '2012-03-27 14:36:47',
+		'modified': '2012-04-26 16:58:27',
 		'modified_by': u'Administrator',
 		'owner': u'Administrator'
 	},
@@ -21,7 +21,7 @@
 		'name': '__common__',
 		'section_style': u'Simple',
 		'show_in_menu': 0,
-		'version': 3
+		'version': 5
 	},
 
 	# These values are common for all DocField
@@ -35,15 +35,12 @@
 
 	# These values are common for all DocPerm
 	{
-		'create': 1,
 		'doctype': u'DocPerm',
 		'name': '__common__',
 		'parent': u'Blog',
 		'parentfield': u'permissions',
 		'parenttype': u'DocType',
-		'permlevel': 0,
-		'read': 1,
-		'write': 1
+		'read': 1
 	},
 
 	# DocType, Blog
@@ -54,14 +51,27 @@
 
 	# DocPerm
 	{
+		'create': 1,
 		'doctype': u'DocPerm',
-		'role': u'Website Manager'
+		'permlevel': 0,
+		'role': u'Website Manager',
+		'write': 1
+	},
+
+	# DocPerm
+	{
+		'create': 1,
+		'doctype': u'DocPerm',
+		'permlevel': 0,
+		'role': u'Blogger',
+		'write': 1
 	},
 
 	# DocPerm
 	{
 		'doctype': u'DocPerm',
-		'role': u'Blogger'
+		'permlevel': 1,
+		'role': u'All'
 	},
 
 	# DocField
@@ -70,7 +80,8 @@
 		'fieldname': u'title',
 		'fieldtype': u'Data',
 		'label': u'Title',
-		'permlevel': 0
+		'permlevel': 0,
+		'reqd': 1
 	},
 
 	# DocField
@@ -88,7 +99,8 @@
 		'fieldname': u'content',
 		'fieldtype': u'Code',
 		'label': u'Content',
-		'permlevel': 0
+		'permlevel': 0,
+		'reqd': 0
 	},
 
 	# DocField
@@ -96,13 +108,22 @@
 		'doctype': u'DocField',
 		'fieldname': u'content_html',
 		'fieldtype': u'Text',
-		'label': u'Preview',
+		'label': u'Content HTML',
 		'permlevel': 1
 	},
 
 	# DocField
 	{
 		'doctype': u'DocField',
+		'fieldname': u'page_name',
+		'fieldtype': u'Data',
+		'label': u'Page Name',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': u'DocField',
 		'fieldname': u'file_list',
 		'fieldtype': u'Text',
 		'hidden': 1,
diff --git a/erpnext/website/doctype/blog/blog_page.js b/erpnext/website/doctype/blog/blog_page.js
index aa3f4c5..dddc6e0 100644
--- a/erpnext/website/doctype/blog/blog_page.js
+++ b/erpnext/website/doctype/blog/blog_page.js
@@ -18,32 +18,28 @@
 
 pscript['onload_{{ doc.name }}'] = function(wrapper) {
 	// sidebar
-	var side = $(wrapper).find('.web-side-section')
-		.append('<h4>Recent Posts</h4>').get(0);
-		
 	wrapper.recent_list = new wn.ui.Listing({
-		parent: side,
+		parent: $(wrapper).find('.recent-posts'),
+		no_toolbar: true,
 		query: 'select name, title, left(content, 100) as content from tabBlog\
-			where ifnull(published,1)=1',
+			where ifnull(published,0)=1 and name!="{{ doc.name }}" order by modified desc',
 		hide_refresh: true,
 		render_row: function(parent, data) {
-			if(data.content.length==100) data.content += '...';
+			console.log(data);
+			if(data.content && data.content.length==100) data.content += '...';
 			parent.innerHTML = repl('<a href="#!%(name)s">%(title)s</a>\
 				<div class="comment">%(content)s</div><br>', data);
 		},
-		page_length: 5
+		page_length: 5,
 	});
 	wrapper.recent_list.run();
-	
-	
-	// comments
-	$(wrapper).find('.web-main-section').append('<hr><h3>Comments</h3>');
-
+		
 	wrapper.comment_list = new wn.ui.Listing({
-		parent: $(wrapper).find('.web-main-section').get(0),
+		parent: $(wrapper).find('.blog-comments').get(0),
+		no_toolbar: true,
 		query: 'select comment, comment_by_fullname, modified\
 			from `tabComment` where comment_doctype="Page"\
-			and comment_docname="{{ doc.name }}"',
+			and comment_docname="{{ doc.name }}" order by modified desc',
 		no_result_message: 'Be the first one to comment',
 		render_row: function(parent, data) {
 			data.comment_date = prettyDate(data.modified);
@@ -57,7 +53,7 @@
 	wrapper.comment_list.run();
 	
 	// add comment
-	$(wrapper).find('.web-main-section').append('<br><button class="btn add-comment">\
+	$(wrapper).find('.layout-main-section').append('<br><button class="btn add-comment">\
 		Add Comment</button>');
 	$(wrapper).find('button.add-comment').click(function(){
 		d = new wn.widgets.Dialog({
diff --git a/erpnext/website/doctype/blog/template.html b/erpnext/website/doctype/blog/template.html
index 467f301..688ffac 100644
--- a/erpnext/website/doctype/blog/template.html
+++ b/erpnext/website/doctype/blog/template.html
@@ -1,14 +1,18 @@
 <div class="layout-wrapper layout-wrapper-background">
 	<div class="web-content" id="blog-{{ doc.name }}">
 		<div class="layout-main-section">
-			<h1>Blog</h1>
-			<h3>{{ doc.title }}</h3>
+			<h2>{{ doc.title }}</h2>
 			<div class="help">By {{ doc.full_name }} on {{ doc.updated }}</div>
 			<br>
 			{{ doc.content_html }}
+			<hr><h3>Comments</h3>
+			<br>
+			<div class="blog-comments"></div>
 		</div>
 		<div class="layout-side-section">
 			<p><a href="#!blog">All Blogs</a></p>
+			<h4>Recent Posts</h4>
+			<div class="recent-posts" style="min-height: 100px;"></div>
 			<h4>Subscribe</h4>
 			<p>
 				<img src="images/feed.png" style="margin-right: 4px; margin-bottom: -4px">
diff --git a/erpnext/website/doctype/style_settings/custom_template.css b/erpnext/website/doctype/style_settings/custom_template.css
index 8c987f8..4866ac7 100644
--- a/erpnext/website/doctype/style_settings/custom_template.css
+++ b/erpnext/website/doctype/style_settings/custom_template.css
@@ -1,4 +1,4 @@
-body {
+#body_div {
 {% if doc.background_image %}
 	background: url("files/{{ doc.background_image }}") repeat;
 {% elif doc.background_color %}
diff --git a/erpnext/website/doctype/web_page/template.html b/erpnext/website/doctype/web_page/template.html
index 471c95c..b66aded 100644
--- a/erpnext/website/doctype/web_page/template.html
+++ b/erpnext/website/doctype/web_page/template.html
@@ -28,6 +28,3 @@
 		<div style="clear: both"></div>
 	</div>
 </div>
-<div class="web-page-status small">
-	Last Modified: {{ doc.updated }} <a href="#contact">Feedback</a>
-</div>
diff --git a/erpnext/website/doctype/web_page/web_page.js b/erpnext/website/doctype/web_page/web_page.js
index 0b7b78d..17e7f15 100644
--- a/erpnext/website/doctype/web_page/web_page.js
+++ b/erpnext/website/doctype/web_page/web_page.js
@@ -24,10 +24,10 @@
 	refresh: function(doc) {
 		cur_frm.cscript.layout(doc);
 	},
-	insert_style: function() {
+	insert_style: function(doc) {
 		cur_frm.cscript.layout(doc);		
 	},
-	insert_code: function() {
+	insert_code: function(doc) {
 		cur_frm.cscript.layout(doc);		
 	}
 })
\ No newline at end of file
diff --git a/erpnext/website/js/topbar.js b/erpnext/website/js/topbar.js
index aec0f02..8caf8dc 100644
--- a/erpnext/website/js/topbar.js
+++ b/erpnext/website/js/topbar.js
@@ -91,8 +91,7 @@
 	init: function() {
 		$('footer').html(repl('<div class="web-footer">\
 			<div class="web-footer-menu"><ul></ul></div>\
-			<div class="web-footer-address">%(address)s</div>\
-			<div class="web-footer-copyright">&copy; %(copyright)s</div>\
+			<div class="web-footer-copyright">&copy; %(copyright)s | %(address)s</div>\
 			<div class="web-footer-powered">Powered by \
 				<a href="https://erpnext.com">erpnext.com</a></div>\
 		</div>', wn.boot.website_settings));
diff --git a/erpnext/website/page/blog/blog.html b/erpnext/website/page/blog/blog.html
index ffb8128..8d7cd00 100644
--- a/erpnext/website/page/blog/blog.html
+++ b/erpnext/website/page/blog/blog.html
@@ -3,6 +3,7 @@
 		<div class="layout-main-section">
 			<h1>Blog</h1>
 			<br>
+			<div id="blog-list"></div>
 		</div>
 		<div class="layout-side-section">
 			<!-- for later
diff --git a/erpnext/website/page/blog/blog.js b/erpnext/website/page/blog/blog.js
index 418fc6c..3836f90 100644
--- a/erpnext/website/page/blog/blog.js
+++ b/erpnext/website/page/blog/blog.js
@@ -17,18 +17,22 @@
 
 pscript.onload_blog = function(wrapper) {
 	wrapper.blog_list = new wn.ui.Listing({
-		parent: $(wrapper).find('.layout-main-section').get(0),
-		query: 'select tabBlog.name, title, left(content, 300) as content, tabBlog.modified, \
+		parent: $(wrapper).find('#blog-list').get(0),
+		query: 'select tabBlog.name, title, left(content, 1000) as content, tabBlog.modified, \
 			ifnull(first_name, "") as first_name, ifnull(last_name, "") as last_name \
 			from tabProfile, tabBlog\
-		 	where ifnull(published,1)=1 and tabBlog.owner = tabProfile.name',
+		 	where ifnull(published,0)=1 and tabBlog.owner = tabProfile.name',
 		hide_refresh: true,
+		no_toolbar: true,
 		render_row: function(parent, data) {
-			if(data.content.length==300) data.content += '...';
+			if(data.content && data.content.length==1000) data.content += '... (read on)';
+			data.content = wn.markdown(data.content);
+			if(data.last_name) data.last_name = ' ' + data.last_name;
 			data.date = prettyDate(data.modified);
-			parent.innerHTML = repl('<h3><a href="#!%(name)s">%(title)s</a></h3>\
-				<p><div class="help">By %(first_name)s %(last_name)s on %(date)s</div></p>\
-				<div class="comment">%(content)s</div><br>', data);
+			parent.innerHTML = repl('<h2>%(title)s</h2>\
+				<p><div class="help">By %(first_name)s%(last_name)s, %(date)s</div></p>\
+				<p>%(content)s</p>\
+				<a href="#!%(name)s">Read Full Text</a><br>', data);
 		},
 		page_length: 10
 	});
diff --git a/js/all-app.js b/js/all-app.js
index 647a888..7090e15 100644
--- a/js/all-app.js
+++ b/js/all-app.js
@@ -1288,7 +1288,7 @@
 delete locals[dt][dn];}
 function get_local(dt,dn){return locals[dt]?locals[dt][dn]:null;}
 LocalDB.sync=function(list){if(list._kl)list=expand_doclist(list);for(var i=0;i<list.length;i++){var d=list[i];if(!d.name)
-d.name=LocalDB.get_localname(d.doctype);LocalDB.add(d.doctype,d.name);locals[d.doctype][d.name]=d;if(d.doctype=='DocField')wn.meta.add_field(d);if(d.localname){wn.model.new_names[d.localname]=d.name;$(document).trigger('rename',[d.doctype,d.localname,d.name]);delete locals[d.doctype][d.localname];}}}
+d.name=LocalDB.get_localname(d.doctype);LocalDB.add(d.doctype,d.name);locals[d.doctype][d.name]=d;if(d.doctype=='DocField')wn.meta.add_field(d);if(d.localname){wn.model.new_names[d.localname]=d.name;console.log(d.localname);$(document).trigger('rename',[d.doctype,d.localname,d.name]);delete locals[d.doctype][d.localname];}}}
 local_name_idx={};LocalDB.get_localname=function(doctype){if(!local_name_idx[doctype])local_name_idx[doctype]=1;var n='New '+get_doctype_label(doctype)+' '+local_name_idx[doctype];local_name_idx[doctype]++;return n;}
 LocalDB.set_default_values=function(doc){var doctype=doc.doctype;var docfields=wn.meta.docfield_list[doctype];if(!docfields){return;}
 var fields_to_refresh=[];for(var fid=0;fid<docfields.length;fid++){var f=docfields[fid];if(!in_list(no_value_fields,f.fieldtype)&&doc[f.fieldname]==null){var v=LocalDB.get_default_value(f.fieldname,f.fieldtype,f['default']);if(v){doc[f.fieldname]=v;fields_to_refresh.push(f.fieldname);}}}
@@ -1687,7 +1687,8 @@
 /*
  *	lib/js/legacy/widgets/form/form.js
  */
-wn.provide('_f');_f.frms={};_f.Frm=function(doctype,parent){this.docname='';this.doctype=doctype;this.display=0;var me=this;this.is_editable={};this.opendocs={};this.sections=[];this.grids=[];this.cscript={};this.pformat={};this.fetch_dict={};this.parent=parent;this.tinymce_id_list=[];this.setup_meta(doctype);var me=this;$(document).bind('rename',function(event,dt,old_name,new_name){if(dt==me.doctype)
+wn.provide('_f');_f.frms={};_f.Frm=function(doctype,parent){this.docname='';this.doctype=doctype;this.display=0;var me=this;this.is_editable={};this.opendocs={};this.sections=[];this.grids=[];this.cscript={};this.pformat={};this.fetch_dict={};this.parent=parent;this.tinymce_id_list=[];this.setup_meta(doctype);var me=this;$(document).bind('rename',function(event,dt,old_name,new_name){console.log(arguments)
+if(dt==me.doctype)
 me.rename_notify(dt,old_name,new_name)});}
 _f.Frm.prototype.check_doctype_conflict=function(docname){var me=this;if(this.doctype=='DocType'&&docname=='DocType'){msgprint('Allowing DocType, DocType. Be careful!')}else if(this.doctype=='DocType'){if(wn.views.formview[docname]){msgprint("Cannot open DocType when its instance is open")
 throw'doctype open conflict'}}else{if(wn.views.formview.DocType&&wn.views.formview.DocType.frm.opendocs[this.doctype]){msgprint("Cannot open instance when its DocType is open")
@@ -1709,9 +1710,9 @@
 _f.Frm.prototype.email_doc=function(){if(!_e.dialog)_e.make();sel=this.print_sel;var c=$td(_e.dialog.rows['Format'].tab,0,1);if(c.cur_sel){c.removeChild(c.cur_sel);c.cur_sel=null;}
 c.appendChild(this.print_sel);c.cur_sel=this.print_sel;_e.dialog.widgets['Send With Attachments'].checked=0;if(cur_frm.doc.file_list){$ds(_e.dialog.rows['Send With Attachments']);}else{$dh(_e.dialog.rows['Send With Attachments']);}
 _e.dialog.widgets['Subject'].value=get_doctype_label(this.meta.name)+': '+this.docname;_e.dialog.show();}
-_f.Frm.prototype.rename_notify=function(dt,old,name){this.is_editable[name]=this.is_editable[old];delete this.is_editable[old];if(this.docname==old)
+_f.Frm.prototype.rename_notify=function(dt,old,name){if(this.docname==old)
 this.docname=name;else
-return;if(this&&this.opendocs[old]){local_dt[dt][name]=local_dt[dt][old];local_dt[dt][old]=null;}
+return;this.is_editable[name]=this.is_editable[old];delete this.is_editable[old];if(this&&this.opendocs[old]){local_dt[dt][name]=local_dt[dt][old];local_dt[dt][old]=null;}
 delete this.opendocs[old];this.opendocs[name]=true;wn.re_route[window.location.hash]='Form/'+encodeURIComponent(this.doctype)+'/'+encodeURIComponent(name);wn.set_route('Form',this.doctype,name);}
 _f.Frm.prototype.setup_meta=function(){this.meta=get_local('DocType',this.doctype);this.perm=get_perm(this.doctype);if(this.meta.istable){this.meta.in_dialog=1}
 this.setup_print();}
@@ -2239,7 +2240,7 @@
 wn.call({method:'startup.startup.get_global_status_messages',callback:set_messages});}else{wn.container.wntoolbar.set_new_comments(0);$('#unread_messages').toggle(false);}}
 erpnext.startup.set_periodic_updates=function(){wn.updates={};if(wn.updates.id){clearInterval(wn.updates.id);}
 wn.updates.id=setInterval(update_messages,60000);}
-erpnext.set_user_background=function(src){set_style(repl('body { background: url("files/%(src)s") repeat;}',{src:src}))}
+erpnext.set_user_background=function(src){set_style(repl('#body_div { background: url("files/%(src)s") repeat;}',{src:src}))}
 $(document).bind('startup',function(){erpnext.startup.start();});
 /*
  *	erpnext/startup/js/modules.js
diff --git a/js/all-web.js b/js/all-web.js
index 503f088..b2b1fb8 100644
--- a/js/all-web.js
+++ b/js/all-web.js
@@ -739,7 +739,7 @@
 delete locals[dt][dn];}
 function get_local(dt,dn){return locals[dt]?locals[dt][dn]:null;}
 LocalDB.sync=function(list){if(list._kl)list=expand_doclist(list);for(var i=0;i<list.length;i++){var d=list[i];if(!d.name)
-d.name=LocalDB.get_localname(d.doctype);LocalDB.add(d.doctype,d.name);locals[d.doctype][d.name]=d;if(d.doctype=='DocField')wn.meta.add_field(d);if(d.localname){wn.model.new_names[d.localname]=d.name;$(document).trigger('rename',[d.doctype,d.localname,d.name]);delete locals[d.doctype][d.localname];}}}
+d.name=LocalDB.get_localname(d.doctype);LocalDB.add(d.doctype,d.name);locals[d.doctype][d.name]=d;if(d.doctype=='DocField')wn.meta.add_field(d);if(d.localname){wn.model.new_names[d.localname]=d.name;console.log(d.localname);$(document).trigger('rename',[d.doctype,d.localname,d.name]);delete locals[d.doctype][d.localname];}}}
 local_name_idx={};LocalDB.get_localname=function(doctype){if(!local_name_idx[doctype])local_name_idx[doctype]=1;var n='New '+get_doctype_label(doctype)+' '+local_name_idx[doctype];local_name_idx[doctype]++;return n;}
 LocalDB.set_default_values=function(doc){var doctype=doc.doctype;var docfields=wn.meta.docfield_list[doctype];if(!docfields){return;}
 var fields_to_refresh=[];for(var fid=0;fid<docfields.length;fid++){var f=docfields[fid];if(!in_list(no_value_fields,f.fieldtype)&&doc[f.fieldname]==null){var v=LocalDB.get_default_value(f.fieldname,f.fieldtype,f['default']);if(v){doc[f.fieldname]=v;fields_to_refresh.push(f.fieldname);}}}
@@ -847,7 +847,7 @@
 wn.call({method:'startup.startup.get_global_status_messages',callback:set_messages});}else{wn.container.wntoolbar.set_new_comments(0);$('#unread_messages').toggle(false);}}
 erpnext.startup.set_periodic_updates=function(){wn.updates={};if(wn.updates.id){clearInterval(wn.updates.id);}
 wn.updates.id=setInterval(update_messages,60000);}
-erpnext.set_user_background=function(src){set_style(repl('body { background: url("files/%(src)s") repeat;}',{src:src}))}
+erpnext.set_user_background=function(src){set_style(repl('#body_div { background: url("files/%(src)s") repeat;}',{src:src}))}
 $(document).bind('startup',function(){erpnext.startup.start();});
 /*
  *	erpnext/website/js/topbar.js
@@ -870,8 +870,7 @@
 item.route=item.url||item.custom_page;$parent_li.find('.dropdown-menu').append(repl('<li data-label="%(label)s">\
      <a href="#!%(route)s">%(label)s</a></li>',item))}}}});erpnext.Footer=Class.extend({init:function(){$('footer').html(repl('<div class="web-footer">\
    <div class="web-footer-menu"><ul></ul></div>\
-   <div class="web-footer-address">%(address)s</div>\
-   <div class="web-footer-copyright">&copy; %(copyright)s</div>\
+   <div class="web-footer-copyright">&copy; %(copyright)s | %(address)s</div>\
    <div class="web-footer-powered">Powered by \
     <a href="https://erpnext.com">erpnext.com</a></div>\
   </div>',wn.boot.website_settings));this.make_items();},make_items:function(){var items=wn.boot.website_menus