Fixes and modification in fixed asset
diff --git a/erpnext/accounts/doctype/asset/asset.js b/erpnext/accounts/doctype/asset/asset.js
index 4c03471..548de08 100644
--- a/erpnext/accounts/doctype/asset/asset.js
+++ b/erpnext/accounts/doctype/asset/asset.js
@@ -49,7 +49,7 @@
 	},
 	
 	is_existing_asset: function(frm) {
-		frm.toggle_enable(["purchase_date", "supplier"], frm.doc.is_existing_asset);
+		frm.toggle_enable("supplier", frm.doc.is_existing_asset);
 		frm.toggle_reqd("next_depreciation_date", !frm.doc.is_existing_asset);
 	}
 });
diff --git a/erpnext/accounts/doctype/asset/asset.json b/erpnext/accounts/doctype/asset/asset.json
index ea2dfb1..cf03bf6 100644
--- a/erpnext/accounts/doctype/asset/asset.json
+++ b/erpnext/accounts/doctype/asset/asset.json
@@ -232,9 +232,9 @@
    "precision": "", 
    "print_hide": 0, 
    "print_hide_if_no_value": 0, 
-   "read_only": 1, 
+   "read_only": 0, 
    "report_hide": 0, 
-   "reqd": 0, 
+   "reqd": 1, 
    "search_index": 0, 
    "set_only_once": 0, 
    "unique": 0
@@ -295,6 +295,31 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
+   "fieldname": "disposal_date", 
+   "fieldtype": "Date", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Disposal Date", 
+   "length": 0, 
+   "no_copy": 0, 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 1, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "journal_entry_for_scrap", 
    "fieldtype": "Link", 
    "hidden": 0, 
@@ -526,14 +551,15 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
-   "fieldname": "current_value", 
+   "depends_on": "is_existing_asset", 
+   "fieldname": "opening_accumulated_depreciation", 
    "fieldtype": "Currency", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
    "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
-   "label": "Current Value (After Depreciation)", 
+   "label": "Opening Accumulated Depreciation", 
    "length": 0, 
    "no_copy": 1, 
    "options": "Company:company:default_currency", 
@@ -552,6 +578,32 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
+   "fieldname": "value_after_depreciation", 
+   "fieldtype": "Currency", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Value After Depreciation", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "Company:company:default_currency", 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 1, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "section_break_14", 
    "fieldtype": "Section Break", 
    "hidden": 0, 
@@ -634,7 +686,7 @@
  "issingle": 0, 
  "istable": 0, 
  "max_attachments": 0, 
- "modified": "2016-04-07 18:15:36.509712", 
+ "modified": "2016-04-08 18:42:52.810809", 
  "modified_by": "Administrator", 
  "module": "Accounts", 
  "name": "Asset", 
diff --git a/erpnext/accounts/doctype/asset/asset.py b/erpnext/accounts/doctype/asset/asset.py
index d055dbb..1807d70 100644
--- a/erpnext/accounts/doctype/asset/asset.py
+++ b/erpnext/accounts/doctype/asset/asset.py
@@ -33,24 +33,27 @@
 			frappe.throw(_("Item {0} has been disabled").format(self.item_code))
 
 	def validate_asset_values(self):
+		self.value_after_depreciation = flt(self.gross_purchase_amount) - flt(self.opening_accumulated_depreciation)
+		
 		if flt(self.expected_value_after_useful_life) >= flt(self.gross_purchase_amount):
 			frappe.throw(_("Expected Value After Useful Life must be less than Gross Purchase Amount"))
 
 		if not flt(self.gross_purchase_amount):
 			frappe.throw(_("Gross Purchase Amount is mandatory"), frappe.MandatoryError)
-			
-		if not self.is_existing_asset and not self.next_depreciation_date:
-			frappe.throw(_("Next Depreciation Date is mandatory for new asset"))
-			
+		
+		if not self.is_existing_asset:
+			self.opening_accumulated_depreciation = 0
+			if not self.next_depreciation_date:
+				frappe.throw(_("Next Depreciation Date is mandatory for new asset"))
+		else:
+			depreciable_amount = flt(self.gross_purchase_amount) - flt(self.expected_value_after_useful_life)
+			if flt(self.opening_accumulated_depreciation) > depreciable_amount:
+					frappe.throw(_("Opening Accumulated Depreciation must be less than equal to {0}")
+						.format(depreciable_amount))
+						
 		if self.next_depreciation_date and getdate(self.next_depreciation_date) < getdate(nowdate()):
 			frappe.throw(_("Next Depreciation Date must be on or after today"))
-
-		if not self.current_value and self.next_depreciation_date:
-			self.current_value = flt(self.gross_purchase_amount)
-		else:
-			if flt(self.current_value) > flt(self.gross_purchase_amount):
-				frappe.throw(_("Current Value After Depreciation must be less than equal to {0}")
-					.format(flt(self.gross_purchase_amount)))
+		
 
 	def set_depreciation_settings(self):
 		asset_category = frappe.get_doc("Asset Category", self.asset_category)
@@ -62,25 +65,26 @@
 	def make_depreciation_schedule(self):
 		self.schedules = []
 		if not self.get("schedules") and self.next_depreciation_date:
-			accumulated_depreciation = 0
-			value_after_depreciation = flt(self.current_value)
+			accumulated_depreciation = flt(self.opening_accumulated_depreciation)
+			value_after_depreciation = flt(self.value_after_depreciation)
 			for n in xrange(self.number_of_depreciations):
 				schedule_date = add_months(self.next_depreciation_date,
 					n * cint(self.frequency_of_depreciation))
 
 				depreciation_amount = self.get_depreciation_amount(value_after_depreciation)
+				
+				accumulated_depreciation += flt(depreciation_amount)
+				value_after_depreciation -= flt(depreciation_amount)
 
 				self.append("schedules", {
 					"schedule_date": schedule_date,
 					"depreciation_amount": depreciation_amount,
-					"accumulated_depreciation_amount": accumulated_depreciation + depreciation_amount
+					"accumulated_depreciation_amount": accumulated_depreciation
 				})
-				accumulated_depreciation += flt(depreciation_amount)
-				value_after_depreciation -= flt(depreciation_amount)
 
 	def get_depreciation_amount(self, depreciable_value):
 		if self.depreciation_method == "Straight Line":
-			depreciation_amount = (flt(self.current_value) -
+			depreciation_amount = (flt(self.value_after_depreciation) -
 				flt(self.expected_value_after_useful_life)) / cint(self.number_of_depreciations)
 		else:
 			factor = 200.0 /  cint(self.number_of_depreciations)
@@ -100,14 +104,13 @@
 			frappe.throw(_("Please cancel Purchase Invoice {0} first").format(self.purchase_invoice))
 
 	def delete_depreciation_entries(self):
-		total_depreciation_amount = 0
 		for d in self.get("schedules"):
 			if d.journal_entry:
 				frappe.get_doc("Journal Entry", d.journal_entry).cancel()
-
-				d.db_set("journal_entry", None)
-				total_depreciation_amount += flt(d.depreciation_amount)
-		self.db_set("current_value", (self.current_value + total_depreciation_amount))
+				d.db_set("journal_entry", None)				
+		
+		self.db_set("value_after_depreciation", 
+			(flt(self.gross_purchase_amount) - flt(self.opening_accumulated_depreciation)))
 
 	def validate_depreciation_settings_in_company(self):
 		company = frappe.get_doc("Company", self.company)
@@ -131,9 +134,9 @@
 			status = "Submitted"
 			if self.journal_entry_for_scrap:
 				status = "Scrapped"
-			elif flt(self.current_value) <= flt(self.expected_value_after_useful_life):
+			elif flt(self.value_after_depreciation) <= flt(self.expected_value_after_useful_life):
 				status = "Fully Depreciated"
-			elif flt(self.current_value) < flt(self.gross_purchase_amount):
+			elif flt(self.value_after_depreciation) < flt(self.gross_purchase_amount):
 				status = 'Partially Depreciated'
 		elif self.docstatus == 2:
 			status = "Cancelled"
diff --git a/erpnext/accounts/doctype/asset/depreciation.py b/erpnext/accounts/doctype/asset/depreciation.py
index 15ff9a9..d045ced 100644
--- a/erpnext/accounts/doctype/asset/depreciation.py
+++ b/erpnext/accounts/doctype/asset/depreciation.py
@@ -58,9 +58,9 @@
 			je.submit()
 
 			d.db_set("journal_entry", je.name)
-			asset.current_value -= d.depreciation_amount
+			asset.value_after_depreciation -= d.depreciation_amount
 
-		asset.db_set("current_value", asset.current_value)
+		asset.db_set("value_after_depreciation", asset.value_after_depreciation)
 		asset.set_status()
 
 def get_depreciation_accounts(asset):
@@ -115,7 +115,8 @@
 
 	je.flags.ignore_permissions = True
 	je.submit()
-
+	
+	frappe.db.set_value("Asset", asset_name, "disposal_date", today())
 	frappe.db.set_value("Asset", asset_name, "journal_entry_for_scrap", je.name)
 	asset.set_status("Scrapped")
 
@@ -124,7 +125,10 @@
 	asset = frappe.get_doc("Asset", asset_name)
 
 	je = asset.journal_entry_for_scrap
+	
+	asset.db_set("disposal_date", None)
 	asset.db_set("journal_entry_for_scrap", None)
+	
 	frappe.get_doc("Journal Entry", je).cancel()
 
 	asset.set_status()
@@ -133,7 +137,7 @@
 def get_gl_entries_on_asset_disposal(asset, selling_amount=0):
 	fixed_asset_account, accumulated_depr_account, depr_expense_account = get_depreciation_accounts(asset)
 	disposal_account, depreciation_cost_center = get_disposal_account_and_cost_center(asset.company)
-	accumulated_depr_amount = flt(asset.gross_purchase_amount) - flt(asset.current_value)
+	accumulated_depr_amount = flt(asset.gross_purchase_amount) - flt(asset.value_after_depreciation)
 
 	gl_entries = [
 		{
@@ -148,8 +152,8 @@
 		}
 	]
 
-	profit_amount = flt(selling_amount) - flt(asset.current_value)
-	if flt(asset.current_value) and profit_amount:
+	profit_amount = flt(selling_amount) - flt(asset.value_after_depreciation)
+	if flt(asset.value_after_depreciation) and profit_amount:
 		debit_or_credit = "debit" if profit_amount < 0 else "credit"
 		gl_entries.append({
 			"account": disposal_account,
diff --git a/erpnext/accounts/doctype/asset/test_asset.py b/erpnext/accounts/doctype/asset/test_asset.py
index 102af59..ea1d6a2 100644
--- a/erpnext/accounts/doctype/asset/test_asset.py
+++ b/erpnext/accounts/doctype/asset/test_asset.py
@@ -104,7 +104,7 @@
 			order by account""", asset.name)
 
 		self.assertEqual(gle, expected_gle)
-		self.assertEqual(asset.get("current_value"), 70000)
+		self.assertEqual(asset.get("value_after_depreciation"), 70000)
 
 	def test_scrap_asset(self):
 		asset = frappe.get_doc("Asset", "Macbook Pro 1")
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index 76c5e94..a72b3ba 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -567,6 +567,7 @@
 						gle["against"] = self.customer
 						gl_entries.append(self.get_gl_dict(gle))
 					
+					asset.db_set("disposal_date", self.posting_date)
 					asset.set_status("Sold" if self.docstatus==1 else None)
 				else:
 					account_currency = get_account_currency(item.income_account)
diff --git a/erpnext/config/accounts.py b/erpnext/config/accounts.py
index 3d6fb54..72ed0f9 100644
--- a/erpnext/config/accounts.py
+++ b/erpnext/config/accounts.py
@@ -342,6 +342,18 @@
 			"items": [
 				{
 					"type": "report",
+					"name": "Asset Depreciation Ledger",
+					"doctype": "Asset",
+					"is_query_report": True,
+				},
+				{
+					"type": "report",
+					"name": "Asset Depreciations and Balances",
+					"doctype": "Asset",
+					"is_query_report": True,
+				},
+				{
+					"type": "report",
 					"name": "Trial Balance for Party",
 					"doctype": "GL Entry",
 					"is_query_report": True,
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index cba4d6a..204c236 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -4,7 +4,7 @@
 from __future__ import unicode_literals
 import frappe
 from frappe import _, throw
-from frappe.utils import today, flt, cint, fmt_money, formatdate
+from frappe.utils import today, flt, cint, fmt_money, formatdate, getdate
 from erpnext.setup.utils import get_company_currency, get_exchange_rate
 from erpnext.accounts.utils import get_fiscal_years, validate_fiscal_year, get_account_currency
 from erpnext.utilities.transaction_base import TransactionBase
@@ -498,6 +498,8 @@
 							if asset.status != "Submitted":
 								frappe.throw(_("Row #{0}: Asset {1} is already {2}")
 									.format(d.idx, d.asset, asset.status))
+							elif getdate(asset.purchase_date) != getdate(self.posting_date):
+								frappe.throw(_("Row #{0}: Posting Date must be same as purchase date {1} of asset {2}").format(d.idx, asset.purchase_date, d.asset))
 							elif asset.is_existing_asset:
 								frappe.throw(_("Row #{0}: Purchase Invoice cannot be made against an existing asset {1}").format(d.idx, d.asset))
 								
diff --git a/erpnext/docs/user/manual/en/accounts/managing-fixed-assets.md b/erpnext/docs/user/manual/en/accounts/managing-fixed-assets.md
index 93239a5..dc07de3 100644
--- a/erpnext/docs/user/manual/en/accounts/managing-fixed-assets.md
+++ b/erpnext/docs/user/manual/en/accounts/managing-fixed-assets.md
@@ -18,7 +18,7 @@
 Explanation of the fields:
 
 1. Asset Category: The category of assets it belongs to.
-2. Is Existing Asset: Check if adding an existing asset. The existing assets which are partially / fully depreciated can also be created/maintained for the future reference.
+2. Is Existing Asset: Check if the asset is being carried forward from the previous Fiscal Year. The existing assets which are partially / fully depreciated can also be created/maintained for the future reference.
 3. Status: The options are - Draft, Submitted, Partially Depreciated, Fully Depreciated, Sold and Scrapped.
 4. Warehouse: Set the location of the asset.
 5. Gross Purchase Amount: The purchase cost of the asset