Delete old asset doctypes from Accounts module and minor changes (#11766)
This commit is contained in:
parent
29390d3cb7
commit
2d1cbd0b2e
@ -185,7 +185,39 @@
|
||||
"label": "Asset Owner",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Company\nSupplier\nCustomer",
|
||||
"options": "\nCompany\nSupplier\nCustomer",
|
||||
"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,
|
||||
"depends_on": "eval:doc.asset_owner == \"Company\"",
|
||||
"fieldname": "asset_owner_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": "Asset Owner Company",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Company",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
@ -1189,7 +1221,7 @@
|
||||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2017-11-21 04:45:24.039059",
|
||||
"modified": "2017-11-28 07:10:24.760982",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Assets",
|
||||
"name": "Asset",
|
||||
|
@ -246,6 +246,7 @@ class TestAsset(unittest.TestCase):
|
||||
self.assertEqual(gle, expected_gle)
|
||||
|
||||
si.cancel()
|
||||
frappe.delete_doc("Sales Invoice", si.name)
|
||||
|
||||
self.assertEqual(frappe.db.get_value("Asset", "Macbook Pro 1", "status"), "Partially Depreciated")
|
||||
|
||||
@ -293,7 +294,8 @@ def create_asset():
|
||||
"next_depreciation_date": "2020-12-31",
|
||||
"gross_purchase_amount": 100000,
|
||||
"expected_value_after_useful_life": 10000,
|
||||
"warehouse": "_Test Warehouse - _TC"
|
||||
"warehouse": "_Test Warehouse - _TC",
|
||||
"asset_owner": "Company"
|
||||
})
|
||||
try:
|
||||
asset.save()
|
||||
|
@ -3,13 +3,15 @@
|
||||
|
||||
frappe.ui.form.on('Asset Maintenance', {
|
||||
setup: (frm) => {
|
||||
frm.fields_dict["asset_maintenance_tasks"].grid.get_field("assign_to").get_query = function(){
|
||||
frm.set_query("assign_to", "asset_maintenance_tasks", function(doc) {
|
||||
return {
|
||||
query: "erpnext.assets.doctype.asset_maintenance.asset_maintenance.get_team_members",
|
||||
filters: {
|
||||
parent: frm.doc.maintenance_team
|
||||
maintenance_team: doc.maintenance_team
|
||||
}
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
frm.set_indicator_formatter('maintenance_status',
|
||||
function(doc) {
|
||||
let indicator = 'blue';
|
||||
|
@ -420,7 +420,7 @@
|
||||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2017-11-21 04:42:54.893169",
|
||||
"modified": "2017-11-29 04:42:54.893169",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Assets",
|
||||
"name": "Asset Maintenance",
|
||||
|
@ -16,13 +16,19 @@ class AssetMaintenance(Document):
|
||||
throw(_("Start date should be less than end date for task {0}").format(task.maintenance_task))
|
||||
if getdate(task.next_due_date) < getdate(nowdate()):
|
||||
task.maintenance_status = "Overdue"
|
||||
if not self.get("__islocal"):
|
||||
if not task.assign_to:
|
||||
task.assign_to = self.maintenance_manager
|
||||
if task.assign_to:
|
||||
|
||||
def on_update(self):
|
||||
self.sync_maintenance_tasks()
|
||||
|
||||
def after_insert(self):
|
||||
for task in self.get('asset_maintenance_tasks'):
|
||||
self.assign_tasks(task)
|
||||
|
||||
def assign_tasks(self, task):
|
||||
if not task.assign_to:
|
||||
task.db_set("assign_to", self.maintenance_manager)
|
||||
task.db_set("assign_to_name", self.maintenance_manager_name)
|
||||
if task.assign_to:
|
||||
team_member = frappe.get_doc('User', task.assign_to).email
|
||||
args = {
|
||||
'doctype' : self.doctype,
|
||||
@ -36,6 +42,17 @@ class AssetMaintenance(Document):
|
||||
and owner=%(assign_to)s""", args):
|
||||
assign_to.add(args)
|
||||
|
||||
def sync_maintenance_tasks(self):
|
||||
tasks_names = []
|
||||
for task in self.get('asset_maintenance_tasks'):
|
||||
tasks_names.append(task.name)
|
||||
update_maintenance_log(asset_maintenance = self.name, item_code = self.item_code, item_name = self.item_name, task = task)
|
||||
asset_maintenance_logs = frappe.get_all("Asset Maintenance Log", fields=["name"], filters = {"asset_maintenance": self.name,
|
||||
"task": ("not in", tasks_names)})
|
||||
if asset_maintenance_logs:
|
||||
for asset_maintenance_log in asset_maintenance_logs:
|
||||
maintenance_log = frappe.get_doc('Asset Maintenance Log', asset_maintenance_log.name)
|
||||
maintenance_log.db_set('maintenance_status', 'Cancelled')
|
||||
|
||||
@frappe.whitelist()
|
||||
def calculate_next_due_date(periodicity, start_date = None, end_date = None, last_completion_date = None, next_due_date = None):
|
||||
@ -44,7 +61,6 @@ def calculate_next_due_date(periodicity, start_date = None, end_date = None, las
|
||||
|
||||
if last_completion_date and (last_completion_date > start_date or not start_date):
|
||||
start_date = last_completion_date
|
||||
|
||||
if periodicity == 'Daily':
|
||||
next_due_date = add_days(start_date, 1)
|
||||
if periodicity == 'Weekly':
|
||||
@ -61,6 +77,40 @@ def calculate_next_due_date(periodicity, start_date = None, end_date = None, las
|
||||
next_due_date = ""
|
||||
return next_due_date
|
||||
|
||||
def update_maintenance_log(asset_maintenance, item_code, item_name, task):
|
||||
asset_maintenance_log = frappe.get_value("Asset Maintenance Log", {"asset_maintenance": asset_maintenance,
|
||||
"task": task.maintenance_task, "maintenance_status": ('in',['Planned','Overdue'])})
|
||||
|
||||
if not asset_maintenance_log:
|
||||
asset_maintenance_log = frappe.get_doc({
|
||||
"doctype": "Asset Maintenance Log",
|
||||
"asset_maintenance": asset_maintenance,
|
||||
"asset_name": asset_maintenance,
|
||||
"item_code": item_code,
|
||||
"item_name": item_name,
|
||||
"task": task.maintenance_task,
|
||||
"has_certificate": task.certificate_required,
|
||||
"description": task.description,
|
||||
"assign_to_name": task.assign_to_name,
|
||||
"periodicity": str(task.periodicity),
|
||||
"maintenance_type": task.maintenance_type,
|
||||
"due_date": task.next_due_date
|
||||
})
|
||||
asset_maintenance_log.insert()
|
||||
else:
|
||||
maintenance_log = frappe.get_doc('Asset Maintenance Log', asset_maintenance_log)
|
||||
maintenance_log.assign_to_name = task.assign_to_name
|
||||
maintenance_log.has_certificate = task.certificate_required
|
||||
maintenance_log.description = task.description
|
||||
maintenance_log.periodicity = str(task.periodicity)
|
||||
maintenance_log.maintenance_type = task.maintenance_type
|
||||
maintenance_log.due_date = task.next_due_date
|
||||
maintenance_log.save()
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_team_members(doctype, txt, searchfield, start, page_len, filters):
|
||||
return frappe.db.get_values('Maintenance Team Member', {'parent':filters.get("maintenance_team")})
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_maintenance_log(asset_name):
|
||||
return frappe.db.sql("""
|
||||
@ -68,4 +118,3 @@ def get_maintenance_log(asset_name):
|
||||
from `tabAsset Maintenance Log`
|
||||
where asset_name=%s group by maintenance_status""",
|
||||
(asset_name), as_dict=1)
|
||||
|
@ -67,7 +67,8 @@ def create_asset():
|
||||
"warehouse": "_Test Warehouse - _TC",
|
||||
"company": "_Test Company",
|
||||
"purchase_date": nowdate(),
|
||||
"maintenance_required": 1
|
||||
"maintenance_required": 1,
|
||||
"asset_owner": "Company"
|
||||
}).insert()
|
||||
|
||||
def create_maintenance_team():
|
||||
|
@ -458,7 +458,7 @@
|
||||
"label": "Maintenance Status",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Pending\nCompleted\nCancelled\nOverdue",
|
||||
"options": "Planned\nCompleted\nCancelled\nOverdue",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
@ -723,7 +723,7 @@
|
||||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2017-10-29 08:38:55.707903",
|
||||
"modified": "2017-11-28 13:15:01.689318",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Assets",
|
||||
"name": "Asset Maintenance Log",
|
||||
|
@ -11,14 +11,14 @@ from erpnext.assets.doctype.asset_maintenance.asset_maintenance import calculate
|
||||
|
||||
class AssetMaintenanceLog(Document):
|
||||
def validate(self):
|
||||
# if getdate(self.due_date) > getdate(nowdate()):
|
||||
# self.maintenance_status = "Overdue"
|
||||
if getdate(self.due_date) < getdate(nowdate()):
|
||||
self.maintenance_status = "Overdue"
|
||||
|
||||
if self.maintenance_status == "Completed" and not self.completion_date:
|
||||
frappe.throw(_("Please select Completion Date for Completed Asset Maintenance Log"))
|
||||
|
||||
# if self.maintenance_status != "Completed" and self.completion_date:
|
||||
# frappe.throw(_("Please select Maintenance Status as Completed or remove Completion Date"))
|
||||
if self.maintenance_status != "Completed" and self.completion_date:
|
||||
frappe.throw(_("Please select Maintenance Status as Completed or remove Completion Date"))
|
||||
|
||||
def on_submit(self):
|
||||
if self.maintenance_status not in ['Completed', 'Cancelled']:
|
||||
@ -37,7 +37,8 @@ class AssetMaintenanceLog(Document):
|
||||
if self.maintenance_status == "Cancelled":
|
||||
asset_maintenance_doc.maintenance_status = "Cancelled"
|
||||
asset_maintenance_doc.save()
|
||||
|
||||
asset_maintenance_doc = frappe.get_doc('Asset Maintenance', self.asset_maintenance)
|
||||
asset_maintenance_doc.save()
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_maintenance_tasks(doctype, txt, searchfield, start, page_len, filters):
|
||||
|
@ -363,7 +363,7 @@
|
||||
"label": "Assign To",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Maintenance Team Member",
|
||||
"options": "User",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
@ -625,7 +625,7 @@
|
||||
"issingle": 0,
|
||||
"istable": 1,
|
||||
"max_attachments": 0,
|
||||
"modified": "2017-10-25 21:51:38.931436",
|
||||
"modified": "2017-11-28 12:22:34.151430",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Assets",
|
||||
"name": "Asset Maintenance Task",
|
||||
|
@ -18,7 +18,7 @@
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"columns": 1,
|
||||
"fieldname": "asset_name",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
@ -200,7 +200,7 @@
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"columns": 1,
|
||||
"fieldname": "failure_date",
|
||||
"fieldtype": "Datetime",
|
||||
"hidden": 0,
|
||||
@ -208,7 +208,7 @@
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 1,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Failure Date",
|
||||
"length": 0,
|
||||
@ -361,7 +361,7 @@
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 1,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Repair Status",
|
||||
"length": 0,
|
||||
@ -541,7 +541,7 @@
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Downtime",
|
||||
"length": 0,
|
||||
@ -658,7 +658,7 @@
|
||||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2017-10-24 16:55:03.424503",
|
||||
"modified": "2017-11-29 00:49:11.172141",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Assets",
|
||||
"name": "Asset Repair",
|
||||
|
13
erpnext/assets/doctype/asset_repair/asset_repair_list.js
Normal file
13
erpnext/assets/doctype/asset_repair/asset_repair_list.js
Normal file
@ -0,0 +1,13 @@
|
||||
frappe.listview_settings['Asset Repair'] = {
|
||||
add_fields: ["repair_status"],
|
||||
get_indicator: function(doc) {
|
||||
if(doc.repair_status=="Pending") {
|
||||
return [__("Pending"), "orange"];
|
||||
} else if(doc.repair_status=="Completed") {
|
||||
return [__("Completed"), "green"];
|
||||
} else if(doc.repair_status=="Cancelled") {
|
||||
return [__("Cancelled"), "red"];
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -394,18 +394,6 @@ def get_data():
|
||||
"label": _("Other Reports"),
|
||||
"icon": "fa fa-table",
|
||||
"items": [
|
||||
{
|
||||
"type": "report",
|
||||
"name": "Asset Depreciation Ledger",
|
||||
"doctype": "Asset",
|
||||
"is_query_report": True,
|
||||
},
|
||||
{
|
||||
"type": "report",
|
||||
"name": "Asset Depreciations and Balances",
|
||||
"doctype": "Asset",
|
||||
"is_query_report": True,
|
||||
},
|
||||
{
|
||||
"type": "report",
|
||||
"name": "Trial Balance for Party",
|
||||
|
@ -23,7 +23,7 @@ For each asset create a Asset Maintenance record listing all the associated main
|
||||
<img class="screenshot" alt="Asset" src="/docs/assets/img/asset/asset_maintenance.png">
|
||||
|
||||
### Asset Maintenance Log
|
||||
For each task in Asset Maintenance create a Asset Maintenance Log which will have status, completion date and actions performed. Based on completion date here, next due date is calculated automatically.
|
||||
For each task in Asset Maintenance, Asset Maintenance Log is auto created to keep track of the upcoming Maintenances. It will have status, completion date and actions performed. Based on completion date here, next due date is calculated automatically and new Asset Maintenance Log is created.
|
||||
<img class="screenshot" alt="Asset" src="/docs/assets/img/asset/asset_maintenance_log.png">
|
||||
|
||||
### Asset Repair
|
||||
|
Loading…
x
Reference in New Issue
Block a user