Merge branch 'master' of git://github.com/webnotes/erpnext
diff --git a/data/master.sql.gz b/data/master.sql.gz
index 3d3e220..f3eaf34 100644
--- a/data/master.sql.gz
+++ b/data/master.sql.gz
Binary files differ
diff --git a/erpnext/accounts/DocType Mapper/Purchase Order-Payable Voucher/Purchase Order-Payable Voucher.txt b/erpnext/accounts/DocType Mapper/Purchase Order-Payable Voucher/Purchase Order-Payable Voucher.txt
index 1949110..e58f738 100644
--- a/erpnext/accounts/DocType Mapper/Purchase Order-Payable Voucher/Purchase Order-Payable Voucher.txt
+++ b/erpnext/accounts/DocType Mapper/Purchase Order-Payable Voucher/Purchase Order-Payable Voucher.txt
@@ -5,7 +5,7 @@
 	{
 		'creation': '2010-08-08 17:09:35',
 		'docstatus': 0,
-		'modified': '2011-09-15 15:04:43',
+		'modified': '2011-10-12 12:10:15',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
@@ -107,6 +107,15 @@
 		'to_field': 'naming_series'
 	},
 
+	# Field Mapper Detail
+	{
+		'doctype': 'Field Mapper Detail',
+		'from_field': 'total_tax',
+		'map': 'Yes',
+		'match_id': 0,
+		'to_field': 'total_tax'
+	},
+
 	# Table Mapper Detail
 	{
 		'doctype': 'Table Mapper Detail',
@@ -124,17 +133,6 @@
 		'match_id': 1,
 		'to_field': 'entries',
 		'to_table': 'PV Detail',
-		'validation_logic': 'ifnull(billed_qty,0)  < qty'
-	},
-
-	# Table Mapper Detail
-	{
-		'doctype': 'Table Mapper Detail',
-		'from_field': 'po_details',
-		'from_table': 'PO Detail',
-		'match_id': 1,
-		'to_field': 'entries',
-		'to_table': 'PV Detail',
 		'validation_logic': 'ifnull(billed_qty,0)  < qty and docstatus = 1'
 	},
 
diff --git a/erpnext/accounts/DocType Mapper/Purchase Receipt-Payable Voucher/Purchase Receipt-Payable Voucher.txt b/erpnext/accounts/DocType Mapper/Purchase Receipt-Payable Voucher/Purchase Receipt-Payable Voucher.txt
index 94408e7..1744c4d 100644
--- a/erpnext/accounts/DocType Mapper/Purchase Receipt-Payable Voucher/Purchase Receipt-Payable Voucher.txt
+++ b/erpnext/accounts/DocType Mapper/Purchase Receipt-Payable Voucher/Purchase Receipt-Payable Voucher.txt
@@ -5,7 +5,7 @@
 	{
 		'creation': '2010-08-08 17:09:35',
 		'docstatus': 0,
-		'modified': '2011-09-15 15:04:44',
+		'modified': '2011-10-12 10:49:26',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
@@ -125,6 +125,33 @@
 		'to_field': 'naming_series'
 	},
 
+	# Field Mapper Detail
+	{
+		'doctype': 'Field Mapper Detail',
+		'from_field': 'net_total',
+		'map': 'Yes',
+		'match_id': 0,
+		'to_field': 'net_total'
+	},
+
+	# Field Mapper Detail
+	{
+		'doctype': 'Field Mapper Detail',
+		'from_field': 'grand_total',
+		'map': 'Yes',
+		'match_id': 0,
+		'to_field': 'grand_total'
+	},
+
+	# Field Mapper Detail
+	{
+		'doctype': 'Field Mapper Detail',
+		'from_field': 'total_tax',
+		'map': 'Yes',
+		'match_id': 0,
+		'to_field': 'total_tax'
+	},
+
 	# Table Mapper Detail
 	{
 		'doctype': 'Table Mapper Detail',
diff --git a/erpnext/accounts/Print Format/Cheque Printing Format/Cheque Printing Format.txt b/erpnext/accounts/Print Format/Cheque Printing Format/Cheque Printing Format.txt
index e0d2bce..aa90311 100755
--- a/erpnext/accounts/Print Format/Cheque Printing Format/Cheque Printing Format.txt
+++ b/erpnext/accounts/Print Format/Cheque Printing Format/Cheque Printing Format.txt
@@ -3,10 +3,10 @@
 
 	# These values are common in all dictionaries
 	{
-		'creation': '2011-03-25 15:26:02',
+		'creation': '2011-03-28 15:17:25',
 		'docstatus': 0,
 		'modified': '2011-03-28 12:33:24',
-		'modified_by': 'Administrator',
+		'modified_by': 'umair@iwebnotes.com',
 		'owner': 'Administrator'
 	},
 
diff --git a/erpnext/accounts/Print Format/Form 16A Print Format/Form 16A Print Format.txt b/erpnext/accounts/Print Format/Form 16A Print Format/Form 16A Print Format.txt
index 8316306..4da5443 100644
--- a/erpnext/accounts/Print Format/Form 16A Print Format/Form 16A Print Format.txt
+++ b/erpnext/accounts/Print Format/Form 16A Print Format/Form 16A Print Format.txt
@@ -5,7 +5,7 @@
 	{
 		'creation': '2010-09-27 17:30:34',
 		'docstatus': 0,
-		'modified': '2011-06-15 13:36:06',
+		'modified': '2011-10-19 14:19:27',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
@@ -13,7 +13,7 @@
 	# These values are common for all Print Format
 	{
 		'doctype': 'Print Format',
-		'html': '<html>\n  \n<body>\n<table border = "1" style=\'border-collapse: collapse;\'>\n \n <tr>\n   <td colspan = "3"><h1 align = "center"><b>FORM No. 16 A</b></h1>\n   <p align="right">Certificate No:<script>doc.name</script></p>\n   <p align = "center">[See rule 31 (1)(b)]</p>\n   <h2 align = "center"><b>Certifiction of deduction of tax at source under section 203 of the Income-tax Act, 1961</b></h2>\n   <p>[For interest on securities; dividends; interests other than \'interests on securities\';winnings from lottery or crossword puzzle;\n      winnings from horse race; payments to contractors and sub-contractors;insurance comission;payments to\n      \n      non-resident sportsmen/ sports associations;payments in respect of deposits under National Savings Scheme:\n      payments on account of repurchase of units by Mutual Fund or Unit Trust of India; commission, remuneration or prize\n     \n      on sale of lottery tickets; comission or brokerage;rent;fees for professional or technical services;royalty and any sum \n      under section 28(va);income in respect of units; payment of compensation on acquisition of certain immovable property;\n\n      other sums under section 195; income in respect of units of non-residents referred to in section 196A; income from units\n      referred to in section 196B;income from foreign currency bonds or shares of an Indian Company referred to in section</p>\n      196C; income of Foreign Institutional Investors from securities referred to in section 196D]\n   </td> \n  </tr>\n\n  <tr>\n    <td width="30%">Name and address of person deducing tax</td>\n    <td width="40%">Acknowledgement No.s of all quarterly statements of TDS under sub-section(3) of section 200 as provided by TIN Facilitation Centre or NSDL web-site</td>\n    <td width="30%">Name and address of the person to whom payment is made or in whose account it is credited</td>\n  </tr>\n  \n  <tr>\n    <td>\n      <table>\n        <tr><script>doc.company</script></tr><br><br>\n        <tr><script>replace_newlines(doc.company_address)</script></tr>\n      </table>\n    </td>\n    <td>\n      <script>print_table(\'Form 16A\', doc.name, \'form_16A_ack_details\',\'Form 16A Ack Detail\',  [\'quarter\',\'ack_no\'], [\'Quarter\' , \'Acknowledgement No.\'] , [\'40%\',\'60%\']).innerHTML</script>\n    </td>\n    <td>\n      <table>\n        <tr><script>doc.party_name</script></tr><br><br>\n        <tr><script>replace_newlines(doc.party_address)</script></tr>\n      </table>\n    </td>\n  </tr>\n  \n  <tr>\n    <td>\n      <table>\n        <tr><b>Registration Details OF THE DEDUCTOR</b></tr><br>\n        <tr><script>replace_newlines(doc.registration_details)</script></tr>\n      </table>\n    </td>\n    \n    <td>\n      <table>\n        <tr><b><center>NATURE OF PAYMENT</center></b></tr><br><br>\n        <tr><b><center><script>doc.tds_category</script></center></b></tr>\n        \n      </table>\n    </td>\n    \n    <td>\n      <table>\n        <tr><b>PAN NO. OF THE PAYEE</b></tr><br>\n        <tr><script>doc.pan_number</script></tr>\n        \n      </table>\n    </td>\n  </tr>\n  \n  <tr>\n    <td align = "center" colspan ="3"><b>DETAILS OF PAYMENT, TAX DEDUCTION AND DEPOSIT OF TAX INTO CENTRAL GOVERNMENT ACCOUNT</b>\n    <p align = "center">(The deductor is to provide transaction wise details of tax deducted and deposited)</p>\n  </tr>\n  \n  <tr>\n    <td colspan="3">\n      <script>print_table(\'Form 16A\', doc.name, \'form_16A_tax_details\',\'Form 16A Tax Detail\', [\'SR\',\'amount_paid\', \'date_of_payment\',\'tds_main\',\'surcharge\',\'cess_on_tds\',\'total_tax_deposited\',\'cheque_no\',\'bsr_code\',\'tax_deposited_date\',\'challan_no\'], [\'S No.\' , \'Amount paid / credited\',\'Date of payment / credit\',\'TDS (Rs.)\',\'Surcharge (Rs.)\',\'Cess on TDS(Rs.)\',\'Total Tax Deposited (Rs.)\',\'Cheque/DD no.(if any)\',\'BSR code on bank branch\', \'Date on which tax deposited(dd/mm/yy)\',\'Transfer Voucher/Challan Identification no.\'] ,  [\'3%\', \'10%\',\'10%\', \'10%\',\'10%\',\'6%\',\'10%\' ,\'10%\',\'7%\' ,\'10%\',\'7%\',\'7%\'] ).innerHTML</script>\n    </td>\n  </tr>\n  \n  <tr>\n    <td colspan="3">\n      Certified that a sum of Rs. <script>doc.total_amount</script> has been deducted at source and paid to the credit of the Central Government as per details given above <br><br><br><br>\n      <p align="right"> Signature of person responsible for deduction of tax \n    </td>\n  </tr>\n  \n  <tr>\n    <td colspan="3">\n      <table width="100%" border="0">\n        <tr>\n          <td width="50%">Place: <script>doc.place</script></td>\n          <td width="50%" align="right">Full Name: <script>doc.full_name</script></td>\n        </tr>\n        <tr>\n          <td width="50%">Date: <script>date.str_to_user(doc.dt)</script></td>\n          <td width="50%" align="right">Designation: <script>doc.designation</script></td>\n        </tr>\n      </table>\n    </td>\n  </tr>\n  \n</table>\n</body>\n</html>',
+		'html': '<html>\n  <script>\n     function get_letter_head() {\n\t// add letter head\n\tvar cp = locals[\'Control Panel\'][\'Control Panel\'];\n\tif(doc.letter_head)\n\t\tvar lh= cstr(_p.letter_heads[doc.letter_head]);\n\telse if(cp.letter_head)\n\t\tvar lh= cp.letter_head;\n\telse \n\t\tvar lh= \'\';\n\t\t\n\treturn lh;\n}\n  </script>\n<body>\n<table border = "1" style=\'border-collapse: collapse;\'>\n <tr>\n   <td>\n    <div style="border-bottom: 1px solid; padding-bottom: 5px; width:100%"><script>get_letter_head()</script></div>\n   </td>\n </tr>\n <tr>\n   <td colspan = "3"><h1 align = "center"><b>FORM No. 16 A</b></h1>\n   <p align="right">Certificate No:<script>doc.name</script></p>\n   <p align = "center">[See rule 31 (1)(b)]</p>\n   <h2 align = "center"><b>Certifiction of deduction of tax at source under section 203 of the Income-tax Act, 1961</b></h2>\n   <p>[For interest on securities; dividends; interests other than \'interests on securities\';winnings from lottery or crossword puzzle;\n      winnings from horse race; payments to contractors and sub-contractors;insurance comission;payments to\n      \n      non-resident sportsmen/ sports associations;payments in respect of deposits under National Savings Scheme:\n      payments on account of repurchase of units by Mutual Fund or Unit Trust of India; commission, remuneration or prize\n     \n      on sale of lottery tickets; comission or brokerage;rent;fees for professional or technical services;royalty and any sum \n      under section 28(va);income in respect of units; payment of compensation on acquisition of certain immovable property;\n\n      other sums under section 195; income in respect of units of non-residents referred to in section 196A; income from units\n      referred to in section 196B;income from foreign currency bonds or shares of an Indian Company referred to in section</p>\n      196C; income of Foreign Institutional Investors from securities referred to in section 196D]\n   </td> \n  </tr>\n\n  <tr>\n    <td width="30%">Name and address of person deducing tax</td>\n    <td width="40%">Acknowledgement No.s of all quarterly statements of TDS under sub-section(3) of section 200 as provided by TIN Facilitation Centre or NSDL web-site</td>\n    <td width="30%">Name and address of the person to whom payment is made or in whose account it is credited</td>\n  </tr>\n  \n  <tr>\n    <td>\n      <table>\n        <tr><script>doc.company</script></tr><br><br>\n        <tr><script>replace_newlines(doc.company_address)</script></tr>\n      </table>\n    </td>\n    <td>\n      <script>print_table(\'Form 16A\', doc.name, \'form_16A_ack_details\',\'Form 16A Ack Detail\',  [\'quarter\',\'ack_no\'], [\'Quarter\' , \'Acknowledgement No.\'] , [\'40%\',\'60%\']).innerHTML</script>\n    </td>\n    <td>\n      <table>\n        <tr><script>doc.party_name</script></tr><br><br>\n        <tr><script>replace_newlines(doc.party_address)</script></tr>\n      </table>\n    </td>\n  </tr>\n  \n  <tr>\n    <td>\n      <table>\n        <tr><b>Registration Details OF THE DEDUCTOR</b></tr><br>\n        <tr><script>replace_newlines(doc.registration_details)</script></tr>\n      </table>\n    </td>\n    \n    <td>\n      <table>\n        <tr><b><center>NATURE OF PAYMENT</center></b></tr><br><br>\n        <tr><b><center><script>doc.tds_category</script></center></b></tr>\n        \n      </table>\n    </td>\n    \n    <td>\n      <table>\n        <tr><b>PAN NO. OF THE PAYEE</b></tr><br>\n        <tr><script>doc.pan_number</script></tr>\n        \n      </table>\n    </td>\n  </tr>\n  \n  <tr>\n    <td align = "center" colspan ="3"><b>DETAILS OF PAYMENT, TAX DEDUCTION AND DEPOSIT OF TAX INTO CENTRAL GOVERNMENT ACCOUNT</b>\n    <p align = "center">(The deductor is to provide transaction wise details of tax deducted and deposited)</p>\n  </tr>\n  \n  <tr>\n    <td colspan="3">\n      <script>print_table(\'Form 16A\', doc.name, \'form_16A_tax_details\',\'Form 16A Tax Detail\', [\'SR\',\'amount_paid\', \'date_of_payment\',\'tds_main\',\'surcharge\',\'cess_on_tds\',\'total_tax_deposited\',\'cheque_no\',\'bsr_code\',\'tax_deposited_date\',\'challan_no\'], [\'S No.\' , \'Amount paid / credited\',\'Date of payment / credit\',\'TDS (Rs.)\',\'Surcharge (Rs.)\',\'Cess on TDS(Rs.)\',\'Total Tax Deposited (Rs.)\',\'Cheque/DD no.(if any)\',\'BSR code on bank branch\', \'Date on which tax deposited(dd/mm/yy)\',\'Transfer Voucher/Challan Identification no.\'] ,  [\'3%\', \'10%\',\'10%\', \'10%\',\'10%\',\'6%\',\'10%\' ,\'10%\',\'7%\' ,\'10%\',\'7%\',\'7%\'] ).innerHTML</script>\n    </td>\n  </tr>\n  \n  <tr>\n    <td colspan="3">\n      Certified that a sum of Rs. <script>doc.total_amount</script> has been deducted at source and paid to the credit of the Central Government as per details given above <br><br><br><br>\n      <p align="right"> Signature of person responsible for deduction of tax \n    </td>\n  </tr>\n  \n  <tr>\n    <td colspan="3">\n      <table width="100%" border="0">\n        <tr>\n          <td width="50%">Place: <script>doc.place</script></td>\n          <td width="50%" align="right">Full Name: <script>doc.full_name</script></td>\n        </tr>\n        <tr>\n          <td width="50%">Date: <script>date.str_to_user(doc.dt)</script></td>\n          <td width="50%" align="right">Designation: <script>doc.designation</script></td>\n        </tr>\n      </table>\n    </td>\n  </tr>\n  \n</table>\n</body>\n</html>',
 		'module': 'Accounts',
 		'name': '__common__',
 		'standard': 'Yes'
diff --git a/erpnext/accounts/Print Format/POS Invoice/POS Invoice.txt b/erpnext/accounts/Print Format/POS Invoice/POS Invoice.txt
new file mode 100644
index 0000000..6a7e835
--- /dev/null
+++ b/erpnext/accounts/Print Format/POS Invoice/POS Invoice.txt
@@ -0,0 +1,27 @@
+# Print Format, POS Invoice
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2011-10-19 14:27:47',
+		'docstatus': 0,
+		'modified': '2011-10-19 14:29:45',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all Print Format
+	{
+		'doctype': 'Print Format',
+		'html': '<html>\n<head>\n<!--Other charges function-->\n<script>\n    var make_row = function(title,val,bold){\n    var bstart = \'<b>\'; var bend = \'</b>\';\n    return \'<tr><td style="width:50%">\'+(bold?bstart:\'\')+title+(bold?bend:\'\')+\'</td>\'\n              +\'<td style="width:20%">\'+doc.currency+\'</td>\'\n              +\'<td style="width:30%;text-align:right">\'+(val?val:\'0.00\')+\'</td>\'\n              +\'</tr>\'\n  }\n  var make_row1 = function(title,val,bold){\n    var bstart = \'<b>\'; var bend = \'</b>\';\n    \n    return \'<tr style="font-family:courier new; line-height:150%"><td style="width:50%">\'+(bold?bstart:\'\')+title+(bold?bend:\'\')+\'</td>\'\n              +\'<td style="width:50%;text-align:right">\'+(bold?bstart:\'\')+(val?val:\'0.00\')+(bold?bend:\'\')+\'</td>\'\n              +\'</tr>\'\n  }\n\nfunction get_letter_head() {\n\t// add letter head\n\tvar cp = locals[\'Control Panel\'][\'Control Panel\'];\n\tif(doc.letter_head)\n\t\tvar lh= cstr(_p.letter_heads[doc.letter_head]);\n\telse if(cp.letter_head)\n\t\tvar lh= cp.letter_head;\n\telse \n\t\tvar lh= \'\';\n\t\t\n\treturn lh;\n}\n\n  function get_tax_details(){\n  \n    var cl = getchildren(\'RV Tax Detail\',doc.name,\'other_charges\');\n    var out = \'\';\n\n//    if(cl.length){\n      out += \'<div><table style="float: right;">\';\n      for(var i=0;i<cl.length;i++){\n        out += make_row1(cl[i].description,fmt_money(convert_rate(cl[i].tax_amount)),0);\n      }\n\n        out += make_row1(\'TOTAL\',fmt_money(doc.grand_total),1);\n  //  }\n    out +=\'</table></div>\';\n    return out;\n  }\n  function get_other_charges(){\n    var out =\'\';\n    out += \'<div><table cssClass="noborder" style="width:100%">\';\n    \n    out += make_row(\'Net Total\',fmt_money(convert_rate(doc.net_total)),1)\n          +make_row(\'Total Taxes\',fmt_money(convert_rate(doc.other_charges_total)),0)\n          +make_row(\'Grand Total\',fmt_money(convert_rate(doc.grand_total)),1)\n          +make_row(\'Rounded Total\',fmt_money(convert_rate(doc.rounded_total)),1)\n          +make_row(\'Outstanding Amount\',fmt_money(convert_rate(doc.outstanding_amount)),1)\n    out += \'</table></div>\';\n    return out;\n  }\n\n  \n  function convert_rate(val){    \n    var new_val = flt(val)/flt(doc.conversion_rate);\n    return new_val;\n  }\n  \n</script>\n</head>\n<body>\n\n<div><script>get_letter_head()</script></div>\n<table width="100%" style="font-family: courier new; line-height:200%">\n<tr>\n<td align="left">NO: <script>doc.name</script></td>\n<td align="right">DATE: <script>date.str_to_user(doc.voucher_date)</script></td>\n</tr>\n<tr>\n<td>M/s <script>doc.contact_display</script></td>\n</tr>\n</table>\n<!--Item Table-->\n<div>\n    <script>\n    var t = print_table(\'Receivable Voucher\', doc.name, \'entries\', \'RV Detail\', [\'description\',\'qty\',\'basic_rate\',\'amount\'], [\'ITEM\', \'QTY\',\'RATE\',\'AMOUNT\'], [\'35%\',\'20%\',\'20%\',\'25%\'])\n    if(t.appendChild) {\n      // single\n      out = t.innerHTML.replace(/border: 1px/gi,\'border: 0px\').replace(/style="/gi,\'style="font-family:courier new;line-height:150%;\');\n    }\n    else {//multiple\n      out = \'<table class="None" border="0px" width="100%" style="border:0px; font-family:courier-new">\';\n\n      for(var i=0;i<t.length;i++) \n      {\n\t\tif(i==0)\n\t\t{\n\t\t\tout+=\'<tr>\'+t[i].childNodes[0].childNodes[0].childNodes[0].innerHTML.replace(/style="border: 1px solid rgb\\(0, 0, 0\\);/gi,\'style="font-family:courier new;\')+\'</tr>\'\n\t\t}\n\t\tout+=\'<tr>\'+t[i].childNodes[0].childNodes[0].childNodes[1].innerHTML.replace(/style="border: 1px solid rgb\\(0, 0, 0\\);/gi,\'style="font-family:courier new;\')+\'</tr>\'\n      }\n\tout += \'</table>\'\n    }\n    out;\n    </script>\n\n</div>\n\n<!--Tax table-->\n<div><script>get_tax_details();</script>\n    </table>\n</div>\n\n<br>\n<table style="font-family:courier new;">\n<tr><td><b><script>doc.terms</script></b></td></tr>\n<tr><td nowrap><b>For <script>doc.company</script></b></td></tr>\n<tr><td>&nbsp;</td></tr>\n<tr><td nowrap><b>Signatory</b></td></tr>\n</table>\n</body>\n</html>',
+		'module': 'Accounts',
+		'name': '__common__',
+		'standard': 'Yes'
+	},
+
+	# Print Format, POS Invoice
+	{
+		'doctype': 'Print Format',
+		'name': 'POS Invoice'
+	}
+]
\ No newline at end of file
diff --git a/erpnext/accounts/Print Format/Payment Receipt Voucher/Payment Receipt Voucher.txt b/erpnext/accounts/Print Format/Payment Receipt Voucher/Payment Receipt Voucher.txt
index fa0145a..932df2e 100755
--- a/erpnext/accounts/Print Format/Payment Receipt Voucher/Payment Receipt Voucher.txt
+++ b/erpnext/accounts/Print Format/Payment Receipt Voucher/Payment Receipt Voucher.txt
@@ -3,17 +3,17 @@
 
 	# These values are common in all dictionaries
 	{
-		'creation': '2011-03-25 17:30:45',
+		'creation': '2011-03-28 15:17:25',
 		'docstatus': 0,
-		'modified': '2011-04-27 11:44:30',
-		'modified_by': 'Administrator',
+		'modified': '2011-03-28 12:31:40',
+		'modified_by': 'umair@iwebnotes.com',
 		'owner': 'Administrator'
 	},
 
 	# These values are common for all Print Format
 	{
 		'doctype': 'Print Format',
-		'html': '<div style="position: relative;">\n<h3 align="center"><script>doc.company</script>\n</div>\n\n<font size="4">\n<table class=\'simpletable\'>\n<tr>\n<td><b> Receipt No.: </b></td>\n<td><script>doc.name</script></td>\n</tr>\n<tr>\n<td><b> Date : </b></td>\n<td><script>date.str_to_user(doc.voucher_date)</script></td>\n</tr>      \n<tr>\n<td><b> Remark: </b></td>\n<td><script> doc.remark </script></td>\n</tr>\n<tr>\n<td><b> Received From: </b></td>\n<td><b><script> doc.pay_to_rec_from </script></b></td>\n</tr>\n</table>\n<br>\n\n<div><b><script>doc.total_amount</script></b> </td></div><br>\n<div style="text-align:left"><b><script>doc.total_amount_in_words</script></b></div><br>\n<div>This receipt is issued subject to realization of the <script>if(doc.cheque_no){\'Cheque\'}else{\'Cash\'}</script></div>\n</font>\n<br>\n<table class="noborder">\n<tr>\n<td style = "text-align = right;"><h3>For <script>doc.company</script>,</h3><br><div>(Authorised Signatory)</div></td>\n</tr>\n</table>',
+		'html': '<div style="position: relative;">\n<h3 align="center"><script>doc.company</script>\n</div>\n\n<font size="4">\n<table class=\'simpletable\'>\n<tr>\n<td><b> Receipt No.: </b></td>\n<td><script>doc.name</script></td>\n</tr>\n<tr>\n<td><b> Date : </b></td>\n<td><script>date.str_to_user(doc.voucher_date)</script></td>\n</tr>      \n<tr>\n<td><b> Remark: </b></td>\n<td><script> doc.remark </script></td>\n</tr>\n<tr>\n<td><b> Received From: </b></td>\n<td><b><script> doc.pay_to_rec_from </script></b></td>\n</tr>\n</table>\n<br>\n\n<div><b><script>doc.total_amount</script></b> </td></div><br>\n<div style="text-align:left"><b><script>doc.total_amount_in_words</script></b></div><br>\n<div>This receipt is issued subject to realization of the Cheque</div>\n</font>\n<br>\n<table class="noborder">\n<tr>\n<td style = "text-align = right;"><h3>For <script>doc.company</script>,</h3><br><div>(Authorised Signatory)</div></td>\n</tr>\n</table>',
 		'module': 'Accounts',
 		'name': '__common__',
 		'standard': 'Yes'
diff --git a/erpnext/accounts/Print Format/Sales Invoice Classic/Sales Invoice Classic.txt b/erpnext/accounts/Print Format/Sales Invoice Classic/Sales Invoice Classic.txt
new file mode 100644
index 0000000..2fed0c4
--- /dev/null
+++ b/erpnext/accounts/Print Format/Sales Invoice Classic/Sales Invoice Classic.txt
@@ -0,0 +1,28 @@
+# Print Format, Sales Invoice Classic
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2011-11-15 17:30:44',
+		'docstatus': 0,
+		'modified': '2011-11-16 13:46:05',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all Print Format
+	{
+		'doc_type': 'Receivable Voucher',
+		'doctype': 'Print Format',
+		'html': '<!--\n\tSample Print Format for ERPNext\n\tPlease use at your own discretion\n\tFor suggestions and contributions:\n\t\thttps://github.com/webnotes/erpnext-print-templates\n\n\tFreely usable under MIT license\n-->\n\n<!-- Style Settings -->\n<style>\n\t/*\n\t\tcommon style for whole page\n\t\tThis should include:\n\t\t+ page size related settings\n\t\t+ font family settings\n\t\t+ line spacing settings\n\t*/\n\t@media screen {\n\t\tbody {\n\t\t\twidth: 8.3in;\n\t\t}\n\t}\n\n\thtml, body, div, span, td {\n\t\tfont-family: "Georgia", serif;\n\t\tfont-size: 12px;\n\t}\n\n\tbody {\n\t\tpadding: 10px;\n\t\tmargin: auto;\n\t\tfont-size: 12px;\n\t\tline-height: 150%;\n\t}\n\n\t.common {\n\t\tfont-family: "Georgia", serif !important;\n\t\tfont-size: 12px;\n\t\tpadding: 10px 0px;\n\t}\n\n\ttable {\n\t\tborder-collapse: collapse;\n\t\twidth: 100%;\n\t\tvertical-align: top;\n\t}\n\n\ttable td {\n\t\tpadding: 2px 0px;\n\t}\n\t\n\ttable h1, h2, h3, h4, h5, h6 {\n\t\tpadding: 0px;\n\t\tmargin: 0px;\n\t}\n\n\ttable.header-table td {\n\t\tvertical-align: top;\n\t}\n\n\ttable.header-table thead {\n\t\tborder-bottom: 1px solid black;\n\t}\n\n\ttable.header-table h3 {\n\t\tcolor: gray;\n\t}\n\n\ttable.header-table thead td {\n\t\tpadding: 5px 0px;\n\t}\n\n\tdiv.page-body table td:nth-child(6),\n\tdiv.page-body table td:nth-child(7) {\n\t\ttext-align: right;\n\t}\n\n\ttable.footer-table td {\n\t\tvertical-align: top;\n\t}\n\n\ttable.footer-table td table td:nth-child(2),\n\ttable.footer-table td table td:nth-child(3) {\n\t\ttext-align: right;\n\t}\n</style>\n\n\n<!-- Javascript -->\n<script>\n\tsi_std = {\n\t\tprint_item_table: function() {\n\t\t\tvar table = print_table(\n\t\t\t\t\'Receivable Voucher\',\n\t\t\t\tdoc.name,\n\t\t\t\t\'entries\',\n\t\t\t\t\'RV Detail\',\n\t\t\t\t[// Here specify the table columns to be displayed\n\t\t\t\t\t\'SR\', \'item_name\', \'description\', \'qty\', \'stock_uom\',\n\t\t\t\t\t\'export_rate\', \'export_amount\'\n\t\t\t\t],\n\t\t\t\t[// Here specify the labels of column headings\n\t\t\t\t\t\'Sr\', \'Item Name\', \'Description\', \'Qty\',\n\t\t\t\t\t\'UoM\', \'Basic Rate\', \'Amount\'\n\t\t\t\t],\n\t\t\t\t[// Here specify the column widths\n\t\t\t\t\t\'3%\', \'20%\', \'37%\', \'5%\',\n\t\t\t\t\t\'5%\', \'15%\', \'15%\'\n\t\t\t\t]\n\t\t\t);\n\n\t\t\t// This code takes care of page breaks\n\t\t\tif(table.appendChild) {\n\t\t\t\tout = table.innerHTML;\n\t\t\t} else {\n\t\t\t\tout = \'\';\n\t\t\t\tfor(var i=0; i < (table.length-1); i++) {\n\t\t\t\t\tout += table[i].innerHTML + \n\t\t\t\t\t\t\'<div style = "page-break-after: always;" \\\n\t\t\t\t\t\tclass = "page_break"></div>\\\n\t\t\t\t\t\t<div class="page-settings"></div>\';\n\t\t\t\t}\n\t\t\t\tout += table[table.length-1].innerHTML;\n\t\t\t}\n\t\t\treturn out;\n\t\t},\n\n\n\t\tprint_other_charges: function(parent) {\n\t\t\tconsole.log(parent);\n\t\t\tvar oc = getchildren(\'RV Tax Detail\', doc.name, \'other_charges\');\n\t\t\tvar rows = \'<table width=100%>\\n\';\n\t\t\tfor(var i=0; i<oc.length; i++) {\n\t\t\t\trows +=\n\t\t\t\t\t\'<tr>\\n\' +\n\t\t\t\t\t\t\'\\t<td>\' + oc[i].description + \'</td>\\n\' +\n\t\t\t\t\t\t\'\\t<td></td>\\n\' +\n\t\t\t\t\t\t\'\\t<td width=38%>\' + fmt_money(oc[i].tax_amount) + \'</td>\\n\' +\n\t\t\t\t\t\'</tr>\\n\';\n\t\t\t}\n\t\t\treturn rows + \'</table>\\n\';\n\t\t}\n\t};\n</script>\n\n\n<!-- Page Layout Settings -->\n<div class=\'common page-header\'>\n\t<!-- \n\t\tPage Header will contain\n\t\t\t+ table 1\n\t\t\t\t+ table 1a\n\t\t\t\t\t- Name\n\t\t\t\t\t- Address\n\t\t\t\t\t- Contact\n\t\t\t\t\t- Mobile No\n\t\t\t\t+ table 1b\n\t\t\t\t\t- Voucher Date\n\t\t\t\t\t- Due Date\n\t-->\n\t<table class=\'header-table\' cellspacing=0>\n\t\t<thead>\n\t\t\t<tr><td><h1>Invoice</h1></td></tr>\n\t\t\t<tr><td><h3><script>cur_frm.docname</script></h3></td></tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td width=60%><table width=100% cellspacing=0><tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td width=39%><b>Name</b></td>\n\t\t\t\t\t\t<td><script>doc.customer_name</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Address</b></td>\n\t\t\t\t\t\t<td><script>replace_newlines(doc.address_display)</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Contact</b></td>\n\t\t\t\t\t\t<td><script>doc.contact_display</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody></table></td>\n\t\t\t\t<td><table width=100% cellspacing=0><tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td width=40%><b>Invoice Date</b></td>\n\t\t\t\t\t\t<td><script>date.str_to_user(doc.voucher_date)</script></td>\n\t\t\t\t\t<tr>\t\t\t\t\t\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Due Date</b></td>\n\t\t\t\t\t\t<td><script>date.str_to_user(doc.due_date)</script></td>\n\t\t\t\t\t<tr>\t\t\t\t\t\n\t\t\t\t</tbody></table></td>\n\t\t\t</tr>\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\n\t\t</tfoot>\n\t</table>\n</div>\n<div class=\'common page-body\'>\n\t<!-- \n\t\tPage Body will contain\n\t\t\t+ table 2\n\t\t\t\t- Sales Invoice Data\n\t-->\n\t<script>si_std.print_item_table()</script>\n</div>\n<div class=\'common page-footer\'>\n\t<!-- \n\t\tPage Footer will contain\n\t\t\t+ table 3\n\t\t\t\t- Terms and Conditions\n\t\t\t\t- Total Rounded Amount Calculation\n\t\t\t\t- Total Rounded Amount in Words\n\t-->\n\t<table class=\'footer-table\' width=100% cellspacing=0>\n\t\t<thead>\n\t\t\t\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td width=60% style=\'padding-right: 10px;\'>\n\t\t\t\t\t<b>Terms, Conditions &amp; Other Information:</b><br />\n\t\t\t\t\t<script>doc.terms</script>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<table cellspacing=0 width=100%><tbody>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>Net Total</td>\n\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t<td width=38%><script>\n\t\t\t\t\t\t\t\tfmt_money(doc.net_total/doc.conversion_rate)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>Grand Total</td>\n\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t<td><script>\n\t\t\t\t\t\t\t\tfmt_money(doc.grand_total_export)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr style=\'font-weight: bold\'>\n\t\t\t\t\t\t\t<td>Rounded Total</td>\n\t\t\t\t\t\t\t<td><script>doc.currency</script></td>\n\t\t\t\t\t\t\t<td><script>\n\t\t\t\t\t\t\t\tfmt_money(doc.rounded_total_export)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</tbody></table>\n\t\t\t\t\t<br /><b>In Words</b><br />\n\t\t\t\t\t<i><script>doc.in_words_export</script></i>\n\t\t\t\t</td>\n\t\t\t</tr>\t\t\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\n\t\t</tfoot>\n\t</table>\n</div>\n\n',
+		'module': 'Accounts',
+		'name': '__common__',
+		'standard': 'Yes'
+	},
+
+	# Print Format, Sales Invoice Classic
+	{
+		'doctype': 'Print Format',
+		'name': 'Sales Invoice Classic'
+	}
+]
\ No newline at end of file
diff --git a/erpnext/accounts/Print Format/Sales Invoice Modern/Sales Invoice Modern.txt b/erpnext/accounts/Print Format/Sales Invoice Modern/Sales Invoice Modern.txt
new file mode 100644
index 0000000..ea8a911
--- /dev/null
+++ b/erpnext/accounts/Print Format/Sales Invoice Modern/Sales Invoice Modern.txt
@@ -0,0 +1,28 @@
+# Print Format, Sales Invoice Modern
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2011-11-15 17:30:44',
+		'docstatus': 0,
+		'modified': '2011-11-16 13:44:58',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all Print Format
+	{
+		'doc_type': 'Receivable Voucher',
+		'doctype': 'Print Format',
+		'html': '<!--\n\tSample Print Format for ERPNext\n\tPlease use at your own discretion\n\tFor suggestions and contributions:\n\t\thttps://github.com/webnotes/erpnext-print-templates\n\n\tFreely usable under MIT license\n-->\n\n<!-- Style Settings -->\n<style>\n\t/*\n\t\tcommon style for whole page\n\t\tThis should include:\n\t\t+ page size related settings\n\t\t+ font family settings\n\t\t+ line spacing settings\n\t*/\n\t@media screen {\n\t\tbody {\n\t\t\twidth: 8.3in;\n\t\t}\n\t}\n\n\thtml, body, div, span, td {\n\t\tfont-family: "Helvetica", "Arial", sans-serif;\n\t\tfont-size: 12px;\n\t}\n\n\tbody {\n\t\tpadding: 10px;\n\t\tmargin: auto;\n\t\tfont-size: 12px;\n\t\tline-height: 150%;\n\t}\n\n\t.common {\n\t\tfont-family: "Helvetica", "Arial", sans-serif !important;\n\t\tfont-size: 12px;\n\t\tpadding: 10px 0px;\n\t}\n\n\ttable {\n\t\tborder-collapse: collapse;\n\t\twidth: 100%;\n\t\tvertical-align: top;\n\t\tborder-style: none !important;\n\t}\n\n\ttable td {\n\t\tpadding: 2px 0px;\n\t\tborder-style: none !important;\n\t}\n\t\n\ttable h1, h2, h3, h4, h5, h6 {\n\t\tpadding: 0px;\n\t\tmargin: 0px;\n\t}\n\n\ttable.header-table td {\n\t\tvertical-align: top;\n\t}\n\n\ttable.header-table h1 {\n\t\ttext-transform: uppercase;\n\t\tcolor: white;\n\t\tfont-size: 55px;\n\t\tfont-style: italic;\n\t}\n\n\ttable.header-table thead tr:nth-child(1) div {\n\t\theight: 24px;\n\t\tbackground-color: #696969;\n\t\tvertical-align: middle;\n\t\tpadding: 12px 0px 0px 0px;\n\t\twidth: 100%;\n\t}\n\n\tdiv.page-body table td:nth-child(6),\n\tdiv.page-body table td:nth-child(7) {\n\t\ttext-align: right;\n\t}\n\n\tdiv.page-body table tr td {\n\t\tbackground-color: #DCDCDC !important;\n\t}\n\n\tdiv.page-body table tr:nth-child(1) td {\n\t\tbackground-color: #696969 !important;\n\t\tcolor: white !important;\n\t}\n\n\ttable.footer-table td {\n\t\tvertical-align: top;\n\t}\n\n\ttable.footer-table td table td:nth-child(2),\n\ttable.footer-table td table td:nth-child(3) {\n\t\ttext-align: right;\n\t}\n\n\ttable.footer-table tfoot td {\n\t\tbackground-color: #696969;\n\t\theight: 10px;\n\t}\n\n\t.imp-details {\n\t\tbackground-color: #DCDCDC;\n\t}\n</style>\n\n\n<!-- Javascript -->\n<script>\n\tsi_std = {\n\t\tprint_item_table: function() {\n\t\t\tvar table = print_table(\n\t\t\t\t\'Receivable Voucher\',\n\t\t\t\tdoc.name,\n\t\t\t\t\'entries\',\n\t\t\t\t\'RV Detail\',\n\t\t\t\t[// Here specify the table columns to be displayed\n\t\t\t\t\t\'SR\', \'item_name\', \'description\', \'qty\', \'stock_uom\',\n\t\t\t\t\t\'export_rate\', \'export_amount\'\n\t\t\t\t],\n\t\t\t\t[// Here specify the labels of column headings\n\t\t\t\t\t\'Sr\', \'Item Name\', \'Description\', \'Qty\',\n\t\t\t\t\t\'UoM\', \'Basic Rate\', \'Amount\'\n\t\t\t\t],\n\t\t\t\t[// Here specify the column widths\n\t\t\t\t\t\'3%\', \'20%\', \'37%\', \'5%\',\n\t\t\t\t\t\'5%\', \'15%\', \'15%\'\n\t\t\t\t]\n\t\t\t);\n\n\t\t\t// This code takes care of page breaks\n\t\t\tif(table.appendChild) {\n\t\t\t\tout = table.innerHTML;\n\t\t\t} else {\n\t\t\t\tout = \'\';\n\t\t\t\tfor(var i=0; i < (table.length-1); i++) {\n\t\t\t\t\tout += table[i].innerHTML + \n\t\t\t\t\t\t\'<div style = "page-break-after: always;" \\\n\t\t\t\t\t\tclass = "page_break"></div>\\\n\t\t\t\t\t\t<div class="page-settings"></div>\';\n\t\t\t\t}\n\t\t\t\tout += table[table.length-1].innerHTML;\n\t\t\t}\n\t\t\treturn out;\n\t\t},\n\n\n\t\tprint_other_charges: function(parent) {\n\t\t\tconsole.log(parent);\n\t\t\tvar oc = getchildren(\'RV Tax Detail\', doc.name, \'other_charges\');\n\t\t\tvar rows = \'<table width=100%>\\n\';\n\t\t\tfor(var i=0; i<oc.length; i++) {\n\t\t\t\trows +=\n\t\t\t\t\t\'<tr>\\n\' +\n\t\t\t\t\t\t\'\\t<td>\' + oc[i].description + \'</td>\\n\' +\n\t\t\t\t\t\t\'\\t<td></td>\\n\' +\n\t\t\t\t\t\t\'\\t<td width=38%>\' + fmt_money(oc[i].tax_amount) + \'</td>\\n\' +\n\t\t\t\t\t\'</tr>\\n\';\n\t\t\t}\n\t\t\treturn rows + \'</table>\\n\';\n\t\t}\n\t};\n</script>\n\n\n<!-- Page Layout Settings -->\n<div class=\'common page-header\'>\n\t<!-- \n\t\tPage Header will contain\n\t\t\t+ table 1\n\t\t\t\t+ table 1a\n\t\t\t\t\t- Name\n\t\t\t\t\t- Address\n\t\t\t\t\t- Contact\n\t\t\t\t\t- Mobile No\n\t\t\t\t+ table 1b\n\t\t\t\t\t- Voucher Date\n\t\t\t\t\t- Due Date\n\t-->\n\t<table class=\'header-table\' cellspacing=0>\n\t\t<thead>\n\t\t\t<tr><td colspan=2><div><h1>Invoice</h1></div></td></tr>\n\t\t\t<tr><td colspan=2><div style="height:15px"></div></td></tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td width=60%><table width=100% cellspacing=0><tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td width=39%><b>Name</b></td>\n\t\t\t\t\t\t<td><script>doc.customer_name</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Address</b></td>\n\t\t\t\t\t\t<td><script>replace_newlines(doc.address_display)</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Contact</b></td>\n\t\t\t\t\t\t<td><script>doc.contact_display</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody></table></td>\n\t\t\t\t<td><table width=100% cellspacing=0><tbody>\n\t\t\t\t\t<tr class=\'imp-details\'>\n\t\t\t\t\t\t<td><b>Invoice No.</b></td>\n\t\t\t\t\t\t<td><script>cur_frm.docname</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td width=40%><b>Invoice Date</b></td>\n\t\t\t\t\t\t<td><script>date.str_to_user(doc.voucher_date)</script></td>\n\t\t\t\t\t<tr>\t\t\t\t\t\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Due Date</b></td>\n\t\t\t\t\t\t<td><script>date.str_to_user(doc.due_date)</script></td>\n\t\t\t\t\t<tr>\t\t\t\t\t\n\t\t\t\t</tbody></table></td>\n\t\t\t</tr>\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\n\t\t</tfoot>\n\t</table>\n</div>\n<div class=\'common page-body\'>\n\t<!-- \n\t\tPage Body will contain\n\t\t\t+ table 2\n\t\t\t\t- Sales Invoice Data\n\t-->\n\t<script>si_std.print_item_table()</script>\n</div>\n<div class=\'common page-footer\'>\n\t<!-- \n\t\tPage Footer will contain\n\t\t\t+ table 3\n\t\t\t\t- Terms and Conditions\n\t\t\t\t- Total Rounded Amount Calculation\n\t\t\t\t- Total Rounded Amount in Words\n\t-->\n\t<table class=\'footer-table\' width=100% cellspacing=0>\n\t\t<thead>\n\t\t\t\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td width=60% style=\'padding-right: 10px;\'>\n\t\t\t\t\t<b>Terms, Conditions &amp; Other Information:</b><br />\n\t\t\t\t\t<script>doc.terms</script>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<table cellspacing=0 width=100%><tbody>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>Net Total</td>\n\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t<td width=38%><script>\n\t\t\t\t\t\t\t\tfmt_money(doc.net_total/doc.conversion_rate)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>Grand Total</td>\n\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t<td><script>\n\t\t\t\t\t\t\t\tfmt_money(doc.grand_total_export)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr style=\'font-weight: bold\' class=\'imp-details\'>\n\t\t\t\t\t\t\t<td>Rounded Total</td>\n\t\t\t\t\t\t\t<td><script>doc.currency</script></td>\n\t\t\t\t\t\t\t<td><script>\n\t\t\t\t\t\t\t\tfmt_money(doc.rounded_total_export)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</tbody></table>\n\t\t\t\t\t<br /><b>In Words</b><br />\n\t\t\t\t\t<i><script>doc.in_words_export</script></i>\n\t\t\t\t</td>\n\t\t\t</tr>\t\t\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\t<tr><td colspan=2><div></div></td><tr>\n\t\t</tfoot>\n\t</table>\n</div>\n\n',
+		'module': 'Accounts',
+		'name': '__common__',
+		'standard': 'Yes'
+	},
+
+	# Print Format, Sales Invoice Modern
+	{
+		'doctype': 'Print Format',
+		'name': 'Sales Invoice Modern'
+	}
+]
\ No newline at end of file
diff --git a/erpnext/accounts/Print Format/Sales Invoice Spartan/Sales Invoice Spartan.txt b/erpnext/accounts/Print Format/Sales Invoice Spartan/Sales Invoice Spartan.txt
new file mode 100644
index 0000000..d466b73
--- /dev/null
+++ b/erpnext/accounts/Print Format/Sales Invoice Spartan/Sales Invoice Spartan.txt
@@ -0,0 +1,28 @@
+# Print Format, Sales Invoice Spartan
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2011-11-15 17:30:44',
+		'docstatus': 0,
+		'modified': '2011-11-16 14:45:46',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all Print Format
+	{
+		'doc_type': 'Receivable Voucher',
+		'doctype': 'Print Format',
+		'html': '<!--\n\tSample Print Format for ERPNext\n\tPlease use at your own discretion\n\tFor suggestions and contributions:\n\t\thttps://github.com/webnotes/erpnext-print-templates\n\n\tFreely usable under MIT license\n-->\n\n<!-- Style Settings -->\n<style>\n\t/*\n\t\tcommon style for whole page\n\t\tThis should include:\n\t\t+ page size related settings\n\t\t+ font family settings\n\t\t+ line spacing settings\n\t*/\n\t@media screen {\n\t\tbody {\n\t\t\twidth: 8.3in;\n\t\t}\n\t}\n\n\thtml, body, div, span, td {\n\t\tfont-family: "Arial", sans-serif;\n\t\tfont-size: 12px;\n\t}\n\n\tbody {\n\t\tpadding: 10px;\n\t\tmargin: auto;\n\t\tfont-size: 12px;\n\t\tline-height: 150%;\n\t}\n\n\t.common {\n\t\tfont-family: "Arial", sans-serif !important;\n\t\tfont-size: 12px;\n\t\tpadding: 0px;\n\t}\n\n\ttable {\n\t\twidth: 100% !important;\n\t\tvertical-align: top;\n\t}\n\n\ttable td {\n\t\tpadding: 2px 0px;\n\t}\n\n\ttable, td {\n\t\tborder-collapse: collapse !important;\n\t\tpadding: 0px;\n\t\tmargin: 0px !important;\n\t}\n\t\n\ttable h1, h2, h3, h4, h5, h6 {\n\t\tpadding: 0px;\n\t\tmargin: 0px;\n\t}\n\n\ttable.header-table td {\n\t\tvertical-align: top;\n\t}\n\n\ttable.header-table h3 {\n\t\tcolor: gray;\n\t}\n\n\ttable.header-table thead td {\n\t\tpadding: 5px;\n\t}\n\n\ttable.header-table > thead,\n\ttable.header-table > tbody > tr > td,\n\ttable.footer-table > tbody > tr > td {\n\t\tborder: 1px solid black;\n\t\tpadding: 5px;\n\t}\n\n\ttable.footer-table > tbody,\n\ttable.header-table > thead {\n\t\tborder-bottom: 3px solid black;\n\t}\n\n\ttable.header-table > thead {\n\t\tborder-top: 3px solid black;\n\t}\n\n\tdiv.page-body table td:nth-child(6),\n\tdiv.page-body table td:nth-child(7) {\n\t\ttext-align: right;\n\t}\n\n\tdiv.page-body td {\n\t\tbackground-color: white !important;\n\t\tborder: 1px solid black !important;\n\t}\n\n\ttable.footer-table td {\n\t\tvertical-align: top;\n\t}\n\n\ttable.footer-table td table td:nth-child(2),\n\ttable.footer-table td table td:nth-child(3) {\n\t\ttext-align: right;\n\t}\n</style>\n\n\n<!-- Javascript -->\n<script>\n\tsi_std = {\n\t\tprint_item_table: function() {\n\t\t\tvar table = print_table(\n\t\t\t\t\'Receivable Voucher\',\n\t\t\t\tdoc.name,\n\t\t\t\t\'entries\',\n\t\t\t\t\'RV Detail\',\n\t\t\t\t[// Here specify the table columns to be displayed\n\t\t\t\t\t\'SR\', \'item_name\', \'description\', \'qty\', \'stock_uom\',\n\t\t\t\t\t\'export_rate\', \'export_amount\'\n\t\t\t\t],\n\t\t\t\t[// Here specify the labels of column headings\n\t\t\t\t\t\'Sr\', \'Item Name\', \'Description\', \'Qty\',\n\t\t\t\t\t\'UoM\', \'Basic Rate\', \'Amount\'\n\t\t\t\t],\n\t\t\t\t[// Here specify the column widths\n\t\t\t\t\t\'3%\', \'20%\', \'37%\', \'5%\',\n\t\t\t\t\t\'5%\', \'15%\', \'15%\'\n\t\t\t\t]\n\t\t\t);\n\n\t\t\t// This code takes care of page breaks\n\t\t\tif(table.appendChild) {\n\t\t\t\tout = table.innerHTML;\n\t\t\t} else {\n\t\t\t\tout = \'\';\n\t\t\t\tfor(var i=0; i < (table.length-1); i++) {\n\t\t\t\t\tout += table[i].innerHTML + \n\t\t\t\t\t\t\'<div style = "page-break-after: always;" \\\n\t\t\t\t\t\tclass = "page_break"></div>\\\n\t\t\t\t\t\t<div class="page-settings"></div>\';\n\t\t\t\t}\n\t\t\t\tout += table[table.length-1].innerHTML;\n\t\t\t}\n\t\t\treturn out;\n\t\t},\n\n\n\t\tprint_other_charges: function(parent) {\n\t\t\tconsole.log(parent);\n\t\t\tvar oc = getchildren(\'RV Tax Detail\', doc.name, \'other_charges\');\n\t\t\tvar rows = \'<table width=100%>\\n\';\n\t\t\tfor(var i=0; i<oc.length; i++) {\n\t\t\t\trows +=\n\t\t\t\t\t\'<tr>\\n\' +\n\t\t\t\t\t\t\'\\t<td>\' + oc[i].description + \'</td>\\n\' +\n\t\t\t\t\t\t\'\\t<td></td>\\n\' +\n\t\t\t\t\t\t\'\\t<td width=38%>\' + fmt_money(oc[i].tax_amount) + \'</td>\\n\' +\n\t\t\t\t\t\'</tr>\\n\';\n\t\t\t}\n\t\t\treturn rows + \'</table>\\n\';\n\t\t}\n\t};\n</script>\n\n\n<!-- Page Layout Settings -->\n<div class=\'common page-header\'>\n\t<!-- \n\t\tPage Header will contain\n\t\t\t+ table 1\n\t\t\t\t+ table 1a\n\t\t\t\t\t- Name\n\t\t\t\t\t- Address\n\t\t\t\t\t- Contact\n\t\t\t\t\t- Mobile No\n\t\t\t\t+ table 1b\n\t\t\t\t\t- Voucher Date\n\t\t\t\t\t- Due Date\n\t-->\n\t<table class=\'header-table\' cellspacing=0>\n\t\t<thead>\n\t\t\t<tr><td colspan=2><h1>Invoice</h1></td></tr>\n\t\t\t<tr><td colspan=2><h3><script>cur_frm.docname</script></h3></td></tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td width=60%><table width=100% cellspacing=0><tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td width=39%><b>Name</b></td>\n\t\t\t\t\t\t<td><script>doc.customer_name</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Address</b></td>\n\t\t\t\t\t\t<td><script>replace_newlines(doc.address_display)</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Contact</b></td>\n\t\t\t\t\t\t<td><script>doc.contact_display</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody></table></td>\n\t\t\t\t<td><table width=100% cellspacing=0><tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td width=40%><b>Invoice Date</b></td>\n\t\t\t\t\t\t<td><script>date.str_to_user(doc.voucher_date)</script></td>\n\t\t\t\t\t<tr>\t\t\t\t\t\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Due Date</b></td>\n\t\t\t\t\t\t<td><script>date.str_to_user(doc.due_date)</script></td>\n\t\t\t\t\t<tr>\t\t\t\t\t\n\t\t\t\t</tbody></table></td>\n\t\t\t</tr>\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\n\t\t</tfoot>\n\t</table>\n</div>\n<div class=\'common page-body\'>\n\t<!-- \n\t\tPage Body will contain\n\t\t\t+ table 2\n\t\t\t\t- Sales Invoice Data\n\t-->\n\t<script>si_std.print_item_table()</script>\n</div>\n<div class=\'common page-footer\'>\n\t<!-- \n\t\tPage Footer will contain\n\t\t\t+ table 3\n\t\t\t\t- Terms and Conditions\n\t\t\t\t- Total Rounded Amount Calculation\n\t\t\t\t- Total Rounded Amount in Words\n\t-->\n\t<table class=\'footer-table\' width=100% cellspacing=0>\n\t\t<thead>\n\t\t\t\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td width=60% style=\'padding-right: 10px;\'>\n\t\t\t\t\t<b>Terms, Conditions &amp; Other Information:</b><br />\n\t\t\t\t\t<script>doc.terms</script>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<table cellspacing=0 width=100%><tbody>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>Net Total</td>\n\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t<td width=38%><script>\n\t\t\t\t\t\t\t\tfmt_money(doc.net_total/doc.conversion_rate)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>Grand Total</td>\n\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t<td><script>\n\t\t\t\t\t\t\t\tfmt_money(doc.grand_total_export)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr style=\'font-weight: bold\'>\n\t\t\t\t\t\t\t<td>Rounded Total</td>\n\t\t\t\t\t\t\t<td><script>doc.currency</script></td>\n\t\t\t\t\t\t\t<td><script>\n\t\t\t\t\t\t\t\tfmt_money(doc.rounded_total_export)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</tbody></table>\n\t\t\t\t\t<br /><b>In Words</b><br />\n\t\t\t\t\t<i><script>doc.in_words_export</script></i>\n\t\t\t\t</td>\n\t\t\t</tr>\t\t\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\n\t\t</tfoot>\n\t</table>\n</div>\n\n\n',
+		'module': 'Accounts',
+		'name': '__common__',
+		'standard': 'Yes'
+	},
+
+	# Print Format, Sales Invoice Spartan
+	{
+		'doctype': 'Print Format',
+		'name': 'Sales Invoice Spartan'
+	}
+]
\ No newline at end of file
diff --git a/erpnext/accounts/doctype/lease_agreement/lease_agreement.js b/erpnext/accounts/doctype/lease_agreement/lease_agreement.js
index 8ffd522..7b90be9 100644
--- a/erpnext/accounts/doctype/lease_agreement/lease_agreement.js
+++ b/erpnext/accounts/doctype/lease_agreement/lease_agreement.js
@@ -75,4 +75,4 @@
 cur_frm.fields_dict.invoice.get_query=function(doc){
 
 	return "SELECT tv.name FROM `tabReceivable Voucher` tv WHERE debit_to='"+doc.account+"' and  tv.%(key)s like '%s' ORDER BY tv.name LIMIT 50"
-}
\ No newline at end of file
+}
diff --git a/erpnext/accounts/doctype/payable_voucher/payable_voucher.js b/erpnext/accounts/doctype/payable_voucher/payable_voucher.js
index 5c27683..550c014 100644
--- a/erpnext/accounts/doctype/payable_voucher/payable_voucher.js
+++ b/erpnext/accounts/doctype/payable_voucher/payable_voucher.js
@@ -52,7 +52,6 @@
 
 //Supplier
 cur_frm.cscript.supplier = function(doc,dt,dn) {
-
   var callback = function(r,rt) {
       var doc = locals[cur_frm.doctype][cur_frm.docname];    
       get_server_fields('get_credit_to','','',doc, dt, dn, 0, callback2);
@@ -144,13 +143,6 @@
 }
 
 /* ******************************** TRIGGERS **************************************** */
-/*
-// Supplier
-// ---------
-cur_frm.cscript.supplier = function(doc,cdt,cdn){
-  get_server_fields('get_credit_to','','',doc,cdt,cdn);
-}
-*/
 
 // Conversion Rate
 // ----------------
@@ -420,7 +412,7 @@
 }
 
 // ***************** Get project name *****************
-cur_frm.fields_dict['project_name'].get_query = function(doc, cdt, cdn) {
+cur_frm.fields_dict['pv_details'].grid.get_field('project_name').get_query = function(doc, cdt, cdn) {
   return 'SELECT `tabProject`.name FROM `tabProject` WHERE `tabProject`.status = "Open" AND `tabProject`.name LIKE "%s" ORDER BY `tabProject`.name ASC LIMIT 50';
 }
 
diff --git a/erpnext/accounts/doctype/payable_voucher/payable_voucher.py b/erpnext/accounts/doctype/payable_voucher/payable_voucher.py
index 9f2848a..c4f0bc5 100644
--- a/erpnext/accounts/doctype/payable_voucher/payable_voucher.py
+++ b/erpnext/accounts/doctype/payable_voucher/payable_voucher.py
@@ -232,15 +232,11 @@
 	# Validate Acc Head of Supplier and Credit To Account entered
 	# ------------------------------------------------------------
 	def check_for_acc_head_of_supplier(self): 
-		acc_head = sql("select name from `tabAccount` where name = %s", (cstr(self.doc.supplier) + " - " + self.get_company_abbr()))
-		if self.doc.supplier:
-			if acc_head and acc_head[0][0]:
-				if not cstr(acc_head[0][0]) == cstr(self.doc.credit_to):
-					msgprint("Credit To: %s do not match with Supplier: %s for Company: %s i.e. %s" %(self.doc.credit_to,self.doc.supplier,self.doc.company,cstr(acc_head[0][0])))
-					raise Exception, "Validation Error "
-			if not acc_head:
-				msgprint("Supplier %s does not have an Account Head in %s. You must first create it from the Supplier Master" % (self.doc.supplier, self.doc.company))
-				raise Exception, "Validation Error "
+		if self.doc.supplier and self.doc.credit_to:
+			acc_head = sql("select master_name from `tabAccount` where name = %s", self.doc.credit_to)
+			
+			if (acc_head and cstr(acc_head[0][0]) != cstr(self.doc.supplier)) or (not acc_head and (self.doc.credit_to != cstr(self.doc.supplier) + " - " + self.get_company_abbr())):
+				msgprint("Credit To: %s do not match with Supplier: %s for Company: %s.\n If both correctly entered, please select Master Type and Master Name in account master." %(self.doc.credit_to,self.doc.supplier,self.doc.company), raise_exception=1)
 				
 	# Check for Stopped PO
 	# ---------------------
diff --git a/erpnext/accounts/doctype/pos_setting/pos_setting.js b/erpnext/accounts/doctype/pos_setting/pos_setting.js
index 4eed7b6..2bbc08c 100755
--- a/erpnext/accounts/doctype/pos_setting/pos_setting.js
+++ b/erpnext/accounts/doctype/pos_setting/pos_setting.js
@@ -1,109 +1,38 @@
+cur_frm.cscript.onload = function(doc,cdt,cdn){
+  $c_obj(make_doclist(cdt,cdn),'get_series','',function(r,rt){
+    if(r.message) set_field_options('naming_series', r.message);
+  });
  
-
-//--------- ONLOAD -------------
-cur_frm.cscript.onload = function(doc, cdt, cdn) {
-   
-}
-
-// Settings Module
-
-cur_frm.cscript.refresh = function(doc,cdt,cdn){
-   
-
-  if(doc.based_on == 'Grand Total' || doc.based_on == 'Average Discount' || doc.based_on == 'Total Claimed Amount' || doc.based_on == 'Not Applicable') hide_field('master_name');
-  else  unhide_field('master_name');
   
-  if(doc.based_on == 'Not Applicable') hide_field('value');
-  else unhide_field('value');
-  
-  if(doc.transaction == 'Expense Voucher' || doc.transaction == 'Appraisal'){
-    hide_field(['master_name','system_role', 'system_user']);
-    unhide_field(['to_emp','to_designation']);
-    if(doc.transaction == 'Appraisal') hide_field('value');
-    else unhide_field('value');
-  }
-  else {
-    unhide_field(['master_name','system_role', 'system_user','value']);
-    hide_field(['to_emp','to_designation']);
-  }
 }
 
-cur_frm.cscript.based_on = function(doc){
-  if(doc.based_on == 'Grand Total' || doc.based_on == 'Average Discount' || doc.based_on == 'Total Claimed Amount' || doc.based_on == 'Not Applicable'){
-    doc.master_name = '';
-    refresh_field('master_name');
-    hide_field('master_name');
-  }
-  else{
-    unhide_field('master_name');
-  }
-  
-  if(doc.based_on == 'Not Applicable') {
-      doc.value =0;
-      refresh_field('value');
-      hide_field('value');
-    }
-    else unhide_field('value');
+//cash bank account
+//------------------------------------
+cur_frm.fields_dict['cash_bank_account'].get_query = function(doc,cdt,cdn) {
+  return 'SELECT tabAccount.name FROM tabAccount WHERE tabAccount.debit_or_credit="Debit" AND tabAccount.is_pl_account = "No" AND tabAccount.group_or_ledger="Ledger" AND tabAccount.docstatus!=2 AND tabAccount.company="'+doc.company+'" AND tabAccount.%(key)s LIKE "%s"'
 }
 
-cur_frm.cscript.transaction = function(doc,cdt,cdn){
-  if(doc.transaction == 'Expense Voucher' || doc.transaction == 'Appraisal'){
-    doc.master_name = doc.system_role = doc.system_user = '';
-    refresh_many(['master_name','system_role', 'system_user']);
-    hide_field(['master_name','system_role', 'system_user']);
-    unhide_field(['to_emp','to_designation']);
-    if(doc.transaction == 'Appraisal') {
-      doc.value =0;
-      refresh_many('value');
-      hide_field('value');
-    }
-    else unhide_field('value');
-  }
-  else {
-    unhide_field(['master_name','system_role', 'system_user','value']);
-    hide_field(['to_emp','to_designation']);
-  }
-  
-  if(doc.transaction == 'Expense Voucher') doc.based_on = 'Total Claimed Amount';
-  if(doc.transaction == 'Appraisal') doc.based_on == 'Not Applicable';
+// Income Account 
+// --------------------------------
+cur_frm.fields_dict['income_account'].get_query = function(doc,cdt,cdn) {
+  return 'SELECT tabAccount.name FROM tabAccount WHERE tabAccount.debit_or_credit="Credit" AND tabAccount.group_or_ledger="Ledger" AND tabAccount.docstatus!=2 AND tabAccount.company="'+doc.company+'" AND tabAccount.account_type ="Income Account" AND tabAccount.%(key)s LIKE "%s"'
 }
 
 
-// System User Trigger
-// -------------------
-cur_frm.fields_dict['system_user'].get_query = function(doc) {
-  return 'SELECT tabProfile.name, tabProfile.first_name FROM tabProfile WHERE tabProfile.name not in ("Administrator","Guest") AND tabProfile.docstatus != 2 AND tabProfile.%(key)s LIKE "%s" LIMIT 50'
+// Cost Center 
+// -----------------------------
+cur_frm.fields_dict['cost_center'].get_query = function(doc,cdt,cdn) {
+  return 'SELECT `tabCost Center`.`name` FROM `tabCost Center` WHERE `tabCost Center`.`company_name` = "' +doc.company+'" AND `tabCost Center`.%(key)s LIKE "%s" AND `tabCost Center`.`group_or_ledger` = "Ledger" AND `tabCost Center`.`docstatus`!= 2 ORDER BY  `tabCost Center`.`name` ASC LIMIT 50';
+}
+
+//get query select Territory
+//=================================================================
+cur_frm.fields_dict['territory'].get_query = function(doc,cdt,cdn) {
+  return 'SELECT `tabTerritory`.`name`,`tabTerritory`.`parent_territory` FROM `tabTerritory` WHERE `tabTerritory`.`is_group` = "No" AND `tabTerritory`.`docstatus`!= 2 AND `tabTerritory`.%(key)s LIKE "%s"  ORDER BY  `tabTerritory`.`name` ASC LIMIT 50';
 }
 
 
-// System Role Trigger
-// -----------------------
-cur_frm.fields_dict['system_role'].get_query = function(doc) {
-  return 'SELECT tabRole.name FROM tabRole WHERE tabRole.name not in ("Administrator","Guest","All") AND tabRole.docstatus != 2 AND tabRole.%(key)s LIKE "%s" LIMIT 50'
-}
-
-
-// Approving User Trigger
-// -----------------------
-cur_frm.fields_dict['approving_user'].get_query = function(doc) {
-  return 'SELECT tabProfile.name, tabProfile.first_name FROM tabProfile WHERE tabProfile.name not in ("Administrator","Guest") AND tabProfile.docstatus != 2 AND tabProfile.%(key)s LIKE "%s" LIMIT 50'
-}
-
-
-// Approving Role Trigger
-// -----------------------
-cur_frm.fields_dict['approving_role'].get_query = function(doc) {
-  return 'SELECT tabRole.name FROM tabRole WHERE tabRole.name not in ("Administrator","Guest","All") AND tabRole.docstatus != 2 AND tabRole.%(key)s LIKE "%s" LIMIT 50'
-}
-
-
-// Master Name Trigger
-// --------------------
-cur_frm.fields_dict['master_name'].get_query = function(doc){
-  if(doc.based_on == 'Customerwise Discount')
-    return 'SELECT `tabCustomer`.`name` FROM `tabCustomer` WHERE `tabCustomer`.docstatus !=2 and `tabCustomer`.`name` LIKE "%s" ORDER BY `tabCustomer`.`name` DESC LIMIT 50';
-  else if(doc.based_on == 'Itemwise Discount')
-    return 'SELECT `tabItem`.`name` FROM `tabItem` WHERE (IFNULL(`tabItem`.`end_of_life`,"") = "" OR `tabItem`.`end_of_life` = "0000-00-00" OR `tabItem`.`end_of_life` > NOW()) and `tabItem`.is_sales_item = "Yes" and tabItem.%(key)s LIKE "%s" ORDER BY `tabItem`.`name` DESC LIMIT 50';
-  else
-    return 'SELECT `tabItem`.`name` FROM `tabItem` WHERE `tabItem`.`name` = "cheating done to avoid null" ORDER BY `tabItem`.`name` DESC LIMIT 50';
+// ------------------ Get Print Heading ------------------------------------
+cur_frm.fields_dict['select_print_heading'].get_query = function(doc, cdt, cdn) {
+  return 'SELECT `tabPrint Heading`.name FROM `tabPrint Heading` WHERE `tabPrint Heading`.docstatus !=2 AND `tabPrint Heading`.name LIKE "%s" ORDER BY `tabPrint Heading`.name ASC LIMIT 50';
 }
diff --git a/erpnext/accounts/doctype/purchase_tax_detail/purchase_tax_detail.txt b/erpnext/accounts/doctype/purchase_tax_detail/purchase_tax_detail.txt
index ed67ba2..58f66c7 100644
--- a/erpnext/accounts/doctype/purchase_tax_detail/purchase_tax_detail.txt
+++ b/erpnext/accounts/doctype/purchase_tax_detail/purchase_tax_detail.txt
@@ -5,8 +5,8 @@
 	{
 		'creation': '2010-08-08 17:09:16',
 		'docstatus': 0,
-		'modified': '2010-09-20 14:06:57',
-		'modified_by': 'umair@iwebnotes.com',
+		'modified': '2011-11-16 15:41:42',
+		'modified_by': 'Administrator',
 		'owner': 'wasim@webnotestech.com'
 	},
 
@@ -14,6 +14,7 @@
 	{
 		'autoname': 'PVTD.######',
 		'colour': 'White:FFF',
+		'default_print_format': 'Standard',
 		'doctype': 'DocType',
 		'hide_heading': 1,
 		'istable': 1,
@@ -22,7 +23,7 @@
 		'section_style': 'Tray',
 		'server_code_error': ' ',
 		'show_in_menu': 0,
-		'version': 10
+		'version': 12
 	},
 
 	# These values are common for all DocField
@@ -45,7 +46,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'category',
 		'fieldtype': 'Select',
-		'idx': 1,
 		'label': 'Category',
 		'oldfieldname': 'category',
 		'oldfieldtype': 'Select',
@@ -60,7 +60,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'add_deduct_tax',
 		'fieldtype': 'Select',
-		'idx': 2,
 		'label': 'Add or Deduct',
 		'oldfieldname': 'add_deduct_tax',
 		'oldfieldtype': 'Select',
@@ -75,7 +74,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'charge_type',
 		'fieldtype': 'Select',
-		'idx': 3,
 		'label': 'Type',
 		'oldfieldname': 'charge_type',
 		'oldfieldtype': 'Select',
@@ -91,7 +89,6 @@
 		'fieldname': 'row_id',
 		'fieldtype': 'Data',
 		'hidden': 0,
-		'idx': 4,
 		'label': 'Enter Row',
 		'oldfieldname': 'row_id',
 		'oldfieldtype': 'Data',
@@ -104,7 +101,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'item_wise_tax_detail',
 		'fieldtype': 'Small Text',
-		'idx': 5,
 		'label': 'Item Wise Tax Detail ',
 		'oldfieldname': 'item_wise_tax_detail',
 		'oldfieldtype': 'Small Text',
@@ -116,7 +112,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'description',
 		'fieldtype': 'Small Text',
-		'idx': 6,
 		'label': 'Description',
 		'oldfieldname': 'description',
 		'oldfieldtype': 'Small Text',
@@ -130,7 +125,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'account_head',
 		'fieldtype': 'Link',
-		'idx': 7,
 		'label': 'Account Head',
 		'oldfieldname': 'account_head',
 		'oldfieldtype': 'Link',
@@ -145,13 +139,11 @@
 		'doctype': 'DocField',
 		'fieldname': 'cost_center',
 		'fieldtype': 'Link',
-		'idx': 8,
 		'label': 'Cost Center',
 		'oldfieldname': 'cost_center',
 		'oldfieldtype': 'Link',
 		'options': 'Cost Center',
 		'permlevel': 0,
-		'search_index': 0,
 		'trigger': 'Client'
 	},
 
@@ -160,7 +152,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'rate',
 		'fieldtype': 'Currency',
-		'idx': 9,
 		'label': 'Rate',
 		'oldfieldname': 'rate',
 		'oldfieldtype': 'Currency',
@@ -174,7 +165,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'tax_amount',
 		'fieldtype': 'Currency',
-		'idx': 10,
 		'label': 'Amount',
 		'oldfieldname': 'tax_amount',
 		'oldfieldtype': 'Currency',
@@ -188,7 +178,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'total',
 		'fieldtype': 'Currency',
-		'idx': 11,
 		'label': 'Aggregate Total',
 		'oldfieldname': 'total',
 		'oldfieldtype': 'Currency',
@@ -201,7 +190,6 @@
 		'fieldname': 'parenttype',
 		'fieldtype': 'Data',
 		'hidden': 1,
-		'idx': 12,
 		'in_filter': 1,
 		'label': 'Parenttype',
 		'oldfieldname': 'parenttype',
@@ -218,7 +206,6 @@
 		'fieldname': 'total_tax_amount',
 		'fieldtype': 'Currency',
 		'hidden': 1,
-		'idx': 13,
 		'label': 'Total +Tax',
 		'no_copy': 1,
 		'oldfieldname': 'total_tax_amount',
@@ -235,7 +222,6 @@
 		'fieldname': 'total_amount',
 		'fieldtype': 'Currency',
 		'hidden': 1,
-		'idx': 14,
 		'label': 'Tax Amount',
 		'no_copy': 1,
 		'oldfieldname': 'total_amount',
diff --git a/erpnext/accounts/doctype/pv_detail/pv_detail.txt b/erpnext/accounts/doctype/pv_detail/pv_detail.txt
index 1e05160..1c1c0ae 100644
--- a/erpnext/accounts/doctype/pv_detail/pv_detail.txt
+++ b/erpnext/accounts/doctype/pv_detail/pv_detail.txt
@@ -5,7 +5,7 @@
 	{
 		'creation': '2010-08-08 17:09:17',
 		'docstatus': 0,
-		'modified': '2011-03-30 11:23:38',
+		'modified': '2011-10-20 18:41:17',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
@@ -14,6 +14,7 @@
 	{
 		'autoname': 'EVD.######',
 		'colour': 'White:FFF',
+		'default_print_format': 'Standard',
 		'doctype': 'DocType',
 		'istable': 1,
 		'module': 'Accounts',
@@ -21,7 +22,7 @@
 		'section_style': 'Tray',
 		'server_code_error': ' ',
 		'show_in_menu': 0,
-		'version': 26
+		'version': 27
 	},
 
 	# These values are common for all DocField
@@ -44,7 +45,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'item_code',
 		'fieldtype': 'Link',
-		'idx': 1,
 		'in_filter': 1,
 		'label': 'Item',
 		'oldfieldname': 'item_code',
@@ -62,7 +62,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'item_name',
 		'fieldtype': 'Data',
-		'idx': 2,
 		'in_filter': 0,
 		'label': 'Item Name',
 		'oldfieldname': 'item_name',
@@ -77,7 +76,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'brand',
 		'fieldtype': 'Data',
-		'idx': 3,
 		'label': 'Brand',
 		'oldfieldname': 'brand',
 		'oldfieldtype': 'Data',
@@ -90,7 +88,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'description',
 		'fieldtype': 'Text',
-		'idx': 4,
 		'label': 'Description',
 		'oldfieldname': 'description',
 		'oldfieldtype': 'Text',
@@ -103,7 +100,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'item_group',
 		'fieldtype': 'Link',
-		'idx': 5,
 		'in_filter': 1,
 		'label': 'Item Group',
 		'oldfieldname': 'item_group',
@@ -111,7 +107,7 @@
 		'options': 'Item Group',
 		'permlevel': 1,
 		'print_hide': 1,
-		'search_index': 0
+		'search_index': 1
 	},
 
 	# DocField
@@ -119,7 +115,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'rate',
 		'fieldtype': 'Currency',
-		'idx': 6,
 		'label': 'Rate (Default Curr.)',
 		'oldfieldname': 'rate',
 		'oldfieldtype': 'Currency',
@@ -134,7 +129,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'import_rate',
 		'fieldtype': 'Currency',
-		'idx': 7,
 		'label': 'Rate',
 		'oldfieldname': 'import_rate',
 		'oldfieldtype': 'Currency',
@@ -149,7 +143,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'qty',
 		'fieldtype': 'Currency',
-		'idx': 8,
 		'label': 'Qty',
 		'oldfieldname': 'qty',
 		'oldfieldtype': 'Currency',
@@ -164,7 +157,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'amount',
 		'fieldtype': 'Currency',
-		'idx': 9,
 		'label': 'Amount (Default Curr.)',
 		'oldfieldname': 'amount',
 		'oldfieldtype': 'Currency',
@@ -178,7 +170,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'import_amount',
 		'fieldtype': 'Currency',
-		'idx': 10,
 		'label': 'Amount',
 		'oldfieldname': 'import_amount',
 		'oldfieldtype': 'Currency',
@@ -192,7 +183,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'expense_head',
 		'fieldtype': 'Link',
-		'idx': 11,
 		'label': 'Expense Head',
 		'oldfieldname': 'expense_head',
 		'oldfieldtype': 'Link',
@@ -210,7 +200,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'cost_center',
 		'fieldtype': 'Link',
-		'idx': 12,
 		'label': 'Cost Center',
 		'oldfieldname': 'cost_center',
 		'oldfieldtype': 'Link',
@@ -223,10 +212,22 @@
 
 	# DocField
 	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'project_name',
+		'fieldtype': 'Link',
+		'in_filter': 1,
+		'label': 'Project Name',
+		'options': 'Project',
+		'permlevel': 0,
+		'print_hide': 1
+	},
+
+	# DocField
+	{
 		'doctype': 'DocField',
 		'fieldname': 'purchase_order',
 		'fieldtype': 'Link',
-		'idx': 13,
 		'in_filter': 1,
 		'label': 'Pur Order',
 		'oldfieldname': 'purchase_order',
@@ -243,7 +244,6 @@
 		'fieldname': 'po_detail',
 		'fieldtype': 'Data',
 		'hidden': 1,
-		'idx': 14,
 		'in_filter': 1,
 		'label': 'PO Detail',
 		'oldfieldname': 'po_detail',
@@ -258,7 +258,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'purchase_receipt',
 		'fieldtype': 'Link',
-		'idx': 15,
 		'in_filter': 1,
 		'label': 'Pur Receipt',
 		'oldfieldname': 'purchase_receipt',
@@ -275,7 +274,6 @@
 		'fieldname': 'pr_detail',
 		'fieldtype': 'Data',
 		'hidden': 1,
-		'idx': 16,
 		'in_filter': 1,
 		'label': 'PR Detail',
 		'oldfieldname': 'pr_detail',
@@ -291,7 +289,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'item_tax_rate',
 		'fieldtype': 'Small Text',
-		'idx': 17,
 		'label': 'Item Tax Rate',
 		'oldfieldname': 'item_tax_rate',
 		'oldfieldtype': 'Small Text',
@@ -306,7 +303,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'page_break',
 		'fieldtype': 'Check',
-		'idx': 18,
 		'label': 'Page Break',
 		'no_copy': 1,
 		'permlevel': 0,
diff --git a/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.js b/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.js
index ec8f291..bb19681 100644
--- a/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.js
+++ b/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.js
@@ -48,9 +48,9 @@
 // Hide Fields
 // ------------
 cur_frm.cscript.hide_fields = function(doc, cdt, cdn) {
-	par_flds	=['project_name', 'due_date', 'posting_time', 'sales_order_main', 'delivery_note_main', 'Get Items', 'company', 'is_opening', 'currency', 'conversion_rate', 'price_list_name', 'cash_bank_account', 'source', 'cancel_reason', 'total_advance', 'gross_profit', 'gross_profit_percent', 'Get Advances Received', 'advance_adjustment_details', 'sales_partner', 'commission_rate', 'total_commission', 'Repair Outstanding Amt'];
+	par_flds	=['project_name', 'due_date', 'posting_time', 'sales_order_main', 'delivery_note_main', 'Get Items', 'is_opening', 'conversion_rate', 'source', 'cancel_reason', 'total_advance', 'gross_profit', 'gross_profit_percent', 'Get Advances Received', 'advance_adjustment_details', 'sales_partner', 'commission_rate', 'total_commission', 'Repair Outstanding Amt'];
 	
-	ch_flds = {'entries': ['income_account', 'warehouse', 'cost_center', 'sales_order', 'delivery_note']}
+	ch_flds = {'entries': ['sales_order', 'delivery_note']}
 	
 	if(cint(doc.is_pos) == 1) {
 		hide_field(par_flds);	
@@ -74,6 +74,9 @@
 // -------
 cur_frm.cscript.refresh = function(doc, dt, dn) {
 
+	cur_frm.cscript.is_opening(doc, dt, dn);
+	cur_frm.cscript.hide_fields(doc, cdt, cdn);
+
 	// Show / Hide button
 	cur_frm.clear_custom_buttons();
 
@@ -90,8 +93,6 @@
 	}
 	else
 		hide_field('Repair Outstanding Amt');
-	cur_frm.cscript.is_opening(doc, dt, dn);
-	cur_frm.cscript.hide_fields(doc, cdt, cdn);
 }
 
 //fetch retail transaction related fields
diff --git a/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.txt b/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.txt
index 2f3b48d..1abd6a7 100644
--- a/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.txt
+++ b/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.txt
@@ -5,14 +5,23 @@
 	{
 		'creation': '2010-08-08 17:09:18',
 		'docstatus': 0,
-		'modified': '2011-10-10 12:29:26',
+		'modified': '2011-10-19 16:31:54',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
 
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Receivable Voucher',
+		'parentfield': 'fields',
+		'parenttype': 'DocType'
+	},
+
 	# These values are common for all DocType
 	{
-		'_last_update': '1317986484',
+		'_last_update': '1319014846',
 		'change_log': '1. Change in pull_details method dt.-26-06-2009',
 		'colour': 'White:FFF',
 		'default_print_format': 'Standard',
@@ -25,15 +34,16 @@
 		'server_code_error': ' ',
 		'show_in_menu': 0,
 		'subject': 'To %(customer_name)s worth %(currency)s %(grand_total_export)s due on %(due_date)s | %(outstanding_amount)s outstanding',
-		'version': 359
+		'version': 363
 	},
 
-	# These values are common for all DocField
+	# These values are common for all DocFormat
 	{
-		'doctype': 'DocField',
+		'doctype': 'DocFormat',
+		'format': 'POS Invoice',
 		'name': '__common__',
 		'parent': 'Receivable Voucher',
-		'parentfield': 'fields',
+		'parentfield': 'formats',
 		'parenttype': 'DocType'
 	},
 
@@ -114,6 +124,11 @@
 		'write': 0
 	},
 
+	# DocFormat
+	{
+		'doctype': 'DocFormat'
+	},
+
 	# DocField
 	{
 		'doctype': 'DocField',
diff --git a/erpnext/analysis/search_criteria/trend_analyzer/trend_analyzer.js b/erpnext/analysis/search_criteria/trend_analyzer/trend_analyzer.js
index 9a87abb..9426a23 100644
--- a/erpnext/analysis/search_criteria/trend_analyzer/trend_analyzer.js
+++ b/erpnext/analysis/search_criteria/trend_analyzer/trend_analyzer.js
@@ -5,7 +5,7 @@
 
   this.add_filter({fieldname:'period', label:'Period', fieldtype:'Select', options:'Monthly'+NEWLINE+'Quarterly'+NEWLINE+'Half Yearly'+NEWLINE+'Annual',report_default:'Quarterly',ignore : 1, parent:'Profile',in_first_page:1,single_select:1});
 
-  this.add_filter({fieldname:'based_on', label:'Based On', fieldtype:'Select', options:'Item'+NEWLINE+'Item Group'+NEWLINE+'Customer'+NEWLINE+'Customer Group'+NEWLINE+'Territory'+NEWLINE+'Supplier'+NEWLINE+'Supplier Type', ignore : 1, parent:'Profile', report_default:'Item', in_first_page : 1,single_select:1});
+  this.add_filter({fieldname:'based_on', label:'Based On', fieldtype:'Select', options:'Item'+NEWLINE+'Item Group'+NEWLINE+'Customer'+NEWLINE+'Customer Group'+NEWLINE+'Territory'+NEWLINE+'Supplier'+NEWLINE+'Supplier Type'+NEWLINE+'Project', ignore : 1, parent:'Profile', report_default:'Item', in_first_page : 1,single_select:1});
 
   this.add_filter({fieldname:'group_by', label:'Group By', fieldtype:'Select', options:NEWLINE+'Item'+NEWLINE+'Customer'+NEWLINE+'Supplier', ignore : 1, parent:'Profile',single_select:1});
 
@@ -24,6 +24,7 @@
   this.add_filter({fieldname:'territory', label:'Territory', fieldtype:'Link', options:'Territory', ignore : 1, parent:'Profile'});
   this.add_filter({fieldname:'supplier', label:'Supplier', fieldtype:'Link', options:'Supplier', ignore : 1, parent:'Profile'});
   this.add_filter({fieldname:'supplier_type', label:'Supplier Type', fieldtype:'Link', options:'Supplier Type', ignore : 1, parent:'Profile'});
+  this.add_filter({fieldname:'project', label:'Project', fieldtype:'Link', options:'Project', ignore : 1, parent:'Profile'});
 }
 
 
@@ -99,6 +100,15 @@
                                   add_cond += ' AND t1.supplier = t3.name';
                                   if(supp_type) add_cond += ' AND t1.supplier_type = "'+supp_type+'"';
                                   break;
+      case 'Project'        :     pro = this.get_filter('Profile', 'Project').get_value();
+      							  if (inList(['Purchase Order', 'Purchase Receipt', 'Payable Voucher'], trans)) {
+									  col = 'DISTINCT t2.project_name';
+    	                              if(pro) add_cond += ' AND t2.project_name = "'+pro+'"';
+    	                          } else {
+	    	                          col = 'DISTINCT t1.project_name';
+    	                              if(pro) add_cond += ' AND t1.project_name = "'+pro+'"';
+    	                          }
+                                  break;
       case 'Item Group'     :     ig = this.get_filter('Profile', 'Item Group').get_value();
                                   if(ig) sp_cond += ' AND parent.name = "'+ig+'"';
                                   break;
@@ -108,10 +118,11 @@
       case 'Territory'      :     ter = this.get_filter('Profile', 'Territory').get_value();
                                   if(ter) sp_cond += ' AND parent.name = "'+ter+'"';
                                   break;
+
     }
 
     
-    if(based_on == 'Item' || based_on == 'Customer' || based_on == 'Supplier' || based_on == 'Supplier Type')
+    if(based_on == 'Item' || based_on == 'Customer' || based_on == 'Supplier' || based_on == 'Supplier Type' || based_on == 'Project')
       var q ='SELECT '+col+' FROM `tab'+trans+'` t1, `tab'+trans_det+'` t2 '+add_tables+' WHERE t1.fiscal_year = "'+fiscal_year+'" and t1.company = "'+company+'" and t2.parent = t1.name '+add_cond;
     else
       var q = 'SELECT CONCAT(REPEAT("     ", COUNT(parent.name) - 1), node.name) AS "Name" FROM `tab'+based_on+'` node,`tab'+based_on+'` parent WHERE node.lft BETWEEN parent.lft and parent.rgt and node.docstatus !=2 '+sp_cond+' GROUP BY node.name ORDER BY node.lft';
diff --git a/erpnext/analysis/search_criteria/trend_analyzer/trend_analyzer.py b/erpnext/analysis/search_criteria/trend_analyzer/trend_analyzer.py
index 9edf045..42a7c5c 100644
--- a/erpnext/analysis/search_criteria/trend_analyzer/trend_analyzer.py
+++ b/erpnext/analysis/search_criteria/trend_analyzer/trend_analyzer.py
@@ -17,7 +17,7 @@
 territory = filter_values.get('territory')
 supplier = filter_values.get('supplier')
 supplier_type = filter_values.get('supplier_type')
-
+project = filter_values.get('project')
 
 
 # ********************************************* SET DEFAULTS **************************************************
@@ -41,41 +41,41 @@
 
 # ********************************************* VALIDATIONS ***************************************************
 if (based_on in ['Customer','Customer Group','Territory'] and group_by == 'Supplier') or (based_on in ['Supplier','Supplier Type'] and group_by == 'Customer'):
-  msgprint("Sorry! You cannot group Trend Analyzer based on %s by %s" % (based_on,group_by))
-  raise Exception
+	msgprint("Sorry! You cannot group Trend Analyzer based on %s by %s" % (based_on,group_by))
+	raise Exception
 
 if based_on == group_by:
-  msgprint("Based On and Group By value cannot be same for Trend Analyzer")
-  raise Exception
+	msgprint("Based On and Group By value cannot be same for Trend Analyzer")
+	raise Exception
 
 
 # ********************************************** ADD COLUMNS **********************************************
 cols = [[based_on, 'Data', '300px', '']]
 cr = 1
 if based_on == 'Item':
-  cols.append(['Item Name','Data','200px',''])
-  cr = 2
+	cols.append(['Item Name','Data','200px',''])
+	cr = 2
 elif based_on == 'Customer':
-  cols.append(['Territory','Link','150px','Territory'])
-  cr = 2
+	cols.append(['Territory','Link','150px','Territory'])
+	cr = 2
 elif based_on == 'Supplier':
-  cols.append(['Supplier Type','Link','150px','Supplier Type'])
-  cr = 2
+	cols.append(['Supplier Type','Link','150px','Supplier Type'])
+	cr = 2
 if group_by:
-  cr += 1
+	cr += 1
 
 if group_by:
-  cols.append([group_by,'Data','150px',''])
+	cols.append([group_by,'Data','150px',''])
 
 for c in col_names:
-  cols.append([c,'Currency','150px',''])
+	cols.append([c,'Currency','150px',''])
 
 for c in cols:
-  colnames.append(c[0])
-  coltypes.append(c[1])
-  colwidths.append(c[2])
-  coloptions.append(c[3])
-  col_idx[c[0]] = len(colnames)-1
+	colnames.append(c[0])
+	coltypes.append(c[1])
+	colwidths.append(c[2])
+	coloptions.append(c[3])
+	col_idx[c[0]] = len(colnames)-1
 
 
 # ******************************************* ADDITIONAL CONDITION ************************************************
@@ -86,75 +86,81 @@
 
 # Item
 if item or based_on == 'Item':
-  add_cond += ' AND t2.item_code = "%s"' % (based_on != 'Item' and item or '%(value)s')
+	add_cond += ' AND t2.item_code = "%s"' % (based_on != 'Item' and item or '%(value)s')
 
 # Item Group
 if item_group or based_on == 'Item Group':
-  add_tab += ' ,`tabItem` t3, `tabItem Group` t4 '
-  add_cond += ' AND t3.name = t2.item_code AND t3.item_group = t4.name and (t4.name = "%s" or t4.name IN (SELECT t5.name FROM `tabItem Group` t5,`tabItem Group` t6 WHERE t5.lft BETWEEN t6.lft and t6.rgt and t5.docstatus !=2 and ifnull(t5.is_group,"No") = "No" and t6.name = "%s"))' % (based_on != 'Item Group' and item_group or '%(value)s', based_on != 'Item Group' and item_group or '%(value)s')
+	add_tab += ' ,`tabItem` t3, `tabItem Group` t4 '
+	add_cond += ' AND t3.name = t2.item_code AND t3.item_group = t4.name and (t4.name = "%s" or t4.name IN (SELECT t5.name FROM `tabItem Group` t5,`tabItem Group` t6 WHERE t5.lft BETWEEN t6.lft and t6.rgt and t5.docstatus !=2 and ifnull(t5.is_group,"No") = "No" and t6.name = "%s"))' % (based_on != 'Item Group' and item_group or '%(value)s', based_on != 'Item Group' and item_group or '%(value)s')
 
 # Customer
 if customer or based_on == 'Customer':
-  add_cond += ' AND t1.customer = "%s"' % (based_on != 'Customer' and customer or '%(value)s')
+	add_cond += ' AND t1.customer = "%s"' % (based_on != 'Customer' and customer or '%(value)s')
 
 # Customer Group
 if customer_group or based_on == 'Customer Group':
-  add_tab += ' ,`tabCustomer` t7, `tabCustomer Group` t8 '
-  add_cond += ' AND t7.name = t1.customer AND t7.customer_group = t8.name and (t8.name = "%s" or t8.name IN (SELECT t9.name FROM `tabCustomer Group` t9,`tabCustomer Group` t10 WHERE t9.lft BETWEEN t10.lft and t10.rgt and t9.docstatus !=2 and ifnull(t9.is_group,"No") = "No" and t10.name = "%s"))' % (based_on != 'Customer Group'  and customer_group or '%(value)s', based_on != 'Customer Group'  and customer_group or '%(value)s')
-  
+	add_tab += ' ,`tabCustomer` t7, `tabCustomer Group` t8 '
+	add_cond += ' AND t7.name = t1.customer AND t7.customer_group = t8.name and (t8.name = "%s" or t8.name IN (SELECT t9.name FROM `tabCustomer Group` t9,`tabCustomer Group` t10 WHERE t9.lft BETWEEN t10.lft and t10.rgt and t9.docstatus !=2 and ifnull(t9.is_group,"No") = "No" and t10.name = "%s"))' % (based_on != 'Customer Group'	and customer_group or '%(value)s', based_on != 'Customer Group'	and customer_group or '%(value)s')
+	
 # Territory
 if territory or based_on == 'Territory':
-  add_tab += ' ,`tabTerritory` t11 '
-  add_cond += ' AND t1.territory = t11.name AND t1.territory = t11.name and (t11.name = "%s" or t11.name IN (SELECT t12.name FROM `tabTerritory` t12,`tabTerritory` t13 WHERE t12.lft BETWEEN t13.lft and t13.rgt and t12.docstatus !=2 and ifnull(t12.is_group,"No") = "No" and t13.name = "%s"))' % (based_on != 'Territory' and territory or '%(value)s', based_on != 'Territory' and territory or '%(value)s')
+	add_tab += ' ,`tabTerritory` t11 '
+	add_cond += ' AND t1.territory = t11.name AND t1.territory = t11.name and (t11.name = "%s" or t11.name IN (SELECT t12.name FROM `tabTerritory` t12,`tabTerritory` t13 WHERE t12.lft BETWEEN t13.lft and t13.rgt and t12.docstatus !=2 and ifnull(t12.is_group,"No") = "No" and t13.name = "%s"))' % (based_on != 'Territory' and territory or '%(value)s', based_on != 'Territory' and territory or '%(value)s')
 
 # Supplier
 if supplier or based_on == 'Supplier':
-  add_cond += ' AND t1.supplier = "%s"' % (based_on != 'Supplier' and supplier or '%(value)s')
-  
+	add_cond += ' AND t1.supplier = "%s"' % (based_on != 'Supplier' and supplier or '%(value)s')
+	
 # Supplier Type
 if supplier_type or based_on == 'Supplier Type':
-  add_tab += ' ,`tabSupplier` t14, `tabSupplier Type` t15 '
-  add_cond += ' AND t14.name = t1.supplier AND t14.supplier_type = t15.name and t15.name = "%s"' % (based_on != 'Supplier Type' and supplier_type or '%(value)s')
+	add_tab += ' ,`tabSupplier` t14, `tabSupplier Type` t15 '
+	add_cond += ' AND t14.name = t1.supplier AND t14.supplier_type = t15.name and t15.name = "%s"' % (based_on != 'Supplier Type' and supplier_type or '%(value)s')
 
-  
+# Project
+if project or based_on == 'Project':
+	if trans in ['Purchase Order', 'Purchase Receipt', 'Payable Voucher']:
+		add_cond += ' AND t2.project_name = "%s"' % (based_on != 'Project' and project or '%(value)s')
+	else:
+		add_cond += ' AND t1.project_name = "%s"' % (based_on != 'Project' and project or '%(value)s')
+	
 # Column to be seleted for group by condition
 # ==============================================
 sel_col = ''
 if group_by == 'Item':
-  sel_col = 't2.item_code'
+	sel_col = 't2.item_code'
 elif group_by == 'Customer':
-  sel_col = 't1.customer'
+	sel_col = 't1.customer'
 elif group_by == 'Supplier':
-  sel_col = 't1.supplier'
-  
-  
+	sel_col = 't1.supplier'
+	
+	
 # ********************************************** Result Set ************************************************
 for r in res:
-  main_det = sql("SELECT %s FROM %s WHERE %s" % (query_val, add_tab, add_cond % {'value':cstr(r[col_idx[based_on]]).strip()}))
-  if group_by:
-    for col in range(cr,cr+1): # this would make all first row blank. just for look
-      r.append('')
-  if main_det[0][len(colnames) - cr - 1]:
-    for d in range(len(colnames) - cr):
-      r.append(flt(main_det[0][d]))
-    out.append(r)
-    
-    if group_by:
-      flag = 1
-      # check for root nodes
-      if based_on in ['Item Group','Customer Group','Territory']:
-        is_grp = sql("select is_group from `tab%s` where name = '%s'" % (based_on, cstr(r[col_idx[based_on]]).strip()))
-        is_grp = is_grp and cstr(is_grp[0][0]) or ''
-        if is_grp != 'No':
-          flag = 0
+	main_det = sql("SELECT %s FROM %s WHERE %s" % (query_val, add_tab, add_cond % {'value':cstr(r[col_idx[based_on]]).strip()}))
+	if group_by:
+		for col in range(cr,cr+1): # this would make all first row blank. just for look
+			r.append('')
+	if main_det[0][len(colnames) - cr - 1]:
+		for d in range(len(colnames) - cr):
+			r.append(flt(main_det[0][d]))
+		out.append(r)
+		
+		if group_by:
+			flag = 1
+			# check for root nodes
+			if based_on in ['Item Group','Customer Group','Territory']:
+				is_grp = sql("select is_group from `tab%s` where name = '%s'" % (based_on, cstr(r[col_idx[based_on]]).strip()))
+				is_grp = is_grp and cstr(is_grp[0][0]) or ''
+				if is_grp != 'No':
+					flag = 0
 
-      if flag == 1:	
-        det = [x[0] for x in sql("SELECT DISTINCT %s FROM %s where %s" % (sel_col, add_tab, add_cond % {'value':cstr(r[col_idx[based_on]]).strip()}))]
+			if flag == 1:	
+				det = [x[0] for x in sql("SELECT DISTINCT %s FROM %s where %s" % (sel_col, add_tab, add_cond % {'value':cstr(r[col_idx[based_on]]).strip()}))]
 
-        for des in range(len(det)):
-          t_row = ['' for i in range(len(colnames))]
-          t_row[col_idx[group_by]] = cstr(det[des])
-          gr_det = sql("SELECT %s FROM %s WHERE %s = '%s' and %s" % (query_val, add_tab, sel_col, cstr(det[des]), add_cond % {'value':cstr(r[col_idx[based_on]]).strip()}))
-          for d in range(len(col_names)):
-            t_row[col_idx[col_names[d]]] = flt(gr_det[0][d])
-          out.append(t_row)
\ No newline at end of file
+				for des in range(len(det)):
+					t_row = ['' for i in range(len(colnames))]
+					t_row[col_idx[group_by]] = cstr(det[des])
+					gr_det = sql("SELECT %s FROM %s WHERE %s = '%s' and %s" % (query_val, add_tab, sel_col, cstr(det[des]), add_cond % {'value':cstr(r[col_idx[based_on]]).strip()}))
+					for d in range(len(col_names)):
+						t_row[col_idx[col_names[d]]] = flt(gr_det[0][d])
+					out.append(t_row)
diff --git a/erpnext/buying/Print Format/Purchase Order Classic/Purchase Order Classic.txt b/erpnext/buying/Print Format/Purchase Order Classic/Purchase Order Classic.txt
new file mode 100644
index 0000000..bd10b2d
--- /dev/null
+++ b/erpnext/buying/Print Format/Purchase Order Classic/Purchase Order Classic.txt
@@ -0,0 +1,28 @@
+# Print Format, Purchase Order Classic
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2011-11-15 17:30:44',
+		'docstatus': 0,
+		'modified': '2011-11-15 17:30:44',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all Print Format
+	{
+		'doc_type': 'Purchase Order',
+		'doctype': 'Print Format',
+		'html': '<!--\n\tSample Print Format for ERPNext\n\tPlease use at your own discretion\n\tFor suggestions and contributions:\n\t\thttps://github.com/webnotes/erpnext-print-templates\n\n\tFreely usable under MIT license\n-->\n\n<!-- Style Settings -->\n<style>\n\t/*\n\t\tcommon style for whole page\n\t\tThis should include:\n\t\t+ page size related settings\n\t\t+ font family settings\n\t\t+ line spacing settings\n\t*/\n\t@media screen {\n\t\tbody {\n\t\t\twidth: 8.3in;\n\t\t}\n\t}\n\n\thtml, body, div, span, td {\n\t\tfont-family: "Georgia", serif;\n\t\tfont-size: 12px;\n\t}\n\n\tbody {\n\t\tpadding: 10px;\n\t\tmargin: auto;\n\t\tfont-size: 12px;\n\t\tline-height: 150%;\n\t}\n\n\t.common {\n\t\tfont-family: "Georgia", serif !important;\n\t\tfont-size: 12px;\n\t\tpadding: 10px 0px;\n\t}\n\n\ttable {\n\t\tborder-collapse: collapse;\n\t\twidth: 100%;\n\t\tvertical-align: top;\n\t}\n\n\ttable td {\n\t\tpadding: 2px 0px;\n\t}\n\t\n\ttable h1, h2, h3, h4, h5, h6 {\n\t\tpadding: 0px;\n\t\tmargin: 0px;\n\t}\n\n\ttable.header-table td {\n\t\tvertical-align: top;\n\t}\n\n\ttable.header-table thead {\n\t\tborder-bottom: 1px solid black;\n\t}\n\n\ttable.header-table h3 {\n\t\tcolor: gray;\n\t}\n\n\ttable.header-table thead td {\n\t\tpadding: 5px 0px;\n\t}\n\n\tdiv.page-body table td:nth-child(6),\n\tdiv.page-body table td:nth-child(7) {\n\t\ttext-align: right;\n\t}\n\n\ttable.footer-table td {\n\t\tvertical-align: top;\n\t}\n\n\ttable.footer-table td table td:nth-child(2),\n\ttable.footer-table td table td:nth-child(3) {\n\t\ttext-align: right;\n\t}\n</style>\n\n\n<!-- Javascript -->\n<script>\n\tsi_std = {\n\t\tprint_item_table: function() {\n\t\t\tvar table = print_table(\n\t\t\t\t\'Purchase Order\',\n\t\t\t\tdoc.name,\n\t\t\t\t\'po_details\',\n\t\t\t\t\'PO Detail\',\n\t\t\t\t[// Here specify the table columns to be displayed\n\t\t\t\t\t\'SR\', \'item_code\', \'item_name\', \'description\', \'qty\', \'stock_uom\',\n\t\t\t\t\t\'import_rate\', \'import_amount\'\n\t\t\t\t],\n\t\t\t\t[// Here specify the labels of column headings\n\t\t\t\t\t\'Sr\', \'Item Code\', \'Item Name\', \'Description\', \'Qty\',\n\t\t\t\t\t\'UoM\', \'Basic Rate\', \'Amount\'\n\t\t\t\t],\n\t\t\t\t[// Here specify the column widths\n\t\t\t\t\t\'3%\', \'10%\', \'15%\', \'32%\', \'5%\',\n\t\t\t\t\t\'5%\', \'15%\', \'15%\'\n\t\t\t\t]\n\t\t\t);\n\n\t\t\t// This code takes care of page breaks\n\t\t\tif(table.appendChild) {\n\t\t\t\tout = table.innerHTML;\n\t\t\t} else {\n\t\t\t\tout = \'\';\n\t\t\t\tfor(var i=0; i < (table.length-1); i++) {\n\t\t\t\t\tout += table[i].innerHTML + \n\t\t\t\t\t\t\'<div style = "page-break-after: always;" \\\n\t\t\t\t\t\tclass = "page_break"></div>\\\n\t\t\t\t\t\t<div class="page-settings"></div>\';\n\t\t\t\t}\n\t\t\t\tout += table[table.length-1].innerHTML;\n\t\t\t}\n\t\t\treturn out;\n\t\t},\n\n\n\t\tprint_other_charges: function(parent) {\n\t\t\tvar oc = getchildren(\'Purchase Tax Detail\', doc.name, \'purchase_tax_details\');\n\t\t\tvar rows = \'<table width=100%>\\n\';\n\t\t\tfor(var i=0; i<oc.length; i++) {\n\t\t\t\trows +=\n\t\t\t\t\t\'<tr>\\n\' +\n\t\t\t\t\t\t\'\\t<td>\' + oc[i].description + \'</td>\\n\' +\n\t\t\t\t\t\t\'\\t<td></td>\\n\' +\n\t\t\t\t\t\t\'\\t<td width=38%>\' + fmt_money(oc[i].tax_amount / (doc.conversion_rate || 1)) + \'</td>\\n\' +\n\t\t\t\t\t\'</tr>\\n\';\n\t\t\t}\n\t\t\treturn rows + \'</table>\\n\';\n\t\t}\n\t};\n</script>\n\n\n<!-- Page Layout Settings -->\n<div class=\'common page-header\'>\n\t<!-- \n\t\tPage Header will contain\n\t\t\t+ table 1\n\t\t\t\t+ table 1a\n\t\t\t\t\t- Name\n\t\t\t\t\t- Address\n\t\t\t\t\t- Contact\n\t\t\t\t\t- Mobile No\n\t\t\t\t+ table 1b\n\t\t\t\t\t- Voucher Date\n\t\t\t\t\t- Due Date\n\t-->\n\t<table class=\'header-table\' cellspacing=0>\n\t\t<thead>\n\t\t\t<tr><td><h1>Purchase Order</h1></td></tr>\n\t\t\t<tr><td><h3><script>cur_frm.docname</script></h3></td></tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td width=60%><table width=100% cellspacing=0><tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td width=22%><b>Name</b></td>\n\t\t\t\t\t\t<td><script>doc.supplier_name</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Address</b></td>\n\t\t\t\t\t\t<td><script>replace_newlines(doc.address_display)</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Contact</b></td>\n\t\t\t\t\t\t<td><script>doc.contact_display</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody></table></td>\n\t\t\t\t<td><table width=100% cellspacing=0><tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td width=63%><b>Purchase Order Date</b></td>\n\t\t\t\t\t\t<td><script>date.str_to_user(doc.transaction_date)</script></td>\n\t\t\t\t\t<tr>\t\t\t\t\t\n\t\t\t\t</tbody></table></td>\n\t\t\t</tr>\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\n\t\t</tfoot>\n\t</table>\n</div>\n<div class=\'common page-body\'>\n\t<!-- \n\t\tPage Body will contain\n\t\t\t+ table 2\n\t\t\t\t- Sales Invoice Data\n\t-->\n\t<script>si_std.print_item_table()</script>\n</div>\n<div class=\'common page-footer\'>\n\t<!-- \n\t\tPage Footer will contain\n\t\t\t+ table 3\n\t\t\t\t- Terms and Conditions\n\t\t\t\t- Total Rounded Amount Calculation\n\t\t\t\t- Total Rounded Amount in Words\n\t-->\n\t<table class=\'footer-table\' width=100% cellspacing=0>\n\t\t<thead>\n\t\t\t\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td width=60% style=\'padding-right: 10px;\'>\n\t\t\t\t\t<b>Terms, Conditions &amp; Other Information:</b><br />\n\t\t\t\t\t<script>doc.terms</script>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<table cellspacing=0 width=100%><tbody>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>Net Total</td>\n\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t<td width=38%><script>\n\t\t\t\t\t\t\t\tfmt_money(doc.net_total_import)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>\n\t\t\t\t\t\t<tr style=\'font-weight: bold\'>\n\t\t\t\t\t\t\t<td>Grand Total</td>\n\t\t\t\t\t\t\t<td><script>doc.currency</script></td>\n\t\t\t\t\t\t\t<td><script>\n\t\t\t\t\t\t\t\tfmt_money(doc.grand_total_import)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</tbody></table>\n\t\t\t\t\t<br /><b>In Words</b><br />\n\t\t\t\t\t<i><script>doc.in_words_import</script></i>\n\t\t\t\t</td>\n\t\t\t</tr>\t\t\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\n\t\t</tfoot>\n\t</table>\n</div>\n\n',
+		'module': 'Buying',
+		'name': '__common__',
+		'standard': 'Yes'
+	},
+
+	# Print Format, Purchase Order Classic
+	{
+		'doctype': 'Print Format',
+		'name': 'Purchase Order Classic'
+	}
+]
\ No newline at end of file
diff --git a/erpnext/buying/Print Format/Purchase Order Modern/Purchase Order Modern.txt b/erpnext/buying/Print Format/Purchase Order Modern/Purchase Order Modern.txt
new file mode 100644
index 0000000..94c5a3f
--- /dev/null
+++ b/erpnext/buying/Print Format/Purchase Order Modern/Purchase Order Modern.txt
@@ -0,0 +1,28 @@
+# Print Format, Purchase Order Modern
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2011-11-15 17:30:45',
+		'docstatus': 0,
+		'modified': '2011-11-15 17:30:45',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all Print Format
+	{
+		'doc_type': 'Purchase Order',
+		'doctype': 'Print Format',
+		'html': '<!--\n\tSample Print Format for ERPNext\n\tPlease use at your own discretion\n\tFor suggestions and contributions:\n\t\thttps://github.com/webnotes/erpnext-print-templates\n\n\tFreely usable under MIT license\n-->\n\n<!-- Style Settings -->\n<style>\n\t/*\n\t\tcommon style for whole page\n\t\tThis should include:\n\t\t+ page size related settings\n\t\t+ font family settings\n\t\t+ line spacing settings\n\t*/\n\t@media screen {\n\t\tbody {\n\t\t\twidth: 8.3in;\n\t\t}\n\t}\n\n\thtml, body, div, span, td {\n\t\tfont-family: "Helvetica", "Arial", sans-serif;\n\t\tfont-size: 12px;\n\t}\n\n\tbody {\n\t\tpadding: 10px;\n\t\tmargin: auto;\n\t\tfont-size: 12px;\n\t\tline-height: 150%;\n\t}\n\n\t.common {\n\t\tfont-family: "Helvetica", "Arial", sans-serif !important;\n\t\tfont-size: 12px;\n\t\tpadding: 10px 0px;\n\t}\n\n\ttable {\n\t\tborder-collapse: collapse;\n\t\twidth: 100%;\n\t\tvertical-align: top;\n\t\tborder-style: none !important;\n\t}\n\n\ttable td {\n\t\tpadding: 2px 0px;\n\t\tborder-style: none !important;\n\t}\n\t\n\ttable h1, h2, h3, h4, h5, h6 {\n\t\tpadding: 0px;\n\t\tmargin: 0px;\n\t}\n\n\ttable.header-table td {\n\t\tvertical-align: top;\n\t}\n\n\ttable.header-table h1 {\n\t\ttext-transform: uppercase;\n\t\tcolor: white;\n\t\tfont-size: 55px;\n\t\tfont-style: italic;\n\t}\n\n\ttable.header-table thead tr:nth-child(1) div {\n\t\theight: 24px;\n\t\tbackground-color: #696969;\n\t\tvertical-align: middle;\n\t\tpadding: 12px 0px 0px 0px;\n\t\twidth: 100%;\n\t}\n\n\tdiv.page-body table td:nth-child(6),\n\tdiv.page-body table td:nth-child(7) {\n\t\ttext-align: right;\n\t}\n\n\tdiv.page-body table tr td {\n\t\tbackground-color: #DCDCDC !important;\n\t}\n\n\tdiv.page-body table tr:nth-child(1) td {\n\t\tbackground-color: #696969 !important;\n\t\tcolor: white !important;\n\t}\n\n\ttable.footer-table td {\n\t\tvertical-align: top;\n\t}\n\n\ttable.footer-table td table td:nth-child(2),\n\ttable.footer-table td table td:nth-child(3) {\n\t\ttext-align: right;\n\t}\n\n\ttable.footer-table tfoot td {\n\t\tbackground-color: #696969;\n\t\theight: 10px;\n\t}\n\n\t.imp-details {\n\t\tbackground-color: #DCDCDC;\n\t}\n</style>\n\n\n<!-- Javascript -->\n<script>\n\tsi_std = {\n\t\tprint_item_table: function() {\n\t\t\tvar table = print_table(\n\t\t\t\t\'Purchase Order\',\n\t\t\t\tdoc.name,\n\t\t\t\t\'po_details\',\n\t\t\t\t\'PO Detail\',\n\t\t\t\t[// Here specify the table columns to be displayed\n\t\t\t\t\t\'SR\', \'item_code\', \'item_name\', \'description\', \'qty\', \'stock_uom\',\n\t\t\t\t\t\'import_rate\', \'import_amount\'\n\t\t\t\t],\n\t\t\t\t[// Here specify the labels of column headings\n\t\t\t\t\t\'Sr\', \'Item Code\', \'Item Name\', \'Description\', \'Qty\',\n\t\t\t\t\t\'UoM\', \'Basic Rate\', \'Amount\'\n\t\t\t\t],\n\t\t\t\t[// Here specify the column widths\n\t\t\t\t\t\'3%\', \'10%\', \'15%\', \'32%\', \'5%\',\n\t\t\t\t\t\'5%\', \'15%\', \'15%\'\n\t\t\t\t]\n\t\t\t);\n\n\t\t\t// This code takes care of page breaks\n\t\t\tif(table.appendChild) {\n\t\t\t\tout = table.innerHTML;\n\t\t\t} else {\n\t\t\t\tout = \'\';\n\t\t\t\tfor(var i=0; i < (table.length-1); i++) {\n\t\t\t\t\tout += table[i].innerHTML + \n\t\t\t\t\t\t\'<div style = "page-break-after: always;" \\\n\t\t\t\t\t\tclass = "page_break"></div>\\\n\t\t\t\t\t\t<div class="page-settings"></div>\';\n\t\t\t\t}\n\t\t\t\tout += table[table.length-1].innerHTML;\n\t\t\t}\n\t\t\treturn out;\n\t\t},\n\n\n\t\tprint_other_charges: function(parent) {\n\t\t\tvar oc = getchildren(\'Purchase Tax Detail\', doc.name, \'purchase_tax_details\');\n\t\t\tvar rows = \'<table width=100%>\\n\';\n\t\t\tfor(var i=0; i<oc.length; i++) {\n\t\t\t\trows +=\n\t\t\t\t\t\'<tr>\\n\' +\n\t\t\t\t\t\t\'\\t<td>\' + oc[i].description + \'</td>\\n\' +\n\t\t\t\t\t\t\'\\t<td></td>\\n\' +\n\t\t\t\t\t\t\'\\t<td width=38%>\' + fmt_money(oc[i].tax_amount / (doc.conversion_rate || 1)) + \'</td>\\n\' +\n\t\t\t\t\t\'</tr>\\n\';\n\t\t\t}\n\t\t\treturn rows + \'</table>\\n\';\n\t\t}\n\t};\n</script>\n\n\n<!-- Page Layout Settings -->\n<div class=\'common page-header\'>\n\t<!-- \n\t\tPage Header will contain\n\t\t\t+ table 1\n\t\t\t\t+ table 1a\n\t\t\t\t\t- Name\n\t\t\t\t\t- Address\n\t\t\t\t\t- Contact\n\t\t\t\t\t- Mobile No\n\t\t\t\t+ table 1b\n\t\t\t\t\t- Voucher Date\n\t\t\t\t\t- Due Date\n\t-->\n\t<table class=\'header-table\' cellspacing=0>\n\t\t<thead>\n\t\t\t<tr><td colspan=2><div><h1>Purchase Order</h1></div></td></tr>\n\t\t\t<tr><td colspan=2><div style="height:15px"></div></td></tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td width=60%><table width=100% cellspacing=0><tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td width=22%><b>Name</b></td>\n\t\t\t\t\t\t<td><script>doc.supplier_name</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Address</b></td>\n\t\t\t\t\t\t<td><script>replace_newlines(doc.address_display)</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Contact</b></td>\n\t\t\t\t\t\t<td><script>doc.contact_display</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody></table></td>\n\t\t\t\t<td><table width=100% cellspacing=0><tbody>\n\t\t\t\t\t<tr class=\'imp-details\'>\n\t\t\t\t\t\t<td><b>Purchase Order No.</b></td>\n\t\t\t\t\t\t<td><script>cur_frm.docname</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td width=63%><b>Purchase Order Date</b></td>\n\t\t\t\t\t\t<td><script>date.str_to_user(doc.transaction_date)</script></td>\n\t\t\t\t\t<tr>\t\t\t\t\t\n\t\t\t\t</tbody></table></td>\n\t\t\t</tr>\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\n\t\t</tfoot>\n\t</table>\n</div>\n<div class=\'common page-body\'>\n\t<!-- \n\t\tPage Body will contain\n\t\t\t+ table 2\n\t\t\t\t- Sales Invoice Data\n\t-->\n\t<script>si_std.print_item_table()</script>\n</div>\n<div class=\'common page-footer\'>\n\t<!-- \n\t\tPage Footer will contain\n\t\t\t+ table 3\n\t\t\t\t- Terms and Conditions\n\t\t\t\t- Total Rounded Amount Calculation\n\t\t\t\t- Total Rounded Amount in Words\n\t-->\n\t<table class=\'footer-table\' width=100% cellspacing=0>\n\t\t<thead>\n\t\t\t\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td width=60% style=\'padding-right: 10px;\'>\n\t\t\t\t\t<b>Terms, Conditions &amp; Other Information:</b><br />\n\t\t\t\t\t<script>doc.terms</script>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<table cellspacing=0 width=100%><tbody>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>Net Total</td>\n\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t<td width=38%><script>\n\t\t\t\t\t\t\t\tfmt_money(doc.net_total_import)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>\n\t\t\t\t\t\t<tr style=\'font-weight: bold\' class=\'imp-details\'>\n\t\t\t\t\t\t\t<td>Grand Total</td>\n\t\t\t\t\t\t\t<td><script>doc.currency</script></td>\n\t\t\t\t\t\t\t<td><script>\n\t\t\t\t\t\t\t\tfmt_money(doc.grand_total_import)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</tbody></table>\n\t\t\t\t\t<br /><b>In Words</b><br />\n\t\t\t\t\t<i><script>doc.in_words_import</script></i>\n\t\t\t\t</td>\n\t\t\t</tr>\t\t\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\t<tr><td colspan=2><div></div></td><tr>\n\t\t</tfoot>\n\t</table>\n</div>\n\n',
+		'module': 'Buying',
+		'name': '__common__',
+		'standard': 'Yes'
+	},
+
+	# Print Format, Purchase Order Modern
+	{
+		'doctype': 'Print Format',
+		'name': 'Purchase Order Modern'
+	}
+]
\ No newline at end of file
diff --git a/erpnext/buying/Print Format/Purchase Order Spartan/Purchase Order Spartan.txt b/erpnext/buying/Print Format/Purchase Order Spartan/Purchase Order Spartan.txt
new file mode 100644
index 0000000..adb397a
--- /dev/null
+++ b/erpnext/buying/Print Format/Purchase Order Spartan/Purchase Order Spartan.txt
@@ -0,0 +1,28 @@
+# Print Format, Purchase Order Spartan
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2011-11-15 17:30:45',
+		'docstatus': 0,
+		'modified': '2011-11-16 14:45:05',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all Print Format
+	{
+		'doc_type': 'Purchase Order',
+		'doctype': 'Print Format',
+		'html': '<!--\n\tSample Print Format for ERPNext\n\tPlease use at your own discretion\n\tFor suggestions and contributions:\n\t\thttps://github.com/webnotes/erpnext-print-templates\n\n\tFreely usable under MIT license\n-->\n\n<!-- Style Settings -->\n<style>\n\t/*\n\t\tcommon style for whole page\n\t\tThis should include:\n\t\t+ page size related settings\n\t\t+ font family settings\n\t\t+ line spacing settings\n\t*/\n\t@media screen {\n\t\tbody {\n\t\t\twidth: 8.3in;\n\t\t}\n\t}\n\n\thtml, body, div, span, td {\n\t\tfont-family: "Arial", sans-serif;\n\t\tfont-size: 12px;\n\t}\n\n\tbody {\n\t\tpadding: 10px;\n\t\tmargin: auto;\n\t\tfont-size: 12px;\n\t\tline-height: 150%;\n\t}\n\n\t.common {\n\t\tfont-family: "Arial", sans-serif !important;\n\t\tfont-size: 12px;\n\t\tpadding: 0px;\n\t}\n\n\ttable {\n\t\twidth: 100% !important;\n\t\tvertical-align: top;\n\t}\n\n\ttable td {\n\t\tpadding: 2px 0px;\n\t}\n\n\ttable, td {\n\t\tborder-collapse: collapse !important;\n\t\tpadding: 0px;\n\t\tmargin: 0px !important;\n\t}\n\t\n\ttable h1, h2, h3, h4, h5, h6 {\n\t\tpadding: 0px;\n\t\tmargin: 0px;\n\t}\n\n\ttable.header-table td {\n\t\tvertical-align: top;\n\t}\n\n\ttable.header-table h3 {\n\t\tcolor: gray;\n\t}\n\n\ttable.header-table thead td {\n\t\tpadding: 5px;\n\t}\n\n\ttable.header-table > thead,\n\ttable.header-table > tbody > tr > td,\n\ttable.footer-table > tbody > tr > td {\n\t\tborder: 1px solid black;\n\t\tpadding: 5px;\n\t}\n\n\ttable.footer-table > tbody,\n\ttable.header-table > thead {\n\t\tborder-bottom: 3px solid black;\n\t}\n\n\ttable.header-table > thead {\n\t\tborder-top: 3px solid black;\n\t}\n\n\tdiv.page-body table td:nth-child(6),\n\tdiv.page-body table td:nth-child(7) {\n\t\ttext-align: right;\n\t}\n\n\tdiv.page-body td {\n\t\tbackground-color: white !important;\n\t\tborder: 1px solid black !important;\n\t}\n\n\ttable.footer-table td {\n\t\tvertical-align: top;\n\t}\n\n\ttable.footer-table td table td:nth-child(2),\n\ttable.footer-table td table td:nth-child(3) {\n\t\ttext-align: right;\n\t}\n</style>\n\n\n<!-- Javascript -->\n<script>\n\tsi_std = {\n\t\tprint_item_table: function() {\n\t\t\tvar table = print_table(\n\t\t\t\t\'Purchase Order\',\n\t\t\t\tdoc.name,\n\t\t\t\t\'po_details\',\n\t\t\t\t\'PO Detail\',\n\t\t\t\t[// Here specify the table columns to be displayed\n\t\t\t\t\t\'SR\', \'item_code\', \'item_name\', \'description\', \'qty\', \'stock_uom\',\n\t\t\t\t\t\'import_rate\', \'import_amount\'\n\t\t\t\t],\n\t\t\t\t[// Here specify the labels of column headings\n\t\t\t\t\t\'Sr\', \'Item Code\', \'Item Name\', \'Description\', \'Qty\',\n\t\t\t\t\t\'UoM\', \'Basic Rate\', \'Amount\'\n\t\t\t\t],\n\t\t\t\t[// Here specify the column widths\n\t\t\t\t\t\'3%\', \'10%\', \'15%\', \'32%\', \'5%\',\n\t\t\t\t\t\'5%\', \'15%\', \'15%\'\n\t\t\t\t]\n\t\t\t);\n\n\t\t\t// This code takes care of page breaks\n\t\t\tif(table.appendChild) {\n\t\t\t\tout = table.innerHTML;\n\t\t\t} else {\n\t\t\t\tout = \'\';\n\t\t\t\tfor(var i=0; i < (table.length-1); i++) {\n\t\t\t\t\tout += table[i].innerHTML + \n\t\t\t\t\t\t\'<div style = "page-break-after: always;" \\\n\t\t\t\t\t\tclass = "page_break"></div>\\\n\t\t\t\t\t\t<div class="page-settings"></div>\';\n\t\t\t\t}\n\t\t\t\tout += table[table.length-1].innerHTML;\n\t\t\t}\n\t\t\treturn out;\n\t\t},\n\n\n\t\tprint_other_charges: function(parent) {\n\t\t\tvar oc = getchildren(\'Purchase Tax Detail\', doc.name, \'purchase_tax_details\');\n\t\t\tvar rows = \'<table width=100%>\\n\';\n\t\t\tfor(var i=0; i<oc.length; i++) {\n\t\t\t\trows +=\n\t\t\t\t\t\'<tr>\\n\' +\n\t\t\t\t\t\t\'\\t<td>\' + oc[i].description + \'</td>\\n\' +\n\t\t\t\t\t\t\'\\t<td></td>\\n\' +\n\t\t\t\t\t\t\'\\t<td width=38%>\' + fmt_money(oc[i].tax_amount / (doc.conversion_rate || 1)) + \'</td>\\n\' +\n\t\t\t\t\t\'</tr>\\n\';\n\t\t\t}\n\t\t\treturn rows + \'</table>\\n\';\n\t\t}\n\t};\n</script>\n\n\n<!-- Page Layout Settings -->\n<div class=\'common page-header\'>\n\t<!-- \n\t\tPage Header will contain\n\t\t\t+ table 1\n\t\t\t\t+ table 1a\n\t\t\t\t\t- Name\n\t\t\t\t\t- Address\n\t\t\t\t\t- Contact\n\t\t\t\t\t- Mobile No\n\t\t\t\t+ table 1b\n\t\t\t\t\t- Voucher Date\n\t\t\t\t\t- Due Date\n\t-->\n\t<table class=\'header-table\' cellspacing=0>\n\t\t<thead>\n\t\t\t<tr><td colspan=2><h1>Purchase Order</h1></td></tr>\n\t\t\t<tr><td colspan=2><h3><script>cur_frm.docname</script></h3></td></tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td width=60%><table width=100% cellspacing=0><tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td width=22%><b>Name</b></td>\n\t\t\t\t\t\t<td><script>doc.supplier_name</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Address</b></td>\n\t\t\t\t\t\t<td><script>replace_newlines(doc.address_display)</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Contact</b></td>\n\t\t\t\t\t\t<td><script>doc.contact_display</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody></table></td>\n\t\t\t\t<td><table width=100% cellspacing=0><tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td width=63%><b>Purchase Order Date</b></td>\n\t\t\t\t\t\t<td><script>date.str_to_user(doc.transaction_date)</script></td>\n\t\t\t\t\t<tr>\t\t\t\t\t\n\t\t\t\t</tbody></table></td>\n\t\t\t</tr>\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\n\t\t</tfoot>\n\t</table>\n</div>\n<div class=\'common page-body\'>\n\t<!-- \n\t\tPage Body will contain\n\t\t\t+ table 2\n\t\t\t\t- Sales Invoice Data\n\t-->\n\t<script>si_std.print_item_table()</script>\n</div>\n<div class=\'common page-footer\'>\n\t<!-- \n\t\tPage Footer will contain\n\t\t\t+ table 3\n\t\t\t\t- Terms and Conditions\n\t\t\t\t- Total Rounded Amount Calculation\n\t\t\t\t- Total Rounded Amount in Words\n\t-->\n\t<table class=\'footer-table\' width=100% cellspacing=0>\n\t\t<thead>\n\t\t\t\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td width=60% style=\'padding-right: 10px;\'>\n\t\t\t\t\t<b>Terms, Conditions &amp; Other Information:</b><br />\n\t\t\t\t\t<script>doc.terms</script>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<table cellspacing=0 width=100%><tbody>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>Net Total</td>\n\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t<td width=38%><script>\n\t\t\t\t\t\t\t\tfmt_money(doc.net_total_import)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>\n\t\t\t\t\t\t<tr style=\'font-weight: bold\'>\n\t\t\t\t\t\t\t<td>Grand Total</td>\n\t\t\t\t\t\t\t<td><script>doc.currency</script></td>\n\t\t\t\t\t\t\t<td><script>\n\t\t\t\t\t\t\t\tfmt_money(doc.grand_total_import)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</tbody></table>\n\t\t\t\t\t<br /><b>In Words</b><br />\n\t\t\t\t\t<i><script>doc.in_words_import</script></i>\n\t\t\t\t</td>\n\t\t\t</tr>\t\t\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\n\t\t</tfoot>\n\t</table>\n</div>\n\n\n',
+		'module': 'Buying',
+		'name': '__common__',
+		'standard': 'Yes'
+	},
+
+	# Print Format, Purchase Order Spartan
+	{
+		'doctype': 'Print Format',
+		'name': 'Purchase Order Spartan'
+	}
+]
\ No newline at end of file
diff --git a/erpnext/buying/doctype/indent/indent.txt b/erpnext/buying/doctype/indent/indent.txt
index cd6c912..6d9f5f6 100644
--- a/erpnext/buying/doctype/indent/indent.txt
+++ b/erpnext/buying/doctype/indent/indent.txt
@@ -5,16 +5,17 @@
 	{
 		'creation': '2010-08-08 17:09:04',
 		'docstatus': 0,
-		'modified': '2011-05-04 14:53:17',
+		'modified': '2011-10-12 13:09:38',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
 
 	# These values are common for all DocType
 	{
-		'_last_update': '1304500997',
+		'_last_update': '1318404775',
 		'allow_print': 0,
 		'colour': 'White:FFF',
+		'default_print_format': 'Standard',
 		'doctype': 'DocType',
 		'module': 'Buying',
 		'name': '__common__',
@@ -24,7 +25,7 @@
 		'server_code_error': ' ',
 		'show_in_menu': 0,
 		'subject': '%(per_ordered)s% ordered',
-		'version': 186
+		'version': 188
 	},
 
 	# These values are common for all DocField
@@ -54,11 +55,22 @@
 
 	# DocPerm
 	{
+		'amend': 1,
+		'cancel': 1,
+		'create': 1,
+		'doctype': 'DocPerm',
+		'permlevel': 0,
+		'role': 'Production Manager',
+		'submit': 1,
+		'write': 1
+	},
+
+	# DocPerm
+	{
 		'amend': 0,
 		'cancel': 0,
 		'create': 0,
 		'doctype': 'DocPerm',
-		'idx': 1,
 		'permlevel': 1,
 		'role': 'Purchase Manager',
 		'submit': 0,
@@ -71,7 +83,6 @@
 		'cancel': 1,
 		'create': 1,
 		'doctype': 'DocPerm',
-		'idx': 2,
 		'permlevel': 0,
 		'role': 'Purchase Manager',
 		'submit': 1,
@@ -84,7 +95,6 @@
 		'cancel': 0,
 		'create': 0,
 		'doctype': 'DocPerm',
-		'idx': 3,
 		'permlevel': 1,
 		'role': 'Material Manager',
 		'submit': 0,
@@ -97,7 +107,6 @@
 		'cancel': 1,
 		'create': 1,
 		'doctype': 'DocPerm',
-		'idx': 4,
 		'permlevel': 0,
 		'role': 'Material Manager',
 		'submit': 1,
@@ -110,7 +119,6 @@
 		'cancel': 0,
 		'create': 0,
 		'doctype': 'DocPerm',
-		'idx': 5,
 		'permlevel': 1,
 		'role': 'Material User',
 		'submit': 0,
@@ -123,7 +131,6 @@
 		'cancel': 1,
 		'create': 1,
 		'doctype': 'DocPerm',
-		'idx': 6,
 		'permlevel': 0,
 		'role': 'Material User',
 		'submit': 1,
@@ -136,7 +143,6 @@
 		'cancel': 1,
 		'create': 1,
 		'doctype': 'DocPerm',
-		'idx': 7,
 		'permlevel': 0,
 		'role': 'Purchase User',
 		'submit': 1,
@@ -145,10 +151,14 @@
 
 	# DocPerm
 	{
+		'amend': 0,
+		'cancel': 0,
+		'create': 0,
 		'doctype': 'DocPerm',
-		'idx': 8,
 		'permlevel': 1,
-		'role': 'Purchase User'
+		'role': 'Purchase User',
+		'submit': 0,
+		'write': 0
 	},
 
 	# DocField
@@ -158,7 +168,6 @@
 		'description': 'Enter items and their details for which you want your purchase department to raise a purchase order.',
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
-		'idx': 1,
 		'label': 'Basic Info',
 		'oldfieldtype': 'Section Break',
 		'permlevel': 0,
@@ -169,7 +178,6 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Column Break',
-		'idx': 2,
 		'oldfieldtype': 'Column Break',
 		'permlevel': 0,
 		'print_hide': 0,
@@ -183,7 +191,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'naming_series',
 		'fieldtype': 'Select',
-		'idx': 3,
 		'label': 'Series',
 		'no_copy': 1,
 		'oldfieldname': 'naming_series',
@@ -199,7 +206,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'status',
 		'fieldtype': 'Select',
-		'idx': 4,
 		'in_filter': 1,
 		'label': 'Status',
 		'no_copy': 1,
@@ -216,7 +222,6 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Column Break',
-		'idx': 5,
 		'oldfieldtype': 'Column Break',
 		'permlevel': 0,
 		'width': '50%'
@@ -229,7 +234,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'transaction_date',
 		'fieldtype': 'Date',
-		'idx': 6,
 		'in_filter': 1,
 		'label': 'Indent Date',
 		'no_copy': 1,
@@ -249,7 +253,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'per_ordered',
 		'fieldtype': 'Currency',
-		'idx': 7,
 		'label': '% Ordered',
 		'no_copy': 1,
 		'oldfieldname': 'per_ordered',
@@ -262,7 +265,6 @@
 		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
-		'idx': 8,
 		'label': 'Items',
 		'oldfieldtype': 'Section Break',
 		'permlevel': 0
@@ -275,14 +277,12 @@
 		'doctype': 'DocField',
 		'fieldname': 'sales_order_no',
 		'fieldtype': 'Link',
-		'idx': 9,
 		'label': 'Sales Order No',
 		'no_copy': 1,
 		'oldfieldname': 'sales_order_no',
 		'oldfieldtype': 'Data',
 		'options': 'Sales Order',
 		'permlevel': 0,
-		'search_index': 0,
 		'width': '100px'
 	},
 
@@ -290,7 +290,6 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Button',
-		'idx': 10,
 		'label': 'Pull Sales Order Details',
 		'options': 'pull_so_details',
 		'permlevel': 0
@@ -298,10 +297,11 @@
 
 	# DocField
 	{
+		'allow_on_submit': 1,
+		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldname': 'indent_details',
 		'fieldtype': 'Table',
-		'idx': 11,
 		'label': 'Indent Details',
 		'no_copy': 0,
 		'oldfieldname': 'indent_details',
@@ -317,7 +317,6 @@
 		'description': 'Filing in Additional Information about the Indent will help you analyze your data better.',
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
-		'idx': 12,
 		'label': 'More Info',
 		'oldfieldtype': 'Section Break',
 		'permlevel': 0
@@ -330,7 +329,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'company',
 		'fieldtype': 'Link',
-		'idx': 13,
 		'in_filter': 1,
 		'label': 'Company',
 		'oldfieldname': 'company',
@@ -339,7 +337,7 @@
 		'permlevel': 0,
 		'print_hide': 1,
 		'reqd': 1,
-		'search_index': 0,
+		'search_index': 1,
 		'width': '150px'
 	},
 
@@ -349,7 +347,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'fiscal_year',
 		'fieldtype': 'Select',
-		'idx': 14,
 		'in_filter': 1,
 		'label': 'Fiscal Year',
 		'oldfieldname': 'fiscal_year',
@@ -358,7 +355,7 @@
 		'permlevel': 0,
 		'print_hide': 1,
 		'reqd': 1,
-		'search_index': 0,
+		'search_index': 1,
 		'width': '150px'
 	},
 
@@ -369,7 +366,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'requested_by',
 		'fieldtype': 'Data',
-		'idx': 15,
 		'label': 'Requested By',
 		'no_copy': 1,
 		'oldfieldname': 'requested_by',
@@ -382,7 +378,6 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Column Break',
-		'idx': 16,
 		'oldfieldtype': 'Column Break',
 		'permlevel': 0,
 		'width': '50%'
@@ -393,7 +388,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'remark',
 		'fieldtype': 'Small Text',
-		'idx': 17,
 		'label': 'Remarks',
 		'no_copy': 1,
 		'oldfieldname': 'remark',
@@ -410,7 +404,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'cancel_reason',
 		'fieldtype': 'Data',
-		'idx': 18,
 		'label': 'Cancel Reason',
 		'no_copy': 1,
 		'oldfieldname': 'cancel_reason',
@@ -424,7 +417,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'amended_from',
 		'fieldtype': 'Data',
-		'idx': 19,
 		'label': 'Amended From',
 		'no_copy': 1,
 		'oldfieldname': 'amended_from',
@@ -440,7 +432,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'amendment_date',
 		'fieldtype': 'Date',
-		'idx': 20,
 		'label': 'Amendment Date',
 		'no_copy': 1,
 		'oldfieldname': 'amendment_date',
@@ -455,7 +446,6 @@
 		'description': 'Add Terms and Conditions for the Indent. You can also prepare a master Term Sheet and use the Template',
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
-		'idx': 21,
 		'label': 'Terms',
 		'oldfieldtype': 'Section Break',
 		'permlevel': 0
@@ -467,7 +457,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'letter_head',
 		'fieldtype': 'Select',
-		'idx': 22,
 		'label': 'Letter Head',
 		'oldfieldname': 'letter_head',
 		'oldfieldtype': 'Select',
@@ -481,22 +470,19 @@
 		'doctype': 'DocField',
 		'fieldname': 'tc_name',
 		'fieldtype': 'Link',
-		'idx': 23,
 		'label': 'Select Terms',
 		'oldfieldname': 'tc_name',
 		'oldfieldtype': 'Link',
 		'options': 'Term',
 		'permlevel': 0,
 		'print_hide': 1,
-		'report_hide': 1,
-		'search_index': 0
+		'report_hide': 1
 	},
 
 	# DocField
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Button',
-		'idx': 24,
 		'label': 'Get Terms',
 		'oldfieldtype': 'Button',
 		'options': 'get_tc_details',
@@ -507,7 +493,6 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'HTML',
-		'idx': 25,
 		'label': 'Terms HTML',
 		'oldfieldtype': 'HTML',
 		'options': 'You can add Terms and Notes that will be printed in the Transaction',
@@ -520,7 +505,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'terms',
 		'fieldtype': 'Text Editor',
-		'idx': 26,
 		'label': 'Terms1',
 		'oldfieldname': 'terms',
 		'oldfieldtype': 'Text Editor',
@@ -531,7 +515,6 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Column Break',
-		'idx': 27,
 		'oldfieldtype': 'Column Break',
 		'permlevel': 0,
 		'print_hide': 1
@@ -543,7 +526,6 @@
 		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldtype': 'Button',
-		'idx': 28,
 		'label': 'Repair Indent',
 		'oldfieldtype': 'Button',
 		'options': 'repair_indent',
diff --git a/erpnext/buying/doctype/indent_detail/indent_detail.txt b/erpnext/buying/doctype/indent_detail/indent_detail.txt
index c207266..136237a 100644
--- a/erpnext/buying/doctype/indent_detail/indent_detail.txt
+++ b/erpnext/buying/doctype/indent_detail/indent_detail.txt
@@ -5,7 +5,7 @@
 	{
 		'creation': '2010-08-08 17:09:04',
 		'docstatus': 0,
-		'modified': '2011-05-04 14:41:43',
+		'modified': '2011-10-12 13:02:13',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
@@ -14,6 +14,7 @@
 	{
 		'autoname': 'IDTD/.#####',
 		'colour': 'White:FFF',
+		'default_print_format': 'Standard',
 		'doctype': 'DocType',
 		'istable': 1,
 		'module': 'Buying',
@@ -21,7 +22,7 @@
 		'section_style': 'Tray',
 		'server_code_error': ' ',
 		'show_in_menu': 0,
-		'version': 29
+		'version': 34
 	},
 
 	# These values are common for all DocField
@@ -44,7 +45,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'schedule_date',
 		'fieldtype': 'Date',
-		'idx': 1,
 		'label': 'Required Date',
 		'no_copy': 1,
 		'oldfieldname': 'schedule_date',
@@ -60,7 +60,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'item_code',
 		'fieldtype': 'Link',
-		'idx': 2,
 		'in_filter': 1,
 		'label': 'Item Code',
 		'oldfieldname': 'item_code',
@@ -78,14 +77,13 @@
 		'doctype': 'DocField',
 		'fieldname': 'item_name',
 		'fieldtype': 'Data',
-		'idx': 3,
 		'in_filter': 1,
 		'label': 'Item Name',
 		'oldfieldname': 'item_name',
 		'oldfieldtype': 'Data',
 		'permlevel': 0,
 		'reqd': 1,
-		'search_index': 0,
+		'search_index': 1,
 		'width': '100px'
 	},
 
@@ -94,7 +92,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'description',
 		'fieldtype': 'Text',
-		'idx': 4,
 		'label': 'Description',
 		'oldfieldname': 'description',
 		'oldfieldtype': 'Text',
@@ -108,7 +105,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'warehouse',
 		'fieldtype': 'Link',
-		'idx': 5,
 		'label': 'Warehouse',
 		'oldfieldname': 'warehouse',
 		'oldfieldtype': 'Link',
@@ -125,14 +121,12 @@
 		'doctype': 'DocField',
 		'fieldname': 'brand',
 		'fieldtype': 'Link',
-		'idx': 6,
 		'label': 'Brand',
 		'oldfieldname': 'brand',
 		'oldfieldtype': 'Link',
 		'options': 'Brand',
 		'permlevel': 1,
 		'print_hide': 1,
-		'search_index': 0,
 		'width': '100px'
 	},
 
@@ -142,7 +136,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'item_group',
 		'fieldtype': 'Link',
-		'idx': 7,
 		'in_filter': 1,
 		'label': 'Item Group',
 		'no_copy': 0,
@@ -152,7 +145,7 @@
 		'permlevel': 1,
 		'print_hide': 1,
 		'reqd': 0,
-		'search_index': 0
+		'search_index': 1
 	},
 
 	# DocField
@@ -162,7 +155,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'qty',
 		'fieldtype': 'Currency',
-		'idx': 8,
 		'label': 'Quantity',
 		'no_copy': 0,
 		'oldfieldname': 'qty',
@@ -178,7 +170,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'lead_time_date',
 		'fieldtype': 'Date',
-		'idx': 9,
 		'label': 'Lead Time Date',
 		'no_copy': 1,
 		'oldfieldname': 'lead_time_date',
@@ -192,7 +183,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'uom',
 		'fieldtype': 'Link',
-		'idx': 10,
 		'label': 'Stock UOM',
 		'no_copy': 0,
 		'oldfieldname': 'uom',
@@ -200,7 +190,6 @@
 		'options': 'UOM',
 		'permlevel': 1,
 		'reqd': 1,
-		'search_index': 0,
 		'width': '50px'
 	},
 
@@ -209,7 +198,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'min_order_qty',
 		'fieldtype': 'Currency',
-		'idx': 11,
 		'label': 'Min Order Qty',
 		'no_copy': 1,
 		'oldfieldname': 'min_order_qty',
@@ -225,7 +213,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'projected_qty',
 		'fieldtype': 'Currency',
-		'idx': 12,
 		'label': 'Projected Qty',
 		'no_copy': 1,
 		'oldfieldname': 'projected_qty',
@@ -240,7 +227,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'ordered_qty',
 		'fieldtype': 'Currency',
-		'idx': 13,
 		'label': 'Ordered Qty',
 		'no_copy': 1,
 		'oldfieldname': 'ordered_qty',
@@ -253,9 +239,9 @@
 		'doctype': 'DocField',
 		'fieldname': 'sales_order_no',
 		'fieldtype': 'Link',
-		'idx': 14,
 		'label': 'Sales Order No',
 		'no_copy': 1,
+		'options': 'Sales Order',
 		'permlevel': 1,
 		'print_hide': 1
 	},
@@ -266,7 +252,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'page_break',
 		'fieldtype': 'Check',
-		'idx': 15,
 		'label': 'Page Break',
 		'no_copy': 1,
 		'oldfieldname': 'page_break',
diff --git a/erpnext/buying/doctype/po_detail/po_detail.txt b/erpnext/buying/doctype/po_detail/po_detail.txt
index 71d78df..bfd014e 100644
--- a/erpnext/buying/doctype/po_detail/po_detail.txt
+++ b/erpnext/buying/doctype/po_detail/po_detail.txt
@@ -5,8 +5,8 @@
 	{
 		'creation': '2010-08-08 17:09:12',
 		'docstatus': 0,
-		'modified': '2010-11-12 16:53:30',
-		'modified_by': 'sneha@webnotestech.com',
+		'modified': '2011-10-20 18:39:20',
+		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
 
@@ -14,6 +14,7 @@
 	{
 		'autoname': 'POD/.#####',
 		'colour': 'White:FFF',
+		'default_print_format': 'Standard',
 		'doctype': 'DocType',
 		'istable': 1,
 		'module': 'Buying',
@@ -21,7 +22,7 @@
 		'section_style': 'Tray',
 		'server_code_error': ' ',
 		'show_in_menu': 0,
-		'version': 46
+		'version': 54
 	},
 
 	# These values are common for all DocField
@@ -45,7 +46,6 @@
 		'fieldname': 'schedule_date',
 		'fieldtype': 'Date',
 		'hidden': 0,
-		'idx': 1,
 		'in_filter': 1,
 		'label': 'Reqd By Date',
 		'no_copy': 1,
@@ -54,7 +54,7 @@
 		'permlevel': 0,
 		'print_hide': 1,
 		'reqd': 1,
-		'search_index': 0
+		'search_index': 1
 	},
 
 	# DocField
@@ -62,7 +62,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'item_code',
 		'fieldtype': 'Link',
-		'idx': 2,
 		'in_filter': 1,
 		'label': 'Item Code',
 		'oldfieldname': 'item_code',
@@ -81,7 +80,6 @@
 		'fieldname': 'item_name',
 		'fieldtype': 'Data',
 		'hidden': 0,
-		'idx': 3,
 		'in_filter': 1,
 		'label': 'Item Name',
 		'oldfieldname': 'item_name',
@@ -89,7 +87,7 @@
 		'permlevel': 0,
 		'print_hide': 1,
 		'reqd': 1,
-		'search_index': 0
+		'search_index': 1
 	},
 
 	# DocField
@@ -97,7 +95,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'description',
 		'fieldtype': 'Small Text',
-		'idx': 4,
 		'label': 'Description',
 		'oldfieldname': 'description',
 		'oldfieldtype': 'Small Text',
@@ -110,9 +107,39 @@
 	{
 		'default': '0.00',
 		'doctype': 'DocField',
+		'fieldname': 'qty',
+		'fieldtype': 'Currency',
+		'label': 'Quantity',
+		'oldfieldname': 'qty',
+		'oldfieldtype': 'Currency',
+		'permlevel': 0,
+		'reqd': 1,
+		'trigger': 'Client',
+		'width': '60px'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'uom',
+		'fieldtype': 'Link',
+		'label': 'UOM',
+		'oldfieldname': 'uom',
+		'oldfieldtype': 'Link',
+		'options': 'UOM',
+		'permlevel': 0,
+		'print_hide': 0,
+		'reqd': 1,
+		'trigger': 'Client',
+		'width': '100px'
+	},
+
+	# DocField
+	{
+		'default': '0.00',
+		'doctype': 'DocField',
 		'fieldname': 'purchase_rate',
 		'fieldtype': 'Currency',
-		'idx': 7,
 		'label': 'Rate (Default Curr.)',
 		'oldfieldname': 'purchase_rate',
 		'oldfieldtype': 'Currency',
@@ -129,7 +156,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'amount',
 		'fieldtype': 'Currency',
-		'idx': 8,
 		'label': 'Amount  (Default Curr.)',
 		'oldfieldname': 'amount',
 		'oldfieldtype': 'Currency',
@@ -140,27 +166,10 @@
 
 	# DocField
 	{
-		'default': '0.00',
-		'doctype': 'DocField',
-		'fieldname': 'qty',
-		'fieldtype': 'Currency',
-		'idx': 9,
-		'label': 'Quantity',
-		'oldfieldname': 'qty',
-		'oldfieldtype': 'Currency',
-		'permlevel': 0,
-		'reqd': 1,
-		'trigger': 'Client',
-		'width': '60px'
-	},
-
-	# DocField
-	{
 		'doctype': 'DocField',
 		'fieldname': 'import_rate',
 		'fieldtype': 'Currency',
 		'hidden': 0,
-		'idx': 9,
 		'label': 'Rate',
 		'oldfieldname': 'import_rate',
 		'oldfieldtype': 'Currency',
@@ -172,27 +181,8 @@
 	# DocField
 	{
 		'doctype': 'DocField',
-		'fieldname': 'uom',
-		'fieldtype': 'Link',
-		'idx': 10,
-		'label': 'UOM',
-		'oldfieldname': 'uom',
-		'oldfieldtype': 'Link',
-		'options': 'UOM',
-		'permlevel': 0,
-		'print_hide': 0,
-		'reqd': 1,
-		'search_index': 0,
-		'trigger': 'Client',
-		'width': '100px'
-	},
-
-	# DocField
-	{
-		'doctype': 'DocField',
 		'fieldname': 'import_amount',
 		'fieldtype': 'Currency',
-		'idx': 10,
 		'label': 'Amount',
 		'oldfieldname': 'import_amount',
 		'oldfieldtype': 'Currency',
@@ -205,7 +195,6 @@
 		'fieldname': 'warehouse',
 		'fieldtype': 'Link',
 		'hidden': 0,
-		'idx': 11,
 		'label': 'Warehouse',
 		'oldfieldname': 'warehouse',
 		'oldfieldtype': 'Link',
@@ -223,7 +212,6 @@
 		'fieldname': 'conversion_factor',
 		'fieldtype': 'Currency',
 		'hidden': 0,
-		'idx': 11,
 		'label': 'Conversion Factor',
 		'oldfieldname': 'conversion_factor',
 		'oldfieldtype': 'Currency',
@@ -238,16 +226,17 @@
 	{
 		'colour': 'White:FFF',
 		'doctype': 'DocField',
-		'fieldname': 'prevdoc_doctype',
-		'fieldtype': 'Data',
-		'hidden': 1,
-		'idx': 12,
-		'label': 'Prevdoc DocType',
-		'no_copy': 0,
-		'oldfieldname': 'prevdoc_doctype',
-		'oldfieldtype': 'Data',
-		'permlevel': 1,
-		'print_hide': 1
+		'fieldname': 'stock_qty',
+		'fieldtype': 'Currency',
+		'hidden': 0,
+		'label': 'Stock Qty',
+		'no_copy': 1,
+		'oldfieldname': 'stock_qty',
+		'oldfieldtype': 'Currency',
+		'permlevel': 0,
+		'print_hide': 1,
+		'trigger': 'Client',
+		'width': '100px'
 	},
 
 	# DocField
@@ -256,7 +245,6 @@
 		'fieldname': 'stock_uom',
 		'fieldtype': 'Data',
 		'hidden': 0,
-		'idx': 12,
 		'label': 'Stock UOM',
 		'oldfieldname': 'stock_uom',
 		'oldfieldtype': 'Data',
@@ -268,12 +256,39 @@
 
 	# DocField
 	{
+		'doctype': 'DocField',
+		'fieldname': 'project_name',
+		'fieldtype': 'Link',
+		'in_filter': 1,
+		'label': 'Project Name',
+		'options': 'Project',
+		'permlevel': 0,
+		'print_hide': 1,
+		'report_hide': 0
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'prevdoc_doctype',
+		'fieldtype': 'Data',
+		'hidden': 1,
+		'label': 'Prevdoc DocType',
+		'no_copy': 0,
+		'oldfieldname': 'prevdoc_doctype',
+		'oldfieldtype': 'Data',
+		'permlevel': 1,
+		'print_hide': 1
+	},
+
+	# DocField
+	{
 		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldname': 'prevdoc_docname',
 		'fieldtype': 'Link',
 		'hidden': 0,
-		'idx': 13,
 		'in_filter': 1,
 		'label': 'Indent No',
 		'no_copy': 0,
@@ -292,7 +307,6 @@
 		'fieldname': 'prevdoc_date',
 		'fieldtype': 'Date',
 		'hidden': 0,
-		'idx': 14,
 		'in_filter': 1,
 		'label': 'Indent Date',
 		'oldfieldname': 'prevdoc_date',
@@ -309,7 +323,6 @@
 		'fieldname': 'prevdoc_detail_docname',
 		'fieldtype': 'Data',
 		'hidden': 1,
-		'idx': 15,
 		'in_filter': 1,
 		'label': 'Indent Detail No',
 		'no_copy': 0,
@@ -326,14 +339,12 @@
 		'fieldname': 'brand',
 		'fieldtype': 'Link',
 		'hidden': 0,
-		'idx': 16,
 		'label': 'Brand',
 		'oldfieldname': 'brand',
 		'oldfieldtype': 'Link',
 		'options': 'Brand',
 		'permlevel': 1,
-		'print_hide': 1,
-		'search_index': 0
+		'print_hide': 1
 	},
 
 	# DocField
@@ -342,7 +353,6 @@
 		'fieldname': 'item_group',
 		'fieldtype': 'Link',
 		'hidden': 0,
-		'idx': 17,
 		'in_filter': 1,
 		'label': 'Item Group',
 		'oldfieldname': 'item_group',
@@ -350,24 +360,7 @@
 		'options': 'Item Group',
 		'permlevel': 1,
 		'print_hide': 1,
-		'search_index': 0
-	},
-
-	# DocField
-	{
-		'doctype': 'DocField',
-		'fieldname': 'stock_qty',
-		'fieldtype': 'Currency',
-		'hidden': 0,
-		'idx': 20,
-		'label': 'Stock Qty',
-		'no_copy': 1,
-		'oldfieldname': 'stock_qty',
-		'oldfieldtype': 'Currency',
-		'permlevel': 0,
-		'print_hide': 1,
-		'trigger': 'Client',
-		'width': '100px'
+		'search_index': 1
 	},
 
 	# DocField
@@ -376,7 +369,6 @@
 		'fieldname': 'received_qty',
 		'fieldtype': 'Currency',
 		'hidden': 0,
-		'idx': 21,
 		'label': 'Received Qty',
 		'no_copy': 1,
 		'oldfieldname': 'received_qty',
@@ -392,7 +384,6 @@
 		'fieldname': 'billed_qty',
 		'fieldtype': 'Currency',
 		'hidden': 0,
-		'idx': 22,
 		'label': 'Billed Quantity',
 		'no_copy': 1,
 		'oldfieldname': 'billed_qty',
@@ -409,7 +400,6 @@
 		'fieldname': 'item_tax_rate',
 		'fieldtype': 'Small Text',
 		'hidden': 1,
-		'idx': 23,
 		'label': 'Item Tax Rate',
 		'oldfieldname': 'item_tax_rate',
 		'oldfieldtype': 'Small Text',
@@ -420,12 +410,11 @@
 
 	# DocField
 	{
-		'allow_on_submit': 1,
+		'allow_on_submit': 0,
 		'doctype': 'DocField',
 		'fieldname': 'page_break',
 		'fieldtype': 'Check',
 		'hidden': 0,
-		'idx': 24,
 		'label': 'Page Break',
 		'no_copy': 1,
 		'oldfieldname': 'page_break',
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.js b/erpnext/buying/doctype/purchase_order/purchase_order.js
index 5714126..d3fa37b 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order.js
+++ b/erpnext/buying/doctype/purchase_order/purchase_order.js
@@ -111,11 +111,10 @@
 
 
 // ---------------------- Get project name --------------------------
-cur_frm.fields_dict['project_name'].get_query = function(doc, cdt, cdn) {
+cur_frm.fields_dict['po_details'].grid.get_field('project_name').get_query = function(doc, cdt, cdn) {
   return 'SELECT `tabProject`.name FROM `tabProject` WHERE `tabProject`.status = "Open" AND `tabProject`.name LIKE "%s" ORDER BY `tabProject`.name ASC LIMIT 50';
 }
 
-
 //==================== Indent No Get Query =======================================================
 //===== Only those Indents status != 'Completed' and docstatus = 1 i.e. submitted=================
 cur_frm.fields_dict['indent_no'].get_query = function(doc) {
diff --git a/erpnext/home/doctype/home_control/home_control.py b/erpnext/home/doctype/home_control/home_control.py
index 8242e74..ce15bfd 100644
--- a/erpnext/home/doctype/home_control/home_control.py
+++ b/erpnext/home/doctype/home_control/home_control.py
@@ -31,6 +31,8 @@
 	def get_modules(self):
 		rl = webnotes.user.get_roles()
 		ml = sql("select distinct t1.name, t1.module_icon, t1.module_label, t1.module_desc, t1.module_page from  `tabModule Def` t1, `tabModule Def Role` t2 where t2.role in ('%s') and t1.disabled !='Yes' and ifnull(t1.is_hidden, 'No') != 'Yes' and t1.name = t2.parent order by t1.module_seq asc" % "','".join(rl), as_dict=1)
+		webnotes.response['login_url'] = session['data'].get('login_from', '')		
+		
 		return ml
 
 	def get_module_details(self,m):
@@ -48,8 +50,6 @@
 			AND t2.role IN ("%s") 
 			AND ifnull(standard,"No")="No"''' % (m, '", "'.join(webnotes.user.get_roles())), as_dict=1)
 
-		ret['login_url'] = session['data'].get('login_from', '')		
-
 		return ret
 
 	# ----------------------------------------------------------------------------------------------------------------
diff --git a/erpnext/home/page/my_company/my_company.js b/erpnext/home/page/my_company/my_company.js
index 40bf155..e88c458 100644
--- a/erpnext/home/page/my_company/my_company.js
+++ b/erpnext/home/page/my_company/my_company.js
@@ -242,7 +242,7 @@
 		// working img
 		var div = $a($td(this.tab, 0, 1), 'div');
 		this.working_img = $a(div,'img','',{display:'none'}); 
-		this.working_img.src = 'images/ui/button-load.gif';
+		this.working_img.src = 'lib/images/ui/button-load.gif';
 		
 		this.refresh_name_link();
 		
@@ -731,7 +731,7 @@
 	this.make_role_body(profile_id);
 	this.make_help_body();
 	
-	this.body.innerHTML = '<span style="color:#888">Loading...</span> <img src="images/ui/button-load.gif">'
+	this.body.innerHTML = '<span style="color:#888">Loading...</span> <img src="lib/images/ui/button-load.gif">'
 	var me=this;
 
 	d.onshow = function() {
@@ -829,7 +829,7 @@
 	
 	var t = make_table($td(tbl, ridx, cidx),1,2,null,['16px', null],{marginRight:'5px'});
 	var ic = $a($td(t,0,0), 'img','',{cursor:'pointer', marginRight:'5px'});
-	ic.src= 'images/icons/help.gif';
+	ic.src= 'lib/images/icons/help.gif';
 	ic.role = role;
 		
 	ic.onclick = function(){
@@ -942,8 +942,8 @@
 		for(var i=0; i<(head_lst.length-1);i++){
 			$td(perm_tbl,0,i).innerHTML= "<b>"+head_lst[i]+"</b>";
 		}
-		var accept_img1 = 'images/icons/accept.gif';
-		var cancel_img1 =	'images/icons/cancel.gif';
+		var accept_img1 = 'lib/images/icons/accept.gif';
+		var cancel_img1 =	'lib/images/icons/cancel.gif';
 
 		for(i=1; i<perm.length+1; i++){
 			$td(perm_tbl,i,0).innerHTML= get_doctype_label(perm[i-1][0]);
diff --git a/erpnext/hr/doctype/appraisal/appraisal.js b/erpnext/hr/doctype/appraisal/appraisal.js
index b2683d8..d040c53 100644
--- a/erpnext/hr/doctype/appraisal/appraisal.js
+++ b/erpnext/hr/doctype/appraisal/appraisal.js
@@ -1,13 +1,20 @@
 cur_frm.add_fetch('employee', 'company', 'company');
 
 cur_frm.cscript.onload = function(doc,cdt,cdn){
-	if(!doc.status) set_multiple(dt,dn,{status:'Draft'});
-	if(doc.employee) cur_frm.cscript.employee(doc,cdt,cdn);
-	if(doc.amended_from && doc.__islocal) cur_frm.cscript.refresh_appraisal_details(doc, cdt, cdn);
+	if(!doc.status) 
+		set_multiple(cdt,cdn,{status:'Draft'});
+	if(doc.amended_from && doc.__islocal) 
+		cur_frm.cscript.refresh_appraisal_details(doc, cdt, cdn);
+}
+
+cur_frm.cscript.onload_post_render = function(doc,cdt,cdn){
+	if(doc.employee) 
+		cur_frm.cscript.employee(doc,cdt,cdn);
 }
 
 cur_frm.cscript.refresh = function(doc,cdt,cdn){
-	if(user == doc.kra_approver && doc.status == 'Submitted') unhide_field(['Update', 'Declare Completed', 'Calculate Total Score']);
+	if(user == doc.kra_approver && doc.status == 'Submitted') 
+		unhide_field(['Update', 'Declare Completed', 'Calculate Total Score']);
 	else hide_field(['Update', 'Declare Completed', 'Calculate Total Score']);
 	
 	if(!doc.docstatus) unhide_field('Fetch Template');
diff --git a/erpnext/hr/doctype/leave_application/leave_application.py b/erpnext/hr/doctype/leave_application/leave_application.py
index 1756f2a..f688cae 100755
--- a/erpnext/hr/doctype/leave_application/leave_application.py
+++ b/erpnext/hr/doctype/leave_application/leave_application.py
@@ -17,108 +17,116 @@
 	
 # -----------------------------------------------------------------------------------------
 class DocType:
-  def __init__(self, doc, doclist):
-    self.doc = doc
-    self.doclist = doclist 
+	def __init__(self, doc, doclist):
+		self.doc = doc
+		self.doclist = doclist 
 
 
 # ******************************************** client triggers ***********************************************
 
-  # ------------------
-  # get leave balance
-  # ------------------
-  def get_leave_balance(self):
-    leave_all = sql("select total_leaves_allocated from `tabLeave Allocation` where employee = '%s' and leave_type = '%s' and fiscal_year = '%s' and docstatus = 1" % (self.doc.employee, self.doc.leave_type, self.doc.fiscal_year))
-    leave_all = leave_all and flt(leave_all[0][0]) or 0
-    leave_app = sql("select total_leave_days from `tabLeave Application` where employee = '%s' and leave_type = '%s' and fiscal_year = '%s' and docstatus = 1" % (self.doc.employee, self.doc.leave_type, self.doc.fiscal_year))
-    leave_app = leave_app and flt(leave_app[0][0]) or 0
-    ret = {'leave_balance':leave_all - leave_app}
-    return ret
+	# ------------------
+	# get leave balance
+	# ------------------
+	def get_leave_balance(self):
+		leave_all = sql("select total_leaves_allocated from `tabLeave Allocation` where employee = '%s' and leave_type = '%s' and fiscal_year = '%s' and docstatus = 1" % (self.doc.employee, self.doc.leave_type, self.doc.fiscal_year))
+		leave_all = leave_all and flt(leave_all[0][0]) or 0
+		leave_app = sql("select total_leave_days from `tabLeave Application` where employee = '%s' and leave_type = '%s' and fiscal_year = '%s' and docstatus = 1" % (self.doc.employee, self.doc.leave_type, self.doc.fiscal_year))
+		leave_app = leave_app and flt(leave_app[0][0]) or 0
+		ret = {'leave_balance':leave_all - leave_app}
+		return ret
 
 
 # ************************************************ utilities *************************************************
 
-  # -------------------
-  # get total holidays
-  # -------------------
-  def get_holidays(self):
-    tot_hol = sql("select count(*) from `tabHoliday List Detail` h1, `tabHoliday List` h2, `tabEmployee` e1 where e1.name = '%s' and h1.parent = h2.name and e1.holiday_list = h2.name and h1.holiday_date between '%s' and '%s'"% (self.doc.employee, self.doc.from_date, self.doc.to_date))
-    if not tot_hol:
-      tot_hol = sql("select count(*) from `tabHoliday List Detail` h1, `tabHoliday List` h2 where h1.parent = h2.name and h1.holiday_date between '%s' and '%s' and ifnull(h2.is_default,0) = 1 and h2.fiscal_year = %s"% (self.doc.from_date, self.doc.to_date, self.doc.fiscal_year))
-    return tot_hol and flt(tot_hol[0][0]) or 0
+	# -------------------
+	def get_holidays(self):
+		"""
+			get total holidays
+		"""
+		tot_hol = sql("select count(*) from `tabHoliday List Detail` h1, `tabHoliday List` h2, `tabEmployee` e1 where e1.name = '%s' and h1.parent = h2.name and e1.holiday_list = h2.name and h1.holiday_date between '%s' and '%s'"% (self.doc.employee, self.doc.from_date, self.doc.to_date))
+		if not tot_hol:
+			tot_hol = sql("select count(*) from `tabHoliday List Detail` h1, `tabHoliday List` h2 where h1.parent = h2.name and h1.holiday_date between '%s' and '%s' and ifnull(h2.is_default,0) = 1 and h2.fiscal_year = %s"% (self.doc.from_date, self.doc.to_date, self.doc.fiscal_year))
+		return tot_hol and flt(tot_hol[0][0]) or 0
 
-
-  # ---------------------
-  # get total leave days
-  # ---------------------
-  def get_total_leave_days(self):
-    tot_days = date_diff(self.doc.to_date, self.doc.from_date) + 1
-    holidays = self.get_holidays()
-    ret = {'total_leave_days':flt(tot_days)-flt(holidays)}
-    return ret
+	
+	# ---------------------
+	# get total leave days
+	# ---------------------
+	def get_total_leave_days(self):
+		"""
+			Calculates total leave days based on input and holidays
+		"""
+		ret = {'total_leave_days' : 0.5}
+		if not self.doc.half_day:
+			tot_days = date_diff(self.doc.to_date, self.doc.from_date) + 1
+			holidays = self.get_holidays()
+			ret = {
+				'total_leave_days' : flt(tot_days)-flt(holidays)
+			}
+		return ret
 
 
 # ************************************************ validate *************************************************
 
-  # -----------------
-  # validate to date
-  # -----------------
-  def validate_to_date(self):
-    if (getdate(self.doc.to_date) < getdate(self.doc.from_date)):
-      msgprint("To date cannot be before from date")
-      raise Exception
+	# -----------------
+	# validate to date
+	# -----------------
+	def validate_to_date(self):
+		if self.doc.from_date and self.doc.to_date and (getdate(self.doc.to_date) < getdate(self.doc.from_date)):
+			msgprint("To date cannot be before from date")
+			raise Exception
 
-  # --------------------------------
-  # check whether leave type is lwp
-  # --------------------------------
-  def is_lwp(self):
-    lwp = sql("select is_lwp from `tabLeave Type` where name = %s", self.doc.leave_type)
-    return lwp and cint(lwp[0][0]) or 0
+	# --------------------------------
+	# check whether leave type is lwp
+	# --------------------------------
+	def is_lwp(self):
+		lwp = sql("select is_lwp from `tabLeave Type` where name = %s", self.doc.leave_type)
+		return lwp and cint(lwp[0][0]) or 0
 
-  # ------------------------
-  # validate balance leaves
-  # ------------------------
-  def validate_balance_leaves(self):
-    if not self.is_lwp():
-      bal = self.get_leave_balance()
-      tot_leaves = self.get_total_leave_days()
-      bal, tot_leaves = bal, tot_leaves
-      set(self.doc,'leave_balance',flt(bal['leave_balance']))
-      set(self.doc,'total_leave_days',flt(tot_leaves['total_leave_days']))
-      if flt(bal['leave_balance']) < flt(tot_leaves['total_leave_days']):
-        msgprint("Employee : %s cannot apply for %s of more than %s days" % (self.doc.employee, self.doc.leave_type, flt(bal['leave_balance'])))
-        raise Exception
+	# ------------------------
+	# validate balance leaves
+	# ------------------------
+	def validate_balance_leaves(self):
+		if self.doc.from_date and self.doc.to_date and not self.is_lwp():
+			bal = self.get_leave_balance()
+			tot_leaves = self.get_total_leave_days()
+			bal, tot_leaves = bal, tot_leaves
+			set(self.doc,'leave_balance',flt(bal['leave_balance']))
+			set(self.doc,'total_leave_days',flt(tot_leaves['total_leave_days']))
+			if flt(bal['leave_balance']) < flt(tot_leaves['total_leave_days']):
+				msgprint("Employee : %s cannot apply for %s of more than %s days" % (self.doc.employee, self.doc.leave_type, flt(bal['leave_balance'])))
+				raise Exception
 
-  #
-  # validate overlapping leaves
-  #
-  def validate_leave_overlap(self):
-    for d in sql("""select name, leave_type, posting_date, from_date, to_date 
-      from `tabLeave Application` 
-      where 
-      (from_date <= %(to_date)s and to_date >= %(from_date)s)
-      and employee = %(employee)s
-      and docstatus = 1 
-      and name != %(name)s""", self.doc.fields, as_dict = 1):
+	#
+	# validate overlapping leaves
+	#
+	def validate_leave_overlap(self):
+		for d in sql("""select name, leave_type, posting_date, from_date, to_date 
+			from `tabLeave Application` 
+			where 
+			(from_date <= %(to_date)s and to_date >= %(from_date)s)
+			and employee = %(employee)s
+			and docstatus = 1 
+			and name != %(name)s""", self.doc.fields, as_dict = 1):
  
-      msgprint("Employee : %s has already applied for %s between %s and %s on %s. Please refer Leave Application : %s" % (self.doc.employee, cstr(d['leave_type']), formatdate(d['from_date']), formatdate(d['to_date']), formatdate(d['posting_date']), d['name']), raise_exception = 1)
+			msgprint("Employee : %s has already applied for %s between %s and %s on %s. Please refer Leave Application : %s" % (self.doc.employee, cstr(d['leave_type']), formatdate(d['from_date']), formatdate(d['to_date']), formatdate(d['posting_date']), d['name']), raise_exception = 1)
 
-  # ---------------------------------------------------------------------
-  # validate max days for which leave can be applied for particular type
-  # ---------------------------------------------------------------------
-  def validate_max_days(self):
-    max_days = sql("select max_days_allowed from `tabLeave Type` where name = '%s'" %(self.doc.leave_type))
-    max_days = max_days and flt(max_days[0][0]) or 0
-    if max_days and self.doc.total_leave_days > max_days:
-      msgprint("Sorry ! You cannot apply for %s for more than %s days" % (self.doc.leave_type, max_days))
-      raise Exception
+	# ---------------------------------------------------------------------
+	# validate max days for which leave can be applied for particular type
+	# ---------------------------------------------------------------------
+	def validate_max_days(self):
+		max_days = sql("select max_days_allowed from `tabLeave Type` where name = '%s'" %(self.doc.leave_type))
+		max_days = max_days and flt(max_days[0][0]) or 0
+		if max_days and self.doc.total_leave_days > max_days:
+			msgprint("Sorry ! You cannot apply for %s for more than %s days" % (self.doc.leave_type, max_days))
+			raise Exception
 
 
-  # ---------
-  # validate
-  # ---------
-  def validate(self):
-    self.validate_to_date()
-    self.validate_balance_leaves()
-    self.validate_leave_overlap()
-    self.validate_max_days()
+	# ---------
+	# validate
+	# ---------
+	def validate(self):
+		self.validate_to_date()
+		self.validate_balance_leaves()
+		self.validate_leave_overlap()
+		self.validate_max_days()
diff --git a/erpnext/hr/doctype/salary_manager/salary_manager.py b/erpnext/hr/doctype/salary_manager/salary_manager.py
index 5071056..badd69b 100644
--- a/erpnext/hr/doctype/salary_manager/salary_manager.py
+++ b/erpnext/hr/doctype/salary_manager/salary_manager.py
@@ -46,7 +46,7 @@
 		self.check_mandatory()
 		
 		cond = ''
-		for f in ['company', 'branch', 'department', 'designation', 'grade', 'employment_type']:
+		for f in ['company', 'branch', 'department', 'designation', 'grade']:
 			if self.doc.fields.get(f):
 				cond += " and t1." + f + " = '" + self.doc.fields.get(f) + "'"
 				
diff --git a/erpnext/hr/doctype/salary_manager/salary_manager.txt b/erpnext/hr/doctype/salary_manager/salary_manager.txt
index 66a7282..c1ca4c6 100644
--- a/erpnext/hr/doctype/salary_manager/salary_manager.txt
+++ b/erpnext/hr/doctype/salary_manager/salary_manager.txt
@@ -5,18 +5,19 @@
 	{
 		'creation': '2011-08-11 16:40:04',
 		'docstatus': 0,
-		'modified': '2011-08-25 12:02:57',
+		'modified': '2011-11-07 10:47:32',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
 
 	# These values are common for all DocType
 	{
-		'_last_update': '1314179318',
+		'_last_update': '1314253977',
 		'allow_copy': 1,
 		'allow_email': 1,
 		'allow_print': 1,
 		'colour': 'White:FFF',
+		'default_print_format': 'Standard',
 		'doctype': 'DocType',
 		'document_type': 'Other',
 		'issingle': 1,
@@ -24,7 +25,7 @@
 		'name': '__common__',
 		'section_style': 'Simple',
 		'show_in_menu': 1,
-		'version': 29
+		'version': 30
 	},
 
 	# These values are common for all DocField
@@ -59,21 +60,18 @@
 	# DocPerm
 	{
 		'doctype': 'DocPerm',
-		'idx': 1,
 		'role': 'System Manager'
 	},
 
 	# DocPerm
 	{
 		'doctype': 'DocPerm',
-		'idx': 2,
 		'role': 'HR User'
 	},
 
 	# DocPerm
 	{
 		'doctype': 'DocPerm',
-		'idx': 3,
 		'role': 'HR Manager'
 	},
 
@@ -82,7 +80,6 @@
 		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldtype': 'HTML',
-		'idx': 1,
 		'label': 'Document Description',
 		'options': '<div class="field_description">You can generate multiple salary slips based on the selected criteria, submit and mail those to the employee directly from here</div>'
 	},
@@ -90,15 +87,13 @@
 	# DocField
 	{
 		'doctype': 'DocField',
-		'fieldtype': 'Section Break',
-		'idx': 2
+		'fieldtype': 'Section Break'
 	},
 
 	# DocField
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Column Break',
-		'idx': 3,
 		'width': '50%'
 	},
 
@@ -107,7 +102,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'company',
 		'fieldtype': 'Select',
-		'idx': 4,
 		'label': 'Company',
 		'options': 'link:Company',
 		'reqd': 1
@@ -118,7 +112,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'branch',
 		'fieldtype': 'Link',
-		'idx': 5,
 		'label': 'Branch',
 		'options': 'Branch'
 	},
@@ -128,7 +121,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'department',
 		'fieldtype': 'Link',
-		'idx': 6,
 		'label': 'Department',
 		'options': 'Department'
 	},
@@ -138,7 +130,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'designation',
 		'fieldtype': 'Link',
-		'idx': 7,
 		'label': 'Designation',
 		'options': 'Designation'
 	},
@@ -147,7 +138,6 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Column Break',
-		'idx': 8,
 		'width': '50%'
 	},
 
@@ -156,28 +146,16 @@
 		'doctype': 'DocField',
 		'fieldname': 'grade',
 		'fieldtype': 'Select',
-		'idx': 9,
 		'label': 'Grade',
 		'options': 'link:Grade'
 	},
 
 	# DocField
 	{
-		'doctype': 'DocField',
-		'fieldname': 'employment_type',
-		'fieldtype': 'Select',
-		'idx': 10,
-		'label': 'Employment Type',
-		'options': 'link:Employment Type'
-	},
-
-	# DocField
-	{
 		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldname': 'fiscal_year',
 		'fieldtype': 'Select',
-		'idx': 11,
 		'label': 'Fiscal Year',
 		'options': 'link:Fiscal Year',
 		'reqd': 1
@@ -189,7 +167,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'month',
 		'fieldtype': 'Select',
-		'idx': 12,
 		'label': 'Month',
 		'options': '\n01\n02\n03\n04\n05\n06\n07\n08\n09\n10\n11\n12',
 		'reqd': 1
@@ -202,22 +179,19 @@
 		'doctype': 'DocField',
 		'fieldname': 'send_email',
 		'fieldtype': 'Check',
-		'idx': 13,
 		'label': 'Send Email'
 	},
 
 	# DocField
 	{
 		'doctype': 'DocField',
-		'fieldtype': 'Section Break',
-		'idx': 14
+		'fieldtype': 'Section Break'
 	},
 
 	# DocField
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Column Break',
-		'idx': 15,
 		'width': '50%'
 	},
 
@@ -227,7 +201,6 @@
 		'description': 'Creates salary slip for above mentioned criteria.',
 		'doctype': 'DocField',
 		'fieldtype': 'Button',
-		'idx': 16,
 		'label': 'Create Salary Slip',
 		'trigger': 'Client'
 	},
@@ -236,7 +209,6 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Column Break',
-		'idx': 17,
 		'width': '25%'
 	},
 
@@ -246,7 +218,6 @@
 		'description': 'Submit all salary slips for the above selected criteria',
 		'doctype': 'DocField',
 		'fieldtype': 'Button',
-		'idx': 18,
 		'label': 'Submit Salary Slip',
 		'trigger': 'Client'
 	},
@@ -255,7 +226,6 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Column Break',
-		'idx': 19,
 		'width': '25%'
 	},
 
@@ -265,7 +235,6 @@
 		'description': 'Create Bank Voucher for the total salary paid for the above selected criteria',
 		'doctype': 'DocField',
 		'fieldtype': 'Button',
-		'idx': 20,
 		'label': 'Make Bank Voucher',
 		'trigger': 'Client'
 	},
@@ -273,15 +242,13 @@
 	# DocField
 	{
 		'doctype': 'DocField',
-		'fieldtype': 'Section Break',
-		'idx': 21
+		'fieldtype': 'Section Break'
 	},
 
 	# DocField
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'HTML',
-		'idx': 22,
 		'label': 'Activity Log'
 	}
 ]
\ No newline at end of file
diff --git a/erpnext/hr/search_criteria/employeewise_balance_leave_report/employeewise_balance_leave_report.js b/erpnext/hr/search_criteria/employeewise_balance_leave_report/employeewise_balance_leave_report.js
index 2439ffa..24d1774 100644
--- a/erpnext/hr/search_criteria/employeewise_balance_leave_report/employeewise_balance_leave_report.js
+++ b/erpnext/hr/search_criteria/employeewise_balance_leave_report/employeewise_balance_leave_report.js
@@ -1,3 +1,24 @@
 this.mytabs.items['Select Columns'].hide();
 
-this.mytabs.tabs['More Filters'].hide();
\ No newline at end of file
+this.mytabs.tabs['More Filters'].hide();
+
+report.customize_filters = function() {
+	this.add_filter({
+		fieldname:'fiscal_year',
+		label:'Fiscal Year', 
+		fieldtype:'Link',
+		ignore : 1,
+		options: 'Fiscal Year',
+		parent:'Leave Allocation',
+		in_first_page:1
+	});
+	this.add_filter({
+		fieldname:'employee_name',
+		label:'Employee Name', 
+		fieldtype:'Data',
+		ignore : 1,
+		options: '',
+		parent:'Leave Allocation',
+		in_first_page:1
+	});
+}
\ No newline at end of file
diff --git a/erpnext/hr/search_criteria/employeewise_balance_leave_report/employeewise_balance_leave_report.py b/erpnext/hr/search_criteria/employeewise_balance_leave_report/employeewise_balance_leave_report.py
index c258d15..8c0c747 100644
--- a/erpnext/hr/search_criteria/employeewise_balance_leave_report/employeewise_balance_leave_report.py
+++ b/erpnext/hr/search_criteria/employeewise_balance_leave_report/employeewise_balance_leave_report.py
@@ -1,20 +1,55 @@
-leave_types = sql("select name from `tabLeave Type` where docstatus != 2 and name not in ('Compensatory Off','Leave Without Pay')")
-msgprint(leave_types)
+leave_types = sql("""
+	SELECT name FROM `tabLeave Type`
+	WHERE
+		docstatus!=2 AND
+		name NOT IN ('Compensatory Off', 'Leave Without Pay')""")
 col=[]
+col.append(['Employee ID', 'Data', '150px', ''])
+col.append(['Employee Name', 'Data', '150px', ''])
+col.append(['Fiscal Year', 'Data', '150px', ''])
   
 for e in leave_types:
-  l = (len(e)*9) 
-  if l < 150 : col_width = '150px'
-  else:  col_width = '%spx'%(l)
-  
-  col.append([e,'Currency',col_width,''])
-
+	l = (len(e[0])*9) 
+	if l < 150 : col_width = '150px'
+	else:  col_width = '%spx'%(l)	
+	col.append([e[0],'Currency',col_width,''])
 
 col.append(['Total Balance','Currency','150px',''])
 
 for c in col:
-  colnames.append(c[0])
-  coltypes.append(c[1])
-  colwidths.append(c[2])
-  coloptions.append(c[3])
-  col_idx[c[0]] = len(colnames)
+	colnames.append(c[0])
+	coltypes.append(c[1])
+	colwidths.append(c[2])
+	coloptions.append(c[3])
+	col_idx[c[0]] = len(colnames)
+
+data = res
+res = []
+
+try:
+	for d in data:
+		exists = 0
+		ind = None
+		
+		# Check if the employee record exists in list 'res'
+		for r in res:
+			if r[0] == d[0] and r[1] == d[1]:
+				exists = 1
+				ind = res.index(r)
+				break
+		if d[3] in colnames:
+			# If exists, then append the leave type data
+			if exists:
+				res[ind][colnames.index(d[3])] = d[4] - d[5]
+				res[ind][len(colnames)-1] = sum(res[ind][3:-1])
+			# Else create a new row in res
+			else:
+				new_row = [0.0 for c in colnames]
+				new_row[0] = d[0]
+				new_row[1] = d[1]
+				new_row[2] = d[2]
+				new_row[colnames.index(d[3])] = d[4] - d[5]
+				new_row[len(colnames)-1] = sum(new_row[3:-1])
+				res.append(new_row)
+except Exception, e:
+	msgprint(e)
\ No newline at end of file
diff --git a/erpnext/hr/search_criteria/employeewise_balance_leave_report/employeewise_balance_leave_report.sql b/erpnext/hr/search_criteria/employeewise_balance_leave_report/employeewise_balance_leave_report.sql
new file mode 100644
index 0000000..50811c0
--- /dev/null
+++ b/erpnext/hr/search_criteria/employeewise_balance_leave_report/employeewise_balance_leave_report.sql
@@ -0,0 +1,26 @@
+SELECT
+	leave_alloc.employee AS 'employee',
+	leave_alloc.employee_name AS 'employee_name',
+	leave_alloc.fiscal_year AS 'fiscal_year',
+	leave_alloc.leave_type AS 'leave_type',
+	leave_alloc.total_leaves_allocated AS 'total_leaves_allocated',
+	SUM(leave_app.total_leave_days) AS 'total_leaves_applied'
+FROM
+	`tabLeave Allocation` AS leave_alloc,
+	`tabLeave Application` AS leave_app
+WHERE
+	leave_alloc.employee=leave_app.employee AND
+	leave_alloc.leave_type=leave_app.leave_type AND
+	leave_alloc.fiscal_year=leave_app.fiscal_year AND
+	leave_alloc.docstatus=1 AND
+	leave_app.docstatus=1 AND
+	leave_alloc.fiscal_year LIKE '%(fiscal_year)s%%' AND
+	leave_alloc.employee_name LIKE '%(employee_name)s%%'
+GROUP BY
+	employee,
+	fiscal_year,
+	leave_type
+ORDER BY
+	employee,
+	fiscal_year,
+	leave_type
\ No newline at end of file
diff --git a/erpnext/hr/search_criteria/employeewise_balance_leave_report/employeewise_balance_leave_report.txt b/erpnext/hr/search_criteria/employeewise_balance_leave_report/employeewise_balance_leave_report.txt
index 48ef3bf..7a7f049 100644
--- a/erpnext/hr/search_criteria/employeewise_balance_leave_report/employeewise_balance_leave_report.txt
+++ b/erpnext/hr/search_criteria/employeewise_balance_leave_report/employeewise_balance_leave_report.txt
@@ -3,9 +3,9 @@
 
 	# These values are common in all dictionaries
 	{
-		'creation': '2010-12-14 10:23:25',
+		'creation': '2010-12-14 10:33:09',
 		'docstatus': 0,
-		'modified': '2010-12-01 10:39:56',
+		'modified': '2011-10-31 15:42:36',
 		'modified_by': 'Administrator',
 		'owner': 'harshada@webnotestech.com'
 	},
@@ -13,7 +13,8 @@
 	# These values are common for all Search Criteria
 	{
 		'columns': 'Employee\x01ID',
-		'criteria_name': 'Employeewise Balance Leave Report',
+		'criteria_name': 'Employee Leave Balance Report',
+		'description': 'Employeewise Balance Leave Report',
 		'doc_type': 'Employee',
 		'doctype': 'Search Criteria',
 		'filters': "{'Employee\x01Saved':1,'Employee\x01Submitted':1,'Employee\x01Gender':'','Employee\x01Month of Birth':'','Employee\x01Status':'Active'}",
diff --git a/erpnext/knowledge_base/page/kb_common/kb_common.js b/erpnext/knowledge_base/page/kb_common/kb_common.js
index 3e17b6f..433ea2e 100644
--- a/erpnext/knowledge_base/page/kb_common/kb_common.js
+++ b/erpnext/knowledge_base/page/kb_common/kb_common.js
@@ -71,8 +71,8 @@
 	// if user has not already voted
 	
 	if(user!='Guest' && !in_list(voted, user) && user!=owner) {
-		this.vote_up = $a(this.wrapper, 'img', 'images/ui/vote_up.gif', {margin:'0px 0px -2px 7px', cursor: 'pointer'});
-		this.vote_down = $a(this.wrapper, 'img', 'images/ui/vote_down.gif', {margin:'0px 0px -3px 0px', cursor: 'pointer'});
+		this.vote_up = $a(this.wrapper, 'img', 'lib/images/ui/vote_up.gif', {margin:'0px 0px -2px 7px', cursor: 'pointer'});
+		this.vote_down = $a(this.wrapper, 'img', 'lib/images/ui/vote_down.gif', {margin:'0px 0px -3px 0px', cursor: 'pointer'});
 		
 		this.vote_up.title = 'Vote Up'; this.vote_down.title = 'Vote Down';
 		
diff --git a/erpnext/knowledge_base/page/questions/questions.js b/erpnext/knowledge_base/page/questions/questions.js
index f268d0b..a3dff13 100644
--- a/erpnext/knowledge_base/page/questions/questions.js
+++ b/erpnext/knowledge_base/page/questions/questions.js
@@ -35,8 +35,6 @@
 	
 	this.make_search_bar = function() {
 		this.search = $a($a(w,'div','kb-search-wrapper'), 'textarea');
-
-		$(this.search).add_default_text('Enter keywords or a new Question');
 		
 		var div = $a(w,'div','kb-btn-wrapper');
 		$btn(div, 'Search', function() { me.run() }, {fontSize:'14px'});
diff --git a/erpnext/patches/employeewise_balance_leave_report.py b/erpnext/patches/employeewise_balance_leave_report.py
new file mode 100644
index 0000000..6af2364
--- /dev/null
+++ b/erpnext/patches/employeewise_balance_leave_report.py
@@ -0,0 +1,12 @@
+"""
+	This patch changes criteria name
+	of search criteria "employeewise_balance_leave_report"
+	from "Employeewise Balance Leave Report"
+	to "Employee Leave Balance Report"
+"""
+def execute():
+	from webnotes.model.doc import Document
+	d = Document('Search Criteria', 'employeewise_balance_leave_report')
+	d.criteria_name = 'Employee Leave Balance Report'
+	d.description = 'Employeewise Balance Leave Report'
+	d.save()
\ No newline at end of file
diff --git a/erpnext/patches/install_print_formats.py b/erpnext/patches/install_print_formats.py
new file mode 100644
index 0000000..3b5627b
--- /dev/null
+++ b/erpnext/patches/install_print_formats.py
@@ -0,0 +1,108 @@
+import os, sys
+import webnotes
+
+path_to_file = os.sep.join(os.path.abspath(__file__).split(os.sep)[:-1] + ['print_formats'])
+
+def prepare_pf_dict(args_list):
+	"""
+
+	"""
+	pf_list = []
+	for a in args_list:
+		for pf_type in ['Classic', 'Modern', 'Spartan']:
+			pf = {}
+			pf['name'] = " ".join([a['name'], pf_type])
+			pf['file'] = os.sep.join([path_to_file, "".join(pf['name'].split(" ")) + ".html"])
+			pf['module'] = a['module']
+			pf['doc_type'] = a['doc_type']
+			pf['standard'] = 'Yes'
+			pf_list += [pf]
+	return pf_list
+
+
+pf_to_install = prepare_pf_dict([
+	{
+		'name' : 'Sales Invoice',
+		'doc_type' : 'Receivable Voucher',
+		'module' : 'Accounts'
+	},
+	{
+		'name' : 'Sales Order',
+		'doc_type' : 'Sales Order',
+		'module' : 'Selling'
+	},
+	{
+		'name' : 'Quotation',
+		'doc_type' : 'Quotation',
+		'module' : 'Selling'
+	},
+	{
+		'name' : 'Delivery Note',
+		'doc_type' : 'Delivery Note',
+		'module' : 'Stock'
+	},
+	{
+		'name' : 'Purchase Order',
+		'doc_type' : 'Purchase Order',
+		'module' : 'Buying'
+	}
+])
+
+def execute():
+	"""
+		Install print formats
+	"""
+	from webnotes.modules.module_manager import reload_doc
+	#reload_doc('core', 'doctype', 'print_format')
+	
+	#copy_doctype_to_pfs()
+	global pf_to_install
+	for pf in pf_to_install:
+	#	install_print_format(pf)
+	#	print "Installed PF: " + pf['name']
+		reload_doc(pf['module'], 'Print Format', pf['name'])
+
+
+def copy_doctype_to_pfs():
+	"""
+		Copy doctype to existing print formats
+	"""
+	pf_dt_list = webnotes.conn.sql("""
+		SELECT format, parent
+		FROM `tabDocFormat`""", as_list=1)
+	
+	from webnotes.model.doc import Document
+
+	for pf, dt in pf_dt_list:
+		try:
+			d = Document('Print Format', pf)
+			d.doc_type = dt
+			d.save()
+		except Exception, e:
+			print e.args
+			pass
+
+
+def install_print_format(args):
+	"""
+		Installs print format
+		args is a dict consisting of following keys:
+			* name
+			* module
+			* doctype
+			* standard = "Yes"/"No"
+			* file
+	"""
+	from webnotes.model.doc import Document
+	d = Document('Print Format')
+	d.name = args['name']
+	f = open(args['file'])
+	d.html = f.read()
+	f.close()
+	d.module = args['module']
+	d.doc_type = args['doc_type']
+	d.standard = args['standard']
+	d.save(1)
+	from webnotes.model.code import get_obj
+	obj = get_obj('Print Format', args['name'])
+	obj.on_update()
diff --git a/erpnext/patches/lcw_patch.py b/erpnext/patches/lcw_patch.py
new file mode 100644
index 0000000..66afafc
--- /dev/null
+++ b/erpnext/patches/lcw_patch.py
@@ -0,0 +1,9 @@
+def execute():
+	import webnotes
+	from webnotes.modules.module_manager import reload_doc
+	
+	
+	reload_doc('stock', 'doctype', 'landed_cost_wizard')
+	reload_doc('stock', 'doctype', 'lc_pr_detail')
+	
+	webnotes.conn.sql("delete from `tabDocField` where parent ='LC PR Detail' and fieldname in ('purchase_receipt_no', 'include_in_landed_cost')")
diff --git a/erpnext/patches/p1.py b/erpnext/patches/p1.py
new file mode 100644
index 0000000..e2304c7
--- /dev/null
+++ b/erpnext/patches/p1.py
@@ -0,0 +1,4 @@
+def execute():
+	import webnotes
+	if not webnotes.conn.sql("select name from tabDocFormat where parent = 'Receivable Voucher' and format != 'POS Invoice'"):
+		webnotes.conn.sql("update tabDocType set default_print_format = 'Standard' where name =  'Receivable Voucher'")
diff --git a/erpnext/patches/packing_slip.py b/erpnext/patches/packing_slip.py
new file mode 100644
index 0000000..9285e8a
--- /dev/null
+++ b/erpnext/patches/packing_slip.py
@@ -0,0 +1,8 @@
+def execute():
+	import webnotes
+	from webnotes.modules.module_manager import reload_doc
+	reload_doc('stock', 'doctype', 'delivery_note_detail')
+	reload_doc('stock', 'Print Format', 'Delivery Note Packing List Wise')
+	
+	webnotes.conn.sql("delete from `tabDocField` where fieldname in ('packed_by', 'packing_checked_by', 'pack_size') and parent = 'Delivery Note'")
+	
diff --git a/erpnext/patches/patch.py b/erpnext/patches/patch.py
index a3093c1..7e8a083 100644
--- a/erpnext/patches/patch.py
+++ b/erpnext/patches/patch.py
@@ -1,7 +1,7 @@
 # REMEMBER to update this
 # ========================
 
-last_patch = 384
+last_patch = 388
 
 #-------------------------------------------
 
@@ -344,8 +344,7 @@
 		bin = sql("select name from tabBin")
 		for b in bin:
 			bobj = get_obj('Bin',b[0])
-			prev_sle = bobj.get_prev_sle(posting_date = '2011-09-01', posting_time = '01:00')
-			bobj.update_item_valuation(posting_date = '2011-09-01', posting_time = '01:00', prev_sle = prev_sle)
+			bobj.update_entries_after(posting_date = '2011-09-01', posting_time = '01:00')
 	elif patch_no == 368:
 		from webnotes.utils import nestedset
 		t = [
@@ -454,3 +453,12 @@
 		reload_doc('stock', 'Module Def', 'Stock')
 		sql("delete from `tabModule Def Item` where display_name = 'Serial No' and parent = 'Support'")
 		sql("update `tabDocType` set subject = 'Item Code: %(item_code)s, Warehouse: %(warehouse)s' where name = 'Serial No'")
+	elif patch_no == 385:
+		# Patch for adding packing related columns (packed by, checked by, shipping mark etc)
+		reload_doc('stock','doctype','delivery_note')
+	elif patch_no == 386:
+		sql("update `tabDocField` set allow_on_submit = 1 where fieldname = 'page_break'")
+	elif patch_no == 387:
+		sql("update `tabDocField` set allow_on_submit = 1 where fieldname in ('indent_details', 'po_details', 'purchase_receipt_details', 'entries', 'sales_order_details', 'delivery_note_details', 'quotation_details') and fieldtype = 'Table'")
+	elif patch_no == 388:
+		pass
diff --git a/erpnext/patches/print_formats/DeliveryNoteClassic.html b/erpnext/patches/print_formats/DeliveryNoteClassic.html
new file mode 100644
index 0000000..0db80b9
--- /dev/null
+++ b/erpnext/patches/print_formats/DeliveryNoteClassic.html
@@ -0,0 +1,279 @@
+<!--
+	Sample Print Format for ERPNext
+	Please use at your own discretion
+	For suggestions and contributions:
+		https://github.com/webnotes/erpnext-print-templates
+
+	Freely usable under MIT license
+-->
+
+<!-- Style Settings -->
+<style>
+	/*
+		common style for whole page
+		This should include:
+		+ page size related settings
+		+ font family settings
+		+ line spacing settings
+	*/
+	@media screen {
+		body {
+			width: 8.3in;
+		}
+	}
+
+	html, body, div, span, td {
+		font-family: "Georgia", serif;
+		font-size: 12px;
+	}
+
+	body {
+		padding: 10px;
+		margin: auto;
+		font-size: 12px;
+		line-height: 150%;
+	}
+
+	.common {
+		font-family: "Georgia", serif !important;
+		font-size: 12px;
+		padding: 10px 0px;
+	}
+
+	table {
+		border-collapse: collapse;
+		width: 100%;
+		vertical-align: top;
+	}
+
+	table td {
+		padding: 2px 0px;
+	}
+	
+	table h1, h2, h3, h4, h5, h6 {
+		padding: 0px;
+		margin: 0px;
+	}
+
+	table.header-table td {
+		vertical-align: top;
+	}
+
+	table.header-table thead {
+		border-bottom: 1px solid black;
+	}
+
+	table.header-table h3 {
+		color: gray;
+	}
+
+	table.header-table thead td {
+		padding: 5px 0px;
+	}
+
+	div.page-body table td:nth-child(6),
+	div.page-body table td:nth-child(7) {
+		text-align: right;
+	}
+
+	table.footer-table td {
+		vertical-align: top;
+	}
+
+	table.footer-table td table td:nth-child(2),
+	table.footer-table td table td:nth-child(3) {
+		text-align: right;
+	}
+</style>
+
+
+<!-- Javascript -->
+<script>
+	si_std = {
+		print_item_table: function() {
+			var table = print_table(
+				'Delivery Note',
+				doc.name,
+				'delivery_note_details',
+				'Delivery Note Detail',
+				[// Here specify the table columns to be displayed
+					'SR', 'item_code', 'item_name', 'description', 'qty', 'stock_uom',
+					'basic_rate', 'amount'
+				],
+				[// Here specify the labels of column headings
+					'Sr', 'Item Code', 'Item Name', 'Description', 'Qty',
+					'UoM', 'Basic Rate', 'Amount'
+				],
+				[// Here specify the column widths
+					'3%', '10%', '15%', '32%', '5%',
+					'5%', '15%', '15%'
+				],
+				null,
+				null,
+				{
+					'description' : function(data_row) {
+						if(data_row.serial_no) {
+							return (
+								data_row.description + 
+								'<div style="padding-left: 15px;"><i>Serial No.:' + 
+								((data_row.serial_no.indexOf('\n')>-1)?'<br />':'&nbsp;') + 
+								data_row.serial_no + '</i></div>'
+							);
+						} else {
+							return data_row.description;
+						}
+					}
+				}
+			);
+
+			// This code takes care of page breaks
+			if(table.appendChild) {
+				out = table.innerHTML;
+			} else {
+				out = '';
+				for(var i=0; i < (table.length-1); i++) {
+					out += table[i].innerHTML + 
+						'<div style = "page-break-after: always;" \
+						class = "page_break"></div>\
+						<div class="page-settings"></div>';
+				}
+				out += table[table.length-1].innerHTML;
+			}
+			return out;
+		},
+
+
+		print_other_charges: function(parent) {
+			var oc = getchildren('RV Tax Detail', doc.name, 'other_charges');
+			var rows = '<table width=100%>\n';
+			for(var i=0; i<oc.length; i++) {
+				rows +=
+					'<tr>\n' +
+						'\t<td>' + oc[i].description + '</td>\n' +
+						'\t<td></td>\n' +
+						'\t<td width=38%>' + fmt_money(oc[i].tax_amount) + '</td>\n' +
+					'</tr>\n';
+			}
+			return rows + '</table>\n';
+		}
+	};
+</script>
+
+
+<!-- Page Layout Settings -->
+<div class='common page-header'>
+	<!-- 
+		Page Header will contain
+			+ table 1
+				+ table 1a
+					- Name
+					- Address
+					- Contact
+					- Mobile No
+				+ table 1b
+					- Voucher Date
+					- Due Date
+	-->
+	<table class='header-table' cellspacing=0>
+		<thead>
+			<tr><td><h1>Delivery Note</h1></td></tr>
+			<tr><td><h3><script>cur_frm.docname</script></h3></td></tr>
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60%><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=22%><b>Name</b></td>
+						<td><script>doc.customer_name</script></td>
+					</tr>
+					<tr>
+						<td><b>Address</b></td>
+						<td><script>replace_newlines(doc.address_display)</script></td>
+					</tr>
+					<tr>
+						<td><b>Contact</b></td>
+						<td><script>doc.contact_display</script></td>
+					</tr>
+				</tbody></table></td>
+				<td><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=63%><b>Delivery Note Date</b></td>
+						<td><script>date.str_to_user(doc.transaction_date)</script></td>
+					<tr>					
+					<tr>
+						<td><b>Sales Order No.</b></td>
+						<td>
+							<script>doc.sales_order_no</script><br />
+							<i>(<script>date.str_to_user(doc.posting_date)</script>)</i>
+						</td>
+					<tr>					
+				</tbody></table></td>
+			</tr>
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+<div class='common page-body'>
+	<!-- 
+		Page Body will contain
+			+ table 2
+				- Sales Invoice Data
+	-->
+	<script>si_std.print_item_table()</script>
+</div>
+<div class='common page-footer'>
+	<!-- 
+		Page Footer will contain
+			+ table 3
+				- Terms and Conditions
+				- Total Rounded Amount Calculation
+				- Total Rounded Amount in Words
+	-->
+	<table class='footer-table' width=100% cellspacing=0>
+		<thead>
+			
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60% style='padding-right: 10px;'>
+					<b>Terms, Conditions &amp; Other Information:</b><br />
+					<script>doc.terms</script>
+				</td>
+				<td>
+					<table cellspacing=0 width=100%><tbody>
+						<tr>
+							<td>Net Total</td>
+							<td></td>
+							<td width=38%><script>
+								fmt_money(doc.net_total)
+							</script></td>
+						</tr>
+						<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>
+						<tr>
+							<td>Grand Total</td>
+							<td></td>
+							<td><script>
+								fmt_money(doc.grand_total_export)
+							</script></td>
+						</tr>
+						<tr style='font-weight: bold'>
+							<td>Rounded Total</td>
+							<td><script>doc.currency</script></td>
+							<td><script>
+								fmt_money(doc.rounded_total_export)
+							</script></td>
+						</tr>
+					</tbody></table>
+					<br /><b>In Words</b><br />
+					<i><script>doc.in_words_export</script></i>
+				</td>
+			</tr>		
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+
diff --git a/erpnext/patches/print_formats/DeliveryNoteModern.html b/erpnext/patches/print_formats/DeliveryNoteModern.html
new file mode 100644
index 0000000..634bea0
--- /dev/null
+++ b/erpnext/patches/print_formats/DeliveryNoteModern.html
@@ -0,0 +1,306 @@
+<!--
+	Sample Print Format for ERPNext
+	Please use at your own discretion
+	For suggestions and contributions:
+		https://github.com/webnotes/erpnext-print-templates
+
+	Freely usable under MIT license
+-->
+
+<!-- Style Settings -->
+<style>
+	/*
+		common style for whole page
+		This should include:
+		+ page size related settings
+		+ font family settings
+		+ line spacing settings
+	*/
+	@media screen {
+		body {
+			width: 8.3in;
+		}
+	}
+
+	html, body, div, span, td {
+		font-family: "Helvetica", "Arial", sans-serif;
+		font-size: 12px;
+	}
+
+	body {
+		padding: 10px;
+		margin: auto;
+		font-size: 12px;
+		line-height: 150%;
+	}
+
+	.common {
+		font-family: "Helvetica", "Arial", sans-serif !important;
+		font-size: 12px;
+		padding: 10px 0px;
+	}
+
+	table {
+		border-collapse: collapse;
+		width: 100%;
+		vertical-align: top;
+		border-style: none !important;
+	}
+
+	table td {
+		padding: 2px 0px;
+		border-style: none !important;
+	}
+	
+	table h1, h2, h3, h4, h5, h6 {
+		padding: 0px;
+		margin: 0px;
+	}
+
+	table.header-table td {
+		vertical-align: top;
+	}
+
+	table.header-table h1 {
+		text-transform: uppercase;
+		color: white;
+		font-size: 55px;
+		font-style: italic;
+	}
+
+	table.header-table thead tr:nth-child(1) div {
+		height: 24px;
+		background-color: #696969;
+		vertical-align: middle;
+		padding: 12px 0px 0px 0px;
+		width: 100%;
+	}
+
+	div.page-body table td:nth-child(6),
+	div.page-body table td:nth-child(7) {
+		text-align: right;
+	}
+
+	div.page-body table tr td {
+		background-color: #DCDCDC !important;
+	}
+
+	div.page-body table tr:nth-child(1) td {
+		background-color: #696969 !important;
+		color: white !important;
+	}
+
+	table.footer-table td {
+		vertical-align: top;
+	}
+
+	table.footer-table td table td:nth-child(2),
+	table.footer-table td table td:nth-child(3) {
+		text-align: right;
+	}
+
+	table.footer-table tfoot td {
+		background-color: #696969;
+		height: 10px;
+	}
+
+	.imp-details {
+		background-color: #DCDCDC;
+	}
+</style>
+
+
+<!-- Javascript -->
+<script>
+	si_std = {
+		print_item_table: function() {
+			var table = print_table(
+				'Delivery Note',
+				doc.name,
+				'delivery_note_details',
+				'Delivery Note Detail',
+				[// Here specify the table columns to be displayed
+					'SR', 'item_code', 'item_name', 'description', 'qty', 'stock_uom',
+					'basic_rate', 'amount'
+				],
+				[// Here specify the labels of column headings
+					'Sr', 'Item Code', 'Item Name', 'Description', 'Qty',
+					'UoM', 'Basic Rate', 'Amount'
+				],
+				[// Here specify the column widths
+					'3%', '10%', '15%', '32%', '5%',
+					'5%', '15%', '15%'
+				],
+				null,
+				null,
+				{
+					'description' : function(data_row) {
+						if(data_row.serial_no) {
+							return (
+								data_row.description + 
+								'<div style="padding-left: 15px;"><i>Serial No.:' + 
+								((data_row.serial_no.indexOf('\n')>-1)?'<br />':'&nbsp;') + 
+								data_row.serial_no + '</i></div>'
+							);
+						} else {
+							return data_row.description;
+						}
+					}
+				}
+			);
+
+			// This code takes care of page breaks
+			if(table.appendChild) {
+				out = table.innerHTML;
+			} else {
+				out = '';
+				for(var i=0; i < (table.length-1); i++) {
+					out += table[i].innerHTML + 
+						'<div style = "page-break-after: always;" \
+						class = "page_break"></div>\
+						<div class="page-settings"></div>';
+				}
+				out += table[table.length-1].innerHTML;
+			}
+			return out;
+		},
+
+
+		print_other_charges: function(parent) {
+			var oc = getchildren('RV Tax Detail', doc.name, 'other_charges');
+			var rows = '<table width=100%>\n';
+			for(var i=0; i<oc.length; i++) {
+				rows +=
+					'<tr>\n' +
+						'\t<td>' + oc[i].description + '</td>\n' +
+						'\t<td></td>\n' +
+						'\t<td width=38%>' + fmt_money(oc[i].tax_amount) + '</td>\n' +
+					'</tr>\n';
+			}
+			return rows + '</table>\n';
+		}
+	};
+</script>
+
+
+<!-- Page Layout Settings -->
+<div class='common page-header'>
+	<!-- 
+		Page Header will contain
+			+ table 1
+				+ table 1a
+					- Name
+					- Address
+					- Contact
+					- Mobile No
+				+ table 1b
+					- Voucher Date
+					- Due Date
+	-->
+	<table class='header-table' cellspacing=0>
+		<thead>
+			<tr><td colspan=2><div><h1>Delivery Note</h1></div></td></tr>
+			<tr><td colspan=2><div style="height:15px"></div></td></tr>
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60%><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=22%><b>Name</b></td>
+						<td><script>doc.customer_name</script></td>
+					</tr>
+					<tr>
+						<td><b>Address</b></td>
+						<td><script>replace_newlines(doc.address_display)</script></td>
+					</tr>
+					<tr>
+						<td><b>Contact</b></td>
+						<td><script>doc.contact_display</script></td>
+					</tr>
+				</tbody></table></td>
+				<td><table width=100% cellspacing=0><tbody>
+					<tr class='imp-details'>
+						<td><b>Delivery Note No.</b></td>
+						<td><script>cur_frm.docname</script></td>
+					</tr>
+					<tr>
+						<td width=63%><b>Delivery Note Date</b></td>
+						<td><script>date.str_to_user(doc.transaction_date)</script></td>
+					<tr>					
+					<tr>
+						<td><b>Sales Order No.</b></td>
+						<td>
+							<script>doc.sales_order_no</script><br />
+							<i>(<script>date.str_to_user(doc.posting_date)</script>)</i>
+						</td>
+					<tr>					
+				</tbody></table></td>
+			</tr>
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+<div class='common page-body'>
+	<!-- 
+		Page Body will contain
+			+ table 2
+				- Sales Invoice Data
+	-->
+	<script>si_std.print_item_table()</script>
+</div>
+<div class='common page-footer'>
+	<!-- 
+		Page Footer will contain
+			+ table 3
+				- Terms and Conditions
+				- Total Rounded Amount Calculation
+				- Total Rounded Amount in Words
+	-->
+	<table class='footer-table' width=100% cellspacing=0>
+		<thead>
+			
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60% style='padding-right: 10px;'>
+					<b>Terms, Conditions &amp; Other Information:</b><br />
+					<script>doc.terms</script>
+				</td>
+				<td>
+					<table cellspacing=0 width=100%><tbody>
+						<tr>
+							<td>Net Total</td>
+							<td></td>
+							<td width=38%><script>
+								fmt_money(doc.net_total)
+							</script></td>
+						</tr>
+						<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>
+						<tr>
+							<td>Grand Total</td>
+							<td></td>
+							<td><script>
+								fmt_money(doc.grand_total_export)
+							</script></td>
+						</tr>
+						<tr style='font-weight: bold' class='imp-details'>
+							<td>Rounded Total</td>
+							<td><script>doc.currency</script></td>
+							<td><script>
+								fmt_money(doc.rounded_total_export)
+							</script></td>
+						</tr>
+					</tbody></table>
+					<br /><b>In Words</b><br />
+					<i><script>doc.in_words_export</script></i>
+				</td>
+			</tr>		
+		</tbody>
+		<tfoot>
+			<tr><td colspan=2><div></div></td><tr>
+		</tfoot>
+	</table>
+</div>
+
diff --git a/erpnext/patches/print_formats/DeliveryNoteSpartan.html b/erpnext/patches/print_formats/DeliveryNoteSpartan.html
new file mode 100644
index 0000000..4be12c4
--- /dev/null
+++ b/erpnext/patches/print_formats/DeliveryNoteSpartan.html
@@ -0,0 +1,302 @@
+<!--
+	Sample Print Format for ERPNext
+	Please use at your own discretion
+	For suggestions and contributions:
+		https://github.com/webnotes/erpnext-print-templates
+
+	Freely usable under MIT license
+-->
+
+<!-- Style Settings -->
+<style>
+	/*
+		common style for whole page
+		This should include:
+		+ page size related settings
+		+ font family settings
+		+ line spacing settings
+	*/
+	@media screen {
+		body {
+			width: 8.3in;
+		}
+	}
+
+	html, body, div, span, td {
+		font-family: "Arial", sans-serif;
+		font-size: 12px;
+	}
+
+	body {
+		padding: 10px;
+		margin: auto;
+		font-size: 12px;
+		line-height: 150%;
+	}
+
+	.common {
+		font-family: "Arial", sans-serif !important;
+		font-size: 12px;
+		padding: 0px;
+	}
+
+	table {
+		width: 100% !important;
+		vertical-align: top;
+	}
+
+	table td {
+		padding: 2px 0px;
+	}
+
+	table, td {
+		border-collapse: collapse !important;
+		padding: 0px;
+		margin: 0px !important;
+	}
+	
+	table h1, h2, h3, h4, h5, h6 {
+		padding: 0px;
+		margin: 0px;
+	}
+
+	table.header-table td {
+		vertical-align: top;
+	}
+
+	table.header-table h3 {
+		color: gray;
+	}
+
+	table.header-table thead td {
+		padding: 5px;
+	}
+
+	table.header-table > thead,
+	table.header-table > tbody > tr > td,
+	table.footer-table > tbody > tr > td {
+		border: 1px solid black;
+		padding: 5px;
+	}
+
+	table.footer-table > tbody,
+	table.header-table > thead {
+		border-bottom: 3px solid black;
+	}
+
+	table.header-table > thead {
+		border-top: 3px solid black;
+	}
+
+	div.page-body table td:nth-child(6),
+	div.page-body table td:nth-child(7) {
+		text-align: right;
+	}
+
+	div.page-body td {
+		background-color: white !important;
+		border: 1px solid black !important;
+	}
+
+	table.footer-table td {
+		vertical-align: top;
+	}
+
+	table.footer-table td table td:nth-child(2),
+	table.footer-table td table td:nth-child(3) {
+		text-align: right;
+	}
+</style>
+
+
+<!-- Javascript -->
+<script>
+	si_std = {
+		print_item_table: function() {
+			var table = print_table(
+				'Delivery Note',
+				doc.name,
+				'delivery_note_details',
+				'Delivery Note Detail',
+				[// Here specify the table columns to be displayed
+					'SR', 'item_code', 'item_name', 'description', 'qty', 'stock_uom',
+					'basic_rate', 'amount'
+				],
+				[// Here specify the labels of column headings
+					'Sr', 'Item Code', 'Item Name', 'Description', 'Qty',
+					'UoM', 'Basic Rate', 'Amount'
+				],
+				[// Here specify the column widths
+					'3%', '10%', '15%', '32%', '5%',
+					'5%', '15%', '15%'
+				],
+				null,
+				null,
+				{
+					'description' : function(data_row) {
+						if(data_row.serial_no) {
+							return (
+								data_row.description + 
+								'<div style="padding-left: 15px;"><i>Serial No.:' + 
+								((data_row.serial_no.indexOf('\n')>-1)?'<br />':'&nbsp;') + 
+								data_row.serial_no + '</i></div>'
+							);
+						} else {
+							return data_row.description;
+						}
+					}
+				}
+			);
+
+			// This code takes care of page breaks
+			if(table.appendChild) {
+				out = table.innerHTML;
+			} else {
+				out = '';
+				for(var i=0; i < (table.length-1); i++) {
+					out += table[i].innerHTML + 
+						'<div style = "page-break-after: always;" \
+						class = "page_break"></div>\
+						<div class="page-settings"></div>';
+				}
+				out += table[table.length-1].innerHTML;
+			}
+			return out;
+		},
+
+
+		print_other_charges: function(parent) {
+			var oc = getchildren('RV Tax Detail', doc.name, 'other_charges');
+			var rows = '<table width=100%>\n';
+			for(var i=0; i<oc.length; i++) {
+				rows +=
+					'<tr>\n' +
+						'\t<td>' + oc[i].description + '</td>\n' +
+						'\t<td></td>\n' +
+						'\t<td width=38%>' + fmt_money(oc[i].tax_amount) + '</td>\n' +
+					'</tr>\n';
+			}
+			return rows + '</table>\n';
+		}
+	};
+</script>
+
+
+<!-- Page Layout Settings -->
+<div class='common page-header'>
+	<!-- 
+		Page Header will contain
+			+ table 1
+				+ table 1a
+					- Name
+					- Address
+					- Contact
+					- Mobile No
+				+ table 1b
+					- Voucher Date
+					- Due Date
+	-->
+	<table class='header-table' cellspacing=0>
+		<thead>
+			<tr><td colspan=2><h1>Delivery Note</h1></td></tr>
+			<tr><td colspan=2><h3><script>cur_frm.docname</script></h3></td></tr>
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60%><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=22%><b>Name</b></td>
+						<td><script>doc.customer_name</script></td>
+					</tr>
+					<tr>
+						<td><b>Address</b></td>
+						<td><script>replace_newlines(doc.address_display)</script></td>
+					</tr>
+					<tr>
+						<td><b>Contact</b></td>
+						<td><script>doc.contact_display</script></td>
+					</tr>
+				</tbody></table></td>
+				<td><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=63%><b>Delivery Note Date</b></td>
+						<td><script>date.str_to_user(doc.transaction_date)</script></td>
+					<tr>					
+					<tr>
+						<td><b>Sales Order No.</b></td>
+						<td>
+							<script>doc.sales_order_no</script><br />
+							<i>(<script>date.str_to_user(doc.posting_date)</script>)</i>
+						</td>
+					<tr>					
+				</tbody></table></td>
+			</tr>
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+<div class='common page-body'>
+	<!-- 
+		Page Body will contain
+			+ table 2
+				- Sales Invoice Data
+	-->
+	<script>si_std.print_item_table()</script>
+</div>
+<div class='common page-footer'>
+	<!-- 
+		Page Footer will contain
+			+ table 3
+				- Terms and Conditions
+				- Total Rounded Amount Calculation
+				- Total Rounded Amount in Words
+	-->
+	<table class='footer-table' width=100% cellspacing=0>
+		<thead>
+			
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60% style='padding-right: 10px;'>
+					<b>Terms, Conditions &amp; Other Information:</b><br />
+					<script>doc.terms</script>
+				</td>
+				<td>
+					<table cellspacing=0 width=100%><tbody>
+						<tr>
+							<td>Net Total</td>
+							<td></td>
+							<td width=38%><script>
+								fmt_money(doc.net_total)
+							</script></td>
+						</tr>
+						<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>
+						<tr>
+							<td>Grand Total</td>
+							<td></td>
+							<td><script>
+								fmt_money(doc.grand_total_export)
+							</script></td>
+						</tr>
+						<tr style='font-weight: bold'>
+							<td>Rounded Total</td>
+							<td><script>doc.currency</script></td>
+							<td><script>
+								fmt_money(doc.rounded_total_export)
+							</script></td>
+						</tr>
+					</tbody></table>
+					<br /><b>In Words</b><br />
+					<i><script>doc.in_words_export</script></i>
+				</td>
+			</tr>		
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+
+
diff --git a/erpnext/patches/print_formats/PurchaseOrderClassic.html b/erpnext/patches/print_formats/PurchaseOrderClassic.html
new file mode 100644
index 0000000..0e51c61
--- /dev/null
+++ b/erpnext/patches/print_formats/PurchaseOrderClassic.html
@@ -0,0 +1,249 @@
+<!--
+	Sample Print Format for ERPNext
+	Please use at your own discretion
+	For suggestions and contributions:
+		https://github.com/webnotes/erpnext-print-templates
+
+	Freely usable under MIT license
+-->
+
+<!-- Style Settings -->
+<style>
+	/*
+		common style for whole page
+		This should include:
+		+ page size related settings
+		+ font family settings
+		+ line spacing settings
+	*/
+	@media screen {
+		body {
+			width: 8.3in;
+		}
+	}
+
+	html, body, div, span, td {
+		font-family: "Georgia", serif;
+		font-size: 12px;
+	}
+
+	body {
+		padding: 10px;
+		margin: auto;
+		font-size: 12px;
+		line-height: 150%;
+	}
+
+	.common {
+		font-family: "Georgia", serif !important;
+		font-size: 12px;
+		padding: 10px 0px;
+	}
+
+	table {
+		border-collapse: collapse;
+		width: 100%;
+		vertical-align: top;
+	}
+
+	table td {
+		padding: 2px 0px;
+	}
+	
+	table h1, h2, h3, h4, h5, h6 {
+		padding: 0px;
+		margin: 0px;
+	}
+
+	table.header-table td {
+		vertical-align: top;
+	}
+
+	table.header-table thead {
+		border-bottom: 1px solid black;
+	}
+
+	table.header-table h3 {
+		color: gray;
+	}
+
+	table.header-table thead td {
+		padding: 5px 0px;
+	}
+
+	div.page-body table td:nth-child(6),
+	div.page-body table td:nth-child(7) {
+		text-align: right;
+	}
+
+	table.footer-table td {
+		vertical-align: top;
+	}
+
+	table.footer-table td table td:nth-child(2),
+	table.footer-table td table td:nth-child(3) {
+		text-align: right;
+	}
+</style>
+
+
+<!-- Javascript -->
+<script>
+	si_std = {
+		print_item_table: function() {
+			var table = print_table(
+				'Purchase Order',
+				doc.name,
+				'po_details',
+				'PO Detail',
+				[// Here specify the table columns to be displayed
+					'SR', 'item_code', 'item_name', 'description', 'qty', 'stock_uom',
+					'import_rate', 'import_amount'
+				],
+				[// Here specify the labels of column headings
+					'Sr', 'Item Code', 'Item Name', 'Description', 'Qty',
+					'UoM', 'Basic Rate', 'Amount'
+				],
+				[// Here specify the column widths
+					'3%', '10%', '15%', '32%', '5%',
+					'5%', '15%', '15%'
+				]
+			);
+
+			// This code takes care of page breaks
+			if(table.appendChild) {
+				out = table.innerHTML;
+			} else {
+				out = '';
+				for(var i=0; i < (table.length-1); i++) {
+					out += table[i].innerHTML + 
+						'<div style = "page-break-after: always;" \
+						class = "page_break"></div>\
+						<div class="page-settings"></div>';
+				}
+				out += table[table.length-1].innerHTML;
+			}
+			return out;
+		},
+
+
+		print_other_charges: function(parent) {
+			var oc = getchildren('Purchase Tax Detail', doc.name, 'purchase_tax_details');
+			var rows = '<table width=100%>\n';
+			for(var i=0; i<oc.length; i++) {
+				rows +=
+					'<tr>\n' +
+						'\t<td>' + oc[i].description + '</td>\n' +
+						'\t<td></td>\n' +
+						'\t<td width=38%>' + fmt_money(oc[i].tax_amount / (doc.conversion_rate || 1)) + '</td>\n' +
+					'</tr>\n';
+			}
+			return rows + '</table>\n';
+		}
+	};
+</script>
+
+
+<!-- Page Layout Settings -->
+<div class='common page-header'>
+	<!-- 
+		Page Header will contain
+			+ table 1
+				+ table 1a
+					- Name
+					- Address
+					- Contact
+					- Mobile No
+				+ table 1b
+					- Voucher Date
+					- Due Date
+	-->
+	<table class='header-table' cellspacing=0>
+		<thead>
+			<tr><td><h1>Purchase Order</h1></td></tr>
+			<tr><td><h3><script>cur_frm.docname</script></h3></td></tr>
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60%><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=22%><b>Name</b></td>
+						<td><script>doc.supplier_name</script></td>
+					</tr>
+					<tr>
+						<td><b>Address</b></td>
+						<td><script>replace_newlines(doc.address_display)</script></td>
+					</tr>
+					<tr>
+						<td><b>Contact</b></td>
+						<td><script>doc.contact_display</script></td>
+					</tr>
+				</tbody></table></td>
+				<td><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=63%><b>Purchase Order Date</b></td>
+						<td><script>date.str_to_user(doc.transaction_date)</script></td>
+					<tr>					
+				</tbody></table></td>
+			</tr>
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+<div class='common page-body'>
+	<!-- 
+		Page Body will contain
+			+ table 2
+				- Sales Invoice Data
+	-->
+	<script>si_std.print_item_table()</script>
+</div>
+<div class='common page-footer'>
+	<!-- 
+		Page Footer will contain
+			+ table 3
+				- Terms and Conditions
+				- Total Rounded Amount Calculation
+				- Total Rounded Amount in Words
+	-->
+	<table class='footer-table' width=100% cellspacing=0>
+		<thead>
+			
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60% style='padding-right: 10px;'>
+					<b>Terms, Conditions &amp; Other Information:</b><br />
+					<script>doc.terms</script>
+				</td>
+				<td>
+					<table cellspacing=0 width=100%><tbody>
+						<tr>
+							<td>Net Total</td>
+							<td></td>
+							<td width=38%><script>
+								fmt_money(doc.net_total_import)
+							</script></td>
+						</tr>
+						<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>
+						<tr style='font-weight: bold'>
+							<td>Grand Total</td>
+							<td><script>doc.currency</script></td>
+							<td><script>
+								fmt_money(doc.grand_total_import)
+							</script></td>
+						</tr>
+					</tbody></table>
+					<br /><b>In Words</b><br />
+					<i><script>doc.in_words_import</script></i>
+				</td>
+			</tr>		
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+
diff --git a/erpnext/patches/print_formats/PurchaseOrderModern.html b/erpnext/patches/print_formats/PurchaseOrderModern.html
new file mode 100644
index 0000000..b159242
--- /dev/null
+++ b/erpnext/patches/print_formats/PurchaseOrderModern.html
@@ -0,0 +1,276 @@
+<!--
+	Sample Print Format for ERPNext
+	Please use at your own discretion
+	For suggestions and contributions:
+		https://github.com/webnotes/erpnext-print-templates
+
+	Freely usable under MIT license
+-->
+
+<!-- Style Settings -->
+<style>
+	/*
+		common style for whole page
+		This should include:
+		+ page size related settings
+		+ font family settings
+		+ line spacing settings
+	*/
+	@media screen {
+		body {
+			width: 8.3in;
+		}
+	}
+
+	html, body, div, span, td {
+		font-family: "Helvetica", "Arial", sans-serif;
+		font-size: 12px;
+	}
+
+	body {
+		padding: 10px;
+		margin: auto;
+		font-size: 12px;
+		line-height: 150%;
+	}
+
+	.common {
+		font-family: "Helvetica", "Arial", sans-serif !important;
+		font-size: 12px;
+		padding: 10px 0px;
+	}
+
+	table {
+		border-collapse: collapse;
+		width: 100%;
+		vertical-align: top;
+		border-style: none !important;
+	}
+
+	table td {
+		padding: 2px 0px;
+		border-style: none !important;
+	}
+	
+	table h1, h2, h3, h4, h5, h6 {
+		padding: 0px;
+		margin: 0px;
+	}
+
+	table.header-table td {
+		vertical-align: top;
+	}
+
+	table.header-table h1 {
+		text-transform: uppercase;
+		color: white;
+		font-size: 55px;
+		font-style: italic;
+	}
+
+	table.header-table thead tr:nth-child(1) div {
+		height: 24px;
+		background-color: #696969;
+		vertical-align: middle;
+		padding: 12px 0px 0px 0px;
+		width: 100%;
+	}
+
+	div.page-body table td:nth-child(6),
+	div.page-body table td:nth-child(7) {
+		text-align: right;
+	}
+
+	div.page-body table tr td {
+		background-color: #DCDCDC !important;
+	}
+
+	div.page-body table tr:nth-child(1) td {
+		background-color: #696969 !important;
+		color: white !important;
+	}
+
+	table.footer-table td {
+		vertical-align: top;
+	}
+
+	table.footer-table td table td:nth-child(2),
+	table.footer-table td table td:nth-child(3) {
+		text-align: right;
+	}
+
+	table.footer-table tfoot td {
+		background-color: #696969;
+		height: 10px;
+	}
+
+	.imp-details {
+		background-color: #DCDCDC;
+	}
+</style>
+
+
+<!-- Javascript -->
+<script>
+	si_std = {
+		print_item_table: function() {
+			var table = print_table(
+				'Purchase Order',
+				doc.name,
+				'po_details',
+				'PO Detail',
+				[// Here specify the table columns to be displayed
+					'SR', 'item_code', 'item_name', 'description', 'qty', 'stock_uom',
+					'import_rate', 'import_amount'
+				],
+				[// Here specify the labels of column headings
+					'Sr', 'Item Code', 'Item Name', 'Description', 'Qty',
+					'UoM', 'Basic Rate', 'Amount'
+				],
+				[// Here specify the column widths
+					'3%', '10%', '15%', '32%', '5%',
+					'5%', '15%', '15%'
+				]
+			);
+
+			// This code takes care of page breaks
+			if(table.appendChild) {
+				out = table.innerHTML;
+			} else {
+				out = '';
+				for(var i=0; i < (table.length-1); i++) {
+					out += table[i].innerHTML + 
+						'<div style = "page-break-after: always;" \
+						class = "page_break"></div>\
+						<div class="page-settings"></div>';
+				}
+				out += table[table.length-1].innerHTML;
+			}
+			return out;
+		},
+
+
+		print_other_charges: function(parent) {
+			var oc = getchildren('Purchase Tax Detail', doc.name, 'purchase_tax_details');
+			var rows = '<table width=100%>\n';
+			for(var i=0; i<oc.length; i++) {
+				rows +=
+					'<tr>\n' +
+						'\t<td>' + oc[i].description + '</td>\n' +
+						'\t<td></td>\n' +
+						'\t<td width=38%>' + fmt_money(oc[i].tax_amount / (doc.conversion_rate || 1)) + '</td>\n' +
+					'</tr>\n';
+			}
+			return rows + '</table>\n';
+		}
+	};
+</script>
+
+
+<!-- Page Layout Settings -->
+<div class='common page-header'>
+	<!-- 
+		Page Header will contain
+			+ table 1
+				+ table 1a
+					- Name
+					- Address
+					- Contact
+					- Mobile No
+				+ table 1b
+					- Voucher Date
+					- Due Date
+	-->
+	<table class='header-table' cellspacing=0>
+		<thead>
+			<tr><td colspan=2><div><h1>Purchase Order</h1></div></td></tr>
+			<tr><td colspan=2><div style="height:15px"></div></td></tr>
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60%><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=22%><b>Name</b></td>
+						<td><script>doc.supplier_name</script></td>
+					</tr>
+					<tr>
+						<td><b>Address</b></td>
+						<td><script>replace_newlines(doc.address_display)</script></td>
+					</tr>
+					<tr>
+						<td><b>Contact</b></td>
+						<td><script>doc.contact_display</script></td>
+					</tr>
+				</tbody></table></td>
+				<td><table width=100% cellspacing=0><tbody>
+					<tr class='imp-details'>
+						<td><b>Purchase Order No.</b></td>
+						<td><script>cur_frm.docname</script></td>
+					</tr>
+					<tr>
+						<td width=63%><b>Purchase Order Date</b></td>
+						<td><script>date.str_to_user(doc.transaction_date)</script></td>
+					<tr>					
+				</tbody></table></td>
+			</tr>
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+<div class='common page-body'>
+	<!-- 
+		Page Body will contain
+			+ table 2
+				- Sales Invoice Data
+	-->
+	<script>si_std.print_item_table()</script>
+</div>
+<div class='common page-footer'>
+	<!-- 
+		Page Footer will contain
+			+ table 3
+				- Terms and Conditions
+				- Total Rounded Amount Calculation
+				- Total Rounded Amount in Words
+	-->
+	<table class='footer-table' width=100% cellspacing=0>
+		<thead>
+			
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60% style='padding-right: 10px;'>
+					<b>Terms, Conditions &amp; Other Information:</b><br />
+					<script>doc.terms</script>
+				</td>
+				<td>
+					<table cellspacing=0 width=100%><tbody>
+						<tr>
+							<td>Net Total</td>
+							<td></td>
+							<td width=38%><script>
+								fmt_money(doc.net_total_import)
+							</script></td>
+						</tr>
+						<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>
+						<tr style='font-weight: bold' class='imp-details'>
+							<td>Grand Total</td>
+							<td><script>doc.currency</script></td>
+							<td><script>
+								fmt_money(doc.grand_total_import)
+							</script></td>
+						</tr>
+					</tbody></table>
+					<br /><b>In Words</b><br />
+					<i><script>doc.in_words_import</script></i>
+				</td>
+			</tr>		
+		</tbody>
+		<tfoot>
+			<tr><td colspan=2><div></div></td><tr>
+		</tfoot>
+	</table>
+</div>
+
diff --git a/erpnext/patches/print_formats/PurchaseOrderSpartan.html b/erpnext/patches/print_formats/PurchaseOrderSpartan.html
new file mode 100644
index 0000000..b1c1cd5
--- /dev/null
+++ b/erpnext/patches/print_formats/PurchaseOrderSpartan.html
@@ -0,0 +1,272 @@
+<!--
+	Sample Print Format for ERPNext
+	Please use at your own discretion
+	For suggestions and contributions:
+		https://github.com/webnotes/erpnext-print-templates
+
+	Freely usable under MIT license
+-->
+
+<!-- Style Settings -->
+<style>
+	/*
+		common style for whole page
+		This should include:
+		+ page size related settings
+		+ font family settings
+		+ line spacing settings
+	*/
+	@media screen {
+		body {
+			width: 8.3in;
+		}
+	}
+
+	html, body, div, span, td {
+		font-family: "Arial", sans-serif;
+		font-size: 12px;
+	}
+
+	body {
+		padding: 10px;
+		margin: auto;
+		font-size: 12px;
+		line-height: 150%;
+	}
+
+	.common {
+		font-family: "Arial", sans-serif !important;
+		font-size: 12px;
+		padding: 0px;
+	}
+
+	table {
+		width: 100% !important;
+		vertical-align: top;
+	}
+
+	table td {
+		padding: 2px 0px;
+	}
+
+	table, td {
+		border-collapse: collapse !important;
+		padding: 0px;
+		margin: 0px !important;
+	}
+	
+	table h1, h2, h3, h4, h5, h6 {
+		padding: 0px;
+		margin: 0px;
+	}
+
+	table.header-table td {
+		vertical-align: top;
+	}
+
+	table.header-table h3 {
+		color: gray;
+	}
+
+	table.header-table thead td {
+		padding: 5px;
+	}
+
+	table.header-table > thead,
+	table.header-table > tbody > tr > td,
+	table.footer-table > tbody > tr > td {
+		border: 1px solid black;
+		padding: 5px;
+	}
+
+	table.footer-table > tbody,
+	table.header-table > thead {
+		border-bottom: 3px solid black;
+	}
+
+	table.header-table > thead {
+		border-top: 3px solid black;
+	}
+
+	div.page-body table td:nth-child(6),
+	div.page-body table td:nth-child(7) {
+		text-align: right;
+	}
+
+	div.page-body td {
+		background-color: white !important;
+		border: 1px solid black !important;
+	}
+
+	table.footer-table td {
+		vertical-align: top;
+	}
+
+	table.footer-table td table td:nth-child(2),
+	table.footer-table td table td:nth-child(3) {
+		text-align: right;
+	}
+</style>
+
+
+<!-- Javascript -->
+<script>
+	si_std = {
+		print_item_table: function() {
+			var table = print_table(
+				'Purchase Order',
+				doc.name,
+				'po_details',
+				'PO Detail',
+				[// Here specify the table columns to be displayed
+					'SR', 'item_code', 'item_name', 'description', 'qty', 'stock_uom',
+					'import_rate', 'import_amount'
+				],
+				[// Here specify the labels of column headings
+					'Sr', 'Item Code', 'Item Name', 'Description', 'Qty',
+					'UoM', 'Basic Rate', 'Amount'
+				],
+				[// Here specify the column widths
+					'3%', '10%', '15%', '32%', '5%',
+					'5%', '15%', '15%'
+				]
+			);
+
+			// This code takes care of page breaks
+			if(table.appendChild) {
+				out = table.innerHTML;
+			} else {
+				out = '';
+				for(var i=0; i < (table.length-1); i++) {
+					out += table[i].innerHTML + 
+						'<div style = "page-break-after: always;" \
+						class = "page_break"></div>\
+						<div class="page-settings"></div>';
+				}
+				out += table[table.length-1].innerHTML;
+			}
+			return out;
+		},
+
+
+		print_other_charges: function(parent) {
+			var oc = getchildren('Purchase Tax Detail', doc.name, 'purchase_tax_details');
+			var rows = '<table width=100%>\n';
+			for(var i=0; i<oc.length; i++) {
+				rows +=
+					'<tr>\n' +
+						'\t<td>' + oc[i].description + '</td>\n' +
+						'\t<td></td>\n' +
+						'\t<td width=38%>' + fmt_money(oc[i].tax_amount / (doc.conversion_rate || 1)) + '</td>\n' +
+					'</tr>\n';
+			}
+			return rows + '</table>\n';
+		}
+	};
+</script>
+
+
+<!-- Page Layout Settings -->
+<div class='common page-header'>
+	<!-- 
+		Page Header will contain
+			+ table 1
+				+ table 1a
+					- Name
+					- Address
+					- Contact
+					- Mobile No
+				+ table 1b
+					- Voucher Date
+					- Due Date
+	-->
+	<table class='header-table' cellspacing=0>
+		<thead>
+			<tr><td colspan=2><h1>Purchase Order</h1></td></tr>
+			<tr><td colspan=2><h3><script>cur_frm.docname</script></h3></td></tr>
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60%><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=22%><b>Name</b></td>
+						<td><script>doc.supplier_name</script></td>
+					</tr>
+					<tr>
+						<td><b>Address</b></td>
+						<td><script>replace_newlines(doc.address_display)</script></td>
+					</tr>
+					<tr>
+						<td><b>Contact</b></td>
+						<td><script>doc.contact_display</script></td>
+					</tr>
+				</tbody></table></td>
+				<td><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=63%><b>Purchase Order Date</b></td>
+						<td><script>date.str_to_user(doc.transaction_date)</script></td>
+					<tr>					
+				</tbody></table></td>
+			</tr>
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+<div class='common page-body'>
+	<!-- 
+		Page Body will contain
+			+ table 2
+				- Sales Invoice Data
+	-->
+	<script>si_std.print_item_table()</script>
+</div>
+<div class='common page-footer'>
+	<!-- 
+		Page Footer will contain
+			+ table 3
+				- Terms and Conditions
+				- Total Rounded Amount Calculation
+				- Total Rounded Amount in Words
+	-->
+	<table class='footer-table' width=100% cellspacing=0>
+		<thead>
+			
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60% style='padding-right: 10px;'>
+					<b>Terms, Conditions &amp; Other Information:</b><br />
+					<script>doc.terms</script>
+				</td>
+				<td>
+					<table cellspacing=0 width=100%><tbody>
+						<tr>
+							<td>Net Total</td>
+							<td></td>
+							<td width=38%><script>
+								fmt_money(doc.net_total_import)
+							</script></td>
+						</tr>
+						<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>
+						<tr style='font-weight: bold'>
+							<td>Grand Total</td>
+							<td><script>doc.currency</script></td>
+							<td><script>
+								fmt_money(doc.grand_total_import)
+							</script></td>
+						</tr>
+					</tbody></table>
+					<br /><b>In Words</b><br />
+					<i><script>doc.in_words_import</script></i>
+				</td>
+			</tr>		
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+
+
diff --git a/erpnext/patches/print_formats/QuotationClassic.html b/erpnext/patches/print_formats/QuotationClassic.html
new file mode 100644
index 0000000..2dd24fa
--- /dev/null
+++ b/erpnext/patches/print_formats/QuotationClassic.html
@@ -0,0 +1,256 @@
+<!--
+	Sample Print Format for ERPNext
+	Please use at your own discretion
+	For suggestions and contributions:
+		https://github.com/webnotes/erpnext-print-templates
+
+	Freely usable under MIT license
+-->
+
+<!-- Style Settings -->
+<style>
+	/*
+		common style for whole page
+		This should include:
+		+ page size related settings
+		+ font family settings
+		+ line spacing settings
+	*/
+	@media screen {
+		body {
+			width: 8.3in;
+		}
+	}
+
+	html, body, div, span, td {
+		font-family: "Georgia", serif;
+		font-size: 12px;
+	}
+
+	body {
+		padding: 10px;
+		margin: auto;
+		font-size: 12px;
+		line-height: 150%;
+	}
+
+	.common {
+		font-family: "Georgia", serif !important;
+		font-size: 12px;
+		padding: 10px 0px;
+	}
+
+	table {
+		border-collapse: collapse;
+		width: 100%;
+		vertical-align: top;
+	}
+
+	table td {
+		padding: 2px 0px;
+	}
+	
+	table h1, h2, h3, h4, h5, h6 {
+		padding: 0px;
+		margin: 0px;
+	}
+
+	table.header-table td {
+		vertical-align: top;
+	}
+
+	table.header-table thead {
+		border-bottom: 1px solid black;
+	}
+
+	table.header-table h3 {
+		color: gray;
+	}
+
+	table.header-table thead td {
+		padding: 5px 0px;
+	}
+
+	div.page-body table td:nth-child(6),
+	div.page-body table td:nth-child(7) {
+		text-align: right;
+	}
+
+	table.footer-table td {
+		vertical-align: top;
+	}
+
+	table.footer-table td table td:nth-child(2),
+	table.footer-table td table td:nth-child(3) {
+		text-align: right;
+	}
+</style>
+
+
+<!-- Javascript -->
+<script>
+	si_std = {
+		print_item_table: function() {
+			var table = print_table(
+				'Quotation',
+				doc.name,
+				'quotation_details',
+				'Quotation Detail',
+				[// Here specify the table columns to be displayed
+					'SR', 'item_code', 'item_name', 'description', 'qty', 'stock_uom',
+					'export_rate', 'export_amount'
+				],
+				[// Here specify the labels of column headings
+					'Sr', 'Item Code', 'Item Name', 'Description', 'Qty',
+					'UoM', 'Basic Rate', 'Amount'
+				],
+				[// Here specify the column widths
+					'3%', '10%', '15%', '32%', '5%',
+					'5%', '15%', '15%'
+				]
+			);
+
+			// This code takes care of page breaks
+			if(table.appendChild) {
+				out = table.innerHTML;
+			} else {
+				out = '';
+				for(var i=0; i < (table.length-1); i++) {
+					out += table[i].innerHTML + 
+						'<div style = "page-break-after: always;" \
+						class = "page_break"></div>\
+						<div class="page-settings"></div>';
+				}
+				out += table[table.length-1].innerHTML;
+			}
+			return out;
+		},
+
+
+		print_other_charges: function(parent) {
+			var oc = getchildren('RV Tax Detail', doc.name, 'other_charges');
+			var rows = '<table width=100%>\n';
+			for(var i=0; i<oc.length; i++) {
+				rows +=
+					'<tr>\n' +
+						'\t<td>' + oc[i].description + '</td>\n' +
+						'\t<td></td>\n' +
+						'\t<td width=38%>' + fmt_money(oc[i].tax_amount) + '</td>\n' +
+					'</tr>\n';
+			}
+			return rows + '</table>\n';
+		}
+	};
+</script>
+
+
+<!-- Page Layout Settings -->
+<div class='common page-header'>
+	<!-- 
+		Page Header will contain
+			+ table 1
+				+ table 1a
+					- Name
+					- Address
+					- Contact
+					- Mobile No
+				+ table 1b
+					- Voucher Date
+					- Due Date
+	-->
+	<table class='header-table' cellspacing=0>
+		<thead>
+			<tr><td><h1>Quotation</h1></td></tr>
+			<tr><td><h3><script>cur_frm.docname</script></h3></td></tr>
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60%><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=39%><b>Name</b></td>
+						<td><script>doc.customer?doc.customer:doc.lead_name</script></td>
+					</tr>
+					<tr>
+						<td><b>Address</b></td>
+						<td><script>replace_newlines(doc.address_display)</script></td>
+					</tr>
+					<tr>
+						<td><b>Contact</b></td>
+						<td><script>doc.contact_display</script></td>
+					</tr>
+				</tbody></table></td>
+				<td><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=63%><b>Quotation Date</b></td>
+						<td><script>date.str_to_user(doc.transaction_date)</script></td>
+					<tr>					
+				</tbody></table></td>
+			</tr>
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+<div class='common page-body'>
+	<!-- 
+		Page Body will contain
+			+ table 2
+				- Sales Invoice Data
+	-->
+	<script>si_std.print_item_table()</script>
+</div>
+<div class='common page-footer'>
+	<!-- 
+		Page Footer will contain
+			+ table 3
+				- Terms and Conditions
+				- Total Rounded Amount Calculation
+				- Total Rounded Amount in Words
+	-->
+	<table class='footer-table' width=100% cellspacing=0>
+		<thead>
+			
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60% style='padding-right: 10px;'>
+					<b>Terms, Conditions &amp; Other Information:</b><br />
+					<script>doc.terms</script>
+				</td>
+				<td>
+					<table cellspacing=0 width=100%><tbody>
+						<tr>
+							<td>Net Total</td>
+							<td></td>
+							<td width=38%><script>
+								fmt_money(doc.net_total/doc.conversion_rate)
+							</script></td>
+						</tr>
+						<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>
+						<tr>
+							<td>Grand Total</td>
+							<td></td>
+							<td><script>
+								fmt_money(doc.grand_total_export)
+							</script></td>
+						</tr>
+						<tr style='font-weight: bold'>
+							<td>Rounded Total</td>
+							<td><script>doc.currency</script></td>
+							<td><script>
+								fmt_money(doc.rounded_total_export)
+							</script></td>
+						</tr>
+					</tbody></table>
+					<br /><b>In Words</b><br />
+					<i><script>doc.in_words_export</script></i>
+				</td>
+			</tr>		
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+
diff --git a/erpnext/patches/print_formats/QuotationModern.html b/erpnext/patches/print_formats/QuotationModern.html
new file mode 100644
index 0000000..83103b0
--- /dev/null
+++ b/erpnext/patches/print_formats/QuotationModern.html
@@ -0,0 +1,283 @@
+<!--
+	Sample Print Format for ERPNext
+	Please use at your own discretion
+	For suggestions and contributions:
+		https://github.com/webnotes/erpnext-print-templates
+
+	Freely usable under MIT license
+-->
+
+<!-- Style Settings -->
+<style>
+	/*
+		common style for whole page
+		This should include:
+		+ page size related settings
+		+ font family settings
+		+ line spacing settings
+	*/
+	@media screen {
+		body {
+			width: 8.3in;
+		}
+	}
+
+	html, body, div, span, td {
+		font-family: "Helvetica", "Arial", sans-serif;
+		font-size: 12px;
+	}
+
+	body {
+		padding: 10px;
+		margin: auto;
+		font-size: 12px;
+		line-height: 150%;
+	}
+
+	.common {
+		font-family: "Helvetica", "Arial", sans-serif !important;
+		font-size: 12px;
+		padding: 10px 0px;
+	}
+
+	table {
+		border-collapse: collapse;
+		width: 100%;
+		vertical-align: top;
+		border-style: none !important;
+	}
+
+	table td {
+		padding: 2px 0px;
+		border-style: none !important;
+	}
+	
+	table h1, h2, h3, h4, h5, h6 {
+		padding: 0px;
+		margin: 0px;
+	}
+
+	table.header-table td {
+		vertical-align: top;
+	}
+
+	table.header-table h1 {
+		text-transform: uppercase;
+		color: white;
+		font-size: 55px;
+		font-style: italic;
+	}
+
+	table.header-table thead tr:nth-child(1) div {
+		height: 24px;
+		background-color: #696969;
+		vertical-align: middle;
+		padding: 12px 0px 0px 0px;
+		width: 100%;
+	}
+
+	div.page-body table td:nth-child(6),
+	div.page-body table td:nth-child(7) {
+		text-align: right;
+	}
+
+	div.page-body table tr td {
+		background-color: #DCDCDC !important;
+	}
+
+	div.page-body table tr:nth-child(1) td {
+		background-color: #696969 !important;
+		color: white !important;
+	}
+
+	table.footer-table td {
+		vertical-align: top;
+	}
+
+	table.footer-table td table td:nth-child(2),
+	table.footer-table td table td:nth-child(3) {
+		text-align: right;
+	}
+
+	table.footer-table tfoot td {
+		background-color: #696969;
+		height: 10px;
+	}
+
+	.imp-details {
+		background-color: #DCDCDC;
+	}
+</style>
+
+
+<!-- Javascript -->
+<script>
+	si_std = {
+		print_item_table: function() {
+			var table = print_table(
+				'Quotation',
+				doc.name,
+				'quotation_details',
+				'Quotation Detail',
+				[// Here specify the table columns to be displayed
+					'SR', 'item_code', 'item_name', 'description', 'qty', 'stock_uom',
+					'export_rate', 'export_amount'
+				],
+				[// Here specify the labels of column headings
+					'Sr', 'Item Code', 'Item Name', 'Description', 'Qty',
+					'UoM', 'Basic Rate', 'Amount'
+				],
+				[// Here specify the column widths
+					'3%', '10%', '15%', '32%', '5%',
+					'5%', '15%', '15%'
+				]
+			);
+
+			// This code takes care of page breaks
+			if(table.appendChild) {
+				out = table.innerHTML;
+			} else {
+				out = '';
+				for(var i=0; i < (table.length-1); i++) {
+					out += table[i].innerHTML + 
+						'<div style = "page-break-after: always;" \
+						class = "page_break"></div>\
+						<div class="page-settings"></div>';
+				}
+				out += table[table.length-1].innerHTML;
+			}
+			return out;
+		},
+
+
+		print_other_charges: function(parent) {
+			var oc = getchildren('RV Tax Detail', doc.name, 'other_charges');
+			var rows = '<table width=100%>\n';
+			for(var i=0; i<oc.length; i++) {
+				rows +=
+					'<tr>\n' +
+						'\t<td>' + oc[i].description + '</td>\n' +
+						'\t<td></td>\n' +
+						'\t<td width=38%>' + fmt_money(oc[i].tax_amount) + '</td>\n' +
+					'</tr>\n';
+			}
+			return rows + '</table>\n';
+		}
+	};
+</script>
+
+
+<!-- Page Layout Settings -->
+<div class='common page-header'>
+	<!-- 
+		Page Header will contain
+			+ table 1
+				+ table 1a
+					- Name
+					- Address
+					- Contact
+					- Mobile No
+				+ table 1b
+					- Voucher Date
+					- Due Date
+	-->
+	<table class='header-table' cellspacing=0>
+		<thead>
+			<tr><td colspan=2><div><h1>Quotation</h1></div></td></tr>
+			<tr><td colspan=2><div style="height:15px"></div></td></tr>
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60%><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=39%><b>Name</b></td>
+						<td><script>doc.customer?doc.customer:doc.lead_name</script></td>
+					</tr>
+					<tr>
+						<td><b>Address</b></td>
+						<td><script>replace_newlines(doc.address_display)</script></td>
+					</tr>
+					<tr>
+						<td><b>Contact</b></td>
+						<td><script>doc.contact_display</script></td>
+					</tr>
+				</tbody></table></td>
+				<td><table width=100% cellspacing=0><tbody>
+					<tr class='imp-details'>
+						<td><b>Quotation No.</b></td>
+						<td><script>cur_frm.docname</script></td>
+					</tr>
+					<tr>
+						<td width=63%><b>Quotation Date</b></td>
+						<td><script>date.str_to_user(doc.transaction_date)</script></td>
+					<tr>					
+				</tbody></table></td>
+			</tr>
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+<div class='common page-body'>
+	<!-- 
+		Page Body will contain
+			+ table 2
+				- Sales Invoice Data
+	-->
+	<script>si_std.print_item_table()</script>
+</div>
+<div class='common page-footer'>
+	<!-- 
+		Page Footer will contain
+			+ table 3
+				- Terms and Conditions
+				- Total Rounded Amount Calculation
+				- Total Rounded Amount in Words
+	-->
+	<table class='footer-table' width=100% cellspacing=0>
+		<thead>
+			
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60% style='padding-right: 10px;'>
+					<b>Terms, Conditions &amp; Other Information:</b><br />
+					<script>doc.terms</script>
+				</td>
+				<td>
+					<table cellspacing=0 width=100%><tbody>
+						<tr>
+							<td>Net Total</td>
+							<td></td>
+							<td width=38%><script>
+								fmt_money(doc.net_total/doc.conversion_rate)
+							</script></td>
+						</tr>
+						<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>
+						<tr>
+							<td>Grand Total</td>
+							<td></td>
+							<td><script>
+								fmt_money(doc.grand_total_export)
+							</script></td>
+						</tr>
+						<tr style='font-weight: bold' class='imp-details'>
+							<td>Rounded Total</td>
+							<td><script>doc.currency</script></td>
+							<td><script>
+								fmt_money(doc.rounded_total_export)
+							</script></td>
+						</tr>
+					</tbody></table>
+					<br /><b>In Words</b><br />
+					<i><script>doc.in_words_export</script></i>
+				</td>
+			</tr>		
+		</tbody>
+		<tfoot>
+			<tr><td colspan=2><div></div></td><tr>
+		</tfoot>
+	</table>
+</div>
+
diff --git a/erpnext/patches/print_formats/QuotationSpartan.html b/erpnext/patches/print_formats/QuotationSpartan.html
new file mode 100644
index 0000000..e6afe4d
--- /dev/null
+++ b/erpnext/patches/print_formats/QuotationSpartan.html
@@ -0,0 +1,279 @@
+<!--
+	Sample Print Format for ERPNext
+	Please use at your own discretion
+	For suggestions and contributions:
+		https://github.com/webnotes/erpnext-print-templates
+
+	Freely usable under MIT license
+-->
+
+<!-- Style Settings -->
+<style>
+	/*
+		common style for whole page
+		This should include:
+		+ page size related settings
+		+ font family settings
+		+ line spacing settings
+	*/
+	@media screen {
+		body {
+			width: 8.3in;
+		}
+	}
+
+	html, body, div, span, td {
+		font-family: "Arial", sans-serif;
+		font-size: 12px;
+	}
+
+	body {
+		padding: 10px;
+		margin: auto;
+		font-size: 12px;
+		line-height: 150%;
+	}
+
+	.common {
+		font-family: "Arial", sans-serif !important;
+		font-size: 12px;
+		padding: 0px;
+	}
+
+	table {
+		width: 100% !important;
+		vertical-align: top;
+	}
+
+	table td {
+		padding: 2px 0px;
+	}
+
+	table, td {
+		border-collapse: collapse !important;
+		padding: 0px;
+		margin: 0px !important;
+	}
+	
+	table h1, h2, h3, h4, h5, h6 {
+		padding: 0px;
+		margin: 0px;
+	}
+
+	table.header-table td {
+		vertical-align: top;
+	}
+
+	table.header-table h3 {
+		color: gray;
+	}
+
+	table.header-table thead td {
+		padding: 5px;
+	}
+
+	table.header-table > thead,
+	table.header-table > tbody > tr > td,
+	table.footer-table > tbody > tr > td {
+		border: 1px solid black;
+		padding: 5px;
+	}
+
+	table.footer-table > tbody,
+	table.header-table > thead {
+		border-bottom: 3px solid black;
+	}
+
+	table.header-table > thead {
+		border-top: 3px solid black;
+	}
+
+	div.page-body table td:nth-child(6),
+	div.page-body table td:nth-child(7) {
+		text-align: right;
+	}
+
+	div.page-body td {
+		background-color: white !important;
+		border: 1px solid black !important;
+	}
+
+	table.footer-table td {
+		vertical-align: top;
+	}
+
+	table.footer-table td table td:nth-child(2),
+	table.footer-table td table td:nth-child(3) {
+		text-align: right;
+	}
+</style>
+
+
+<!-- Javascript -->
+<script>
+	si_std = {
+		print_item_table: function() {
+			var table = print_table(
+				'Quotation',
+				doc.name,
+				'quotation_details',
+				'Quotation Detail',
+				[// Here specify the table columns to be displayed
+					'SR', 'item_code', 'item_name', 'description', 'qty', 'stock_uom',
+					'export_rate', 'export_amount'
+				],
+				[// Here specify the labels of column headings
+					'Sr', 'Item Code', 'Item Name', 'Description', 'Qty',
+					'UoM', 'Basic Rate', 'Amount'
+				],
+				[// Here specify the column widths
+					'3%', '10%', '15%', '32%', '5%',
+					'5%', '15%', '15%'
+				]
+			);
+
+			// This code takes care of page breaks
+			if(table.appendChild) {
+				out = table.innerHTML;
+			} else {
+				out = '';
+				for(var i=0; i < (table.length-1); i++) {
+					out += table[i].innerHTML + 
+						'<div style = "page-break-after: always;" \
+						class = "page_break"></div>\
+						<div class="page-settings"></div>';
+				}
+				out += table[table.length-1].innerHTML;
+			}
+			return out;
+		},
+
+
+		print_other_charges: function(parent) {
+			var oc = getchildren('RV Tax Detail', doc.name, 'other_charges');
+			var rows = '<table width=100%>\n';
+			for(var i=0; i<oc.length; i++) {
+				rows +=
+					'<tr>\n' +
+						'\t<td>' + oc[i].description + '</td>\n' +
+						'\t<td></td>\n' +
+						'\t<td width=38%>' + fmt_money(oc[i].tax_amount) + '</td>\n' +
+					'</tr>\n';
+			}
+			return rows + '</table>\n';
+		}
+	};
+</script>
+
+
+<!-- Page Layout Settings -->
+<div class='common page-header'>
+	<!-- 
+		Page Header will contain
+			+ table 1
+				+ table 1a
+					- Name
+					- Address
+					- Contact
+					- Mobile No
+				+ table 1b
+					- Voucher Date
+					- Due Date
+	-->
+	<table class='header-table' cellspacing=0>
+		<thead>
+			<tr><td colspan=2><h1>Quotation</h1></td></tr>
+			<tr><td colspan=2><h3><script>cur_frm.docname</script></h3></td></tr>
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60%><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=39%><b>Name</b></td>
+						<td><script>doc.customer?doc.customer:doc.lead_name</script></td>
+					</tr>
+					<tr>
+						<td><b>Address</b></td>
+						<td><script>replace_newlines(doc.address_display)</script></td>
+					</tr>
+					<tr>
+						<td><b>Contact</b></td>
+						<td><script>doc.contact_display</script></td>
+					</tr>
+				</tbody></table></td>
+				<td><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=63%><b>Quotation Date</b></td>
+						<td><script>date.str_to_user(doc.transaction_date)</script></td>
+					<tr>					
+				</tbody></table></td>
+			</tr>
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+<div class='common page-body'>
+	<!-- 
+		Page Body will contain
+			+ table 2
+				- Sales Invoice Data
+	-->
+	<script>si_std.print_item_table()</script>
+</div>
+<div class='common page-footer'>
+	<!-- 
+		Page Footer will contain
+			+ table 3
+				- Terms and Conditions
+				- Total Rounded Amount Calculation
+				- Total Rounded Amount in Words
+	-->
+	<table class='footer-table' width=100% cellspacing=0>
+		<thead>
+			
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60% style='padding-right: 10px;'>
+					<b>Terms, Conditions &amp; Other Information:</b><br />
+					<script>doc.terms</script>
+				</td>
+				<td>
+					<table cellspacing=0 width=100%><tbody>
+						<tr>
+							<td>Net Total</td>
+							<td></td>
+							<td width=38%><script>
+								fmt_money(doc.net_total/doc.conversion_rate)
+							</script></td>
+						</tr>
+						<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>
+						<tr>
+							<td>Grand Total</td>
+							<td></td>
+							<td><script>
+								fmt_money(doc.grand_total_export)
+							</script></td>
+						</tr>
+						<tr style='font-weight: bold'>
+							<td>Rounded Total</td>
+							<td><script>doc.currency</script></td>
+							<td><script>
+								fmt_money(doc.rounded_total_export)
+							</script></td>
+						</tr>
+					</tbody></table>
+					<br /><b>In Words</b><br />
+					<i><script>doc.in_words_export</script></i>
+				</td>
+			</tr>		
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+
+
diff --git a/erpnext/patches/print_formats/SalesInvoiceClassic.html b/erpnext/patches/print_formats/SalesInvoiceClassic.html
new file mode 100644
index 0000000..dc0d092
--- /dev/null
+++ b/erpnext/patches/print_formats/SalesInvoiceClassic.html
@@ -0,0 +1,261 @@
+<!--
+	Sample Print Format for ERPNext
+	Please use at your own discretion
+	For suggestions and contributions:
+		https://github.com/webnotes/erpnext-print-templates
+
+	Freely usable under MIT license
+-->
+
+<!-- Style Settings -->
+<style>
+	/*
+		common style for whole page
+		This should include:
+		+ page size related settings
+		+ font family settings
+		+ line spacing settings
+	*/
+	@media screen {
+		body {
+			width: 8.3in;
+		}
+	}
+
+	html, body, div, span, td {
+		font-family: "Georgia", serif;
+		font-size: 12px;
+	}
+
+	body {
+		padding: 10px;
+		margin: auto;
+		font-size: 12px;
+		line-height: 150%;
+	}
+
+	.common {
+		font-family: "Georgia", serif !important;
+		font-size: 12px;
+		padding: 10px 0px;
+	}
+
+	table {
+		border-collapse: collapse;
+		width: 100%;
+		vertical-align: top;
+	}
+
+	table td {
+		padding: 2px 0px;
+	}
+	
+	table h1, h2, h3, h4, h5, h6 {
+		padding: 0px;
+		margin: 0px;
+	}
+
+	table.header-table td {
+		vertical-align: top;
+	}
+
+	table.header-table thead {
+		border-bottom: 1px solid black;
+	}
+
+	table.header-table h3 {
+		color: gray;
+	}
+
+	table.header-table thead td {
+		padding: 5px 0px;
+	}
+
+	div.page-body table td:nth-child(6),
+	div.page-body table td:nth-child(7) {
+		text-align: right;
+	}
+
+	table.footer-table td {
+		vertical-align: top;
+	}
+
+	table.footer-table td table td:nth-child(2),
+	table.footer-table td table td:nth-child(3) {
+		text-align: right;
+	}
+</style>
+
+
+<!-- Javascript -->
+<script>
+	si_std = {
+		print_item_table: function() {
+			var table = print_table(
+				'Receivable Voucher',
+				doc.name,
+				'entries',
+				'RV Detail',
+				[// Here specify the table columns to be displayed
+					'SR', 'item_name', 'description', 'qty', 'stock_uom',
+					'export_rate', 'export_amount'
+				],
+				[// Here specify the labels of column headings
+					'Sr', 'Item Name', 'Description', 'Qty',
+					'UoM', 'Basic Rate', 'Amount'
+				],
+				[// Here specify the column widths
+					'3%', '20%', '37%', '5%',
+					'5%', '15%', '15%'
+				]
+			);
+
+			// This code takes care of page breaks
+			if(table.appendChild) {
+				out = table.innerHTML;
+			} else {
+				out = '';
+				for(var i=0; i < (table.length-1); i++) {
+					out += table[i].innerHTML + 
+						'<div style = "page-break-after: always;" \
+						class = "page_break"></div>\
+						<div class="page-settings"></div>';
+				}
+				out += table[table.length-1].innerHTML;
+			}
+			return out;
+		},
+
+
+		print_other_charges: function(parent) {
+			console.log(parent);
+			var oc = getchildren('RV Tax Detail', doc.name, 'other_charges');
+			var rows = '<table width=100%>\n';
+			for(var i=0; i<oc.length; i++) {
+				rows +=
+					'<tr>\n' +
+						'\t<td>' + oc[i].description + '</td>\n' +
+						'\t<td></td>\n' +
+						'\t<td width=38%>' + fmt_money(oc[i].tax_amount) + '</td>\n' +
+					'</tr>\n';
+			}
+			return rows + '</table>\n';
+		}
+	};
+</script>
+
+
+<!-- Page Layout Settings -->
+<div class='common page-header'>
+	<!-- 
+		Page Header will contain
+			+ table 1
+				+ table 1a
+					- Name
+					- Address
+					- Contact
+					- Mobile No
+				+ table 1b
+					- Voucher Date
+					- Due Date
+	-->
+	<table class='header-table' cellspacing=0>
+		<thead>
+			<tr><td><h1>Invoice</h1></td></tr>
+			<tr><td><h3><script>cur_frm.docname</script></h3></td></tr>
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60%><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=39%><b>Name</b></td>
+						<td><script>doc.customer_name</script></td>
+					</tr>
+					<tr>
+						<td><b>Address</b></td>
+						<td><script>replace_newlines(doc.address_display)</script></td>
+					</tr>
+					<tr>
+						<td><b>Contact</b></td>
+						<td><script>doc.contact_display</script></td>
+					</tr>
+				</tbody></table></td>
+				<td><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=40%><b>Invoice Date</b></td>
+						<td><script>date.str_to_user(doc.voucher_date)</script></td>
+					<tr>					
+					<tr>
+						<td><b>Due Date</b></td>
+						<td><script>date.str_to_user(doc.due_date)</script></td>
+					<tr>					
+				</tbody></table></td>
+			</tr>
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+<div class='common page-body'>
+	<!-- 
+		Page Body will contain
+			+ table 2
+				- Sales Invoice Data
+	-->
+	<script>si_std.print_item_table()</script>
+</div>
+<div class='common page-footer'>
+	<!-- 
+		Page Footer will contain
+			+ table 3
+				- Terms and Conditions
+				- Total Rounded Amount Calculation
+				- Total Rounded Amount in Words
+	-->
+	<table class='footer-table' width=100% cellspacing=0>
+		<thead>
+			
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60% style='padding-right: 10px;'>
+					<b>Terms, Conditions &amp; Other Information:</b><br />
+					<script>doc.terms</script>
+				</td>
+				<td>
+					<table cellspacing=0 width=100%><tbody>
+						<tr>
+							<td>Net Total</td>
+							<td></td>
+							<td width=38%><script>
+								fmt_money(doc.net_total/doc.conversion_rate)
+							</script></td>
+						</tr>
+						<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>
+						<tr>
+							<td>Grand Total</td>
+							<td></td>
+							<td><script>
+								fmt_money(doc.grand_total_export)
+							</script></td>
+						</tr>
+						<tr style='font-weight: bold'>
+							<td>Rounded Total</td>
+							<td><script>doc.currency</script></td>
+							<td><script>
+								fmt_money(doc.rounded_total_export)
+							</script></td>
+						</tr>
+					</tbody></table>
+					<br /><b>In Words</b><br />
+					<i><script>doc.in_words_export</script></i>
+				</td>
+			</tr>		
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+
diff --git a/erpnext/patches/print_formats/SalesInvoiceModern.html b/erpnext/patches/print_formats/SalesInvoiceModern.html
new file mode 100644
index 0000000..bdffa1c
--- /dev/null
+++ b/erpnext/patches/print_formats/SalesInvoiceModern.html
@@ -0,0 +1,288 @@
+<!--
+	Sample Print Format for ERPNext
+	Please use at your own discretion
+	For suggestions and contributions:
+		https://github.com/webnotes/erpnext-print-templates
+
+	Freely usable under MIT license
+-->
+
+<!-- Style Settings -->
+<style>
+	/*
+		common style for whole page
+		This should include:
+		+ page size related settings
+		+ font family settings
+		+ line spacing settings
+	*/
+	@media screen {
+		body {
+			width: 8.3in;
+		}
+	}
+
+	html, body, div, span, td {
+		font-family: "Helvetica", "Arial", sans-serif;
+		font-size: 12px;
+	}
+
+	body {
+		padding: 10px;
+		margin: auto;
+		font-size: 12px;
+		line-height: 150%;
+	}
+
+	.common {
+		font-family: "Helvetica", "Arial", sans-serif !important;
+		font-size: 12px;
+		padding: 10px 0px;
+	}
+
+	table {
+		border-collapse: collapse;
+		width: 100%;
+		vertical-align: top;
+		border-style: none !important;
+	}
+
+	table td {
+		padding: 2px 0px;
+		border-style: none !important;
+	}
+	
+	table h1, h2, h3, h4, h5, h6 {
+		padding: 0px;
+		margin: 0px;
+	}
+
+	table.header-table td {
+		vertical-align: top;
+	}
+
+	table.header-table h1 {
+		text-transform: uppercase;
+		color: white;
+		font-size: 55px;
+		font-style: italic;
+	}
+
+	table.header-table thead tr:nth-child(1) div {
+		height: 24px;
+		background-color: #696969;
+		vertical-align: middle;
+		padding: 12px 0px 0px 0px;
+		width: 100%;
+	}
+
+	div.page-body table td:nth-child(6),
+	div.page-body table td:nth-child(7) {
+		text-align: right;
+	}
+
+	div.page-body table tr td {
+		background-color: #DCDCDC !important;
+	}
+
+	div.page-body table tr:nth-child(1) td {
+		background-color: #696969 !important;
+		color: white !important;
+	}
+
+	table.footer-table td {
+		vertical-align: top;
+	}
+
+	table.footer-table td table td:nth-child(2),
+	table.footer-table td table td:nth-child(3) {
+		text-align: right;
+	}
+
+	table.footer-table tfoot td {
+		background-color: #696969;
+		height: 10px;
+	}
+
+	.imp-details {
+		background-color: #DCDCDC;
+	}
+</style>
+
+
+<!-- Javascript -->
+<script>
+	si_std = {
+		print_item_table: function() {
+			var table = print_table(
+				'Receivable Voucher',
+				doc.name,
+				'entries',
+				'RV Detail',
+				[// Here specify the table columns to be displayed
+					'SR', 'item_name', 'description', 'qty', 'stock_uom',
+					'export_rate', 'export_amount'
+				],
+				[// Here specify the labels of column headings
+					'Sr', 'Item Name', 'Description', 'Qty',
+					'UoM', 'Basic Rate', 'Amount'
+				],
+				[// Here specify the column widths
+					'3%', '20%', '37%', '5%',
+					'5%', '15%', '15%'
+				]
+			);
+
+			// This code takes care of page breaks
+			if(table.appendChild) {
+				out = table.innerHTML;
+			} else {
+				out = '';
+				for(var i=0; i < (table.length-1); i++) {
+					out += table[i].innerHTML + 
+						'<div style = "page-break-after: always;" \
+						class = "page_break"></div>\
+						<div class="page-settings"></div>';
+				}
+				out += table[table.length-1].innerHTML;
+			}
+			return out;
+		},
+
+
+		print_other_charges: function(parent) {
+			console.log(parent);
+			var oc = getchildren('RV Tax Detail', doc.name, 'other_charges');
+			var rows = '<table width=100%>\n';
+			for(var i=0; i<oc.length; i++) {
+				rows +=
+					'<tr>\n' +
+						'\t<td>' + oc[i].description + '</td>\n' +
+						'\t<td></td>\n' +
+						'\t<td width=38%>' + fmt_money(oc[i].tax_amount) + '</td>\n' +
+					'</tr>\n';
+			}
+			return rows + '</table>\n';
+		}
+	};
+</script>
+
+
+<!-- Page Layout Settings -->
+<div class='common page-header'>
+	<!-- 
+		Page Header will contain
+			+ table 1
+				+ table 1a
+					- Name
+					- Address
+					- Contact
+					- Mobile No
+				+ table 1b
+					- Voucher Date
+					- Due Date
+	-->
+	<table class='header-table' cellspacing=0>
+		<thead>
+			<tr><td colspan=2><div><h1>Invoice</h1></div></td></tr>
+			<tr><td colspan=2><div style="height:15px"></div></td></tr>
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60%><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=39%><b>Name</b></td>
+						<td><script>doc.customer_name</script></td>
+					</tr>
+					<tr>
+						<td><b>Address</b></td>
+						<td><script>replace_newlines(doc.address_display)</script></td>
+					</tr>
+					<tr>
+						<td><b>Contact</b></td>
+						<td><script>doc.contact_display</script></td>
+					</tr>
+				</tbody></table></td>
+				<td><table width=100% cellspacing=0><tbody>
+					<tr class='imp-details'>
+						<td><b>Invoice No.</b></td>
+						<td><script>cur_frm.docname</script></td>
+					</tr>
+					<tr>
+						<td width=40%><b>Invoice Date</b></td>
+						<td><script>date.str_to_user(doc.voucher_date)</script></td>
+					<tr>					
+					<tr>
+						<td><b>Due Date</b></td>
+						<td><script>date.str_to_user(doc.due_date)</script></td>
+					<tr>					
+				</tbody></table></td>
+			</tr>
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+<div class='common page-body'>
+	<!-- 
+		Page Body will contain
+			+ table 2
+				- Sales Invoice Data
+	-->
+	<script>si_std.print_item_table()</script>
+</div>
+<div class='common page-footer'>
+	<!-- 
+		Page Footer will contain
+			+ table 3
+				- Terms and Conditions
+				- Total Rounded Amount Calculation
+				- Total Rounded Amount in Words
+	-->
+	<table class='footer-table' width=100% cellspacing=0>
+		<thead>
+			
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60% style='padding-right: 10px;'>
+					<b>Terms, Conditions &amp; Other Information:</b><br />
+					<script>doc.terms</script>
+				</td>
+				<td>
+					<table cellspacing=0 width=100%><tbody>
+						<tr>
+							<td>Net Total</td>
+							<td></td>
+							<td width=38%><script>
+								fmt_money(doc.net_total/doc.conversion_rate)
+							</script></td>
+						</tr>
+						<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>
+						<tr>
+							<td>Grand Total</td>
+							<td></td>
+							<td><script>
+								fmt_money(doc.grand_total_export)
+							</script></td>
+						</tr>
+						<tr style='font-weight: bold' class='imp-details'>
+							<td>Rounded Total</td>
+							<td><script>doc.currency</script></td>
+							<td><script>
+								fmt_money(doc.rounded_total_export)
+							</script></td>
+						</tr>
+					</tbody></table>
+					<br /><b>In Words</b><br />
+					<i><script>doc.in_words_export</script></i>
+				</td>
+			</tr>		
+		</tbody>
+		<tfoot>
+			<tr><td colspan=2><div></div></td><tr>
+		</tfoot>
+	</table>
+</div>
+
diff --git a/erpnext/patches/print_formats/SalesInvoiceSpartan.html b/erpnext/patches/print_formats/SalesInvoiceSpartan.html
new file mode 100644
index 0000000..6358a42
--- /dev/null
+++ b/erpnext/patches/print_formats/SalesInvoiceSpartan.html
@@ -0,0 +1,284 @@
+<!--
+	Sample Print Format for ERPNext
+	Please use at your own discretion
+	For suggestions and contributions:
+		https://github.com/webnotes/erpnext-print-templates
+
+	Freely usable under MIT license
+-->
+
+<!-- Style Settings -->
+<style>
+	/*
+		common style for whole page
+		This should include:
+		+ page size related settings
+		+ font family settings
+		+ line spacing settings
+	*/
+	@media screen {
+		body {
+			width: 8.3in;
+		}
+	}
+
+	html, body, div, span, td {
+		font-family: "Arial", sans-serif;
+		font-size: 12px;
+	}
+
+	body {
+		padding: 10px;
+		margin: auto;
+		font-size: 12px;
+		line-height: 150%;
+	}
+
+	.common {
+		font-family: "Arial", sans-serif !important;
+		font-size: 12px;
+		padding: 0px;
+	}
+
+	table {
+		width: 100% !important;
+		vertical-align: top;
+	}
+
+	table td {
+		padding: 2px 0px;
+	}
+
+	table, td {
+		border-collapse: collapse !important;
+		padding: 0px;
+		margin: 0px !important;
+	}
+	
+	table h1, h2, h3, h4, h5, h6 {
+		padding: 0px;
+		margin: 0px;
+	}
+
+	table.header-table td {
+		vertical-align: top;
+	}
+
+	table.header-table h3 {
+		color: gray;
+	}
+
+	table.header-table thead td {
+		padding: 5px;
+	}
+
+	table.header-table > thead,
+	table.header-table > tbody > tr > td,
+	table.footer-table > tbody > tr > td {
+		border: 1px solid black;
+		padding: 5px;
+	}
+
+	table.footer-table > tbody,
+	table.header-table > thead {
+		border-bottom: 3px solid black;
+	}
+
+	table.header-table > thead {
+		border-top: 3px solid black;
+	}
+
+	div.page-body table td:nth-child(6),
+	div.page-body table td:nth-child(7) {
+		text-align: right;
+	}
+
+	div.page-body td {
+		background-color: white !important;
+		border: 1px solid black !important;
+	}
+
+	table.footer-table td {
+		vertical-align: top;
+	}
+
+	table.footer-table td table td:nth-child(2),
+	table.footer-table td table td:nth-child(3) {
+		text-align: right;
+	}
+</style>
+
+
+<!-- Javascript -->
+<script>
+	si_std = {
+		print_item_table: function() {
+			var table = print_table(
+				'Receivable Voucher',
+				doc.name,
+				'entries',
+				'RV Detail',
+				[// Here specify the table columns to be displayed
+					'SR', 'item_name', 'description', 'qty', 'stock_uom',
+					'export_rate', 'export_amount'
+				],
+				[// Here specify the labels of column headings
+					'Sr', 'Item Name', 'Description', 'Qty',
+					'UoM', 'Basic Rate', 'Amount'
+				],
+				[// Here specify the column widths
+					'3%', '20%', '37%', '5%',
+					'5%', '15%', '15%'
+				]
+			);
+
+			// This code takes care of page breaks
+			if(table.appendChild) {
+				out = table.innerHTML;
+			} else {
+				out = '';
+				for(var i=0; i < (table.length-1); i++) {
+					out += table[i].innerHTML + 
+						'<div style = "page-break-after: always;" \
+						class = "page_break"></div>\
+						<div class="page-settings"></div>';
+				}
+				out += table[table.length-1].innerHTML;
+			}
+			return out;
+		},
+
+
+		print_other_charges: function(parent) {
+			console.log(parent);
+			var oc = getchildren('RV Tax Detail', doc.name, 'other_charges');
+			var rows = '<table width=100%>\n';
+			for(var i=0; i<oc.length; i++) {
+				rows +=
+					'<tr>\n' +
+						'\t<td>' + oc[i].description + '</td>\n' +
+						'\t<td></td>\n' +
+						'\t<td width=38%>' + fmt_money(oc[i].tax_amount) + '</td>\n' +
+					'</tr>\n';
+			}
+			return rows + '</table>\n';
+		}
+	};
+</script>
+
+
+<!-- Page Layout Settings -->
+<div class='common page-header'>
+	<!-- 
+		Page Header will contain
+			+ table 1
+				+ table 1a
+					- Name
+					- Address
+					- Contact
+					- Mobile No
+				+ table 1b
+					- Voucher Date
+					- Due Date
+	-->
+	<table class='header-table' cellspacing=0>
+		<thead>
+			<tr><td colspan=2><h1>Invoice</h1></td></tr>
+			<tr><td colspan=2><h3><script>cur_frm.docname</script></h3></td></tr>
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60%><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=39%><b>Name</b></td>
+						<td><script>doc.customer_name</script></td>
+					</tr>
+					<tr>
+						<td><b>Address</b></td>
+						<td><script>replace_newlines(doc.address_display)</script></td>
+					</tr>
+					<tr>
+						<td><b>Contact</b></td>
+						<td><script>doc.contact_display</script></td>
+					</tr>
+				</tbody></table></td>
+				<td><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=40%><b>Invoice Date</b></td>
+						<td><script>date.str_to_user(doc.voucher_date)</script></td>
+					<tr>					
+					<tr>
+						<td><b>Due Date</b></td>
+						<td><script>date.str_to_user(doc.due_date)</script></td>
+					<tr>					
+				</tbody></table></td>
+			</tr>
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+<div class='common page-body'>
+	<!-- 
+		Page Body will contain
+			+ table 2
+				- Sales Invoice Data
+	-->
+	<script>si_std.print_item_table()</script>
+</div>
+<div class='common page-footer'>
+	<!-- 
+		Page Footer will contain
+			+ table 3
+				- Terms and Conditions
+				- Total Rounded Amount Calculation
+				- Total Rounded Amount in Words
+	-->
+	<table class='footer-table' width=100% cellspacing=0>
+		<thead>
+			
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60% style='padding-right: 10px;'>
+					<b>Terms, Conditions &amp; Other Information:</b><br />
+					<script>doc.terms</script>
+				</td>
+				<td>
+					<table cellspacing=0 width=100%><tbody>
+						<tr>
+							<td>Net Total</td>
+							<td></td>
+							<td width=38%><script>
+								fmt_money(doc.net_total/doc.conversion_rate)
+							</script></td>
+						</tr>
+						<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>
+						<tr>
+							<td>Grand Total</td>
+							<td></td>
+							<td><script>
+								fmt_money(doc.grand_total_export)
+							</script></td>
+						</tr>
+						<tr style='font-weight: bold'>
+							<td>Rounded Total</td>
+							<td><script>doc.currency</script></td>
+							<td><script>
+								fmt_money(doc.rounded_total_export)
+							</script></td>
+						</tr>
+					</tbody></table>
+					<br /><b>In Words</b><br />
+					<i><script>doc.in_words_export</script></i>
+				</td>
+			</tr>		
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+
+
diff --git a/erpnext/patches/print_formats/SalesOrderClassic.html b/erpnext/patches/print_formats/SalesOrderClassic.html
new file mode 100644
index 0000000..fcf104e
--- /dev/null
+++ b/erpnext/patches/print_formats/SalesOrderClassic.html
@@ -0,0 +1,260 @@
+<!--
+	Sample Print Format for ERPNext
+	Please use at your own discretion
+	For suggestions and contributions:
+		https://github.com/webnotes/erpnext-print-templates
+
+	Freely usable under MIT license
+-->
+
+<!-- Style Settings -->
+<style>
+	/*
+		common style for whole page
+		This should include:
+		+ page size related settings
+		+ font family settings
+		+ line spacing settings
+	*/
+	@media screen {
+		body {
+			width: 8.3in;
+		}
+	}
+
+	html, body, div, span, td {
+		font-family: "Georgia", serif;
+		font-size: 12px;
+	}
+
+	body {
+		padding: 10px;
+		margin: auto;
+		font-size: 12px;
+		line-height: 150%;
+	}
+
+	.common {
+		font-family: "Georgia", serif !important;
+		font-size: 12px;
+		padding: 10px 0px;
+	}
+
+	table {
+		border-collapse: collapse;
+		width: 100%;
+		vertical-align: top;
+	}
+
+	table td {
+		padding: 2px 0px;
+	}
+	
+	table h1, h2, h3, h4, h5, h6 {
+		padding: 0px;
+		margin: 0px;
+	}
+
+	table.header-table td {
+		vertical-align: top;
+	}
+
+	table.header-table thead {
+		border-bottom: 1px solid black;
+	}
+
+	table.header-table h3 {
+		color: gray;
+	}
+
+	table.header-table thead td {
+		padding: 5px 0px;
+	}
+
+	div.page-body table td:nth-child(6),
+	div.page-body table td:nth-child(7) {
+		text-align: right;
+	}
+
+	table.footer-table td {
+		vertical-align: top;
+	}
+
+	table.footer-table td table td:nth-child(2),
+	table.footer-table td table td:nth-child(3) {
+		text-align: right;
+	}
+</style>
+
+
+<!-- Javascript -->
+<script>
+	si_std = {
+		print_item_table: function() {
+			var table = print_table(
+				'Sales Order',
+				doc.name,
+				'sales_order_details',
+				'Sales Order Detail',
+				[// Here specify the table columns to be displayed
+					'SR', 'item_code', 'description', 'qty', 'stock_uom',
+					'basic_rate', 'amount'
+				],
+				[// Here specify the labels of column headings
+					'Sr', 'Item Code', 'Description', 'Qty',
+					'UoM', 'Basic Rate', 'Amount'
+				],
+				[// Here specify the column widths
+					'3%', '20%', '37%', '5%',
+					'5%', '15%', '15%'
+				]
+			);
+
+			// This code takes care of page breaks
+			if(table.appendChild) {
+				out = table.innerHTML;
+			} else {
+				out = '';
+				for(var i=0; i < (table.length-1); i++) {
+					out += table[i].innerHTML + 
+						'<div style = "page-break-after: always;" \
+						class = "page_break"></div>\
+						<div class="page-settings"></div>';
+				}
+				out += table[table.length-1].innerHTML;
+			}
+			return out;
+		},
+
+
+		print_other_charges: function(parent) {
+			var oc = getchildren('RV Tax Detail', doc.name, 'other_charges');
+			var rows = '<table width=100%>\n';
+			for(var i=0; i<oc.length; i++) {
+				rows +=
+					'<tr>\n' +
+						'\t<td>' + oc[i].description + '</td>\n' +
+						'\t<td></td>\n' +
+						'\t<td width=38%>' + fmt_money(oc[i].tax_amount) + '</td>\n' +
+					'</tr>\n';
+			}
+			return rows + '</table>\n';
+		}
+	};
+</script>
+
+
+<!-- Page Layout Settings -->
+<div class='common page-header'>
+	<!-- 
+		Page Header will contain
+			+ table 1
+				+ table 1a
+					- Name
+					- Address
+					- Contact
+					- Mobile No
+				+ table 1b
+					- Voucher Date
+					- Due Date
+	-->
+	<table class='header-table' cellspacing=0>
+		<thead>
+			<tr><td><h1>Sales Order</h1></td></tr>
+			<tr><td><h3><script>cur_frm.docname</script></h3></td></tr>
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60%><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=39%><b>Name</b></td>
+						<td><script>doc.customer_name</script></td>
+					</tr>
+					<tr>
+						<td><b>Address</b></td>
+						<td><script>replace_newlines(doc.address_display)</script></td>
+					</tr>
+					<tr>
+						<td><b>Contact</b></td>
+						<td><script>doc.contact_display</script></td>
+					</tr>
+				</tbody></table></td>
+				<td><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=63%><b>Sales Order Date</b></td>
+						<td><script>date.str_to_user(doc.transaction_date)</script></td>
+					<tr>					
+					<tr>
+						<td><b>Delivery Date</b></td>
+						<td><script>date.str_to_user(doc.delivery_date)</script></td>
+					<tr>					
+				</tbody></table></td>
+			</tr>
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+<div class='common page-body'>
+	<!-- 
+		Page Body will contain
+			+ table 2
+				- Sales Invoice Data
+	-->
+	<script>si_std.print_item_table()</script>
+</div>
+<div class='common page-footer'>
+	<!-- 
+		Page Footer will contain
+			+ table 3
+				- Terms and Conditions
+				- Total Rounded Amount Calculation
+				- Total Rounded Amount in Words
+	-->
+	<table class='footer-table' width=100% cellspacing=0>
+		<thead>
+			
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60% style='padding-right: 10px;'>
+					<b>Terms, Conditions &amp; Other Information:</b><br />
+					<script>doc.terms</script>
+				</td>
+				<td>
+					<table cellspacing=0 width=100%><tbody>
+						<tr>
+							<td>Net Total</td>
+							<td></td>
+							<td width=38%><script>
+								fmt_money(doc.net_total)
+							</script></td>
+						</tr>
+						<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>
+						<tr>
+							<td>Grand Total</td>
+							<td></td>
+							<td><script>
+								fmt_money(doc.grand_total_export)
+							</script></td>
+						</tr>
+						<tr style='font-weight: bold'>
+							<td>Rounded Total</td>
+							<td><script>doc.currency</script></td>
+							<td><script>
+								fmt_money(doc.rounded_total_export)
+							</script></td>
+						</tr>
+					</tbody></table>
+					<br /><b>In Words</b><br />
+					<i><script>doc.in_words_export</script></i>
+				</td>
+			</tr>		
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+
diff --git a/erpnext/patches/print_formats/SalesOrderModern.html b/erpnext/patches/print_formats/SalesOrderModern.html
new file mode 100644
index 0000000..7013e5d
--- /dev/null
+++ b/erpnext/patches/print_formats/SalesOrderModern.html
@@ -0,0 +1,287 @@
+<!--
+	Sample Print Format for ERPNext
+	Please use at your own discretion
+	For suggestions and contributions:
+		https://github.com/webnotes/erpnext-print-templates
+
+	Freely usable under MIT license
+-->
+
+<!-- Style Settings -->
+<style>
+	/*
+		common style for whole page
+		This should include:
+		+ page size related settings
+		+ font family settings
+		+ line spacing settings
+	*/
+	@media screen {
+		body {
+			width: 8.3in;
+		}
+	}
+
+	html, body, div, span, td {
+		font-family: "Helvetica", "Arial", sans-serif;
+		font-size: 12px;
+	}
+
+	body {
+		padding: 10px;
+		margin: auto;
+		font-size: 12px;
+		line-height: 150%;
+	}
+
+	.common {
+		font-family: "Helvetica", "Arial", sans-serif !important;
+		font-size: 12px;
+		padding: 10px 0px;
+	}
+
+	table {
+		border-collapse: collapse;
+		width: 100%;
+		vertical-align: top;
+		border-style: none !important;
+	}
+
+	table td {
+		padding: 2px 0px;
+		border-style: none !important;
+	}
+	
+	table h1, h2, h3, h4, h5, h6 {
+		padding: 0px;
+		margin: 0px;
+	}
+
+	table.header-table td {
+		vertical-align: top;
+	}
+
+	table.header-table h1 {
+		text-transform: uppercase;
+		color: white;
+		font-size: 55px;
+		font-style: italic;
+	}
+
+	table.header-table thead tr:nth-child(1) div {
+		height: 24px;
+		background-color: #696969;
+		vertical-align: middle;
+		padding: 12px 0px 0px 0px;
+		width: 100%;
+	}
+
+	div.page-body table td:nth-child(6),
+	div.page-body table td:nth-child(7) {
+		text-align: right;
+	}
+
+	div.page-body table tr td {
+		background-color: #DCDCDC !important;
+	}
+
+	div.page-body table tr:nth-child(1) td {
+		background-color: #696969 !important;
+		color: white !important;
+	}
+
+	table.footer-table td {
+		vertical-align: top;
+	}
+
+	table.footer-table td table td:nth-child(2),
+	table.footer-table td table td:nth-child(3) {
+		text-align: right;
+	}
+
+	table.footer-table tfoot td {
+		background-color: #696969;
+		height: 10px;
+	}
+
+	.imp-details {
+		background-color: #DCDCDC;
+	}
+</style>
+
+
+<!-- Javascript -->
+<script>
+	si_std = {
+		print_item_table: function() {
+			var table = print_table(
+				'Sales Order',
+				doc.name,
+				'sales_order_details',
+				'Sales Order Detail',
+				[// Here specify the table columns to be displayed
+					'SR', 'item_code', 'description', 'qty', 'stock_uom',
+					'basic_rate', 'amount'
+				],
+				[// Here specify the labels of column headings
+					'Sr', 'Item Code', 'Description', 'Qty',
+					'UoM', 'Basic Rate', 'Amount'
+				],
+				[// Here specify the column widths
+					'3%', '20%', '37%', '5%',
+					'5%', '15%', '15%'
+				]
+			);
+
+			// This code takes care of page breaks
+			if(table.appendChild) {
+				out = table.innerHTML;
+			} else {
+				out = '';
+				for(var i=0; i < (table.length-1); i++) {
+					out += table[i].innerHTML + 
+						'<div style = "page-break-after: always;" \
+						class = "page_break"></div>\
+						<div class="page-settings"></div>';
+				}
+				out += table[table.length-1].innerHTML;
+			}
+			return out;
+		},
+
+
+		print_other_charges: function(parent) {
+			var oc = getchildren('RV Tax Detail', doc.name, 'other_charges');
+			var rows = '<table width=100%>\n';
+			for(var i=0; i<oc.length; i++) {
+				rows +=
+					'<tr>\n' +
+						'\t<td>' + oc[i].description + '</td>\n' +
+						'\t<td></td>\n' +
+						'\t<td width=38%>' + fmt_money(oc[i].tax_amount) + '</td>\n' +
+					'</tr>\n';
+			}
+			return rows + '</table>\n';
+		}
+	};
+</script>
+
+
+<!-- Page Layout Settings -->
+<div class='common page-header'>
+	<!-- 
+		Page Header will contain
+			+ table 1
+				+ table 1a
+					- Name
+					- Address
+					- Contact
+					- Mobile No
+				+ table 1b
+					- Voucher Date
+					- Due Date
+	-->
+	<table class='header-table' cellspacing=0>
+		<thead>
+			<tr><td colspan=2><div><h1>Sales Order</h1></div></td></tr>
+			<tr><td colspan=2><div style="height:15px"></div></td></tr>
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60%><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=39%><b>Name</b></td>
+						<td><script>doc.customer_name</script></td>
+					</tr>
+					<tr>
+						<td><b>Address</b></td>
+						<td><script>replace_newlines(doc.address_display)</script></td>
+					</tr>
+					<tr>
+						<td><b>Contact</b></td>
+						<td><script>doc.contact_display</script></td>
+					</tr>
+				</tbody></table></td>
+				<td><table width=100% cellspacing=0><tbody>
+					<tr class='imp-details'>
+						<td><b>Sales Order No.</b></td>
+						<td><script>cur_frm.docname</script></td>
+					</tr>
+					<tr>
+						<td width=63%><b>Sales Order Date</b></td>
+						<td><script>date.str_to_user(doc.transaction_date)</script></td>
+					<tr>					
+					<tr>
+						<td><b>Delivery Date</b></td>
+						<td><script>date.str_to_user(doc.delivery_date)</script></td>
+					<tr>					
+				</tbody></table></td>
+			</tr>
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+<div class='common page-body'>
+	<!-- 
+		Page Body will contain
+			+ table 2
+				- Sales Invoice Data
+	-->
+	<script>si_std.print_item_table()</script>
+</div>
+<div class='common page-footer'>
+	<!-- 
+		Page Footer will contain
+			+ table 3
+				- Terms and Conditions
+				- Total Rounded Amount Calculation
+				- Total Rounded Amount in Words
+	-->
+	<table class='footer-table' width=100% cellspacing=0>
+		<thead>
+			
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60% style='padding-right: 10px;'>
+					<b>Terms, Conditions &amp; Other Information:</b><br />
+					<script>doc.terms</script>
+				</td>
+				<td>
+					<table cellspacing=0 width=100%><tbody>
+						<tr>
+							<td>Net Total</td>
+							<td></td>
+							<td width=38%><script>
+								fmt_money(doc.net_total)
+							</script></td>
+						</tr>
+						<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>
+						<tr>
+							<td>Grand Total</td>
+							<td></td>
+							<td><script>
+								fmt_money(doc.grand_total_export)
+							</script></td>
+						</tr>
+						<tr style='font-weight: bold' class='imp-details'>
+							<td>Rounded Total</td>
+							<td><script>doc.currency</script></td>
+							<td><script>
+								fmt_money(doc.rounded_total_export)
+							</script></td>
+						</tr>
+					</tbody></table>
+					<br /><b>In Words</b><br />
+					<i><script>doc.in_words_export</script></i>
+				</td>
+			</tr>		
+		</tbody>
+		<tfoot>
+			<tr><td colspan=2><div></div></td><tr>
+		</tfoot>
+	</table>
+</div>
+
diff --git a/erpnext/patches/print_formats/SalesOrderSpartan.html b/erpnext/patches/print_formats/SalesOrderSpartan.html
new file mode 100644
index 0000000..59ed6a7
--- /dev/null
+++ b/erpnext/patches/print_formats/SalesOrderSpartan.html
@@ -0,0 +1,283 @@
+<!--
+	Sample Print Format for ERPNext
+	Please use at your own discretion
+	For suggestions and contributions:
+		https://github.com/webnotes/erpnext-print-templates
+
+	Freely usable under MIT license
+-->
+
+<!-- Style Settings -->
+<style>
+	/*
+		common style for whole page
+		This should include:
+		+ page size related settings
+		+ font family settings
+		+ line spacing settings
+	*/
+	@media screen {
+		body {
+			width: 8.3in;
+		}
+	}
+
+	html, body, div, span, td {
+		font-family: "Arial", sans-serif;
+		font-size: 12px;
+	}
+
+	body {
+		padding: 10px;
+		margin: auto;
+		font-size: 12px;
+		line-height: 150%;
+	}
+
+	.common {
+		font-family: "Arial", sans-serif !important;
+		font-size: 12px;
+		padding: 0px;
+	}
+
+	table {
+		width: 100% !important;
+		vertical-align: top;
+	}
+
+	table td {
+		padding: 2px 0px;
+	}
+
+	table, td {
+		border-collapse: collapse !important;
+		padding: 0px;
+		margin: 0px !important;
+	}
+	
+	table h1, h2, h3, h4, h5, h6 {
+		padding: 0px;
+		margin: 0px;
+	}
+
+	table.header-table td {
+		vertical-align: top;
+	}
+
+	table.header-table h3 {
+		color: gray;
+	}
+
+	table.header-table thead td {
+		padding: 5px;
+	}
+
+	table.header-table > thead,
+	table.header-table > tbody > tr > td,
+	table.footer-table > tbody > tr > td {
+		border: 1px solid black;
+		padding: 5px;
+	}
+
+	table.footer-table > tbody,
+	table.header-table > thead {
+		border-bottom: 3px solid black;
+	}
+
+	table.header-table > thead {
+		border-top: 3px solid black;
+	}
+
+	div.page-body table td:nth-child(6),
+	div.page-body table td:nth-child(7) {
+		text-align: right;
+	}
+
+	div.page-body td {
+		background-color: white !important;
+		border: 1px solid black !important;
+	}
+
+	table.footer-table td {
+		vertical-align: top;
+	}
+
+	table.footer-table td table td:nth-child(2),
+	table.footer-table td table td:nth-child(3) {
+		text-align: right;
+	}
+</style>
+
+
+<!-- Javascript -->
+<script>
+	si_std = {
+		print_item_table: function() {
+			var table = print_table(
+				'Sales Order',
+				doc.name,
+				'sales_order_details',
+				'Sales Order Detail',
+				[// Here specify the table columns to be displayed
+					'SR', 'item_code', 'description', 'qty', 'stock_uom',
+					'basic_rate', 'amount'
+				],
+				[// Here specify the labels of column headings
+					'Sr', 'Item Code', 'Description', 'Qty',
+					'UoM', 'Basic Rate', 'Amount'
+				],
+				[// Here specify the column widths
+					'3%', '20%', '37%', '5%',
+					'5%', '15%', '15%'
+				]
+			);
+
+			// This code takes care of page breaks
+			if(table.appendChild) {
+				out = table.innerHTML;
+			} else {
+				out = '';
+				for(var i=0; i < (table.length-1); i++) {
+					out += table[i].innerHTML + 
+						'<div style = "page-break-after: always;" \
+						class = "page_break"></div>\
+						<div class="page-settings"></div>';
+				}
+				out += table[table.length-1].innerHTML;
+			}
+			return out;
+		},
+
+
+		print_other_charges: function(parent) {
+			var oc = getchildren('RV Tax Detail', doc.name, 'other_charges');
+			var rows = '<table width=100%>\n';
+			for(var i=0; i<oc.length; i++) {
+				rows +=
+					'<tr>\n' +
+						'\t<td>' + oc[i].description + '</td>\n' +
+						'\t<td></td>\n' +
+						'\t<td width=38%>' + fmt_money(oc[i].tax_amount) + '</td>\n' +
+					'</tr>\n';
+			}
+			return rows + '</table>\n';
+		}
+	};
+</script>
+
+
+<!-- Page Layout Settings -->
+<div class='common page-header'>
+	<!-- 
+		Page Header will contain
+			+ table 1
+				+ table 1a
+					- Name
+					- Address
+					- Contact
+					- Mobile No
+				+ table 1b
+					- Voucher Date
+					- Due Date
+	-->
+	<table class='header-table' cellspacing=0>
+		<thead>
+			<tr><td colspan=2><h1>Sales Order</h1></td></tr>
+			<tr><td colspan=2><h3><script>cur_frm.docname</script></h3></td></tr>
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60%><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=39%><b>Name</b></td>
+						<td><script>doc.customer_name</script></td>
+					</tr>
+					<tr>
+						<td><b>Address</b></td>
+						<td><script>replace_newlines(doc.address_display)</script></td>
+					</tr>
+					<tr>
+						<td><b>Contact</b></td>
+						<td><script>doc.contact_display</script></td>
+					</tr>
+				</tbody></table></td>
+				<td><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=63%><b>Sales Order Date</b></td>
+						<td><script>date.str_to_user(doc.transaction_date)</script></td>
+					<tr>					
+					<tr>
+						<td><b>Delivery Date</b></td>
+						<td><script>date.str_to_user(doc.delivery_date)</script></td>
+					<tr>					
+				</tbody></table></td>
+			</tr>
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+<div class='common page-body'>
+	<!-- 
+		Page Body will contain
+			+ table 2
+				- Sales Invoice Data
+	-->
+	<script>si_std.print_item_table()</script>
+</div>
+<div class='common page-footer'>
+	<!-- 
+		Page Footer will contain
+			+ table 3
+				- Terms and Conditions
+				- Total Rounded Amount Calculation
+				- Total Rounded Amount in Words
+	-->
+	<table class='footer-table' width=100% cellspacing=0>
+		<thead>
+			
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60% style='padding-right: 10px;'>
+					<b>Terms, Conditions &amp; Other Information:</b><br />
+					<script>doc.terms</script>
+				</td>
+				<td>
+					<table cellspacing=0 width=100%><tbody>
+						<tr>
+							<td>Net Total</td>
+							<td></td>
+							<td width=38%><script>
+								fmt_money(doc.net_total)
+							</script></td>
+						</tr>
+						<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>
+						<tr>
+							<td>Grand Total</td>
+							<td></td>
+							<td><script>
+								fmt_money(doc.grand_total_export)
+							</script></td>
+						</tr>
+						<tr style='font-weight: bold'>
+							<td>Rounded Total</td>
+							<td><script>doc.currency</script></td>
+							<td><script>
+								fmt_money(doc.rounded_total_export)
+							</script></td>
+						</tr>
+					</tbody></table>
+					<br /><b>In Words</b><br />
+					<i><script>doc.in_words_export</script></i>
+				</td>
+			</tr>		
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+
+
diff --git a/erpnext/patches/project_patch.py b/erpnext/patches/project_patch.py
new file mode 100644
index 0000000..c5473a0
--- /dev/null
+++ b/erpnext/patches/project_patch.py
@@ -0,0 +1,18 @@
+def execute():
+	import webnotes
+	from webnotes.modules.module_manager import reload_doc
+	sql = webnotes.conn.sql
+	
+	# Reload item table
+	reload_doc('accounts', 'doctype', 'pv_detail')
+	reload_doc('buying', 'doctype', 'po_detail')
+	reload_doc('stock', 'doctype', 'purchase_receipt_detail')
+	
+	# copy project value from parent to child
+	sql("update `tabPO Detail` t1, `tabPurchase Order` t2 set t1.project_name = t2.project_name where t1.parent = t2.name and ifnull(t1.project_name, '') = ''")
+	sql("update `tabPV Detail` t1, `tabPayable Voucher` t2 set t1.project_name = t2.project_name where t1.parent = t2.name and ifnull(t1.project_name, '') = ''")
+	sql("update `tabPurchase Receipt Detail` t1, `tabPurchase Receipt` t2 set t1.project_name = t2.project_name where t1.parent = t2.name and ifnull(t1.project_name, '') = ''")
+	
+	# delete project from parent
+	sql("delete from `tabDocField` where fieldname = 'project_name' and parent in ('Purchase Order', 'Purchase Receipt', 'Payable Voucher')")
+
diff --git a/erpnext/patches/reload_bom.py b/erpnext/patches/reload_bom.py
new file mode 100644
index 0000000..f050f3c
--- /dev/null
+++ b/erpnext/patches/reload_bom.py
@@ -0,0 +1,5 @@
+def execute():
+	import webnotes
+	from webnotes.modules.module_manager import reload_doc
+
+	reload_doc('production', 'doctype', 'bill_of_materials')
diff --git a/erpnext/patches/reload_flat_bom.py b/erpnext/patches/reload_flat_bom.py
new file mode 100644
index 0000000..b493610
--- /dev/null
+++ b/erpnext/patches/reload_flat_bom.py
@@ -0,0 +1,6 @@
+def execute():
+	from webnotes.modules import webnotes
+	from webnotes.modules.module_manager import reload_doc
+
+	reload_doc('production', 'doctype', 'flat_bom_detail')
+	reload_doc('production', 'doctype', 'bom_material')
diff --git a/erpnext/patches/reload_lc_wizard.py b/erpnext/patches/reload_lc_wizard.py
new file mode 100644
index 0000000..6b8565e
--- /dev/null
+++ b/erpnext/patches/reload_lc_wizard.py
@@ -0,0 +1,9 @@
+def execute():
+	import webnotes
+	from webnotes.modules.module_manager import reload_doc
+	from webnotes.model import delete_doc
+
+	delete_doc('DocType', 'Landed Cost Wizard')
+	delete_doc('DocType', 'LC PR Detail')
+	reload_doc('stock', 'doctype', 'landed_cost_wizard')
+	reload_doc('stock', 'doctype', 'lc_pr_detail')
diff --git a/erpnext/patches/reload_print_format.py b/erpnext/patches/reload_print_format.py
new file mode 100644
index 0000000..e3c6adf
--- /dev/null
+++ b/erpnext/patches/reload_print_format.py
@@ -0,0 +1,17 @@
+def execute():
+	import webnotes
+	from webnotes.modules.module_manager import reload_doc
+	from webnotes.model.doc import addchild
+	from webnotes.model.code import get_obj
+	reload_doc('stock', 'Print Format', 'Delivery Note Packing List Wise')
+	reload_doc('stock', 'Print Format', 'Purchase Receipt Format')
+	reload_doc('accounts', 'Print Format', 'Payment Receipt Voucher')
+	reload_doc('accounts', 'Print Format', 'POS Invoice')
+	reload_doc('accounts', 'Print Format', 'Form 16A Print Format')
+	reload_doc('accounts', 'Print Format', 'Cheque Printing Format')
+	
+	if not webnotes.conn.sql("select format from `tabDocFormat` where name = 'POS Invoice' and parent = 'Receivable Voucher'"):		
+		dt_obj = get_obj('DocType', 'Receivable Voucher', with_children = 1)
+		ch = addchild(dt_obj.doc, 'formats', 'DocFormat', 1)
+		ch.format = 'POS Invoice'
+		ch.save(1)
diff --git a/erpnext/patches/repost_account_bal.py b/erpnext/patches/repost_account_bal.py
new file mode 100644
index 0000000..34edc04
--- /dev/null
+++ b/erpnext/patches/repost_account_bal.py
@@ -0,0 +1,31 @@
+
+def execute():
+	import webnotes
+	sql = webnotes.conn.sql
+	from webnotes.model.code import get_obj
+	
+	# stop session
+	webnotes.conn.set_global('__session_status', 'stop')
+	webnotes.conn.set_global('__session_status_message', 'Patch is running in background. \nPlease wait until it completed...\n')
+	
+	webnotes.conn.commit()
+	webnotes.conn.begin()
+	
+	# repost
+	comp = sql("select name from tabCompany where docstatus!=2")
+	fy = sql("select name from `tabFiscal Year` order by year_start_date asc")
+	for c in comp:
+		prev_fy = ''
+		for f in fy:
+			fy_obj = get_obj('Fiscal Year', f[0])
+			fy_obj.doc.past_year = prev_fy
+			fy_obj.doc.company = c[0]
+			fy_obj.doc.save()
+			fy_obj.repost()
+			prev_fy = f[0]
+			sql("commit")
+			sql("start transaction")
+
+	# free session
+	webnotes.conn.set_global('__session_status', '')
+	webnotes.conn.set_global('__session_status_message', '')
diff --git a/erpnext/patches/sal_man_patch.py b/erpnext/patches/sal_man_patch.py
new file mode 100644
index 0000000..aef6251
--- /dev/null
+++ b/erpnext/patches/sal_man_patch.py
@@ -0,0 +1,8 @@
+
+def execute():
+	import webnotes
+	from webnotes.modules.module_manager import reload_doc
+	sql = webnotes.conn.sql
+
+	reload_doc('hr', 'doctype', 'salary_manager')
+	sql("delete from `tabDocField` where parent = 'Salary Manager' and fieldname = 'employment_type'")
diff --git a/erpnext/production/doctype/bill_of_materials/bill_of_materials.py b/erpnext/production/doctype/bill_of_materials/bill_of_materials.py
index 9727a63..a62e4f2 100644
--- a/erpnext/production/doctype/bill_of_materials/bill_of_materials.py
+++ b/erpnext/production/doctype/bill_of_materials/bill_of_materials.py
@@ -32,9 +32,10 @@
 
   #----------- Client Trigger function ----------
   def get_item_detail(self, item_code):
-    item = sql("select description from `tabItem` where (ifnull(end_of_life,'')='' or end_of_life = '0000-00-00' or end_of_life >  now()) and name = %s",item_code , as_dict =1)
+    item = sql("select description, stock_uom from `tabItem` where (ifnull(end_of_life,'')='' or end_of_life = '0000-00-00' or end_of_life >  now()) and name = %s",item_code , as_dict =1)
     ret={
-      'description'   : item and item[0]['description'] or ''
+      'description'   : item and item[0]['description'] or '',
+      'uom'			  : item and item[0]['stock_uom'] or ''
     }
     return ret
 
@@ -411,8 +412,8 @@
     if val_method == 'FIFO':
       if warehouse:
         bin_obj = get_obj('Warehouse',warehouse).get_bin(item_code)
-        prev_sle = bin_obj.get_prev_sle('',nowdate(), (now().split(' ')[1])[:-3])
-        fcfs_stack = prev_sle and (prev_sle[0][3] and eval(prev_sle[0][3]) or []) or []
+        prev_sle = bin_obj.get_prev_sle(nowdate(), (now().split(' ')[1])[:-3])
+        fcfs_stack = prev_sle and prev_sle['fcfs_stack'] and eval(prev_sle['fcfs_stack']) or []
       else:
         prev_sle = sql("select fcfs_stack from `tabStock Ledger Entry` where item_code = '%s' and posting_date <= '%s' order by posting_date DESC, posting_time DESC, name DESC limit 1" % (item_code, nowdate()))
         fcfs_stack = prev_sle and (prev_sle[0][0] and eval(prev_sle[0][0]) or []) or []
@@ -499,20 +500,11 @@
   def get_child_flat_bom_items(self, item, d):
 
     child_flat_bom_items=[]
-#    if item and (item[0]['is_sub_contracted_item'] == 'Yes' or item[0]['is_pro_applicable'] == 'Yes'):
 
-    child_flat_bom_items = sql("select item_code, description, qty_consumed_per_unit, stock_uom, moving_avg_rate, last_purchase_rate, standard_rate, '%s' as parent_bom, bom_mat_no, 'No' as is_pro_applicable from `tabFlat BOM Detail` where parent = '%s' and is_pro_applicable = 'No' and docstatus = 1" % ( d.bom_no, cstr(d.bom_no)))
+    child_flat_bom_items = sql("select fbom.item_code, fbom.description, fbom.qty_consumed_per_unit, fbom.stock_uom, fbom.moving_avg_rate, fbom.last_purchase_rate, fbom.standard_rate, '%s' as parent_bom, fbom.bom_mat_no, 'No' as is_pro_applicable from `tabFlat BOM Detail` fbom,`tabBill Of Materials` bom where fbom.parent=bom.name and fbom.parent = '%s' and fbom.is_pro_applicable = 'No' and bom.docstatus = 1" % ( d.bom_no, cstr(d.bom_no)))
     self.cur_flat_bom_items.append([d.item_code, d.description, flt(d.qty), d.stock_uom, flt(d.moving_avg_rate), flt(d.amount_as_per_mar), flt(d.last_purchase_rate), flt(d.amount_as_per_lpr), flt(d.standard_rate), flt(d.amount_as_per_sr), flt(d.qty_consumed_per_unit), (item[0]['is_sub_contracted_item'] == 'Yes') and d.parent or d.bom_no, d.name, (item[0]['is_sub_contracted_item'] == 'Yes') and 'No' or 'Yes'])
     return child_flat_bom_items
 
-#        else:
-#      child_flat_bom_items = sql("select item_code, description, qty_consumed_per_unit, stock_uom, moving_avg_rate, last_purchase_rate, standard_rate, if(parent_bom = '%s', '%s', parent_bom) as parent_bom, bom_mat_no, is_pro_applicable from `tabFlat BOM Detail` where parent = '%s' and docstatus = 1" % ( d.bom_no, d.parent, cstr(d.bom_no)))
-
-#    if not child_flat_bom_items:
-#      msgprint("Please Submit Child BOM := %s first." % cstr(d.bom_no))
-#      raise Exception
-#    else:"""
-
 
   # Get Current Flat BOM Items
   # -----------------------------
diff --git a/erpnext/production/doctype/bill_of_materials/bill_of_materials.txt b/erpnext/production/doctype/bill_of_materials/bill_of_materials.txt
index 2590817..3713667 100644
--- a/erpnext/production/doctype/bill_of_materials/bill_of_materials.txt
+++ b/erpnext/production/doctype/bill_of_materials/bill_of_materials.txt
@@ -5,14 +5,14 @@
 	{
 		'creation': '2010-08-08 17:08:52',
 		'docstatus': 0,
-		'modified': '2010-12-20 17:27:58',
-		'modified_by': 'umair@iwebnotes.com',
+		'modified': '2011-11-09 12:47:50',
+		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
 
 	# These values are common for all DocType
 	{
-		'_last_update': '1309508837',
+		'_last_update': '1319016431',
 		'allow_attach': 0,
 		'allow_copy': 0,
 		'allow_email': 0,
@@ -20,6 +20,7 @@
 		'allow_rename': 0,
 		'allow_trash': 1,
 		'colour': 'White:FFF',
+		'default_print_format': 'Standard',
 		'doctype': 'DocType',
 		'document_type': 'Master',
 		'hide_heading': 0,
@@ -35,7 +36,7 @@
 		'server_code_error': ' ',
 		'show_in_menu': 0,
 		'subject': '%(item)s',
-		'version': 170
+		'version': 171
 	},
 
 	# These values are common for all DocField
@@ -49,6 +50,7 @@
 
 	# These values are common for all DocPerm
 	{
+		'amend': 0,
 		'doctype': 'DocPerm',
 		'name': '__common__',
 		'parent': 'Bill Of Materials',
@@ -68,7 +70,6 @@
 		'cancel': 1,
 		'create': 1,
 		'doctype': 'DocPerm',
-		'idx': 1,
 		'permlevel': 0,
 		'role': 'System Manager',
 		'submit': 1,
@@ -77,10 +78,13 @@
 
 	# DocPerm
 	{
+		'cancel': 0,
+		'create': 0,
 		'doctype': 'DocPerm',
-		'idx': 2,
 		'permlevel': 1,
-		'role': 'System Manager'
+		'role': 'System Manager',
+		'submit': 0,
+		'write': 0
 	},
 
 	# DocPerm
@@ -88,7 +92,6 @@
 		'cancel': 1,
 		'create': 1,
 		'doctype': 'DocPerm',
-		'idx': 3,
 		'permlevel': 0,
 		'role': 'Production Manager',
 		'submit': 1,
@@ -97,10 +100,13 @@
 
 	# DocPerm
 	{
+		'cancel': 0,
+		'create': 0,
 		'doctype': 'DocPerm',
-		'idx': 4,
 		'permlevel': 1,
-		'role': 'Production Manager'
+		'role': 'Production Manager',
+		'submit': 0,
+		'write': 0
 	},
 
 	# DocPerm
@@ -108,7 +114,6 @@
 		'cancel': 1,
 		'create': 1,
 		'doctype': 'DocPerm',
-		'idx': 5,
 		'permlevel': 0,
 		'role': 'Production User',
 		'submit': 1,
@@ -117,10 +122,13 @@
 
 	# DocPerm
 	{
+		'cancel': 0,
+		'create': 0,
 		'doctype': 'DocPerm',
-		'idx': 6,
 		'permlevel': 1,
-		'role': 'Production User'
+		'role': 'Production User',
+		'submit': 0,
+		'write': 0
 	},
 
 	# DocField
@@ -128,7 +136,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'trash_reason',
 		'fieldtype': 'Small Text',
-		'idx': 1,
 		'label': 'Trash Reason',
 		'oldfieldname': 'trash_reason',
 		'oldfieldtype': 'Small Text',
@@ -139,7 +146,6 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'HTML',
-		'idx': 2,
 		'label': 'TreeView1',
 		'oldfieldtype': 'HTML',
 		'options': '<div style=\'border: 1px solid #CCF; padding: 8px;margin-bottom: 8px;\'><div class=\'link_type\' onclick=\'loadpage("Bill of Materials"); \'>Go To BOM Tree View</div></div>',
@@ -150,7 +156,6 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
-		'idx': 3,
 		'oldfieldtype': 'Section Break',
 		'options': 'Simple',
 		'permlevel': 0
@@ -162,7 +167,6 @@
 		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldtype': 'Button',
-		'idx': 4,
 		'label': 'Set as Default BOM',
 		'oldfieldtype': 'Button',
 		'permlevel': 0,
@@ -173,7 +177,6 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Column Break',
-		'idx': 5,
 		'oldfieldtype': 'Column Break',
 		'permlevel': 0
 	},
@@ -185,7 +188,6 @@
 		'doctype': 'DocField',
 		'fieldtype': 'Button',
 		'hidden': 1,
-		'idx': 6,
 		'label': 'Activate BOM',
 		'oldfieldtype': 'Button',
 		'permlevel': 0,
@@ -199,7 +201,6 @@
 		'doctype': 'DocField',
 		'fieldtype': 'Button',
 		'hidden': 1,
-		'idx': 7,
 		'label': 'Inactivate BOM',
 		'oldfieldtype': 'Button',
 		'permlevel': 0,
@@ -210,7 +211,6 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
-		'idx': 8,
 		'label': 'Details',
 		'oldfieldtype': 'Section Break',
 		'permlevel': 0
@@ -223,7 +223,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'item',
 		'fieldtype': 'Link',
-		'idx': 9,
 		'in_filter': 1,
 		'label': 'Item',
 		'oldfieldname': 'item',
@@ -240,7 +239,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'description',
 		'fieldtype': 'Text',
-		'idx': 10,
 		'label': 'Description',
 		'oldfieldname': 'description',
 		'oldfieldtype': 'Text',
@@ -255,7 +253,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'quantity',
 		'fieldtype': 'Currency',
-		'idx': 11,
 		'label': 'Quantity',
 		'oldfieldname': 'quantity',
 		'oldfieldtype': 'Currency',
@@ -265,11 +262,20 @@
 
 	# DocField
 	{
+		'doctype': 'DocField',
+		'fieldname': 'uom',
+		'fieldtype': 'Select',
+		'label': 'UOM',
+		'options': 'link:UOM',
+		'permlevel': 1
+	},
+
+	# DocField
+	{
 		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldname': 'is_active',
 		'fieldtype': 'Select',
-		'idx': 12,
 		'label': 'Is Active',
 		'no_copy': 1,
 		'oldfieldname': 'is_active',
@@ -285,7 +291,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'is_default',
 		'fieldtype': 'Check',
-		'idx': 13,
 		'label': 'Is Default',
 		'no_copy': 1,
 		'oldfieldname': 'is_default',
@@ -299,7 +304,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'project_name',
 		'fieldtype': 'Link',
-		'idx': 14,
 		'in_filter': 1,
 		'label': 'Project Name',
 		'oldfieldname': 'project_name',
@@ -313,7 +317,6 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
-		'idx': 15,
 		'label': 'Operations',
 		'oldfieldtype': 'Section Break',
 		'permlevel': 0
@@ -326,7 +329,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'bom_operations',
 		'fieldtype': 'Table',
-		'idx': 16,
 		'label': 'BOM Operations',
 		'oldfieldname': 'bom_operations',
 		'oldfieldtype': 'Table',
@@ -338,7 +340,6 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
-		'idx': 17,
 		'label': 'Materials',
 		'oldfieldtype': 'Section Break',
 		'permlevel': 0
@@ -351,7 +352,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'bom_materials',
 		'fieldtype': 'Table',
-		'idx': 18,
 		'label': 'BOM Material',
 		'oldfieldname': 'bom_materials',
 		'oldfieldtype': 'Table',
@@ -363,7 +363,6 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
-		'idx': 19,
 		'label': 'Costing',
 		'oldfieldtype': 'Section Break',
 		'permlevel': 0
@@ -375,7 +374,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'remarks',
 		'fieldtype': 'Text',
-		'idx': 20,
 		'label': 'Remarks',
 		'no_copy': 1,
 		'oldfieldname': 'remarks',
@@ -388,7 +386,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'cost_as_per_mar',
 		'fieldtype': 'Currency',
-		'idx': 21,
 		'label': 'Cost As Per Valuation Rate',
 		'oldfieldname': 'cost_as_per_mar',
 		'oldfieldtype': 'Currency',
@@ -400,7 +397,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'cost_as_per_lpr',
 		'fieldtype': 'Currency',
-		'idx': 22,
 		'label': 'Cost As Per LPR',
 		'oldfieldname': 'cost_as_per_lpr',
 		'oldfieldtype': 'Currency',
@@ -412,7 +408,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'cost_as_per_sr',
 		'fieldtype': 'Currency',
-		'idx': 23,
 		'label': 'Cost As Per SR',
 		'oldfieldname': 'cost_as_per_sr',
 		'oldfieldtype': 'Currency',
@@ -425,7 +420,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'cost_as_on',
 		'fieldtype': 'Data',
-		'idx': 24,
 		'label': 'Cost as on',
 		'oldfieldname': 'cost_as_on',
 		'oldfieldtype': 'Data',
@@ -437,7 +431,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'dir_mat_as_per_mar',
 		'fieldtype': 'Currency',
-		'idx': 25,
 		'label': 'Direct Material As Per Valuation',
 		'oldfieldname': 'dir_mat_as_per_mar',
 		'oldfieldtype': 'Currency',
@@ -449,7 +442,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'dir_mat_as_per_lpr',
 		'fieldtype': 'Currency',
-		'idx': 26,
 		'label': 'Direct Material As Per LPR',
 		'oldfieldname': 'dir_mat_as_per_lpr',
 		'oldfieldtype': 'Currency',
@@ -461,7 +453,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'dir_mat_as_per_sr',
 		'fieldtype': 'Currency',
-		'idx': 27,
 		'label': 'Direct Material As Per SR',
 		'oldfieldname': 'dir_mat_as_per_sr',
 		'oldfieldtype': 'Currency',
@@ -473,7 +464,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'operating_cost',
 		'fieldtype': 'Currency',
-		'idx': 28,
 		'label': 'Operating Cost',
 		'oldfieldname': 'operating_cost',
 		'oldfieldtype': 'Currency',
@@ -485,7 +475,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'maintained_by',
 		'fieldtype': 'Data',
-		'idx': 29,
 		'label': 'Maintained By',
 		'oldfieldname': 'maintained_by',
 		'oldfieldtype': 'Data',
@@ -497,7 +486,6 @@
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
 		'hidden': 1,
-		'idx': 30,
 		'label': 'BOM Report',
 		'oldfieldtype': 'Section Break',
 		'permlevel': 0
@@ -508,7 +496,6 @@
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
 		'hidden': 0,
-		'idx': 31,
 		'label': 'Flat BOM',
 		'oldfieldtype': 'Section Break',
 		'permlevel': 0
@@ -522,7 +509,6 @@
 		'fieldname': 'flat_bom_details',
 		'fieldtype': 'Table',
 		'hidden': 0,
-		'idx': 32,
 		'label': 'Flat BOM Detail',
 		'no_copy': 1,
 		'oldfieldname': 'flat_bom_details',
diff --git a/erpnext/production/doctype/bom_material/bom_material.txt b/erpnext/production/doctype/bom_material/bom_material.txt
index 1ce35a2..436519e 100644
--- a/erpnext/production/doctype/bom_material/bom_material.txt
+++ b/erpnext/production/doctype/bom_material/bom_material.txt
@@ -329,11 +329,11 @@
 	{
 		'doctype': 'DocField',
 		'fieldname': 'qty_consumed_per_unit',
-		'fieldtype': 'Currency',
+		'fieldtype': 'Float',
 		'idx': 21,
 		'label': 'Qty Consumed Per Unit',
 		'oldfieldname': 'qty_consumed_per_unit',
-		'oldfieldtype': 'Currency',
+		'oldfieldtype': 'Float',
 		'permlevel': 1
 	}
-]
\ No newline at end of file
+]
diff --git a/erpnext/production/doctype/flat_bom_detail/flat_bom_detail.txt b/erpnext/production/doctype/flat_bom_detail/flat_bom_detail.txt
index 7339300..f0d5d58 100644
--- a/erpnext/production/doctype/flat_bom_detail/flat_bom_detail.txt
+++ b/erpnext/production/doctype/flat_bom_detail/flat_bom_detail.txt
@@ -5,8 +5,8 @@
 	{
 		'creation': '2010-08-08 17:09:02',
 		'docstatus': 0,
-		'modified': '2010-09-20 14:06:57',
-		'modified_by': 'umair@iwebnotes.com',
+		'modified': '2011-11-10 14:21:40',
+		'modified_by': 'Administrator',
 		'owner': 'jai@webnotestech.com'
 	},
 
@@ -14,6 +14,7 @@
 	{
 		'autoname': 'FBD/.######',
 		'colour': 'White:FFF',
+		'default_print_format': 'Standard',
 		'doctype': 'DocType',
 		'istable': 1,
 		'module': 'Production',
@@ -22,7 +23,7 @@
 		'section_style': 'Simple',
 		'server_code_error': ' ',
 		'show_in_menu': 0,
-		'version': 15
+		'version': 18
 	},
 
 	# These values are common for all DocField
@@ -46,7 +47,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'item_code',
 		'fieldtype': 'Link',
-		'idx': 1,
 		'label': 'Item Code',
 		'oldfieldname': 'item_code',
 		'oldfieldtype': 'Link',
@@ -58,7 +58,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'description',
 		'fieldtype': 'Text',
-		'idx': 2,
 		'label': 'Description',
 		'oldfieldname': 'description',
 		'oldfieldtype': 'Text',
@@ -70,7 +69,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'moving_avg_rate',
 		'fieldtype': 'Currency',
-		'idx': 5,
 		'label': 'Valuation Rate',
 		'oldfieldname': 'moving_avg_rate',
 		'oldfieldtype': 'Currency'
@@ -81,7 +79,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'amount_as_per_mar',
 		'fieldtype': 'Currency',
-		'idx': 6,
 		'label': 'Amount As Per Valuation Rate',
 		'oldfieldname': 'amount_as_per_mar',
 		'oldfieldtype': 'Currency'
@@ -92,7 +89,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'last_purchase_rate',
 		'fieldtype': 'Currency',
-		'idx': 7,
 		'label': 'Last Purchase Rate',
 		'oldfieldname': 'last_purchase_rate',
 		'oldfieldtype': 'Currency'
@@ -103,7 +99,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'amount_as_per_lpr',
 		'fieldtype': 'Currency',
-		'idx': 8,
 		'label': 'Amount As Per LPR',
 		'oldfieldname': 'amount_as_per_lpr',
 		'oldfieldtype': 'Currency'
@@ -114,7 +109,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'qty',
 		'fieldtype': 'Currency',
-		'idx': 9,
 		'label': 'Qty',
 		'oldfieldname': 'qty',
 		'oldfieldtype': 'Currency'
@@ -125,7 +119,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'standard_rate',
 		'fieldtype': 'Currency',
-		'idx': 9,
 		'label': 'Standard Rate',
 		'oldfieldname': 'standard_rate',
 		'oldfieldtype': 'Currency'
@@ -136,7 +129,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'amount_as_per_sr',
 		'fieldtype': 'Currency',
-		'idx': 10,
 		'label': 'Amount As Per SR',
 		'oldfieldname': 'amount_as_per_sr',
 		'oldfieldtype': 'Currency'
@@ -146,11 +138,10 @@
 	{
 		'doctype': 'DocField',
 		'fieldname': 'qty_consumed_per_unit',
-		'fieldtype': 'Currency',
-		'idx': 11,
+		'fieldtype': 'Float',
 		'label': 'Qty Consumed Per Unit',
 		'oldfieldname': 'qty_consumed_per_unit',
-		'oldfieldtype': 'Currency'
+		'oldfieldtype': 'Float'
 	},
 
 	# DocField
@@ -158,12 +149,10 @@
 		'doctype': 'DocField',
 		'fieldname': 'stock_uom',
 		'fieldtype': 'Link',
-		'idx': 12,
 		'label': 'Stock UOM',
 		'oldfieldname': 'stock_uom',
 		'oldfieldtype': 'Link',
-		'options': 'UOM',
-		'search_index': 0
+		'options': 'UOM'
 	},
 
 	# DocField
@@ -172,7 +161,6 @@
 		'fieldname': 'flat_bom_no',
 		'fieldtype': 'Data',
 		'hidden': 1,
-		'idx': 12,
 		'label': 'Flat BOM No',
 		'oldfieldname': 'flat_bom_no',
 		'oldfieldtype': 'Data'
@@ -184,7 +172,6 @@
 		'fieldname': 'bom_mat_no',
 		'fieldtype': 'Data',
 		'hidden': 0,
-		'idx': 13,
 		'label': 'BOM Mat No',
 		'oldfieldname': 'bom_mat_no',
 		'oldfieldtype': 'Data'
@@ -196,7 +183,6 @@
 		'fieldname': 'parent_bom',
 		'fieldtype': 'Link',
 		'hidden': 0,
-		'idx': 14,
 		'label': 'Parent BOM',
 		'oldfieldname': 'parent_bom',
 		'oldfieldtype': 'Link'
@@ -207,11 +193,10 @@
 		'doctype': 'DocField',
 		'fieldname': 'is_pro_applicable',
 		'fieldtype': 'Select',
-		'idx': 15,
 		'label': 'Is PRO Applicable',
 		'oldfieldname': 'is_pro_applicable',
 		'oldfieldtype': 'Select',
 		'options': '\nYes\nNo',
 		'reqd': 0
 	}
-]
\ No newline at end of file
+]
diff --git a/erpnext/sandbox/test_leave.py b/erpnext/sandbox/test_leave.py
new file mode 100644
index 0000000..cc2149f
--- /dev/null
+++ b/erpnext/sandbox/test_leave.py
@@ -0,0 +1,55 @@
+import unittest
+
+import webnotes
+import webnotes.profile
+webnotes.user = webnotes.profile.Profile()
+
+
+from webnotes.model.doc import Document
+from webnotes.model.code import get_obj
+from webnotes.utils import cstr, flt
+from webnotes.model.doclist import getlist
+sql = webnotes.conn.sql
+
+from sandbox.testdata import leaves
+#----------------------------------------------------------
+
+
+class TestStockEntry(unittest.TestCase):
+	#===========================================================================
+	def setUp(self):
+		webnotes.conn.begin()
+		leaves.emp.save(new = 1, make_autoname = 0)
+
+	def test_leave_bal(self):
+		leaves.l_all.save(1)
+		leaves.l_app1.save(1)
+		leaves.l_app2.save(1)
+
+		la1 = get_obj('Leave Application', leaves.l_app1.name, with_children=1)
+		la1.validate()
+		la1.doc.docstatus = 1
+		la1.doc.save()
+		
+		self.assertTrue(la1.doc.total_leave_days == 2)
+		
+		la1.doc.half_day  = 1
+		la1.validate()
+		la1.doc.save()
+		
+		self.assertTrue(la1.doc.total_leave_days == .5)
+
+		print "Test case for leave applied no of days"
+		
+				
+		la2 = get_obj('Leave Application', leaves.l_app2.name, with_children=1)
+		la2.validate()
+		bal = la2.get_leave_balance()
+		self.assertTrue(bal, 18)
+		print "Test case for leave balance"
+		
+		
+		
+		
+	def tearDown(self):
+		webnotes.conn.rollback()
diff --git a/erpnext/sandbox/test_stock_entry.py b/erpnext/sandbox/test_stock_entry.py
index f1035bc..d1e0097 100644
--- a/erpnext/sandbox/test_stock_entry.py
+++ b/erpnext/sandbox/test_stock_entry.py
@@ -101,7 +101,7 @@
 		
 		self.save_stock_entry('Material Transfer')
 		mtn = get_obj('Stock Entry', stock_entry.mtn[0].name, with_children=1)
-		tn = self.submit_stock_entry(mtn)
+		mtn = self.submit_stock_entry(mtn)
 		
 		# stock ledger entry
 		print "Checking stock ledger entry........."
@@ -202,8 +202,54 @@
 			[{'doctype': 'Serial No', 'item_code': 'it', 'warehouse': 'wh1', 'status': 'In Store', 'docstatus': 0}, 10]
 		])
 
+	#===========================================================================
+	def test_entries_on_same_datetime(self):
+		print "Test Case: Multiple entries on same datetime, cancel first one"
 		
+		# submitted 1st MR
+		self.save_stock_entry('Material Receipt')
+		mr = get_obj('Stock Entry', stock_entry.mr[0].name, with_children=1)
+		mr = self.submit_stock_entry(mr)
+		
+		# submitted 2nd MR
+		for each in stock_entry.mr1:
+			each.save(1)
+		for t in stock_entry.mr1[1:]:
+			sql("update `tabStock Entry Detail` set parent = '%s' where name = '%s'" % (stock_entry.mr1[0].name, t.name))
+		
+		mr1 = get_obj('Stock Entry', stock_entry.mr1[0].name, with_children=1)
+		mr1 = self.submit_stock_entry(mr1)
 
+		
+		# submitted MTN
+		self.save_stock_entry('Material Transfer')
+		mtn = get_obj('Stock Entry', stock_entry.mtn[0].name, with_children=1)
+		mtn = self.submit_stock_entry(mtn)
+		
+		# cancel prev MR
+		mr.on_cancel()
+		mr.doc.cancel_reason = "testing"
+		mr.doc.docstatus = 2
+		mr.doc.save()
+		
+		
+		# stock ledger entry
+		print "Checking stock ledger entry........."
+		self.assertDoc(self.get_expected_sle('entries_on_same_datetime'))
+		
+		# bin qty
+		print "Checking Bin qty........."
+		self.assertDoc([
+			{'doctype':'Bin', 'actual_qty':0, 'item_code':'it', 'warehouse':'wh1'},
+			{'doctype':'Bin', 'actual_qty':5, 'item_code':'it', 'warehouse':'wh2'}
+		])
+		
+		# serial no		
+		self.assertCount([
+			[{'doctype': 'Serial No', 'item_code': 'it', 'warehouse': 'wh1', 'status': 'In Store', 'docstatus': 0}, 0], 
+			[{'doctype': 'Serial No', 'item_code': 'it', 'warehouse': 'wh2', 'status': 'In Store', 'docstatus': 0}, 5]
+		])
+		
 	#===========================================================================
 	def save_stock_entry(self, t):
 		if t == 'Material Receipt':
@@ -373,8 +419,58 @@
 							'ifnull(bin_aqat, 0)': 0,
 							'ifnull(valuation_rate, 0)': 0,
 							"ifnull(is_cancelled, 'No')": 'Yes'
+						}],
+			'entries_on_same_datetime': [{
+							'doctype': 'Stock Ledger Entry', 
+							'item_code':'it',
+							'warehouse':'wh1',
+							'voucher_type': 'Stock Entry',
+							'voucher_no': stock_entry.mr[0].name,
+							'actual_qty': 10,
+							'bin_aqat': 10,
+							'valuation_rate': 100,
+							'is_cancelled': 'Yes'
+						}, {
+							'doctype': 'Stock Ledger Entry', 
+							'item_code':'it',
+							'warehouse':'wh1',
+							'voucher_type': 'Stock Entry',
+							'voucher_no': stock_entry.mr[0].name,
+							'actual_qty': -10,
+							'ifnull(bin_aqat, 0)': 0,
+							'ifnull(valuation_rate, 0)': 0,
+							"ifnull(is_cancelled, 'No')": 'Yes'
+						}, {
+							'doctype': 'Stock Ledger Entry', 
+							'item_code':'it',
+							'warehouse':'wh1',
+							'voucher_type': 'Stock Entry',
+							'voucher_no': stock_entry.mr1[0].name,
+							'actual_qty': 5,
+							'bin_aqat': 5,
+							'valuation_rate': 400,
+							'is_cancelled': 'No'
+						}, {
+							'doctype': 'Stock Ledger Entry',
+							'item_code':'it',
+							'warehouse':'wh1',
+							'voucher_type': 'Stock Entry',
+							'voucher_no': stock_entry.mtn[0].name,
+							'actual_qty': -5,
+							'bin_aqat': 0,
+							'valuation_rate': 400,
+							'is_cancelled': 'No'
+						}, {
+							'doctype': 'Stock Ledger Entry',
+							'item_code':'it',
+							'warehouse':'wh2',
+							'voucher_type': 'Stock Entry',
+							'voucher_no': stock_entry.mtn[0].name,
+							'actual_qty': 5,
+							'bin_aqat': 5,
+							'valuation_rate': 100,
+							'is_cancelled': 'No'
 						}]
-						
 		}
 		
 		return expected_sle[action]
diff --git a/erpnext/sandbox/testdata/leaves.py b/erpnext/sandbox/testdata/leaves.py
new file mode 100644
index 0000000..8d44ffb
--- /dev/null
+++ b/erpnext/sandbox/testdata/leaves.py
@@ -0,0 +1,54 @@
+from webnotes.model.doc import Document
+
+emp = Document(
+	fielddata = {
+		'doctype': 'Employee',
+		'name': 'emp1',
+		'employee_name': 'Nijil',
+		'status': 'Active',
+		'date_of_joining': '2011-01-01'
+	}
+)
+
+
+
+l_all = Document(
+	fielddata = {
+		'doctype' : 'Leave Allocation',
+		'name': 'l_all',
+		'employee' : 'emp1',
+		'leave_type' : 'Casual Leave',
+		'posting_date': '2011-03-01',
+		'fiscal_year': '2011-2012',
+		'total_leaves_allocated': 20,
+		'docstatus': 1
+	}
+)
+
+l_app1 = Document(
+	fielddata = {
+		'doctype' : 'Leave Application',
+		'name': 'l_app1',
+		'employee' : 'emp1',
+		'leave_type' : 'Casual Leave',
+		'posting_date': '2011-03-01',
+		'fiscal_year': '2011-2012',
+		'from_date': '2011-08-01',
+		'to_date': '2011-08-02',
+		'total_leave_days': 2
+	}
+)
+
+l_app2 = Document(
+	fielddata = {
+		'doctype' : 'Leave Application',
+		'name': 'l_app2',
+		'employee' : 'emp1',
+		'leave_type' : 'Casual Leave',
+		'posting_date': '2011-03-01',
+		'fiscal_year': '2011-2012',
+		'from_date': '2011-08-15',
+		'to_date': '2011-08-17',
+		'total_leave_days': 3
+	}
+)
diff --git a/erpnext/sandbox/testdata/stock_entry.py b/erpnext/sandbox/testdata/stock_entry.py
index 8f2a30c..3316016 100644
--- a/erpnext/sandbox/testdata/stock_entry.py
+++ b/erpnext/sandbox/testdata/stock_entry.py
@@ -34,6 +34,38 @@
 	)
 ]
 
+mr1 = [
+	Document(
+		fielddata = {
+			'doctype': 'Stock Entry',
+			'posting_date': '2011-09-01',
+			'transfer_date': '2011-09-01',
+			'posting_time': '12:00',
+			'company': 'comp',
+			'fiscal_year' : '2011-2012',
+			'purpose': 'Material Receipt',
+			'name': 'mr1'
+		}
+	),
+	Document(
+		fielddata  ={
+			'doctype': 'Stock Entry Detail',
+			'parenttype': 'Stock Entry',
+			'parentfield' : 'mtn_details',
+			'parent' : 'mr1',
+			'item_code' : 'it',
+			't_warehouse' : 'wh1',
+			'qty' : 5,
+			'transfer_qty' : 5,
+			'incoming_rate': 400,
+			'stock_uom': 'Nos',
+			'conversion_factor': 1,
+			'serial_no': 'srno11, srno12, srno13, srno14, srno15'	
+		}
+	)
+]
+
+
 # Material Transfer
 #--------------------
 
@@ -43,7 +75,7 @@
 			'doctype': 'Stock Entry',
 			'posting_date': '2011-09-01',
 			'transfer_date': '2011-09-01',
-			'posting_time': '13:00',
+			'posting_time': '12:00',
 			'company': 'comp',
 			'fiscal_year' : '2011-2012',
 			'purpose': 'Material Transfer',
diff --git a/erpnext/selling/Print Format/Quotation Classic/Quotation Classic.txt b/erpnext/selling/Print Format/Quotation Classic/Quotation Classic.txt
new file mode 100644
index 0000000..a20d15f
--- /dev/null
+++ b/erpnext/selling/Print Format/Quotation Classic/Quotation Classic.txt
@@ -0,0 +1,28 @@
+# Print Format, Quotation Classic
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2011-11-15 17:30:44',
+		'docstatus': 0,
+		'modified': '2011-11-16 12:30:36',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all Print Format
+	{
+		'doc_type': 'Quotation',
+		'doctype': 'Print Format',
+		'html': '<!--\n\tSample Print Format for ERPNext\n\tPlease use at your own discretion\n\tFor suggestions and contributions:\n\t\thttps://github.com/webnotes/erpnext-print-templates\n\n\tFreely usable under MIT license\n-->\n\n<!-- Style Settings -->\n<style>\n\t/*\n\t\tcommon style for whole page\n\t\tThis should include:\n\t\t+ page size related settings\n\t\t+ font family settings\n\t\t+ line spacing settings\n\t*/\n\t@media screen {\n\t\tbody {\n\t\t\twidth: 8.3in;\n\t\t}\n\t}\n\n\thtml, body, div, span, td {\n\t\tfont-family: "Georgia", serif;\n\t\tfont-size: 12px;\n\t}\n\n\tbody {\n\t\tpadding: 10px;\n\t\tmargin: auto;\n\t\tfont-size: 12px;\n\t\tline-height: 150%;\n\t}\n\n\t.common {\n\t\tfont-family: "Georgia", serif !important;\n\t\tfont-size: 12px;\n\t\tpadding: 10px 0px;\n\t}\n\n\ttable {\n\t\tborder-collapse: collapse;\n\t\twidth: 100%;\n\t\tvertical-align: top;\n\t}\n\n\ttable td {\n\t\tpadding: 2px 0px;\n\t}\n\t\n\ttable h1, h2, h3, h4, h5, h6 {\n\t\tpadding: 0px;\n\t\tmargin: 0px;\n\t}\n\n\ttable.header-table td {\n\t\tvertical-align: top;\n\t}\n\n\ttable.header-table thead {\n\t\tborder-bottom: 1px solid black;\n\t}\n\n\ttable.header-table h3 {\n\t\tcolor: gray;\n\t}\n\n\ttable.header-table thead td {\n\t\tpadding: 5px 0px;\n\t}\n\n\tdiv.page-body table td:nth-child(6),\n\tdiv.page-body table td:nth-child(7) {\n\t\ttext-align: right;\n\t}\n\n\ttable.footer-table td {\n\t\tvertical-align: top;\n\t}\n\n\ttable.footer-table td table td:nth-child(2),\n\ttable.footer-table td table td:nth-child(3) {\n\t\ttext-align: right;\n\t}\n</style>\n\n\n<!-- Javascript -->\n<script>\n\tsi_std = {\n\t\tprint_item_table: function() {\n\t\t\tvar table = print_table(\n\t\t\t\t\'Quotation\',\n\t\t\t\tdoc.name,\n\t\t\t\t\'quotation_details\',\n\t\t\t\t\'Quotation Detail\',\n\t\t\t\t[// Here specify the table columns to be displayed\n\t\t\t\t\t\'SR\', \'item_code\', \'item_name\', \'description\', \'qty\', \'stock_uom\',\n\t\t\t\t\t\'export_rate\', \'export_amount\'\n\t\t\t\t],\n\t\t\t\t[// Here specify the labels of column headings\n\t\t\t\t\t\'Sr\', \'Item Code\', \'Item Name\', \'Description\', \'Qty\',\n\t\t\t\t\t\'UoM\', \'Basic Rate\', \'Amount\'\n\t\t\t\t],\n\t\t\t\t[// Here specify the column widths\n\t\t\t\t\t\'3%\', \'10%\', \'15%\', \'32%\', \'5%\',\n\t\t\t\t\t\'5%\', \'15%\', \'15%\'\n\t\t\t\t]\n\t\t\t);\n\n\t\t\t// This code takes care of page breaks\n\t\t\tif(table.appendChild) {\n\t\t\t\tout = table.innerHTML;\n\t\t\t} else {\n\t\t\t\tout = \'\';\n\t\t\t\tfor(var i=0; i < (table.length-1); i++) {\n\t\t\t\t\tout += table[i].innerHTML + \n\t\t\t\t\t\t\'<div style = "page-break-after: always;" \\\n\t\t\t\t\t\tclass = "page_break"></div>\\\n\t\t\t\t\t\t<div class="page-settings"></div>\';\n\t\t\t\t}\n\t\t\t\tout += table[table.length-1].innerHTML;\n\t\t\t}\n\t\t\treturn out;\n\t\t},\n\n\n\t\tprint_other_charges: function(parent) {\n\t\t\tvar oc = getchildren(\'RV Tax Detail\', doc.name, \'other_charges\');\n\t\t\tvar rows = \'<table width=100%>\\n\';\n\t\t\tfor(var i=0; i<oc.length; i++) {\n\t\t\t\trows +=\n\t\t\t\t\t\'<tr>\\n\' +\n\t\t\t\t\t\t\'\\t<td>\' + oc[i].description + \'</td>\\n\' +\n\t\t\t\t\t\t\'\\t<td></td>\\n\' +\n\t\t\t\t\t\t\'\\t<td width=38%>\' + fmt_money(oc[i].tax_amount) + \'</td>\\n\' +\n\t\t\t\t\t\'</tr>\\n\';\n\t\t\t}\n\t\t\treturn rows + \'</table>\\n\';\n\t\t}\n\t};\n</script>\n\n\n<!-- Page Layout Settings -->\n<div class=\'common page-header\'>\n\t<!-- \n\t\tPage Header will contain\n\t\t\t+ table 1\n\t\t\t\t+ table 1a\n\t\t\t\t\t- Name\n\t\t\t\t\t- Address\n\t\t\t\t\t- Contact\n\t\t\t\t\t- Mobile No\n\t\t\t\t+ table 1b\n\t\t\t\t\t- Voucher Date\n\t\t\t\t\t- Due Date\n\t-->\n\t<table class=\'header-table\' cellspacing=0>\n\t\t<thead>\n\t\t\t<tr><td><h1>Quotation</h1></td></tr>\n\t\t\t<tr><td><h3><script>cur_frm.docname</script></h3></td></tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td width=60%><table width=100% cellspacing=0><tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td width=39%><b>Name</b></td>\n\t\t\t\t\t\t<td><script>doc.customer?doc.customer:doc.lead_name</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Address</b></td>\n\t\t\t\t\t\t<td><script>replace_newlines(doc.address_display)</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Contact</b></td>\n\t\t\t\t\t\t<td><script>doc.contact_display</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody></table></td>\n\t\t\t\t<td><table width=100% cellspacing=0><tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td width=63%><b>Quotation Date</b></td>\n\t\t\t\t\t\t<td><script>date.str_to_user(doc.transaction_date)</script></td>\n\t\t\t\t\t<tr>\t\t\t\t\t\n\t\t\t\t</tbody></table></td>\n\t\t\t</tr>\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\n\t\t</tfoot>\n\t</table>\n</div>\n<div class=\'common page-body\'>\n\t<!-- \n\t\tPage Body will contain\n\t\t\t+ table 2\n\t\t\t\t- Sales Invoice Data\n\t-->\n\t<script>si_std.print_item_table()</script>\n</div>\n<div class=\'common page-footer\'>\n\t<!-- \n\t\tPage Footer will contain\n\t\t\t+ table 3\n\t\t\t\t- Terms and Conditions\n\t\t\t\t- Total Rounded Amount Calculation\n\t\t\t\t- Total Rounded Amount in Words\n\t-->\n\t<table class=\'footer-table\' width=100% cellspacing=0>\n\t\t<thead>\n\t\t\t\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td width=60% style=\'padding-right: 10px;\'>\n\t\t\t\t\t<b>Terms, Conditions &amp; Other Information:</b><br />\n\t\t\t\t\t<script>doc.terms</script>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<table cellspacing=0 width=100%><tbody>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>Net Total</td>\n\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t<td width=38%><script>\n\t\t\t\t\t\t\t\tfmt_money(doc.net_total/doc.conversion_rate)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>Grand Total</td>\n\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t<td><script>\n\t\t\t\t\t\t\t\tfmt_money(doc.grand_total_export)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr style=\'font-weight: bold\'>\n\t\t\t\t\t\t\t<td>Rounded Total</td>\n\t\t\t\t\t\t\t<td><script>doc.currency</script></td>\n\t\t\t\t\t\t\t<td><script>\n\t\t\t\t\t\t\t\tfmt_money(doc.rounded_total_export)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</tbody></table>\n\t\t\t\t\t<br /><b>In Words</b><br />\n\t\t\t\t\t<i><script>doc.in_words_export</script></i>\n\t\t\t\t</td>\n\t\t\t</tr>\t\t\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\n\t\t</tfoot>\n\t</table>\n</div>\n\n',
+		'module': 'Selling',
+		'name': '__common__',
+		'standard': 'Yes'
+	},
+
+	# Print Format, Quotation Classic
+	{
+		'doctype': 'Print Format',
+		'name': 'Quotation Classic'
+	}
+]
\ No newline at end of file
diff --git a/erpnext/selling/Print Format/Quotation Modern/Quotation Modern.txt b/erpnext/selling/Print Format/Quotation Modern/Quotation Modern.txt
new file mode 100644
index 0000000..f5c02af
--- /dev/null
+++ b/erpnext/selling/Print Format/Quotation Modern/Quotation Modern.txt
@@ -0,0 +1,28 @@
+# Print Format, Quotation Modern
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2011-11-15 17:30:44',
+		'docstatus': 0,
+		'modified': '2011-11-16 12:30:57',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all Print Format
+	{
+		'doc_type': 'Quotation',
+		'doctype': 'Print Format',
+		'html': '<!--\n\tSample Print Format for ERPNext\n\tPlease use at your own discretion\n\tFor suggestions and contributions:\n\t\thttps://github.com/webnotes/erpnext-print-templates\n\n\tFreely usable under MIT license\n-->\n\n<!-- Style Settings -->\n<style>\n\t/*\n\t\tcommon style for whole page\n\t\tThis should include:\n\t\t+ page size related settings\n\t\t+ font family settings\n\t\t+ line spacing settings\n\t*/\n\t@media screen {\n\t\tbody {\n\t\t\twidth: 8.3in;\n\t\t}\n\t}\n\n\thtml, body, div, span, td {\n\t\tfont-family: "Helvetica", "Arial", sans-serif;\n\t\tfont-size: 12px;\n\t}\n\n\tbody {\n\t\tpadding: 10px;\n\t\tmargin: auto;\n\t\tfont-size: 12px;\n\t\tline-height: 150%;\n\t}\n\n\t.common {\n\t\tfont-family: "Helvetica", "Arial", sans-serif !important;\n\t\tfont-size: 12px;\n\t\tpadding: 10px 0px;\n\t}\n\n\ttable {\n\t\tborder-collapse: collapse;\n\t\twidth: 100%;\n\t\tvertical-align: top;\n\t\tborder-style: none !important;\n\t}\n\n\ttable td {\n\t\tpadding: 2px 0px;\n\t\tborder-style: none !important;\n\t}\n\t\n\ttable h1, h2, h3, h4, h5, h6 {\n\t\tpadding: 0px;\n\t\tmargin: 0px;\n\t}\n\n\ttable.header-table td {\n\t\tvertical-align: top;\n\t}\n\n\ttable.header-table h1 {\n\t\ttext-transform: uppercase;\n\t\tcolor: white;\n\t\tfont-size: 55px;\n\t\tfont-style: italic;\n\t}\n\n\ttable.header-table thead tr:nth-child(1) div {\n\t\theight: 24px;\n\t\tbackground-color: #696969;\n\t\tvertical-align: middle;\n\t\tpadding: 12px 0px 0px 0px;\n\t\twidth: 100%;\n\t}\n\n\tdiv.page-body table td:nth-child(6),\n\tdiv.page-body table td:nth-child(7) {\n\t\ttext-align: right;\n\t}\n\n\tdiv.page-body table tr td {\n\t\tbackground-color: #DCDCDC !important;\n\t}\n\n\tdiv.page-body table tr:nth-child(1) td {\n\t\tbackground-color: #696969 !important;\n\t\tcolor: white !important;\n\t}\n\n\ttable.footer-table td {\n\t\tvertical-align: top;\n\t}\n\n\ttable.footer-table td table td:nth-child(2),\n\ttable.footer-table td table td:nth-child(3) {\n\t\ttext-align: right;\n\t}\n\n\ttable.footer-table tfoot td {\n\t\tbackground-color: #696969;\n\t\theight: 10px;\n\t}\n\n\t.imp-details {\n\t\tbackground-color: #DCDCDC;\n\t}\n</style>\n\n\n<!-- Javascript -->\n<script>\n\tsi_std = {\n\t\tprint_item_table: function() {\n\t\t\tvar table = print_table(\n\t\t\t\t\'Quotation\',\n\t\t\t\tdoc.name,\n\t\t\t\t\'quotation_details\',\n\t\t\t\t\'Quotation Detail\',\n\t\t\t\t[// Here specify the table columns to be displayed\n\t\t\t\t\t\'SR\', \'item_code\', \'item_name\', \'description\', \'qty\', \'stock_uom\',\n\t\t\t\t\t\'export_rate\', \'export_amount\'\n\t\t\t\t],\n\t\t\t\t[// Here specify the labels of column headings\n\t\t\t\t\t\'Sr\', \'Item Code\', \'Item Name\', \'Description\', \'Qty\',\n\t\t\t\t\t\'UoM\', \'Basic Rate\', \'Amount\'\n\t\t\t\t],\n\t\t\t\t[// Here specify the column widths\n\t\t\t\t\t\'3%\', \'10%\', \'15%\', \'32%\', \'5%\',\n\t\t\t\t\t\'5%\', \'15%\', \'15%\'\n\t\t\t\t]\n\t\t\t);\n\n\t\t\t// This code takes care of page breaks\n\t\t\tif(table.appendChild) {\n\t\t\t\tout = table.innerHTML;\n\t\t\t} else {\n\t\t\t\tout = \'\';\n\t\t\t\tfor(var i=0; i < (table.length-1); i++) {\n\t\t\t\t\tout += table[i].innerHTML + \n\t\t\t\t\t\t\'<div style = "page-break-after: always;" \\\n\t\t\t\t\t\tclass = "page_break"></div>\\\n\t\t\t\t\t\t<div class="page-settings"></div>\';\n\t\t\t\t}\n\t\t\t\tout += table[table.length-1].innerHTML;\n\t\t\t}\n\t\t\treturn out;\n\t\t},\n\n\n\t\tprint_other_charges: function(parent) {\n\t\t\tvar oc = getchildren(\'RV Tax Detail\', doc.name, \'other_charges\');\n\t\t\tvar rows = \'<table width=100%>\\n\';\n\t\t\tfor(var i=0; i<oc.length; i++) {\n\t\t\t\trows +=\n\t\t\t\t\t\'<tr>\\n\' +\n\t\t\t\t\t\t\'\\t<td>\' + oc[i].description + \'</td>\\n\' +\n\t\t\t\t\t\t\'\\t<td></td>\\n\' +\n\t\t\t\t\t\t\'\\t<td width=38%>\' + fmt_money(oc[i].tax_amount) + \'</td>\\n\' +\n\t\t\t\t\t\'</tr>\\n\';\n\t\t\t}\n\t\t\treturn rows + \'</table>\\n\';\n\t\t}\n\t};\n</script>\n\n\n<!-- Page Layout Settings -->\n<div class=\'common page-header\'>\n\t<!-- \n\t\tPage Header will contain\n\t\t\t+ table 1\n\t\t\t\t+ table 1a\n\t\t\t\t\t- Name\n\t\t\t\t\t- Address\n\t\t\t\t\t- Contact\n\t\t\t\t\t- Mobile No\n\t\t\t\t+ table 1b\n\t\t\t\t\t- Voucher Date\n\t\t\t\t\t- Due Date\n\t-->\n\t<table class=\'header-table\' cellspacing=0>\n\t\t<thead>\n\t\t\t<tr><td colspan=2><div><h1>Quotation</h1></div></td></tr>\n\t\t\t<tr><td colspan=2><div style="height:15px"></div></td></tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td width=60%><table width=100% cellspacing=0><tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td width=39%><b>Name</b></td>\n\t\t\t\t\t\t<td><script>doc.customer?doc.customer:doc.lead_name</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Address</b></td>\n\t\t\t\t\t\t<td><script>replace_newlines(doc.address_display)</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Contact</b></td>\n\t\t\t\t\t\t<td><script>doc.contact_display</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody></table></td>\n\t\t\t\t<td><table width=100% cellspacing=0><tbody>\n\t\t\t\t\t<tr class=\'imp-details\'>\n\t\t\t\t\t\t<td><b>Quotation No.</b></td>\n\t\t\t\t\t\t<td><script>cur_frm.docname</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td width=63%><b>Quotation Date</b></td>\n\t\t\t\t\t\t<td><script>date.str_to_user(doc.transaction_date)</script></td>\n\t\t\t\t\t<tr>\t\t\t\t\t\n\t\t\t\t</tbody></table></td>\n\t\t\t</tr>\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\n\t\t</tfoot>\n\t</table>\n</div>\n<div class=\'common page-body\'>\n\t<!-- \n\t\tPage Body will contain\n\t\t\t+ table 2\n\t\t\t\t- Sales Invoice Data\n\t-->\n\t<script>si_std.print_item_table()</script>\n</div>\n<div class=\'common page-footer\'>\n\t<!-- \n\t\tPage Footer will contain\n\t\t\t+ table 3\n\t\t\t\t- Terms and Conditions\n\t\t\t\t- Total Rounded Amount Calculation\n\t\t\t\t- Total Rounded Amount in Words\n\t-->\n\t<table class=\'footer-table\' width=100% cellspacing=0>\n\t\t<thead>\n\t\t\t\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td width=60% style=\'padding-right: 10px;\'>\n\t\t\t\t\t<b>Terms, Conditions &amp; Other Information:</b><br />\n\t\t\t\t\t<script>doc.terms</script>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<table cellspacing=0 width=100%><tbody>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>Net Total</td>\n\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t<td width=38%><script>\n\t\t\t\t\t\t\t\tfmt_money(doc.net_total/doc.conversion_rate)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>Grand Total</td>\n\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t<td><script>\n\t\t\t\t\t\t\t\tfmt_money(doc.grand_total_export)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr style=\'font-weight: bold\' class=\'imp-details\'>\n\t\t\t\t\t\t\t<td>Rounded Total</td>\n\t\t\t\t\t\t\t<td><script>doc.currency</script></td>\n\t\t\t\t\t\t\t<td><script>\n\t\t\t\t\t\t\t\tfmt_money(doc.rounded_total_export)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</tbody></table>\n\t\t\t\t\t<br /><b>In Words</b><br />\n\t\t\t\t\t<i><script>doc.in_words_export</script></i>\n\t\t\t\t</td>\n\t\t\t</tr>\t\t\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\t<tr><td colspan=2><div></div></td><tr>\n\t\t</tfoot>\n\t</table>\n</div>\n\n',
+		'module': 'Selling',
+		'name': '__common__',
+		'standard': 'Yes'
+	},
+
+	# Print Format, Quotation Modern
+	{
+		'doctype': 'Print Format',
+		'name': 'Quotation Modern'
+	}
+]
\ No newline at end of file
diff --git a/erpnext/selling/Print Format/Quotation Spartan/Quotation Spartan.txt b/erpnext/selling/Print Format/Quotation Spartan/Quotation Spartan.txt
new file mode 100644
index 0000000..d253d01
--- /dev/null
+++ b/erpnext/selling/Print Format/Quotation Spartan/Quotation Spartan.txt
@@ -0,0 +1,28 @@
+# Print Format, Quotation Spartan
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2011-11-16 13:27:17',
+		'docstatus': 0,
+		'modified': '2011-11-16 14:45:26',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all Print Format
+	{
+		'doc_type': 'Quotation',
+		'doctype': 'Print Format',
+		'html': '<!--\n\tSample Print Format for ERPNext\n\tPlease use at your own discretion\n\tFor suggestions and contributions:\n\t\thttps://github.com/webnotes/erpnext-print-templates\n\n\tFreely usable under MIT license\n-->\n\n<!-- Style Settings -->\n<style>\n\t/*\n\t\tcommon style for whole page\n\t\tThis should include:\n\t\t+ page size related settings\n\t\t+ font family settings\n\t\t+ line spacing settings\n\t*/\n\t@media screen {\n\t\tbody {\n\t\t\twidth: 8.3in;\n\t\t}\n\t}\n\n\thtml, body, div, span, td {\n\t\tfont-family: "Arial", sans-serif;\n\t\tfont-size: 12px;\n\t}\n\n\tbody {\n\t\tpadding: 10px;\n\t\tmargin: auto;\n\t\tfont-size: 12px;\n\t\tline-height: 150%;\n\t}\n\n\t.common {\n\t\tfont-family: "Arial", sans-serif !important;\n\t\tfont-size: 12px;\n\t\tpadding: 0px;\n\t}\n\n\ttable {\n\t\twidth: 100% !important;\n\t\tvertical-align: top;\n\t}\n\n\ttable td {\n\t\tpadding: 2px 0px;\n\t}\n\n\ttable, td {\n\t\tborder-collapse: collapse !important;\n\t\tpadding: 0px;\n\t\tmargin: 0px !important;\n\t}\n\t\n\ttable h1, h2, h3, h4, h5, h6 {\n\t\tpadding: 0px;\n\t\tmargin: 0px;\n\t}\n\n\ttable.header-table td {\n\t\tvertical-align: top;\n\t}\n\n\ttable.header-table h3 {\n\t\tcolor: gray;\n\t}\n\n\ttable.header-table thead td {\n\t\tpadding: 5px;\n\t}\n\n\ttable.header-table > thead,\n\ttable.header-table > tbody > tr > td,\n\ttable.footer-table > tbody > tr > td {\n\t\tborder: 1px solid black;\n\t\tpadding: 5px;\n\t}\n\n\ttable.footer-table > tbody,\n\ttable.header-table > thead {\n\t\tborder-bottom: 3px solid black;\n\t}\n\n\ttable.header-table > thead {\n\t\tborder-top: 3px solid black;\n\t}\n\n\tdiv.page-body table td:nth-child(6),\n\tdiv.page-body table td:nth-child(7) {\n\t\ttext-align: right;\n\t}\n\n\tdiv.page-body td {\n\t\tbackground-color: white !important;\n\t\tborder: 1px solid black !important;\n\t}\n\n\ttable.footer-table td {\n\t\tvertical-align: top;\n\t}\n\n\ttable.footer-table td table td:nth-child(2),\n\ttable.footer-table td table td:nth-child(3) {\n\t\ttext-align: right;\n\t}\n</style>\n\n\n<!-- Javascript -->\n<script>\n\tsi_std = {\n\t\tprint_item_table: function() {\n\t\t\tvar table = print_table(\n\t\t\t\t\'Quotation\',\n\t\t\t\tdoc.name,\n\t\t\t\t\'quotation_details\',\n\t\t\t\t\'Quotation Detail\',\n\t\t\t\t[// Here specify the table columns to be displayed\n\t\t\t\t\t\'SR\', \'item_code\', \'item_name\', \'description\', \'qty\', \'stock_uom\',\n\t\t\t\t\t\'export_rate\', \'export_amount\'\n\t\t\t\t],\n\t\t\t\t[// Here specify the labels of column headings\n\t\t\t\t\t\'Sr\', \'Item Code\', \'Item Name\', \'Description\', \'Qty\',\n\t\t\t\t\t\'UoM\', \'Basic Rate\', \'Amount\'\n\t\t\t\t],\n\t\t\t\t[// Here specify the column widths\n\t\t\t\t\t\'3%\', \'10%\', \'15%\', \'32%\', \'5%\',\n\t\t\t\t\t\'5%\', \'15%\', \'15%\'\n\t\t\t\t]\n\t\t\t);\n\n\t\t\t// This code takes care of page breaks\n\t\t\tif(table.appendChild) {\n\t\t\t\tout = table.innerHTML;\n\t\t\t} else {\n\t\t\t\tout = \'\';\n\t\t\t\tfor(var i=0; i < (table.length-1); i++) {\n\t\t\t\t\tout += table[i].innerHTML + \n\t\t\t\t\t\t\'<div style = "page-break-after: always;" \\\n\t\t\t\t\t\tclass = "page_break"></div>\\\n\t\t\t\t\t\t<div class="page-settings"></div>\';\n\t\t\t\t}\n\t\t\t\tout += table[table.length-1].innerHTML;\n\t\t\t}\n\t\t\treturn out;\n\t\t},\n\n\n\t\tprint_other_charges: function(parent) {\n\t\t\tvar oc = getchildren(\'RV Tax Detail\', doc.name, \'other_charges\');\n\t\t\tvar rows = \'<table width=100%>\\n\';\n\t\t\tfor(var i=0; i<oc.length; i++) {\n\t\t\t\trows +=\n\t\t\t\t\t\'<tr>\\n\' +\n\t\t\t\t\t\t\'\\t<td>\' + oc[i].description + \'</td>\\n\' +\n\t\t\t\t\t\t\'\\t<td></td>\\n\' +\n\t\t\t\t\t\t\'\\t<td width=38%>\' + fmt_money(oc[i].tax_amount) + \'</td>\\n\' +\n\t\t\t\t\t\'</tr>\\n\';\n\t\t\t}\n\t\t\treturn rows + \'</table>\\n\';\n\t\t}\n\t};\n</script>\n\n\n<!-- Page Layout Settings -->\n<div class=\'common page-header\'>\n\t<!-- \n\t\tPage Header will contain\n\t\t\t+ table 1\n\t\t\t\t+ table 1a\n\t\t\t\t\t- Name\n\t\t\t\t\t- Address\n\t\t\t\t\t- Contact\n\t\t\t\t\t- Mobile No\n\t\t\t\t+ table 1b\n\t\t\t\t\t- Voucher Date\n\t\t\t\t\t- Due Date\n\t-->\n\t<table class=\'header-table\' cellspacing=0>\n\t\t<thead>\n\t\t\t<tr><td colspan=2><h1>Quotation</h1></td></tr>\n\t\t\t<tr><td colspan=2><h3><script>cur_frm.docname</script></h3></td></tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td width=60%><table width=100% cellspacing=0><tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td width=39%><b>Name</b></td>\n\t\t\t\t\t\t<td><script>doc.customer?doc.customer:doc.lead_name</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Address</b></td>\n\t\t\t\t\t\t<td><script>replace_newlines(doc.address_display)</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Contact</b></td>\n\t\t\t\t\t\t<td><script>doc.contact_display</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody></table></td>\n\t\t\t\t<td><table width=100% cellspacing=0><tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td width=63%><b>Quotation Date</b></td>\n\t\t\t\t\t\t<td><script>date.str_to_user(doc.transaction_date)</script></td>\n\t\t\t\t\t<tr>\t\t\t\t\t\n\t\t\t\t</tbody></table></td>\n\t\t\t</tr>\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\n\t\t</tfoot>\n\t</table>\n</div>\n<div class=\'common page-body\'>\n\t<!-- \n\t\tPage Body will contain\n\t\t\t+ table 2\n\t\t\t\t- Sales Invoice Data\n\t-->\n\t<script>si_std.print_item_table()</script>\n</div>\n<div class=\'common page-footer\'>\n\t<!-- \n\t\tPage Footer will contain\n\t\t\t+ table 3\n\t\t\t\t- Terms and Conditions\n\t\t\t\t- Total Rounded Amount Calculation\n\t\t\t\t- Total Rounded Amount in Words\n\t-->\n\t<table class=\'footer-table\' width=100% cellspacing=0>\n\t\t<thead>\n\t\t\t\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td width=60% style=\'padding-right: 10px;\'>\n\t\t\t\t\t<b>Terms, Conditions &amp; Other Information:</b><br />\n\t\t\t\t\t<script>doc.terms</script>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<table cellspacing=0 width=100%><tbody>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>Net Total</td>\n\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t<td width=38%><script>\n\t\t\t\t\t\t\t\tfmt_money(doc.net_total/doc.conversion_rate)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>Grand Total</td>\n\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t<td><script>\n\t\t\t\t\t\t\t\tfmt_money(doc.grand_total_export)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr style=\'font-weight: bold\'>\n\t\t\t\t\t\t\t<td>Rounded Total</td>\n\t\t\t\t\t\t\t<td><script>doc.currency</script></td>\n\t\t\t\t\t\t\t<td><script>\n\t\t\t\t\t\t\t\tfmt_money(doc.rounded_total_export)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</tbody></table>\n\t\t\t\t\t<br /><b>In Words</b><br />\n\t\t\t\t\t<i><script>doc.in_words_export</script></i>\n\t\t\t\t</td>\n\t\t\t</tr>\t\t\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\n\t\t</tfoot>\n\t</table>\n</div>\n\n\n',
+		'module': 'Selling',
+		'name': '__common__',
+		'standard': 'Yes'
+	},
+
+	# Print Format, Quotation Spartan
+	{
+		'doctype': 'Print Format',
+		'name': 'Quotation Spartan'
+	}
+]
\ No newline at end of file
diff --git a/erpnext/selling/Print Format/Sales Order Classic/Sales Order Classic.txt b/erpnext/selling/Print Format/Sales Order Classic/Sales Order Classic.txt
new file mode 100644
index 0000000..28a9d68
--- /dev/null
+++ b/erpnext/selling/Print Format/Sales Order Classic/Sales Order Classic.txt
@@ -0,0 +1,28 @@
+# Print Format, Sales Order Classic
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2011-11-15 17:30:44',
+		'docstatus': 0,
+		'modified': '2011-11-15 17:30:44',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all Print Format
+	{
+		'doc_type': 'Sales Order',
+		'doctype': 'Print Format',
+		'html': '<!--\n\tSample Print Format for ERPNext\n\tPlease use at your own discretion\n\tFor suggestions and contributions:\n\t\thttps://github.com/webnotes/erpnext-print-templates\n\n\tFreely usable under MIT license\n-->\n\n<!-- Style Settings -->\n<style>\n\t/*\n\t\tcommon style for whole page\n\t\tThis should include:\n\t\t+ page size related settings\n\t\t+ font family settings\n\t\t+ line spacing settings\n\t*/\n\t@media screen {\n\t\tbody {\n\t\t\twidth: 8.3in;\n\t\t}\n\t}\n\n\thtml, body, div, span, td {\n\t\tfont-family: "Georgia", serif;\n\t\tfont-size: 12px;\n\t}\n\n\tbody {\n\t\tpadding: 10px;\n\t\tmargin: auto;\n\t\tfont-size: 12px;\n\t\tline-height: 150%;\n\t}\n\n\t.common {\n\t\tfont-family: "Georgia", serif !important;\n\t\tfont-size: 12px;\n\t\tpadding: 10px 0px;\n\t}\n\n\ttable {\n\t\tborder-collapse: collapse;\n\t\twidth: 100%;\n\t\tvertical-align: top;\n\t}\n\n\ttable td {\n\t\tpadding: 2px 0px;\n\t}\n\t\n\ttable h1, h2, h3, h4, h5, h6 {\n\t\tpadding: 0px;\n\t\tmargin: 0px;\n\t}\n\n\ttable.header-table td {\n\t\tvertical-align: top;\n\t}\n\n\ttable.header-table thead {\n\t\tborder-bottom: 1px solid black;\n\t}\n\n\ttable.header-table h3 {\n\t\tcolor: gray;\n\t}\n\n\ttable.header-table thead td {\n\t\tpadding: 5px 0px;\n\t}\n\n\tdiv.page-body table td:nth-child(6),\n\tdiv.page-body table td:nth-child(7) {\n\t\ttext-align: right;\n\t}\n\n\ttable.footer-table td {\n\t\tvertical-align: top;\n\t}\n\n\ttable.footer-table td table td:nth-child(2),\n\ttable.footer-table td table td:nth-child(3) {\n\t\ttext-align: right;\n\t}\n</style>\n\n\n<!-- Javascript -->\n<script>\n\tsi_std = {\n\t\tprint_item_table: function() {\n\t\t\tvar table = print_table(\n\t\t\t\t\'Sales Order\',\n\t\t\t\tdoc.name,\n\t\t\t\t\'sales_order_details\',\n\t\t\t\t\'Sales Order Detail\',\n\t\t\t\t[// Here specify the table columns to be displayed\n\t\t\t\t\t\'SR\', \'item_code\', \'description\', \'qty\', \'stock_uom\',\n\t\t\t\t\t\'basic_rate\', \'amount\'\n\t\t\t\t],\n\t\t\t\t[// Here specify the labels of column headings\n\t\t\t\t\t\'Sr\', \'Item Code\', \'Description\', \'Qty\',\n\t\t\t\t\t\'UoM\', \'Basic Rate\', \'Amount\'\n\t\t\t\t],\n\t\t\t\t[// Here specify the column widths\n\t\t\t\t\t\'3%\', \'20%\', \'37%\', \'5%\',\n\t\t\t\t\t\'5%\', \'15%\', \'15%\'\n\t\t\t\t]\n\t\t\t);\n\n\t\t\t// This code takes care of page breaks\n\t\t\tif(table.appendChild) {\n\t\t\t\tout = table.innerHTML;\n\t\t\t} else {\n\t\t\t\tout = \'\';\n\t\t\t\tfor(var i=0; i < (table.length-1); i++) {\n\t\t\t\t\tout += table[i].innerHTML + \n\t\t\t\t\t\t\'<div style = "page-break-after: always;" \\\n\t\t\t\t\t\tclass = "page_break"></div>\\\n\t\t\t\t\t\t<div class="page-settings"></div>\';\n\t\t\t\t}\n\t\t\t\tout += table[table.length-1].innerHTML;\n\t\t\t}\n\t\t\treturn out;\n\t\t},\n\n\n\t\tprint_other_charges: function(parent) {\n\t\t\tvar oc = getchildren(\'RV Tax Detail\', doc.name, \'other_charges\');\n\t\t\tvar rows = \'<table width=100%>\\n\';\n\t\t\tfor(var i=0; i<oc.length; i++) {\n\t\t\t\trows +=\n\t\t\t\t\t\'<tr>\\n\' +\n\t\t\t\t\t\t\'\\t<td>\' + oc[i].description + \'</td>\\n\' +\n\t\t\t\t\t\t\'\\t<td></td>\\n\' +\n\t\t\t\t\t\t\'\\t<td width=38%>\' + fmt_money(oc[i].tax_amount) + \'</td>\\n\' +\n\t\t\t\t\t\'</tr>\\n\';\n\t\t\t}\n\t\t\treturn rows + \'</table>\\n\';\n\t\t}\n\t};\n</script>\n\n\n<!-- Page Layout Settings -->\n<div class=\'common page-header\'>\n\t<!-- \n\t\tPage Header will contain\n\t\t\t+ table 1\n\t\t\t\t+ table 1a\n\t\t\t\t\t- Name\n\t\t\t\t\t- Address\n\t\t\t\t\t- Contact\n\t\t\t\t\t- Mobile No\n\t\t\t\t+ table 1b\n\t\t\t\t\t- Voucher Date\n\t\t\t\t\t- Due Date\n\t-->\n\t<table class=\'header-table\' cellspacing=0>\n\t\t<thead>\n\t\t\t<tr><td><h1>Sales Order</h1></td></tr>\n\t\t\t<tr><td><h3><script>cur_frm.docname</script></h3></td></tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td width=60%><table width=100% cellspacing=0><tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td width=39%><b>Name</b></td>\n\t\t\t\t\t\t<td><script>doc.customer_name</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Address</b></td>\n\t\t\t\t\t\t<td><script>replace_newlines(doc.address_display)</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Contact</b></td>\n\t\t\t\t\t\t<td><script>doc.contact_display</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody></table></td>\n\t\t\t\t<td><table width=100% cellspacing=0><tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td width=63%><b>Sales Order Date</b></td>\n\t\t\t\t\t\t<td><script>date.str_to_user(doc.transaction_date)</script></td>\n\t\t\t\t\t<tr>\t\t\t\t\t\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Delivery Date</b></td>\n\t\t\t\t\t\t<td><script>date.str_to_user(doc.delivery_date)</script></td>\n\t\t\t\t\t<tr>\t\t\t\t\t\n\t\t\t\t</tbody></table></td>\n\t\t\t</tr>\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\n\t\t</tfoot>\n\t</table>\n</div>\n<div class=\'common page-body\'>\n\t<!-- \n\t\tPage Body will contain\n\t\t\t+ table 2\n\t\t\t\t- Sales Invoice Data\n\t-->\n\t<script>si_std.print_item_table()</script>\n</div>\n<div class=\'common page-footer\'>\n\t<!-- \n\t\tPage Footer will contain\n\t\t\t+ table 3\n\t\t\t\t- Terms and Conditions\n\t\t\t\t- Total Rounded Amount Calculation\n\t\t\t\t- Total Rounded Amount in Words\n\t-->\n\t<table class=\'footer-table\' width=100% cellspacing=0>\n\t\t<thead>\n\t\t\t\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td width=60% style=\'padding-right: 10px;\'>\n\t\t\t\t\t<b>Terms, Conditions &amp; Other Information:</b><br />\n\t\t\t\t\t<script>doc.terms</script>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<table cellspacing=0 width=100%><tbody>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>Net Total</td>\n\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t<td width=38%><script>\n\t\t\t\t\t\t\t\tfmt_money(doc.net_total)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>Grand Total</td>\n\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t<td><script>\n\t\t\t\t\t\t\t\tfmt_money(doc.grand_total_export)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr style=\'font-weight: bold\'>\n\t\t\t\t\t\t\t<td>Rounded Total</td>\n\t\t\t\t\t\t\t<td><script>doc.currency</script></td>\n\t\t\t\t\t\t\t<td><script>\n\t\t\t\t\t\t\t\tfmt_money(doc.rounded_total_export)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</tbody></table>\n\t\t\t\t\t<br /><b>In Words</b><br />\n\t\t\t\t\t<i><script>doc.in_words_export</script></i>\n\t\t\t\t</td>\n\t\t\t</tr>\t\t\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\n\t\t</tfoot>\n\t</table>\n</div>\n\n',
+		'module': 'Selling',
+		'name': '__common__',
+		'standard': 'Yes'
+	},
+
+	# Print Format, Sales Order Classic
+	{
+		'doctype': 'Print Format',
+		'name': 'Sales Order Classic'
+	}
+]
\ No newline at end of file
diff --git a/erpnext/selling/Print Format/Sales Order Modern/Sales Order Modern.txt b/erpnext/selling/Print Format/Sales Order Modern/Sales Order Modern.txt
new file mode 100644
index 0000000..80ab0cb
--- /dev/null
+++ b/erpnext/selling/Print Format/Sales Order Modern/Sales Order Modern.txt
@@ -0,0 +1,28 @@
+# Print Format, Sales Order Modern
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2011-11-15 17:30:44',
+		'docstatus': 0,
+		'modified': '2011-11-15 17:30:44',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all Print Format
+	{
+		'doc_type': 'Sales Order',
+		'doctype': 'Print Format',
+		'html': '<!--\n\tSample Print Format for ERPNext\n\tPlease use at your own discretion\n\tFor suggestions and contributions:\n\t\thttps://github.com/webnotes/erpnext-print-templates\n\n\tFreely usable under MIT license\n-->\n\n<!-- Style Settings -->\n<style>\n\t/*\n\t\tcommon style for whole page\n\t\tThis should include:\n\t\t+ page size related settings\n\t\t+ font family settings\n\t\t+ line spacing settings\n\t*/\n\t@media screen {\n\t\tbody {\n\t\t\twidth: 8.3in;\n\t\t}\n\t}\n\n\thtml, body, div, span, td {\n\t\tfont-family: "Helvetica", "Arial", sans-serif;\n\t\tfont-size: 12px;\n\t}\n\n\tbody {\n\t\tpadding: 10px;\n\t\tmargin: auto;\n\t\tfont-size: 12px;\n\t\tline-height: 150%;\n\t}\n\n\t.common {\n\t\tfont-family: "Helvetica", "Arial", sans-serif !important;\n\t\tfont-size: 12px;\n\t\tpadding: 10px 0px;\n\t}\n\n\ttable {\n\t\tborder-collapse: collapse;\n\t\twidth: 100%;\n\t\tvertical-align: top;\n\t\tborder-style: none !important;\n\t}\n\n\ttable td {\n\t\tpadding: 2px 0px;\n\t\tborder-style: none !important;\n\t}\n\t\n\ttable h1, h2, h3, h4, h5, h6 {\n\t\tpadding: 0px;\n\t\tmargin: 0px;\n\t}\n\n\ttable.header-table td {\n\t\tvertical-align: top;\n\t}\n\n\ttable.header-table h1 {\n\t\ttext-transform: uppercase;\n\t\tcolor: white;\n\t\tfont-size: 55px;\n\t\tfont-style: italic;\n\t}\n\n\ttable.header-table thead tr:nth-child(1) div {\n\t\theight: 24px;\n\t\tbackground-color: #696969;\n\t\tvertical-align: middle;\n\t\tpadding: 12px 0px 0px 0px;\n\t\twidth: 100%;\n\t}\n\n\tdiv.page-body table td:nth-child(6),\n\tdiv.page-body table td:nth-child(7) {\n\t\ttext-align: right;\n\t}\n\n\tdiv.page-body table tr td {\n\t\tbackground-color: #DCDCDC !important;\n\t}\n\n\tdiv.page-body table tr:nth-child(1) td {\n\t\tbackground-color: #696969 !important;\n\t\tcolor: white !important;\n\t}\n\n\ttable.footer-table td {\n\t\tvertical-align: top;\n\t}\n\n\ttable.footer-table td table td:nth-child(2),\n\ttable.footer-table td table td:nth-child(3) {\n\t\ttext-align: right;\n\t}\n\n\ttable.footer-table tfoot td {\n\t\tbackground-color: #696969;\n\t\theight: 10px;\n\t}\n\n\t.imp-details {\n\t\tbackground-color: #DCDCDC;\n\t}\n</style>\n\n\n<!-- Javascript -->\n<script>\n\tsi_std = {\n\t\tprint_item_table: function() {\n\t\t\tvar table = print_table(\n\t\t\t\t\'Sales Order\',\n\t\t\t\tdoc.name,\n\t\t\t\t\'sales_order_details\',\n\t\t\t\t\'Sales Order Detail\',\n\t\t\t\t[// Here specify the table columns to be displayed\n\t\t\t\t\t\'SR\', \'item_code\', \'description\', \'qty\', \'stock_uom\',\n\t\t\t\t\t\'basic_rate\', \'amount\'\n\t\t\t\t],\n\t\t\t\t[// Here specify the labels of column headings\n\t\t\t\t\t\'Sr\', \'Item Code\', \'Description\', \'Qty\',\n\t\t\t\t\t\'UoM\', \'Basic Rate\', \'Amount\'\n\t\t\t\t],\n\t\t\t\t[// Here specify the column widths\n\t\t\t\t\t\'3%\', \'20%\', \'37%\', \'5%\',\n\t\t\t\t\t\'5%\', \'15%\', \'15%\'\n\t\t\t\t]\n\t\t\t);\n\n\t\t\t// This code takes care of page breaks\n\t\t\tif(table.appendChild) {\n\t\t\t\tout = table.innerHTML;\n\t\t\t} else {\n\t\t\t\tout = \'\';\n\t\t\t\tfor(var i=0; i < (table.length-1); i++) {\n\t\t\t\t\tout += table[i].innerHTML + \n\t\t\t\t\t\t\'<div style = "page-break-after: always;" \\\n\t\t\t\t\t\tclass = "page_break"></div>\\\n\t\t\t\t\t\t<div class="page-settings"></div>\';\n\t\t\t\t}\n\t\t\t\tout += table[table.length-1].innerHTML;\n\t\t\t}\n\t\t\treturn out;\n\t\t},\n\n\n\t\tprint_other_charges: function(parent) {\n\t\t\tvar oc = getchildren(\'RV Tax Detail\', doc.name, \'other_charges\');\n\t\t\tvar rows = \'<table width=100%>\\n\';\n\t\t\tfor(var i=0; i<oc.length; i++) {\n\t\t\t\trows +=\n\t\t\t\t\t\'<tr>\\n\' +\n\t\t\t\t\t\t\'\\t<td>\' + oc[i].description + \'</td>\\n\' +\n\t\t\t\t\t\t\'\\t<td></td>\\n\' +\n\t\t\t\t\t\t\'\\t<td width=38%>\' + fmt_money(oc[i].tax_amount) + \'</td>\\n\' +\n\t\t\t\t\t\'</tr>\\n\';\n\t\t\t}\n\t\t\treturn rows + \'</table>\\n\';\n\t\t}\n\t};\n</script>\n\n\n<!-- Page Layout Settings -->\n<div class=\'common page-header\'>\n\t<!-- \n\t\tPage Header will contain\n\t\t\t+ table 1\n\t\t\t\t+ table 1a\n\t\t\t\t\t- Name\n\t\t\t\t\t- Address\n\t\t\t\t\t- Contact\n\t\t\t\t\t- Mobile No\n\t\t\t\t+ table 1b\n\t\t\t\t\t- Voucher Date\n\t\t\t\t\t- Due Date\n\t-->\n\t<table class=\'header-table\' cellspacing=0>\n\t\t<thead>\n\t\t\t<tr><td colspan=2><div><h1>Sales Order</h1></div></td></tr>\n\t\t\t<tr><td colspan=2><div style="height:15px"></div></td></tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td width=60%><table width=100% cellspacing=0><tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td width=39%><b>Name</b></td>\n\t\t\t\t\t\t<td><script>doc.customer_name</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Address</b></td>\n\t\t\t\t\t\t<td><script>replace_newlines(doc.address_display)</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Contact</b></td>\n\t\t\t\t\t\t<td><script>doc.contact_display</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody></table></td>\n\t\t\t\t<td><table width=100% cellspacing=0><tbody>\n\t\t\t\t\t<tr class=\'imp-details\'>\n\t\t\t\t\t\t<td><b>Sales Order No.</b></td>\n\t\t\t\t\t\t<td><script>cur_frm.docname</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td width=63%><b>Sales Order Date</b></td>\n\t\t\t\t\t\t<td><script>date.str_to_user(doc.transaction_date)</script></td>\n\t\t\t\t\t<tr>\t\t\t\t\t\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Delivery Date</b></td>\n\t\t\t\t\t\t<td><script>date.str_to_user(doc.delivery_date)</script></td>\n\t\t\t\t\t<tr>\t\t\t\t\t\n\t\t\t\t</tbody></table></td>\n\t\t\t</tr>\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\n\t\t</tfoot>\n\t</table>\n</div>\n<div class=\'common page-body\'>\n\t<!-- \n\t\tPage Body will contain\n\t\t\t+ table 2\n\t\t\t\t- Sales Invoice Data\n\t-->\n\t<script>si_std.print_item_table()</script>\n</div>\n<div class=\'common page-footer\'>\n\t<!-- \n\t\tPage Footer will contain\n\t\t\t+ table 3\n\t\t\t\t- Terms and Conditions\n\t\t\t\t- Total Rounded Amount Calculation\n\t\t\t\t- Total Rounded Amount in Words\n\t-->\n\t<table class=\'footer-table\' width=100% cellspacing=0>\n\t\t<thead>\n\t\t\t\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td width=60% style=\'padding-right: 10px;\'>\n\t\t\t\t\t<b>Terms, Conditions &amp; Other Information:</b><br />\n\t\t\t\t\t<script>doc.terms</script>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<table cellspacing=0 width=100%><tbody>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>Net Total</td>\n\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t<td width=38%><script>\n\t\t\t\t\t\t\t\tfmt_money(doc.net_total)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>Grand Total</td>\n\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t<td><script>\n\t\t\t\t\t\t\t\tfmt_money(doc.grand_total_export)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr style=\'font-weight: bold\' class=\'imp-details\'>\n\t\t\t\t\t\t\t<td>Rounded Total</td>\n\t\t\t\t\t\t\t<td><script>doc.currency</script></td>\n\t\t\t\t\t\t\t<td><script>\n\t\t\t\t\t\t\t\tfmt_money(doc.rounded_total_export)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</tbody></table>\n\t\t\t\t\t<br /><b>In Words</b><br />\n\t\t\t\t\t<i><script>doc.in_words_export</script></i>\n\t\t\t\t</td>\n\t\t\t</tr>\t\t\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\t<tr><td colspan=2><div></div></td><tr>\n\t\t</tfoot>\n\t</table>\n</div>\n\n',
+		'module': 'Selling',
+		'name': '__common__',
+		'standard': 'Yes'
+	},
+
+	# Print Format, Sales Order Modern
+	{
+		'doctype': 'Print Format',
+		'name': 'Sales Order Modern'
+	}
+]
\ No newline at end of file
diff --git a/erpnext/selling/Print Format/Sales Order Spartan/Sales Order Spartan.txt b/erpnext/selling/Print Format/Sales Order Spartan/Sales Order Spartan.txt
new file mode 100644
index 0000000..37d8aed
--- /dev/null
+++ b/erpnext/selling/Print Format/Sales Order Spartan/Sales Order Spartan.txt
@@ -0,0 +1,28 @@
+# Print Format, Sales Order Spartan
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2011-11-15 17:30:44',
+		'docstatus': 0,
+		'modified': '2011-11-16 14:46:00',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all Print Format
+	{
+		'doc_type': 'Sales Order',
+		'doctype': 'Print Format',
+		'html': '<!--\n\tSample Print Format for ERPNext\n\tPlease use at your own discretion\n\tFor suggestions and contributions:\n\t\thttps://github.com/webnotes/erpnext-print-templates\n\n\tFreely usable under MIT license\n-->\n\n<!-- Style Settings -->\n<style>\n\t/*\n\t\tcommon style for whole page\n\t\tThis should include:\n\t\t+ page size related settings\n\t\t+ font family settings\n\t\t+ line spacing settings\n\t*/\n\t@media screen {\n\t\tbody {\n\t\t\twidth: 8.3in;\n\t\t}\n\t}\n\n\thtml, body, div, span, td {\n\t\tfont-family: "Arial", sans-serif;\n\t\tfont-size: 12px;\n\t}\n\n\tbody {\n\t\tpadding: 10px;\n\t\tmargin: auto;\n\t\tfont-size: 12px;\n\t\tline-height: 150%;\n\t}\n\n\t.common {\n\t\tfont-family: "Arial", sans-serif !important;\n\t\tfont-size: 12px;\n\t\tpadding: 0px;\n\t}\n\n\ttable {\n\t\twidth: 100% !important;\n\t\tvertical-align: top;\n\t}\n\n\ttable td {\n\t\tpadding: 2px 0px;\n\t}\n\n\ttable, td {\n\t\tborder-collapse: collapse !important;\n\t\tpadding: 0px;\n\t\tmargin: 0px !important;\n\t}\n\t\n\ttable h1, h2, h3, h4, h5, h6 {\n\t\tpadding: 0px;\n\t\tmargin: 0px;\n\t}\n\n\ttable.header-table td {\n\t\tvertical-align: top;\n\t}\n\n\ttable.header-table h3 {\n\t\tcolor: gray;\n\t}\n\n\ttable.header-table thead td {\n\t\tpadding: 5px;\n\t}\n\n\ttable.header-table > thead,\n\ttable.header-table > tbody > tr > td,\n\ttable.footer-table > tbody > tr > td {\n\t\tborder: 1px solid black;\n\t\tpadding: 5px;\n\t}\n\n\ttable.footer-table > tbody,\n\ttable.header-table > thead {\n\t\tborder-bottom: 3px solid black;\n\t}\n\n\ttable.header-table > thead {\n\t\tborder-top: 3px solid black;\n\t}\n\n\tdiv.page-body table td:nth-child(6),\n\tdiv.page-body table td:nth-child(7) {\n\t\ttext-align: right;\n\t}\n\n\tdiv.page-body td {\n\t\tbackground-color: white !important;\n\t\tborder: 1px solid black !important;\n\t}\n\n\ttable.footer-table td {\n\t\tvertical-align: top;\n\t}\n\n\ttable.footer-table td table td:nth-child(2),\n\ttable.footer-table td table td:nth-child(3) {\n\t\ttext-align: right;\n\t}\n</style>\n\n\n<!-- Javascript -->\n<script>\n\tsi_std = {\n\t\tprint_item_table: function() {\n\t\t\tvar table = print_table(\n\t\t\t\t\'Sales Order\',\n\t\t\t\tdoc.name,\n\t\t\t\t\'sales_order_details\',\n\t\t\t\t\'Sales Order Detail\',\n\t\t\t\t[// Here specify the table columns to be displayed\n\t\t\t\t\t\'SR\', \'item_code\', \'description\', \'qty\', \'stock_uom\',\n\t\t\t\t\t\'basic_rate\', \'amount\'\n\t\t\t\t],\n\t\t\t\t[// Here specify the labels of column headings\n\t\t\t\t\t\'Sr\', \'Item Code\', \'Description\', \'Qty\',\n\t\t\t\t\t\'UoM\', \'Basic Rate\', \'Amount\'\n\t\t\t\t],\n\t\t\t\t[// Here specify the column widths\n\t\t\t\t\t\'3%\', \'20%\', \'37%\', \'5%\',\n\t\t\t\t\t\'5%\', \'15%\', \'15%\'\n\t\t\t\t]\n\t\t\t);\n\n\t\t\t// This code takes care of page breaks\n\t\t\tif(table.appendChild) {\n\t\t\t\tout = table.innerHTML;\n\t\t\t} else {\n\t\t\t\tout = \'\';\n\t\t\t\tfor(var i=0; i < (table.length-1); i++) {\n\t\t\t\t\tout += table[i].innerHTML + \n\t\t\t\t\t\t\'<div style = "page-break-after: always;" \\\n\t\t\t\t\t\tclass = "page_break"></div>\\\n\t\t\t\t\t\t<div class="page-settings"></div>\';\n\t\t\t\t}\n\t\t\t\tout += table[table.length-1].innerHTML;\n\t\t\t}\n\t\t\treturn out;\n\t\t},\n\n\n\t\tprint_other_charges: function(parent) {\n\t\t\tvar oc = getchildren(\'RV Tax Detail\', doc.name, \'other_charges\');\n\t\t\tvar rows = \'<table width=100%>\\n\';\n\t\t\tfor(var i=0; i<oc.length; i++) {\n\t\t\t\trows +=\n\t\t\t\t\t\'<tr>\\n\' +\n\t\t\t\t\t\t\'\\t<td>\' + oc[i].description + \'</td>\\n\' +\n\t\t\t\t\t\t\'\\t<td></td>\\n\' +\n\t\t\t\t\t\t\'\\t<td width=38%>\' + fmt_money(oc[i].tax_amount) + \'</td>\\n\' +\n\t\t\t\t\t\'</tr>\\n\';\n\t\t\t}\n\t\t\treturn rows + \'</table>\\n\';\n\t\t}\n\t};\n</script>\n\n\n<!-- Page Layout Settings -->\n<div class=\'common page-header\'>\n\t<!-- \n\t\tPage Header will contain\n\t\t\t+ table 1\n\t\t\t\t+ table 1a\n\t\t\t\t\t- Name\n\t\t\t\t\t- Address\n\t\t\t\t\t- Contact\n\t\t\t\t\t- Mobile No\n\t\t\t\t+ table 1b\n\t\t\t\t\t- Voucher Date\n\t\t\t\t\t- Due Date\n\t-->\n\t<table class=\'header-table\' cellspacing=0>\n\t\t<thead>\n\t\t\t<tr><td colspan=2><h1>Sales Order</h1></td></tr>\n\t\t\t<tr><td colspan=2><h3><script>cur_frm.docname</script></h3></td></tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td width=60%><table width=100% cellspacing=0><tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td width=39%><b>Name</b></td>\n\t\t\t\t\t\t<td><script>doc.customer_name</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Address</b></td>\n\t\t\t\t\t\t<td><script>replace_newlines(doc.address_display)</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Contact</b></td>\n\t\t\t\t\t\t<td><script>doc.contact_display</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody></table></td>\n\t\t\t\t<td><table width=100% cellspacing=0><tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td width=63%><b>Sales Order Date</b></td>\n\t\t\t\t\t\t<td><script>date.str_to_user(doc.transaction_date)</script></td>\n\t\t\t\t\t<tr>\t\t\t\t\t\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Delivery Date</b></td>\n\t\t\t\t\t\t<td><script>date.str_to_user(doc.delivery_date)</script></td>\n\t\t\t\t\t<tr>\t\t\t\t\t\n\t\t\t\t</tbody></table></td>\n\t\t\t</tr>\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\n\t\t</tfoot>\n\t</table>\n</div>\n<div class=\'common page-body\'>\n\t<!-- \n\t\tPage Body will contain\n\t\t\t+ table 2\n\t\t\t\t- Sales Invoice Data\n\t-->\n\t<script>si_std.print_item_table()</script>\n</div>\n<div class=\'common page-footer\'>\n\t<!-- \n\t\tPage Footer will contain\n\t\t\t+ table 3\n\t\t\t\t- Terms and Conditions\n\t\t\t\t- Total Rounded Amount Calculation\n\t\t\t\t- Total Rounded Amount in Words\n\t-->\n\t<table class=\'footer-table\' width=100% cellspacing=0>\n\t\t<thead>\n\t\t\t\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td width=60% style=\'padding-right: 10px;\'>\n\t\t\t\t\t<b>Terms, Conditions &amp; Other Information:</b><br />\n\t\t\t\t\t<script>doc.terms</script>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<table cellspacing=0 width=100%><tbody>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>Net Total</td>\n\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t<td width=38%><script>\n\t\t\t\t\t\t\t\tfmt_money(doc.net_total)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>Grand Total</td>\n\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t<td><script>\n\t\t\t\t\t\t\t\tfmt_money(doc.grand_total_export)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr style=\'font-weight: bold\'>\n\t\t\t\t\t\t\t<td>Rounded Total</td>\n\t\t\t\t\t\t\t<td><script>doc.currency</script></td>\n\t\t\t\t\t\t\t<td><script>\n\t\t\t\t\t\t\t\tfmt_money(doc.rounded_total_export)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</tbody></table>\n\t\t\t\t\t<br /><b>In Words</b><br />\n\t\t\t\t\t<i><script>doc.in_words_export</script></i>\n\t\t\t\t</td>\n\t\t\t</tr>\t\t\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\n\t\t</tfoot>\n\t</table>\n</div>\n\n\n',
+		'module': 'Selling',
+		'name': '__common__',
+		'standard': 'Yes'
+	},
+
+	# Print Format, Sales Order Spartan
+	{
+		'doctype': 'Print Format',
+		'name': 'Sales Order Spartan'
+	}
+]
\ No newline at end of file
diff --git a/erpnext/selling/doctype/quotation/quotation.py b/erpnext/selling/doctype/quotation/quotation.py
index 1175540..10bccaf 100644
--- a/erpnext/selling/doctype/quotation/quotation.py
+++ b/erpnext/selling/doctype/quotation/quotation.py
@@ -133,24 +133,13 @@
   # Does not allow same item code to be entered twice
   # -------------------------------------------------
   def validate_for_items(self):
-    check_list=[]
     chk_dupl_itm = []
     for d in getlist(self.doclist,'quotation_details'):
-      ch = sql("select is_stock_item from `tabItem` where name = '%s'"%d.item_code)
-      if ch and ch[0][0]=='Yes':
-        if cstr(d.item_code) in check_list:
-	  msgprint("Item %s has been entered twice." % d.item_code)
-	  raise Exception
-	else:
-	  check_list.append(cstr(d.item_code))
-      
-      if ch and ch[0][0]=='No':
-        f = [cstr(d.item_code),cstr(d.description)]
-	if f in chk_dupl_itm:
-	  msgprint("Item %s has been entered twice." % d.item_code)
-	  raise Exception
-	else:
-	  chk_dupl_itm.append(f)
+      if [cstr(d.item_code),cstr(d.description)] in chk_dupl_itm:
+        msgprint("Item %s has been entered twice. Please change description atleast to continue" % d.item_code)
+        raise Exception
+      else:
+        chk_dupl_itm.append([cstr(d.item_code),cstr(d.description)])
 
 
   #do not allow sales item in maintenance quotation and service item in sales quotation
diff --git a/erpnext/startup/startup.css b/erpnext/startup/startup.css
index f028416..7b2b6e5 100644
--- a/erpnext/startup/startup.css
+++ b/erpnext/startup/startup.css
@@ -4,7 +4,7 @@
 }
 
 body, span, div, td, input, textarea, button, select {
-	font-family: Verdana, Arial, Sans Serif;
+	font-family: 'Lucida Grande', 'Lucida Sans Unicode', Verdana, sans-serif;
 	font-size: 12px;
 }
 
diff --git a/erpnext/startup/startup.js b/erpnext/startup/startup.js
index a0661ae..fcb097b 100644
--- a/erpnext/startup/startup.js
+++ b/erpnext/startup/startup.js
@@ -43,18 +43,8 @@
 	// ------------------
 	$dh(page_body.footer);
 
-	// for logout and payment
-	var callback = function(r,rt) {
-		if(r.message){
-			login_file = 'http://' + r.message;
-		}
-		else if(pscript.is_erpnext_saas) {
-			login_file = 'https://www.erpnext.com';
-		}
-		// setup toolbar
-		pscript.startup_setup_toolbar();
-	}
-	$c_obj('Home Control', 'get_login_url', '', callback);
+	// setup toolbar
+	pscript.startup_setup_toolbar();
 }
 
 // ====================================================================
@@ -66,6 +56,14 @@
 		// menu
 		var ml = r.message;
 
+		// login-file
+		if(r.login_url){
+			login_file = 'http://' + r.login_url;
+		}
+		else if(pscript.is_erpnext_saas) {
+			login_file = 'https://www.erpnext.com';
+		}
+
 		// clear
 		page_body.left_sidebar.innerHTML = '';
 
@@ -299,10 +297,10 @@
 
 				// add to menu-item mapper
 				menu_item_map['Page'][me.det.module_label + ' Custom Reports'] = smi.pointer;
-
 			}
-
 		}
+		
+		
 		$(me.items_area).slideDown();
 
 		// high light
@@ -565,7 +563,7 @@
 		'Timesheet': {'timesheet_details':['project_name']}
 	},
 	'fs_packing_details': {
-		'Delivery Note': {'fields':['packing_details','print_packing_slip'],'delivery_note_details':['no_of_packs','pack_gross_wt','pack_nett_wt','pack_no','pack_unit']},
+		'Delivery Note': {'fields':['packing_details','print_packing_slip','packing_checked_by','packed_by','pack_size','shipping_mark'],'delivery_note_details':['no_of_packs','pack_gross_wt','pack_nett_wt','pack_no','pack_unit']},
 		'Sales Order': {'fields':['packing_details']}
 	},
 	'fs_discounts': {
diff --git a/erpnext/stock/DocType Mapper/Purchase Order-Purchase Receipt/Purchase Order-Purchase Receipt.txt b/erpnext/stock/DocType Mapper/Purchase Order-Purchase Receipt/Purchase Order-Purchase Receipt.txt
index c34f006..196d028 100644
--- a/erpnext/stock/DocType Mapper/Purchase Order-Purchase Receipt/Purchase Order-Purchase Receipt.txt
+++ b/erpnext/stock/DocType Mapper/Purchase Order-Purchase Receipt/Purchase Order-Purchase Receipt.txt
@@ -5,7 +5,7 @@
 	{
 		'creation': '2010-08-08 17:09:35',
 		'docstatus': 0,
-		'modified': '2011-10-07 12:10:26',
+		'modified': '2011-10-12 10:49:40',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
@@ -153,6 +153,30 @@
 		'to_field': 'schedule_date'
 	},
 
+	# Field Mapper Detail
+	{
+		'doctype': 'Field Mapper Detail',
+		'from_field': 'net_total',
+		'match_id': 0,
+		'to_field': 'net_total'
+	},
+
+	# Field Mapper Detail
+	{
+		'doctype': 'Field Mapper Detail',
+		'from_field': 'grand_total',
+		'match_id': 0,
+		'to_field': 'grand_total'
+	},
+
+	# Field Mapper Detail
+	{
+		'doctype': 'Field Mapper Detail',
+		'from_field': 'total_tax',
+		'match_id': 0,
+		'to_field': 'total_tax'
+	},
+
 	# Table Mapper Detail
 	{
 		'doctype': 'Table Mapper Detail',
diff --git a/erpnext/stock/Print Format/Delivery Note Classic/Delivery Note Classic.txt b/erpnext/stock/Print Format/Delivery Note Classic/Delivery Note Classic.txt
new file mode 100644
index 0000000..6b815c0
--- /dev/null
+++ b/erpnext/stock/Print Format/Delivery Note Classic/Delivery Note Classic.txt
@@ -0,0 +1,28 @@
+# Print Format, Delivery Note Classic
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2011-11-15 17:30:44',
+		'docstatus': 0,
+		'modified': '2011-11-15 17:30:44',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all Print Format
+	{
+		'doc_type': 'Delivery Note',
+		'doctype': 'Print Format',
+		'html': '<!--\n\tSample Print Format for ERPNext\n\tPlease use at your own discretion\n\tFor suggestions and contributions:\n\t\thttps://github.com/webnotes/erpnext-print-templates\n\n\tFreely usable under MIT license\n-->\n\n<!-- Style Settings -->\n<style>\n\t/*\n\t\tcommon style for whole page\n\t\tThis should include:\n\t\t+ page size related settings\n\t\t+ font family settings\n\t\t+ line spacing settings\n\t*/\n\t@media screen {\n\t\tbody {\n\t\t\twidth: 8.3in;\n\t\t}\n\t}\n\n\thtml, body, div, span, td {\n\t\tfont-family: "Georgia", serif;\n\t\tfont-size: 12px;\n\t}\n\n\tbody {\n\t\tpadding: 10px;\n\t\tmargin: auto;\n\t\tfont-size: 12px;\n\t\tline-height: 150%;\n\t}\n\n\t.common {\n\t\tfont-family: "Georgia", serif !important;\n\t\tfont-size: 12px;\n\t\tpadding: 10px 0px;\n\t}\n\n\ttable {\n\t\tborder-collapse: collapse;\n\t\twidth: 100%;\n\t\tvertical-align: top;\n\t}\n\n\ttable td {\n\t\tpadding: 2px 0px;\n\t}\n\t\n\ttable h1, h2, h3, h4, h5, h6 {\n\t\tpadding: 0px;\n\t\tmargin: 0px;\n\t}\n\n\ttable.header-table td {\n\t\tvertical-align: top;\n\t}\n\n\ttable.header-table thead {\n\t\tborder-bottom: 1px solid black;\n\t}\n\n\ttable.header-table h3 {\n\t\tcolor: gray;\n\t}\n\n\ttable.header-table thead td {\n\t\tpadding: 5px 0px;\n\t}\n\n\tdiv.page-body table td:nth-child(6),\n\tdiv.page-body table td:nth-child(7) {\n\t\ttext-align: right;\n\t}\n\n\ttable.footer-table td {\n\t\tvertical-align: top;\n\t}\n\n\ttable.footer-table td table td:nth-child(2),\n\ttable.footer-table td table td:nth-child(3) {\n\t\ttext-align: right;\n\t}\n</style>\n\n\n<!-- Javascript -->\n<script>\n\tsi_std = {\n\t\tprint_item_table: function() {\n\t\t\tvar table = print_table(\n\t\t\t\t\'Delivery Note\',\n\t\t\t\tdoc.name,\n\t\t\t\t\'delivery_note_details\',\n\t\t\t\t\'Delivery Note Detail\',\n\t\t\t\t[// Here specify the table columns to be displayed\n\t\t\t\t\t\'SR\', \'item_code\', \'item_name\', \'description\', \'qty\', \'stock_uom\',\n\t\t\t\t\t\'basic_rate\', \'amount\'\n\t\t\t\t],\n\t\t\t\t[// Here specify the labels of column headings\n\t\t\t\t\t\'Sr\', \'Item Code\', \'Item Name\', \'Description\', \'Qty\',\n\t\t\t\t\t\'UoM\', \'Basic Rate\', \'Amount\'\n\t\t\t\t],\n\t\t\t\t[// Here specify the column widths\n\t\t\t\t\t\'3%\', \'10%\', \'15%\', \'32%\', \'5%\',\n\t\t\t\t\t\'5%\', \'15%\', \'15%\'\n\t\t\t\t],\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\t{\n\t\t\t\t\t\'description\' : function(data_row) {\n\t\t\t\t\t\tif(data_row.serial_no) {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\tdata_row.description + \n\t\t\t\t\t\t\t\t\'<div style="padding-left: 15px;"><i>Serial No.:\' + \n\t\t\t\t\t\t\t\t((data_row.serial_no.indexOf(\'\\n\')>-1)?\'<br />\':\'&nbsp;\') + \n\t\t\t\t\t\t\t\tdata_row.serial_no + \'</i></div>\'\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn data_row.description;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\n\t\t\t// This code takes care of page breaks\n\t\t\tif(table.appendChild) {\n\t\t\t\tout = table.innerHTML;\n\t\t\t} else {\n\t\t\t\tout = \'\';\n\t\t\t\tfor(var i=0; i < (table.length-1); i++) {\n\t\t\t\t\tout += table[i].innerHTML + \n\t\t\t\t\t\t\'<div style = "page-break-after: always;" \\\n\t\t\t\t\t\tclass = "page_break"></div>\\\n\t\t\t\t\t\t<div class="page-settings"></div>\';\n\t\t\t\t}\n\t\t\t\tout += table[table.length-1].innerHTML;\n\t\t\t}\n\t\t\treturn out;\n\t\t},\n\n\n\t\tprint_other_charges: function(parent) {\n\t\t\tvar oc = getchildren(\'RV Tax Detail\', doc.name, \'other_charges\');\n\t\t\tvar rows = \'<table width=100%>\\n\';\n\t\t\tfor(var i=0; i<oc.length; i++) {\n\t\t\t\trows +=\n\t\t\t\t\t\'<tr>\\n\' +\n\t\t\t\t\t\t\'\\t<td>\' + oc[i].description + \'</td>\\n\' +\n\t\t\t\t\t\t\'\\t<td></td>\\n\' +\n\t\t\t\t\t\t\'\\t<td width=38%>\' + fmt_money(oc[i].tax_amount) + \'</td>\\n\' +\n\t\t\t\t\t\'</tr>\\n\';\n\t\t\t}\n\t\t\treturn rows + \'</table>\\n\';\n\t\t}\n\t};\n</script>\n\n\n<!-- Page Layout Settings -->\n<div class=\'common page-header\'>\n\t<!-- \n\t\tPage Header will contain\n\t\t\t+ table 1\n\t\t\t\t+ table 1a\n\t\t\t\t\t- Name\n\t\t\t\t\t- Address\n\t\t\t\t\t- Contact\n\t\t\t\t\t- Mobile No\n\t\t\t\t+ table 1b\n\t\t\t\t\t- Voucher Date\n\t\t\t\t\t- Due Date\n\t-->\n\t<table class=\'header-table\' cellspacing=0>\n\t\t<thead>\n\t\t\t<tr><td><h1>Delivery Note</h1></td></tr>\n\t\t\t<tr><td><h3><script>cur_frm.docname</script></h3></td></tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td width=60%><table width=100% cellspacing=0><tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td width=22%><b>Name</b></td>\n\t\t\t\t\t\t<td><script>doc.customer_name</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Address</b></td>\n\t\t\t\t\t\t<td><script>replace_newlines(doc.address_display)</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Contact</b></td>\n\t\t\t\t\t\t<td><script>doc.contact_display</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody></table></td>\n\t\t\t\t<td><table width=100% cellspacing=0><tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td width=63%><b>Delivery Note Date</b></td>\n\t\t\t\t\t\t<td><script>date.str_to_user(doc.transaction_date)</script></td>\n\t\t\t\t\t<tr>\t\t\t\t\t\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Sales Order No.</b></td>\n\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t<script>doc.sales_order_no</script><br />\n\t\t\t\t\t\t\t<i>(<script>date.str_to_user(doc.posting_date)</script>)</i>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t<tr>\t\t\t\t\t\n\t\t\t\t</tbody></table></td>\n\t\t\t</tr>\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\n\t\t</tfoot>\n\t</table>\n</div>\n<div class=\'common page-body\'>\n\t<!-- \n\t\tPage Body will contain\n\t\t\t+ table 2\n\t\t\t\t- Sales Invoice Data\n\t-->\n\t<script>si_std.print_item_table()</script>\n</div>\n<div class=\'common page-footer\'>\n\t<!-- \n\t\tPage Footer will contain\n\t\t\t+ table 3\n\t\t\t\t- Terms and Conditions\n\t\t\t\t- Total Rounded Amount Calculation\n\t\t\t\t- Total Rounded Amount in Words\n\t-->\n\t<table class=\'footer-table\' width=100% cellspacing=0>\n\t\t<thead>\n\t\t\t\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td width=60% style=\'padding-right: 10px;\'>\n\t\t\t\t\t<b>Terms, Conditions &amp; Other Information:</b><br />\n\t\t\t\t\t<script>doc.terms</script>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<table cellspacing=0 width=100%><tbody>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>Net Total</td>\n\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t<td width=38%><script>\n\t\t\t\t\t\t\t\tfmt_money(doc.net_total)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>Grand Total</td>\n\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t<td><script>\n\t\t\t\t\t\t\t\tfmt_money(doc.grand_total_export)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr style=\'font-weight: bold\'>\n\t\t\t\t\t\t\t<td>Rounded Total</td>\n\t\t\t\t\t\t\t<td><script>doc.currency</script></td>\n\t\t\t\t\t\t\t<td><script>\n\t\t\t\t\t\t\t\tfmt_money(doc.rounded_total_export)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</tbody></table>\n\t\t\t\t\t<br /><b>In Words</b><br />\n\t\t\t\t\t<i><script>doc.in_words_export</script></i>\n\t\t\t\t</td>\n\t\t\t</tr>\t\t\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\n\t\t</tfoot>\n\t</table>\n</div>\n\n',
+		'module': 'Stock',
+		'name': '__common__',
+		'standard': 'Yes'
+	},
+
+	# Print Format, Delivery Note Classic
+	{
+		'doctype': 'Print Format',
+		'name': 'Delivery Note Classic'
+	}
+]
\ No newline at end of file
diff --git a/erpnext/stock/Print Format/Delivery Note Modern/Delivery Note Modern.txt b/erpnext/stock/Print Format/Delivery Note Modern/Delivery Note Modern.txt
new file mode 100644
index 0000000..9b86f5b
--- /dev/null
+++ b/erpnext/stock/Print Format/Delivery Note Modern/Delivery Note Modern.txt
@@ -0,0 +1,28 @@
+# Print Format, Delivery Note Modern
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2011-11-15 17:30:44',
+		'docstatus': 0,
+		'modified': '2011-11-15 17:30:44',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all Print Format
+	{
+		'doc_type': 'Delivery Note',
+		'doctype': 'Print Format',
+		'html': '<!--\n\tSample Print Format for ERPNext\n\tPlease use at your own discretion\n\tFor suggestions and contributions:\n\t\thttps://github.com/webnotes/erpnext-print-templates\n\n\tFreely usable under MIT license\n-->\n\n<!-- Style Settings -->\n<style>\n\t/*\n\t\tcommon style for whole page\n\t\tThis should include:\n\t\t+ page size related settings\n\t\t+ font family settings\n\t\t+ line spacing settings\n\t*/\n\t@media screen {\n\t\tbody {\n\t\t\twidth: 8.3in;\n\t\t}\n\t}\n\n\thtml, body, div, span, td {\n\t\tfont-family: "Helvetica", "Arial", sans-serif;\n\t\tfont-size: 12px;\n\t}\n\n\tbody {\n\t\tpadding: 10px;\n\t\tmargin: auto;\n\t\tfont-size: 12px;\n\t\tline-height: 150%;\n\t}\n\n\t.common {\n\t\tfont-family: "Helvetica", "Arial", sans-serif !important;\n\t\tfont-size: 12px;\n\t\tpadding: 10px 0px;\n\t}\n\n\ttable {\n\t\tborder-collapse: collapse;\n\t\twidth: 100%;\n\t\tvertical-align: top;\n\t\tborder-style: none !important;\n\t}\n\n\ttable td {\n\t\tpadding: 2px 0px;\n\t\tborder-style: none !important;\n\t}\n\t\n\ttable h1, h2, h3, h4, h5, h6 {\n\t\tpadding: 0px;\n\t\tmargin: 0px;\n\t}\n\n\ttable.header-table td {\n\t\tvertical-align: top;\n\t}\n\n\ttable.header-table h1 {\n\t\ttext-transform: uppercase;\n\t\tcolor: white;\n\t\tfont-size: 55px;\n\t\tfont-style: italic;\n\t}\n\n\ttable.header-table thead tr:nth-child(1) div {\n\t\theight: 24px;\n\t\tbackground-color: #696969;\n\t\tvertical-align: middle;\n\t\tpadding: 12px 0px 0px 0px;\n\t\twidth: 100%;\n\t}\n\n\tdiv.page-body table td:nth-child(6),\n\tdiv.page-body table td:nth-child(7) {\n\t\ttext-align: right;\n\t}\n\n\tdiv.page-body table tr td {\n\t\tbackground-color: #DCDCDC !important;\n\t}\n\n\tdiv.page-body table tr:nth-child(1) td {\n\t\tbackground-color: #696969 !important;\n\t\tcolor: white !important;\n\t}\n\n\ttable.footer-table td {\n\t\tvertical-align: top;\n\t}\n\n\ttable.footer-table td table td:nth-child(2),\n\ttable.footer-table td table td:nth-child(3) {\n\t\ttext-align: right;\n\t}\n\n\ttable.footer-table tfoot td {\n\t\tbackground-color: #696969;\n\t\theight: 10px;\n\t}\n\n\t.imp-details {\n\t\tbackground-color: #DCDCDC;\n\t}\n</style>\n\n\n<!-- Javascript -->\n<script>\n\tsi_std = {\n\t\tprint_item_table: function() {\n\t\t\tvar table = print_table(\n\t\t\t\t\'Delivery Note\',\n\t\t\t\tdoc.name,\n\t\t\t\t\'delivery_note_details\',\n\t\t\t\t\'Delivery Note Detail\',\n\t\t\t\t[// Here specify the table columns to be displayed\n\t\t\t\t\t\'SR\', \'item_code\', \'item_name\', \'description\', \'qty\', \'stock_uom\',\n\t\t\t\t\t\'basic_rate\', \'amount\'\n\t\t\t\t],\n\t\t\t\t[// Here specify the labels of column headings\n\t\t\t\t\t\'Sr\', \'Item Code\', \'Item Name\', \'Description\', \'Qty\',\n\t\t\t\t\t\'UoM\', \'Basic Rate\', \'Amount\'\n\t\t\t\t],\n\t\t\t\t[// Here specify the column widths\n\t\t\t\t\t\'3%\', \'10%\', \'15%\', \'32%\', \'5%\',\n\t\t\t\t\t\'5%\', \'15%\', \'15%\'\n\t\t\t\t],\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\t{\n\t\t\t\t\t\'description\' : function(data_row) {\n\t\t\t\t\t\tif(data_row.serial_no) {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\tdata_row.description + \n\t\t\t\t\t\t\t\t\'<div style="padding-left: 15px;"><i>Serial No.:\' + \n\t\t\t\t\t\t\t\t((data_row.serial_no.indexOf(\'\\n\')>-1)?\'<br />\':\'&nbsp;\') + \n\t\t\t\t\t\t\t\tdata_row.serial_no + \'</i></div>\'\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn data_row.description;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\n\t\t\t// This code takes care of page breaks\n\t\t\tif(table.appendChild) {\n\t\t\t\tout = table.innerHTML;\n\t\t\t} else {\n\t\t\t\tout = \'\';\n\t\t\t\tfor(var i=0; i < (table.length-1); i++) {\n\t\t\t\t\tout += table[i].innerHTML + \n\t\t\t\t\t\t\'<div style = "page-break-after: always;" \\\n\t\t\t\t\t\tclass = "page_break"></div>\\\n\t\t\t\t\t\t<div class="page-settings"></div>\';\n\t\t\t\t}\n\t\t\t\tout += table[table.length-1].innerHTML;\n\t\t\t}\n\t\t\treturn out;\n\t\t},\n\n\n\t\tprint_other_charges: function(parent) {\n\t\t\tvar oc = getchildren(\'RV Tax Detail\', doc.name, \'other_charges\');\n\t\t\tvar rows = \'<table width=100%>\\n\';\n\t\t\tfor(var i=0; i<oc.length; i++) {\n\t\t\t\trows +=\n\t\t\t\t\t\'<tr>\\n\' +\n\t\t\t\t\t\t\'\\t<td>\' + oc[i].description + \'</td>\\n\' +\n\t\t\t\t\t\t\'\\t<td></td>\\n\' +\n\t\t\t\t\t\t\'\\t<td width=38%>\' + fmt_money(oc[i].tax_amount) + \'</td>\\n\' +\n\t\t\t\t\t\'</tr>\\n\';\n\t\t\t}\n\t\t\treturn rows + \'</table>\\n\';\n\t\t}\n\t};\n</script>\n\n\n<!-- Page Layout Settings -->\n<div class=\'common page-header\'>\n\t<!-- \n\t\tPage Header will contain\n\t\t\t+ table 1\n\t\t\t\t+ table 1a\n\t\t\t\t\t- Name\n\t\t\t\t\t- Address\n\t\t\t\t\t- Contact\n\t\t\t\t\t- Mobile No\n\t\t\t\t+ table 1b\n\t\t\t\t\t- Voucher Date\n\t\t\t\t\t- Due Date\n\t-->\n\t<table class=\'header-table\' cellspacing=0>\n\t\t<thead>\n\t\t\t<tr><td colspan=2><div><h1>Delivery Note</h1></div></td></tr>\n\t\t\t<tr><td colspan=2><div style="height:15px"></div></td></tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td width=60%><table width=100% cellspacing=0><tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td width=22%><b>Name</b></td>\n\t\t\t\t\t\t<td><script>doc.customer_name</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Address</b></td>\n\t\t\t\t\t\t<td><script>replace_newlines(doc.address_display)</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Contact</b></td>\n\t\t\t\t\t\t<td><script>doc.contact_display</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody></table></td>\n\t\t\t\t<td><table width=100% cellspacing=0><tbody>\n\t\t\t\t\t<tr class=\'imp-details\'>\n\t\t\t\t\t\t<td><b>Delivery Note No.</b></td>\n\t\t\t\t\t\t<td><script>cur_frm.docname</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td width=63%><b>Delivery Note Date</b></td>\n\t\t\t\t\t\t<td><script>date.str_to_user(doc.transaction_date)</script></td>\n\t\t\t\t\t<tr>\t\t\t\t\t\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Sales Order No.</b></td>\n\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t<script>doc.sales_order_no</script><br />\n\t\t\t\t\t\t\t<i>(<script>date.str_to_user(doc.posting_date)</script>)</i>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t<tr>\t\t\t\t\t\n\t\t\t\t</tbody></table></td>\n\t\t\t</tr>\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\n\t\t</tfoot>\n\t</table>\n</div>\n<div class=\'common page-body\'>\n\t<!-- \n\t\tPage Body will contain\n\t\t\t+ table 2\n\t\t\t\t- Sales Invoice Data\n\t-->\n\t<script>si_std.print_item_table()</script>\n</div>\n<div class=\'common page-footer\'>\n\t<!-- \n\t\tPage Footer will contain\n\t\t\t+ table 3\n\t\t\t\t- Terms and Conditions\n\t\t\t\t- Total Rounded Amount Calculation\n\t\t\t\t- Total Rounded Amount in Words\n\t-->\n\t<table class=\'footer-table\' width=100% cellspacing=0>\n\t\t<thead>\n\t\t\t\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td width=60% style=\'padding-right: 10px;\'>\n\t\t\t\t\t<b>Terms, Conditions &amp; Other Information:</b><br />\n\t\t\t\t\t<script>doc.terms</script>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<table cellspacing=0 width=100%><tbody>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>Net Total</td>\n\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t<td width=38%><script>\n\t\t\t\t\t\t\t\tfmt_money(doc.net_total)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>Grand Total</td>\n\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t<td><script>\n\t\t\t\t\t\t\t\tfmt_money(doc.grand_total_export)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr style=\'font-weight: bold\' class=\'imp-details\'>\n\t\t\t\t\t\t\t<td>Rounded Total</td>\n\t\t\t\t\t\t\t<td><script>doc.currency</script></td>\n\t\t\t\t\t\t\t<td><script>\n\t\t\t\t\t\t\t\tfmt_money(doc.rounded_total_export)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</tbody></table>\n\t\t\t\t\t<br /><b>In Words</b><br />\n\t\t\t\t\t<i><script>doc.in_words_export</script></i>\n\t\t\t\t</td>\n\t\t\t</tr>\t\t\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\t<tr><td colspan=2><div></div></td><tr>\n\t\t</tfoot>\n\t</table>\n</div>\n\n',
+		'module': 'Stock',
+		'name': '__common__',
+		'standard': 'Yes'
+	},
+
+	# Print Format, Delivery Note Modern
+	{
+		'doctype': 'Print Format',
+		'name': 'Delivery Note Modern'
+	}
+]
\ No newline at end of file
diff --git a/erpnext/stock/Print Format/Delivery Note Packing List Wise/Delivery Note Packing List Wise.txt b/erpnext/stock/Print Format/Delivery Note Packing List Wise/Delivery Note Packing List Wise.txt
index 97f57a9..849db97 100644
--- a/erpnext/stock/Print Format/Delivery Note Packing List Wise/Delivery Note Packing List Wise.txt
+++ b/erpnext/stock/Print Format/Delivery Note Packing List Wise/Delivery Note Packing List Wise.txt
@@ -3,9 +3,9 @@
 
 	# These values are common in all dictionaries
 	{
-		'creation': '2011-08-18 16:29:14',
+		'creation': '2011-08-23 16:49:40',
 		'docstatus': 0,
-		'modified': '2011-08-23 13:24:12',
+		'modified': '2011-10-19 14:12:11',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
@@ -13,7 +13,7 @@
 	# These values are common for all Print Format
 	{
 		'doctype': 'Print Format',
-		'html': "<html>\n<head>\n\n<script>\nfunction replaceAll(s,s1,s2){ return s.split(s1).join(s2);}\n\nfunction get_letter_head(){\n  var cp = locals['Control Panel']['Control Panel'];\n    if(cp.letter_head != 'None') {return cp.letter_head; }\n      else{ return ''};\n  }\n</script>\n<style>\n.cust_tbl { border-collapse:collapse; }\n.cust_tbl td { border:1px solid #848484; }\n</style>\n</head>\n\n<body>\n<script>\nreplaceAll(doc.print_packing_slip,'[HEADER GOES HERE]',get_letter_head());\n</script>\n</body>\n</html>",
+		'html': "<html>\n<head>\n\n<script>\nfunction replaceAll(s,s1,s2){ return s.split(s1).join(s2);}\n\nfunction get_letter_head() {\n\t// add letter head\n\tvar cp = locals['Control Panel']['Control Panel'];\n\tif(doc.letter_head)\n\t\tvar lh= cstr(_p.letter_heads[doc.letter_head]);\n\telse if(cp.letter_head)\n\t\tvar lh= cp.letter_head;\n\telse \n\t\tvar lh= '';\n\t\t\n\treturn lh;\n}\n\n</script>\n<style>\n.cust_tbl { border-collapse:collapse; }\n.cust_tbl td { border:1px solid #848484; font-size: 13px}\n.large_font td {font-size: 13px}\n</style>\n</head>\n\n<body>\n<script>\nreplaceAll(doc.print_packing_slip,'[HEADER GOES HERE]',get_letter_head());\n</script>\n</body>\n</html>",
 		'module': 'Stock',
 		'name': '__common__',
 		'standard': 'Yes'
diff --git a/erpnext/stock/Print Format/Delivery Note Spartan/Delivery Note Spartan.txt b/erpnext/stock/Print Format/Delivery Note Spartan/Delivery Note Spartan.txt
new file mode 100644
index 0000000..f8e989c
--- /dev/null
+++ b/erpnext/stock/Print Format/Delivery Note Spartan/Delivery Note Spartan.txt
@@ -0,0 +1,28 @@
+# Print Format, Delivery Note Spartan
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2011-11-15 17:30:44',
+		'docstatus': 0,
+		'modified': '2011-11-16 14:43:28',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all Print Format
+	{
+		'doc_type': 'Delivery Note',
+		'doctype': 'Print Format',
+		'html': '<!--\n\tSample Print Format for ERPNext\n\tPlease use at your own discretion\n\tFor suggestions and contributions:\n\t\thttps://github.com/webnotes/erpnext-print-templates\n\n\tFreely usable under MIT license\n-->\n\n<!-- Style Settings -->\n<style>\n\t/*\n\t\tcommon style for whole page\n\t\tThis should include:\n\t\t+ page size related settings\n\t\t+ font family settings\n\t\t+ line spacing settings\n\t*/\n\t@media screen {\n\t\tbody {\n\t\t\twidth: 8.3in;\n\t\t}\n\t}\n\n\thtml, body, div, span, td {\n\t\tfont-family: "Arial", sans-serif;\n\t\tfont-size: 12px;\n\t}\n\n\tbody {\n\t\tpadding: 10px;\n\t\tmargin: auto;\n\t\tfont-size: 12px;\n\t\tline-height: 150%;\n\t}\n\n\t.common {\n\t\tfont-family: "Arial", sans-serif !important;\n\t\tfont-size: 12px;\n\t\tpadding: 0px;\n\t}\n\n\ttable {\n\t\twidth: 100% !important;\n\t\tvertical-align: top;\n\t}\n\n\ttable td {\n\t\tpadding: 2px 0px;\n\t}\n\n\ttable, td {\n\t\tborder-collapse: collapse !important;\n\t\tpadding: 0px;\n\t\tmargin: 0px !important;\n\t}\n\t\n\ttable h1, h2, h3, h4, h5, h6 {\n\t\tpadding: 0px;\n\t\tmargin: 0px;\n\t}\n\n\ttable.header-table td {\n\t\tvertical-align: top;\n\t}\n\n\ttable.header-table h3 {\n\t\tcolor: gray;\n\t}\n\n\ttable.header-table thead td {\n\t\tpadding: 5px;\n\t}\n\n\ttable.header-table > thead,\n\ttable.header-table > tbody > tr > td,\n\ttable.footer-table > tbody > tr > td {\n\t\tborder: 1px solid black;\n\t\tpadding: 5px;\n\t}\n\n\ttable.footer-table > tbody,\n\ttable.header-table > thead {\n\t\tborder-bottom: 3px solid black;\n\t}\n\n\ttable.header-table > thead {\n\t\tborder-top: 3px solid black;\n\t}\n\n\tdiv.page-body table td:nth-child(6),\n\tdiv.page-body table td:nth-child(7) {\n\t\ttext-align: right;\n\t}\n\n\tdiv.page-body td {\n\t\tbackground-color: white !important;\n\t\tborder: 1px solid black !important;\n\t}\n\n\ttable.footer-table td {\n\t\tvertical-align: top;\n\t}\n\n\ttable.footer-table td table td:nth-child(2),\n\ttable.footer-table td table td:nth-child(3) {\n\t\ttext-align: right;\n\t}\n</style>\n\n\n<!-- Javascript -->\n<script>\n\tsi_std = {\n\t\tprint_item_table: function() {\n\t\t\tvar table = print_table(\n\t\t\t\t\'Delivery Note\',\n\t\t\t\tdoc.name,\n\t\t\t\t\'delivery_note_details\',\n\t\t\t\t\'Delivery Note Detail\',\n\t\t\t\t[// Here specify the table columns to be displayed\n\t\t\t\t\t\'SR\', \'item_code\', \'item_name\', \'description\', \'qty\', \'stock_uom\',\n\t\t\t\t\t\'basic_rate\', \'amount\'\n\t\t\t\t],\n\t\t\t\t[// Here specify the labels of column headings\n\t\t\t\t\t\'Sr\', \'Item Code\', \'Item Name\', \'Description\', \'Qty\',\n\t\t\t\t\t\'UoM\', \'Basic Rate\', \'Amount\'\n\t\t\t\t],\n\t\t\t\t[// Here specify the column widths\n\t\t\t\t\t\'3%\', \'10%\', \'15%\', \'32%\', \'5%\',\n\t\t\t\t\t\'5%\', \'15%\', \'15%\'\n\t\t\t\t],\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\t{\n\t\t\t\t\t\'description\' : function(data_row) {\n\t\t\t\t\t\tif(data_row.serial_no) {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\tdata_row.description + \n\t\t\t\t\t\t\t\t\'<div style="padding-left: 15px;"><i>Serial No.:\' + \n\t\t\t\t\t\t\t\t((data_row.serial_no.indexOf(\'\\n\')>-1)?\'<br />\':\'&nbsp;\') + \n\t\t\t\t\t\t\t\tdata_row.serial_no + \'</i></div>\'\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn data_row.description;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\n\t\t\t// This code takes care of page breaks\n\t\t\tif(table.appendChild) {\n\t\t\t\tout = table.innerHTML;\n\t\t\t} else {\n\t\t\t\tout = \'\';\n\t\t\t\tfor(var i=0; i < (table.length-1); i++) {\n\t\t\t\t\tout += table[i].innerHTML + \n\t\t\t\t\t\t\'<div style = "page-break-after: always;" \\\n\t\t\t\t\t\tclass = "page_break"></div>\\\n\t\t\t\t\t\t<div class="page-settings"></div>\';\n\t\t\t\t}\n\t\t\t\tout += table[table.length-1].innerHTML;\n\t\t\t}\n\t\t\treturn out;\n\t\t},\n\n\n\t\tprint_other_charges: function(parent) {\n\t\t\tvar oc = getchildren(\'RV Tax Detail\', doc.name, \'other_charges\');\n\t\t\tvar rows = \'<table width=100%>\\n\';\n\t\t\tfor(var i=0; i<oc.length; i++) {\n\t\t\t\trows +=\n\t\t\t\t\t\'<tr>\\n\' +\n\t\t\t\t\t\t\'\\t<td>\' + oc[i].description + \'</td>\\n\' +\n\t\t\t\t\t\t\'\\t<td></td>\\n\' +\n\t\t\t\t\t\t\'\\t<td width=38%>\' + fmt_money(oc[i].tax_amount) + \'</td>\\n\' +\n\t\t\t\t\t\'</tr>\\n\';\n\t\t\t}\n\t\t\treturn rows + \'</table>\\n\';\n\t\t}\n\t};\n</script>\n\n\n<!-- Page Layout Settings -->\n<div class=\'common page-header\'>\n\t<!-- \n\t\tPage Header will contain\n\t\t\t+ table 1\n\t\t\t\t+ table 1a\n\t\t\t\t\t- Name\n\t\t\t\t\t- Address\n\t\t\t\t\t- Contact\n\t\t\t\t\t- Mobile No\n\t\t\t\t+ table 1b\n\t\t\t\t\t- Voucher Date\n\t\t\t\t\t- Due Date\n\t-->\n\t<table class=\'header-table\' cellspacing=0>\n\t\t<thead>\n\t\t\t<tr><td colspan=2><h1>Delivery Note</h1></td></tr>\n\t\t\t<tr><td colspan=2><h3><script>cur_frm.docname</script></h3></td></tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td width=60%><table width=100% cellspacing=0><tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td width=22%><b>Name</b></td>\n\t\t\t\t\t\t<td><script>doc.customer_name</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Address</b></td>\n\t\t\t\t\t\t<td><script>replace_newlines(doc.address_display)</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Contact</b></td>\n\t\t\t\t\t\t<td><script>doc.contact_display</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody></table></td>\n\t\t\t\t<td><table width=100% cellspacing=0><tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td width=63%><b>Delivery Note Date</b></td>\n\t\t\t\t\t\t<td><script>date.str_to_user(doc.transaction_date)</script></td>\n\t\t\t\t\t<tr>\t\t\t\t\t\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Sales Order No.</b></td>\n\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t<script>doc.sales_order_no</script><br />\n\t\t\t\t\t\t\t<i>(<script>date.str_to_user(doc.posting_date)</script>)</i>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t<tr>\t\t\t\t\t\n\t\t\t\t</tbody></table></td>\n\t\t\t</tr>\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\n\t\t</tfoot>\n\t</table>\n</div>\n<div class=\'common page-body\'>\n\t<!-- \n\t\tPage Body will contain\n\t\t\t+ table 2\n\t\t\t\t- Sales Invoice Data\n\t-->\n\t<script>si_std.print_item_table()</script>\n</div>\n<div class=\'common page-footer\'>\n\t<!-- \n\t\tPage Footer will contain\n\t\t\t+ table 3\n\t\t\t\t- Terms and Conditions\n\t\t\t\t- Total Rounded Amount Calculation\n\t\t\t\t- Total Rounded Amount in Words\n\t-->\n\t<table class=\'footer-table\' width=100% cellspacing=0>\n\t\t<thead>\n\t\t\t\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td width=60% style=\'padding-right: 10px;\'>\n\t\t\t\t\t<b>Terms, Conditions &amp; Other Information:</b><br />\n\t\t\t\t\t<script>doc.terms</script>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<table cellspacing=0 width=100%><tbody>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>Net Total</td>\n\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t<td width=38%><script>\n\t\t\t\t\t\t\t\tfmt_money(doc.net_total)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>Grand Total</td>\n\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t<td><script>\n\t\t\t\t\t\t\t\tfmt_money(doc.grand_total_export)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr style=\'font-weight: bold\'>\n\t\t\t\t\t\t\t<td>Rounded Total</td>\n\t\t\t\t\t\t\t<td><script>doc.currency</script></td>\n\t\t\t\t\t\t\t<td><script>\n\t\t\t\t\t\t\t\tfmt_money(doc.rounded_total_export)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</tbody></table>\n\t\t\t\t\t<br /><b>In Words</b><br />\n\t\t\t\t\t<i><script>doc.in_words_export</script></i>\n\t\t\t\t</td>\n\t\t\t</tr>\t\t\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\n\t\t</tfoot>\n\t</table>\n</div>\n\n\n',
+		'module': 'Stock',
+		'name': '__common__',
+		'standard': 'Yes'
+	},
+
+	# Print Format, Delivery Note Spartan
+	{
+		'doctype': 'Print Format',
+		'name': 'Delivery Note Spartan'
+	}
+]
\ No newline at end of file
diff --git a/erpnext/stock/Print Format/Purchase Receipt Format/Purchase Receipt Format.txt b/erpnext/stock/Print Format/Purchase Receipt Format/Purchase Receipt Format.txt
index fc7bc0e..8ffb83e 100644
--- a/erpnext/stock/Print Format/Purchase Receipt Format/Purchase Receipt Format.txt
+++ b/erpnext/stock/Print Format/Purchase Receipt Format/Purchase Receipt Format.txt
@@ -5,7 +5,7 @@
 	{
 		'creation': '2010-08-08 17:09:34',
 		'docstatus': 0,
-		'modified': '2009-09-07 11:03:11',
+		'modified': '2011-10-19 14:18:26',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
@@ -13,7 +13,7 @@
 	# These values are common for all Print Format
 	{
 		'doctype': 'Print Format',
-		'html': '<html>\n<head>\n<!--Other charges function-->\n<script>\n    var make_row = function(title,val,bold){\n    var bstart = \'<b>\'; var bend = \'</b>\';\n    return \'<tr><td style="width:50%">\'+(bold?bstart:\'\')+title+(bold?bend:\'\')+\'</td>\'\n              +\'<td style="width:20%;text-align:right">\'+doc.currency+\'</td>\'\n              +\'<td style="width:30%;text-align:right">\'+(val?val:\'0.00\')+\'</td>\'\n              +\'</tr>\'\n  }\n\n  function get_other_charges(){\n    var out =\'\';\n    out += \'<div><table class="noborder" style="width:100%">\';\n    out += make_row(\'Total Amount\',fmt_money(convert_rate(doc.total_amount)),1)\n          +make_row(\'Grand Total\',fmt_money(convert_rate(doc.grand_total)),1);\n    out += \'</table></div>\';\n    return out;\n  }\n\n  function get_buying_costs(){\n    var out =\'\';\n    if(doc.buying_cost_transport || doc.buying_cost_taxes || doc.buying_cost_other){\n      out += \'<div><table class="noborder" style="width:100%">\'\n            + \'<tr><td style="width:100%"><b>\'+\'Buying Cost Details\'+\'</b></td></tr>\';\n      if(doc.buying_cost_transport){ out += make_row(\'Transport Cost\',fmt_money(convert_rate(doc.buying_cost_transport)),0)}\n      if(doc.buying_cost_taxes){ out += make_row(\'Taxes\',fmt_money(convert_rate(doc.buying_cost_taxes)),0)}\n      if(doc.buying_cost_other){ out += make_row(\'Other Cost\',fmt_money(convert_rate(doc.buying_cost_other)),0)}\n      out += \'</table></div>\';\n    }\n    return out;\n  }\n\n  function get_letter_head(){\n    var cp = locals[\'Control Panel\'][\'Control Panel\'];\n  \tif(cp.letter_head) {return cp.letter_head; }\n  }\n  \n  function convert_rate(val){\n    var new_val = flt(val)/flt(doc.conversion_rate);\n    return new_val;\n  }\n  \n    function get_transport_details(){\n    var out = \'\';\n    if(doc.transporter_name || doc.lr_no || doc.lr_date){\n     out += \'<div><table class="noborder" style="width:40%">\'\n            +\'<tr><td style="width:80%"><b>\' + \'Transporter Details\'+\'</b></td><td style="width:20%"></td></tr>\'\n\n     if(doc.transporter_name){ out += \'<tr><td style="width:40%">\' + \'Transporter Name\'+\'</td><td style="width:60%">\'+doc.transporter_name+\'</td></tr>\'}\n     if(doc.lr_no){ out += \'<tr><td style="width:40%">\' + \'LR No\'+\'</td><td style="width:60%">\'+doc.lr_no+\'</td></tr>\'}\n     if(doc.lr_date){ out += \'<tr><td style="width:40%">\' + \'LR Date\'+\'</td><td style="width:60%">\'+doc.lr_date+\'</td></tr>\'}\n     out += \'</table></div>\'\n    }\n    return out;\n  }\n\n</script>\n</head>\n<body>\n<div style="border:1px solid black;padding:15px">\n<!--header-->\n<div><script>get_letter_head()</script></div>\n<div style="border-bottom: 1px solid; padding-bottom: 5px;">\n <div><br><b>Purchase Receipt: <script>doc.name</script></b></div>\n <div>Date: <script>date.str_to_user(doc.transaction_date)</script></div>\n</div>\n\n<div style="padding-top:15px">\n<div><script>doc.supplier</script></div>\n<div><br><script>replace_newlines(doc.address_display)</script></div>\n</div>\n\n<div>\n<br>\n    <script>\n    var t = print_table(\'Purchase Receipt\', doc.name, \'purchase_receipt_details\', \'Purchase Receipt Detail\', [\'SR\', \'item_code\',\'description\',\'received_qty\',\'qty\',\'rejected_qty\',\'po_rate\',\'amount\',\'billed_qty\'], [\'Sr\', \'Item Code\', \'Description\',\'Received Quantity\',\'Accepted Qty\',\'Rejected Qty\',\'Rate\',\'Amount\',\'Billed Qty\'], [\'4%\',\'12%\', \'24%\', \'10%\',\'10%\',\'10%\',\'10%\',\'10%\',\'10%\'])\n    if(t.appendChild) {\n      // single\n      out = t.innerHTML;\n    } \n    else {//multiple\n      out = \'\'\n      for(var i=0;i<t.length;i++) {\n        if(i!=t.length-1){\n          out += \'<div style:"padding-top:5px;"></div>\' + t[i].innerHTML +\'<div style="page-break-after:always"></div>\';\n        }\n        else out += \'<div style:"padding-top:5px;"></div>\' + t[i].innerHTML;\n      }\n    }\n    out;\n    </script>\n\n</div>\n\n<!--Other charges table-->\n<div>\n<table style="width:100%">\n  <tr><td style="width:40%"><script>get_buying_costs()</script></td>\n  <td style="width:20%"></td><td style="width:40%"><script>get_other_charges()</script></td></tr>\n</table>\n</div>\n<div><script>get_transport_details()</script></div>\n<div><br>Payment Terms</div>\n<div><br><script>replace_newlines(doc.payment_terms)</script></div>\n<div><br>For NCSCI</div>\n<div><br><br>(Authorised Signatory)</div>\n</div></body>\n</html>',
+		'html': '<html>\n<head>\n<!--Other charges function-->\n<script>\n    var make_row = function(title,val,bold){\n    var bstart = \'<b>\'; var bend = \'</b>\';\n    return \'<tr><td style="width:50%">\'+(bold?bstart:\'\')+title+(bold?bend:\'\')+\'</td>\'\n              +\'<td style="width:20%;text-align:right">\'+doc.currency+\'</td>\'\n              +\'<td style="width:30%;text-align:right">\'+(val?val:\'0.00\')+\'</td>\'\n              +\'</tr>\'\n  }\n\n  function get_other_charges(){\n    var out =\'\';\n    out += \'<div><table class="noborder" style="width:100%">\';\n    out += make_row(\'Total Amount\',fmt_money(convert_rate(doc.total_amount)),1)\n          +make_row(\'Grand Total\',fmt_money(convert_rate(doc.grand_total)),1);\n    out += \'</table></div>\';\n    return out;\n  }\n\n  function get_buying_costs(){\n    var out =\'\';\n    if(doc.buying_cost_transport || doc.buying_cost_taxes || doc.buying_cost_other){\n      out += \'<div><table class="noborder" style="width:100%">\'\n            + \'<tr><td style="width:100%"><b>\'+\'Buying Cost Details\'+\'</b></td></tr>\';\n      if(doc.buying_cost_transport){ out += make_row(\'Transport Cost\',fmt_money(convert_rate(doc.buying_cost_transport)),0)}\n      if(doc.buying_cost_taxes){ out += make_row(\'Taxes\',fmt_money(convert_rate(doc.buying_cost_taxes)),0)}\n      if(doc.buying_cost_other){ out += make_row(\'Other Cost\',fmt_money(convert_rate(doc.buying_cost_other)),0)}\n      out += \'</table></div>\';\n    }\n    return out;\n  }\n\nfunction get_letter_head() {\n\t// add letter head\n\tvar cp = locals[\'Control Panel\'][\'Control Panel\'];\n\tif(doc.letter_head)\n\t\tvar lh= cstr(_p.letter_heads[doc.letter_head]);\n\telse if(cp.letter_head)\n\t\tvar lh= cp.letter_head;\n\telse \n\t\tvar lh= \'\';\n\t\t\n\treturn lh;\n}\n\n  \n  function convert_rate(val){\n    var new_val = flt(val)/flt(doc.conversion_rate);\n    return new_val;\n  }\n  \n    function get_transport_details(){\n    var out = \'\';\n    if(doc.transporter_name || doc.lr_no || doc.lr_date){\n     out += \'<div><table class="noborder" style="width:40%">\'\n            +\'<tr><td style="width:80%"><b>\' + \'Transporter Details\'+\'</b></td><td style="width:20%"></td></tr>\'\n\n     if(doc.transporter_name){ out += \'<tr><td style="width:40%">\' + \'Transporter Name\'+\'</td><td style="width:60%">\'+doc.transporter_name+\'</td></tr>\'}\n     if(doc.lr_no){ out += \'<tr><td style="width:40%">\' + \'LR No\'+\'</td><td style="width:60%">\'+doc.lr_no+\'</td></tr>\'}\n     if(doc.lr_date){ out += \'<tr><td style="width:40%">\' + \'LR Date\'+\'</td><td style="width:60%">\'+doc.lr_date+\'</td></tr>\'}\n     out += \'</table></div>\'\n    }\n    return out;\n  }\n\n</script>\n</head>\n<body>\n<div style="border:1px solid black;padding:15px">\n<!--header-->\n<div><script>get_letter_head()</script></div>\n<div style="border-bottom: 1px solid; padding-bottom: 5px;">\n <div><br><b>Purchase Receipt: <script>doc.name</script></b></div>\n <div>Date: <script>date.str_to_user(doc.transaction_date)</script></div>\n</div>\n\n<div style="padding-top:15px">\n<div><script>doc.supplier</script></div>\n<div><br><script>replace_newlines(doc.address_display)</script></div>\n</div>\n\n<div>\n<br>\n    <script>\n    var t = print_table(\'Purchase Receipt\', doc.name, \'purchase_receipt_details\', \'Purchase Receipt Detail\', [\'SR\', \'item_code\',\'description\',\'received_qty\',\'qty\',\'rejected_qty\',\'po_rate\',\'amount\',\'billed_qty\'], [\'Sr\', \'Item Code\', \'Description\',\'Received Quantity\',\'Accepted Qty\',\'Rejected Qty\',\'Rate\',\'Amount\',\'Billed Qty\'], [\'4%\',\'12%\', \'24%\', \'10%\',\'10%\',\'10%\',\'10%\',\'10%\',\'10%\'])\n    if(t.appendChild) {\n      // single\n      out = t.innerHTML;\n    } \n    else {//multiple\n      out = \'\'\n      for(var i=0;i<t.length;i++) {\n        if(i!=t.length-1){\n          out += \'<div style:"padding-top:5px;"></div>\' + t[i].innerHTML +\'<div style="page-break-after:always"></div>\';\n        }\n        else out += \'<div style:"padding-top:5px;"></div>\' + t[i].innerHTML;\n      }\n    }\n    out;\n    </script>\n\n</div>\n\n<!--Other charges table-->\n<div>\n<table style="width:100%">\n  <tr><td style="width:40%"><script>get_buying_costs()</script></td>\n  <td style="width:20%"></td><td style="width:40%"><script>get_other_charges()</script></td></tr>\n</table>\n</div>\n<div><script>get_transport_details()</script></div>\n<div><br>Payment Terms</div>\n<div><br><script>replace_newlines(doc.payment_terms)</script></div>\n<div><br>For NCSCI</div>\n<div><br><br>(Authorised Signatory)</div>\n</div></body>\n</html>',
 		'module': 'Stock',
 		'name': '__common__',
 		'standard': 'Yes'
diff --git a/erpnext/stock/doctype/bin/bin.py b/erpnext/stock/doctype/bin/bin.py
index cf9509a..e3af0a2 100644
--- a/erpnext/stock/doctype/bin/bin.py
+++ b/erpnext/stock/doctype/bin/bin.py
@@ -1,18 +1,11 @@
 # Please edit this list and import only required elements
 import webnotes
 
-from webnotes.utils import add_days, add_months, add_years, cint, cstr, date_diff, default_fields, flt, fmt_money, formatdate, generate_hash, getTraceback, get_defaults, get_first_day, get_last_day, getdate, has_common, month_name, now, nowdate, replace_newlines, sendmail, set_default, str_esc_quote, user_format, validate_email_add
-from webnotes.model import db_exists
-from webnotes.model.doc import Document, addchild, removechild, getchildren, make_autoname, SuperDocType
-from webnotes.model.doclist import getlist, copy_doclist
-from webnotes.model.code import get_obj, get_server_obj, run_server_obj, updatedb, check_syntax
-from webnotes import session, form, is_testing, msgprint, errprint
+from webnotes.utils import cint, cstr, flt, nowdate
+from webnotes.model.code import get_obj
+from webnotes import msgprint
 
-set = webnotes.conn.set
 sql = webnotes.conn.sql
-get_value = webnotes.conn.get_value
-in_transaction = webnotes.conn.in_transaction
-convert_to_lists = webnotes.conn.convert_to_lists
 
 # -----------------------------------------------------------------------------------------
 
@@ -39,19 +32,13 @@
 		self.doc.save()
 			
 		
-		# update valuation for post dated entry
 		if actual_qty:
 			# check actual qty with total number of serial no
 			if serial_no:
 				self.check_qty_with_serial_no()
-			
-			prev_sle = self.get_prev_sle(dt, posting_time, sle_id)
-			cqty = flt(prev_sle.get('bin_aqat', 0))
-			# Block if actual qty becomes negative
-			if (flt(cqty) + flt(actual_qty)) < 0 and flt(actual_qty) < 0 and is_cancelled == 'No':
-				msgprint('Not enough quantity (requested: %s, current: %s) for Item <b>%s</b> in Warehouse <b>%s</b> as on %s %s' % (flt(actual_qty), flt(cqty), self.doc.item_code, self.doc.warehouse, dt, posting_time), raise_exception = 1)
-
-			self.update_item_valuation(sle_id, dt, posting_time, serial_no, prev_sle)
+				
+			# update valuation and qty after transaction for post dated entry
+			self.update_entries_after(dt, posting_time)
 
 	def check_qty_with_serial_no(self):
 		"""
@@ -59,11 +46,19 @@
 			Temporary validation added on: 18-07-2011
 		"""
 		if sql("select name from `tabItem` where ifnull(has_serial_no, 'No') = 'Yes' and name = '%s'" % self.doc.item_code):
-			sr_count = sql("select count(name) from `tabSerial No` where item_code = '%s' and warehouse = '%s' and status  ='In Store' and docstatus != 2" % (self.doc.item_code, self.doc.warehouse))[0][0]
+			sr_count = sql("""select count(name) from `tabSerial No` 
+							where item_code = '%s' and warehouse = '%s' 
+							and status  ='In Store' and docstatus != 2
+							""" % (self.doc.item_code, self.doc.warehouse))[0][0]
+			
 			if sr_count != self.doc.actual_qty:
-				msg = "Actual Qty(%s) in Bin is mismatched with total number(%s) of serial no in store for item: '%s' and warehouse: '%s'" % (self.doc.actual_qty, sr_count, self.doc.item_code, self.doc.warehouse)
+				msg = """Actual Qty(%s) in Bin is mismatched with total number(%s) of serial no in store 
+					for item: '%s' and warehouse: '%s'""" % \
+					(self.doc.actual_qty, sr_count, self.doc.item_code, self.doc.warehouse)
+					
 				if getattr(webnotes.defs,'admin_email_notification',1):
-					sendmail(['developers@iwebnotes.com'], sender='automail@webnotestech.com', subject='Serial No Count vs Bin Actual Qty', parts=[['text/plain', msg]])			
+					sendmail(['developers@iwebnotes.com'], sender='automail@webnotestech.com', \
+						subject='Serial No Count vs Bin Actual Qty', parts=[['text/plain', msg]])			
 				msgprint(msg, raise_exception=1)
 
 	# --------------------------------
@@ -81,29 +76,19 @@
 		""", (self.doc.item_code, self.doc.warehouse), as_dict=1)
 		return sle and sle[0] or None
 
-	# --------------------------------
-	# get previous stock ledger entry
-	# --------------------------------
-			
-	def get_prev_sle(self, posting_date, posting_time, sle_id = ''):
-		# this function will only be called for a live entry
-		# for which the "name" will be the latest (even for the same timestamp)
-		# and even for a back-dated entry
-		# hence there cannot be any "backdated entries" with a name greater than the
-		# current one
+	def get_prev_sle(self, posting_date = '1900-01-01', posting_time = '12:00', sle_id = ''):
+		"""
+			get the last sle on or before the current time-bucket, 
+			to get actual qty before transaction, this function
+			is called from various transaction like stock entry, reco etc
+		"""
 		
-		# if there are multiple entries on this timestamp, then the last one will be with
-		# the last "name"		
-		# else, the last entry will be the highest name at the previous timestamp
-		# hence, the double sort on timestamp and name should be sufficient condition
-		# to get the last sle
-
 		sle = sql("""
 			select * from `tabStock Ledger Entry`
 			where item_code = %s
 			and warehouse = %s
-			and name != %s
 			and ifnull(is_cancelled, 'No') = 'No'
+			and name != %s
 			and timestamp(posting_date, posting_time) <= timestamp(%s, %s)
 			order by timestamp(posting_date, posting_time) desc, name desc
 			limit 1
@@ -112,23 +97,49 @@
 		return sle and sle[0] or {}
 
 
+	def get_sle_prev_timebucket(self, posting_date = '1900-01-01', posting_time = '12:00'):
+		"""get previous stock ledger entry before current time-bucket"""
+		# get the last sle before the current time-bucket, so that all values
+		# are reposted from the current time-bucket onwards.
+		# this is necessary because at the time of cancellation, there may be
+		# entries between the cancelled entries in the same time-bucket
+
+		sle = sql("""
+			select * from `tabStock Ledger Entry`
+			where item_code = %s
+			and warehouse = %s
+			and ifnull(is_cancelled, 'No') = 'No'
+			and timestamp(posting_date, posting_time) < timestamp(%s, %s)
+			order by timestamp(posting_date, posting_time) desc, name desc
+			limit 1
+		""", (self.doc.item_code, self.doc.warehouse, posting_date, posting_time), as_dict=1)
+
+		return sle and sle[0] or {}
 
 
-	# --------------------------------------------------------------------------------------------------------------------------------------
-	# validate negative stock (validate if stock is going -ve in between for back dated entries will consider only is_cancel = 'No' entries)
-	# --------------------------------------------------------------------------------------------------------------------------------------
+	#-------------------------------------------------------------
 	def validate_negative_stock(self, cqty, s):
-		if cqty + s['actual_qty'] < 0 and s['is_cancelled'] != 'Yes':
-			msgprint(cqty)
-			msgprint(s['actual_qty'])
-			msgprint('Cannot complete this transaction because stock will become negative in future transaction for Item <b>%s</b> in Warehouse <b>%s</b> on <b>%s %s</b>' % \
-				(self.doc.item_code, self.doc.warehouse, s['posting_date'], s['posting_time']))
-			raise Exception
+		"""
+			validate negative stock for entries current datetime onwards
+			will not consider cancelled entries
+		"""
+		diff = cqty + s['actual_qty']
+		if  diff < 0 and (abs(diff) > 0.0001) and s['is_cancelled'] == 'No':
+			msgprint("""
+				Negative stock error: 
+				Cannot complete this transaction because stock will 
+				become negative (%s) for Item <b>%s</b> in Warehouse 
+				<b>%s</b> on <b>%s %s</b> in Transaction %s %s""" % \
+				(str(diff), self.doc.item_code, self.doc.warehouse, \
+					s['posting_date'], s['posting_time'], s['voucher_type'], s['voucher_no']), \
+					raise_exception=1)
 
-	# ------------------------------------
-	# get serialized inventory values
+
 	# ------------------------------------
 	def get_serialized_inventory_values(self, val_rate, in_rate, opening_qty, actual_qty, is_cancelled, serial_nos):
+		"""
+			get serialized inventory values
+		"""
 		if flt(in_rate) < 0: # wrong incoming rate
 			in_rate = val_rate
 		elif flt(in_rate) == 0: # In case of delivery/stock issue, get average purchase rate of serial nos of current entry
@@ -220,11 +231,16 @@
 			stock_val = sum([flt(d[0])*flt(d[1]) for d in self.fcfs_bal])
 		return stock_val
 
-	# ----------------------
-	# update item valuation
-	# ----------------------
-	def update_item_valuation(self, sle_id=None, posting_date=None, posting_time=None, serial_no=None, prev_sle=None):
-		# no sle given, start from the first one (for repost)
+	def update_entries_after(self, posting_date, posting_time):
+		"""
+			update valution rate and qty after transaction 
+			from the current time-bucket onwards
+		"""
+		
+		# Get prev sle
+		prev_sle = self.get_sle_prev_timebucket(posting_date, posting_time)
+		
+		# if no prev sle, start from the first one (for repost)
 		if not prev_sle:
 			cqty, cval, val_rate, self.fcfs_bal = 0, 0, 0, []
 		
@@ -235,11 +251,11 @@
 			val_rate = flt(prev_sle.get('valuation_rate', 0))
 			self.fcfs_bal = eval(prev_sle.get('fcfs_stack', '[]') or '[]')
 
-		val_method = get_obj('Valuation Control').get_valuation_method(self.doc.item_code)	# get valuation method
+		# get valuation method
+		val_method = get_obj('Valuation Control').get_valuation_method(self.doc.item_code)
 
 		# recalculate the balances for all stock ledger entries
-		# after this one (so that the corrected balance will reflect
-		# correctly in all entries after this one)
+		# after the prev sle
 		sll = sql("""
 			select *
 			from `tabStock Ledger Entry` 
@@ -248,30 +264,32 @@
 			and ifnull(is_cancelled, 'No') = 'No'
 			and timestamp(posting_date, posting_time) > timestamp(%s, %s)
 			order by timestamp(posting_date, posting_time) asc, name asc""", \
-				(self.doc.item_code, self.doc.warehouse, posting_date, posting_time), as_dict = 1)
+				(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)
 
-		# if in live entry - update the values of the current sle
-		if sle_id:
-			sll = sql("select * from `tabStock Ledger Entry` where name=%s and ifnull(is_cancelled, 'No') = 'No'", sle_id, as_dict=1) + sll
-		for s in sll:
+		for sle in sll:
 			# block if stock level goes negative on any date
-			self.validate_negative_stock(cqty, s)
+			self.validate_negative_stock(cqty, sle)
 
-			stock_val, in_rate = 0, s['incoming_rate'] # IN
-			serial_nos = s["serial_no"] and ("'"+"', '".join(cstr(s["serial_no"]).split('\n')) + "'") or ''
+			stock_val, in_rate = 0, sle['incoming_rate'] # IN
+			serial_nos = sle["serial_no"] and ("'"+"', '".join(cstr(sle["serial_no"]).split('\n')) \
+				+ "'") or ''
 
 			# Get valuation rate
-			val_rate, stock_val = self.get_valuation_rate(val_method, serial_nos, val_rate, in_rate, stock_val, cqty, s) 
+			val_rate, stock_val = self.get_valuation_rate(val_method, serial_nos, \
+				val_rate, in_rate, stock_val, cqty, sle) 
 			
 			# Qty upto the sle
-			cqty += s['actual_qty'] 
+			cqty += sle['actual_qty'] 
 
 			# Stock Value upto the sle
 			stock_val = self.get_stock_value(val_method, cqty, stock_val, serial_nos) 
-			# update current sle --> will it be good to update incoming rate in sle for outgoing stock entry?????
+			
+			# update current sle --> will it be good to update incoming rate in sle 
+			# for outgoing stock entry?????
 			sql("""update `tabStock Ledger Entry` 
 			set bin_aqat=%s, valuation_rate=%s, fcfs_stack=%s, stock_value=%s 
-			where name=%s""", (cqty, flt(val_rate), cstr(self.fcfs_bal), stock_val, s['name']))
+			where name=%s""", (cqty, flt(val_rate), cstr(self.fcfs_bal), stock_val, sle['name']))
 		
 		# update the bin
 		if sll:
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py
index 6d48914..ea8c648 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.py
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.py
@@ -19,463 +19,504 @@
 from utilities.transaction_base import TransactionBase
 
 class DocType(TransactionBase):
-  def __init__(self, doc, doclist=[]):
-    self.doc = doc
-    self.doclist = doclist
-    self.tname = 'Delivery Note Detail'
-    self.fname = 'delivery_note_details'
+	def __init__(self, doc, doclist=[]):
+		self.doc = doc
+		self.doclist = doclist
+		self.tname = 'Delivery Note Detail'
+		self.fname = 'delivery_note_details'
 
-    # Notification objects
-    self.notify_obj = get_obj('Notification Control')
+		# Notification objects
+		self.notify_obj = get_obj('Notification Control')
 
-  # Autoname
-  # ---------
-  def autoname(self):
-    self.doc.name = make_autoname(self.doc.naming_series+'.#####')
+	# Autoname
+	# ---------
+	def autoname(self):
+		self.doc.name = make_autoname(self.doc.naming_series+'.#####')
 
 
 # DOCTYPE TRIGGERS FUNCTIONS
 # ==============================================================================
 #************Fiscal Year Validation*****************************
-  def validate_fiscal_year(self):
-    get_obj('Sales Common').validate_fiscal_year(self.doc.fiscal_year,self.doc.posting_date,'Posting Date')
+	def validate_fiscal_year(self):
+		get_obj('Sales Common').validate_fiscal_year(self.doc.fiscal_year,self.doc.posting_date,'Posting Date')
 
 
-  # ****** Get contact person details based on customer selected ****
-  def get_contact_details(self):
-    return get_obj('Sales Common').get_contact_details(self,0)
+	# ****** Get contact person details based on customer selected ****
+	def get_contact_details(self):
+		return get_obj('Sales Common').get_contact_details(self,0)
 
-  # *********** Get Commission rate of Sales Partner ****************
-  def get_comm_rate(self, sales_partner):
-    return get_obj('Sales Common').get_comm_rate(sales_partner, self)
+	# *********** Get Commission rate of Sales Partner ****************
+	def get_comm_rate(self, sales_partner):
+		return get_obj('Sales Common').get_comm_rate(sales_partner, self)
 
-  # *************** Pull Sales Order Details ************************
-  def pull_sales_order_details(self):
-    self.validate_prev_docname()
-    self.doc.clear_table(self.doclist,'other_charges')
+	# *************** Pull Sales Order Details ************************
+	def pull_sales_order_details(self):
+		self.validate_prev_docname()
+		self.doc.clear_table(self.doclist,'other_charges')
 
-    if self.doc.sales_order_no:
-      get_obj('DocType Mapper', 'Sales Order-Delivery Note').dt_map('Sales Order', 'Delivery Note', self.doc.sales_order_no, self.doc, self.doclist, "[['Sales Order', 'Delivery Note'],['Sales Order Detail', 'Delivery Note Detail'],['RV Tax Detail','RV Tax Detail'],['Sales Team','Sales Team']]")
-    else:
-      msgprint("Please select Sales Order No. whose details need to be pulled")
+		if self.doc.sales_order_no:
+			get_obj('DocType Mapper', 'Sales Order-Delivery Note').dt_map('Sales Order', 'Delivery Note', self.doc.sales_order_no, self.doc, self.doclist, "[['Sales Order', 'Delivery Note'],['Sales Order Detail', 'Delivery Note Detail'],['RV Tax Detail','RV Tax Detail'],['Sales Team','Sales Team']]")
+		else:
+			msgprint("Please select Sales Order No. whose details need to be pulled")
 
-    return cstr(self.doc.sales_order_no)
+		return cstr(self.doc.sales_order_no)
 
 
 
-  #-------------------set item details -uom and item group----------------
-  def set_item_details(self):
-    for d in getlist(self.doclist,'delivery_note_details'):
-      res = sql("select stock_uom, item_group from `tabItem` where name ='%s'"%d.item_code)
-      if not d.stock_uom:    d.stock_uom = res and cstr(res[0][0]) or ''
-      if not d.item_group:   d.item_group = res and cstr(res[0][1]) or ''
-      d.save()
+	#-------------------set item details -uom and item group----------------
+	def set_item_details(self):
+		for d in getlist(self.doclist,'delivery_note_details'):
+			res = sql("select stock_uom, item_group from `tabItem` where name ='%s'"%d.item_code)
+			if not d.stock_uom:		d.stock_uom = res and cstr(res[0][0]) or ''
+			if not d.item_group:	 d.item_group = res and cstr(res[0][1]) or ''
+			d.save()
 
-  # ::::: Validates that Sales Order is not pulled twice :::::::
-  def validate_prev_docname(self):
-    for d in getlist(self.doclist, 'delivery_note_details'):
-      if self.doc.sales_order_no == d.prevdoc_docname:
-        msgprint(cstr(self.doc.sales_order_no) + " sales order details have already been pulled. ")
-        raise Exception, "Validation Error. "
+	# ::::: Validates that Sales Order is not pulled twice :::::::
+	def validate_prev_docname(self):
+		for d in getlist(self.doclist, 'delivery_note_details'):
+			if self.doc.sales_order_no == d.prevdoc_docname:
+				msgprint(cstr(self.doc.sales_order_no) + " sales order details have already been pulled. ")
+				raise Exception, "Validation Error. "
 
-  #Set Actual Qty based on item code and warehouse
-  #------------------------------------------------------
-  def set_actual_qty(self):
-    for d in getlist(self.doclist, 'delivery_note_details'):
-      if d.item_code and d.warehouse:
-        actual_qty = sql("select actual_qty from `tabBin` where item_code = '%s' and warehouse = '%s'" % (d.item_code, d.warehouse))
-        d.actual_qty = actual_qty and flt(actual_qty[0][0]) or 0
+	#Set Actual Qty based on item code and warehouse
+	#------------------------------------------------------
+	def set_actual_qty(self):
+		for d in getlist(self.doclist, 'delivery_note_details'):
+			if d.item_code and d.warehouse:
+				actual_qty = sql("select actual_qty from `tabBin` where item_code = '%s' and warehouse = '%s'" % (d.item_code, d.warehouse))
+				d.actual_qty = actual_qty and flt(actual_qty[0][0]) or 0
 
 
-  # GET TERMS & CONDITIONS
-  # -------------------------------------
-  def get_tc_details(self):
-    return get_obj('Sales Common').get_tc_details(self)
+	# GET TERMS & CONDITIONS
+	# -------------------------------------
+	def get_tc_details(self):
+		return get_obj('Sales Common').get_tc_details(self)
 
-  #pull project customer
-  #-------------------------
-  def pull_project_customer(self):
-    res = sql("select customer from `tabProject` where name = '%s'"%self.doc.project_name)
-    if res:
-      get_obj('DocType Mapper', 'Project-Delivery Note').dt_map('Project', 'Delivery Note', self.doc.project_name, self.doc, self.doclist, "[['Project', 'Delivery Note']]")
+	#pull project customer
+	#-------------------------
+	def pull_project_customer(self):
+		res = sql("select customer from `tabProject` where name = '%s'"%self.doc.project_name)
+		if res:
+			get_obj('DocType Mapper', 'Project-Delivery Note').dt_map('Project', 'Delivery Note', self.doc.project_name, self.doc, self.doclist, "[['Project', 'Delivery Note']]")
 
 # DELIVERY NOTE DETAILS TRIGGER FUNCTIONS
 # ================================================================================
 
-  # ***************** Get Item Details ******************************
-  def get_item_details(self, item_code):
-    return get_obj('Sales Common').get_item_details(item_code, self)
+	# ***************** Get Item Details ******************************
+	def get_item_details(self, item_code):
+		return get_obj('Sales Common').get_item_details(item_code, self)
 
-  # *** Re-calculates Basic Rate & amount based on Price List Selected ***
-  def get_adj_percent(self, arg=''):
-    get_obj('Sales Common').get_adj_percent(self)
+	# *** Re-calculates Basic Rate & amount based on Price List Selected ***
+	def get_adj_percent(self, arg=''):
+		get_obj('Sales Common').get_adj_percent(self)
 
-  # ********** Get Actual Qty of item in warehouse selected *************
-  def get_actual_qty(self,args):
-    args = eval(args)
-    actual_qty = sql("select actual_qty from `tabBin` where item_code = '%s' and warehouse = '%s'" % (args['item_code'], args['warehouse']), as_dict=1)
-    ret = {
-       'actual_qty' : actual_qty and flt(actual_qty[0]['actual_qty']) or 0
-    }
-    return ret
+	# ********** Get Actual Qty of item in warehouse selected *************
+	def get_actual_qty(self,args):
+		args = eval(args)
+		actual_qty = sql("select actual_qty from `tabBin` where item_code = '%s' and warehouse = '%s'" % (args['item_code'], args['warehouse']), as_dict=1)
+		ret = {
+			 'actual_qty' : actual_qty and flt(actual_qty[0]['actual_qty']) or 0
+		}
+		return ret
 
 
 # OTHER CHARGES TRIGGER FUNCTIONS
 # ====================================================================================
 
-  # *********** Get Tax rate if account type is TAX ********************
-  def get_rate(self,arg):
-    return get_obj('Sales Common').get_rate(arg)
+	# *********** Get Tax rate if account type is TAX ********************
+	def get_rate(self,arg):
+		return get_obj('Sales Common').get_rate(arg)
 
-  # Load Default Charges
-  # ----------------------------------------------------------
-  def load_default_taxes(self):
-    return get_obj('Sales Common').load_default_taxes(self)
+	# Load Default Charges
+	# ----------------------------------------------------------
+	def load_default_taxes(self):
+		return get_obj('Sales Common').load_default_taxes(self)
 
 
-  # **** Pull details from other charges master (Get Other Charges) ****
-  def get_other_charges(self):
-    return get_obj('Sales Common').get_other_charges(self)
+	# **** Pull details from other charges master (Get Other Charges) ****
+	def get_other_charges(self):
+		return get_obj('Sales Common').get_other_charges(self)
 
 
-  #check in manage account if sales order required or not.
-  # ====================================================================================
-  def so_required(self):
-    res = sql("select value from `tabSingles` where doctype = 'Manage Account' and field = 'so_required'")
-    if res and res[0][0] == 'Yes':
-       for d in getlist(self.doclist,'delivery_note_details'):
-         if not d.prevdoc_docname:
-           msgprint("Sales Order No. required against item %s"%d.item_code)
-           raise Exception
+	#check in manage account if sales order required or not.
+	# ====================================================================================
+	def so_required(self):
+		res = sql("select value from `tabSingles` where doctype = 'Manage Account' and field = 'so_required'")
+		if res and res[0][0] == 'Yes':
+			 for d in getlist(self.doclist,'delivery_note_details'):
+				 if not d.prevdoc_docname:
+					 msgprint("Sales Order No. required against item %s"%d.item_code)
+					 raise Exception
 
 
 
 # VALIDATE
 # ====================================================================================
-  def validate(self):
-    self.so_required()
-    self.validate_fiscal_year()
-    self.validate_proj_cust()
-    sales_com_obj = get_obj(dt = 'Sales Common')
-    sales_com_obj.check_stop_sales_order(self)
-    sales_com_obj.check_active_sales_items(self)
-    sales_com_obj.get_prevdoc_date(self)
-    self.validate_mandatory()
-    #self.validate_prevdoc_details()
-    self.validate_reference_value()
-    self.validate_for_items()
-    sales_com_obj.make_packing_list(self,'delivery_note_details')
-    get_obj('Stock Ledger').validate_serial_no(self, 'packing_details')
-    sales_com_obj.validate_max_discount(self, 'delivery_note_details')             #verify whether rate is not greater than max discount
-    sales_com_obj.get_allocated_sum(self)  # this is to verify that the allocated % of sales persons is 100%
-    sales_com_obj.check_conversion_rate(self)
-    # ::::::: Get total in Words ::::::::
-    dcc = TransactionBase().get_company_currency(self.doc.company)
-    self.doc.in_words = sales_com_obj.get_total_in_words(dcc, self.doc.rounded_total)
-    self.doc.in_words_export = sales_com_obj.get_total_in_words(self.doc.currency, self.doc.rounded_total_export)
+	def validate(self):
+		self.so_required()
+		self.validate_fiscal_year()
+		self.validate_proj_cust()
+		sales_com_obj = get_obj(dt = 'Sales Common')
+		sales_com_obj.check_stop_sales_order(self)
+		sales_com_obj.check_active_sales_items(self)
+		sales_com_obj.get_prevdoc_date(self)
+		self.validate_mandatory()
+		#self.validate_prevdoc_details()
+		self.validate_reference_value()
+		self.validate_for_items()
+		sales_com_obj.make_packing_list(self,'delivery_note_details')
+		get_obj('Stock Ledger').validate_serial_no(self, 'packing_details')
+		sales_com_obj.validate_max_discount(self, 'delivery_note_details')						 #verify whether rate is not greater than max discount
+		sales_com_obj.get_allocated_sum(self)	# this is to verify that the allocated % of sales persons is 100%
+		sales_com_obj.check_conversion_rate(self)
+		# ::::::: Get total in Words ::::::::
+		dcc = TransactionBase().get_company_currency(self.doc.company)
+		self.doc.in_words = sales_com_obj.get_total_in_words(dcc, self.doc.rounded_total)
+		self.doc.in_words_export = sales_com_obj.get_total_in_words(self.doc.currency, self.doc.rounded_total_export)
 
-    # ::::::: Set Net Weight of each Packing
-    self.update_pack_nett_weight()
-    self.print_packing_slip()
-    # ::::::: Set actual qty for each item in selected warehouse :::::::
-    self.update_current_stock()
-    # :::::: set DN status :::::::
+		# ::::::: Set Net Weight of each Packing
+		self.update_pack_nett_weight()
+		self.print_packing_slip()
+		# ::::::: Set actual qty for each item in selected warehouse :::::::
+		self.update_current_stock()
+		# :::::: set DN status :::::::
 
-    self.doc.status = 'Draft'
-    if not self.doc.billing_status: self.doc.billing_status = 'Not Billed'
-    if not self.doc.installation_status: self.doc.installation_status = 'Not Installed'
+		self.doc.status = 'Draft'
+		if not self.doc.billing_status: self.doc.billing_status = 'Not Billed'
+		if not self.doc.installation_status: self.doc.installation_status = 'Not Installed'
 
-  # ************** Validate Mandatory *************************
-  def validate_mandatory(self):
-    # :::::::::: Amendment Date ::::::::::::::
-    if self.doc.amended_from and not self.doc.amendment_date:
-      msgprint("Please Enter Amendment Date")
-      raise Exception, "Validation Error. "
+	# ************** Validate Mandatory *************************
+	def validate_mandatory(self):
+		# :::::::::: Amendment Date ::::::::::::::
+		if self.doc.amended_from and not self.doc.amendment_date:
+			msgprint("Please Enter Amendment Date")
+			raise Exception, "Validation Error. "
 
-  #check for does customer belong to same project as entered..
-  #-------------------------------------------------------------------------------------------------
-  def validate_proj_cust(self):
-    if self.doc.project_name and self.doc.customer:
-      res = sql("select name from `tabProject` where name = '%s' and (customer = '%s' or ifnull(customer,'')='')"%(self.doc.project_name, self.doc.customer))
-      if not res:
-        msgprint("Customer - %s does not belong to project - %s. \n\nIf you want to use project for multiple customers then please make customer details blank in project - %s."%(self.doc.customer,self.doc.project_name,self.doc.project_name))
-        raise Exception
+	#check for does customer belong to same project as entered..
+	#-------------------------------------------------------------------------------------------------
+	def validate_proj_cust(self):
+		if self.doc.project_name and self.doc.customer:
+			res = sql("select name from `tabProject` where name = '%s' and (customer = '%s' or ifnull(customer,'')='')"%(self.doc.project_name, self.doc.customer))
+			if not res:
+				msgprint("Customer - %s does not belong to project - %s. \n\nIf you want to use project for multiple customers then please make customer details blank in project - %s."%(self.doc.customer,self.doc.project_name,self.doc.project_name))
+				raise Exception
 
-  # Validate values with reference document
-  #----------------------------------------
-  def validate_reference_value(self):
-    get_obj('DocType Mapper', 'Sales Order-Delivery Note', with_children = 1).validate_reference_value(self, self.doc.name)
+	# Validate values with reference document
+	#----------------------------------------
+	def validate_reference_value(self):
+		get_obj('DocType Mapper', 'Sales Order-Delivery Note', with_children = 1).validate_reference_value(self, self.doc.name)
 
 
-  # ******* Validate Previous Document Details ************
-  def validate_prevdoc_details(self):
-    for d in getlist(self.doclist,'delivery_note_details'):
+	# ******* Validate Previous Document Details ************
+	def validate_prevdoc_details(self):
+		for d in getlist(self.doclist,'delivery_note_details'):
 
-      prevdoc = d.prevdoc_doctype
-      prevdoc_docname = d.prevdoc_docname
+			prevdoc = d.prevdoc_doctype
+			prevdoc_docname = d.prevdoc_docname
 
-      if prevdoc_docname and prevdoc:
-        # ::::::::::: Validates Transaction Date of DN and previous doc (i.e. SO , PO, PR) *********
-        trans_date = sql("select transaction_date from `tab%s` where name = '%s'" %(prevdoc,prevdoc_docname))[0][0]
-        if trans_date and getdate(self.doc.transaction_date) < (trans_date):
-          msgprint("Your Voucher Date cannot be before "+cstr(prevdoc)+" Date.")
-          raise Exception
-        # ::::::::: Validates DN and previous doc details ::::::::::::::::::
-        get_name = sql("select name from `tab%s` where name = '%s'" % (prevdoc, prevdoc_docname))
-        name = get_name and get_name[0][0] or ''
-        if name:  #check for incorrect docname
-          if prevdoc == 'Sales Order':
-            dt = sql("select company, docstatus, customer, currency, sales_partner from `tab%s` where name = '%s'" % (prevdoc, name))
-            cust_name = dt and dt[0][2] or ''
-            if cust_name != self.doc.customer:
-              msgprint(cstr(prevdoc) + ": " + cstr(prevdoc_docname) + " customer :" + cstr(cust_name) + " does not match with customer : " + cstr(self.doc.customer) + " of current document.")
-              raise Exception, "Validation Error. "
-            sal_partner = dt and dt[0][4] or ''
-            if sal_partner != self.doc.sales_partner:
-              msgprint(cstr(prevdoc) + ": " + cstr(prevdoc_docname) + " sales partner name :" + cstr(sal_partner) + " does not match with sales partner name : " + cstr(self.doc.sales_partner_name) + " of current document.")
-              raise Exception, "Validation Error. "
-          else:
-            dt = sql("select company, docstatus, supplier, currency from `tab%s` where name = '%s'" % (prevdoc, name))
-            supp_name = dt and dt[0][2] or ''
-            company_name = dt and dt[0][0] or ''
-            docstatus = dt and dt[0][1] or 0
-            currency = dt and dt[0][3] or ''
-            if (currency != self.doc.currency):
-              msgprint(cstr(prevdoc) + ": " + cstr(prevdoc_docname) + " currency : "+ cstr(currency) + "does not match with Currency: " + cstr(self.doc.currency) + "of current document")
-              raise Exception, "Validation Error."
-            if (company_name != self.doc.company):
-              msgprint(cstr(prevdoc) + ": " + cstr(prevdoc_docname) + " does not belong to the Company: " + cstr(self.doc.company_name))
-              raise Exception, "Validation Error."
-            if (docstatus != 1):
-              msgprint(cstr(prevdoc) + ": " + cstr(prevdoc_docname) + " is not Submitted Document.")
-              raise Exception, "Validation Error."
-        else:
-          msgprint(cstr(prevdoc) + ": " + cstr(prevdoc_docname) + " is not a valid " + cstr(prevdoc))
-          raise Exception, "Validation Error."
+			if prevdoc_docname and prevdoc:
+				# ::::::::::: Validates Transaction Date of DN and previous doc (i.e. SO , PO, PR) *********
+				trans_date = sql("select transaction_date from `tab%s` where name = '%s'" %(prevdoc,prevdoc_docname))[0][0]
+				if trans_date and getdate(self.doc.transaction_date) < (trans_date):
+					msgprint("Your Voucher Date cannot be before "+cstr(prevdoc)+" Date.")
+					raise Exception
+				# ::::::::: Validates DN and previous doc details ::::::::::::::::::
+				get_name = sql("select name from `tab%s` where name = '%s'" % (prevdoc, prevdoc_docname))
+				name = get_name and get_name[0][0] or ''
+				if name:	#check for incorrect docname
+					if prevdoc == 'Sales Order':
+						dt = sql("select company, docstatus, customer, currency, sales_partner from `tab%s` where name = '%s'" % (prevdoc, name))
+						cust_name = dt and dt[0][2] or ''
+						if cust_name != self.doc.customer:
+							msgprint(cstr(prevdoc) + ": " + cstr(prevdoc_docname) + " customer :" + cstr(cust_name) + " does not match with customer : " + cstr(self.doc.customer) + " of current document.")
+							raise Exception, "Validation Error. "
+						sal_partner = dt and dt[0][4] or ''
+						if sal_partner != self.doc.sales_partner:
+							msgprint(cstr(prevdoc) + ": " + cstr(prevdoc_docname) + " sales partner name :" + cstr(sal_partner) + " does not match with sales partner name : " + cstr(self.doc.sales_partner_name) + " of current document.")
+							raise Exception, "Validation Error. "
+					else:
+						dt = sql("select company, docstatus, supplier, currency from `tab%s` where name = '%s'" % (prevdoc, name))
+						supp_name = dt and dt[0][2] or ''
+						company_name = dt and dt[0][0] or ''
+						docstatus = dt and dt[0][1] or 0
+						currency = dt and dt[0][3] or ''
+						if (currency != self.doc.currency):
+							msgprint(cstr(prevdoc) + ": " + cstr(prevdoc_docname) + " currency : "+ cstr(currency) + "does not match with Currency: " + cstr(self.doc.currency) + "of current document")
+							raise Exception, "Validation Error."
+						if (company_name != self.doc.company):
+							msgprint(cstr(prevdoc) + ": " + cstr(prevdoc_docname) + " does not belong to the Company: " + cstr(self.doc.company_name))
+							raise Exception, "Validation Error."
+						if (docstatus != 1):
+							msgprint(cstr(prevdoc) + ": " + cstr(prevdoc_docname) + " is not Submitted Document.")
+							raise Exception, "Validation Error."
+				else:
+					msgprint(cstr(prevdoc) + ": " + cstr(prevdoc_docname) + " is not a valid " + cstr(prevdoc))
+					raise Exception, "Validation Error."
 
 
-  # ******************** Validate Items **************************
-  def validate_for_items(self):
-    check_list, chk_dupl_itm = [], []
-    for d in getlist(self.doclist,'delivery_note_details'):
-      ch = sql("select is_stock_item from `tabItem` where name = '%s'"%d.item_code)
-      if d.prevdoc_doctype and d.prevdoc_detail_docname and ch and ch[0][0]=='Yes':
-        self.validate_items_with_prevdoc(d)
+	# ******************** Validate Items **************************
+	def validate_for_items(self):
+		check_list, chk_dupl_itm = [], []
+		for d in getlist(self.doclist,'delivery_note_details'):
+			ch = sql("select is_stock_item from `tabItem` where name = '%s'"%d.item_code)
+			if d.prevdoc_doctype and d.prevdoc_detail_docname and ch and ch[0][0]=='Yes':
+				self.validate_items_with_prevdoc(d)
 
-      # validates whether item is not entered twice
-      e = [d.item_code, d.description, d.warehouse, d.prevdoc_docname or '', d.batch_no or '']
-      f = [d.item_code, d.description, d.prevdoc_docname or '']
+			# validates whether item is not entered twice
+			e = [d.item_code, d.description, d.warehouse, d.prevdoc_docname or '', d.batch_no or '']
+			f = [d.item_code, d.description, d.prevdoc_docname or '']
 
-      if ch and ch[0][0] == 'Yes':
-        if e in check_list:
-          msgprint("Please check whether item %s has been entered twice wrongly." % d.item_code)
-        else:
-          check_list.append(e)
-      elif ch and ch[0][0] == 'No':
-        if f in chk_dupl_itm:
-          msgprint("Please check whether item %s has been entered twice wrongly." % d.item_code)
-        else:
-          chk_dupl_itm.append(f)
+			if ch and ch[0][0] == 'Yes':
+				if e in check_list:
+					msgprint("Please check whether item %s has been entered twice wrongly." % d.item_code)
+				else:
+					check_list.append(e)
+			elif ch and ch[0][0] == 'No':
+				if f in chk_dupl_itm:
+					msgprint("Please check whether item %s has been entered twice wrongly." % d.item_code)
+				else:
+					chk_dupl_itm.append(f)
 
 
-  # check if same item, warehouse present in prevdoc
-  # ------------------------------------------------------------------
-  def validate_items_with_prevdoc(self, d):
-    if d.prevdoc_doctype == 'Sales Order':
-      data = sql("select item_code, reserved_warehouse from `tabSales Order Detail` where parent = '%s' and name = '%s'" % (d.prevdoc_docname, d.prevdoc_detail_docname))
-    if d.prevdoc_doctype == 'Purchase Receipt':
-      data = sql("select item_code, rejected_warehouse from `tabPurchase Receipt Detail` where parent = '%s' and name = '%s'" % (d.prevdoc_docname, d.prevdoc_detail_docname))
-    if not data or data[0][0] != d.item_code or data[0][1] != d.warehouse:
-      msgprint("Item: %s / Warehouse: %s is not matching with Sales Order: %s. Sales Order might be modified after fetching data from it. Please delete items and fetch again." % (d.item_code, d.warehouse, d.prevdoc_docname))
-      raise Exception
+	# check if same item, warehouse present in prevdoc
+	# ------------------------------------------------------------------
+	def validate_items_with_prevdoc(self, d):
+		if d.prevdoc_doctype == 'Sales Order':
+			data = sql("select item_code, reserved_warehouse from `tabSales Order Detail` where parent = '%s' and name = '%s'" % (d.prevdoc_docname, d.prevdoc_detail_docname))
+		if d.prevdoc_doctype == 'Purchase Receipt':
+			data = sql("select item_code, rejected_warehouse from `tabPurchase Receipt Detail` where parent = '%s' and name = '%s'" % (d.prevdoc_docname, d.prevdoc_detail_docname))
+		if not data or data[0][0] != d.item_code or data[0][1] != d.warehouse:
+			msgprint("Item: %s / Warehouse: %s is not matching with Sales Order: %s. Sales Order might be modified after fetching data from it. Please delete items and fetch again." % (d.item_code, d.warehouse, d.prevdoc_docname))
+			raise Exception
 
 
-  # ********* UPDATE CURRENT STOCK *****************************
-  def update_current_stock(self):
-    for d in getlist(self.doclist, 'delivery_note_details'):
-      bin = sql("select actual_qty from `tabBin` where item_code = %s and warehouse = %s", (d.item_code, d.warehouse), as_dict = 1)
-      d.actual_qty = bin and flt(bin[0]['actual_qty']) or 0
+	# ********* UPDATE CURRENT STOCK *****************************
+	def update_current_stock(self):
+		for d in getlist(self.doclist, 'delivery_note_details'):
+			bin = sql("select actual_qty from `tabBin` where item_code = %s and warehouse = %s", (d.item_code, d.warehouse), as_dict = 1)
+			d.actual_qty = bin and flt(bin[0]['actual_qty']) or 0
 
-    for d in getlist(self.doclist, 'packing_details'):
-      bin = sql("select actual_qty, projected_qty from `tabBin` where item_code =  %s and warehouse = %s", (d.item_code, d.warehouse), as_dict = 1)
-      d.actual_qty = bin and flt(bin[0]['actual_qty']) or 0
-      d.projected_qty = bin and flt(bin[0]['projected_qty']) or 0
+		for d in getlist(self.doclist, 'packing_details'):
+			bin = sql("select actual_qty, projected_qty from `tabBin` where item_code =	%s and warehouse = %s", (d.item_code, d.warehouse), as_dict = 1)
+			d.actual_qty = bin and flt(bin[0]['actual_qty']) or 0
+			d.projected_qty = bin and flt(bin[0]['projected_qty']) or 0
 
 
 # ON SUBMIT
 # =================================================================================================
-  def on_submit(self):
-    set(self.doc, 'message', 'Items against your Order #%s have been delivered. Delivery #%s: ' % (self.doc.po_no, self.doc.name))
-    self.check_qty_in_stock()
-    # Check for Approving Authority
-    get_obj('Authorization Control').validate_approving_authority(self.doc.doctype, self.doc.company, self.doc.grand_total, self)
-    sl_obj = get_obj("Stock Ledger")
-    sl_obj.validate_serial_no_warehouse(self, 'packing_details')
-    sl_obj.update_serial_record(self, 'packing_details', is_submit = 1, is_incoming = 0)
-    get_obj("Sales Common").update_prevdoc_detail(1,self)
-    self.update_stock_ledger(update_stock = 1)
+	def on_submit(self):
+		set(self.doc, 'message', 'Items against your Order #%s have been delivered. Delivery #%s: ' % (self.doc.po_no, self.doc.name))
+		self.check_qty_in_stock()
+		# Check for Approving Authority
+		get_obj('Authorization Control').validate_approving_authority(self.doc.doctype, self.doc.company, self.doc.grand_total, self)
+		sl_obj = get_obj("Stock Ledger")
+		sl_obj.validate_serial_no_warehouse(self, 'packing_details')
+		sl_obj.update_serial_record(self, 'packing_details', is_submit = 1, is_incoming = 0)
+		get_obj("Sales Common").update_prevdoc_detail(1,self)
+		self.update_stock_ledger(update_stock = 1)
 
-    #------------Check Credit Limit---------------------
-    self.credit_limit()
+		#------------Check Credit Limit---------------------
+		self.credit_limit()
 
-    # set DN status
-    set(self.doc, 'status', 'Submitted')
+		# set DN status
+		set(self.doc, 'status', 'Submitted')
 
-    # on submit notification
-    self.notify_obj.notify_contact('Delivery Note',self.doc.doctype,self.doc.name, self.doc.email_id, self.doc.contact_person)
+		# on submit notification
+		self.notify_obj.notify_contact('Delivery Note',self.doc.doctype,self.doc.name, self.doc.email_id, self.doc.contact_person)
 
 
-  # *********** Checks whether actual quantity is present in warehouse *************
-  def check_qty_in_stock(self):
-    for d in getlist(self.doclist, 'packing_details'):
-      is_stock_item = sql("select is_stock_item from `tabItem` where name = '%s'" % d.item_code)[0][0]
-      if is_stock_item == 'Yes' and d.warehouse and flt(d.qty) > flt(d.actual_qty):
-        msgprint("For Item: " + cstr(d.item_code) + " at Warehouse: " + cstr(d.warehouse) + " Quantity: " + cstr(d.qty) +" is not Available. (Must be less than or equal to " + cstr(d.actual_qty) + " )")
-        raise Exception, "Validation Error"
+	# *********** Checks whether actual quantity is present in warehouse *************
+	def check_qty_in_stock(self):
+		for d in getlist(self.doclist, 'packing_details'):
+			is_stock_item = sql("select is_stock_item from `tabItem` where name = '%s'" % d.item_code)[0][0]
+			if is_stock_item == 'Yes' and d.warehouse and flt(d.qty) > flt(d.actual_qty):
+				msgprint("For Item: " + cstr(d.item_code) + " at Warehouse: " + cstr(d.warehouse) + " Quantity: " + cstr(d.qty) +" is not Available. (Must be less than or equal to " + cstr(d.actual_qty) + " )")
+				raise Exception, "Validation Error"
 
 
 
 # ON CANCEL
 # =================================================================================================
-  def on_cancel(self):
-    sales_com_obj = get_obj(dt = 'Sales Common')
-    sales_com_obj.check_stop_sales_order(self)
-    self.check_next_docstatus()
-    get_obj('Stock Ledger').update_serial_record(self, 'packing_details', is_submit = 0, is_incoming = 0)
-    sales_com_obj.update_prevdoc_detail(0,self)
-    self.update_stock_ledger(update_stock = -1)
-    # :::::: set DN status :::::::
-    set(self.doc, 'status', 'Cancelled')
+	def on_cancel(self):
+		sales_com_obj = get_obj(dt = 'Sales Common')
+		sales_com_obj.check_stop_sales_order(self)
+		self.check_next_docstatus()
+		get_obj('Stock Ledger').update_serial_record(self, 'packing_details', is_submit = 0, is_incoming = 0)
+		sales_com_obj.update_prevdoc_detail(0,self)
+		self.update_stock_ledger(update_stock = -1)
+		# :::::: set DN status :::::::
+		set(self.doc, 'status', 'Cancelled')
 
 
-  # ******************** Check Next DocStatus **************************
-  def check_next_docstatus(self):
-    submit_rv = sql("select t1.name from `tabReceivable Voucher` t1,`tabRV Detail` t2 where t1.name = t2.parent and t2.delivery_note = '%s' and t1.docstatus = 1" % (self.doc.name))
-    if submit_rv:
-      msgprint("Sales Invoice : " + cstr(submit_rv[0][0]) + " has already been submitted !")
-      raise Exception , "Validation Error."
+	# ******************** Check Next DocStatus **************************
+	def check_next_docstatus(self):
+		submit_rv = sql("select t1.name from `tabReceivable Voucher` t1,`tabRV Detail` t2 where t1.name = t2.parent and t2.delivery_note = '%s' and t1.docstatus = 1" % (self.doc.name))
+		if submit_rv:
+			msgprint("Sales Invoice : " + cstr(submit_rv[0][0]) + " has already been submitted !")
+			raise Exception , "Validation Error."
 
-    submit_in = sql("select t1.name from `tabInstallation Note` t1, `tabInstalled Item Details` t2 where t1.name = t2.parent and t2.prevdoc_docname = '%s' and t1.docstatus = 1" % (self.doc.name))
-    if submit_in:
-      msgprint("Installation Note : "+cstr(submit_in[0][0]) +" has already been submitted !")
-      raise Exception , "Validation Error."
+		submit_in = sql("select t1.name from `tabInstallation Note` t1, `tabInstalled Item Details` t2 where t1.name = t2.parent and t2.prevdoc_docname = '%s' and t1.docstatus = 1" % (self.doc.name))
+		if submit_in:
+			msgprint("Installation Note : "+cstr(submit_in[0][0]) +" has already been submitted !")
+			raise Exception , "Validation Error."
 
 
 # UPDATE STOCK LEDGER
 # =================================================================================================
-  def update_stock_ledger(self, update_stock, is_stopped = 0):
-    self.values = []
-    for d in self.get_item_list(is_stopped):
-      stock_item = sql("SELECT is_stock_item, is_sample_item FROM tabItem where name = '%s'"%(d[1]), as_dict = 1) # stock ledger will be updated only if it is a stock item
-      if stock_item[0]['is_stock_item'] == "Yes":
-        if not d[0]:
-          msgprint("Message: Please enter Warehouse for item %s as it is stock item."% d[1])
-          raise Exception
-        # if prevdoc_doctype = "Sales Order"
-        if d[3] < 0 :
-          # Reduce Reserved Qty from warehouse
-          bin = get_obj('Warehouse', d[0]).update_bin(0, flt(update_stock) * flt(d[3]), 0, 0, 0, d[1], self.doc.transaction_date)
+	def update_stock_ledger(self, update_stock, is_stopped = 0):
+		self.values = []
+		for d in self.get_item_list(is_stopped):
+			stock_item = sql("SELECT is_stock_item, is_sample_item FROM tabItem where name = '%s'"%(d[1]), as_dict = 1) # stock ledger will be updated only if it is a stock item
+			if stock_item[0]['is_stock_item'] == "Yes":
+				if not d[0]:
+					msgprint("Message: Please enter Warehouse for item %s as it is stock item."% d[1])
+					raise Exception
+				# if prevdoc_doctype = "Sales Order"
+				if d[3] < 0 :
+					# Reduce Reserved Qty from warehouse
+					bin = get_obj('Warehouse', d[0]).update_bin(0, flt(update_stock) * flt(d[3]), 0, 0, 0, d[1], self.doc.transaction_date)
 
-        # Reduce actual qty from warehouse
-        self.make_sl_entry(d, d[0], - flt(d[2]) , 0, update_stock)
-    get_obj('Stock Ledger', 'Stock Ledger').update_stock(self.values)
+				# Reduce actual qty from warehouse
+				self.make_sl_entry(d, d[0], - flt(d[2]) , 0, update_stock)
+		get_obj('Stock Ledger', 'Stock Ledger').update_stock(self.values)
 
 
-  # ***************** Gets Items from packing list *****************
-  def get_item_list(self, is_stopped):
-   return get_obj('Sales Common').get_item_list(self, is_stopped)
+	# ***************** Gets Items from packing list *****************
+	def get_item_list(self, is_stopped):
+	 return get_obj('Sales Common').get_item_list(self, is_stopped)
 
 
-  # ********************** Make Stock Entry ************************************
-  def make_sl_entry(self, d, wh, qty, in_value, update_stock):
-    self.values.append({
-      'item_code'           : d[1],
-      'warehouse'           : wh,
-      'transaction_date'    : self.doc.transaction_date,
-      'posting_date'        : self.doc.posting_date,
-      'posting_time'        : self.doc.posting_time,
-      'voucher_type'        : 'Delivery Note',
-      'voucher_no'          : self.doc.name,
-      'voucher_detail_no'   : '',
-      'actual_qty'          : qty,
-      'stock_uom'           : d[4],
-      'incoming_rate'       : in_value,
-      'company'             : self.doc.company,
-      'fiscal_year'         : self.doc.fiscal_year,
-      'is_cancelled'        : (update_stock==1) and 'No' or 'Yes',
-      'batch_no'            : d[5],
-      'serial_no'           : d[6]
-    })
+	# ********************** Make Stock Entry ************************************
+	def make_sl_entry(self, d, wh, qty, in_value, update_stock):
+		self.values.append({
+			'item_code'					 : d[1],
+			'warehouse'					 : wh,
+			'transaction_date'		: self.doc.transaction_date,
+			'posting_date'				: self.doc.posting_date,
+			'posting_time'				: self.doc.posting_time,
+			'voucher_type'				: 'Delivery Note',
+			'voucher_no'					: self.doc.name,
+			'voucher_detail_no'	 : '',
+			'actual_qty'					: qty,
+			'stock_uom'					 : d[4],
+			'incoming_rate'			 : in_value,
+			'company'						 : self.doc.company,
+			'fiscal_year'				 : self.doc.fiscal_year,
+			'is_cancelled'				: (update_stock==1) and 'No' or 'Yes',
+			'batch_no'						: d[5],
+			'serial_no'					 : d[6]
+		})
 
 
-  # SEND SMS
-  # ============================================================================================
-  def send_sms(self):
-    if not self.doc.customer_mobile_no:
-      msgprint("Please enter customer mobile no")
-    elif not self.doc.message:
-      msgprint("Please enter the message you want to send")
-    else:
-      msgprint(get_obj("SMS Control", "SMS Control").send_sms([self.doc.customer_mobile_no,], self.doc.message))
+	# SEND SMS
+	# ============================================================================================
+	def send_sms(self):
+		if not self.doc.customer_mobile_no:
+			msgprint("Please enter customer mobile no")
+		elif not self.doc.message:
+			msgprint("Please enter the message you want to send")
+		else:
+			msgprint(get_obj("SMS Control", "SMS Control").send_sms([self.doc.customer_mobile_no,], self.doc.message))
 
 
 #------------ check credit limit of items in DN Detail which are not fetched from sales order----------
-  def credit_limit(self):
-    amount, total = 0, 0
-    for d in getlist(self.doclist, 'delivery_note_details'):
-      if not d.prevdoc_docname:
-        amount += d.amount
-    if amount != 0:
-      total = (amount/self.doc.net_total)*self.doc.grand_total
-      get_obj('Sales Common').check_credit(self, total)
+	def credit_limit(self):
+		amount, total = 0, 0
+		for d in getlist(self.doclist, 'delivery_note_details'):
+			if not d.prevdoc_docname:
+				amount += d.amount
+		if amount != 0:
+			total = (amount/self.doc.net_total)*self.doc.grand_total
+			get_obj('Sales Common').check_credit(self, total)
 
-  # on update
-  def on_update(self):
-    self.set_actual_qty()
-    get_obj('Stock Ledger').scrub_serial_nos(self)
+	# on update
+	def on_update(self):
+		self.set_actual_qty()
+		get_obj('Stock Ledger').scrub_serial_nos(self)
 
-  # Repair Delivery Note
-  # ===========================================
-  def repair_delivery_note(self):
-    get_obj('Sales Common', 'Sales Common').repair_curr_doctype_details(self)
+	# Repair Delivery Note
+	# ===========================================
+	def repair_delivery_note(self):
+		get_obj('Sales Common', 'Sales Common').repair_curr_doctype_details(self)
 
-  # Packing Slip Related
-  # ==========================================
-  def update_pack_nett_weight(self):
-      for d in getlist(self.doclist, 'delivery_note_details'):
-        if d.item_code:
-          item_wt = sql("select nett_weight from `tabItem` where name = %s", (d.item_code))
-          d.pack_nett_wt = item_wt and flt(item_wt[0][0])*flt(d.qty) or 0
-
-  # ==========================================
-  def print_packing_slip(self):
-    prev_pack='0'
-    sno=0
-    html=''
-    tot_nett_wt,tot_gross_wt=0,0
-    for d in getlist(self.doclist, 'delivery_note_details'):
-      sno=sno+1
-      if sno!=1:#Footer goes here
-        html+='</table><table width="100%"><tr><td>CASE NO</td><td>'+cstr(d.pack_no)+'</td><td>NETT WT</td><td>'+cstr(tot_nett_wt)+'</td><td>CHECKED BY</td><td></td></tr><tr><td>SIZE</td><td></td><td>GROSS WT</td><td>'+cstr(tot_gross_wt)+'</td><td>PACKED BY</td><td></td></tr></table>'
-      if prev_pack!=d.pack_no: #Prepare Header Here
-        #Header code goes here
-        html+='<div align="center">[HEADER GOES HERE]</div><div><center><h2>Packing Slip</h2></center></div> <table width="100%"><tr><td>Order No.</td><td>'+cstr(self.doc.sales_order_no)+'</td><td>Shipping Marks</td><td>'+cstr(d.pack_no)+'</td></tr></table>'
-        html+='<table class="cust_tbl" style="page-break-after:always" width="100%"><tr><td>S.NO.</td><td>QUANTITY</td><td>CS.NO.</td><td>DESCRIPTION</td><td>WEIGHT</td><tr>'
-        sno=0
-        tot_nett_wt,to_gross_wt=flt(d.pack_nett_wt),flt(d.pack_gross_wt)
-      #Body code goes here
-      html+='<tr><td>'+cstr(sno+1)+'</td><td>'+cstr(d.qty)+'</td><td></td><td>'+d.item_code+'</td><td>'+cstr(d.pack_nett_wt)+'</td></tr>'
-      prev_pack=d.pack_no
-      tot_nett_wt+=flt(d.pack_nett_wt)
-      tot_gross_wt+=flt(d.pack_gross_wt)
-    html+='</html>'
-    self.doc.print_packing_slip=html
+	# Packing Slip Related
+	# ==========================================
+	def update_pack_nett_weight(self):
+			for d in getlist(self.doclist, 'delivery_note_details'):
+				if d.item_code and not d.pack_nett_wt:
+					item_wt = sql("select nett_weight from `tabItem` where name = %s", (d.item_code))
+					d.pack_nett_wt = item_wt and flt(item_wt[0][0]) or 0
 
 
+	# ==========================================
+	def get_header(self, so_no, shipping_mark):
+		header = '''
+			<div align="center">[HEADER GOES HERE]</div>
+			<div><center><h2>Packing Slip</h2></center></div>
+			<table width="100%" class="large_font">
+				<tr>
+					<td width="20%">ORDER NO.</td>
+					<td width="30%">'''+cstr(so_no)+'''</td>
+					<td width="20%">SHIPPING MARKS</td>
+					<td width="30%">'''+cstr(shipping_mark)+'''</td>
+				</tr>
+			</table>''';
+			
+		return header
+		
+	def get_footer(self, row, tot_nett, tot_gross):
+		footer = '''
+			<table style="page-break-after:always" width="100%" class="large_font">
+				<tr>
+					<td>CASE NO</td><td>'''+cstr(row.pack_no)+'''</td>
+					<td>NETT WT</td><td>'''+cstr(tot_nett)+'''</td>
+					<td>CHECKED BY</td><td>'''+cstr(row.packing_checked_by)+'''</td>
+				</tr>
+				<tr>
+					<td>SIZE</td><td>'''+cstr(row.pack_size)+'''</td>
+					<td>GROSS WT</td><td>'''+cstr(tot_gross)+'''</td>
+					<td>PACKED BY</td><td>'''+cstr(row.packed_by)+'''</td>
+				</tr>
+			</table>'''
+	
+		return footer
+	
+	def print_packing_slip(self):
+		plist = {}
+		for d in getlist(self.doclist, 'delivery_note_details'):
+			if not plist.has_key(cstr(d.pack_no)):
+				plist[cstr(d.pack_no)] = [d]
+			else:
+				plist.get(cstr(d.pack_no)).append(d)
 
+		html=''
+		
+		for d in sorted(plist.keys()):
+			tot_nett_wt,tot_gross_wt=0,0
+			
+			# header
+			html += self.get_header(self.doc.sales_order_no, self.doc.shipping_mark)
+			
+			# item table header
+			html += '''
+				<table class="cust_tbl" width="100%">
+					<tr>
+						<td><b>SR.NO.</b></td><td><b>CS.NO.</b></td><td><b>DESCRIPTION</b></td>
+						<td><b>QUANTITY</b></td><td><b>WEIGHT</b></td>
+					</tr>'''
+					
+			# item table data
+			sr_no = 1
+			for r in plist.get(d):
+				html += '<tr><td>'+cstr(sr_no)+'</td><td>'+r.item_code+'</td><td>'+r.description+'</td><td>'+cstr(r.qty)+'</td><td>'+cstr(r.pack_nett_wt)+'</td></tr>'
+				
+				tot_nett_wt += flt(r.pack_nett_wt)
+				tot_gross_wt += flt(r.pack_gross_wt)
+				
+				sr_no += 1
+				
+			html += '</table>'
 
-
-
-
-
-
+			# footer
+			html += self.get_footer(r, tot_nett_wt, tot_gross_wt)
+		self.doc.print_packing_slip=html
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.txt b/erpnext/stock/doctype/delivery_note/delivery_note.txt
index a3897ec..8109af5 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.txt
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.txt
@@ -5,7 +5,7 @@
 	{
 		'creation': '2011-04-18 15:58:20',
 		'docstatus': 0,
-		'modified': '2011-09-07 17:36:34',
+		'modified': '2011-10-18 13:57:23',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
@@ -21,7 +21,7 @@
 
 	# These values are common for all DocType
 	{
-		'_last_update': '1314093417',
+		'_last_update': '1318321312',
 		'colour': 'White:FFF',
 		'default_print_format': 'Standard',
 		'doctype': 'DocType',
@@ -37,7 +37,7 @@
 		'show_in_menu': 0,
 		'subject': 'To %(customer_name)s on %(transaction_date)s | %(per_billed)s% billed',
 		'tag_fields': 'billing_status',
-		'version': 450
+		'version': 454
 	},
 
 	# These values are common for all DocFormat
@@ -116,6 +116,18 @@
 
 	# DocPerm
 	{
+		'amend': 1,
+		'cancel': 1,
+		'create': 1,
+		'doctype': 'DocPerm',
+		'permlevel': 0,
+		'role': 'Sales Manager',
+		'submit': 1,
+		'write': 1
+	},
+
+	# DocPerm
+	{
 		'doctype': 'DocPerm',
 		'permlevel': 1,
 		'role': 'All'
@@ -133,11 +145,6 @@
 		'doctype': 'DocFormat'
 	},
 
-	# DocFormat
-	{
-		'doctype': 'DocFormat'
-	},
-
 	# DocField
 	{
 		'colour': 'White:FFF',
@@ -627,6 +634,7 @@
 
 	# DocField
 	{
+		'allow_on_submit': 1,
 		'doctype': 'DocField',
 		'fieldname': 'delivery_note_details',
 		'fieldtype': 'Table',
@@ -1390,6 +1398,42 @@
 		'in_filter': 0,
 		'label': 'Print Packing Slip',
 		'permlevel': 0,
-		'print_hide': 0
+		'print_hide': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'shipping_mark',
+		'fieldtype': 'Text',
+		'label': 'Shipping Mark',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'packed_by',
+		'fieldtype': 'Text',
+		'label': 'Packed By',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'packing_checked_by',
+		'fieldtype': 'Text',
+		'label': 'Packing Checked By',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'pack_size',
+		'fieldtype': 'Text',
+		'label': 'Pack Size',
+		'permlevel': 0
 	}
 ]
\ No newline at end of file
diff --git a/erpnext/stock/doctype/delivery_note_detail/delivery_note_detail.txt b/erpnext/stock/doctype/delivery_note_detail/delivery_note_detail.txt
index be7b98f..806803f 100644
--- a/erpnext/stock/doctype/delivery_note_detail/delivery_note_detail.txt
+++ b/erpnext/stock/doctype/delivery_note_detail/delivery_note_detail.txt
@@ -5,15 +5,17 @@
 	{
 		'creation': '2010-08-08 17:08:58',
 		'docstatus': 0,
-		'modified': '2011-09-07 17:34:13',
+		'modified': '2011-10-18 16:32:44',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
 
 	# These values are common for all DocType
 	{
+		'_last_update': '1311621379',
 		'autoname': 'DND/.#######',
 		'colour': 'White:FFF',
+		'default_print_format': 'Standard',
 		'doctype': 'DocType',
 		'istable': 1,
 		'module': 'Stock',
@@ -21,7 +23,7 @@
 		'section_style': 'Tray',
 		'server_code_error': ' ',
 		'show_in_menu': 0,
-		'version': 40
+		'version': 43
 	},
 
 	# These values are common for all DocField
@@ -357,6 +359,37 @@
 	# DocField
 	{
 		'doctype': 'DocField',
+		'fieldname': 'pack_size',
+		'fieldtype': 'Data',
+		'label': 'Pack Size',
+		'no_copy': 0,
+		'permlevel': 0,
+		'print_hide': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'packed_by',
+		'fieldtype': 'Data',
+		'label': 'Packed By',
+		'permlevel': 0,
+		'print_hide': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'packing_checked_by',
+		'fieldtype': 'Data',
+		'label': 'Packing Checked By',
+		'permlevel': 0,
+		'print_hide': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
 		'fieldname': 'installed_qty',
 		'fieldtype': 'Currency',
 		'label': 'Installed Qty',
diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py
index 28f1d12..4dca704 100644
--- a/erpnext/stock/doctype/item/item.py
+++ b/erpnext/stock/doctype/item/item.py
@@ -63,6 +63,9 @@
 			child.conversion_factor = 1
 			child.save()
 
+	# 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):
+		sql("delete from tabBin where item_code='%s'"%(self.doc.item_code))
 
 	# Check whether Ref Rate is not entered twice for same Price List and Currency
 	def check_ref_rate_detail(self):
@@ -124,7 +127,7 @@
 			self.doc.min_order_qty = 0
 		self.check_non_asset_warehouse()
 
-		if self.doc.is_pro_applicable == 'Yes' and self.doc.is_manufactured_item != 'Yes':
+		if self.doc.is_pro_applicable and self.doc.is_pro_applicable == 'Yes' and self.doc.is_manufactured_item and self.doc.is_manufactured_item != 'Yes':
 			msgprint("If making Production Order is allowed then, it should also allow to make Bill of Materials. Refer Manufacturing section.")
 			raise Exception
 
diff --git a/erpnext/stock/doctype/item/test_item.py b/erpnext/stock/doctype/item/test_item.py
new file mode 100644
index 0000000..529c82a
--- /dev/null
+++ b/erpnext/stock/doctype/item/test_item.py
@@ -0,0 +1,62 @@
+import unittest
+import webnotes
+import copy
+
+from webnotes.model.doclist import DocList
+from webnotes.model.doc import Document
+from webnotes.model.code import get_obj
+from webnotes.utils import flt
+
+sql = webnotes.conn.sql
+
+
+class TestItem(unittest.TestCase):
+	def setUp(self):
+		webnotes.conn.begin()
+
+	def tearDown(self):
+		webnotes.conn.rollback()
+		
+	def testInsert(self):
+		d = DocList()
+
+		count_before =  flt(sql("select count(*) from tab"+_doctype)[0][0])
+		if docok:
+			for i in docok:
+				d.doc = i
+				d.children = None
+				d.doc.fields['__islocal']=1
+				d.save(1)
+		count_after = flt(sql("select count(*) from tab"+_doctype)[0][0])
+		self.assertTrue(count_before+len(docok)==count_after)
+	
+	def testFailAssert(self):
+		if docnotok:
+			with self.assertRaises(Exception) as context:
+				d = DocList()
+				d.doc = docnotok[0]
+				d.children = None
+				d.doc.fields['__islocal']=1
+				d.save(1)
+
+# Test Data
+
+tabOK = [
+		{'is_purchase_item': None, 'is_pro_applicable': 'No', 'is_manufactured_item': None, 'description': 'Gel Ink', 'default_warehouse': None, 'item_name': 'Gel Ink', 'item_group': 'Ink', 'item_code': 'GELINK', 'is_sub_contracted_item': None, 'is_stock_item': 'Yes', 'stock_uom': 'Nos', 'docstatus': '0'}, 
+		{'is_purchase_item': None, 'is_pro_applicable': 'No', 'is_manufactured_item': None, 'description': 'Gel Refill', 'default_warehouse': None, 'item_name': 'Gel Refill', 'item_group': 'Refill', 'item_code': 'GELREF', 'is_sub_contracted_item': None, 'is_stock_item': 'Yes', 'stock_uom': 'Nos', 'docstatus': '0'}, 
+		{'is_purchase_item': None, 'is_pro_applicable': 'No', 'is_manufactured_item': None, 'description': 'Gel Pen', 'default_warehouse': None, 'item_name': 'Gel Pen', 'item_group': 'Pen', 'item_code': 'GELPEN', 'is_sub_contracted_item': None, 'is_stock_item': 'Yes', 'stock_uom': 'Nos', 'docstatus': '0'}
+	]
+
+tabNotOK =	[
+			{'is_purchase_item': None, 'is_pro_applicable': None, 'is_manufactured_item': None, 'description': 'F Ink', 'default_warehouse': None, 'item_name': 'F Ink', 'item_group': 'F Ink', 'item_code': None, 'is_sub_contracted_item': None, 'is_stock_item': 'No', 'stock_uom': 'Nos', 'docstatus': '0'}
+		]
+	      
+_doctype = 'Item'
+
+for i in tabOK: i['doctype']=_doctype
+for i in tabNotOK: i['doctype']=_doctype
+
+docok = [Document(fielddata=r) for r in tabOK]
+docnotok = [Document(fielddata=r) for r in tabNotOK]
+
+
diff --git a/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.js b/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.js
index 5209d1a..369fd4d 100644
--- a/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.js
+++ b/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.js
@@ -2,10 +2,7 @@
 if(!doc.currency){doc.currency = sys_defaults.currency;}
 }
 
-cur_frm.fields_dict['landed_cost_details'].grid.get_field("account_head").get_query = function(doc,cdt,cdn) {
-  return 'SELECT tabAccount.name FROM tabAccount WHERE tabAccount.group_or_ledger="Ledger" AND tabAccount.docstatus != 2 AND tabAccount.account_type = "Chargeable" AND  tabAccount.name LIKE "%s"'
-}
 
 cur_frm.fields_dict['landed_cost_details'].grid.get_field("account_head").get_query = function(doc,cdt,cdn) {
-  return 'SELECT tabAccount.name FROM tabAccount WHERE tabAccount.group_or_ledger="Ledger" AND tabAccount.docstatus != 2 AND (tabAccount.account_type = "Tax" OR tabAccount.account_type = "Chargeable") AND  tabAccount.name LIKE "%s"'
-}
\ No newline at end of file
+  return 'SELECT tabAccount.name FROM tabAccount WHERE tabAccount.group_or_ledger="Ledger" AND tabAccount.docstatus != 2 AND (tabAccount.account_type = "Tax" OR tabAccount.account_type = "Chargeable" or (tabAccount.is_pl_account = "Yes" and tabAccount.debit_or_credit = "Debit")) AND  tabAccount.name LIKE "%s"';
+}
diff --git a/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.py b/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.py
index 58ba751..2b828f9 100644
--- a/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.py
+++ b/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.py
@@ -1,236 +1,47 @@
-# Please edit this list and import only required elements
 import webnotes
+from webnotes.utils import cint, cstr, flt
+from webnotes.model.doc import addchild, getchildren
+from webnotes.model.doclist import getlist
+from webnotes.model.code import get_obj
+from webnotes import msgprint
 
-from webnotes.utils import add_days, add_months, add_years, cint, cstr, date_diff, default_fields, flt, fmt_money, formatdate, generate_hash, getTraceback, get_defaults, get_first_day, get_last_day, getdate, has_common, month_name, now, nowdate, replace_newlines, sendmail, set_default, str_esc_quote, user_format, validate_email_add
-from webnotes.model import db_exists
-from webnotes.model.doc import Document, addchild, removechild, getchildren, make_autoname, SuperDocType
-from webnotes.model.doclist import getlist, copy_doclist
-from webnotes.model.code import get_obj, get_server_obj, run_server_obj, updatedb, check_syntax
-from webnotes import session, form, is_testing, msgprint, errprint
-
-set = webnotes.conn.set
 sql = webnotes.conn.sql
-get_value = webnotes.conn.get_value
-in_transaction = webnotes.conn.in_transaction
-convert_to_lists = webnotes.conn.convert_to_lists
 
 # -----------------------------------------------------------------------------------------
 
-
 class DocType:
 	def __init__(self, doc, doclist=[]):
 		self.doc = doc
 		self.doclist = doclist
+		self.prwise_cost = {}
+		
+	def check_mandatory(self):
+		""" Check mandatory fields """		
+		if not self.doc.from_pr_date or not self.doc.to_pr_date:
+			msgprint("Please enter From and To PR Date", raise_exception=1)
+
+		if not self.doc.currency:
+			msgprint("Please enter Currency.", raise_exception=1)
+
 
 	def get_purchase_receipts(self):
+		"""	Get purchase receipts for given period """
+				
 		self.doc.clear_table(self.doclist,'lc_pr_details',1)
-		if not self.doc.from_pr_date or not self.doc.to_pr_date:
-			msgprint("Please enter From and To PR Date")
-			raise Exception
-		if not self.doc.currency:
-			msgprint("Please enter Currency.")
-			raise Exception
-		pr = sql("select name from `tabPurchase Receipt` where docstatus = 1 and posting_date >= '%s' and posting_date <= '%s' and currency = '%s' order by name "%(self.doc.from_pr_date,self.doc.to_pr_date,self.doc.currency), as_dict = 1)
+		self.check_mandatory()
+		
+		pr = sql("select name from `tabPurchase Receipt` where docstatus = 1 and posting_date >= '%s' and posting_date <= '%s' and currency = '%s' order by name " % (self.doc.from_pr_date, self.doc.to_pr_date, self.doc.currency), as_dict = 1)
 		if len(pr)>200:
-			msgprint("Please enter date of shorter duration as there are too many purchase receipt, hence it cannot be loaded.")
-			raise Exception
+			msgprint("Please enter date of shorter duration as there are too many purchase receipt, hence it cannot be loaded.", raise_exception=1)
+			
 		for i in pr:
-			if i and i['name']:
-				pr_no = addchild(self.doc, 'lc_pr_details', 'LC PR Detail', 1, self.doclist)
-				pr_no.purchase_receipt_no = i and i['name'] or ''
-				pr_no.save()
+			ch = addchild(self.doc, 'lc_pr_details', 'LC PR Detail', 1, self.doclist)
+			ch.purchase_receipt = i and i['name'] or ''
+			ch.save()
 
 
-	def update_pr_lc_se(self):
-		lst = []
-		condition = ' name in('
-		
-		amt = 0
-		for d in getlist(self.doclist, 'lc_pr_details'):
-			
-			if cint(d.include_in_landed_cost) == 1:
-				condition += '"'+d.purchase_receipt_no+'",'
-				lst.append(d.purchase_receipt_no) 
-		condition += '"")'
-		
-		amount = sql("SELECT SUM(net_total) FROM `tabPurchase Receipt` WHERE docstatus = 1 AND %s"%condition)
-		amt = amount and flt(amount[0][0]) or 0
-		for lc in getlist(self.doclist, 'landed_cost_details'):
-			for name in lst:
-				pr_oc_det = sql("select name from `tabPurchase Tax Detail` where parent = %s and category = 'For Valuation' and add_deduct_tax = 'Add' and charge_type = 'Actual' and account_head = %s ",(name, lc.account_head))
-				#obj = get_obj('Purchase Receipt', name, with_children = 1)
-				if not pr_oc_det:
-					obj = get_obj('Purchase Receipt', name, with_children = 1)
-					lgth = cint(sql("select count(name) from `tabPurchase Tax Detail` where parent = '%s' "%(name))[0][0])
-					pr_oc = addchild(obj.doc, 'purchase_tax_details', 'Purchase Tax Detail', 1)
-					pr_oc.category = 'For Valuation'
-					pr_oc.add_deduct_tax = 'Add'
-					pr_oc.charge_type = 'Actual'
-					pr_oc.description = lc.description
-					pr_oc.account_head = lc.account_head
-					pr_oc.rate = flt(flt(lc.amount) * flt(obj.doc.net_total/ amt))
-					pr_oc.tax_amount = flt(flt(lc.amount) * flt(obj.doc.net_total/ amt))
-					pr_oc.total = obj.doc.grand_total
-					pr_oc.docstatus = 1
-					pr_oc.idx = cint(lgth)
-					pr_oc.save()
-				else:
-					obj = get_obj('Purchase Receipt', name)
-					sql("update `tabPurchase Tax Detail` set rate = %s, tax_amount = %s where name = %s and parent = %s",(flt(flt(lc.amount) * flt(obj.doc.net_total/ amt)),flt(flt(lc.amount) * flt(obj.doc.net_total/ amt)),pr_oc_det[0][0],name))
-					
-				self.calc_pr_other_charges(name)
-				obj = get_obj('Purchase Receipt', name, with_children = 1)
-				for d in getlist(obj.doclist, 'purchase_receipt_details'):
-					if flt(d.qty):
-						d.valuation_rate = (flt(d.purchase_rate) + (flt(d.rm_supp_cost) / flt(d.qty)) + (flt(d.item_tax_amount)/flt(d.qty))) / flt(d.conversion_factor)
-						d.save()
-					sql("update `tabStock Ledger Entry` set incoming_rate = '%s' where voucher_detail_no = '%s'"%(flt(d.valuation_rate), d.name))
-
-					bin_name = sql("select t1.name, t2.name, t2.posting_date, t2.posting_time from `tabBin` t1, `tabStock Ledger Entry` t2 where t2.voucher_detail_no = '%s' and t2.item_code = t1.item_code and t2.warehouse = t1.warehouse LIMIT 1"%(d.name))
-					if bin_name and bin_name[0][0]:
-						obj = get_obj('Bin', bin_name[0][0]).update_item_valuation(bin_name[0][1], bin_name[0][2], bin_name[0][3])
-
-		# now distribute the taxes among the PRs
-		for lc in getlist(self.doclist, 'landed_cost_details'):
-			for d in lst:
-				pr_id = d.purchase_receipt_no
-				
-				# load the purchase receipt object
-				pr = get_obj('Purchase Receipt', pr_id, with_children = 1)
-				
-				# get the tax detail (for valuation) in the PR if it exists 
-				pr_oc_det = sql("select name from `tabPurchase Tax Detail` where parent = %s and category = 'For Valuation' and add_deduct_tax = 'Add' and charge_type = 'Actual' and account_head = %s ",(pr_id, lc.account_head))
-				
-				# update tax rate and tax amount
-				tax_amount = flt(flt(lc.amount) * flt(pr.doc.net_total/ amt))
-				
-				# for display
-				d.net_total = pr.doc.net_total
-				d.added_cost = tax_amount
-				d.save()
-				
-				# if not exist, create the tax detail for valuation
-				if not pr_oc_det:
-					lgth = cint(sql("select count(name) from `tabPurchase Tax Detail` where parent = '%s' "%(pr_id))[0][0])
-					pr_oc = addchild(pr.doc, 'purchase_tax_details', 'Purchase Tax Detail', 1)
-					pr_oc.category = 'For Valuation'
-					pr_oc.add_deduct_tax = 'Add'
-					pr_oc.charge_type = 'Actual'
-					pr_oc.description = lc.description
-					pr_oc.account_head = lc.account_head
-					pr_oc.rate = tax_amount
-					pr_oc.tax_amount = tax_amount
-					pr_oc.total = obj.doc.grand_total
-					pr_oc.docstatus = 1
-					pr_oc.idx = cint(lgth)
-					pr_oc.save()
-				else:
-					obj = get_obj('Purchase Receipt', name)
-					sql("update `tabPurchase Tax Detail` set rate = %s, tax_amount = %s where name = %s and parent = %s", \
-						(tax_amount, tax_amount, pr_oc_det[0][0], pr_id))
-					
-				self.calc_pr_other_charges(name)
-				
-				# reload - and update the stock entries with the
-				# additional valuations
-				
-				obj = get_obj('Purchase Receipt', name, with_children = 1)
-				for d in getlist(obj.doclist, 'purchase_receipt_details'):
-					if flt(d.qty):
-						d.valuation_rate = (flt(d.purchase_rate) + (flt(d.rm_supp_cost) / flt(d.qty)) + (flt(d.item_tax_amount)/flt(d.qty))) / flt(d.conversion_factor)
-						d.save()
-					sql("update `tabStock Ledger Entry` set incoming_rate = '%s' where voucher_detail_no = '%s'"%(flt(d.valuation_rate), d.name))
-					bin_name = sql("select t1.name, t2.name, t2.posting_date, t2.posting_time from `tabBin` t1, `tabStock Ledger Entry` t2 where t2.voucher_detail_no = '%s' and t2.item_code = t1.item_code and t2.warehouse = t1.warehouse LIMIT 1"%(d.name))
-
-					# update valuation of the item
-					if bin_name and bin_name[0][0]:
-						obj = get_obj('Bin', bin_name[0][0]).update_item_valuation(bin_name[0][1], bin_name[0][2], bin_name[0][3])
-
-	def add_deduct_taxes(self, ocd, oc, tax_amount, total_amount, total, prev_total, f=1):
-		ocd[oc].total_amount = flt(tax_amount.toFixed(2))		 
-		ocd[oc].total_tax_amount = flt(prev_total.toFixed(2))
-		ocd[oc].tax_amount += flt(tax_amount.toFixed(2))
-			 
-		total_amount = flt(ocd[oc].tax_amount)
-		total_tax_amount = flt(ocd[oc].total_tax_amount) + (f * flt(total_amount))
-		
-		if ocd[oc].category != "For Valuation":	
-			prev_total += f * flt(ocd[oc].total_amount)
-			total += f * flt(ocd[oc].tax_amount)
-			ocd[oc].total = flt(total) + (f * flt(tax[t].tax_amount))
-		else:
-			prev_total = prev_total				
-			ocd[oc].total = flt(total)
-		if ocd[oc].category != "For Total":
-			item_tax += f * ocd[oc].total_amount
-		ocd[oc].save()
-		
-		return total, prev_total
-		
-	# calculate the taxes for these PRs		
-	def calc_pr_other_charges(self, name):
-		
-		# re-calculate other charges
-		obj = get_obj('Purchase Receipt', name, with_children = 1)
-		total = 0
-		net_total = obj.doc.net_total
-
-
-		for prd in getlist(obj.doclist, 'purchase_receipt_details'):
-			prev_total, item_tax = flt(prd.amount), 0
-			total += flt(flt(prd.qty) * flt(prd.purchase_rate))
-			
-			check_tax = prd.item_tax_rate and eval(prd.item_tax_rate) or {}
-			ocd = getlist(obj.doclist, 'purchase_tax_details')
-			
-			# calculate tax for other charges
-			for oc in range(len(ocd)):
-				if check_tax.get(ocd[oc].account_head) and ocd[oc].charge_type != 'Actual':
-					rate = check_tax[ocd[oc].account_head]
-				else:
-					rate = flt(ocd[oc].rate)
-				
-				tax_amount = self.cal_tax(ocd, prd, rate, net_total, oc)
-				if ocd[oc].add_deduct_tax == 'Add':
-					add_deduct_taxes(self, ocd, oc, tax_amount, total_amount, total, prev_total, f=1)
-											
-				elif ocd[oc].add_deduct_tax == 'Deduct':
-					add_deduct_taxes(self, ocd, oc, tax_amount, total_amount, total, prev_total, f=-1)
-
-			prd.item_tax_amount = flt(item_tax)
-			prd.save()
-		obj.doc.save()
-					
-	def cal_tax(self, ocd, prd, rate, net_total, oc):
-		tax_amount = 0
-		if ocd[oc].charge_type == 'Actual':
-			value = flt(flt(rate) / flt(net_total))
-			return flt(flt(value) * flt(prd.amount))
-			
-		elif ocd[oc].charge_type == 'On Net Total':
-			return flt(flt(rate) * flt(prd.amount) / 100)
-			
-		elif ocd[oc].charge_type == 'On Previous Row Amount':
-			
-			row_no = cstr(ocd[oc].row_id)
-			row = (row_no).split("+")
-			for r in range(0, len(row.length)):
-				id = cint(row[r])
-				tax_amount += flt((flt(rate) * flt(ocd[id-1].total_amount) / 100))
-			row_id = row_no.find("/")
-			if row_id != -1:
-				rate = ''
-				row = (row_no).split("/")
-				
-				id1 = cint(row[0])
-				id2 = cint(row[1])
-				tax_amount = flt(flt(ocd[id1-1].total_amount) / flt(ocd[id2-1].total_amount))
-				
-			return tax_amount
-
-	# get details for landed cost table from master
-	# ---------------------------------------------
 	def get_landed_cost_master_details(self):
+		""" pull details from landed cost master"""
 		self.doc.clear_table(self.doclist, 'landed_cost_details')
 		idx = 0
 		landed_cost = sql("select account_head, description from `tabLanded Cost Master Detail` where parent=%s", (self.doc.landed_cost), as_dict = 1)
@@ -238,3 +49,177 @@
 			lct = addchild(self.doc, 'landed_cost_details', 'Landed Cost Detail', 1, self.doclist)
 			lct.account_head = cost['account_head']
 			lct.description = cost['description']
+
+
+	def get_selected_pr(self):
+		""" Get selected purchase receipt no """
+		self.selected_pr = [d.purchase_receipt for d in getlist(self.doclist, 'lc_pr_details') if d.select_pr]
+		if not self.selected_pr:
+			msgprint("Please select atleast one PR to proceed.", raise_exception=1)
+		
+	def validate_selected_pr(self):
+		"""Validate selected PR as submitted"""
+		invalid_pr =  sql("SELECT name FROM `tabPurchase Receipt` WHERE docstatus != 1 and name in (%s)" % ("'" + "', '".join(self.selected_pr) + "'"))
+		if invalid_pr:
+			msgprint("Selected purchase receipts must be submitted. Following PR are not submitted: %s" % invalid_pr, raise_exception=1)
+			
+
+	def get_total_amt(self):
+		""" Get sum of net total of all selected PR"""		
+		return sql("SELECT SUM(net_total) FROM `tabPurchase Receipt` WHERE name in (%s)" % ("'" + "', '".join(self.selected_pr) + "'"))[0][0]
+		
+
+	def add_charges_in_pr(self):
+		""" Add additional charges in selected pr proportionately"""
+		total_amt = self.get_total_amt()
+		
+		for pr in self.selected_pr:
+			pr_obj = get_obj('Purchase Receipt', pr, with_children = 1)
+			cumulative_grand_total = flt(pr_obj.doc.grand_total)
+			
+			for lc in getlist(self.doclist, 'landed_cost_details'):
+				amt = flt(lc.amount) * flt(pr_obj.doc.net_total)/ flt(total_amt)
+				self.prwise_cost[pr] = self.prwise_cost.get(pr, 0) + amt
+				cumulative_grand_total += amt
+				
+				pr_oc_row = sql("select name from `tabPurchase Tax Detail` where parent = %s and category = 'For Valuation' and add_deduct_tax = 'Add' and charge_type = 'Actual' and account_head = %s",(pr, lc.account_head))
+				if not pr_oc_row:	# add if not exists
+					ch = addchild(pr_obj.doc, 'purchase_tax_details', 'Purchase Tax Detail', 1)
+					ch.category = 'For Valuation'
+					ch.add_deduct_tax = 'Add'
+					ch.charge_type = 'Actual'
+					ch.description = lc.description
+					ch.account_head = lc.account_head
+					ch.rate = amt
+					ch.tax_amount = amt
+					ch.total = cumulative_grand_total
+					ch.docstatus = 1
+					ch.idx = 500 # add at the end
+					ch.save(1)
+				else:	# overwrite if exists
+					sql("update `tabPurchase Tax Detail` set rate = %s, tax_amount = %s where name = %s and parent = %s ", (amt, amt, pr_oc_row[0][0], pr))
+		
+		
+	def reset_other_charges(self, pr_obj):
+		""" Reset all calculated values to zero"""
+		for t in getlist(pr_obj.doclist, 'purchase_tax_details'):
+			t.total_tax_amount = 0;
+			t.total_amount = 0;
+			t.tax_amount = 0;
+			t.total = 0;
+			t.save()
+			
+		
+	def cal_charges_and_item_tax_amt(self):
+		""" Re-calculates other charges values and itemwise tax amount for getting valuation rate"""
+		for pr in self.selected_pr:
+			obj = get_obj('Purchase Receipt', pr, with_children = 1)
+			total = 0
+			self.reset_other_charges(obj)
+
+			for prd in getlist(obj.doclist, 'purchase_receipt_details'):
+				prev_total, item_tax = flt(prd.amount), 0
+				total += flt(prd.qty) * flt(prd.purchase_rate)
+			
+				item_tax_rate = prd.item_tax_rate and eval(prd.item_tax_rate) or {}
+				
+				ocd = getlist(obj.doclist, 'purchase_tax_details')
+				# calculate tax for other charges
+				for oc in range(len(ocd)):
+					# Get rate : consider if diff for this item
+					if item_tax_rate.get(ocd[oc].account_head) and ocd[oc].charge_type != 'Actual':
+						rate = item_tax_rate[ocd[oc].account_head]
+					else:
+						rate = flt(ocd[oc].rate)
+				
+					tax_amount = self.cal_tax(ocd, prd, rate, obj.doc.net_total, oc)					
+					total, prev_total, item_tax = self.add_deduct_taxes(ocd, oc, tax_amount, total, prev_total, item_tax)
+
+				prd.item_tax_amount = flt(item_tax)
+				prd.save()
+			obj.doc.save()
+	
+	
+	def cal_tax(self, ocd, prd, rate, net_total, oc):
+		""" Calculates tax amount for one item"""
+		tax_amount = 0
+		if ocd[oc].charge_type == 'Actual':
+			tax_amount = flt(rate) * flt(prd.amount) / flt(net_total)
+		elif ocd[oc].charge_type == 'On Net Total':
+			tax_amount = flt(rate) * flt(prd.amount) / 100		
+		elif ocd[oc].charge_type == 'On Previous Row Amount':			
+			row_no = cstr(ocd[oc].row_id)
+			row = row_no.split("+")
+			for r in range(0, len(row)):
+				id = cint(row[r])
+				tax_amount += flt((flt(rate) * flt(ocd[id-1].total_amount) / 100))
+			row_id = row_no.find("/")
+			if row_id != -1:
+				rate = ''
+				row = (row_no).split("/")				
+				id1 = cint(row[0])
+				id2 = cint(row[1])
+				tax_amount = flt(flt(ocd[id1-1].total_amount) / flt(ocd[id2-1].total_amount))
+		elif ocd[oc].charge_type == 'On Previous Row Total':
+			row = cint(ocd[oc].row_id)
+			if ocd[row-1].add_deduct_tax == 'Add':
+			  tax_amount = flt(rate) * (flt(ocd[row-1].total_tax_amount)+flt(ocd[row-1].total_amount)) / 100
+			elif ocd[row-1].add_deduct_tax == 'Deduct':
+			  tax_amount = flt(rate) * (flt(ocd[row-1].total_tax_amount)-flt(ocd[row-1].total_amount)) / 100
+			  
+		return tax_amount  
+
+	def add_deduct_taxes(self, ocd, oc, tax_amount, total, prev_total, item_tax):
+		"""Calculates other charges values"""
+		add_ded = ocd[oc].add_deduct_tax == 'Add' and 1 or ocd[oc].add_or_deduct == 'Deduct' and -1
+		ocd[oc].total_amount = flt(tax_amount)
+		ocd[oc].total_tax_amount = flt(prev_total)
+		ocd[oc].tax_amount += flt(tax_amount)
+		
+		total_amount = flt(ocd[oc].tax_amount)
+		total_tax_amount = flt(ocd[oc].total_tax_amount) + (add_ded * flt(total_amount))
+		
+		if ocd[oc].category != "For Valuation":	
+			prev_total += add_ded * flt(ocd[oc].total_amount)
+			total += add_ded * flt(ocd[oc].tax_amount)
+			ocd[oc].total = total
+		else:
+			prev_total = prev_total
+			ocd[oc].total = flt(total)
+		ocd[oc].save()
+				
+		if ocd[oc].category != "For Total":
+			item_tax += add_ded * ocd[oc].total_amount
+		
+		return total, prev_total, item_tax
+
+
+	def update_sle(self):
+		""" Recalculate valuation rate in all sle after pr posting date"""
+		for pr in self.selected_pr:
+			pr_obj = get_obj('Purchase Receipt', pr, with_children = 1)
+			
+			for d in getlist(pr_obj.doclist, 'purchase_receipt_details'):
+				if flt(d.qty):
+					d.valuation_rate = (flt(d.purchase_rate) + (flt(d.rm_supp_cost)/flt(d.qty)) + (flt(d.item_tax_amount)/flt(d.qty))) / flt(d.conversion_factor)
+					d.save()	
+				sql("update `tabStock Ledger Entry` set incoming_rate = '%s' where voucher_detail_no = '%s'"%(flt(d.valuation_rate), d.name))
+				
+				bin = sql("select t1.name, t2.posting_date, t2.posting_time from `tabBin` t1, `tabStock Ledger Entry` t2 where t2.voucher_detail_no = '%s' and t2.item_code = t1.item_code and t2.warehouse = t1.warehouse LIMIT 1" % d.name)
+
+				# update valuation rate after pr posting date
+				if bin and bin[0][0]:
+					obj = get_obj('Bin', bin[0][0]).update_entries_after(bin[0][1], bin[0][2])
+
+				
+	def update_landed_cost(self):
+		""" 
+			Add extra cost and recalculate all values in pr, 
+			Recalculate valuation rate in all sle after pr posting date
+		"""	
+		self.get_selected_pr()
+		self.validate_selected_pr()			
+		self.add_charges_in_pr()		
+		self.cal_charges_and_item_tax_amt()
+		self.update_sle()
+		msgprint("Landed Cost updated successfully")
diff --git a/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.txt b/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.txt
index 90c570a..1e12afa 100644
--- a/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.txt
+++ b/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.txt
@@ -3,16 +3,18 @@
 
 	# These values are common in all dictionaries
 	{
-		'creation': '2010-08-08 17:09:07',
+		'creation': '2011-11-16 16:17:22',
 		'docstatus': 0,
-		'modified': '2011-06-30 18:47:46',
+		'modified': '2011-11-16 16:32:18',
 		'modified_by': 'Administrator',
 		'owner': 'wasim@webnotestech.com'
 	},
 
 	# These values are common for all DocType
 	{
+		'_last_update': '1321441191',
 		'colour': 'White:FFF',
+		'default_print_format': 'Standard',
 		'doctype': 'DocType',
 		'issingle': 1,
 		'module': 'Stock',
@@ -20,7 +22,7 @@
 		'section_style': 'Simple',
 		'server_code_error': ' ',
 		'show_in_menu': 1,
-		'version': 31
+		'version': 35
 	},
 
 	# These values are common for all DocField
@@ -52,7 +54,6 @@
 	# DocPerm
 	{
 		'doctype': 'DocPerm',
-		'idx': 1,
 		'permlevel': 0,
 		'role': 'All',
 		'write': 0
@@ -64,7 +65,6 @@
 		'cancel': 0,
 		'create': 1,
 		'doctype': 'DocPerm',
-		'idx': 2,
 		'permlevel': 0,
 		'role': 'Purchase Manager',
 		'submit': 0,
@@ -75,7 +75,6 @@
 	{
 		'create': 1,
 		'doctype': 'DocPerm',
-		'idx': 3,
 		'permlevel': 0,
 		'role': 'System Manager',
 		'write': 1
@@ -85,7 +84,6 @@
 	{
 		'create': 1,
 		'doctype': 'DocPerm',
-		'idx': 4,
 		'permlevel': 0,
 		'role': 'Purchase User',
 		'write': 1
@@ -94,7 +92,6 @@
 	# DocPerm
 	{
 		'doctype': 'DocPerm',
-		'idx': 5,
 		'permlevel': 1,
 		'role': 'All'
 	},
@@ -102,7 +99,6 @@
 	# DocPerm
 	{
 		'doctype': 'DocPerm',
-		'idx': 6,
 		'permlevel': 1,
 		'role': 'System Manager'
 	},
@@ -110,7 +106,6 @@
 	# DocPerm
 	{
 		'doctype': 'DocPerm',
-		'idx': 7,
 		'permlevel': 1,
 		'role': 'Purchase User'
 	},
@@ -118,7 +113,6 @@
 	# DocPerm
 	{
 		'doctype': 'DocPerm',
-		'idx': 8,
 		'permlevel': 1,
 		'role': 'Purchase Manager'
 	},
@@ -126,9 +120,23 @@
 	# DocField
 	{
 		'doctype': 'DocField',
+		'fieldtype': 'HTML',
+		'label': 'Process',
+		'options': '<div class="field_description"><b>Process:</b><br>1. Fetch and select Purchase Receipt<br>2. Enter extra costs<br>3. Click on Update Landed Cost button<br> 4. Cost will be added into other charges table of selected PR proportionately based on net total<br>5. Item Valuation Rate will be recalculated</div>'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'options': 'Simple'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
 		'fieldname': 'from_pr_date',
 		'fieldtype': 'Date',
-		'idx': 1,
 		'label': 'From PR Date',
 		'reqd': 1
 	},
@@ -138,7 +146,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'to_pr_date',
 		'fieldtype': 'Date',
-		'idx': 2,
 		'label': 'To PR Date',
 		'reqd': 1
 	},
@@ -148,7 +155,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'currency',
 		'fieldtype': 'Select',
-		'idx': 3,
 		'label': 'Currency',
 		'options': 'link:Currency',
 		'reqd': 1
@@ -158,7 +164,6 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Button',
-		'idx': 4,
 		'label': 'Get Purchase Receipt',
 		'options': 'get_purchase_receipts'
 	},
@@ -166,18 +171,8 @@
 	# DocField
 	{
 		'doctype': 'DocField',
-		'fieldtype': 'Section Break',
-		'idx': 5,
-		'label': 'LC PR Detail',
-		'options': 'Simple'
-	},
-
-	# DocField
-	{
-		'doctype': 'DocField',
 		'fieldname': 'lc_pr_details',
 		'fieldtype': 'Table',
-		'idx': 6,
 		'label': 'LC PR Details',
 		'options': 'LC PR Detail'
 	},
@@ -186,8 +181,6 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
-		'idx': 7,
-		'label': 'Landed Cost Detail',
 		'options': 'Simple'
 	},
 
@@ -196,7 +189,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'landed_cost',
 		'fieldtype': 'Link',
-		'idx': 8,
 		'label': 'Select Landed Cost Details Master',
 		'options': 'Landed Cost Master'
 	},
@@ -206,7 +198,6 @@
 		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldtype': 'Button',
-		'idx': 9,
 		'label': 'Get Details',
 		'options': 'get_landed_cost_master_details'
 	},
@@ -216,7 +207,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'landed_cost_details',
 		'fieldtype': 'Table',
-		'idx': 10,
 		'label': 'Landed Cost Details',
 		'options': 'Landed Cost Detail'
 	},
@@ -225,8 +215,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Button',
-		'idx': 11,
 		'label': 'Update PR',
-		'options': 'update_pr_lc_se'
+		'options': 'update_landed_cost'
 	}
 ]
\ No newline at end of file
diff --git a/erpnext/stock/doctype/lc_pr_detail/lc_pr_detail.txt b/erpnext/stock/doctype/lc_pr_detail/lc_pr_detail.txt
index d09285d..b6bcb42 100644
--- a/erpnext/stock/doctype/lc_pr_detail/lc_pr_detail.txt
+++ b/erpnext/stock/doctype/lc_pr_detail/lc_pr_detail.txt
@@ -5,7 +5,7 @@
 	{
 		'creation': '2010-08-08 17:09:07',
 		'docstatus': 0,
-		'modified': '2011-06-30 18:47:22',
+		'modified': '2011-11-16 16:10:00',
 		'modified_by': 'Administrator',
 		'owner': 'wasim@webnotestech.com'
 	},
@@ -13,6 +13,7 @@
 	# These values are common for all DocType
 	{
 		'colour': 'White:FFF',
+		'default_print_format': 'Standard',
 		'doctype': 'DocType',
 		'istable': 1,
 		'module': 'Stock',
@@ -20,7 +21,7 @@
 		'section_style': 'Simple',
 		'server_code_error': ' ',
 		'show_in_menu': 0,
-		'version': 2
+		'version': 5
 	},
 
 	# These values are common for all DocField
@@ -42,25 +43,23 @@
 	# DocField
 	{
 		'doctype': 'DocField',
-		'fieldname': 'purchase_receipt_no',
+		'fieldname': 'purchase_receipt',
 		'fieldtype': 'Link',
-		'idx': 1,
-		'label': 'Purchase Receipt No',
+		'label': 'Purchase Receipt',
 		'oldfieldname': 'purchase_receipt_no',
 		'oldfieldtype': 'Link',
 		'options': 'Purchase Receipt',
-		'search_index': 1
+		'width': '220px'
 	},
 
 	# DocField
 	{
 		'doctype': 'DocField',
-		'fieldname': 'include_in_landed_cost',
+		'fieldname': 'select_pr',
 		'fieldtype': 'Check',
-		'idx': 2,
-		'label': 'Include In Landed Cost',
+		'label': 'Select PR',
 		'oldfieldname': 'include_in_landed_cost',
 		'oldfieldtype': 'Check',
-		'width': '150px'
+		'width': '120px'
 	}
 ]
\ No newline at end of file
diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js
index f6f4984..ec73079 100644
--- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js
+++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js
@@ -105,7 +105,7 @@
 }
 
 // ***************** Get project name *****************
-cur_frm.fields_dict['project_name'].get_query = function(doc, cdt, cdn) {
+cur_frm.fields_dict['purchase_receipt_details'].grid.get_field('project_name').get_query = function(doc, cdt, cdn) {
   return 'SELECT `tabProject`.name FROM `tabProject` WHERE `tabProject`.status = "Open" AND `tabProject`.name LIKE "%s" ORDER BY `tabProject`.name ASC LIMIT 50';
 }
 
diff --git a/erpnext/stock/doctype/purchase_receipt_detail/purchase_receipt_detail.txt b/erpnext/stock/doctype/purchase_receipt_detail/purchase_receipt_detail.txt
index a8e0d47..2e3514e 100644
--- a/erpnext/stock/doctype/purchase_receipt_detail/purchase_receipt_detail.txt
+++ b/erpnext/stock/doctype/purchase_receipt_detail/purchase_receipt_detail.txt
@@ -5,7 +5,7 @@
 	{
 		'creation': '2010-08-08 17:09:16',
 		'docstatus': 0,
-		'modified': '2011-03-16 17:12:38',
+		'modified': '2011-11-16 15:43:36',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
@@ -14,6 +14,7 @@
 	{
 		'autoname': 'GRND/.#######',
 		'colour': 'White:FFF',
+		'default_print_format': 'Standard',
 		'doctype': 'DocType',
 		'istable': 1,
 		'module': 'Stock',
@@ -21,7 +22,7 @@
 		'section_style': 'Tray',
 		'server_code_error': ' ',
 		'show_in_menu': 0,
-		'version': 61
+		'version': 63
 	},
 
 	# These values are common for all DocField
@@ -44,7 +45,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'item_code',
 		'fieldtype': 'Link',
-		'idx': 1,
 		'in_filter': 1,
 		'label': 'Item Code',
 		'oldfieldname': 'item_code',
@@ -62,7 +62,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'item_name',
 		'fieldtype': 'Data',
-		'idx': 2,
 		'in_filter': 0,
 		'label': 'Item Name',
 		'oldfieldname': 'item_name',
@@ -78,7 +77,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'description',
 		'fieldtype': 'Text',
-		'idx': 3,
 		'label': 'Description',
 		'oldfieldname': 'description',
 		'oldfieldtype': 'Text',
@@ -89,29 +87,10 @@
 
 	# DocField
 	{
-		'colour': 'White:FFF',
-		'doctype': 'DocField',
-		'fieldname': 'uom',
-		'fieldtype': 'Link',
-		'idx': 4,
-		'label': 'UOM',
-		'oldfieldname': 'uom',
-		'oldfieldtype': 'Link',
-		'options': 'UOM',
-		'permlevel': 0,
-		'reqd': 1,
-		'search_index': 0,
-		'trigger': 'Client',
-		'width': '100px'
-	},
-
-	# DocField
-	{
 		'default': '0.00',
 		'doctype': 'DocField',
 		'fieldname': 'received_qty',
 		'fieldtype': 'Currency',
-		'idx': 5,
 		'label': 'Recd Quantity',
 		'oldfieldname': 'received_qty',
 		'oldfieldtype': 'Currency',
@@ -125,24 +104,8 @@
 	{
 		'default': '0.00',
 		'doctype': 'DocField',
-		'fieldname': 'qty',
-		'fieldtype': 'Currency',
-		'idx': 6,
-		'label': 'Accepted Quantity',
-		'oldfieldname': 'qty',
-		'oldfieldtype': 'Currency',
-		'permlevel': 0,
-		'trigger': 'Client',
-		'width': '100px'
-	},
-
-	# DocField
-	{
-		'default': '0.00',
-		'doctype': 'DocField',
 		'fieldname': 'rejected_qty',
 		'fieldtype': 'Currency',
-		'idx': 7,
 		'in_filter': 0,
 		'label': 'Rejected Quantity',
 		'oldfieldname': 'rejected_qty',
@@ -160,7 +123,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'purchase_rate',
 		'fieldtype': 'Currency',
-		'idx': 8,
 		'label': 'Rate (Default Curr.)',
 		'oldfieldname': 'purchase_rate',
 		'oldfieldtype': 'Currency',
@@ -175,9 +137,22 @@
 	{
 		'default': '0.00',
 		'doctype': 'DocField',
+		'fieldname': 'qty',
+		'fieldtype': 'Currency',
+		'label': 'Accepted Quantity',
+		'oldfieldname': 'qty',
+		'oldfieldtype': 'Currency',
+		'permlevel': 0,
+		'trigger': 'Client',
+		'width': '100px'
+	},
+
+	# DocField
+	{
+		'default': '0.00',
+		'doctype': 'DocField',
 		'fieldname': 'amount',
 		'fieldtype': 'Currency',
-		'idx': 9,
 		'label': 'Amount (Default Curr.)',
 		'oldfieldname': 'amount',
 		'oldfieldtype': 'Currency',
@@ -192,32 +167,15 @@
 	{
 		'colour': 'White:FFF',
 		'doctype': 'DocField',
-		'fieldname': 'schedule_date',
-		'fieldtype': 'Date',
-		'idx': 10,
-		'label': 'Schedule date',
-		'no_copy': 1,
-		'oldfieldname': 'schedule_date',
-		'oldfieldtype': 'Date',
-		'permlevel': 0,
-		'print_hide': 1,
-		'report_hide': 0,
-		'reqd': 1
-	},
-
-	# DocField
-	{
-		'doctype': 'DocField',
-		'fieldname': 'warehouse',
+		'fieldname': 'uom',
 		'fieldtype': 'Link',
-		'hidden': 0,
-		'idx': 11,
-		'label': 'Accepted Warehouse',
-		'oldfieldname': 'warehouse',
+		'label': 'UOM',
+		'oldfieldname': 'uom',
 		'oldfieldtype': 'Link',
-		'options': 'Warehouse',
+		'options': 'UOM',
 		'permlevel': 0,
-		'print_hide': 0,
+		'reqd': 1,
+		'trigger': 'Client',
 		'width': '100px'
 	},
 
@@ -228,7 +186,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'import_rate',
 		'fieldtype': 'Currency',
-		'idx': 12,
 		'label': 'Rate',
 		'oldfieldname': 'import_rate',
 		'oldfieldtype': 'Currency',
@@ -243,7 +200,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'import_amount',
 		'fieldtype': 'Currency',
-		'idx': 13,
 		'label': 'Amount',
 		'oldfieldname': 'import_amount',
 		'oldfieldtype': 'Currency',
@@ -255,7 +211,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'conversion_factor',
 		'fieldtype': 'Currency',
-		'idx': 14,
 		'label': 'Conversion Factor',
 		'oldfieldname': 'conversion_factor',
 		'oldfieldtype': 'Currency',
@@ -269,9 +224,23 @@
 	# DocField
 	{
 		'doctype': 'DocField',
+		'fieldname': 'warehouse',
+		'fieldtype': 'Link',
+		'hidden': 0,
+		'label': 'Accepted Warehouse',
+		'oldfieldname': 'warehouse',
+		'oldfieldtype': 'Link',
+		'options': 'Warehouse',
+		'permlevel': 0,
+		'print_hide': 0,
+		'width': '100px'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
 		'fieldname': 'stock_uom',
 		'fieldtype': 'Data',
-		'idx': 15,
 		'label': 'Stock UOM',
 		'oldfieldname': 'stock_uom',
 		'oldfieldtype': 'Data',
@@ -283,17 +252,65 @@
 
 	# DocField
 	{
+		'colour': 'White:FFF',
 		'doctype': 'DocField',
-		'fieldname': 'stock_qty',
-		'fieldtype': 'Currency',
-		'idx': 16,
-		'label': 'Stock Qty',
-		'oldfieldname': 'stock_qty',
-		'oldfieldtype': 'Currency',
+		'fieldname': 'rejected_warehouse',
+		'fieldtype': 'Link',
+		'hidden': 1,
+		'label': 'Rejected Warehouse',
+		'no_copy': 1,
+		'oldfieldname': 'rejected_warehouse',
+		'oldfieldtype': 'Link',
+		'options': 'Warehouse',
+		'permlevel': 1,
+		'print_hide': 1,
+		'width': '100px'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'brand',
+		'fieldtype': 'Link',
+		'hidden': 1,
+		'label': 'Brand',
+		'oldfieldname': 'brand',
+		'oldfieldtype': 'Link',
+		'options': 'Brand',
+		'permlevel': 1,
+		'print_hide': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'item_group',
+		'fieldtype': 'Link',
+		'hidden': 1,
+		'in_filter': 1,
+		'label': 'Item Group',
+		'oldfieldname': 'item_group',
+		'oldfieldtype': 'Link',
+		'options': 'Item Group',
+		'permlevel': 1,
+		'print_hide': 1,
+		'search_index': 1
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocField',
+		'fieldname': 'schedule_date',
+		'fieldtype': 'Date',
+		'label': 'Schedule date',
+		'no_copy': 1,
+		'oldfieldname': 'schedule_date',
+		'oldfieldtype': 'Date',
 		'permlevel': 0,
 		'print_hide': 1,
-		'trigger': 'Client',
-		'width': '100px'
+		'report_hide': 0,
+		'reqd': 1
 	},
 
 	# DocField
@@ -302,7 +319,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'serial_no',
 		'fieldtype': 'Text',
-		'idx': 17,
+		'in_filter': 1,
 		'label': 'Serial No',
 		'no_copy': 1,
 		'oldfieldname': 'serial_no',
@@ -318,14 +335,12 @@
 		'doctype': 'DocField',
 		'fieldname': 'batch_no',
 		'fieldtype': 'Link',
-		'idx': 18,
 		'label': 'Batch No',
 		'oldfieldname': 'batch_no',
 		'oldfieldtype': 'Link',
 		'options': 'Batch',
 		'permlevel': 0,
 		'print_hide': 1,
-		'search_index': 0,
 		'trigger': 'Client'
 	},
 
@@ -333,69 +348,42 @@
 	{
 		'colour': 'White:FFF',
 		'doctype': 'DocField',
-		'fieldname': 'rejected_warehouse',
-		'fieldtype': 'Link',
-		'hidden': 1,
-		'idx': 19,
-		'label': 'Rejected Warehouse',
-		'no_copy': 1,
-		'oldfieldname': 'rejected_warehouse',
-		'oldfieldtype': 'Link',
-		'options': 'Warehouse',
-		'permlevel': 1,
-		'print_hide': 1,
-		'search_index': 0,
-		'width': '100px'
-	},
-
-	# DocField
-	{
-		'colour': 'White:FFF',
-		'doctype': 'DocField',
 		'fieldname': 'qa_no',
 		'fieldtype': 'Link',
-		'idx': 20,
 		'label': 'QA No',
 		'no_copy': 1,
 		'oldfieldname': 'qa_no',
 		'oldfieldtype': 'Link',
 		'options': 'QA Inspection Report',
 		'permlevel': 0,
-		'print_hide': 1,
-		'search_index': 0
+		'print_hide': 1
 	},
 
 	# DocField
 	{
 		'doctype': 'DocField',
-		'fieldname': 'brand',
-		'fieldtype': 'Link',
-		'hidden': 1,
-		'idx': 21,
-		'label': 'Brand',
-		'oldfieldname': 'brand',
-		'oldfieldtype': 'Link',
-		'options': 'Brand',
-		'permlevel': 1,
+		'fieldname': 'stock_qty',
+		'fieldtype': 'Currency',
+		'label': 'Stock Qty',
+		'oldfieldname': 'stock_qty',
+		'oldfieldtype': 'Currency',
+		'permlevel': 0,
 		'print_hide': 1,
-		'search_index': 0
+		'trigger': 'Client',
+		'width': '100px'
 	},
 
 	# DocField
 	{
+		'colour': 'White:FFF',
 		'doctype': 'DocField',
-		'fieldname': 'item_group',
+		'fieldname': 'project_name',
 		'fieldtype': 'Link',
-		'hidden': 1,
-		'idx': 22,
 		'in_filter': 1,
-		'label': 'Item Group',
-		'oldfieldname': 'item_group',
-		'oldfieldtype': 'Link',
-		'options': 'Item Group',
-		'permlevel': 1,
-		'print_hide': 1,
-		'search_index': 0
+		'label': 'Project Name',
+		'options': 'Project',
+		'permlevel': 0,
+		'print_hide': 1
 	},
 
 	# DocField
@@ -405,7 +393,6 @@
 		'fieldname': 'prevdoc_doctype',
 		'fieldtype': 'Data',
 		'hidden': 1,
-		'idx': 23,
 		'label': 'Prevdoc Doctype',
 		'oldfieldname': 'prevdoc_doctype',
 		'oldfieldtype': 'Data',
@@ -420,7 +407,6 @@
 		'fieldname': 'prevdoc_docname',
 		'fieldtype': 'Link',
 		'hidden': 0,
-		'idx': 24,
 		'in_filter': 1,
 		'label': 'PO No',
 		'no_copy': 0,
@@ -440,7 +426,6 @@
 		'fieldname': 'prevdoc_date',
 		'fieldtype': 'Date',
 		'hidden': 1,
-		'idx': 25,
 		'in_filter': 1,
 		'label': 'PO Date',
 		'oldfieldname': 'prevdoc_date',
@@ -455,7 +440,6 @@
 		'fieldname': 'rm_supp_cost',
 		'fieldtype': 'Currency',
 		'hidden': 1,
-		'idx': 26,
 		'in_filter': 0,
 		'label': 'Raw Materials Supplied Cost',
 		'oldfieldname': 'rm_supp_cost',
@@ -467,11 +451,11 @@
 
 	# DocField
 	{
+		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldname': 'item_tax_amount',
 		'fieldtype': 'Currency',
 		'hidden': 1,
-		'idx': 27,
 		'label': 'Item Tax Amount',
 		'no_copy': 1,
 		'oldfieldname': 'item_tax_amount',
@@ -479,7 +463,7 @@
 		'permlevel': 1,
 		'print_hide': 1,
 		'reqd': 0,
-		'search_index': 0,
+		'search_index': 1,
 		'width': '150px'
 	},
 
@@ -490,7 +474,6 @@
 		'fieldname': 'prevdoc_detail_docname',
 		'fieldtype': 'Data',
 		'hidden': 1,
-		'idx': 28,
 		'in_filter': 1,
 		'label': 'PO Detail No',
 		'no_copy': 0,
@@ -508,7 +491,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'billed_qty',
 		'fieldtype': 'Currency',
-		'idx': 29,
 		'label': 'Billed Quantity',
 		'no_copy': 1,
 		'oldfieldname': 'billed_qty',
@@ -520,11 +502,11 @@
 
 	# DocField
 	{
+		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldname': 'valuation_rate',
 		'fieldtype': 'Currency',
-		'hidden': 0,
-		'idx': 30,
+		'hidden': 1,
 		'in_filter': 0,
 		'label': 'Valuation Rate',
 		'no_copy': 1,
@@ -537,12 +519,12 @@
 
 	# DocField
 	{
+		'colour': 'White:FFF',
 		'description': 'Tax detail table fetched from item master as a string and stored in this field.\nUsed for Purchase Other Charges',
 		'doctype': 'DocField',
 		'fieldname': 'item_tax_rate',
 		'fieldtype': 'Small Text',
 		'hidden': 1,
-		'idx': 31,
 		'in_filter': 0,
 		'label': 'Item Tax Rate',
 		'oldfieldname': 'item_tax_rate',
@@ -558,7 +540,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'page_break',
 		'fieldtype': 'Check',
-		'idx': 32,
 		'label': 'Page Break',
 		'oldfieldname': 'page_break',
 		'oldfieldtype': 'Check',
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py
index 024bd1f..208dd28 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.py
@@ -93,7 +93,7 @@
 	def get_as_on_stock(self, item, wh, dt, tm):
 		bin = sql("select name from tabBin where item_code = %s and warehouse = %s", (item, wh))
 		bin_id = bin and bin[0][0] or ''
-		prev_sle = get_obj('Bin', bin_id).get_prev_sle(dt, tm)
+		prev_sle = bin_id and get_obj('Bin', bin_id).get_prev_sle(dt, tm) or {}		
 		qty = flt(prev_sle.get('bin_aqat', 0))
 		return qty
 
@@ -121,17 +121,46 @@
 				self.item_dict[i[0]] = [flt(i[1]), cstr(i[2]), cstr(i[3])]
 				
 	def get_raw_materials(self,pro_obj):
-		# get all items from flat bom except, child items of sub-contracted and sub assembly items and sub assembly items itself.
-		flat_bom_items = sql("select item_code, ifnull(sum(qty_consumed_per_unit), 0) * '%s', description, stock_uom	from `tabFlat BOM Detail` where parent = '%s' and parent_bom = '%s' and is_pro_applicable = 'No' and docstatus < 2 group by item_code" % ((self.doc.process == 'Backflush') and flt(self.doc.fg_completed_qty) or flt(pro_obj.doc.qty), cstr(pro_obj.doc.bom_no), cstr(pro_obj.doc.bom_no)))
-		self.make_items_dict(flat_bom_items)
+		""" 
+			get all items from flat bom except 
+			child items of sub-contracted and sub assembly items 
+			and sub assembly items itself.
+		"""
+
 		if pro_obj.doc.consider_sa_items == 'Yes':
-			# get all Sub Assembly items only from flat bom
-			fl_bom_sa_items = sql("select item_code, ifnull(sum(qty_consumed_per_unit), 0) * '%s', description, stock_uom from `tabFlat BOM Detail` where parent = '%s' and parent_bom != '%s' and is_pro_applicable = 'Yes' and docstatus < 2 group by item_code" % ((self.doc.process == 'Backflush') and flt(self.doc.fg_completed_qty) or flt(pro_obj.doc.qty), cstr(pro_obj.doc.bom_no), cstr(pro_obj.doc.bom_no)))
+			# Get all raw materials considering SA items as raw materials, 
+			# so no childs of SA items
+			
+			fl_bom_sa_items = sql("""
+				select item_code, ifnull(sum(qty_consumed_per_unit), 0) * '%s', description, stock_uom 
+				from `tabBOM Material` 
+				where parent = '%s' and docstatus < 2 
+				group by item_code
+			""" % ((self.doc.process == 'Backflush') and flt(self.doc.fg_completed_qty) \
+					 or flt(pro_obj.doc.qty), cstr(pro_obj.doc.bom_no)))
+			
 			self.make_items_dict(fl_bom_sa_items)
 		
 		if pro_obj.doc.consider_sa_items == 'No':
-			# get all sub assembly childs only from flat bom
-			fl_bom_sa_child_item = sql("select item_code, ifnull(sum(qty_consumed_per_unit), 0) * '%s', description, stock_uom from `tabFlat BOM Detail` where parent = '%s' and parent_bom in (select distinct parent_bom from `tabFlat BOM Detail` where parent = '%s' and parent_bom != '%s' and is_pro_applicable = 'Yes' and docstatus < 2 ) and is_pro_applicable = 'No' and docstatus < 2 group by item_code" % ((self.doc.process == 'Backflush') and flt(self.doc.fg_completed_qty) or flt(pro_obj.doc.qty), cstr(pro_obj.doc.bom_no), cstr(pro_obj.doc.bom_no), cstr(pro_obj.doc.bom_no)))
+			# get all raw materials with sub assembly childs
+					
+			fl_bom_sa_child_item = sql("""
+				select 
+					item_code,ifnull(sum(qty_consumed_per_unit),0)*%s as qty,description,stock_uom 
+				from 
+					( 
+						select distinct fb.name, fb.description, fb.item_code, fb.qty_consumed_per_unit, fb.stock_uom 
+						from `tabFlat BOM Detail` fb,`tabItem` it 
+						where it.name = fb.item_code and ifnull(it.is_pro_applicable, 'No') = 'No'
+						and ifnull(it.is_sub_contracted_item, 'No') = 'No' 
+						and fb.docstatus<2 and fb.parent=%s
+					) a
+				group by item_code,stock_uom
+			""" , ((self.doc.process == 'Backflush') and flt(self.doc.fg_completed_qty) \
+					or flt(pro_obj.doc.qty), cstr(pro_obj.doc.bom_no)))
+			
+			
+			
 			self.make_items_dict(fl_bom_sa_child_item)
 
 	def add_to_stock_entry_detail(self, pro_obj, item_dict, fg_item = 0):
@@ -165,8 +194,9 @@
 		self.get_raw_materials(pro_obj)
 		
 		self.doc.clear_table(self.doclist, 'mtn_details', 1)
-		
+
 		self.add_to_stock_entry_detail(pro_obj, self.item_dict)
+		
 		if self.doc.process == 'Backflush':
 			item_dict = {cstr(pro_obj.doc.production_item) : [self.doc.fg_completed_qty, pro_obj.doc.description, pro_obj.doc.stock_uom]}
 			self.add_to_stock_entry_detail(pro_obj, item_dict, fg_item = 1)
@@ -176,11 +206,10 @@
 			if flt(d.transfer_qty) <= 0:
 				msgprint("Transfer Quantity can not be less than or equal to zero at Row No " + cstr(d.idx))
 				raise Exception
-			if d.s_warehouse:
-				if flt(d.transfer_qty) > flt(d.actual_qty):
-					msgprint("Transfer Quantity is more than Available Qty at Row No " + cstr(d.idx))
-					raise Exception
-	
+			if d.s_warehouse and flt(d.transfer_qty) > flt(d.actual_qty):
+				msgprint("Transfer Quantity is more than Available Qty at Row No " + cstr(d.idx))
+				raise Exception
+
 	def calc_amount(self):
 		total_amount = 0
 		for d in getlist(self.doclist, 'mtn_details'):
diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py
index f040df3..e133d6f 100644
--- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py
+++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py
@@ -131,18 +131,18 @@
 			update item valuation in previous date and also on post date if no qty diff
 		"""
 		
-		self.update_item_valuation_pre_date(d)
+		self.update_entries_pre_date(d)
 		
 		if not flt(d[self.label['qty']]) and not flt(d[self.label['actual_qty']]):
 			# seems like a special condition when there is no actual quanitity but there is a rate, may be only for setting a rate!
 			self.make_sl_entry(1,d,1)
 			self.make_sl_entry(1,d,-1)
 		elif not qty_diff:
-			self.update_item_valuation_post_date(d)
+			self.update_entries_post_date(d)
 				
 	# update valuation rate as csv file in all sle before reconciliation date
 	# ------------------------------------------------------------------------
-	def update_item_valuation_pre_date(self, d):
+	def update_entries_pre_date(self, d):
 		mar = flt(d[self.label['mar']])		
 
 		# previous sle
@@ -168,15 +168,12 @@
 				
 	# Update item valuation in all sle after the reconcliation date
 	# ---------------------------------------------------------
-	def update_item_valuation_post_date(self, d):
+	def update_entries_post_date(self, d):
 		bin = sql("select name from `tabBin` where item_code = '%s' and warehouse = '%s'" % (d[self.label['item_code']], d[self.label['warehouse']]))
 		bin_obj = get_obj('Bin', bin[0][0])
 
-		# prev sle
-		prev_sle = bin_obj.get_prev_sle(self.doc.reconciliation_date,self.doc.reconciliation_time)
-
 		# update valuation in sle posted after reconciliation datetime
-		bin_obj.update_item_valuation(posting_date = self.doc.reconciliation_date, posting_time = self.doc.reconciliation_time, prev_sle = prev_sle)
+		bin_obj.update_entries_after(posting_date = self.doc.reconciliation_date, posting_time = self.doc.reconciliation_time)
 
 	# --------------
 	# make sl entry
diff --git a/erpnext/stock/doctype/stock_uom_replace_utility/stock_uom_replace_utility.py b/erpnext/stock/doctype/stock_uom_replace_utility/stock_uom_replace_utility.py
index f8ac737..0fa7a3b 100644
--- a/erpnext/stock/doctype/stock_uom_replace_utility/stock_uom_replace_utility.py
+++ b/erpnext/stock/doctype/stock_uom_replace_utility/stock_uom_replace_utility.py
@@ -85,7 +85,7 @@
       for w in wh:
         bin = sql("select name from `tabBin` where item_code = '%s' and warehouse = '%s'" % (self.doc.item_code, w[0])) 
         if bin and bin[0][0]:
-          get_obj("Bin", bin[0][0]).update_item_valuation(sle_id = '', posting_date = '', posting_time = '')
+          get_obj("Bin", bin[0][0]).update_entries_after(posting_date = '', posting_time = '')
 
     # acknowledge user
     msgprint("Item Valuation Updated Successfully.")
diff --git a/erpnext/stock/doctype/valuation_control/valuation_control.py b/erpnext/stock/doctype/valuation_control/valuation_control.py
index 131c71b..f37b7e7 100644
--- a/erpnext/stock/doctype/valuation_control/valuation_control.py
+++ b/erpnext/stock/doctype/valuation_control/valuation_control.py
@@ -1,82 +1,114 @@
 # Please edit this list and import only required elements
-import webnotes
+import webnotes, unittest
 
-from webnotes.utils import add_days, add_months, add_years, cint, cstr, date_diff, default_fields, flt, fmt_money, formatdate, generate_hash, getTraceback, get_defaults, get_first_day, get_last_day, getdate, has_common, month_name, now, nowdate, replace_newlines, sendmail, set_default, str_esc_quote, user_format, validate_email_add
-from webnotes.model import db_exists
-from webnotes.model.doc import Document, addchild, removechild, getchildren, make_autoname, SuperDocType
-from webnotes.model.doclist import getlist, copy_doclist
-from webnotes.model.code import get_obj, get_server_obj, run_server_obj, updatedb, check_syntax
-from webnotes import session, form, is_testing, msgprint, errprint
+from webnotes.utils import flt
+from webnotes.model.code import get_obj
 
-set = webnotes.conn.set
-sql = webnotes.conn.sql
-get_value = webnotes.conn.get_value
-in_transaction = webnotes.conn.in_transaction
-convert_to_lists = webnotes.conn.convert_to_lists
+class TestValuationControl(unittest.TestCase):
+	def setUp(self):
+		webnotes.conn.begin()
+
+	def tearDown(self):
+		webnotes.conn.rollback()
+		
+	def test_fifo_rate(self):
+		"""test fifo rate"""
+		fcfs_stack = [[40,500.0], [12,400.0]]
+		self.assertTrue(DocType(None, None).get_fifo_rate(fcfs_stack)==((40*500.0 + 12*400.0)/52.0))
 	
-# -----------------------------------------------------------------------------------------
+	def test_serial_no_value(self):
+		"""test serial no value"""
+		from webnotes.model.doc import Document
+
+		Document(fielddata = {
+			'doctype': 'Item',
+			'docstatus': 0,
+			'name': 'it',
+			'item_name': 'it',
+			'item_code': 'it',
+			'item_group': 'Default',
+			'is_stock_item': 'Yes',
+			'has_serial_no': 'Yes',
+			'stock_uom': 'Nos',
+			'is_sales_item': 'Yes',
+			'is_purchase_item': 'Yes',
+			'is_service_item': 'No',
+			'is_sub_contracted_item': 'No',
+			'is_pro_applicable': 'Yes',
+			'is_manufactured_item': 'Yes'		
+		}).save(1)
+		
+		s1 = Document(fielddata= {
+			'doctype':'Serial No',
+			'serial_no':'s1',
+			'item_code':'it',
+			'purchase_rate': 100.0
+		})
+		s2 = Document(fielddata = s1.fields.copy())
+		s3 = Document(fielddata = s1.fields.copy())
+		s4 = Document(fielddata = s1.fields.copy())
+		s1.save(1)
+		s2.purchase_rate = 120.0
+		s2.serial_no = 's2'
+		s2.save(1)
+		s3.purchase_rate = 130.0
+		s3.serial_no = 's3'
+		s3.save(1)
+		s4.purchase_rate = 150.0
+		s4.serial_no = 's4'
+		s4.save(1)
+		
+		r = DocType(None, None).get_serializable_inventory_rate('s1,s2,s3')
+		self.assertTrue(flt(r) - (100.0+120.0+130.0)/3 < 0.0001)
 
 
 class DocType:
 	def __init__(self, d, dl):
 		self.doc, self.doclist = d, dl
 
-	# Get FIFO Rate from Stack
-	# -------------------------
-	def get_fifo_rate(self, fcfs_stack, qty):
-		fcfs_val = 0
-		withdraw = flt(qty)
-		while withdraw:
-			batch = fcfs_stack[0]				
-			if batch[0] <= withdraw:
-				# not enough or exactly same qty in current batch, clear batch
-				withdraw -= batch[0]
-				fcfs_val += (flt(batch[0]) * flt(batch[1]))
-				fcfs_stack.pop(0)
-			else:
-				# all from current batch
-				fcfs_val += (flt(withdraw) * flt(batch[1]))
-				batch[0] -= withdraw
-				withdraw = 0
-		fcfs_rate = flt(fcfs_val) / flt(qty)
-		return fcfs_rate
-
-	# --------------------------------
-	# get serializable inventory rate
-	# --------------------------------
+	def get_fifo_rate(self, fcfs_stack):
+		"""get FIFO (average) Rate from Stack"""
+		if not fcfs_stack:
+			return 0.0
+			
+		total = sum(f[0] for f in fcfs_stack)
+		if not total:
+			return 0.0
+		
+		return sum(f[0] * f[1] for f in fcfs_stack) / total
+			
 	def get_serializable_inventory_rate(self, serial_no):
+		"""get average value of serial numbers"""
+		
 		sr_nos = get_obj("Stock Ledger").get_sr_no_list(serial_no)
-		tot = 0
-		for s in sr_nos:
-			serial_no = s.strip()
-			tot += flt(get_value('Serial No', serial_no, 'purchase_rate'))
-		return tot / len(sr_nos)
+		return webnotes.conn.sql("""select avg(ifnull(purchase_rate, 0)) 
+			from `tabSerial No` where name in ("%s")""" % '", "'.join(sr_nos))[0][0] or 0.0
 
 
-	# ---------------------
-	# get valuation method
-	# ---------------------
 	def get_valuation_method(self, item_code):
+		"""get valuation method from item or default"""
 		val_method = webnotes.conn.get_value('Item', item_code, 'valuation_method')
 		if not val_method:
+			from webnotes.utils import get_defaults
 			val_method = get_defaults().get('valuation_method', 'FIFO')
 		return val_method
 		
 
-	# Get Incoming Rate based on valuation method
-	# --------------------------------------------
 	def get_incoming_rate(self, posting_date, posting_time, item, warehouse, qty = 0, serial_no = ''):
+		"""Get Incoming Rate based on valuation method"""
 		in_rate = 0
 		val_method = self.get_valuation_method(item)
 		bin_obj = get_obj('Warehouse',warehouse).get_bin(item)
 		if serial_no:
 			in_rate = self.get_serializable_inventory_rate(serial_no)
 		elif val_method == 'FIFO':
-			in_rate = 0
+			# get rate based on the last item value?
 			if qty:
 				prev_sle = bin_obj.get_prev_sle(posting_date, posting_time)
-				fcfs_stack = eval(prev_sle.get('fcfs_stack', '[]') or '[]')
-				in_rate = fcfs_stack and self.get_fifo_rate(fcfs_stack, qty) or 0
+				if not prev_sle:
+					return 0.0
+				fcfs_stack = eval(prev_sle.get('fcfs_stack', '[]'))
+				in_rate = fcfs_stack and self.get_fifo_rate(fcfs_stack) or 0
 		elif val_method == 'Moving Average':
 			prev_sle = bin_obj.get_prev_sle(posting_date, posting_time)
 			in_rate = prev_sle and prev_sle.get('valuation_rate', 0) or 0
diff --git a/erpnext/stock/doctype/warehouse/warehouse.py b/erpnext/stock/doctype/warehouse/warehouse.py
index f3d600d..b59ce75 100644
--- a/erpnext/stock/doctype/warehouse/warehouse.py
+++ b/erpnext/stock/doctype/warehouse/warehouse.py
@@ -68,7 +68,7 @@
     bl = sql("select name from tabBin where warehouse=%s", self.doc.name)
     for b in bl:
       bobj = get_obj('Bin',b[0])
-      bobj.update_item_valuation(posting_date = '2000-01-01', posting_time = '12:00')
+      bobj.update_entries_after(posting_date = '0000-00-00', posting_time = '00:00')
 
       sql("COMMIT")
       sql("START TRANSACTION")
diff --git a/erpnext/utilities/doctype/reposting_tool/reposting_tool.py b/erpnext/utilities/doctype/reposting_tool/reposting_tool.py
index c4f021b..489a3b6 100644
--- a/erpnext/utilities/doctype/reposting_tool/reposting_tool.py
+++ b/erpnext/utilities/doctype/reposting_tool/reposting_tool.py
@@ -88,7 +88,7 @@
 		bin_act_qty =	flt(bin_obj.doc.actual_qty)
 		try:
 			# udpate actual qty and item valuation
-			bin_obj.update_item_valuation('', '2000-01-01', '00:00')
+			bin_obj.update_entries_after('0000-00-00', '00:00')
 			# get bin qty
 			qty_dict = self.get_bin_qty(bin_obj.doc.warehouse, bin_obj.doc.item_code)
 			
diff --git a/erpnext/utilities/doctype/sms_control/sms_control.py b/erpnext/utilities/doctype/sms_control/sms_control.py
index a1edf83..c595158 100644
--- a/erpnext/utilities/doctype/sms_control/sms_control.py
+++ b/erpnext/utilities/doctype/sms_control/sms_control.py
@@ -63,7 +63,15 @@
 
 	def get_sender_name(self):
 		"returns name as SMS sender"
-		return webnotes.conn.get_value('Manage Account', None, 'sms_sender_name') or 'ERPNext'
+		sender_name = webnotes.conn.get_value('Manage Account', None, 'sms_sender_name') or 'ERPNXT'
+		if len(sender_name) > 6:
+			msgprint("""
+				As per TRAI rule, sender name must be exactly 6 characters.
+				Kindly change sender name in Setup --> Global Defaults.
+				
+				Note: Hyphen, space, numeric digit, special characters are not allowed.
+			""", raise_exception=1)
+		return sender_name
 	
 	def get_contact_number(self, arg):
 		"returns mobile number of the contact"
diff --git a/index.html b/index.html
index 64eef0f..c28b0aa 100644
--- a/index.html
+++ b/index.html
@@ -3,7 +3,7 @@
 	<meta charset="utf-8">
 	<title>ERPNext</title>
 	<meta name="author" content="">
-	<script type="text/javascript">window._version_number="57"
+	<script type="text/javascript">window._version_number="325"
 
 wn={}
 wn.provide=function(namespace){var nsl=namespace.split('.');var l=nsl.length;var parent=window;for(var i=0;i<l;i++){var n=nsl[i];if(!parent[n]){parent[n]={}}
@@ -79,4 +79,4 @@
 	</div>
 	<script>wn.require('js/app.js');</script>
 	<div id="dialog_back"></div>
-</body>
\ No newline at end of file
+</body>
diff --git a/versions-master.db b/versions-master.db
index 0b3bcb2..5707243 100644
--- a/versions-master.db
+++ b/versions-master.db
Binary files differ