diff --git a/erpnext/assets/report/fixed_asset_register/__init__.py b/erpnext/assets/report/fixed_asset_register/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/erpnext/assets/report/fixed_asset_register/fixed_asset_register.js b/erpnext/assets/report/fixed_asset_register/fixed_asset_register.js new file mode 100644 index 00000000000..5e994b5c9cc --- /dev/null +++ b/erpnext/assets/report/fixed_asset_register/fixed_asset_register.js @@ -0,0 +1,30 @@ +// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt +/* eslint-disable */ + +frappe.query_reports["Fixed Asset Register"] = { + "filters": [ + { + fieldname:"company", + label: __("Company"), + fieldtype: "Link", + options: "Company", + default: frappe.defaults.get_user_default("Company"), + reqd: 1 + }, + { + fieldname:"status", + label: __("Status"), + fieldtype: "Select", + options: "In Store\nDisposed", + default: 'In Store', + reqd: 1 + }, + { + fieldname:"finance_book", + label: __("Finance Book"), + fieldtype: "Link", + options: "Finance Book" + }, + ] +}; diff --git a/erpnext/assets/report/fixed_asset_register/fixed_asset_register.json b/erpnext/assets/report/fixed_asset_register/fixed_asset_register.json new file mode 100644 index 00000000000..ae2aa542f54 --- /dev/null +++ b/erpnext/assets/report/fixed_asset_register/fixed_asset_register.json @@ -0,0 +1,27 @@ +{ + "add_total_row": 0, + "creation": "2019-09-23 16:35:02.836134", + "disable_prepared_report": 0, + "disabled": 0, + "docstatus": 0, + "doctype": "Report", + "idx": 0, + "is_standard": "Yes", + "modified": "2019-09-23 16:35:02.836134", + "modified_by": "Administrator", + "module": "Assets", + "name": "Fixed Asset Register", + "owner": "Administrator", + "prepared_report": 0, + "ref_doctype": "Asset", + "report_name": "Fixed Asset Register", + "report_type": "Script Report", + "roles": [ + { + "role": "Accounts User" + }, + { + "role": "Quality Manager" + } + ] +} \ No newline at end of file diff --git a/erpnext/assets/report/fixed_asset_register/fixed_asset_register.py b/erpnext/assets/report/fixed_asset_register/fixed_asset_register.py new file mode 100644 index 00000000000..eac0e2a0bfe --- /dev/null +++ b/erpnext/assets/report/fixed_asset_register/fixed_asset_register.py @@ -0,0 +1,172 @@ +# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe import _ + +def execute(filters=None): + filters = frappe._dict(filters or {}) + columns = get_columns(filters) + data = get_data(filters) + return columns, data + +def get_columns(filters): + return [ + { + "label": _("Asset Id"), + "fieldtype": "Link", + "fieldname": "asset_id", + "options": "Asset", + "width": 100 + }, + { + "label": _("Asset Name"), + "fieldtype": "Data", + "fieldname": "asset_name", + "width": 140 + }, + { + "label": _("Asset Category"), + "fieldtype": "Link", + "fieldname": "asset_category", + "options": "Asset Category", + "width": 100 + }, + { + "label": _("Status"), + "fieldtype": "Data", + "fieldname": "status", + "width": 90 + }, + { + "label": _("Cost Center"), + "fieldtype": "Link", + "fieldname": "cost_center", + "options": "Cost Center", + "width": 100 + }, + { + "label": _("Department"), + "fieldtype": "Link", + "fieldname": "department", + "options": "Department", + "width": 100 + }, + { + "label": _("Location"), + "fieldtype": "Link", + "fieldname": "location", + "options": "Location", + "width": 100 + }, + { + "label": _("Purchase Date"), + "fieldtype": "Date", + "fieldname": "purchase_date", + "width": 90 + }, + { + "label": _("Gross Purchase Amount"), + "fieldname": "gross_purchase_amount", + "options": "Currency", + "width": 90 + }, + { + "label": _("Vendor Name"), + "fieldtype": "Data", + "fieldname": "vendor_name", + "width": 100 + }, + { + "label": _("Available For Use Date"), + "fieldtype": "Date", + "fieldname": "available_for_use_date", + "width": 90 + }, + { + "label": _("Current Value"), + "fieldname": "current_value", + "options": "Currency", + "width": 90 + }, + ] + +def get_conditions(filters): + conditions = {'docstatus': 1} + status = filters.status + + if filters.company: + conditions["company"] = filters.company + + # In Store assets are those that are not sold or scrapped + operand = 'not in' + if status not in 'In Store': + operand = 'in' + + conditions['status'] = (operand, ['Sold', 'Scrapped']) + + return conditions + +def get_data(filters): + + data = [] + + conditions = get_conditions(filters) + current_value_map = get_finance_book_value_map(filters.finance_book) + pr_supplier_map = get_purchase_receipt_supplier_map() + pi_supplier_map = get_purchase_invoice_supplier_map() + + assets_record = frappe.db.get_all("Asset", + filters=conditions, + fields=["name", "asset_name", "department", "cost_center", "purchase_receipt", + "asset_category", "purchase_date", "gross_purchase_amount", "location", + "available_for_use_date", "status", "purchase_invoice"]) + + for asset in assets_record: + if current_value_map.get(asset.name) is not None: + row = { + "asset_id": asset.name, + "asset_name": asset.asset_name, + "status": asset.status, + "department": asset.department, + "cost_center": asset.cost_center, + "vendor_name": pr_supplier_map.get(asset.purchase_receipt) or pi_supplier_map.get(asset.purchase_invoice), + "gross_purchase_amount": asset.gross_purchase_amount, + "available_for_use_date": asset.available_for_use_date, + "location": asset.location, + "asset_category": asset.asset_category, + "purchase_date": asset.purchase_date, + "current_value": current_value_map.get(asset.name) + } + data.append(row) + + return data + +def get_finance_book_value_map(finance_book=''): + return frappe._dict(frappe.db.sql(''' Select + parent, value_after_depreciation + FROM `tabAsset Finance Book` + WHERE + parentfield='finance_books' + AND finance_book=%s''', (finance_book))) + +def get_purchase_receipt_supplier_map(): + return frappe._dict(frappe.db.sql(''' Select + pr.name, pr.supplier + FROM `tabPurchase Receipt` pr, `tabPurchase Receipt Item` pri + WHERE + pri.parent = pr.name + AND pri.is_fixed_asset=1 + AND pr.docstatus=1 + AND pr.is_return=0''')) + +def get_purchase_invoice_supplier_map(): + return frappe._dict(frappe.db.sql(''' Select + pi.name, pi.supplier + FROM `tabPurchase Invoice` pi, `tabPurchase Invoice Item` pii + WHERE + pii.parent = pi.name + AND pii.is_fixed_asset=1 + AND pi.docstatus=1 + AND pi.is_return=0'''))