Create asset adjustment doctype, post gl entry for the asset
diff --git a/erpnext/assets/doctype/asset/asset.js b/erpnext/assets/doctype/asset/asset.js
index b8bcc91..4daeae2 100644
--- a/erpnext/assets/doctype/asset/asset.js
+++ b/erpnext/assets/doctype/asset/asset.js
@@ -57,6 +57,19 @@
erpnext.asset.restore_asset(frm);
});
}
+
+ if (frm.doc.purchase_receipt) {
+ frm.add_custom_button("General Ledger", function() {
+ frappe.route_options = {
+ "voucher_no": frm.doc.name,
+ "from_date": frm.doc.available_for_use_date,
+ "to_date": frm.doc.available_for_use_date,
+ "company": frm.doc.company
+ };
+ frappe.set_route("query-report", "General Ledger");
+ });
+ }
+
if (frm.doc.status=='Submitted' && !frm.doc.is_existing_asset && !frm.doc.purchase_invoice) {
frm.add_custom_button(__("Purchase Invoice"), function() {
frm.trigger("make_purchase_invoice");
@@ -139,7 +152,7 @@
},
is_existing_asset: function(frm) {
- frm.toggle_reqd("next_depreciation_date", (!frm.doc.is_existing_asset && frm.doc.calculate_depreciation));
+ // frm.toggle_reqd("next_depreciation_date", (!frm.doc.is_existing_asset && frm.doc.calculate_depreciation));
},
opening_accumulated_depreciation: function(frm) {
@@ -289,15 +302,14 @@
title: __("Transfer Asset"),
fields: [
{
- "label": __("Target Warehouse"),
- "fieldname": "target_warehouse",
+ "label": __("Target Location"),
+ "fieldname": "target_location",
"fieldtype": "Link",
- "options": "Warehouse",
+ "options": "Location",
"get_query": function () {
return {
filters: [
- ["Warehouse", "company", "in", ["", cstr(frm.doc.company)]],
- ["Warehouse", "is_group", "=", 0]
+ ["Location", "is_group", "=", 0]
]
}
},
@@ -324,8 +336,8 @@
args: {
"asset": frm.doc.name,
"transaction_date": args.transfer_date,
- "source_warehouse": frm.doc.warehouse,
- "target_warehouse": args.target_warehouse,
+ "source_warehouse": frm.doc.location,
+ "target_warehouse": args.target_location,
"company": frm.doc.company
}
},
diff --git a/erpnext/assets/doctype/asset/asset.json b/erpnext/assets/doctype/asset/asset.json
index a47c645..9a05cad 100644
--- a/erpnext/assets/doctype/asset/asset.json
+++ b/erpnext/assets/doctype/asset/asset.json
@@ -169,38 +169,6 @@
},
{
"allow_bulk_edit": 0,
- "allow_on_submit": 1,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "default": "Draft",
- "fieldname": "status",
- "fieldtype": "Select",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 1,
- "in_standard_filter": 1,
- "label": "Status",
- "length": 0,
- "no_copy": 1,
- "options": "Draft\nSubmitted\nPartially Depreciated\nFully Depreciated\nSold\nScrapped\nIn Maintenance\nOut of Order",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 1,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -328,37 +296,6 @@
},
{
"allow_bulk_edit": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "custodian",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Custodian",
- "length": 0,
- "no_copy": 0,
- "options": "Employee",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
"allow_on_submit": 1,
"bold": 0,
"collapsible": 0,
@@ -393,36 +330,6 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
- "fieldname": "serial_no",
- "fieldtype": "Small Text",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Serial No",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 1,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fieldname": "column_break_3",
"fieldtype": "Column Break",
"hidden": 0,
@@ -483,7 +390,7 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
- "fieldname": "warehouse",
+ "fieldname": "location",
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
@@ -491,11 +398,11 @@
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
- "in_standard_filter": 1,
- "label": "Warehouse",
+ "in_standard_filter": 0,
+ "label": "Location",
"length": 0,
"no_copy": 0,
- "options": "Warehouse",
+ "options": "Location",
"permlevel": 0,
"precision": "",
"print_hide": 0,
@@ -514,6 +421,37 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
+ "fieldname": "custodian",
+ "fieldtype": "Link",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Custodian",
+ "length": 0,
+ "no_copy": 0,
+ "options": "Employee",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
"fieldname": "department",
"fieldtype": "Link",
"hidden": 0,
@@ -575,128 +513,6 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
- "fieldname": "purchase_receipt",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Purchase Receipt",
- "length": 0,
- "no_copy": 1,
- "options": "Purchase Receipt",
- "permlevel": 0,
- "precision": "",
- "print_hide": 1,
- "print_hide_if_no_value": 0,
- "read_only": 1,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "purchase_invoice",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Purchase Invoice",
- "length": 0,
- "no_copy": 1,
- "options": "Purchase Invoice",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 1,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "available_for_use_date",
- "fieldtype": "Date",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Available-for-use Date",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "is_existing_asset",
- "fieldtype": "Check",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Is Existing Asset",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fieldname": "disposal_date",
"fieldtype": "Date",
"hidden": 0,
@@ -818,6 +634,36 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
+ "fieldname": "available_for_use_date",
+ "fieldtype": "Date",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Available-for-use Date",
+ "length": 0,
+ "no_copy": 0,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
"fieldname": "column_break_18",
"fieldtype": "Column Break",
"hidden": 0,
@@ -847,99 +693,6 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
- "description": "",
- "fieldname": "expected_value_after_useful_life",
- "fieldtype": "Currency",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Expected Value After Useful Life",
- "length": 0,
- "no_copy": 0,
- "options": "Company:company:default_currency",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "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_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Opening Accumulated Depreciation",
- "length": 0,
- "no_copy": 1,
- "options": "Company:company:default_currency",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "section_break_20",
- "fieldtype": "Section Break",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fieldname": "calculate_depreciation",
"fieldtype": "Check",
"hidden": 0,
@@ -968,7 +721,100 @@
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
- "collapsible": 1,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "is_existing_asset",
+ "fieldtype": "Check",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Is Existing Asset",
+ "length": 0,
+ "no_copy": 0,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "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_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Opening Accumulated Depreciation",
+ "length": 0,
+ "no_copy": 1,
+ "options": "Company:company:default_currency",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "depends_on": "eval:(doc.is_existing_asset && doc.opening_accumulated_depreciation)",
+ "fieldname": "number_of_depreciations_booked",
+ "fieldtype": "Int",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Number of Depreciations Booked",
+ "length": 0,
+ "no_copy": 1,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
"columns": 0,
"depends_on": "calculate_depreciation",
"fieldname": "section_break_23",
@@ -1034,7 +880,7 @@
"columns": 0,
"fieldname": "section_break_33",
"fieldtype": "Section Break",
- "hidden": 0,
+ "hidden": 1,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
@@ -1184,37 +1030,6 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
- "depends_on": "eval:(doc.is_existing_asset && doc.opening_accumulated_depreciation)",
- "fieldname": "number_of_depreciations_booked",
- "fieldtype": "Int",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Number of Depreciations Booked",
- "length": 0,
- "no_copy": 1,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fieldname": "frequency_of_depreciation",
"fieldtype": "Int",
"hidden": 0,
@@ -1336,7 +1151,7 @@
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
- "collapsible": 0,
+ "collapsible": 1,
"columns": 0,
"fieldname": "insurance_details",
"fieldtype": "Section Break",
@@ -1636,6 +1451,190 @@
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
+ "collapsible": 1,
+ "columns": 0,
+ "fieldname": "other_details",
+ "fieldtype": "Section Break",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Other Details",
+ "length": 0,
+ "no_copy": 0,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 1,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "default": "Draft",
+ "fieldname": "status",
+ "fieldtype": "Select",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 1,
+ "in_standard_filter": 1,
+ "label": "Status",
+ "length": 0,
+ "no_copy": 1,
+ "options": "Draft\nSubmitted\nPartially Depreciated\nFully Depreciated\nSold\nScrapped\nIn Maintenance\nOut of Order\nIssue\nReceipt",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 1,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "default": "0",
+ "fieldname": "booked_fixed_asset",
+ "fieldtype": "Check",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Booked Fixed Asset",
+ "length": 0,
+ "no_copy": 0,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 1,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "column_break_51",
+ "fieldtype": "Column Break",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "length": 0,
+ "no_copy": 0,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "purchase_receipt",
+ "fieldtype": "Link",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Purchase Receipt",
+ "length": 0,
+ "no_copy": 1,
+ "options": "Purchase Receipt",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 1,
+ "print_hide_if_no_value": 0,
+ "read_only": 1,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "purchase_invoice",
+ "fieldtype": "Link",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Purchase Invoice",
+ "length": 0,
+ "no_copy": 1,
+ "options": "Purchase Invoice",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 1,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "amended_from",
@@ -1674,7 +1673,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
- "modified": "2018-05-09 11:09:56.407423",
+ "modified": "2018-05-11 01:48:18.711485",
"modified_by": "Administrator",
"module": "Assets",
"name": "Asset",
diff --git a/erpnext/assets/doctype/asset/asset.py b/erpnext/assets/doctype/asset/asset.py
index a6078c4..bf70fbc 100644
--- a/erpnext/assets/doctype/asset/asset.py
+++ b/erpnext/assets/doctype/asset/asset.py
@@ -10,17 +10,20 @@
from erpnext.assets.doctype.asset_category.asset_category import get_asset_category_account
from erpnext.assets.doctype.asset.depreciation \
import get_disposal_account_and_cost_center, get_depreciation_accounts
+from erpnext.accounts.general_ledger import make_gl_entries
+from erpnext.accounts.utils import get_account_currency
+from erpnext.controllers.accounts_controller import AccountsController
-class Asset(Document):
+class Asset(AccountsController):
def validate(self):
self.status = self.get_status()
self.validate_item()
self.set_missing_values()
- # self.validate_asset_values()
+ self.validate_asset_values()
if self.calculate_depreciation:
self.make_depreciation_schedule()
self.set_accumulated_depreciation()
- # get_depreciation_accounts(self)
+ get_depreciation_accounts(self)
if self.get("schedules"):
self.validate_expected_value_after_useful_life()
@@ -46,8 +49,11 @@
frappe.throw(_("Item {0} must be a non-stock item").format(self.item_code))
def set_missing_values(self):
- if self.item_code and not self.finance_books:
- finance_books = get_item_details(self.item_code)
+ if not self.asset_category:
+ self.asset_category = frappe.db.get_value("Item", self.item_code, "asset_category")
+
+ if self.item_code and not self.get('finance_books'):
+ finance_books = get_item_details(self.item_code, self.asset_category)
self.set('finance_books', finance_books)
def validate_asset_values(self):
@@ -57,14 +63,105 @@
if not self.calculate_depreciation:
return
- 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"))
+ self.value_after_depreciation = (flt(self.gross_purchase_amount) -
+ flt(self.opening_accumulated_depreciation))
+
+ if self.available_for_use_date and getdate(self.available_for_use_date) < getdate(nowdate()):
+ frappe.throw(_("Available-for-use Date is entered as past date"))
+
+ def make_depreciation_schedule(self):
+ if self.depreciation_method != 'Manual':
+ self.schedules = []
+
+ if not self.get("schedules") and self.available_for_use_date:
+ total_depreciations = sum([d.total_number_of_depreciations for d in self.get('finance_books')])
+
+ for d in self.get('finance_books'):
+ self.validate_asset_finance_books(d)
+
+ value_after_depreciation = flt(self.value_after_depreciation)
+ d.value_after_depreciation = value_after_depreciation
+
+ no_of_depreciations = cint(d.total_number_of_depreciations - 1) - cint(self.number_of_depreciations_booked)
+ end_date = add_months(d.depreciation_start_date,
+ no_of_depreciations * cint(d.frequency_of_depreciation))
+
+ total_days = date_diff(end_date, self.available_for_use_date)
+ rate_per_day = value_after_depreciation / total_days
+
+ number_of_pending_depreciations = cint(d.total_number_of_depreciations) - \
+ cint(self.number_of_depreciations_booked)
+
+ from_date = self.available_for_use_date
+ if number_of_pending_depreciations:
+ next_depr_date = getdate(add_months(self.available_for_use_date,
+ number_of_pending_depreciations * 12))
+ if (cint(frappe.db.get_value("Asset Settings", None, "schedule_based_on_fiscal_year")) == 1
+ and getdate(d.depreciation_start_date) < next_depr_date):
+
+ number_of_pending_depreciations += 1
+ for n in range(number_of_pending_depreciations):
+ if n == range(number_of_pending_depreciations)[-1]:
+ schedule_date = add_months(self.available_for_use_date, n * 12)
+ previous_scheduled_date = add_months(d.depreciation_start_date, (n-1) * 12)
+ depreciation_amount = \
+ self.get_depreciation_amount_prorata_temporis(value_after_depreciation,
+ row, previous_scheduled_date, schedule_date)
+
+ elif n == range(number_of_pending_depreciations)[0]:
+ schedule_date = d.depreciation_start_date
+ depreciation_amount = \
+ self.get_depreciation_amount_prorata_temporis(value_after_depreciation,
+ row, self.available_for_use_date, schedule_date)
+
+ else:
+ schedule_date = add_months(d.depreciation_start_date, n * 12)
+ depreciation_amount = \
+ self.get_depreciation_amount_prorata_temporis(value_after_depreciation, row)
+
+ if value_after_depreciation != 0:
+ value_after_depreciation -= flt(depreciation_amount)
+
+ self.append("schedules", {
+ "schedule_date": schedule_date,
+ "depreciation_amount": depreciation_amount,
+ "depreciation_method": d.depreciation_method,
+ "finance_book": d.finance_book,
+ "finance_book_id": d.idx
+ })
+ else:
+ for n in range(number_of_pending_depreciations):
+ schedule_date = add_months(d.depreciation_start_date,
+ n * cint(d.frequency_of_depreciation))
+
+ if d.depreciation_method in ("Straight Line", "Manual"):
+ days = date_diff(schedule_date, from_date)
+ depreciation_amount = days * rate_per_day
+ from_date = schedule_date
+ else:
+ depreciation_amount = self.get_depreciation_amount(value_after_depreciation,d)
+
+ if depreciation_amount:
+ value_after_depreciation -= flt(depreciation_amount)
+
+ self.append("schedules", {
+ "schedule_date": schedule_date,
+ "depreciation_amount": depreciation_amount,
+ "depreciation_method": d.depreciation_method,
+ "finance_book": d.finance_book,
+ "finance_book_id": d.idx
+ })
+
+ def validate_asset_finance_books(self, row):
+ if flt(row.expected_value_after_useful_life) >= flt(self.gross_purchase_amount):
+ frappe.throw(_("Row {0}: Expected Value After Useful Life must be less than Gross Purchase Amount")
+ .format(row.idx))
if not self.is_existing_asset:
self.opening_accumulated_depreciation = 0
self.number_of_depreciations_booked = 0
else:
- depreciable_amount = flt(self.gross_purchase_amount) - flt(self.expected_value_after_useful_life)
+ depreciable_amount = flt(self.gross_purchase_amount) - flt(row.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))
@@ -75,95 +172,38 @@
else:
self.number_of_depreciations_booked = 0
- if cint(self.number_of_depreciations_booked) > cint(self.total_number_of_depreciations):
+ if cint(self.number_of_depreciations_booked) > cint(row.total_number_of_depreciations):
frappe.throw(_("Number of Depreciations Booked cannot be greater than Total Number of Depreciations"))
- self.value_after_depreciation = (flt(self.gross_purchase_amount) -
- flt(self.opening_accumulated_depreciation))
+ if row.depreciation_start_date and getdate(row.depreciation_start_date) < getdate(nowdate()):
+ frappe.msgprint(_("Depreciation Row {0}: Depreciation Start Date is entered as past date")
+ .format(row.idx), title=_('Warning'), indicator='red')
- if self.next_depreciation_date and getdate(self.next_depreciation_date) < getdate(nowdate()):
- frappe.msgprint(_("Next Depreciation Date is entered as past date"), title=_('Warning'), indicator='red')
+ if row.depreciation_start_date and getdate(row.depreciation_start_date) < getdate(self.purchase_date):
+ frappe.throw(_("Depreciation Row {0}: Next Depreciation Date cannot be before Purchase Date")
+ .format(row.idx))
- if self.next_depreciation_date and getdate(self.next_depreciation_date) < getdate(self.purchase_date):
- frappe.throw(_("Next Depreciation Date cannot be before Purchase Date"))
-
- if self.next_depreciation_date and getdate(self.next_depreciation_date) < getdate(self.available_for_use_date):
- frappe.throw(_("Next Depreciation Date cannot be before Available-for-use Date"))
-
- def make_depreciation_schedule(self):
-
- if self.depreciation_method != 'Manual':
- self.schedules = []
-
- if not self.get("schedules"):
- total_depreciations = sum([d.total_number_of_depreciations for d in self.get('finance_books')])
-
- for d in self.get('finance_books'):
- d.value_after_depreciation = ((flt(self.gross_purchase_amount * d.total_number_of_depreciations) /
- total_depreciations) - flt(d.opening_accumulated_depreciation))
- value_after_depreciation = flt(d.value_after_depreciation)
-
- number_of_pending_depreciations = cint(d.total_number_of_depreciations) - \
- cint(d.number_of_depreciations_booked)
- if number_of_pending_depreciations:
- next_depr_date = getdate(add_months(self.available_for_use_date,
- number_of_pending_depreciations * 12))
- if (cint(frappe.db.get_value("Asset Settings", None, "schedule_based_on_fiscal_year")) == 1
- and getdate(d.start_date) < next_depr_date):
-
- number_of_pending_depreciations += 1
- for n in range(number_of_pending_depreciations):
- if n == range(number_of_pending_depreciations)[-1]:
- schedule_date = add_months(self.available_for_use_date, n * 12)
- previous_scheduled_date = add_months(d.start_date, (n-1) * 12)
- depreciation_amount = \
- self.get_depreciation_amount_prorata_temporis(value_after_depreciation,
- previous_scheduled_date, schedule_date)
-
- elif n == range(number_of_pending_depreciations)[0]:
- schedule_date = d.start_date
- depreciation_amount = \
- self.get_depreciation_amount_prorata_temporis(value_after_depreciation,
- self.available_for_use_date, schedule_date)
-
- else:
- schedule_date = add_months(d.start_date, n * 12)
- depreciation_amount = \
- self.get_depreciation_amount_prorata_temporis(value_after_depreciation)
-
- if value_after_depreciation != 0:
- value_after_depreciation -= flt(depreciation_amount)
-
- self.append("schedules", {
- "schedule_date": schedule_date,
- "depreciation_amount": depreciation_amount,
- 'finance_book_id': d.name
- })
- else:
- for n in range(number_of_pending_depreciations):
- schedule_date = add_months(d.start_date,
- n * cint(d.frequency_of_depreciation))
-
- depreciation_amount = self.get_depreciation_amount(value_after_depreciation, d)
- if depreciation_amount:
- value_after_depreciation -= flt(depreciation_amount)
-
- self.append("schedules", {
- "schedule_date": schedule_date,
- "depreciation_amount": depreciation_amount,
- 'finance_book_id': d.name
- })
+ if row.depreciation_start_date and getdate(row.depreciation_start_date) < getdate(self.available_for_use_date):
+ frappe.throw(_("Depreciation Row {0}: Next Depreciation Date cannot be before Available-for-use Date")
+ .format(row.idx))
def set_accumulated_depreciation(self):
- accumulated_depreciation = flt(self.opening_accumulated_depreciation)
value_after_depreciation = flt(self.value_after_depreciation)
+ straight_line_idx = [d.idx for d in self.get("schedules") if d.depreciation_method == 'Straight Line']
+ finance_books = []
+
for i, d in enumerate(self.get("schedules")):
+ if d.finance_book_id not in finance_books:
+ accumulated_depreciation = flt(self.opening_accumulated_depreciation)
+ finance_books.append(d.finance_book_id)
+
depreciation_amount = flt(d.depreciation_amount, d.precision("depreciation_amount"))
value_after_depreciation -= flt(depreciation_amount)
- if i==len(self.get("schedules"))-1 and self.depreciation_method == "Straight Line":
+ if straight_line_idx and i == max(straight_line_idx) - 1:
+ book = self.get('finance_books')[d.finance_book_id - 1]
depreciation_amount += flt(value_after_depreciation -
- flt(self.expected_value_after_useful_life), d.precision("depreciation_amount"))
+ flt(book.expected_value_after_useful_life), d.precision("depreciation_amount"))
d.depreciation_amount = depreciation_amount
accumulated_depreciation += d.depreciation_amount
@@ -171,46 +211,44 @@
d.precision("accumulated_depreciation_amount"))
def get_depreciation_amount(self, depreciable_value, row):
- if row.depreciation_method in ("Straight Line", "Manual"):
- depreciation_amount = (flt(row.value_after_depreciation) -
- flt(self.expected_value_after_useful_life)) / (cint(row.total_number_of_depreciations) -
- cint(row.number_of_depreciations_booked))
- else:
- factor = 200.0 / row.total_number_of_depreciations
- depreciation_amount = flt(depreciable_value * factor / 100, 0)
+ percentage_value = 100.0 if row.depreciation_method == 'Written Down Value' else 200.0
- value_after_depreciation = flt(depreciable_value) - depreciation_amount
- if value_after_depreciation < flt(self.expected_value_after_useful_life):
- depreciation_amount = flt(depreciable_value) - flt(self.expected_value_after_useful_life)
+ factor = percentage_value / row.total_number_of_depreciations
+ depreciation_amount = flt(depreciable_value * factor / 100, 0)
+
+ value_after_depreciation = flt(depreciable_value) - depreciation_amount
+ if value_after_depreciation < flt(row.expected_value_after_useful_life):
+ depreciation_amount = flt(depreciable_value) - flt(row.expected_value_after_useful_life)
return depreciation_amount
- def get_depreciation_amount_prorata_temporis(self, depreciable_value, start_date=None, end_date=None):
+ def get_depreciation_amount_prorata_temporis(self, depreciable_value, row, start_date=None, end_date=None):
if start_date and end_date:
prorata_temporis = min(abs(flt(date_diff(str(end_date), str(start_date)))) / flt(frappe.db.get_value("Asset Settings", None, "number_of_days_in_fiscal_year")), 1)
else:
prorata_temporis = 1
- if self.depreciation_method in ("Straight Line", "Manual"):
+ if row.depreciation_method in ("Straight Line", "Manual"):
depreciation_amount = (flt(self.value_after_depreciation) -
- flt(self.expected_value_after_useful_life)) / (cint(self.total_number_of_depreciations) -
+ flt(row.expected_value_after_useful_life)) / (cint(row.total_number_of_depreciations) -
cint(self.number_of_depreciations_booked)) * prorata_temporis
-
- return depreciation_amount
else:
- self.get_depreciation_amount(depreciable_value)
+ depreciation_amount = self.get_depreciation_amount(depreciable_value, row)
+
+ return depreciation_amount
def validate_expected_value_after_useful_life(self):
- accumulated_depreciation_after_full_schedule = \
- max([d.accumulated_depreciation_amount for d in self.get("schedules")])
+ for row in self.get('finance_books'):
+ accumulated_depreciation_after_full_schedule = \
+ max([d.accumulated_depreciation_amount for d in self.get("schedules") if d.finance_book_id == row.idx])
- asset_value_after_full_schedule = flt(flt(self.gross_purchase_amount) -
- flt(accumulated_depreciation_after_full_schedule),
- self.precision('expected_value_after_useful_life'))
+ asset_value_after_full_schedule = flt(flt(self.gross_purchase_amount) -
+ flt(accumulated_depreciation_after_full_schedule),
+ self.precision('gross_purchase_amount'))
- if self.expected_value_after_useful_life < asset_value_after_full_schedule:
- frappe.throw(_("Expected value after useful life must be greater than or equal to {0}")
- .format(asset_value_after_full_schedule))
+ if row.expected_value_after_useful_life < asset_value_after_full_schedule:
+ frappe.throw(_("Depreciation Row {0}: Expected value after useful life must be greater than or equal to {1}")
+ .format(row.idx, asset_value_after_full_schedule))
def validate_cancellation(self):
if self.status not in ("Submitted", "Partially Depreciated", "Fully Depreciated"):
@@ -243,9 +281,15 @@
status = "Draft"
elif self.docstatus == 1:
status = "Submitted"
+ expected_value_after_useful_life = flt(sum([d.expected_value_after_useful_life
+ for d in self.get('finance_books')]))
+
+ value_after_depreciation = flt(sum([d.value_after_depreciation
+ for d in self.get('finance_books')]))
+
if self.journal_entry_for_scrap:
status = "Scrapped"
- elif flt(self.value_after_depreciation) <= flt(self.expected_value_after_useful_life):
+ elif flt(value_after_depreciation) <= expected_value_after_useful_life:
status = "Fully Depreciated"
elif flt(self.value_after_depreciation) < flt(self.gross_purchase_amount):
status = 'Partially Depreciated'
@@ -261,6 +305,37 @@
doc = frappe.get_doc('Asset Movement', asset_movement)
doc.submit()
+ def make_gl_entries(self):
+ if self.purchase_receipt:
+ from erpnext.accounts.general_ledger import make_gl_entries
+
+ gl_entries = []
+
+ cwip_account = get_cwip_account(self.name, self.asset_category, self.company)
+ fixed_aseet_account = get_asset_category_account(self.name, 'fixed_asset_account',
+ asset_category = self.asset_category, company = self.company)
+
+ gl_entries.append(self.get_gl_dict({
+ "account": cwip_account,
+ "against": fixed_aseet_account,
+ "remarks": self.get("remarks") or _("Accounting Entry for Asset"),
+ "posting_date": self.available_for_use_date,
+ "credit": self.gross_purchase_amount,
+ "credit_in_account_currency": self.gross_purchase_amount
+ }))
+
+ gl_entries.append(self.get_gl_dict({
+ "account": fixed_aseet_account,
+ "against": cwip_account,
+ "remarks": self.get("remarks") or _("Accounting Entry for Asset"),
+ "posting_date": self.available_for_use_date,
+ "debit": self.gross_purchase_amount,
+ "debit_in_account_currency": self.gross_purchase_amount
+ }))
+
+ make_gl_entries(gl_entries)
+ self.db_set('booked_fixed_asset', 1)
+
def update_maintenance_status():
assets = frappe.get_all('Asset', filters = {'docstatus': 1, 'maintenance_required': 1})
@@ -271,6 +346,14 @@
if frappe.db.exists('Asset Repair', {'asset_name': asset.name, 'repair_status': 'Pending'}):
asset.set_status('Out of Order')
+def make_post_gl_entry():
+ assets = frappe.db.sql_list(""" select name from `tabAsset`
+ where ifnull(booked_fixed_asset, 0) = 0 and available_for_use_date = %s""", nowdate())
+
+ for asset in assets:
+ doc = frappe.get_doc('Asset', asset)
+ doc.make_gl_entries()
+
def get_asset_naming_series():
meta = frappe.get_meta('Asset')
return meta.get_field("naming_series").options
@@ -295,7 +378,7 @@
return pi
@frappe.whitelist()
-def make_sales_invoice(asset, item_code, company, serial_no):
+def make_sales_invoice(asset, item_code, company, serial_no=None):
si = frappe.new_doc("Sales Invoice")
si.company = company
si.currency = frappe.db.get_value("Company", company, "default_currency")
@@ -338,9 +421,7 @@
frappe.msgprint(_("Asset Movement record {0} created").format("<a href='#Form/Asset Movement/{0}'>{0}</a>".format(movement_entry.name)))
@frappe.whitelist()
-def get_item_details(item_code):
- asset_category = frappe.db.get_value("Item", item_code, "asset_category")
-
+def get_item_details(item_code, asset_category=None):
if not asset_category:
frappe.throw(_("Please enter Asset Category in Item {0}").format(item_code))
@@ -356,3 +437,16 @@
})
return books
+
+def get_cwip_account(asset, asset_category=None, company=None):
+ cwip_account = get_asset_category_account(asset, 'capital_work_in_progress_account',
+ asset_category = asset_category, company = company)
+
+ if not cwip_account:
+ cwip_account = frappe.db.get_value('Company', company, 'capital_work_in_progress_account')
+
+ if not cwip_account:
+ frappe.throw(_("Set Capital Work In Progress Account in asset category {0} or company {1}")
+ .format(asset_category, company))
+
+ return cwip_account
diff --git a/erpnext/assets/doctype/asset_adjustment/__init__.py b/erpnext/assets/doctype/asset_adjustment/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/assets/doctype/asset_adjustment/__init__.py
diff --git a/erpnext/assets/doctype/asset_adjustment/asset_adjustment.js b/erpnext/assets/doctype/asset_adjustment/asset_adjustment.js
new file mode 100644
index 0000000..0535743
--- /dev/null
+++ b/erpnext/assets/doctype/asset_adjustment/asset_adjustment.js
@@ -0,0 +1,8 @@
+// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
+// For license information, please see license.txt
+
+frappe.ui.form.on('Asset Adjustment', {
+ refresh: function(frm) {
+
+ }
+});
diff --git a/erpnext/assets/doctype/asset_adjustment/asset_adjustment.json b/erpnext/assets/doctype/asset_adjustment/asset_adjustment.json
new file mode 100644
index 0000000..8a0e957
--- /dev/null
+++ b/erpnext/assets/doctype/asset_adjustment/asset_adjustment.json
@@ -0,0 +1,438 @@
+{
+ "allow_copy": 0,
+ "allow_guest_to_view": 0,
+ "allow_import": 0,
+ "allow_rename": 0,
+ "beta": 0,
+ "creation": "2018-05-11 00:22:43.695151",
+ "custom": 0,
+ "docstatus": 0,
+ "doctype": "DocType",
+ "document_type": "",
+ "editable_grid": 1,
+ "engine": "InnoDB",
+ "fields": [
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "asset",
+ "fieldtype": "Link",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Asset",
+ "length": 0,
+ "no_copy": 0,
+ "options": "Asset",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "asset_category",
+ "fieldtype": "Read Only",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Asset Category",
+ "length": 0,
+ "no_copy": 0,
+ "options": "asset.asset_category",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "finance_book",
+ "fieldtype": "Link",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 1,
+ "in_standard_filter": 0,
+ "label": "Finance Book",
+ "length": 0,
+ "no_copy": 0,
+ "options": "Finance Book",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "current_asset_value",
+ "fieldtype": "Currency",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 1,
+ "in_standard_filter": 0,
+ "label": "Current Asset Value",
+ "length": 0,
+ "no_copy": 0,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "journal_entry",
+ "fieldtype": "Link",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Journal Entry",
+ "length": 0,
+ "no_copy": 0,
+ "options": "Journal Entry",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 1,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "column_break_4",
+ "fieldtype": "Column Break",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "length": 0,
+ "no_copy": 0,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "date",
+ "fieldtype": "Datetime",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Date",
+ "length": 0,
+ "no_copy": 0,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "company",
+ "fieldtype": "Link",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Company",
+ "length": 0,
+ "no_copy": 0,
+ "options": "Company",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "new_asset_value",
+ "fieldtype": "Currency",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 1,
+ "in_standard_filter": 0,
+ "label": "New Asset Value",
+ "length": 0,
+ "no_copy": 0,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "accumulated_depreciation_account",
+ "fieldtype": "Link",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Accumulated Depreciation Account",
+ "length": 0,
+ "no_copy": 0,
+ "options": "Account",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "amended_from",
+ "fieldtype": "Link",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Amended From",
+ "length": 0,
+ "no_copy": 1,
+ "options": "Asset Adjustment",
+ "permlevel": 0,
+ "print_hide": 1,
+ "print_hide_if_no_value": 0,
+ "read_only": 1,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ }
+ ],
+ "has_web_view": 0,
+ "hide_heading": 0,
+ "hide_toolbar": 0,
+ "idx": 0,
+ "image_view": 0,
+ "in_create": 0,
+ "is_submittable": 1,
+ "issingle": 0,
+ "istable": 0,
+ "max_attachments": 0,
+ "modified": "2018-05-11 00:25:07.222408",
+ "modified_by": "Administrator",
+ "module": "Assets",
+ "name": "Asset Adjustment",
+ "name_case": "",
+ "owner": "Administrator",
+ "permissions": [
+ {
+ "amend": 1,
+ "apply_user_permissions": 0,
+ "cancel": 1,
+ "create": 1,
+ "delete": 1,
+ "email": 1,
+ "export": 1,
+ "if_owner": 0,
+ "import": 0,
+ "permlevel": 0,
+ "print": 1,
+ "read": 1,
+ "report": 1,
+ "role": "System Manager",
+ "set_user_permissions": 0,
+ "share": 1,
+ "submit": 1,
+ "write": 1
+ },
+ {
+ "amend": 1,
+ "apply_user_permissions": 0,
+ "cancel": 1,
+ "create": 1,
+ "delete": 1,
+ "email": 1,
+ "export": 1,
+ "if_owner": 0,
+ "import": 0,
+ "permlevel": 0,
+ "print": 1,
+ "read": 1,
+ "report": 1,
+ "role": "Accounts User",
+ "set_user_permissions": 0,
+ "share": 1,
+ "submit": 1,
+ "write": 1
+ },
+ {
+ "amend": 1,
+ "apply_user_permissions": 0,
+ "cancel": 1,
+ "create": 1,
+ "delete": 1,
+ "email": 1,
+ "export": 1,
+ "if_owner": 0,
+ "import": 0,
+ "permlevel": 0,
+ "print": 1,
+ "read": 1,
+ "report": 1,
+ "role": "Accounts Manager",
+ "set_user_permissions": 0,
+ "share": 1,
+ "submit": 1,
+ "write": 1
+ }
+ ],
+ "quick_entry": 1,
+ "read_only": 0,
+ "read_only_onload": 0,
+ "show_name_in_global_search": 0,
+ "sort_field": "modified",
+ "sort_order": "DESC",
+ "title_field": "asset",
+ "track_changes": 1,
+ "track_seen": 0
+}
\ No newline at end of file
diff --git a/erpnext/assets/doctype/asset_adjustment/asset_adjustment.py b/erpnext/assets/doctype/asset_adjustment/asset_adjustment.py
new file mode 100644
index 0000000..437f9bd
--- /dev/null
+++ b/erpnext/assets/doctype/asset_adjustment/asset_adjustment.py
@@ -0,0 +1,10 @@
+# -*- coding: utf-8 -*-
+# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
+# For license information, please see license.txt
+
+from __future__ import unicode_literals
+import frappe
+from frappe.model.document import Document
+
+class AssetAdjustment(Document):
+ pass
diff --git a/erpnext/assets/doctype/asset_adjustment/test_asset_adjustment.js b/erpnext/assets/doctype/asset_adjustment/test_asset_adjustment.js
new file mode 100644
index 0000000..29d070a
--- /dev/null
+++ b/erpnext/assets/doctype/asset_adjustment/test_asset_adjustment.js
@@ -0,0 +1,23 @@
+/* eslint-disable */
+// rename this file from _test_[name] to test_[name] to activate
+// and remove above this line
+
+QUnit.test("test: Asset Adjustment", function (assert) {
+ let done = assert.async();
+
+ // number of asserts
+ assert.expect(1);
+
+ frappe.run_serially([
+ // insert a new Asset Adjustment
+ () => frappe.tests.make('Asset Adjustment', [
+ // values to be set
+ {key: 'value'}
+ ]),
+ () => {
+ assert.equal(cur_frm.doc.key, 'value');
+ },
+ () => done()
+ ]);
+
+});
diff --git a/erpnext/assets/doctype/asset_adjustment/test_asset_adjustment.py b/erpnext/assets/doctype/asset_adjustment/test_asset_adjustment.py
new file mode 100644
index 0000000..209692e
--- /dev/null
+++ b/erpnext/assets/doctype/asset_adjustment/test_asset_adjustment.py
@@ -0,0 +1,10 @@
+# -*- coding: utf-8 -*-
+# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
+# See license.txt
+from __future__ import unicode_literals
+
+import frappe
+import unittest
+
+class TestAssetAdjustment(unittest.TestCase):
+ pass
diff --git a/erpnext/assets/doctype/asset_category/asset_category.json b/erpnext/assets/doctype/asset_category/asset_category.json
index d9776b8..b655b40 100644
--- a/erpnext/assets/doctype/asset_category/asset_category.json
+++ b/erpnext/assets/doctype/asset_category/asset_category.json
@@ -62,7 +62,7 @@
"label": "Depreciation Method",
"length": 0,
"no_copy": 0,
- "options": "\nStraight Line\nDouble Declining Balance\nManual",
+ "options": "\nStraight Line\nDouble Declining Balance\nWritten Down Value\nManual",
"permlevel": 0,
"precision": "",
"print_hide": 0,
@@ -297,7 +297,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
- "modified": "2018-05-09 11:09:55.806482",
+ "modified": "2018-05-10 15:12:05.954200",
"modified_by": "Administrator",
"module": "Assets",
"name": "Asset Category",
diff --git a/erpnext/assets/doctype/asset_category/asset_category.py b/erpnext/assets/doctype/asset_category/asset_category.py
index d1dd8ed..fa0bd83 100644
--- a/erpnext/assets/doctype/asset_category/asset_category.py
+++ b/erpnext/assets/doctype/asset_category/asset_category.py
@@ -15,15 +15,16 @@
frappe.throw(_("{0} must be greater than 0").format(self.meta.get_label(field)), frappe.MandatoryError)
@frappe.whitelist()
-def get_asset_category_account(asset, fieldname, account=None):
- if account:
- if frappe.db.get_value("Account", account, "account_type") != "Fixed Asset":
- account=None
+def get_asset_category_account(asset, fieldname, account=None, asset_category = None, company = None):
+ if not asset_category and company:
+ if account:
+ if frappe.db.get_value("Account", account, "account_type") != "Fixed Asset":
+ account=None
- if not account:
- asset_category, company = frappe.db.get_value("Asset", asset, ["asset_category", "company"])
+ if not account:
+ asset_category, company = frappe.db.get_value("Asset", asset, ["asset_category", "company"])
- account = frappe.db.get_value("Asset Category Account",
- filters={"parent": asset_category, "company_name": company}, fieldname=fieldname)
+ account = frappe.db.get_value("Asset Category Account",
+ filters={"parent": asset_category, "company_name": company}, fieldname=fieldname)
return account
\ No newline at end of file
diff --git a/erpnext/assets/doctype/asset_category_account/asset_category_account.json b/erpnext/assets/doctype/asset_category_account/asset_category_account.json
index 3cace59..b7df557 100644
--- a/erpnext/assets/doctype/asset_category_account/asset_category_account.json
+++ b/erpnext/assets/doctype/asset_category_account/asset_category_account.json
@@ -17,7 +17,7 @@
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
- "columns": 3,
+ "columns": 2,
"fieldname": "company_name",
"fieldtype": "Link",
"hidden": 0,
@@ -41,7 +41,6 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0
},
{
@@ -49,7 +48,7 @@
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
- "columns": 3,
+ "columns": 2,
"fieldname": "fixed_asset_account",
"fieldtype": "Link",
"hidden": 0,
@@ -73,7 +72,6 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0
},
{
@@ -105,7 +103,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0
},
{
@@ -137,7 +134,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0
},
{
@@ -145,7 +141,7 @@
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
- "columns": 0,
+ "columns": 2,
"fieldname": "capital_work_in_progress_account",
"fieldtype": "Link",
"hidden": 0,
@@ -169,7 +165,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0
}
],
@@ -183,7 +178,7 @@
"issingle": 0,
"istable": 1,
"max_attachments": 0,
- "modified": "2018-05-08 11:41:09.678234",
+ "modified": "2018-05-10 17:06:48.839347",
"modified_by": "Administrator",
"module": "Assets",
"name": "Asset Category Account",
diff --git a/erpnext/assets/doctype/asset_finance_book/asset_finance_book.json b/erpnext/assets/doctype/asset_finance_book/asset_finance_book.json
index 92991e9..351f9d0 100644
--- a/erpnext/assets/doctype/asset_finance_book/asset_finance_book.json
+++ b/erpnext/assets/doctype/asset_finance_book/asset_finance_book.json
@@ -20,7 +20,7 @@
"columns": 0,
"depends_on": "",
"fieldname": "finance_book",
- "fieldtype": "Data",
+ "fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
@@ -31,6 +31,7 @@
"label": "Finance Book",
"length": 0,
"no_copy": 0,
+ "options": "Finance Book",
"permlevel": 0,
"precision": "",
"print_hide": 0,
@@ -61,7 +62,7 @@
"label": "Depreciation Method",
"length": 0,
"no_copy": 0,
- "options": "\nStraight Line\nDouble Declining Balance\nManual",
+ "options": "\nStraight Line\nDouble Declining Balance\nWritten Down Value\nManual",
"permlevel": 0,
"precision": "",
"print_hide": 0,
@@ -110,37 +111,6 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
- "fieldname": "value_after_depreciation",
- "fieldtype": "Currency",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Value After Depreciation",
- "length": 0,
- "no_copy": 0,
- "options": "Company:company:default_currency",
- "permlevel": 0,
- "precision": "",
- "print_hide": 1,
- "print_hide_if_no_value": 0,
- "read_only": 1,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fieldname": "column_break_5",
"fieldtype": "Column Break",
"hidden": 0,
@@ -202,7 +172,7 @@
"collapsible": 0,
"columns": 0,
"depends_on": "eval:parent.doctype == 'Asset'",
- "fieldname": "start_date",
+ "fieldname": "depreciation_start_date",
"fieldtype": "Date",
"hidden": 0,
"ignore_user_permissions": 0,
@@ -211,39 +181,7 @@
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
- "label": "Start Date",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 1,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "default": "0",
- "depends_on": "eval:parent.is_existing_asset",
- "fieldname": "opening_accumulated_depreciation",
- "fieldtype": "Currency",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Opening Accumulated Depreciation",
+ "label": "Depreciation Start Date",
"length": 0,
"no_copy": 0,
"permlevel": 0,
@@ -264,9 +202,9 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
- "depends_on": "eval: (parent.is_existing_asset && doc.opening_accumulated_depreciation)",
- "fieldname": "number_of_depreciations_booked",
- "fieldtype": "Int",
+ "default": "0",
+ "fieldname": "expected_value_after_useful_life",
+ "fieldtype": "Currency",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
@@ -274,9 +212,10 @@
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
- "label": "Number of Depreciations Booked",
+ "label": "Expected Value After Useful Life",
"length": 0,
- "no_copy": 1,
+ "no_copy": 0,
+ "options": "Company:company:default_currency",
"permlevel": 0,
"precision": "",
"print_hide": 0,
@@ -288,6 +227,37 @@
"search_index": 0,
"set_only_once": 0,
"unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "value_after_depreciation",
+ "fieldtype": "Currency",
+ "hidden": 1,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Value After Depreciation",
+ "length": 0,
+ "no_copy": 1,
+ "options": "Company:company:default_currency",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 1,
+ "print_hide_if_no_value": 0,
+ "read_only": 1,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
}
],
"has_web_view": 0,
@@ -300,7 +270,7 @@
"issingle": 0,
"istable": 1,
"max_attachments": 0,
- "modified": "2018-05-09 11:10:00.923786",
+ "modified": "2018-05-10 18:05:58.900298",
"modified_by": "Administrator",
"module": "Assets",
"name": "Asset Finance Book",
diff --git a/erpnext/assets/doctype/asset_movement/asset_movement.json b/erpnext/assets/doctype/asset_movement/asset_movement.json
index 3c3a1dc..8adbf57 100644
--- a/erpnext/assets/doctype/asset_movement/asset_movement.json
+++ b/erpnext/assets/doctype/asset_movement/asset_movement.json
@@ -18,6 +18,37 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
+ "fieldname": "company",
+ "fieldtype": "Link",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 1,
+ "in_standard_filter": 1,
+ "label": "Company",
+ "length": 0,
+ "no_copy": 0,
+ "options": "Company",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 1,
+ "report_hide": 0,
+ "reqd": 1,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
"default": "Transfer",
"fieldname": "purpose",
"fieldtype": "Select",
@@ -31,7 +62,7 @@
"label": "Purpose",
"length": 0,
"no_copy": 0,
- "options": "Receipt\nTransfer",
+ "options": "\nIssue\nReceipt\nTransfer",
"permlevel": 0,
"precision": "",
"print_hide": 0,
@@ -39,10 +70,9 @@
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
- "reqd": 0,
+ "reqd": 1,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0
},
{
@@ -74,7 +104,6 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0
},
{
@@ -105,70 +134,6 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "company",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 1,
- "in_standard_filter": 1,
- "label": "Company",
- "length": 0,
- "no_copy": 0,
- "options": "Company",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 1,
- "report_hide": 0,
- "reqd": 1,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "serial_no",
- "fieldtype": "Small Text",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Serial No",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 1,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
"unique": 0
},
{
@@ -198,7 +163,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0
},
{
@@ -207,51 +171,18 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
- "fieldname": "source_warehouse",
- "fieldtype": "Link",
+ "fieldname": "quantity",
+ "fieldtype": "Float",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
- "in_standard_filter": 1,
- "label": "Source Warehouse",
+ "in_standard_filter": 0,
+ "label": "Quantity",
"length": 0,
"no_copy": 0,
- "options": "Warehouse",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 1,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "target_warehouse",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 1,
- "in_standard_filter": 1,
- "label": "Target Warehouse",
- "length": 0,
- "no_copy": 0,
- "options": "Warehouse",
"permlevel": 0,
"precision": "",
"print_hide": 0,
@@ -259,10 +190,221 @@
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
- "reqd": 1,
+ "reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "serial_no",
+ "fieldtype": "Small Text",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Serial No",
+ "length": 0,
+ "no_copy": 0,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "section_break_7",
+ "fieldtype": "Section Break",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "length": 0,
+ "no_copy": 0,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "source_location",
+ "fieldtype": "Link",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Source Location",
+ "length": 0,
+ "no_copy": 0,
+ "options": "Location",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "target_location",
+ "fieldtype": "Link",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Target Location",
+ "length": 0,
+ "no_copy": 0,
+ "options": "Location",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "column_break_10",
+ "fieldtype": "Column Break",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "length": 0,
+ "no_copy": 0,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "from_employee",
+ "fieldtype": "Link",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "From Employee",
+ "length": 0,
+ "no_copy": 0,
+ "options": "Employee",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "to_employee",
+ "fieldtype": "Link",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "To Employee",
+ "length": 0,
+ "no_copy": 0,
+ "options": "Employee",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
"unique": 0
},
{
@@ -293,7 +435,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0
},
{
@@ -325,7 +466,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0
},
{
@@ -357,7 +497,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0
},
{
@@ -388,7 +527,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0
}
],
@@ -402,7 +540,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
- "modified": "2018-04-20 15:45:54.156501",
+ "modified": "2018-05-10 23:16:20.791672",
"modified_by": "Administrator",
"module": "Assets",
"name": "Asset Movement",
@@ -411,6 +549,7 @@
"permissions": [
{
"amend": 1,
+ "apply_user_permissions": 0,
"cancel": 1,
"create": 1,
"delete": 1,
@@ -430,6 +569,7 @@
},
{
"amend": 1,
+ "apply_user_permissions": 0,
"cancel": 1,
"create": 1,
"delete": 1,
@@ -449,6 +589,7 @@
},
{
"amend": 1,
+ "apply_user_permissions": 0,
"cancel": 1,
"create": 1,
"delete": 1,
diff --git a/erpnext/assets/doctype/asset_movement/asset_movement.py b/erpnext/assets/doctype/asset_movement/asset_movement.py
index 42ed249..32fc663 100644
--- a/erpnext/assets/doctype/asset_movement/asset_movement.py
+++ b/erpnext/assets/doctype/asset_movement/asset_movement.py
@@ -5,6 +5,7 @@
from __future__ import unicode_literals
import frappe
from frappe import _
+from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos
from frappe.model.document import Document
class AssetMovement(Document):
@@ -23,29 +24,41 @@
if serial_no and not self.serial_no:
self.serial_no = serial_no
- def validate_warehouses(self):
- if self.purpose == 'Transfer' and not self.source_warehouse:
- self.source_warehouse = frappe.db.get_value("Asset", self.asset, "warehouse")
+ if self.serial_no and len(get_serial_nos(self.serial_no)) != self.quantity:
+ frappe.throw(_("Number of serial nos and quantity must be the same"))
- if self.source_warehouse == self.target_warehouse:
- frappe.throw(_("Source and Target Warehouse cannot be same"))
+ if not(self.source_location or self.target_location or self.from_employee or self.to_employee):
+ frappe.throw(_("Either location or employee must be required"))
+
+ def validate_warehouses(self):
+ if self.purpose in ['Transfer', 'Issue']:
+ self.source_location = frappe.db.get_value("Asset", self.asset, "location")
+
+ if self.source_location == self.target_location:
+ frappe.throw(_("Source and Target Location cannot be same"))
def on_submit(self):
- self.set_latest_warehouse_in_asset()
+ self.set_latest_location_in_asset()
def on_cancel(self):
- self.set_latest_warehouse_in_asset()
-
- def set_latest_warehouse_in_asset(self):
- latest_movement_entry = frappe.db.sql("""select target_warehouse from `tabAsset Movement`
+ self.set_latest_location_in_asset()
+
+ def set_latest_location_in_asset(self):
+ latest_movement_entry = frappe.db.sql("""select target_location from `tabAsset Movement`
where asset=%s and docstatus=1 and company=%s
order by transaction_date desc limit 1""", (self.asset, self.company))
if latest_movement_entry:
- warehouse = latest_movement_entry[0][0]
+ location = latest_movement_entry[0][0]
else:
- warehouse = frappe.db.sql("""select source_warehouse from `tabAsset Movement`
+ location = frappe.db.sql("""select source_location from `tabAsset Movement`
where asset=%s and docstatus=2 and company=%s
order by transaction_date asc limit 1""", (self.asset, self.company))[0][0]
-
- frappe.db.set_value("Asset", self.asset, "warehouse", warehouse)
\ No newline at end of file
+
+ frappe.db.set_value("Asset", self.asset, "location", location)
+
+ if self.serial_no:
+ serial_nos = get_serial_nos(self.serial_no)
+
+ frappe.db.sql(""" update `tabSerial No` set location = %s where name in (%s)"""
+ %('%s', ','.join(['%s'] * len(serial_nos))), (location, tuple(serial_nos)))
diff --git a/erpnext/assets/doctype/depreciation_schedule/depreciation_schedule.json b/erpnext/assets/doctype/depreciation_schedule/depreciation_schedule.json
index 17b4aec..35a2c9d 100644
--- a/erpnext/assets/doctype/depreciation_schedule/depreciation_schedule.json
+++ b/erpnext/assets/doctype/depreciation_schedule/depreciation_schedule.json
@@ -19,6 +19,37 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
+ "fieldname": "finance_book",
+ "fieldtype": "Link",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 1,
+ "in_standard_filter": 0,
+ "label": "Finance Book",
+ "length": 0,
+ "no_copy": 0,
+ "options": "Finance Book",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 1,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
"fieldname": "schedule_date",
"fieldtype": "Date",
"hidden": 0,
@@ -203,36 +234,6 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
- "fieldname": "finance_book",
- "fieldtype": "Data",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Finance Book",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 1,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fieldname": "finance_book_id",
"fieldtype": "Data",
"hidden": 1,
@@ -256,6 +257,37 @@
"search_index": 0,
"set_only_once": 0,
"unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "depreciation_method",
+ "fieldtype": "Select",
+ "hidden": 1,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Depreciation Method",
+ "length": 0,
+ "no_copy": 1,
+ "options": "\nStraight Line\nDouble Declining Balance\nWritten Down Value\nManual",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 1,
+ "print_hide_if_no_value": 0,
+ "read_only": 1,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
}
],
"has_web_view": 0,
@@ -268,7 +300,7 @@
"issingle": 0,
"istable": 1,
"max_attachments": 0,
- "modified": "2018-05-08 15:24:57.955533",
+ "modified": "2018-05-10 15:12:41.679436",
"modified_by": "Administrator",
"module": "Assets",
"name": "Depreciation Schedule",
diff --git a/erpnext/config/assets.py b/erpnext/config/assets.py
index be52246..99a7a5c 100644
--- a/erpnext/config/assets.py
+++ b/erpnext/config/assets.py
@@ -12,12 +12,11 @@
},
{
"type": "doctype",
- "name": "Asset Category",
+ "name": "Location",
},
{
"type": "doctype",
- "label": _("Asset Location"),
- "name": "Location",
+ "name": "Asset Category",
},
{
"type": "doctype",
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index 40028af..186aad3 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -273,15 +273,16 @@
def get_gl_dict(self, args, account_currency=None):
"""this method populates the common properties of a gl entry record"""
- fiscal_years = get_fiscal_years(self.posting_date, company=self.company)
+ posting_date = args.get('posting_date') or self.get('posting_date')
+ fiscal_years = get_fiscal_years(posting_date, company=self.company)
if len(fiscal_years) > 1:
- frappe.throw(_("Multiple fiscal years exist for the date {0}. Please set company in Fiscal Year").format(formatdate(self.posting_date)))
+ frappe.throw(_("Multiple fiscal years exist for the date {0}. Please set company in Fiscal Year").format(formatdate(posting_date)))
else:
fiscal_year = fiscal_years[0][0]
gl_dict = frappe._dict({
'company': self.company,
- 'posting_date': self.posting_date,
+ 'posting_date': posting_date,
'fiscal_year': fiscal_year,
'voucher_type': self.doctype,
'voucher_no': self.name,
diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py
index d4399ad..f33ed25 100644
--- a/erpnext/controllers/buying_controller.py
+++ b/erpnext/controllers/buying_controller.py
@@ -11,7 +11,7 @@
from erpnext.buying.utils import validate_for_items, update_last_purchase_rate
from erpnext.stock.stock_ledger import get_valuation_rate
from erpnext.stock.doctype.stock_entry.stock_entry import get_used_alternative_items
-from erpnext.stock.doctype.serial_no.serial_no import get_auto_serial_nos, auto_make_serial_nos
+from erpnext.stock.doctype.serial_no.serial_no import get_auto_serial_nos, auto_make_serial_nos, get_serial_nos
from erpnext.controllers.stock_controller import StockController
@@ -505,6 +505,9 @@
self.make_asset_movement(d)
def make_asset(self, row):
+ if not row.asset_location:
+ frappe.throw(_("Row {0}: Enter location for the asset item {1}").format(row.idx, row.item_code))
+
item_data = frappe.db.get_value('Item',
row.item_code, ['asset_naming_series', 'asset_category'], as_dict=1)
@@ -512,18 +515,21 @@
'doctype': 'Asset',
'item_code': row.item_code,
'asset_name': row.item_name,
+ 'status': 'Receipt',
'naming_series': item_data.get('asset_naming_series') or 'AST',
'asset_category': item_data.get('asset_category'),
- 'warehouse': row.warehouse,
+ 'location': row.asset_location,
'company': self.company,
'purchase_date': self.posting_date,
'calculate_depreciation': 1,
+ 'gross_purchase_amount': flt(row.base_net_amount + row.item_tax_amount),
'purchase_receipt': self.name if self.doctype == 'Purchase Receipt' else None,
'purchase_invoice': self.name if self.doctype == 'Purchase Invoice' else None
})
asset.flags.ignore_validate = True
asset.flags.ignore_mandatory = True
+ asset.set_missing_values()
asset.insert()
frappe.msgprint(_("Asset {0} created").format(asset.name))
@@ -533,10 +539,10 @@
asset_movement = frappe.get_doc({
'doctype': 'Asset Movement',
'asset': row.asset,
- 'source_warehouse': '',
- 'target_warehouse': row.warehouse,
+ 'target_location': row.asset_location,
'purpose': 'Receipt',
'serial_no': row.serial_no,
+ 'quantity': len(get_serial_nos(row.serial_no)),
'company': self.company,
'transaction_date': self.posting_date,
'reference_doctype': self.doctype,
@@ -559,7 +565,7 @@
asset.set(field, self.name)
asset.purchase_date = self.posting_date
asset.supplier = self.supplier
- else:
+ elif self.docstatus == 2:
asset.set(field, None)
asset.supplier = None
diff --git a/erpnext/hooks.py b/erpnext/hooks.py
index 57e83e6..627455b 100644
--- a/erpnext/hooks.py
+++ b/erpnext/hooks.py
@@ -234,7 +234,8 @@
"erpnext.buying.doctype.supplier_scorecard.supplier_scorecard.refresh_scorecards",
"erpnext.setup.doctype.company.company.cache_companies_monthly_sales_history",
"erpnext.manufacturing.doctype.bom_update_tool.bom_update_tool.update_latest_price_in_all_boms",
- "erpnext.assets.doctype.asset.asset.update_maintenance_status"
+ "erpnext.assets.doctype.asset.asset.update_maintenance_status",
+ "erpnext.assets.doctype.asset.asset.make_post_gl_entry"
]
}
diff --git a/erpnext/stock/doctype/serial_no/serial_no.json b/erpnext/stock/doctype/serial_no/serial_no.json
index fa4fa69..f84cbef 100644
--- a/erpnext/stock/doctype/serial_no/serial_no.json
+++ b/erpnext/stock/doctype/serial_no/serial_no.json
@@ -41,7 +41,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0
},
{
@@ -70,7 +69,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0
},
{
@@ -102,7 +100,6 @@
"reqd": 1,
"search_index": 1,
"set_only_once": 0,
- "translatable": 0,
"unique": 0
},
{
@@ -135,7 +132,6 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0
},
{
@@ -169,39 +165,6 @@
"reqd": 0,
"search_index": 1,
"set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "asset",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Asset",
- "length": 0,
- "no_copy": 1,
- "options": "Asset",
- "permlevel": 0,
- "precision": "",
- "print_hide": 1,
- "print_hide_if_no_value": 0,
- "read_only": 1,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
"unique": 0
},
{
@@ -230,7 +193,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0
},
{
@@ -260,7 +222,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0
},
{
@@ -292,7 +253,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0,
"width": "300px"
},
@@ -327,7 +287,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0
},
{
@@ -360,7 +319,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0
},
{
@@ -390,7 +348,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0
},
{
@@ -419,7 +376,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0,
"width": "50%"
},
@@ -451,7 +407,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0
},
{
@@ -482,7 +437,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0
},
{
@@ -514,7 +468,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0
},
{
@@ -544,7 +497,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0
},
{
@@ -577,7 +529,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0
},
{
@@ -606,7 +557,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0,
"width": "50%"
},
@@ -638,7 +588,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0
},
{
@@ -668,7 +617,190 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "asset_details",
+ "fieldtype": "Section Break",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Asset Details",
+ "length": 0,
+ "no_copy": 0,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "asset",
+ "fieldtype": "Link",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Asset",
+ "length": 0,
+ "no_copy": 1,
+ "options": "Asset",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 1,
+ "print_hide_if_no_value": 0,
+ "read_only": 1,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "depends_on": "asset",
+ "fieldname": "asset_status",
+ "fieldtype": "Select",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Asset Status",
+ "length": 0,
+ "no_copy": 0,
+ "options": "\nIssue\nReceipt\nTransfer",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 1,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "column_break_24",
+ "fieldtype": "Column Break",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "length": 0,
+ "no_copy": 0,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "location",
+ "fieldtype": "Link",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Location",
+ "length": 0,
+ "no_copy": 0,
+ "options": "Location",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 1,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "employee",
+ "fieldtype": "Link",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Employee",
+ "length": 0,
+ "no_copy": 0,
+ "options": "Employee",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 1,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
"unique": 0
},
{
@@ -699,7 +831,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0
},
{
@@ -730,7 +861,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0
},
{
@@ -761,7 +891,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0
},
{
@@ -793,7 +922,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0
},
{
@@ -823,7 +951,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0
},
{
@@ -856,7 +983,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0
},
{
@@ -885,7 +1011,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0,
"width": "50%"
},
@@ -919,7 +1044,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0
},
{
@@ -951,7 +1075,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0
},
{
@@ -982,7 +1105,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0
},
{
@@ -1014,7 +1136,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0
},
{
@@ -1044,7 +1165,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0
},
{
@@ -1073,7 +1193,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0,
"width": "50%"
},
@@ -1107,7 +1226,6 @@
"reqd": 0,
"search_index": 1,
"set_only_once": 0,
- "translatable": 0,
"unique": 0,
"width": "150px"
},
@@ -1140,7 +1258,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0,
"width": "150px"
},
@@ -1170,7 +1287,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0,
"width": "50%"
},
@@ -1203,7 +1319,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0,
"width": "150px"
},
@@ -1236,7 +1351,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0,
"width": "150px"
},
@@ -1267,7 +1381,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0
},
{
@@ -1297,7 +1410,6 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
- "translatable": 0,
"unique": 0
},
{
@@ -1328,7 +1440,6 @@
"reqd": 1,
"search_index": 1,
"set_only_once": 0,
- "translatable": 0,
"unique": 0
}
],
@@ -1343,7 +1454,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
- "modified": "2018-04-19 20:25:52.066995",
+ "modified": "2018-05-10 23:38:20.646770",
"modified_by": "Administrator",
"module": "Stock",
"name": "Serial No",
@@ -1351,6 +1462,7 @@
"permissions": [
{
"amend": 0,
+ "apply_user_permissions": 0,
"cancel": 0,
"create": 1,
"delete": 1,
@@ -1370,6 +1482,7 @@
},
{
"amend": 0,
+ "apply_user_permissions": 0,
"cancel": 0,
"create": 0,
"delete": 0,
@@ -1389,6 +1502,7 @@
},
{
"amend": 0,
+ "apply_user_permissions": 0,
"cancel": 0,
"create": 0,
"delete": 0,
diff --git a/erpnext/stock/doctype/serial_no/test_serial_no.js b/erpnext/stock/doctype/serial_no/test_serial_no.js
new file mode 100644
index 0000000..bf82932
--- /dev/null
+++ b/erpnext/stock/doctype/serial_no/test_serial_no.js
@@ -0,0 +1,23 @@
+/* eslint-disable */
+// rename this file from _test_[name] to test_[name] to activate
+// and remove above this line
+
+QUnit.test("test: Serial No", function (assert) {
+ let done = assert.async();
+
+ // number of asserts
+ assert.expect(1);
+
+ frappe.run_serially([
+ // insert a new Serial No
+ () => frappe.tests.make('Serial No', [
+ // values to be set
+ {key: 'value'}
+ ]),
+ () => {
+ assert.equal(cur_frm.doc.key, 'value');
+ },
+ () => done()
+ ]);
+
+});