From eab723d294b471b220d8bb69024135624eea9653 Mon Sep 17 00:00:00 2001 From: Duradundi Date: Mon, 24 Aug 2026 07:40:02 +0000 Subject: [PATCH] Asset lite updated changes from RC1 --- asset_lite/api/asset_api.py | 53 +- asset_lite/api/asset_maintenance_api.py | 3 + asset_lite/api/custom_api.py | 7 +- asset_lite/api/dashboard_api.py | 361 +- asset_lite/api/dashboard_filters.py | 37 + asset_lite/api/dashboard_report_queries.py | 277 + asset_lite/api/ppm_generator_api.py | 3 + asset_lite/api/userperm_api.py | 44 +- asset_lite/api/wo_feedback_api.py | 142 + asset_lite/api/work_order_api.py | 58 +- .../doctype/work_order/work_order.json | 2 +- .../doctype/work_order/work_order.py | 28 + .../company.json.bak} | 0 .../user_permission.json.bak} | 0 asset_lite/fixtures/custom_docperm.json | 9112 ++++++++++++----- asset_lite/fixtures/custom_field.json | 4052 ++++---- asset_lite/fixtures/dashboard_chart.json | 82 - asset_lite/fixtures/notification.json | 92 +- asset_lite/fixtures/print_format.json | 4 +- asset_lite/fixtures/property_setter.json | 128 +- asset_lite/fixtures/report.json | 605 +- asset_lite/fixtures/role.json | 843 +- asset_lite/fixtures/server_script.json | 2 +- asset_lite/fixtures/workflow.json | 1376 ++- .../fixtures/workflow_action_master.json | 49 +- asset_lite/fixtures/workflow_state.json | 103 +- asset_lite/hooks.py | 47 +- asset_lite/map.py | 1 + asset_lite/notifications/__init__.py | 0 .../notifications/work_order_notifications.py | 119 + asset_lite/patches.txt | 4 +- .../dashboard_report_inline_scripts.py | 303 + asset_lite/patches/sync_dashboard_reports.py | 173 + .../patches/sync_work_order_workflow.py | 90 + asset_lite/public/py/work_order_qr.py | 64 + 35 files changed, 12717 insertions(+), 5547 deletions(-) create mode 100644 asset_lite/api/dashboard_filters.py create mode 100644 asset_lite/api/dashboard_report_queries.py create mode 100644 asset_lite/api/wo_feedback_api.py rename asset_lite/fixtures/{company.json => _disabled/company.json.bak} (100%) rename asset_lite/fixtures/{user_permission.json => _disabled/user_permission.json.bak} (100%) create mode 100644 asset_lite/notifications/__init__.py create mode 100644 asset_lite/notifications/work_order_notifications.py create mode 100644 asset_lite/patches/dashboard_report_inline_scripts.py create mode 100644 asset_lite/patches/sync_dashboard_reports.py create mode 100644 asset_lite/patches/sync_work_order_workflow.py create mode 100644 asset_lite/public/py/work_order_qr.py diff --git a/asset_lite/api/asset_api.py b/asset_lite/api/asset_api.py index 63cc5f9..f650020 100644 --- a/asset_lite/api/asset_api.py +++ b/asset_lite/api/asset_api.py @@ -1,5 +1,51 @@ import frappe from frappe import _ +from datetime import datetime, timedelta + +def _expand_list_filters(filters): + """Expand UI filter keys (creation_from, etc.) into Frappe filter dict.""" + if not filters: + return {} + + expanded = dict(filters) + + creation_from = expanded.pop('creation_from', None) + creation_to = expanded.pop('creation_to', None) + if creation_from and creation_to: + expanded['creation'] = [ + 'between', + [f"{str(creation_from)[:10]} 00:00:00", f"{str(creation_to)[:10]} 23:59:59"], + ] + elif creation_from: + expanded['creation'] = ['>=', f"{str(creation_from)[:10]} 00:00:00"] + elif creation_to: + end = str(creation_to)[:10] + try: + d = datetime.strptime(end, '%Y-%m-%d') + timedelta(days=1) + end_exclusive = d.strftime('%Y-%m-%d') + except Exception: + end_exclusive = end + expanded['creation'] = ['<', f"{end_exclusive} 00:00:00"] + + modified_from = expanded.pop('modified_from', None) + modified_to = expanded.pop('modified_to', None) + if modified_from and modified_to: + expanded['modified'] = [ + 'between', + [f"{str(modified_from)[:10]} 00:00:00", f"{str(modified_to)[:10]} 23:59:59"], + ] + elif modified_from: + expanded['modified'] = ['>=', f"{str(modified_from)[:10]} 00:00:00"] + elif modified_to: + end = str(modified_to)[:10] + try: + d = datetime.strptime(end, '%Y-%m-%d') + timedelta(days=1) + end_exclusive = d.strftime('%Y-%m-%d') + except Exception: + end_exclusive = end + expanded['modified'] = ['<', f"{end_exclusive} 00:00:00"] + + return expanded @frappe.whitelist(allow_guest = True) def get_assets(filters=None, fields=None, limit=20, offset=0, order_by=None, include_finance_books=True): @@ -31,7 +77,12 @@ def get_assets(filters=None, fields=None, limit=20, offset=0, order_by=None, inc # Parse filters if provided if filters and isinstance(filters, str): filters = json.loads(filters) - + + filters = _expand_list_filters(filters or {}) + + from asset_lite.api.userperm_api import apply_permission_filters + filters = apply_permission_filters(filters, "Asset") + # Handle tree-based fields (Department is a nested set/tree structure) if filters.get('department') and isinstance(filters['department'], str): filters['department'] = ['descendants of (inclusive)', filters['department']] diff --git a/asset_lite/api/asset_maintenance_api.py b/asset_lite/api/asset_maintenance_api.py index c7dd5de..145144f 100644 --- a/asset_lite/api/asset_maintenance_api.py +++ b/asset_lite/api/asset_maintenance_api.py @@ -29,6 +29,9 @@ def get_asset_maintenance_logs(filters=None, fields=None, limit=20, offset=0, or # Parse filters if provided if filters and isinstance(filters, str): filters = json.loads(filters) + + from asset_lite.api.dashboard_filters import expand_dashboard_filters + filters = expand_dashboard_filters(filters or {}, "Asset Maintenance Log") # Parse fields if provided if fields and isinstance(fields, str): diff --git a/asset_lite/api/custom_api.py b/asset_lite/api/custom_api.py index ea19a36..360d94f 100644 --- a/asset_lite/api/custom_api.py +++ b/asset_lite/api/custom_api.py @@ -27,7 +27,12 @@ def get_user_details(user_id=None): "last_login": user.last_login, "enabled": user.enabled, "creation": user.creation, - "modified": user.modified + "modified": user.modified, + "custom_site_name": user.get("custom_site_name") or "", + "custom_phcc_site_name": user.get("custom_phcc_site_name") or "", + "role_profile_name": user.get("role_profile_name") or "", + "custom_department": user.get("custom_department") or "", + "csrf_token": frappe.local.session.data.csrf_token or "", } frappe.response.message = response_data diff --git a/asset_lite/api/dashboard_api.py b/asset_lite/api/dashboard_api.py index 5283401..1464a3d 100644 --- a/asset_lite/api/dashboard_api.py +++ b/asset_lite/api/dashboard_api.py @@ -15,31 +15,382 @@ def _err(msg, code=500): @frappe.whitelist(allow_guest = True) -def get_number_cards(): +def get_number_cards(company=None, site_name=None): """ Returns counts for Number Cards: - total_assets - work_orders_open - work_orders_in_progress - work_orders_completed + - work_orders_closed + + Optional filters: company (Hospital), site_name (Mobile Team Site) """ try: - total_assets = frappe.db.count("Asset") - work_orders_open = frappe.db.count("Work Order", {"status": ["in", ["Not Started", "Open", "Pending"]]}) - work_orders_in_progress = frappe.db.count("Work Order", {"status": ["in", ["In Process", "In Progress", "Started"]]}) - work_orders_completed = frappe.db.count("Work Order", {"status": ["in", ["Completed", "Closed", "Finished"]]}) + from asset_lite.api.dashboard_filters import expand_dashboard_filters + + from asset_lite.api.userperm_api import get_permission_filters + + asset_filters = expand_dashboard_filters({"company": company, "site_name": site_name}, "Asset") + wo_base = expand_dashboard_filters({"company": company, "site_name": site_name}, "Work_Order") + + asset_perm = get_permission_filters("Asset").get("filters") or {} + wo_perm = get_permission_filters("Work_Order").get("filters") or {} + + asset_filters = {**asset_perm, **(asset_filters or {})} + wo_base = {**wo_perm, **(wo_base or {})} + + total_assets = frappe.db.count("Asset", asset_filters or {}) + + open_filters = {**wo_base, "repair_status": "Open"} + in_progress_filters = {**wo_base, "repair_status": "Work In Progress"} + completed_filters = {**wo_base, "repair_status": "Completed"} + closed_filters = {**wo_base, "repair_status": "Closed"} + + work_orders_open = frappe.db.count("Work_Order", open_filters) + work_orders_in_progress = frappe.db.count("Work_Order", in_progress_filters) + work_orders_completed = frappe.db.count("Work_Order", completed_filters) + work_orders_closed = frappe.db.count("Work_Order", closed_filters) _ok({ "total_assets": total_assets, "work_orders_open": work_orders_open, "work_orders_in_progress": work_orders_in_progress, "work_orders_completed": work_orders_completed, + "work_orders_closed": work_orders_closed, }) except Exception as e: frappe.log_error(frappe.get_traceback(), "get_number_cards") _err(str(e)) +WO_STATUS_SORT_ORDER = [ + "Open", + "Work In Progress", + "Pending Review", + "Completed", + "Closed", + "Rejected", + "Cancelled", +] + +WO_STATUS_COLORS = { + "Open": "#F59E0B", + "Work In Progress": "#3B82F6", + "Pending Review": "#E11D48", + "Completed": "#10B981", + "Closed": "#A855F7", + "Rejected": "#EF4444", + "Cancelled": "#6B7280", +} + + +def _is_null_or_unknown_label(label): + key = (label or "").strip().lower() + return key in ("", "null", "unknown", "none", "undefined") + + +def _sort_status_labels(labels): + order = {name: idx for idx, name in enumerate(WO_STATUS_SORT_ORDER)} + + def sort_key(label): + if label in order: + return (0, order[label]) + return (1, label) + + return sorted(labels, key=sort_key) + + +@frappe.whitelist(allow_guest=True) +def get_dashboard_work_order_metrics( + company=None, + site_name=None, + work_order_type=None, + from_date=None, + to_date=None, +): + """ + Aggregate Work Orders by repair_status for dashboard pie chart. + Optional filters: company, site_name, work_order_type, from_date, to_date (creation). + """ + try: + from asset_lite.api.dashboard_filters import expand_dashboard_filters + from asset_lite.api.userperm_api import get_permission_filters + + wo_filters = expand_dashboard_filters( + {"company": company, "site_name": site_name}, "Work_Order" + ) + wo_perm = get_permission_filters("Work_Order").get("filters") or {} + wo_filters = {**wo_perm, **(wo_filters or {})} + + if work_order_type: + wo_filters["work_order_type"] = work_order_type + + if from_date and to_date: + wo_filters["creation"] = ["between", [f"{from_date} 00:00:00", f"{to_date} 23:59:59"]] + elif from_date: + wo_filters["creation"] = [">=", f"{from_date} 00:00:00"] + elif to_date: + wo_filters["creation"] = ["<=", f"{to_date} 23:59:59"] + + from asset_lite.api.work_order_api import get_work_order_role_query + + role_filters, or_filters = get_work_order_role_query() + wo_filters.update(role_filters or {}) + + rows = frappe.get_all( + "Work_Order", + filters=wo_filters or None, + or_filters=or_filters, + fields=["repair_status", "work_order_type", "workflow_state"], + limit=0, + ) + + status_counts = {} + type_stats = {} + + for row in rows: + status = (row.get("repair_status") or "Unknown").strip() + status_counts[status] = status_counts.get(status, 0) + 1 + + wo_type = (row.get("work_order_type") or "").strip() or "Unknown" + if _is_null_or_unknown_label(wo_type): + continue + + bucket = type_stats.setdefault( + wo_type, + { + "type": wo_type, + "total": 0, + "open": 0, + "inProgress": 0, + "pendingReview": 0, + "completed": 0, + "closed": 0, + "rejected": 0, + "cancelled": 0, + "wfCompleted": 0, + "wfInProgress": 0, + "wfRejected": 0, + }, + ) + bucket["total"] += 1 + + if status == "Open": + bucket["open"] += 1 + elif status == "Work In Progress": + bucket["inProgress"] += 1 + elif status == "Pending Review": + bucket["pendingReview"] += 1 + elif status == "Completed": + bucket["completed"] += 1 + elif status == "Closed": + bucket["closed"] += 1 + elif status == "Rejected": + bucket["rejected"] += 1 + elif status == "Cancelled": + bucket["cancelled"] += 1 + + wf_state = (row.get("workflow_state") or "").strip() + if wf_state == "Completed": + bucket["wfCompleted"] += 1 + elif wf_state in ("Work In Progress", "In Progress"): + bucket["wfInProgress"] += 1 + elif wf_state == "Rejected": + bucket["wfRejected"] += 1 + + labels = _sort_status_labels(list(status_counts.keys())) + values = [status_counts[label] for label in labels] + colors = [WO_STATUS_COLORS.get(label, "#6366F1") for label in labels] + + completed_raw = status_counts.get("Completed", 0) + closed_raw = status_counts.get("Closed", 0) + completed_combined = completed_raw + closed_raw + + counts = { + "open": status_counts.get("Open", 0), + "inProgress": status_counts.get("Work In Progress", 0), + "completed": completed_raw, + "completedCombined": completed_combined, + "pendingReview": status_counts.get("Pending Review", 0), + "rejected": status_counts.get("Rejected", 0), + "closed": closed_raw, + "cancelled": status_counts.get("Cancelled", 0), + "total": len(rows), + } + + type_rates = [] + for wo_type, bucket in type_stats.items(): + combined = bucket["completed"] + bucket["closed"] + bucket["completedCombined"] = combined + type_rates.append(bucket) + + type_rates.sort(key=lambda item: item.get("total", 0), reverse=True) + + type_status_matrix = {} + for row in rows: + status = (row.get("repair_status") or "Unknown").strip() + wo_type = (row.get("work_order_type") or "").strip() or "Unknown" + if _is_null_or_unknown_label(wo_type): + continue + bucket = type_status_matrix.setdefault(wo_type, {}) + bucket[status] = bucket.get(status, 0) + 1 + + type_status_labels = sorted( + type_status_matrix.keys(), + key=lambda item: sum(type_status_matrix[item].values()), + reverse=True, + ) + matrix_statuses = set() + for status_map in type_status_matrix.values(): + matrix_statuses.update(status_map.keys()) + type_status_columns = _sort_status_labels(list(matrix_statuses)) + type_status_datasets = [ + { + "name": status, + "values": [ + type_status_matrix.get(wo_type, {}).get(status, 0) + for wo_type in type_status_labels + ], + "color": WO_STATUS_COLORS.get(status, "#6366F1"), + } + for status in type_status_columns + ] + + _ok({ + "counts": counts, + "completion_by_type": { + "labels": [item["type"] for item in type_rates], + "rates": type_rates, + }, + "work_order_chart": { + "labels": labels, + "datasets": [{ + "name": "Work Orders", + "values": values, + "colors": colors, + }], + "type": "Pie", + }, + "type_status_chart": { + "labels": type_status_labels, + "datasets": type_status_datasets, + "type": "Bar", + }, + }) + except Exception as e: + frappe.log_error(frappe.get_traceback(), "get_dashboard_work_order_metrics") + _err(str(e)) + + +ASSET_DEVICE_STATUS_COLORS = { + "up": "#10B981", + "down": "#EF4444", + "under maintenance": "#F59E0B", + "decommissioned": "#6B7280", +} + +ASSET_STATUS_FALLBACK_COLORS = [ + "#6366F1", + "#8B5CF6", + "#06B6D4", + "#EC4899", + "#F59E0B", + "#10B981", +] + + +def _asset_device_status_color(label, fallback_index=0): + key = (label or "").strip().lower() + if key in ASSET_DEVICE_STATUS_COLORS: + return ASSET_DEVICE_STATUS_COLORS[key] + if "maintenance" in key: + return ASSET_DEVICE_STATUS_COLORS["under maintenance"] + if "decommission" in key: + return ASSET_DEVICE_STATUS_COLORS["decommissioned"] + return ASSET_STATUS_FALLBACK_COLORS[fallback_index % len(ASSET_STATUS_FALLBACK_COLORS)] + + +@frappe.whitelist(allow_guest=True) +def get_asset_device_status_summary( + company=None, + site_name=None, + from_date=None, + to_date=None, +): + """ + Aggregate Assets by custom_device_status for dashboard pie chart. + Optional filters: company, site_name (custom_site on Asset), from_date, to_date (creation). + """ + try: + from asset_lite.api.dashboard_filters import expand_dashboard_filters + from asset_lite.api.userperm_api import get_permission_filters + + asset_filters = expand_dashboard_filters( + {"company": company, "site_name": site_name}, "Asset" + ) + asset_perm = get_permission_filters("Asset").get("filters") or {} + asset_filters = {**asset_perm, **(asset_filters or {})} + + if frappe.db.has_column("Asset", "custom_delete_status"): + asset_filters["custom_delete_status"] = ["!=", "Deleted"] + + if from_date and to_date: + asset_filters["creation"] = [ + "between", + [f"{from_date} 00:00:00", f"{to_date} 23:59:59"], + ] + elif from_date: + asset_filters["creation"] = [">=", f"{from_date} 00:00:00"] + elif to_date: + asset_filters["creation"] = ["<=", f"{to_date} 23:59:59"] + + rows = frappe.get_all( + "Asset", + filters=asset_filters or None, + fields=["custom_device_status"], + limit=0, + ) + + status_counts = {} + for row in rows: + raw = (row.get("custom_device_status") or "").strip() + label = raw or "Unknown" + status_counts[label] = status_counts.get(label, 0) + 1 + + sorted_items = sorted(status_counts.items(), key=lambda item: item[1], reverse=True) + labels = [label for label, _count in sorted_items] + values = [count for _label, count in sorted_items] + colors = [ + _asset_device_status_color(label, idx) for idx, label in enumerate(labels) + ] + + assets_down = 0 + for label, count in status_counts.items(): + if label.strip().lower() == "down": + assets_down += count + + total_assets = len(rows) + + _ok({ + "total_assets": total_assets, + "assets_down": assets_down, + "chart": { + "labels": labels, + "datasets": [{ + "name": "Assets", + "values": values, + "colors": colors, + }], + "type": "Pie", + "total": total_assets, + }, + }) + except Exception as e: + frappe.log_error(frappe.get_traceback(), "get_asset_device_status_summary") + _err(str(e)) + + @frappe.whitelist(allow_guest = True) def list_dashboard_charts(search=None, public_only=True, limit=50): """ diff --git a/asset_lite/api/dashboard_filters.py b/asset_lite/api/dashboard_filters.py new file mode 100644 index 0000000..af1a31f --- /dev/null +++ b/asset_lite/api/dashboard_filters.py @@ -0,0 +1,37 @@ +import frappe + + +def expand_dashboard_filters(filters=None, doctype=None): + """Normalize dashboard hospital/site filters for list APIs.""" + if not filters: + return {} + + expanded = dict(filters) + company = expanded.pop("company", None) or expanded.pop("hospital", None) + site_name = expanded.pop("site_name", None) + + if doctype == "Asset Maintenance Log": + if company: + expanded["custom_hospital_name"] = company + if site_name: + asset_names = frappe.get_all( + "Asset", + filters={"custom_site": site_name}, + pluck="name", + ) + expanded["asset_name"] = ["in", asset_names or ["__no_match__"]] + elif doctype == "Asset": + if company: + expanded["company"] = company + if site_name: + expanded["custom_site"] = site_name + elif doctype == "Work_Order": + if company: + expanded["company"] = company + if site_name: + expanded["site_name"] = site_name + elif doctype == "PM Schedule Generator": + if company: + expanded["hospital"] = company + + return expanded diff --git a/asset_lite/api/dashboard_report_queries.py b/asset_lite/api/dashboard_report_queries.py new file mode 100644 index 0000000..0f463d9 --- /dev/null +++ b/asset_lite/api/dashboard_report_queries.py @@ -0,0 +1,277 @@ +import frappe +from frappe import _ + + +def _aml_location_conditions(filters, aml_alias="aml", asset_alias="a"): + conditions = ["1=1"] + params = {} + + if filters.get("company"): + conditions.append(f"{aml_alias}.custom_hospital_name = %(company)s") + params["company"] = filters.get("company") + + if filters.get("site_name"): + conditions.append(f"{asset_alias}.custom_site = %(site_name)s") + params["site_name"] = filters.get("site_name") + + return " AND ".join(conditions), params + + +def asset_wise_count_execute(filters=None): + filters = filters or {} + where, params = _aml_location_conditions(filters) + + query = f""" + SELECT + aml.item_name AS item_name, + aml.maintenance_status AS maintenance_status, + SUM(CASE WHEN aml.due_date = aml.completion_date AND aml.maintenance_status = 'Completed' THEN 1 ELSE 0 END) AS completed_on_time, + SUM(CASE WHEN aml.completion_date < aml.due_date AND aml.maintenance_status = 'Completed' THEN 1 ELSE 0 END) AS completed_within_time, + SUM(CASE WHEN aml.completion_date > aml.due_date THEN 1 ELSE 0 END) AS delay_in_completion, + SUM(CASE WHEN aml.maintenance_status = 'Planned' AND aml.completion_date IS NULL AND aml.due_date > CURRENT_DATE() THEN 1 ELSE 0 END) AS pending, + SUM(CASE WHEN aml.maintenance_status = 'Planned' AND aml.completion_date IS NULL AND aml.due_date < CURRENT_DATE() THEN 1 ELSE 0 END) AS overdue, + SUM(CASE WHEN aml.maintenance_status = 'Cancelled' THEN 1 ELSE 0 END) AS cancelled + FROM `tabAsset Maintenance Log` aml + LEFT JOIN `tabAsset` a ON aml.asset_name = a.name + WHERE {where} + GROUP BY aml.item_name + """ + + columns = [ + {"label": _("Item Name"), "fieldname": "item_name", "fieldtype": "Data", "width": 200}, + {"label": _("Maintenance Status"), "fieldname": "maintenance_status", "fieldtype": "Data", "width": 150}, + {"label": _("Completed On Time"), "fieldname": "completed_on_time", "fieldtype": "Int", "width": 150}, + {"label": _("Completed Within Time"), "fieldname": "completed_within_time", "fieldtype": "Int", "width": 170}, + {"label": _("Delay In Completion"), "fieldname": "delay_in_completion", "fieldtype": "Int", "width": 150}, + {"label": _("Pending"), "fieldname": "pending", "fieldtype": "Int", "width": 100}, + {"label": _("Overdue"), "fieldname": "overdue", "fieldtype": "Int", "width": 100}, + {"label": _("Cancelled"), "fieldname": "cancelled", "fieldtype": "Int", "width": 100}, + ] + + data = frappe.db.sql(query, params, as_dict=True) + return columns, data + + +def assignees_status_count_execute(filters=None): + filters = filters or {} + where, params = _aml_location_conditions(filters) + + query = f""" + SELECT + aml.item_name AS item_name, + aml.maintenance_status AS maintenance_status, + aml.assign_to_name AS assigned_to, + SUM(CASE WHEN aml.due_date = aml.completion_date AND aml.maintenance_status = 'Completed' THEN 1 ELSE 0 END) AS completed_on_time, + SUM(CASE WHEN aml.completion_date < aml.due_date AND aml.maintenance_status = 'Completed' THEN 1 ELSE 0 END) AS completed_within_time, + SUM(CASE WHEN aml.completion_date > aml.due_date THEN 1 ELSE 0 END) AS delay_in_completion, + SUM(CASE WHEN aml.maintenance_status = 'Planned' AND aml.completion_date IS NULL AND aml.due_date > CURRENT_DATE() THEN 1 ELSE 0 END) AS pending, + SUM(CASE WHEN aml.maintenance_status = 'Planned' AND aml.completion_date IS NULL AND aml.due_date < CURRENT_DATE() THEN 1 ELSE 0 END) AS overdue, + SUM(CASE WHEN aml.maintenance_status = 'Cancelled' THEN 1 ELSE 0 END) AS cancelled + FROM `tabAsset Maintenance Log` aml + LEFT JOIN `tabAsset` a ON aml.asset_name = a.name + WHERE {where} + GROUP BY aml.assign_to_name + """ + + columns = [ + {"label": _("Item Name"), "fieldname": "item_name", "fieldtype": "Data", "width": 200}, + {"label": _("Maintenance Status"), "fieldname": "maintenance_status", "fieldtype": "Data", "width": 150}, + {"label": _("Assigned To"), "fieldname": "assigned_to", "fieldtype": "Data", "width": 150}, + {"label": _("Completed On Time"), "fieldname": "completed_on_time", "fieldtype": "Int", "width": 150}, + {"label": _("Completed Within Time"), "fieldname": "completed_within_time", "fieldtype": "Int", "width": 170}, + {"label": _("Delay In Completion"), "fieldname": "delay_in_completion", "fieldtype": "Int", "width": 150}, + {"label": _("Pending"), "fieldname": "pending", "fieldtype": "Int", "width": 100}, + {"label": _("Overdue"), "fieldname": "overdue", "fieldtype": "Int", "width": 100}, + {"label": _("Cancelled"), "fieldname": "cancelled", "fieldtype": "Int", "width": 100}, + ] + + data = frappe.db.sql(query, params, as_dict=True) + return columns, data + + +def asset_maintenance_frequency_execute(filters=None): + filters = filters or {} + where, params = _aml_location_conditions(filters) + + query = f""" + SELECT + aml.custom_asset_names AS item, + SUM(CASE WHEN aml.maintenance_status = 'Planned' THEN 1 ELSE 0 END) AS planned, + SUM(CASE WHEN aml.maintenance_status = 'Completed' THEN 1 ELSE 0 END) AS completed, + SUM(CASE WHEN aml.maintenance_status = 'Cancelled' THEN 1 ELSE 0 END) AS cancelled, + SUM(CASE WHEN aml.maintenance_status = 'Overdue' THEN 1 ELSE 0 END) AS overdue, + COUNT(aml.custom_asset_names) AS total_count + FROM `tabAsset Maintenance Log` aml + LEFT JOIN `tabAsset` a ON aml.asset_name = a.name + WHERE {where} + GROUP BY aml.custom_asset_names + """ + + columns = [ + {"label": _("Item"), "fieldname": "item", "fieldtype": "Data", "width": 200}, + {"label": _("Planned"), "fieldname": "planned", "fieldtype": "Int", "width": 100}, + {"label": _("Completed"), "fieldname": "completed", "fieldtype": "Int", "width": 100}, + {"label": _("Cancelled"), "fieldname": "cancelled", "fieldtype": "Int", "width": 100}, + {"label": _("Overdue"), "fieldname": "overdue", "fieldtype": "Int", "width": 100}, + {"label": _("Total Count"), "fieldname": "total_count", "fieldtype": "Int", "width": 100}, + ] + + data = frappe.db.sql(query, params, as_dict=True) + return columns, data + + +def asset_up_and_down_execute(filters=None): + filters = filters or {} + conditions = ["1=1"] + params = {} + + if filters.get("company"): + conditions.append("company = %(company)s") + params["company"] = filters.get("company") + + if filters.get("site_name"): + conditions.append("custom_site = %(site_name)s") + params["site_name"] = filters.get("site_name") + + if filters.get("department"): + conditions.append("department = %(department)s") + params["department"] = filters.get("department") + + if filters.get("custom_class"): + conditions.append("custom_class = %(custom_class)s") + params["custom_class"] = filters.get("custom_class") + + if filters.get("name"): + conditions.append("name = %(name)s") + params["name"] = filters.get("name") + + where = " AND ".join(conditions) + + result = frappe.db.sql( + f""" + SELECT + name AS name, + asset_name, + custom_device_status AS status, + department, + custom_class + FROM `tabAsset` + WHERE {where} + ORDER BY asset_name + """, + params, + as_dict=True, + ) + + status_count = {} + for row in result: + status = row.get("status") + if status: + normalized_status = status.strip().lower() + status_count[normalized_status] = status_count.get(normalized_status, 0) + 1 + + chart_labels = list(status_count.keys()) + chart_values = list(status_count.values()) + + columns = [ + {"fieldname": "name", "label": "Asset ID", "fieldtype": "Link", "options": "Asset", "width": 200}, + {"fieldname": "asset_name", "label": "Asset Name", "fieldtype": "Data", "width": 200}, + {"fieldname": "status", "label": "Status", "fieldtype": "Data", "width": 100}, + {"fieldname": "department", "label": "Department", "fieldtype": "Link", "options": "Department", "width": 150}, + {"fieldname": "custom_class", "label": "Class", "fieldtype": "Data", "width": 200}, + ] + + status_colors = [ + "#2ba63d" if status == "up" else "#FF0000" if status == "down" else "#0000FF" + for status in chart_labels + ] + + chart = { + "data": { + "labels": chart_labels, + "datasets": [{"name": "Number of Assets", "values": chart_values}], + }, + "type": "pie", + "colors": status_colors, + } + + return columns, result, None, chart + + +def work_order_status_execute(filters=None): + filters = filters or {} + conditions = ["repair_status IN ('Open', 'Work In Progress', 'Pending Review', 'Completed', 'Closed', 'Cancelled')"] + params = {} + + filter_fields = ["work_order_type", "repair_status", "asset_type", "company", "site_name"] + for field in filter_fields: + if filters.get(field): + conditions.append(f"{field} = %({field})s") + params[field] = filters.get(field) + + if filters.get("wo_name"): + conditions.append("name = %(wo_name)s") + params["wo_name"] = filters.get("wo_name") + + where = " AND ".join(conditions) + + query = f""" + SELECT + name AS wo_name, + asset_type, + work_order_type, + SUM(CASE WHEN repair_status = 'Open' THEN 1 ELSE 0 END) AS open_count, + SUM(CASE WHEN repair_status = 'Work In Progress' THEN 1 ELSE 0 END) AS work_in_progress_count, + SUM(CASE WHEN repair_status = 'Pending Review' THEN 1 ELSE 0 END) AS pending_review_count, + SUM(CASE WHEN repair_status = 'Completed' THEN 1 ELSE 0 END) AS completed_count, + SUM(CASE WHEN repair_status = 'Closed' THEN 1 ELSE 0 END) AS closed_count + FROM `tabWork_Order` + WHERE {where} + GROUP BY work_order_type + """ + + result = frappe.db.sql(query, params, as_dict=True) + + columns = [ + {"label": _("Work Order Type"), "fieldname": "work_order_type", "fieldtype": "Data", "width": 200}, + {"label": _("Open"), "fieldname": "open_count", "fieldtype": "Int", "width": 200}, + {"label": _("Work In Progress"), "fieldname": "work_in_progress_count", "fieldtype": "Int", "width": 200}, + {"label": _("Pending Review"), "fieldname": "pending_review_count", "fieldtype": "Int", "width": 200}, + {"label": _("Completed"), "fieldname": "completed_count", "fieldtype": "Int", "width": 200}, + {"label": _("Closed"), "fieldname": "closed_count", "fieldtype": "Int", "width": 200}, + ] + + report_summary = [] + for status in ["Open", "Work In Progress", "Pending Review", "Completed", "Closed"]: + status_conditions = list(conditions) + status_conditions.append("repair_status = %(status)s") + status_params = {**params, "status": status} + count = frappe.db.sql( + f"SELECT COUNT(*) FROM `tabWork_Order` WHERE {' AND '.join(status_conditions)}", + status_params, + )[0][0] + report_summary.append({"value": count, "label": status}) + + total = frappe.db.sql( + f"SELECT COUNT(*) FROM `tabWork_Order` WHERE {where}", + params, + )[0][0] + report_summary.append({"value": total, "label": "Total Work Orders"}) + + chart = { + "data": { + "labels": [row["work_order_type"] for row in result], + "datasets": [ + {"name": "Open", "values": [row["open_count"] for row in result]}, + {"name": "Work In Progress", "values": [row["work_in_progress_count"] for row in result]}, + {"name": "Pending Review", "values": [row["pending_review_count"] for row in result]}, + {"name": "Completed", "values": [row["completed_count"] for row in result]}, + {"name": "Closed", "values": [row["closed_count"] for row in result]}, + ], + }, + "type": "bar", + "barOptions": {"stacked": 1, "spaceRatio": 0.6}, + "colors": ["#CCCCB7", "#52B2BF", "#9EC1A4", "#058D7C", "#A3A5CF"], + } + + return columns, result, None, chart, report_summary diff --git a/asset_lite/api/ppm_generator_api.py b/asset_lite/api/ppm_generator_api.py index 3759199..49818d6 100644 --- a/asset_lite/api/ppm_generator_api.py +++ b/asset_lite/api/ppm_generator_api.py @@ -119,6 +119,9 @@ def get_pm_schedules(filters=None, fields=None, limit=20, offset=0, order_by=Non # Parse filters if provided if filters and isinstance(filters, str): filters = json.loads(filters) + + from asset_lite.api.dashboard_filters import expand_dashboard_filters + filters = expand_dashboard_filters(filters or {}, "PM Schedule Generator") # Parse fields if provided if fields and isinstance(fields, str): diff --git a/asset_lite/api/userperm_api.py b/asset_lite/api/userperm_api.py index f0b9194..d7cd5be 100644 --- a/asset_lite/api/userperm_api.py +++ b/asset_lite/api/userperm_api.py @@ -9,6 +9,8 @@ from frappe import _ DOCTYPE_PERMISSION_MAPPINGS = { "Asset": { "Company": "company", + "Hospital": "company", + "Mobile Team Site": "custom_site", "Location": "location", "Department": "department", "Manufacturer": "custom_manufacturer", @@ -20,6 +22,8 @@ DOCTYPE_PERMISSION_MAPPINGS = { }, "Work_Order": { "Company": "company", + "Hospital": "company", + "Mobile Team Site": "site_name", "Location": "location", "Department": "department" }, @@ -29,8 +33,13 @@ DOCTYPE_PERMISSION_MAPPINGS = { "Supplier": "supplier" }, "Asset Maintenance Log": { - "Company": "company", + "Company": "custom_hospital_name", + "Hospital": "custom_hospital_name", "Asset": "asset_name" + }, + "Item": { + "Company": "custom_hospital_name", + "Hospital": "custom_hospital_name", } # Add more doctypes as needed - just add them here! } @@ -49,6 +58,39 @@ def is_system_user(user): return "System Manager" in roles +def merge_query_filters(user_filters=None, permission_filters=None): + """Merge client filters with permission filters (permissions win on conflict).""" + merged = dict(user_filters or {}) + + for field, value in (permission_filters or {}).items(): + if field not in merged or not merged[field]: + merged[field] = value + elif isinstance(value, list) and value and value[0] == "in": + permitted_values = value[1] or [] + user_value = merged[field] + + if isinstance(user_value, str): + if user_value not in permitted_values: + merged[field] = ["in", []] + elif isinstance(user_value, list) and user_value and user_value[0] == "in": + user_values = user_value[1] or [] + intersection = [v for v in user_values if v in permitted_values] + merged[field] = ["in", intersection] + else: + merged[field] = value + + return merged + + +def apply_permission_filters(user_filters, target_doctype, user=None): + """Apply user permission filters to a query filter dict.""" + perm_result = get_permission_filters(target_doctype, user) + if perm_result.get("is_admin"): + return user_filters or {} + + return merge_query_filters(user_filters, perm_result.get("filters")) + + # ============================================================================ # CORE API FUNCTIONS - These 4 functions handle everything # ============================================================================ diff --git a/asset_lite/api/wo_feedback_api.py b/asset_lite/api/wo_feedback_api.py new file mode 100644 index 0000000..b2a04b1 --- /dev/null +++ b/asset_lite/api/wo_feedback_api.py @@ -0,0 +1,142 @@ +import frappe +from frappe import _ + + +RATING_ORDER = [ + "Excellent / ممتاز", + "Good / جيد", + "Average / متوسط", + "Poor / ضعيف", +] + +REPORT_COLUMNS = [ + {"label": _("Work Order"), "fieldname": "work_order", "fieldtype": "Link", "options": "Work_Order", "width": 150}, + {"label": _("Requester Name"), "fieldname": "requester_name", "fieldtype": "Data", "width": 180}, + {"label": _("Rating"), "fieldname": "rating", "fieldtype": "Data", "width": 160}, + {"label": _("Comments"), "fieldname": "comments", "fieldtype": "Small Text", "width": 220}, + {"label": _("Created On"), "fieldname": "creation", "fieldtype": "Datetime", "width": 150}, + {"label": _("Last Modified"), "fieldname": "modified", "fieldtype": "Datetime", "width": 150}, +] + + +def _parse_filters(filters=None): + if isinstance(filters, str): + filters = frappe.parse_json(filters or "{}") + return filters or {} + + +def _build_wo_feedback_conditions(filters): + conditions = ["IFNULL(wf.rating, '') != ''"] + params = {} + + if filters.get("work_order"): + conditions.append("wf.work_order = %(work_order)s") + params["work_order"] = filters.get("work_order") + + if filters.get("requester_name"): + conditions.append("wf.requester_name LIKE %(requester_name)s") + params["requester_name"] = f"%{filters.get('requester_name')}%" + + if filters.get("rating"): + conditions.append("wf.rating = %(rating)s") + params["rating"] = filters.get("rating") + + if filters.get("company"): + conditions.append("wo.company = %(company)s") + params["company"] = filters.get("company") + + if filters.get("site_name"): + conditions.append("wo.site_name = %(site_name)s") + params["site_name"] = filters.get("site_name") + + return conditions, params + + +def _rating_sort_key(rating): + try: + return RATING_ORDER.index(rating) + except ValueError: + return len(RATING_ORDER) + + +@frappe.whitelist(allow_guest=True) +def get_wo_feedback_for_work_order(work_order: str | None = None): + """Guest-safe read for WO Feedback (autoname = work_order field value).""" + if not work_order or not str(work_order).strip(): + frappe.throw(_("Work Order is required")) + + work_order = str(work_order).strip() + + feedback_name = work_order + if not frappe.db.exists("WO Feedback", work_order): + feedback_name = frappe.db.get_value("WO Feedback", {"work_order": work_order}, "name") + if not feedback_name: + return None + + return frappe.db.get_value( + "WO Feedback", + feedback_name, + ["name", "work_order", "requester_name", "rating", "comments"], + as_dict=True, + ) + + +@frappe.whitelist() +def run_wo_feedback_report(filters=None): + """Return WO feedback detail rows for dashboard popup (supports hospital/site filters).""" + filters = _parse_filters(filters) + conditions, params = _build_wo_feedback_conditions(filters) + where = " AND ".join(conditions) + + rows = frappe.db.sql( + f""" + SELECT + wf.work_order, + wf.requester_name, + wf.rating, + wf.comments, + wf.creation, + wf.modified + FROM `tabWO Feedback` wf + INNER JOIN `tabWork_Order` wo ON wo.name = wf.work_order + WHERE {where} + ORDER BY wf.modified DESC + """, + params, + as_dict=True, + ) + + return { + "columns": REPORT_COLUMNS, + "result": rows, + } + + +@frappe.whitelist() +def get_wo_feedback_summary(filters=None): + """Return chart-ready rating counts for dashboard card.""" + filters = _parse_filters(filters) + conditions, params = _build_wo_feedback_conditions(filters) + where = " AND ".join(conditions) + + rows = frappe.db.sql( + f""" + SELECT wf.rating, COUNT(*) AS count + FROM `tabWO Feedback` wf + INNER JOIN `tabWork_Order` wo ON wo.name = wf.work_order + WHERE {where} + GROUP BY wf.rating + """, + params, + as_dict=True, + ) + + count_by_rating = {row.rating: int(row.count or 0) for row in rows if row.rating} + labels = RATING_ORDER[:] + values = [count_by_rating.get(label, 0) for label in labels] + + return { + "labels": labels, + "datasets": [{"name": "Responses", "values": values}], + "type": "Bar", + } diff --git a/asset_lite/api/work_order_api.py b/asset_lite/api/work_order_api.py index eb7f506..044d63a 100644 --- a/asset_lite/api/work_order_api.py +++ b/asset_lite/api/work_order_api.py @@ -17,6 +17,8 @@ WORK_ORDER_FIELDS = [ 'asset_type', 'manufacturer', 'serial_number', + 'custom_local_id', + 'custom_moh_id', 'custom_priority_', 'asset', 'custom_maintenance_manager', @@ -49,6 +51,7 @@ WORK_ORDER_FIELDS = [ 'custom_diffrence', 'feedback_rating', 'first_responded_on', + 'completion_date', 'assigned_manager', 'penalty', 'custom_assigned_supervisor', @@ -149,8 +152,44 @@ def get_child_table_data(parent_name, parentfield, child_doctype, fields=None): return [] +def get_work_order_role_query(user=None): + """Match frontend mergeWorkOrderFilters / buildWorkOrderRoleFilters.""" + user = user or frappe.session.user + if not user or user == "Guest": + return {}, None + + role_profile = frappe.db.get_value("User", user, "role_profile_name") + + if role_profile in ("End User", "PHCC End User"): + return {"owner": user}, None + + if role_profile == "Technician": + return {}, [ + ["owner", "=", user], + ["custom_assign_to_contractor", "=", user], + ["assigned_technician", "=", user], + ] + + return {}, None + + +def _count_work_orders(filters=None, or_filters=None): + """Count work orders, including optional OR filter groups.""" + if or_filters: + return len( + frappe.get_all( + "Work_Order", + filters=filters or {}, + or_filters=or_filters, + pluck="name", + limit_page_length=0, + ) + ) + return frappe.db.count("Work_Order", filters or {}) + + @frappe.whitelist(allow_guest=True) -def get_work_orders(filters=None, fields=None, limit=20, offset=0, order_by=None, include_child_tables=False): +def get_work_orders(filters=None, fields=None, limit=20, offset=0, order_by=None, include_child_tables=False, or_filters=None): """ Get list of work orders with filters and pagination @@ -177,6 +216,20 @@ def get_work_orders(filters=None, fields=None, limit=20, offset=0, order_by=None # Parse filters if provided if filters and isinstance(filters, str): filters = json.loads(filters) + + if or_filters and isinstance(or_filters, str): + or_filters = json.loads(or_filters) + + from asset_lite.api.dashboard_filters import expand_dashboard_filters + if isinstance(filters, dict): + filters = expand_dashboard_filters(filters or {}, "Work_Order") + from asset_lite.api.asset_api import _expand_list_filters + filters = _expand_list_filters(filters or {}) + elif filters is None: + filters = {} + + from asset_lite.api.userperm_api import apply_permission_filters + filters = apply_permission_filters(filters, "Work_Order") # Parse fields if provided if fields and isinstance(fields, str): @@ -189,12 +242,13 @@ def get_work_orders(filters=None, fields=None, limit=20, offset=0, order_by=None include_child_tables = include_child_tables.lower() in ('true', '1', 'yes') # Get total count - total_count = frappe.db.count('Work_Order', filters=filters or {}) + total_count = _count_work_orders(filters or {}, or_filters or None) # Get work orders work_orders = frappe.get_all( 'Work_Order', filters=filters or {}, + or_filters=or_filters or None, fields=fields, limit_page_length=int(limit), limit_start=int(offset), diff --git a/asset_lite/asset_lite/doctype/work_order/work_order.json b/asset_lite/asset_lite/doctype/work_order/work_order.json index fc2ff5a..77b635d 100644 --- a/asset_lite/asset_lite/doctype/work_order/work_order.json +++ b/asset_lite/asset_lite/doctype/work_order/work_order.json @@ -688,7 +688,7 @@ "reqd": 1 }, { - "depends_on": "eval:doc.asset_type == \"Non Biomedical\" || (doc.company && doc.asset_type == \"Biomedical\" && doc.company.startsWith(\"Mobile\"))", + "depends_on": "eval:doc.asset_type == \"Non Biomedical\" || (doc.company && doc.asset_type == \"Biomedical\" && (doc.company.startsWith(\"Mobile\") || doc.company.startsWith(\"Dental\")))", "fetch_from": "asset.custom_site", "fetch_if_empty": 1, "fieldname": "site_name", diff --git a/asset_lite/asset_lite/doctype/work_order/work_order.py b/asset_lite/asset_lite/doctype/work_order/work_order.py index 16b4b86..4aa40a8 100644 --- a/asset_lite/asset_lite/doctype/work_order/work_order.py +++ b/asset_lite/asset_lite/doctype/work_order/work_order.py @@ -3,8 +3,36 @@ import frappe from frappe.model.document import Document +from frappe.utils import get_datetime, now_datetime + class Work_Order(Document): + def validate(self): + self.apply_status_timestamps() + self.calculate_total_hours_spent() + + def apply_status_timestamps(self): + """Auto-set response/completion timestamps when repair status changes.""" + if self.repair_status == "Work In Progress" and not self.first_responded_on: + self.first_responded_on = now_datetime() + + if self.repair_status == "Completed" and not self.completion_date: + self.completion_date = now_datetime() + + def calculate_total_hours_spent(self): + """Total hours = completion_date - first_responded_on.""" + if not self.first_responded_on or not self.completion_date: + return + + start = get_datetime(self.first_responded_on) + end = get_datetime(self.completion_date) + + if not start or not end or end < start: + self.total_hours_spent = 0 + return + + self.total_hours_spent = round((end - start).total_seconds() / 3600, 2) + @frappe.whitelist() def check_site_version(self): # Fetch the site version type from the site configuration diff --git a/asset_lite/fixtures/company.json b/asset_lite/fixtures/_disabled/company.json.bak similarity index 100% rename from asset_lite/fixtures/company.json rename to asset_lite/fixtures/_disabled/company.json.bak diff --git a/asset_lite/fixtures/user_permission.json b/asset_lite/fixtures/_disabled/user_permission.json.bak similarity index 100% rename from asset_lite/fixtures/user_permission.json rename to asset_lite/fixtures/_disabled/user_permission.json.bak diff --git a/asset_lite/fixtures/custom_docperm.json b/asset_lite/fixtures/custom_docperm.json index d686f68..2748f16 100644 --- a/asset_lite/fixtures/custom_docperm.json +++ b/asset_lite/fixtures/custom_docperm.json @@ -23,6 +23,4062 @@ "submit": 0, "write": 0 }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-09-11 14:40:56.798197", + "name": "ada6q8pcuk", + "parent": "Bin", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "PHCC End User", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-09-11 14:40:56.896954", + "name": "5d1370af0s", + "parent": "Bin", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "PHCC Site Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-09-11 14:40:56.926356", + "name": "09lim8h9qs", + "parent": "City", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "PHCC Site Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-09-11 14:40:56.957955", + "name": "c9f8v089jc", + "parent": "City", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "PHCC End User", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-09-11 14:40:56.988690", + "name": "4fq5dbglam", + "parent": "Work_Order", + "permlevel": 2, + "print": 0, + "read": 1, + "report": 0, + "role": "PHCC Site Manager", + "select": 0, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-09-11 14:40:57.015820", + "name": "5g6q2l9b8o", + "parent": "Asset Maintenance", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "PHCC End User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2025-09-11 14:40:57.058943", + "name": "ebem0a3kov", + "parent": "Mobile Team Site", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "PHCC Site Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-09-11 14:40:57.098089", + "name": "2bc0ahce0f", + "parent": "Mobile Team Site", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "PHCC End User", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-09-11 14:40:57.138056", + "name": "913v4poeiu", + "parent": "Work_Order", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "PHCC End User", + "select": 1, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-09-11 14:40:57.175732", + "name": "bro6gf2rus", + "parent": "Feedback", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 0, + "role": "PHCC End User", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-09-11 14:40:57.225834", + "name": "cqm46v2l56", + "parent": "Feedback", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 0, + "role": "PHCC Site Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-09-11 14:40:57.263386", + "name": "19ospiddti", + "parent": "Page", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "PHCC Site Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-09-11 14:40:57.300988", + "name": "69gqivhfjj", + "parent": "Page", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "PHCC End User", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-09-11 14:40:57.337580", + "name": "ftue5utgho", + "parent": "Manufacturer", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "PHCC End User", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-09-11 14:40:57.375473", + "name": "ftljmkl54u", + "parent": "Manufacturer", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "PHCC Site Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-09-11 14:40:57.414057", + "name": "5etdcvkpof", + "parent": "Location", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "PHCC Site Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-09-11 14:40:57.449923", + "name": "3en0okfqq9", + "parent": "Location", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "PHCC End User", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-09-11 14:40:57.487184", + "name": "3eh1q6up20", + "parent": "UOM", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "PHCC End User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-09-11 14:40:57.524533", + "name": "fe8etlh44p", + "parent": "UOM", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "PHCC Site Manager", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-09-11 14:40:57.561549", + "name": "eajrfl668r", + "parent": "Asset Depreciation Schedule", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "PHCC Site Manager", + "select": 1, + "share": 0, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-09-11 14:40:57.600019", + "name": "8a8tuq2k3k", + "parent": "Asset Depreciation Schedule", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "PHCC End User", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-09-11 14:40:57.641955", + "name": "4dic19fada", + "parent": "Issue Priority", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "PHCC Site Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-09-11 14:40:57.674311", + "name": "4de527c9sm", + "parent": "Issue Priority", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "PHCC End User", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-09-11 14:40:57.701037", + "name": "0d9jg0np5n", + "parent": "Issue Type", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "PHCC End User", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-09-11 14:40:57.725633", + "name": "0d5ippeagu", + "parent": "Supplier", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "PHCC End User", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-09-11 14:40:57.749701", + "name": "acsgr8qq8d", + "parent": "Department", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "PHCC End User", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-09-11 14:40:57.774235", + "name": "fck3avrndm", + "parent": "Company", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "PHCC End User", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-09-11 14:40:57.802154", + "name": "bccligogo9", + "parent": "Asset Type", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "PHCC End User", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-09-11 14:40:57.827058", + "name": "dc69l21lm8", + "parent": "Asset Activity", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "PHCC End User", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-09-11 14:40:57.853297", + "name": "9bt4gdplgo", + "parent": "Asset Maintenance Log", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "PHCC End User", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-09-11 14:40:57.878924", + "name": "5bnbgrt91s", + "parent": "Asset Maintenance Team", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "PHCC End User", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-09-11 14:40:57.906288", + "name": "d8qkm359rs", + "parent": "Issue Type", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "PHCC Site Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-09-11 14:40:57.937971", + "name": "88a2793tpb", + "parent": "Supplier", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "PHCC Site Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-09-11 14:40:57.967459", + "name": "181jrebjlr", + "parent": "Asset Type", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "PHCC Site Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-09-11 14:40:57.993555", + "name": "67n7dnbpi5", + "parent": "Department", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "PHCC Site Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-09-11 14:40:58.018834", + "name": "27cko8rtqg", + "parent": "Company", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "PHCC Site Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-09-11 14:40:58.053024", + "name": "36f7htfk2v", + "parent": "Asset Activity", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "PHCC Site Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-09-11 14:40:58.084756", + "name": "26a0g44c2g", + "parent": "Asset Maintenance Log", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "PHCC Site Manager", + "select": 1, + "share": 0, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-09-11 14:40:58.126907", + "name": "b66qaa9um0", + "parent": "Asset Maintenance Team", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "PHCC Site Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-09-11 14:40:58.156978", + "name": "05qe0g5ve2", + "parent": "User Permission", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "PHCC Site Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-09-11 14:40:58.186625", + "name": "a5go2ad8ns", + "parent": "User Permission", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "PHCC End User", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-09-11 14:40:58.216347", + "name": "9e4o389qsk", + "parent": "Asset", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "PHCC End User", + "select": 1, + "share": 0, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-09-11 14:40:58.249072", + "name": "8dn3c0s6qn", + "parent": "Asset", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "PHCC Site Manager", + "select": 1, + "share": 0, + "submit": 1, + "write": 1 + }, + { + "amend": 1, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2025-09-11 14:40:58.278484", + "name": "addhpsos4r", + "parent": "Work_Order", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 0, + "role": "PHCC Site Manager", + "select": 1, + "share": 0, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2025-11-25 16:20:32.086265", + "name": "eotgphvtoo", + "parent": "Modality", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-11-27 11:42:15.258177", + "name": "udbpcb6e02", + "parent": "Page", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-12-09 19:42:34.933961", + "name": "3jptacns9u", + "parent": "PM Schedule Generator", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-12-30 19:50:18.287507", + "name": "df2mhpv1o1", + "parent": "Notification Log", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "System Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-12-30 20:10:59.111907", + "name": "dr6f9kunhi", + "parent": "Notification Log", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-12-30 20:11:11.241229", + "name": "draal2e49e", + "parent": "Notification Log", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance User", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-12-30 20:11:25.495601", + "name": "drepg4q2hq", + "parent": "Notification Log", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "End user", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-12-30 20:11:37.752499", + "name": "drii0p2dts", + "parent": "Notification Log", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-12-30 20:11:54.082106", + "name": "drnmu9n1ne", + "parent": "Notification Log", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Cluster Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-12-30 20:12:12.772962", + "name": "drtgcpo500", + "parent": "Notification Log", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "General", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-12-30 20:12:21.053627", + "name": "ds03jtka5u", + "parent": "Notification Log", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "General Contractor", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-12-30 20:12:31.011563", + "name": "ds375eum9c", + "parent": "Notification Log", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "General WOA", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-12-30 20:12:49.192310", + "name": "ds8tttn9lo", + "parent": "Notification Log", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-12-30 20:12:59.429053", + "name": "dsc3v1781r", + "parent": "Notification Log", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance User", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-12-30 20:14:15.030813", + "name": "dt3mbvdfcq", + "parent": "Notification Log", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "PHCC End User", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-12-30 20:14:23.949034", + "name": "dt6gs6uhc6", + "parent": "Notification Log", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "PHCC Site Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-02 14:00:30.343397", + "name": "m5bvm66l81", + "parent": "Bin", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:11.579071", + "name": "imuj346tfg", + "parent": "Notification Log", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:11.765361", + "name": "imulb2o0fg", + "parent": "PM Schedule Generator", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 0, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2026-01-08 12:30:11.815370", + "name": "imum6a2b7s", + "parent": "Modality", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:11.852873", + "name": "imumjh9tns", + "parent": "Contact", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Site Supervisor", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:11.887818", + "name": "imumaum9nb", + "parent": "Bin", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:11.924982", + "name": "imun1p5i3m", + "parent": "Purchase Order", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:11.963746", + "name": "imuneuca87", + "parent": "Currency", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Site Supervisor", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:12.003492", + "name": "imuos9dhsq", + "parent": "Work_Order", + "permlevel": 2, + "print": 0, + "read": 1, + "report": 0, + "role": "Site Supervisor", + "select": 0, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2026-01-08 12:30:12.046171", + "name": "imuorhlm5j", + "parent": "Stock Entry", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:12.083070", + "name": "imuoi35ihe", + "parent": "Manufacturer", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:12.125876", + "name": "imupcebe8u", + "parent": "Feedback", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:12.167491", + "name": "imup6lfqn8", + "parent": "Asset Depreciation Schedule", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:12.202082", + "name": "imuqf5j0ca", + "parent": "User Permission", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:12.239256", + "name": "imuqvv5ak0", + "parent": "Brand", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:12.277937", + "name": "imuq2mniib", + "parent": "Material Request", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:12.317183", + "name": "imuris9c3m", + "parent": "Communication", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:12.361151", + "name": "imuri7dvdb", + "parent": "Journal Entry", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:12.405073", + "name": "imusqi1uqc", + "parent": "Work Order", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:12.446985", + "name": "imusoveesu", + "parent": "Payment Entry", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 1, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:12.490653", + "name": "imusdbsbhb", + "parent": "Delivery Note", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:12.533942", + "name": "imutflg6tq", + "parent": "Issue", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:12.576984", + "name": "imut5coglm", + "parent": "Site Information", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:12.615616", + "name": "imuu8499k0", + "parent": "Asset Type", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:12.657634", + "name": "imuuujebp1", + "parent": "Warranty", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:12.694525", + "name": "imuu26q4na", + "parent": "PPM", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Site Supervisor", + "select": 1, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:12.742351", + "name": "imuv479e8l", + "parent": "PPM Templates", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 0, + "role": "Site Supervisor", + "select": 1, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:12.785878", + "name": "imuv7qji47", + "parent": "Purchase Request", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Site Supervisor", + "select": 1, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:12.831796", + "name": "imv0cr4v0j", + "parent": "PPM MRI Template", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:12.878285", + "name": "imv0nf439d", + "parent": "PPM MRI Template", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Site Supervisor", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:12.923090", + "name": "imv188e2a6", + "parent": "PPM CT SCAN MACHINE TEMPLATE", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:12.966306", + "name": "imv1q43a92", + "parent": "Issue Priority", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:13.011352", + "name": "imv2nu8uv4", + "parent": "Issue Type", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:13.054189", + "name": "imv2ohve4u", + "parent": "Asset Movement", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:13.088033", + "name": "imv2u9o5g0", + "parent": "Finance Book", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:13.124602", + "name": "imv35o3uh9", + "parent": "Cost Center", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:13.164170", + "name": "imv3suj7is", + "parent": "Employee", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:13.202634", + "name": "imv48933jf", + "parent": "Role", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:13.244318", + "name": "imv4hcivsg", + "parent": "Role", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Site Supervisor", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:13.328489", + "name": "imv5a1qjer", + "parent": "User", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:13.548384", + "name": "imv7fgjaji", + "parent": "Purchase Invoice", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:13.719794", + "name": "imv9meu6cd", + "parent": "Purchase Receipt", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:13.759254", + "name": "imv9jkud85", + "parent": "Tax Category", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:13.796209", + "name": "imv9i1vdnd", + "parent": "Supplier", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:13.833092", + "name": "imva5ts9um", + "parent": "Customer", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:13.866929", + "name": "imva38u4po", + "parent": "Price List", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:13.911854", + "name": "imvbgg34ps", + "parent": "Asset Maintenance Team", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Site Supervisor", + "select": 1, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:13.955943", + "name": "imvb29kka7", + "parent": "Support Plans", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Site Supervisor", + "select": 1, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:13.997062", + "name": "imvb3655fu", + "parent": "Department", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:14.041141", + "name": "imvc1l5qj0", + "parent": "Location", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:14.089734", + "name": "imvcou1rq6", + "parent": "Item Group", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:14.133480", + "name": "imvdepjgca", + "parent": "PPM OF MRI SCAN MACHINE", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Site Supervisor", + "select": 1, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:14.174436", + "name": "imvd15h775", + "parent": "PPM OF FIRE ALARM DEVICES", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Site Supervisor", + "select": 1, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:14.222063", + "name": "imveaimnd9", + "parent": "PPM OF ELECTRICAL PANELS", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Site Supervisor", + "select": 1, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:14.269016", + "name": "imve6jt55m", + "parent": "PPM OF ELECTRICAL FIXTURES INSIDE ROOMS", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Site Supervisor", + "select": 1, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:14.322047", + "name": "imvffp4jla", + "parent": "PPM OF CT SCAN MACHINE", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Site Supervisor", + "select": 1, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:14.366617", + "name": "imvfmncl7b", + "parent": "Company", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:14.409805", + "name": "imvgneka16", + "parent": "Account", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:14.452304", + "name": "imvgflksfn", + "parent": "Asset Maintenance Log", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Site Supervisor", + "select": 1, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:14.489738", + "name": "imvg1imttn", + "parent": "Asset Maintenance", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Site Supervisor", + "select": 1, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:14.532483", + "name": "imvhti8tsn", + "parent": "UOM", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Site Supervisor", + "select": 1, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:14.575892", + "name": "imvh3feu77", + "parent": "Warehouse", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:14.618372", + "name": "imvii7n9rn", + "parent": "Asset Category", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Site Supervisor", + "select": 1, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:14.661051", + "name": "imviijtetn", + "parent": "Asset", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Site Supervisor", + "select": 1, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:14.698657", + "name": "imvi1f22rg", + "parent": "Item", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Site Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-08 12:30:14.738894", + "name": "imvjcag1oh", + "parent": "Work_Order", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Site Supervisor", + "select": 1, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-12 19:01:46.941405", + "name": "3bctspaa7o", + "parent": "Workflow", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-12 19:01:59.511164", + "name": "3bgsb7726s", + "parent": "Workflow", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance User", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-12 19:02:15.761660", + "name": "3blubbjaee", + "parent": "Workflow", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-12 19:02:33.002379", + "name": "3brb3v5ohm", + "parent": "Workflow", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "End user", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-12 19:02:57.863894", + "name": "3c34a72ctn", + "parent": "Workflow", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-27 20:37:42.845687", + "name": "gjrkkro343", + "parent": "User", + "permlevel": 1, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-27 20:38:10.367787", + "name": "gk47bt5k5t", + "parent": "Role Profile", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-29 11:46:05.266871", + "name": "rjrkac79cg", + "parent": "Mobile Team Site", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-11-25 16:20:31.891926", + "name": "eotfd1f08i", + "parent": "Modality", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-12-09 19:40:16.106156", + "name": "3iehf4bggk", + "parent": "PM Schedule Generator", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 1, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-12-30 19:50:18.047353", + "name": "df2km6cegr", + "parent": "Notification Log", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "All", + "select": 1, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2026-01-12 19:01:46.777856", + "name": "3bcrqkvo49", + "parent": "Workflow", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 0, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-27 20:38:10.041568", + "name": "gk46n0ok0g", + "parent": "Role Profile", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-27 20:38:10.349364", + "name": "gk473kg97c", + "parent": "Role Profile", + "permlevel": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-08-13 15:47:05.516173", + "name": "g02fhff37a", + "parent": "Comment", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-08-13 15:47:53.734899", + "name": "g0hhtastp4", + "parent": "Version", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-08-13 15:52:21.604308", + "name": "g358enc9hj", + "parent": "Notification", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-08-13 15:52:48.971000", + "name": "g3dpsdfn22", + "parent": "Email Queue", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-08-17 19:14:45.876454", + "name": "t8oavr0iuv", + "parent": "PM Schedule Generator", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-03-30 17:40:42.968669", + "name": "4ktpvl1rma", + "parent": "Notification Log", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "End user", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-12 17:13:25.699587", + "name": "q594gkpguc", + "parent": "Project Request", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Project Base Role", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-12 17:13:45.015991", + "name": "qbavvevsc7", + "parent": "Year", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Project Base Role", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-12 17:19:15.081499", + "name": "tie1hptgj7", + "parent": "Project", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Project Base Role", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-12 17:20:14.412615", + "name": "u50us2a0jl", + "parent": "Project Request", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Project Manager (Cluster)", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-12 17:20:38.940330", + "name": "ucmgdv6l4d", + "parent": "Project Request", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Project Consultant", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-12 17:20:56.835705", + "name": "ui9ft66jrp", + "parent": "Project Request", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Engg Design Department", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-12 17:21:15.422889", + "name": "uo22ne22h2", + "parent": "Project Request", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "CEO", + "select": 1, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2026-06-12 17:22:15.324646", + "name": "vap23tujd8", + "parent": "Project Request", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Projects Manager", + "select": 1, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-19 12:13:06.214332", + "name": "se631bk032", + "parent": "Site Visit", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Project Base Role", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2026-06-19 12:13:30.864505", + "name": "slta4s9olo", + "parent": "Site Visit", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Contractor", + "select": 1, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2026-06-19 12:14:04.732699", + "name": "t0gks7j32t", + "parent": "Site Visit", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Consultant Office", + "select": 1, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2026-06-19 12:14:51.826300", + "name": "tf6lqh4edd", + "parent": "Site Visit", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Projects Manager", + "select": 1, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-23 16:36:40.043944", + "name": "5s0up4hgo4", + "parent": "Technical Submittal", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Project Base Role", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-23 16:37:01.545628", + "name": "62no5q09tt", + "parent": "Contractor Information", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Project Base Role", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-23 16:37:30.708606", + "name": "6brluqek0i", + "parent": "Contractor Information", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Contractor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-23 16:37:53.861983", + "name": "6j3mllb5ud", + "parent": "Contractor Information", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Consultant Office", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-23 16:38:28.753476", + "name": "6u0rdp0e5e", + "parent": "Contractor Information", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Projects Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2026-06-23 16:39:14.436830", + "name": "7c9a3uv322", + "parent": "Technical Submittal", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Projects Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-23 16:39:42.814927", + "name": "7l408r56jm", + "parent": "Technical Submittal", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Contractor Representative", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-23 16:40:14.473686", + "name": "7v1hn3h51h", + "parent": "Technical Submittal", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Consultant Office", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2026-06-23 16:40:52.994326", + "name": "8b2olkg5iu", + "parent": "Technical Submittal", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Cluster Supervising Engineer", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-23 16:41:16.631330", + "name": "8ifgnkch4c", + "parent": "Technical Submittal", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Network Project Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-23 16:58:22.961783", + "name": "ij57f9nlkh", + "parent": "Technical Submittal", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "MOH", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, { "amend": 0, "cancel": 0, @@ -363,7 +4419,7 @@ "amend": 0, "cancel": 0, "create": 1, - "delete": 1, + "delete": 0, "docstatus": 0, "doctype": "Custom DocPerm", "email": 0, @@ -476,7 +4532,7 @@ "role": "Technician", "select": 1, "share": 0, - "submit": 1, + "submit": 0, "write": 1 }, { @@ -1317,7 +5373,7 @@ "select": 1, "share": 0, "submit": 0, - "write": 0 + "write": 1 }, { "amend": 0, @@ -4970,8 +9026,8 @@ { "amend": 0, "cancel": 0, - "create": 0, - "delete": 0, + "create": 1, + "delete": 1, "docstatus": 0, "doctype": "Custom DocPerm", "email": 0, @@ -4986,10 +9042,10 @@ "read": 1, "report": 0, "role": "Technician", - "select": 0, + "select": 1, "share": 0, "submit": 0, - "write": 0 + "write": 1 }, { "amend": 0, @@ -5466,7 +9522,7 @@ "read": 1, "report": 1, "role": "Maintenance Manager", - "select": 1, + "select": 0, "share": 0, "submit": 0, "write": 0 @@ -12178,14 +16234,14 @@ "export": 1, "if_owner": 0, "import": 0, - "modified": "2025-09-11 14:40:56.798197", - "name": "ada6q8pcuk", - "parent": "Bin", + "modified": "2025-12-16 10:29:59.326655", + "name": "q59kk205rt", + "parent": "Extension Directory", "permlevel": 0, "print": 0, "read": 1, "report": 0, - "role": "PHCC End User", + "role": "End user", "select": 1, "share": 0, "submit": 0, @@ -12202,14 +16258,14 @@ "export": 1, "if_owner": 0, "import": 0, - "modified": "2025-09-11 14:40:56.896954", - "name": "5d1370af0s", - "parent": "Bin", + "modified": "2025-12-16 10:30:31.251307", + "name": "qf8s2tness", + "parent": "Extension Directory", "permlevel": 0, "print": 0, "read": 1, "report": 0, - "role": "PHCC Site Manager", + "role": "Technician", "select": 1, "share": 0, "submit": 0, @@ -12226,91 +16282,19 @@ "export": 1, "if_owner": 0, "import": 0, - "modified": "2025-09-11 14:40:56.926356", - "name": "09lim8h9qs", - "parent": "City", + "modified": "2025-12-16 10:30:41.868761", + "name": "qij8ru3n2p", + "parent": "Extension Directory", "permlevel": 0, "print": 0, "read": 1, "report": 0, - "role": "PHCC Site Manager", + "role": "Maintenance Manager", "select": 1, "share": 0, "submit": 0, "write": 1 }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-09-11 14:40:56.957955", - "name": "c9f8v089jc", - "parent": "City", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "PHCC End User", - "select": 1, - "share": 0, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-09-11 14:40:56.988690", - "name": "4fq5dbglam", - "parent": "Work_Order", - "permlevel": 2, - "print": 0, - "read": 1, - "report": 0, - "role": "PHCC Site Manager", - "select": 0, - "share": 0, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-09-11 14:40:57.015820", - "name": "5g6q2l9b8o", - "parent": "Asset Maintenance", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "PHCC End User", - "select": 0, - "share": 0, - "submit": 0, - "write": 0 - }, { "amend": 0, "cancel": 0, @@ -12321,44 +16305,20 @@ "email": 0, "export": 1, "if_owner": 0, - "import": 1, - "modified": "2025-09-11 14:40:57.058943", - "name": "ebem0a3kov", - "parent": "Mobile Team Site", + "import": 0, + "modified": "2025-12-16 10:30:55.389622", + "name": "qmq0ccqmc4", + "parent": "Extension Directory", "permlevel": 0, "print": 0, "read": 1, "report": 0, - "role": "PHCC Site Manager", + "role": "Work Control", "select": 1, "share": 0, "submit": 0, "write": 1 }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-09-11 14:40:57.098089", - "name": "2bc0ahce0f", - "parent": "Mobile Team Site", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "PHCC End User", - "select": 1, - "share": 0, - "submit": 0, - "write": 0 - }, { "amend": 0, "cancel": 0, @@ -12370,14 +16330,62 @@ "export": 1, "if_owner": 0, "import": 0, - "modified": "2025-09-11 14:40:57.138056", - "name": "913v4poeiu", - "parent": "Work_Order", + "modified": "2025-12-16 10:31:05.807264", + "name": "qq3rfnmudc", + "parent": "Extension Directory", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Contractor Engineer", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-12-16 10:31:14.325070", + "name": "qso4agd1m7", + "parent": "Extension Directory", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Contractor Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-12 13:03:44.887084", + "name": "hg8bi4ctqq", + "parent": "Inspection", "permlevel": 0, "print": 1, "read": 1, "report": 1, - "role": "PHCC End User", + "role": "Contractor Supervisor", "select": 1, "share": 1, "submit": 1, @@ -12386,7 +16394,7 @@ { "amend": 0, "cancel": 0, - "create": 1, + "create": 0, "delete": 0, "docstatus": 0, "doctype": "Custom DocPerm", @@ -12394,38 +16402,14 @@ "export": 1, "if_owner": 0, "import": 0, - "modified": "2025-09-11 14:40:57.175732", - "name": "bro6gf2rus", - "parent": "Feedback", + "modified": "2026-01-12 13:04:37.131763", + "name": "i0jkvk87nm", + "parent": "Inspection", "permlevel": 0, - "print": 1, + "print": 0, "read": 1, "report": 0, - "role": "PHCC End User", - "select": 1, - "share": 0, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-09-11 14:40:57.225834", - "name": "cqm46v2l56", - "parent": "Feedback", - "permlevel": 0, - "print": 1, - "read": 1, - "report": 0, - "role": "PHCC Site Manager", + "role": "End user", "select": 1, "share": 0, "submit": 0, @@ -12442,230 +16426,14 @@ "export": 1, "if_owner": 0, "import": 0, - "modified": "2025-09-11 14:40:57.263386", - "name": "19ospiddti", - "parent": "Page", + "modified": "2026-01-12 13:05:36.830086", + "name": "ij95fu5j7p", + "parent": "Inspection", "permlevel": 0, "print": 0, "read": 1, "report": 0, - "role": "PHCC Site Manager", - "select": 1, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-09-11 14:40:57.300988", - "name": "69gqivhfjj", - "parent": "Page", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "PHCC End User", - "select": 1, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-09-11 14:40:57.337580", - "name": "ftue5utgho", - "parent": "Manufacturer", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "PHCC End User", - "select": 1, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-09-11 14:40:57.375473", - "name": "ftljmkl54u", - "parent": "Manufacturer", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "PHCC Site Manager", - "select": 1, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-09-11 14:40:57.414057", - "name": "5etdcvkpof", - "parent": "Location", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "PHCC Site Manager", - "select": 1, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-09-11 14:40:57.449923", - "name": "3en0okfqq9", - "parent": "Location", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "PHCC End User", - "select": 1, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-09-11 14:40:57.487184", - "name": "3eh1q6up20", - "parent": "UOM", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "PHCC End User", - "select": 0, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-09-11 14:40:57.524533", - "name": "fe8etlh44p", - "parent": "UOM", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "PHCC Site Manager", - "select": 0, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-09-11 14:40:57.561549", - "name": "eajrfl668r", - "parent": "Asset Depreciation Schedule", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "PHCC Site Manager", - "select": 1, - "share": 0, - "submit": 1, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-09-11 14:40:57.600019", - "name": "8a8tuq2k3k", - "parent": "Asset Depreciation Schedule", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "PHCC End User", + "role": "Work Control", "select": 1, "share": 0, "submit": 0, @@ -12682,230 +16450,14 @@ "export": 1, "if_owner": 0, "import": 0, - "modified": "2025-09-11 14:40:57.641955", - "name": "4dic19fada", - "parent": "Issue Priority", + "modified": "2026-01-12 13:13:54.659694", + "name": "neqch08ndl", + "parent": "Inspection", "permlevel": 0, "print": 0, "read": 1, "report": 0, - "role": "PHCC Site Manager", - "select": 1, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-09-11 14:40:57.674311", - "name": "4de527c9sm", - "parent": "Issue Priority", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "PHCC End User", - "select": 1, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-09-11 14:40:57.701037", - "name": "0d9jg0np5n", - "parent": "Issue Type", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "PHCC End User", - "select": 1, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-09-11 14:40:57.725633", - "name": "0d5ippeagu", - "parent": "Supplier", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "PHCC End User", - "select": 1, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-09-11 14:40:57.749701", - "name": "acsgr8qq8d", - "parent": "Department", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "PHCC End User", - "select": 1, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-09-11 14:40:57.774235", - "name": "fck3avrndm", - "parent": "Company", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "PHCC End User", - "select": 1, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-09-11 14:40:57.802154", - "name": "bccligogo9", - "parent": "Asset Type", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "PHCC End User", - "select": 1, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-09-11 14:40:57.827058", - "name": "dc69l21lm8", - "parent": "Asset Activity", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "PHCC End User", - "select": 1, - "share": 0, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-09-11 14:40:57.853297", - "name": "9bt4gdplgo", - "parent": "Asset Maintenance Log", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "PHCC End User", - "select": 1, - "share": 0, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-09-11 14:40:57.878924", - "name": "5bnbgrt91s", - "parent": "Asset Maintenance Team", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "PHCC End User", + "role": "Technician", "select": 1, "share": 0, "submit": 0, @@ -12922,14 +16474,14 @@ "export": 1, "if_owner": 0, "import": 0, - "modified": "2025-09-11 14:40:57.906288", - "name": "d8qkm359rs", - "parent": "Issue Type", + "modified": "2026-01-12 13:15:26.362319", + "name": "obf50h7m5k", + "parent": "Technical Department", "permlevel": 0, "print": 0, "read": 1, "report": 0, - "role": "PHCC Site Manager", + "role": "Work Control", "select": 1, "share": 0, "submit": 0, @@ -12946,441 +16498,9 @@ "export": 1, "if_owner": 0, "import": 0, - "modified": "2025-09-11 14:40:57.937971", - "name": "88a2793tpb", - "parent": "Supplier", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "PHCC Site Manager", - "select": 1, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-09-11 14:40:57.967459", - "name": "181jrebjlr", - "parent": "Asset Type", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "PHCC Site Manager", - "select": 1, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-09-11 14:40:57.993555", - "name": "67n7dnbpi5", - "parent": "Department", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "PHCC Site Manager", - "select": 1, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-09-11 14:40:58.018834", - "name": "27cko8rtqg", - "parent": "Company", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "PHCC Site Manager", - "select": 1, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-09-11 14:40:58.053024", - "name": "36f7htfk2v", - "parent": "Asset Activity", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "PHCC Site Manager", - "select": 1, - "share": 0, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-09-11 14:40:58.084756", - "name": "26a0g44c2g", - "parent": "Asset Maintenance Log", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "PHCC Site Manager", - "select": 1, - "share": 0, - "submit": 1, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-09-11 14:40:58.126907", - "name": "b66qaa9um0", - "parent": "Asset Maintenance Team", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "PHCC Site Manager", - "select": 1, - "share": 0, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-09-11 14:40:58.156978", - "name": "05qe0g5ve2", - "parent": "User Permission", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "PHCC Site Manager", - "select": 1, - "share": 0, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-09-11 14:40:58.186625", - "name": "a5go2ad8ns", - "parent": "User Permission", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "PHCC End User", - "select": 1, - "share": 0, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-09-11 14:40:58.216347", - "name": "9e4o389qsk", - "parent": "Asset", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "PHCC End User", - "select": 1, - "share": 0, - "submit": 1, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-09-11 14:40:58.249072", - "name": "8dn3c0s6qn", - "parent": "Asset", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "PHCC Site Manager", - "select": 1, - "share": 0, - "submit": 1, - "write": 1 - }, - { - "amend": 1, - "cancel": 0, - "create": 1, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 1, - "export": 1, - "if_owner": 0, - "import": 1, - "modified": "2025-09-11 14:40:58.278484", - "name": "addhpsos4r", - "parent": "Work_Order", - "permlevel": 0, - "print": 1, - "read": 1, - "report": 0, - "role": "PHCC Site Manager", - "select": 1, - "share": 0, - "submit": 1, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 1, - "modified": "2025-11-25 16:20:32.086265", - "name": "eotgphvtoo", - "parent": "Modality", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 1, - "role": "Maintenance Manager", - "select": 1, - "share": 0, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-11-27 11:42:15.258177", - "name": "udbpcb6e02", - "parent": "Page", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 1, - "role": "System Manager", - "select": 1, - "share": 0, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "cancel": 1, - "create": 1, - "delete": 1, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-12-09 19:42:34.933961", - "name": "3jptacns9u", - "parent": "PM Schedule Generator", - "permlevel": 0, - "print": 1, - "read": 1, - "report": 0, - "role": "Maintenance Manager", - "select": 1, - "share": 0, - "submit": 1, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-12-30 19:50:18.287507", - "name": "df2mhpv1o1", - "parent": "Notification Log", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "System Manager", - "select": 1, - "share": 0, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-12-30 20:10:59.111907", - "name": "dr6f9kunhi", - "parent": "Notification Log", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Maintenance Manager", - "select": 1, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-12-30 20:11:11.241229", - "name": "draal2e49e", - "parent": "Notification Log", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Maintenance User", - "select": 1, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-12-30 20:11:25.495601", - "name": "drepg4q2hq", - "parent": "Notification Log", + "modified": "2026-01-12 13:15:41.278122", + "name": "og535jj3n4", + "parent": "Technical Department", "permlevel": 0, "print": 0, "read": 1, @@ -13391,6 +16511,30 @@ "submit": 0, "write": 0 }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-12 13:16:00.964768", + "name": "omalmvkjnr", + "parent": "Technical Department", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Contractor Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, { "amend": 0, "cancel": 0, @@ -13402,9 +16546,9 @@ "export": 1, "if_owner": 0, "import": 0, - "modified": "2025-12-30 20:11:37.752499", - "name": "drii0p2dts", - "parent": "Notification Log", + "modified": "2026-01-12 13:16:35.766532", + "name": "p1623pd81p", + "parent": "Technical Department", "permlevel": 0, "print": 0, "read": 1, @@ -13426,403 +16570,19 @@ "export": 1, "if_owner": 0, "import": 0, - "modified": "2025-12-30 20:11:54.082106", - "name": "drnmu9n1ne", - "parent": "Notification Log", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Cluster Manager", - "select": 1, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-12-30 20:12:12.772962", - "name": "drtgcpo500", - "parent": "Notification Log", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "General", - "select": 1, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-12-30 20:12:21.053627", - "name": "ds03jtka5u", - "parent": "Notification Log", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "General Contractor", - "select": 1, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-12-30 20:12:31.011563", - "name": "ds375eum9c", - "parent": "Notification Log", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "General WOA", - "select": 1, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-12-30 20:12:49.192310", - "name": "ds8tttn9lo", - "parent": "Notification Log", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Finance Manager", - "select": 1, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-12-30 20:12:59.429053", - "name": "dsc3v1781r", - "parent": "Notification Log", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Finance User", - "select": 1, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-12-30 20:14:15.030813", - "name": "dt3mbvdfcq", - "parent": "Notification Log", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "PHCC End User", - "select": 1, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2025-12-30 20:14:23.949034", - "name": "dt6gs6uhc6", - "parent": "Notification Log", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "PHCC Site Manager", - "select": 1, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-02 14:00:30.343397", - "name": "m5bvm66l81", + "modified": "2026-01-14 14:57:00.648682", + "name": "bbugbuh7ns", "parent": "Bin", "permlevel": 0, "print": 0, "read": 1, "report": 0, "role": "Technician", - "select": 1, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:11.579071", - "name": "imuj346tfg", - "parent": "Notification Log", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Site Supervisor", - "select": 1, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 1, - "create": 1, - "delete": 1, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:11.765361", - "name": "imulb2o0fg", - "parent": "PM Schedule Generator", - "permlevel": 0, - "print": 1, - "read": 1, - "report": 0, - "role": "Site Supervisor", - "select": 1, - "share": 0, - "submit": 1, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 1, - "modified": "2026-01-08 12:30:11.815370", - "name": "imum6a2b7s", - "parent": "Modality", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 1, - "role": "Site Supervisor", - "select": 1, - "share": 0, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 1, - "export": 0, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:11.852873", - "name": "imumjh9tns", - "parent": "Contact", - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Site Supervisor", - "select": 0, - "share": 1, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:11.887818", - "name": "imumaum9nb", - "parent": "Bin", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 1, - "role": "Site Supervisor", - "select": 1, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:11.924982", - "name": "imun1p5i3m", - "parent": "Purchase Order", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 1, - "role": "Site Supervisor", - "select": 1, - "share": 0, - "submit": 1, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:11.963746", - "name": "imuneuca87", - "parent": "Currency", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Site Supervisor", "select": 0, "share": 0, "submit": 0, "write": 0 }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:12.003492", - "name": "imuos9dhsq", - "parent": "Work_Order", - "permlevel": 2, - "print": 0, - "read": 1, - "report": 0, - "role": "Site Supervisor", - "select": 0, - "share": 0, - "submit": 0, - "write": 1 - }, { "amend": 1, "cancel": 1, @@ -13834,398 +16594,14 @@ "export": 1, "if_owner": 0, "import": 1, - "modified": "2026-01-08 12:30:12.046171", - "name": "imuorhlm5j", - "parent": "Stock Entry", + "modified": "2026-01-15 09:47:33.172467", + "name": "1pjd1jja6d", + "parent": "Inspection", "permlevel": 0, "print": 1, "read": 1, "report": 1, - "role": "Site Supervisor", - "select": 1, - "share": 0, - "submit": 1, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:12.083070", - "name": "imuoi35ihe", - "parent": "Manufacturer", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Site Supervisor", - "select": 1, - "share": 0, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:12.125876", - "name": "imupcebe8u", - "parent": "Feedback", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Site Supervisor", - "select": 1, - "share": 0, - "submit": 0, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:12.167491", - "name": "imup6lfqn8", - "parent": "Asset Depreciation Schedule", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Site Supervisor", - "select": 1, - "share": 0, - "submit": 1, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:12.202082", - "name": "imuqf5j0ca", - "parent": "User Permission", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Site Supervisor", - "select": 1, - "share": 0, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:12.239256", - "name": "imuqvv5ak0", - "parent": "Brand", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Site Supervisor", - "select": 1, - "share": 0, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:12.277937", - "name": "imuq2mniib", - "parent": "Material Request", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Site Supervisor", - "select": 1, - "share": 0, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:12.317183", - "name": "imuris9c3m", - "parent": "Communication", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Site Supervisor", - "select": 1, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 1, - "create": 1, - "delete": 1, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:12.361151", - "name": "imuri7dvdb", - "parent": "Journal Entry", - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Site Supervisor", - "select": 1, - "share": 0, - "submit": 1, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:12.405073", - "name": "imusqi1uqc", - "parent": "Work Order", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Site Supervisor", - "select": 1, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:12.446985", - "name": "imusoveesu", - "parent": "Payment Entry", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 1, - "role": "Site Supervisor", - "select": 1, - "share": 0, - "submit": 1, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:12.490653", - "name": "imusdbsbhb", - "parent": "Delivery Note", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 1, - "role": "Site Supervisor", - "select": 1, - "share": 0, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:12.533942", - "name": "imutflg6tq", - "parent": "Issue", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Site Supervisor", - "select": 1, - "share": 0, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:12.576984", - "name": "imut5coglm", - "parent": "Site Information", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Site Supervisor", - "select": 1, - "share": 0, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:12.615616", - "name": "imuu8499k0", - "parent": "Asset Type", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Site Supervisor", - "select": 1, - "share": 0, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:12.657634", - "name": "imuuujebp1", - "parent": "Warranty", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 1, - "role": "Site Supervisor", - "select": 1, - "share": 0, - "submit": 0, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:12.694525", - "name": "imuu26q4na", - "parent": "PPM", - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Site Supervisor", + "role": "Contractor Manager", "select": 1, "share": 1, "submit": 1, @@ -14235,69 +16611,21 @@ "amend": 0, "cancel": 0, "create": 1, - "delete": 1, + "delete": 0, "docstatus": 0, "doctype": "Custom DocPerm", "email": 0, "export": 1, "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:12.742351", - "name": "imuv479e8l", - "parent": "PPM Templates", - "permlevel": 0, - "print": 1, - "read": 1, - "report": 0, - "role": "Site Supervisor", - "select": 1, - "share": 1, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "cancel": 1, - "create": 1, - "delete": 1, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:12.785878", - "name": "imuv7qji47", - "parent": "Purchase Request", + "import": 1, + "modified": "2026-01-15 10:16:18.783283", + "name": "ig3s7km7v6", + "parent": "Version", "permlevel": 0, "print": 1, "read": 1, "report": 1, - "role": "Site Supervisor", - "select": 1, - "share": 1, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:12.831796", - "name": "imv0cr4v0j", - "parent": "PPM MRI Template", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Site Supervisor", + "role": "All", "select": 1, "share": 0, "submit": 0, @@ -14314,374 +16642,110 @@ "export": 1, "if_owner": 0, "import": 0, - "modified": "2026-01-08 12:30:12.878285", - "name": "imv0nf439d", - "parent": "PPM MRI Template", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Site Supervisor", - "select": 0, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:12.923090", - "name": "imv188e2a6", - "parent": "PPM CT SCAN MACHINE TEMPLATE", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Site Supervisor", - "select": 1, - "share": 0, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:12.966306", - "name": "imv1q43a92", - "parent": "Issue Priority", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Site Supervisor", - "select": 1, - "share": 0, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:13.011352", - "name": "imv2nu8uv4", - "parent": "Issue Type", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Site Supervisor", - "select": 1, - "share": 0, - "submit": 0, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:13.054189", - "name": "imv2ohve4u", - "parent": "Asset Movement", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 1, - "role": "Site Supervisor", - "select": 1, - "share": 0, - "submit": 1, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:13.088033", - "name": "imv2u9o5g0", - "parent": "Finance Book", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 1, - "role": "Site Supervisor", - "select": 1, - "share": 0, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:13.124602", - "name": "imv35o3uh9", - "parent": "Cost Center", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Site Supervisor", - "select": 1, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:13.164170", - "name": "imv3suj7is", - "parent": "Employee", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Site Supervisor", - "select": 1, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:13.202634", - "name": "imv48933jf", - "parent": "Role", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Site Supervisor", - "select": 1, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:13.244318", - "name": "imv4hcivsg", - "parent": "Role", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Site Supervisor", - "select": 0, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:13.328489", - "name": "imv5a1qjer", - "parent": "User", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Site Supervisor", - "select": 1, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:13.548384", - "name": "imv7fgjaji", - "parent": "Purchase Invoice", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Site Supervisor", - "select": 1, - "share": 0, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:13.719794", - "name": "imv9meu6cd", - "parent": "Purchase Receipt", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Site Supervisor", - "select": 1, - "share": 0, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:13.759254", - "name": "imv9jkud85", - "parent": "Tax Category", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Site Supervisor", - "select": 1, - "share": 0, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:13.796209", - "name": "imv9i1vdnd", - "parent": "Supplier", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Site Supervisor", - "select": 1, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:13.833092", - "name": "imva5ts9um", + "modified": "2026-01-16 12:31:07.367517", + "name": "dchkk85e1t", "parent": "Customer", "permlevel": 0, "print": 0, "read": 1, "report": 0, - "role": "Site Supervisor", + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-16 12:31:40.714367", + "name": "dn0clqnevv", + "parent": "Supplier", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-16 12:31:56.833217", + "name": "ds1locnto0", + "parent": "Brand", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-16 12:32:43.951221", + "name": "eaol458e47", + "parent": "Asset Depreciation Schedule", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-16 12:33:24.503944", + "name": "endd65jiq7", + "parent": "Asset Movement", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", "select": 1, "share": 0, "submit": 0, @@ -14698,14 +16762,62 @@ "export": 1, "if_owner": 0, "import": 0, - "modified": "2026-01-08 12:30:13.866929", - "name": "imva38u4po", - "parent": "Price List", + "modified": "2026-01-16 18:35:22.657257", + "name": "2qa6lbrhfb", + "parent": "PM Schedule Generator", "permlevel": 0, "print": 0, "read": 1, "report": 0, - "role": "Site Supervisor", + "role": "Work Control", + "select": 1, + "share": 0, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-16 18:35:41.533004", + "name": "3077obnri8", + "parent": "Support Plans", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 0, + "role": "Work Control", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-19 12:08:34.022602", + "name": "3dkrt9h3gl", + "parent": "Workflow", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Work Control", "select": 1, "share": 0, "submit": 0, @@ -14715,29 +16827,29 @@ "amend": 0, "cancel": 0, "create": 1, - "delete": 1, + "delete": 0, "docstatus": 0, "doctype": "Custom DocPerm", "email": 0, "export": 1, "if_owner": 0, "import": 0, - "modified": "2026-01-08 12:30:13.911854", - "name": "imvbgg34ps", - "parent": "Asset Maintenance Team", + "modified": "2026-01-20 14:22:53.198236", + "name": "ts5o5l3rs7", + "parent": "Work_Order", "permlevel": 0, "print": 0, "read": 1, - "report": 1, - "role": "Site Supervisor", + "report": 0, + "role": "Contractor Supervisor", "select": 1, - "share": 1, - "submit": 0, + "share": 0, + "submit": 1, "write": 1 }, { "amend": 0, - "cancel": 0, + "cancel": 1, "create": 1, "delete": 1, "docstatus": 0, @@ -14746,38 +16858,182 @@ "export": 1, "if_owner": 0, "import": 0, - "modified": "2026-01-08 12:30:13.955943", - "name": "imvb29kka7", - "parent": "Support Plans", + "modified": "2026-01-20 14:23:04.504290", + "name": "tvle5utjn7", + "parent": "Work_Order", "permlevel": 0, "print": 0, "read": 1, - "report": 1, - "role": "Site Supervisor", + "report": 0, + "role": "Contractor Manager", "select": 1, - "share": 1, - "submit": 0, + "share": 0, + "submit": 1, "write": 1 }, { "amend": 0, "cancel": 0, "create": 1, - "delete": 1, + "delete": 0, "docstatus": 0, "doctype": "Custom DocPerm", "email": 0, "export": 1, "if_owner": 0, "import": 0, - "modified": "2026-01-08 12:30:13.997062", - "name": "imvb3655fu", + "modified": "2026-01-20 15:00:28.619748", + "name": "jsuo7jc040", "parent": "Department", "permlevel": 0, "print": 0, "read": 1, "report": 0, - "role": "Site Supervisor", + "role": "Contractor Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-20 15:00:41.335688", + "name": "k0tungg1tr", + "parent": "LDAP Settings", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Contractor Supervisor", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-20 15:00:56.238618", + "name": "k5jeksk4qj", + "parent": "Location", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 0, + "role": "Contractor Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-20 15:01:08.350795", + "name": "k9c3es8ubo", + "parent": "Asset", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Contractor Supervisor", + "select": 1, + "share": 0, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-20 15:01:27.128393", + "name": "kf87c4mdcl", + "parent": "Asset Type", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Contractor Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-20 15:01:45.685563", + "name": "kl1flhq8f1", + "parent": "User", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Contractor Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-20 15:03:12.980853", + "name": "lga17of1rr", + "parent": "Issue", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Contractor Supervisor", "select": 1, "share": 0, "submit": 0, @@ -14794,14 +17050,254 @@ "export": 1, "if_owner": 0, "import": 0, - "modified": "2026-01-08 12:30:14.041141", - "name": "imvc1l5qj0", + "modified": "2026-01-20 15:03:24.753665", + "name": "lk03g9jqbo", + "parent": "Issue Type", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Contractor Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-20 15:08:34.934016", + "name": "oktc792jki", + "parent": "Company", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 0, + "role": "Contractor Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-21 18:06:13.274236", + "name": "cfk8j19v2f", + "parent": "Room", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-21 18:06:56.869644", + "name": "ct8lnut0e4", + "parent": "Building", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-22 15:13:56.684907", + "name": "j9enalbedl", + "parent": "Role Profile", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-22 17:11:00.598307", + "name": "nse8tah2el", + "parent": "User", + "permlevel": 1, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 0, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-28 16:08:07.277632", + "name": "ph8fpbo49a", + "parent": "Room", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Work Control", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-28 16:14:08.861591", + "name": "t29jurk1j5", + "parent": "Department", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Work Control", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-28 16:44:25.330629", + "name": "ept3mghv89", + "parent": "Custom DocPerm", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-28 17:10:42.677440", + "name": "u6q632gllg", + "parent": "Custom DocPerm", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Contractor Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-28 17:26:01.301911", + "name": "75t21ja4bk", "parent": "Location", "permlevel": 0, "print": 0, "read": 1, "report": 0, - "role": "Site Supervisor", + "role": "Work Control", "select": 1, "share": 0, "submit": 0, @@ -14818,137 +17314,41 @@ "export": 1, "if_owner": 0, "import": 0, - "modified": "2026-01-08 12:30:14.089734", - "name": "imvcou1rq6", - "parent": "Item Group", + "modified": "2026-01-28 17:26:25.961185", + "name": "7dki7che05", + "parent": "Building", "permlevel": 0, "print": 0, "read": 1, "report": 0, - "role": "Site Supervisor", + "role": "Work Control", "select": 1, "share": 0, "submit": 0, "write": 1 }, { - "amend": 1, - "cancel": 1, + "amend": 0, + "cancel": 0, "create": 1, - "delete": 1, + "delete": 0, "docstatus": 0, "doctype": "Custom DocPerm", "email": 0, "export": 1, "if_owner": 0, "import": 0, - "modified": "2026-01-08 12:30:14.133480", - "name": "imvdepjgca", - "parent": "PPM OF MRI SCAN MACHINE", + "modified": "2026-01-28 17:26:42.432014", + "name": "7ip1td5n2o", + "parent": "Building", "permlevel": 0, - "print": 1, + "print": 0, "read": 1, - "report": 1, - "role": "Site Supervisor", + "report": 0, + "role": "Contractor Supervisor", "select": 1, - "share": 1, - "submit": 1, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:14.174436", - "name": "imvd15h775", - "parent": "PPM OF FIRE ALARM DEVICES", - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Site Supervisor", - "select": 1, - "share": 1, - "submit": 1, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:14.222063", - "name": "imveaimnd9", - "parent": "PPM OF ELECTRICAL PANELS", - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Site Supervisor", - "select": 1, - "share": 1, - "submit": 1, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:14.269016", - "name": "imve6jt55m", - "parent": "PPM OF ELECTRICAL FIXTURES INSIDE ROOMS", - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Site Supervisor", - "select": 1, - "share": 1, - "submit": 1, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:14.322047", - "name": "imvffp4jla", - "parent": "PPM OF CT SCAN MACHINE", - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Site Supervisor", - "select": 1, - "share": 1, - "submit": 1, + "share": 0, + "submit": 0, "write": 1 }, { @@ -14962,23 +17362,23 @@ "export": 1, "if_owner": 0, "import": 0, - "modified": "2026-01-08 12:30:14.366617", - "name": "imvfmncl7b", - "parent": "Company", + "modified": "2026-01-28 17:27:30.271849", + "name": "81nenejua7", + "parent": "Department", "permlevel": 0, "print": 0, "read": 1, "report": 0, - "role": "Site Supervisor", + "role": "All", "select": 1, "share": 0, "submit": 0, - "write": 1 + "write": 0 }, { "amend": 0, "cancel": 0, - "create": 1, + "create": 0, "delete": 0, "docstatus": 0, "doctype": "Custom DocPerm", @@ -14986,42 +17386,18 @@ "export": 1, "if_owner": 0, "import": 0, - "modified": "2026-01-08 12:30:14.409805", - "name": "imvgneka16", - "parent": "Account", + "modified": "2026-01-28 17:28:00.679057", + "name": "8b7lhgdpkv", + "parent": "Extension Directory", "permlevel": 0, "print": 0, "read": 1, "report": 0, - "role": "Site Supervisor", + "role": "All", "select": 1, "share": 0, "submit": 0, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:14.452304", - "name": "imvgflksfn", - "parent": "Asset Maintenance Log", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 1, - "role": "Site Supervisor", - "select": 1, - "share": 1, - "submit": 1, - "write": 1 + "write": 0 }, { "amend": 0, @@ -15034,163 +17410,19 @@ "export": 1, "if_owner": 0, "import": 0, - "modified": "2026-01-08 12:30:14.489738", - "name": "imvg1imttn", - "parent": "Asset Maintenance", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 1, - "role": "Site Supervisor", - "select": 1, - "share": 1, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:14.532483", - "name": "imvhti8tsn", - "parent": "UOM", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 1, - "role": "Site Supervisor", - "select": 1, - "share": 1, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:14.575892", - "name": "imvh3feu77", - "parent": "Warehouse", + "modified": "2026-01-28 17:28:29.761612", + "name": "8kad5lk6ke", + "parent": "Room", "permlevel": 0, "print": 0, "read": 1, "report": 0, - "role": "Site Supervisor", + "role": "Contractor Supervisor", "select": 1, "share": 0, "submit": 0, "write": 1 }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:14.618372", - "name": "imvii7n9rn", - "parent": "Asset Category", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 1, - "role": "Site Supervisor", - "select": 1, - "share": 1, - "submit": 0, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:14.661051", - "name": "imviijtetn", - "parent": "Asset", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 1, - "role": "Site Supervisor", - "select": 1, - "share": 1, - "submit": 1, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:14.698657", - "name": "imvi1f22rg", - "parent": "Item", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 1, - "role": "Site Supervisor", - "select": 1, - "share": 0, - "submit": 0, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-08 12:30:14.738894", - "name": "imvjcag1oh", - "parent": "Work_Order", - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Site Supervisor", - "select": 1, - "share": 1, - "submit": 1, - "write": 1 - }, { "amend": 0, "cancel": 0, @@ -15202,8 +17434,368 @@ "export": 1, "if_owner": 0, "import": 0, - "modified": "2026-01-12 19:01:46.941405", - "name": "3bctspaa7o", + "modified": "2026-01-28 17:31:01.079100", + "name": "a3iiq2303i", + "parent": "Room", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-28 17:31:49.243495", + "name": "aikh31h8hh", + "parent": "Room", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-28 17:32:03.350346", + "name": "an20a780h9", + "parent": "Building", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-29 10:16:02.248740", + "name": "mvmslj9sso", + "parent": "Mobile Team Site", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-29 10:16:29.852035", + "name": "n8a9cjt09l", + "parent": "Modality", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-29 10:17:52.813721", + "name": "o28snm961n", + "parent": "Technical Department", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-29 10:23:57.216870", + "name": "rk403hj1s4", + "parent": "Asset Maintenance Team", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Work Control", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2026-01-29 10:24:19.874966", + "name": "rr7vmh3vnj", + "parent": "Asset Maintenance Team", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Contractor Supervisor", + "select": 1, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-29 10:24:37.175682", + "name": "s0k43b3vfh", + "parent": "Asset Maintenance Team", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-29 10:30:33.321615", + "name": "vftha6fapi", + "parent": "Issue Type", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-02 10:21:55.843307", + "name": "9e6o2aqj56", + "parent": "Infrastructure Location", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-02 10:22:07.199919", + "name": "9hogqtsv30", + "parent": "Infrastructure Location", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Work Control", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-02 10:22:27.521619", + "name": "9o43pojned", + "parent": "Infrastructure Location", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-02 10:22:43.366684", + "name": "9t2l39e23e", + "parent": "Infrastructure Location", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Contractor Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-05 16:36:35.012891", + "name": "86uiqd48c4", + "parent": "Feedback", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-12 09:23:12.166758", + "name": "sh11lpsvvp", "parent": "Workflow", "permlevel": 0, "print": 0, @@ -15226,56 +17818,8 @@ "export": 1, "if_owner": 0, "import": 0, - "modified": "2026-01-12 19:01:59.511164", - "name": "3bgsb7726s", - "parent": "Workflow", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Maintenance User", - "select": 1, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-12 19:02:15.761660", - "name": "3blubbjaee", - "parent": "Workflow", - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Technician", - "select": 1, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "docstatus": 0, - "doctype": "Custom DocPerm", - "email": 0, - "export": 1, - "if_owner": 0, - "import": 0, - "modified": "2026-01-12 19:02:33.002379", - "name": "3brb3v5ohm", + "modified": "2026-02-12 09:23:23.631783", + "name": "skll7dr281", "parent": "Workflow", "permlevel": 0, "print": 0, @@ -15298,14 +17842,14 @@ "export": 1, "if_owner": 0, "import": 0, - "modified": "2026-01-12 19:02:57.863894", - "name": "3c34a72ctn", + "modified": "2026-02-12 09:23:36.126937", + "name": "sohu3rjcce", "parent": "Workflow", "permlevel": 0, "print": 0, "read": 1, "report": 0, - "role": "Finance Manager", + "role": "Contractor Engineer", "select": 1, "share": 0, "submit": 0, @@ -15322,14 +17866,326 @@ "export": 1, "if_owner": 0, "import": 0, - "modified": "2026-01-27 20:37:42.845687", - "name": "gjrkkro343", - "parent": "User", - "permlevel": 1, + "modified": "2026-02-12 09:23:44.856970", + "name": "sr9msbco2c", + "parent": "Workflow", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Contractor Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-12 09:23:51.976849", + "name": "stgmlpnhqv", + "parent": "Workflow", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-12 13:37:50.671738", + "name": "hnit2tdo0e", + "parent": "Comment", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Contractor Engineer", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-12 13:38:24.392119", + "name": "i24hdtksvn", + "parent": "Comment", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Contractor Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-12 13:38:34.784770", + "name": "i5ckossvhk", + "parent": "Comment", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-12 13:38:44.801919", + "name": "i8g9tpb51j", + "parent": "Comment", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance User", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-12 13:39:14.084968", + "name": "ihkn08alhk", + "parent": "Comment", + "permlevel": 0, "print": 0, "read": 1, "report": 0, "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-12 16:09:58.720372", + "name": "as3btp0p31", + "parent": "Inspection", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-12 16:14:02.326479", + "name": "d87cu21is0", + "parent": "Asset", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-12 16:14:12.525865", + "name": "dbeo6a4ikl", + "parent": "Item", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-12 16:14:24.105269", + "name": "df2usohp9g", + "parent": "Asset Maintenance", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-12 16:14:44.101899", + "name": "dl9o81620m", + "parent": "PM Schedule Generator", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-12 16:15:03.834040", + "name": "drf22tqpb6", + "parent": "Work_Order", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-18 10:27:08.256951", + "name": "8fq1lcfomh", + "parent": "Asset", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Quality Supervisor", "select": 0, "share": 0, "submit": 0, @@ -15346,16 +18202,64 @@ "export": 1, "if_owner": 0, "import": 0, - "modified": "2026-01-27 20:38:10.367787", - "name": "gk47bt5k5t", - "parent": "Role Profile", + "modified": "2026-02-18 10:27:33.857692", + "name": "8nr9hbojaj", + "parent": "Work_Order", "permlevel": 0, "print": 0, "read": 1, "report": 0, + "role": "Quality Supervisor", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-18 15:42:25.699757", + "name": "17hl7icg1d", + "parent": "Delete Request", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, "role": "All", "select": 1, "share": 0, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-03-02 08:39:04.482293", + "name": "m5ko8ni0qa", + "parent": "Custom Field", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Contractor Engineer", + "select": 1, + "share": 0, "submit": 0, "write": 0 }, @@ -15370,14 +18274,86 @@ "export": 1, "if_owner": 0, "import": 0, - "modified": "2026-01-29 11:46:05.266871", - "name": "rjrkac79cg", - "parent": "Mobile Team Site", + "modified": "2026-03-02 09:13:33.491841", + "name": "ac7gtnobo8", + "parent": "Custom Field", "permlevel": 0, "print": 0, "read": 1, "report": 0, - "role": "All", + "role": "Work Control", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-03-02 09:20:53.258801", + "name": "elkm1gh9eu", + "parent": "Custom Field", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Contractor Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-03-02 09:36:18.748372", + "name": "nmr4ml5i8q", + "parent": "Custom Field", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-03-02 09:36:31.788144", + "name": "nqus9rp2il", + "parent": "Custom Field", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance User", "select": 1, "share": 0, "submit": 0, @@ -15394,9 +18370,9 @@ "export": 1, "if_owner": 0, "import": 0, - "modified": "2025-11-25 16:20:31.891926", - "name": "eotfd1f08i", - "parent": "Modality", + "modified": "2025-12-16 10:29:59.276623", + "name": "q58qgnms8s", + "parent": "Extension Directory", "permlevel": 0, "print": 1, "read": 1, @@ -15418,9 +18394,9 @@ "export": 1, "if_owner": 0, "import": 0, - "modified": "2025-12-09 19:40:16.106156", - "name": "3iehf4bggk", - "parent": "PM Schedule Generator", + "modified": "2026-01-12 13:03:44.813879", + "name": "hg8ls2es05", + "parent": "Inspection", "permlevel": 0, "print": 1, "read": 1, @@ -15434,26 +18410,50 @@ { "amend": 0, "cancel": 0, - "create": 0, - "delete": 0, + "create": 1, + "delete": 1, "docstatus": 0, "doctype": "Custom DocPerm", "email": 1, "export": 1, "if_owner": 0, "import": 0, - "modified": "2025-12-30 19:50:18.047353", - "name": "df2km6cegr", - "parent": "Notification Log", + "modified": "2026-01-12 13:15:26.325895", + "name": "obfgpjkfm3", + "parent": "Technical Department", "permlevel": 0, "print": 1, "read": 1, "report": 1, - "role": "All", + "role": "System Manager", "select": 0, "share": 1, "submit": 0, - "write": 0 + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-16 18:35:22.563820", + "name": "2q99fd9uc8", + "parent": "PM Schedule Generator", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 }, { "amend": 0, @@ -15466,8 +18466,8 @@ "export": 0, "if_owner": 0, "import": 0, - "modified": "2026-01-12 19:01:46.777856", - "name": "3bcrqkvo49", + "modified": "2026-01-19 12:08:33.975731", + "name": "3djn60mi8b", "parent": "Workflow", "permlevel": 0, "print": 1, @@ -15490,8 +18490,80 @@ "export": 1, "if_owner": 0, "import": 0, - "modified": "2026-01-27 20:38:10.041568", - "name": "gk46n0ok0g", + "modified": "2026-01-20 15:00:41.177976", + "name": "k0s2u5055l", + "parent": "LDAP Settings", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 0, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-21 18:06:13.230383", + "name": "cfk3nj29mu", + "parent": "Room", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-21 18:06:56.664137", + "name": "ct7vnk5jmv", + "parent": "Building", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-22 15:13:56.631686", + "name": "j9ejv6qcas", "parent": "Role Profile", "permlevel": 0, "print": 1, @@ -15503,6 +18575,270 @@ "submit": 0, "write": 1 }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-28 16:44:25.281868", + "name": "epsvedj4aa", + "parent": "Custom DocPerm", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-29 10:16:02.202294", + "name": "mvmh1d93lu", + "parent": "Mobile Team Site", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-29 10:16:29.767102", + "name": "n89jq1a3nk", + "parent": "Modality", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-02 10:21:55.787768", + "name": "9e5sh1n78l", + "parent": "Infrastructure Location", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-11 09:58:29.478058", + "name": "5enfhlumru", + "parent": "Notification Log", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "All", + "select": 1, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-12 13:37:50.585546", + "name": "hnii80cgai", + "parent": "Comment", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-18 15:42:25.613244", + "name": "17gm9rij9s", + "parent": "Delete Request", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2026-03-02 08:39:04.194864", + "name": "m5i9jfv1m7", + "parent": "Custom Field", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Administrator", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-22 15:13:56.673640", + "name": "j9eomfnjri", + "parent": "Role Profile", + "permlevel": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-12 13:37:50.650707", + "name": "hnij6i5bg8", + "parent": "Comment", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Website Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2026-03-02 08:39:04.439826", + "name": "m5k3o3fahe", + "parent": "Custom Field", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, { "amend": 0, "cancel": 0, @@ -15510,14 +18846,206 @@ "delete": 0, "docstatus": 0, "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-25 13:28:11.831691", + "name": "eu6pnjm5uj", + "parent": "Risk Assessment", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Project Base Role", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-25 13:28:24.487528", + "name": "f263cc8u4a", + "parent": "Risk Assessment", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Contractor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-25 13:28:44.699904", + "name": "f8guoduuat", + "parent": "Risk Assessment", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Consultant Office", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-25 13:29:04.253690", + "name": "fejrvqeqk4", + "parent": "Risk Assessment", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Projects Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-07-01 16:33:02.607536", + "name": "1o23tmkhsk", + "parent": "Project Checklist", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Project Base Role", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2026-07-01 16:33:32.419477", + "name": "21df080m0b", + "parent": "Project Checklist", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Contractor Engineer", + "select": 1, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2026-07-01 16:35:03.507104", + "name": "2tskvpru0o", + "parent": "Project Checklist", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Consultant Office", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-07-08 17:06:09.366461", + "name": "7ct7fc1457", + "parent": "WO Feedback", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", "email": 1, "export": 1, "if_owner": 0, "import": 0, - "modified": "2026-01-27 20:38:10.349364", - "name": "gk473kg97c", - "parent": "Role Profile", - "permlevel": 1, + "modified": "2026-06-12 17:13:25.652519", + "name": "q58i303ec0", + "parent": "Project Request", + "permlevel": 0, "print": 1, "read": 1, "report": 1, @@ -15526,5 +19054,317 @@ "share": 1, "submit": 0, "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-12 17:13:44.863016", + "name": "qb9ac4uqak", + "parent": "Year", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-19 12:13:06.033834", + "name": "se44ggplmc", + "parent": "Site Visit", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-23 16:36:40.000527", + "name": "5s0gchecpm", + "parent": "Technical Submittal", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-23 16:37:01.356321", + "name": "62m9jldbv1", + "parent": "Contractor Information", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-25 13:28:11.743163", + "name": "eu5jbkmn1t", + "parent": "Risk Assessment", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-07-01 16:33:02.429049", + "name": "1o0hqncn0k", + "parent": "Project Checklist", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-07-08 17:06:09.076882", + "name": "7cq1v9fjt6", + "parent": "WO Feedback", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-08-13 15:47:05.428155", + "name": "g02e28r8o0", + "parent": "Comment", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-08-13 15:47:53.719707", + "name": "g0hh94u1bq", + "parent": "Version", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-08-13 15:52:21.512524", + "name": "g357v50en5", + "parent": "Notification", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2026-08-13 15:52:48.711092", + "name": "g3dorhrsq0", + "parent": "Email Queue", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-08-13 15:47:05.496424", + "name": "g02eqglv5b", + "parent": "Comment", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Website Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2026-08-13 15:47:53.500926", + "name": "g0hgufrtoa", + "parent": "Version", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Administrator", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 } ] \ No newline at end of file diff --git a/asset_lite/fixtures/custom_field.json b/asset_lite/fixtures/custom_field.json index c193f14..0df3be8 100644 --- a/asset_lite/fixtures/custom_field.json +++ b/asset_lite/fixtures/custom_field.json @@ -1231,62 +1231,6 @@ "unique": 0, "width": null }, - { - "allow_in_quick_entry": 0, - "allow_on_submit": 1, - "bold": 0, - "collapsible": 0, - "collapsible_depends_on": null, - "columns": 0, - "default": "Class A", - "depends_on": null, - "description": null, - "docstatus": 0, - "doctype": "Custom Field", - "dt": "Asset", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_class", - "fieldtype": "Select", - "hidden": 0, - "hide_border": 0, - "hide_days": 0, - "hide_seconds": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_preview": 0, - "in_standard_filter": 0, - "insert_after": "item_name", - "is_system_generated": 0, - "is_virtual": 0, - "label": "Class", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2025-04-22 12:52:33.554610", - "module": "Asset Lite", - "name": "Asset-custom_class", - "no_copy": 0, - "non_negative": 0, - "options": "\nClass A\nClass B\nClass C", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": null, - "read_only": 0, - "read_only_depends_on": null, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "show_dashboard": 0, - "sort_options": 0, - "translatable": 0, - "unique": 0, - "width": null - }, { "allow_in_quick_entry": 0, "allow_on_submit": 0, @@ -1343,6 +1287,62 @@ "unique": 0, "width": null }, + { + "allow_in_quick_entry": 0, + "allow_on_submit": 1, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": "Class A", + "depends_on": null, + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Asset", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_class", + "fieldtype": "Select", + "hidden": 0, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_preview": 0, + "in_standard_filter": 0, + "insert_after": "item_name", + "is_system_generated": 0, + "is_virtual": 0, + "label": "Class", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2025-04-22 12:52:33.554610", + "module": "Asset Lite", + "name": "Asset-custom_class", + "no_copy": 0, + "non_negative": 0, + "options": "\nClass A\nClass B\nClass C", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": null, + "read_only": 0, + "read_only_depends_on": null, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "show_dashboard": 0, + "sort_options": 0, + "translatable": 0, + "unique": 0, + "width": null + }, { "allow_in_quick_entry": 0, "allow_on_submit": 0, @@ -1567,6 +1567,62 @@ "unique": 0, "width": null }, + { + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": null, + "depends_on": null, + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Location", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_is_phcc", + "fieldtype": "Check", + "hidden": 0, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_preview": 0, + "in_standard_filter": 0, + "insert_after": "custom_is_hospital", + "is_system_generated": 0, + "is_virtual": 0, + "label": "Is PHCC", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2026-08-03 11:54:18.315831", + "module": "Asset Lite", + "name": "Location-custom_is_phcc", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": null, + "read_only": 0, + "read_only_depends_on": null, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "show_dashboard": 0, + "sort_options": 0, + "translatable": 0, + "unique": 0, + "width": null + }, { "allow_in_quick_entry": 0, "allow_on_submit": 0, @@ -1679,62 +1735,6 @@ "unique": 0, "width": null }, - { - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "collapsible_depends_on": null, - "columns": 0, - "default": null, - "depends_on": null, - "description": null, - "docstatus": 0, - "doctype": "Custom Field", - "dt": "Location", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_is_phcc", - "fieldtype": "Check", - "hidden": 0, - "hide_border": 0, - "hide_days": 0, - "hide_seconds": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_preview": 0, - "in_standard_filter": 0, - "insert_after": "custom_is_hospital", - "is_system_generated": 0, - "is_virtual": 0, - "label": "Is PHCC", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2026-08-03 11:54:18.315831", - "module": "Asset Lite", - "name": "Location-custom_is_phcc", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": null, - "read_only": 0, - "read_only_depends_on": null, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "show_dashboard": 0, - "sort_options": 0, - "translatable": 0, - "unique": 0, - "width": null - }, { "allow_in_quick_entry": 0, "allow_on_submit": 0, @@ -1959,62 +1959,6 @@ "unique": 0, "width": null }, - { - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "collapsible_depends_on": null, - "columns": 0, - "default": null, - "depends_on": null, - "description": null, - "docstatus": 0, - "doctype": "Custom Field", - "dt": "Work_Order", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_column_break_pgcow", - "fieldtype": "Column Break", - "hidden": 0, - "hide_border": 0, - "hide_days": 0, - "hide_seconds": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_preview": 0, - "in_standard_filter": 0, - "insert_after": "recall_reference_number", - "is_system_generated": 0, - "is_virtual": 0, - "label": "", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2025-04-22 12:52:04.664873", - "module": "Asset Lite", - "name": "Work_Order-custom_column_break_pgcow", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": null, - "read_only": 0, - "read_only_depends_on": null, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "show_dashboard": 0, - "sort_options": 0, - "translatable": 0, - "unique": 0, - "width": null - }, { "allow_in_quick_entry": 0, "allow_on_submit": 0, @@ -2071,6 +2015,62 @@ "unique": 0, "width": null }, + { + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": null, + "depends_on": null, + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Work_Order", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_column_break_pgcow", + "fieldtype": "Column Break", + "hidden": 0, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_preview": 0, + "in_standard_filter": 0, + "insert_after": "recall_reference_number", + "is_system_generated": 0, + "is_virtual": 0, + "label": "", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2025-04-22 12:52:04.664873", + "module": "Asset Lite", + "name": "Work_Order-custom_column_break_pgcow", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": null, + "read_only": 0, + "read_only_depends_on": null, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "show_dashboard": 0, + "sort_options": 0, + "translatable": 0, + "unique": 0, + "width": null + }, { "allow_in_quick_entry": 0, "allow_on_submit": 0, @@ -2351,62 +2351,6 @@ "unique": 0, "width": null }, - { - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "collapsible_depends_on": null, - "columns": 0, - "default": null, - "depends_on": "", - "description": null, - "docstatus": 0, - "doctype": "Custom Field", - "dt": "Work_Order", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_priority_", - "fieldtype": "Select", - "hidden": 0, - "hide_border": 0, - "hide_days": 0, - "hide_seconds": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_preview": 0, - "in_standard_filter": 0, - "insert_after": "serial_number", - "is_system_generated": 0, - "is_virtual": 0, - "label": "Priority", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2025-04-22 12:51:59.463979", - "module": "Asset Lite", - "name": "Work_Order-custom_priority_", - "no_copy": 0, - "non_negative": 0, - "options": "Normal\nUrgent", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": null, - "read_only": 0, - "read_only_depends_on": null, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "show_dashboard": 0, - "sort_options": 0, - "translatable": 0, - "unique": 0, - "width": null - }, { "allow_in_quick_entry": 0, "allow_on_submit": 0, @@ -2463,6 +2407,62 @@ "unique": 0, "width": null }, + { + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": null, + "depends_on": "", + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Work_Order", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_priority_", + "fieldtype": "Select", + "hidden": 0, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_preview": 0, + "in_standard_filter": 0, + "insert_after": "serial_number", + "is_system_generated": 0, + "is_virtual": 0, + "label": "Priority", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2025-04-22 12:51:59.463979", + "module": "Asset Lite", + "name": "Work_Order-custom_priority_", + "no_copy": 0, + "non_negative": 0, + "options": "Normal\nUrgent", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": null, + "read_only": 0, + "read_only_depends_on": null, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "show_dashboard": 0, + "sort_options": 0, + "translatable": 0, + "unique": 0, + "width": null + }, { "allow_in_quick_entry": 0, "allow_on_submit": 0, @@ -2631,62 +2631,6 @@ "unique": 0, "width": null }, - { - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "collapsible_depends_on": null, - "columns": 0, - "default": null, - "depends_on": null, - "description": null, - "docstatus": 0, - "doctype": "Custom Field", - "dt": "Asset", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_end_of_life1", - "fieldtype": "Date", - "hidden": 0, - "hide_border": 0, - "hide_days": 0, - "hide_seconds": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_preview": 0, - "in_standard_filter": 0, - "insert_after": "customer", - "is_system_generated": 0, - "is_virtual": 0, - "label": "End of Life", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2025-04-22 12:52:06.503493", - "module": "Asset Lite", - "name": "Asset-custom_end_of_life1", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": null, - "read_only": 0, - "read_only_depends_on": null, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "show_dashboard": 0, - "sort_options": 0, - "translatable": 0, - "unique": 0, - "width": null - }, { "allow_in_quick_entry": 0, "allow_on_submit": 0, @@ -2743,6 +2687,62 @@ "unique": 0, "width": null }, + { + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": null, + "depends_on": null, + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Asset", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_end_of_life1", + "fieldtype": "Date", + "hidden": 0, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_preview": 0, + "in_standard_filter": 0, + "insert_after": "customer", + "is_system_generated": 0, + "is_virtual": 0, + "label": "End of Life", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2025-04-22 12:52:06.503493", + "module": "Asset Lite", + "name": "Asset-custom_end_of_life1", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": null, + "read_only": 0, + "read_only_depends_on": null, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "show_dashboard": 0, + "sort_options": 0, + "translatable": 0, + "unique": 0, + "width": null + }, { "allow_in_quick_entry": 0, "allow_on_submit": 0, @@ -2967,62 +2967,6 @@ "unique": 0, "width": null }, - { - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "collapsible_depends_on": null, - "columns": 0, - "default": null, - "depends_on": null, - "description": null, - "docstatus": 0, - "doctype": "Custom Field", - "dt": "Work_Order", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_maintenance_manager", - "fieldtype": "Link", - "hidden": 1, - "hide_border": 0, - "hide_days": 0, - "hide_seconds": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_preview": 0, - "in_standard_filter": 0, - "insert_after": "custom_manufacturing_year", - "is_system_generated": 0, - "is_virtual": 0, - "label": "Maintenance Manager", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2025-04-22 12:51:58.641370", - "module": "Asset Lite", - "name": "Work_Order-custom_maintenance_manager", - "no_copy": 0, - "non_negative": 0, - "options": "User", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": null, - "read_only": 0, - "read_only_depends_on": null, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "show_dashboard": 0, - "sort_options": 0, - "translatable": 0, - "unique": 0, - "width": null - }, { "allow_in_quick_entry": 0, "allow_on_submit": 0, @@ -3079,6 +3023,62 @@ "unique": 0, "width": null }, + { + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": null, + "depends_on": null, + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Work_Order", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_maintenance_manager", + "fieldtype": "Link", + "hidden": 1, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_preview": 0, + "in_standard_filter": 0, + "insert_after": "custom_manufacturing_year", + "is_system_generated": 0, + "is_virtual": 0, + "label": "Maintenance Manager", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2025-04-22 12:51:58.641370", + "module": "Asset Lite", + "name": "Work_Order-custom_maintenance_manager", + "no_copy": 0, + "non_negative": 0, + "options": "User", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": null, + "read_only": 0, + "read_only_depends_on": null, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "show_dashboard": 0, + "sort_options": 0, + "translatable": 0, + "unique": 0, + "width": null + }, { "allow_in_quick_entry": 0, "allow_on_submit": 0, @@ -3359,62 +3359,6 @@ "unique": 0, "width": null }, - { - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "collapsible_depends_on": null, - "columns": 0, - "default": null, - "depends_on": null, - "description": null, - "docstatus": 0, - "doctype": "Custom Field", - "dt": "Work_Order", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_column_break_2w2x1", - "fieldtype": "Column Break", - "hidden": 0, - "hide_border": 0, - "hide_days": 0, - "hide_seconds": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_preview": 0, - "in_standard_filter": 0, - "insert_after": "custom_section_name", - "is_system_generated": 0, - "is_virtual": 0, - "label": "", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2025-04-22 12:52:04.401649", - "module": "Asset Lite", - "name": "Work_Order-custom_column_break_2w2x1", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": null, - "read_only": 0, - "read_only_depends_on": null, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "show_dashboard": 0, - "sort_options": 0, - "translatable": 0, - "unique": 0, - "width": null - }, { "allow_in_quick_entry": 0, "allow_on_submit": 0, @@ -3527,6 +3471,174 @@ "unique": 0, "width": null }, + { + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": null, + "depends_on": null, + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Work_Order", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_local_id", + "fieldtype": "Data", + "hidden": 0, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_preview": 0, + "in_standard_filter": 0, + "insert_after": "custom_section_name", + "is_system_generated": 0, + "is_virtual": 0, + "label": "Local ID", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2026-08-24 12:21:39.435091", + "module": "Asset Lite", + "name": "Work_Order-custom_local_id", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": null, + "read_only": 0, + "read_only_depends_on": null, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "show_dashboard": 0, + "sort_options": 0, + "translatable": 1, + "unique": 0, + "width": null + }, + { + "allow_in_quick_entry": 0, + "allow_on_submit": 1, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": null, + "depends_on": null, + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Work_Order", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_wo_qr", + "fieldtype": "Attach", + "hidden": 0, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_preview": 0, + "in_standard_filter": 0, + "insert_after": "custom_local_id", + "is_system_generated": 0, + "is_virtual": 0, + "label": "WO QR", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2026-08-24 12:21:36.710551", + "module": "Asset Lite", + "name": "Work_Order-custom_wo_qr", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": null, + "read_only": 0, + "read_only_depends_on": null, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "show_dashboard": 0, + "sort_options": 0, + "translatable": 0, + "unique": 0, + "width": null + }, + { + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": null, + "depends_on": null, + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Work_Order", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_column_break_2w2x1", + "fieldtype": "Column Break", + "hidden": 0, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_preview": 0, + "in_standard_filter": 0, + "insert_after": "custom_wo_qr", + "is_system_generated": 0, + "is_virtual": 0, + "label": "", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2025-04-22 12:52:04.401649", + "module": "Asset Lite", + "name": "Work_Order-custom_column_break_2w2x1", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": null, + "read_only": 0, + "read_only_depends_on": null, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "show_dashboard": 0, + "sort_options": 0, + "translatable": 0, + "unique": 0, + "width": null + }, { "allow_in_quick_entry": 0, "allow_on_submit": 0, @@ -3863,62 +3975,6 @@ "unique": 0, "width": null }, - { - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "collapsible_depends_on": null, - "columns": 0, - "default": null, - "depends_on": "eval:doc.site_name", - "description": null, - "docstatus": 0, - "doctype": "Custom Field", - "dt": "Work_Order", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_department_", - "fieldtype": "Data", - "hidden": 0, - "hide_border": 0, - "hide_days": 0, - "hide_seconds": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_preview": 0, - "in_standard_filter": 0, - "insert_after": "department", - "is_system_generated": 0, - "is_virtual": 0, - "label": "Department", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2025-09-08 12:52:09.184812", - "module": "Asset Lite", - "name": "Work_Order-custom_department_", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": null, - "read_only": 0, - "read_only_depends_on": null, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "show_dashboard": 0, - "sort_options": 0, - "translatable": 0, - "unique": 0, - "width": null - }, { "allow_in_quick_entry": 0, "allow_on_submit": 0, @@ -4143,6 +4199,62 @@ "unique": 0, "width": null }, + { + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": null, + "depends_on": "eval:doc.site_name", + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Work_Order", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_department_", + "fieldtype": "Data", + "hidden": 0, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_preview": 0, + "in_standard_filter": 0, + "insert_after": "department", + "is_system_generated": 0, + "is_virtual": 0, + "label": "Department", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2025-09-08 12:52:09.184812", + "module": "Asset Lite", + "name": "Work_Order-custom_department_", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": null, + "read_only": 0, + "read_only_depends_on": null, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "show_dashboard": 0, + "sort_options": 0, + "translatable": 0, + "unique": 0, + "width": null + }, { "allow_in_quick_entry": 0, "allow_on_submit": 0, @@ -4263,15 +4375,15 @@ "collapsible_depends_on": null, "columns": 0, "default": null, - "depends_on": "eval:doc.asset_type == \"Biomedical\"\r\n", + "depends_on": "eval:doc.item_group == \"Tools\"", "description": null, "docstatus": 0, "doctype": "Custom Field", - "dt": "Work_Order", + "dt": "Item", "fetch_from": null, "fetch_if_empty": 0, - "fieldname": "custom_pending_reason", - "fieldtype": "Select", + "fieldname": "custom_last_calibration_date", + "fieldtype": "Date", "hidden": 0, "hide_border": 0, "hide_days": 0, @@ -4282,20 +4394,20 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "supplier", + "insert_after": "is_fixed_asset", "is_system_generated": 0, "is_virtual": 0, - "label": "Pending Reason", + "label": "Last Calibration Date", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2025-06-19 11:04:46.394902", + "modified": "2025-04-22 12:52:39.415273", "module": "Asset Lite", - "name": "Work_Order-custom_pending_reason", + "name": "Item-custom_last_calibration_date", "no_copy": 0, "non_negative": 0, - "options": "\nNeed Part\nWaiting For Quotation\nWaiting For PO\nWaiting For Part Delivery", - "permlevel": 2, + "options": null, + "permlevel": 0, "precision": "", "print_hide": 0, "print_hide_if_no_value": 0, @@ -4382,7 +4494,7 @@ "dt": "Item", "fetch_from": null, "fetch_if_empty": 0, - "fieldname": "custom_last_calibration_date", + "fieldname": "custom_next_due_calibration_date", "fieldtype": "Date", "hidden": 0, "hide_border": 0, @@ -4394,72 +4506,16 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "is_fixed_asset", + "insert_after": "custom_last_calibration_date", "is_system_generated": 0, "is_virtual": 0, - "label": "Last Calibration Date", + "label": "Next Calibration Due Date", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2025-04-22 12:52:39.415273", + "modified": "2025-04-22 12:52:39.168665", "module": "Asset Lite", - "name": "Item-custom_last_calibration_date", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": null, - "read_only": 0, - "read_only_depends_on": null, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "show_dashboard": 0, - "sort_options": 0, - "translatable": 0, - "unique": 0, - "width": null - }, - { - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "collapsible_depends_on": null, - "columns": 0, - "default": null, - "depends_on": "eval:doc.asset_type == \"Non Biomedical\"\r\n", - "description": null, - "docstatus": 0, - "doctype": "Custom Field", - "dt": "Work_Order", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_floor_number", - "fieldtype": "Data", - "hidden": 0, - "hide_border": 0, - "hide_days": 0, - "hide_seconds": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_preview": 0, - "in_standard_filter": 0, - "insert_after": "custom_pending_reason", - "is_system_generated": 0, - "is_virtual": 0, - "label": "Floor Number", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2025-06-19 11:07:14.350945", - "module": "Asset Lite", - "name": "Work_Order-custom_floor_number", + "name": "Item-custom_next_due_calibration_date", "no_copy": 0, "non_negative": 0, "options": null, @@ -4543,15 +4599,15 @@ "collapsible_depends_on": null, "columns": 0, "default": null, - "depends_on": "eval:doc.item_group == \"Tools\"", + "depends_on": "eval:doc.custom_early_completion== \"Yes\"", "description": null, "docstatus": 0, "doctype": "Custom Field", - "dt": "Item", + "dt": "Asset Maintenance Log", "fetch_from": null, "fetch_if_empty": 0, - "fieldname": "custom_next_due_calibration_date", - "fieldtype": "Date", + "fieldname": "custom_early_completion_reason", + "fieldtype": "Data", "hidden": 0, "hide_border": 0, "hide_days": 0, @@ -4562,16 +4618,16 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "custom_last_calibration_date", + "insert_after": "completion_date", "is_system_generated": 0, "is_virtual": 0, - "label": "Next Calibration Due Date", + "label": "Early Completion Reason", "length": 0, "link_filters": null, - "mandatory_depends_on": null, - "modified": "2025-04-22 12:52:39.168665", + "mandatory_depends_on": "eval:doc.custom_early_completion== \"Yes\"", + "modified": "2025-04-22 12:51:48.722813", "module": "Asset Lite", - "name": "Item-custom_next_due_calibration_date", + "name": "Asset Maintenance Log-custom_early_completion_reason", "no_copy": 0, "non_negative": 0, "options": null, @@ -4599,15 +4655,15 @@ "collapsible_depends_on": null, "columns": 0, "default": null, - "depends_on": "eval:doc.asset_type == \"Non Biomedical\"\r\n", + "depends_on": "eval:doc.asset_type == \"Biomedical\"\r\n", "description": null, "docstatus": 0, "doctype": "Custom Field", "dt": "Work_Order", "fetch_from": null, "fetch_if_empty": 0, - "fieldname": "custom_office_noname", - "fieldtype": "Data", + "fieldname": "custom_pending_reason", + "fieldtype": "Select", "hidden": 0, "hide_border": 0, "hide_days": 0, @@ -4618,20 +4674,20 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "custom_floor_number", + "insert_after": "supplier", "is_system_generated": 0, "is_virtual": 0, - "label": "Office No/Name", + "label": "Pending Reason", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2025-06-19 11:07:15.835772", + "modified": "2025-06-19 11:04:46.394902", "module": "Asset Lite", - "name": "Work_Order-custom_office_noname", + "name": "Work_Order-custom_pending_reason", "no_copy": 0, "non_negative": 0, - "options": null, - "permlevel": 0, + "options": "\nNeed Part\nWaiting For Quotation\nWaiting For PO\nWaiting For Part Delivery", + "permlevel": 2, "precision": "", "print_hide": 0, "print_hide_if_no_value": 0, @@ -4774,7 +4830,63 @@ "dt": "Asset Maintenance Log", "fetch_from": null, "fetch_if_empty": 0, - "fieldname": "custom_early_completion_reason", + "fieldname": "custom_accepted_by_moh_", + "fieldtype": "Check", + "hidden": 0, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_preview": 0, + "in_standard_filter": 0, + "insert_after": "custom_early_completion_reason", + "is_system_generated": 0, + "is_virtual": 0, + "label": "Accepted By MOH", + "length": 0, + "link_filters": null, + "mandatory_depends_on": "eval:doc.custom_early_completion== \"Yes\"", + "modified": "2025-04-22 12:51:48.474950", + "module": "Asset Lite", + "name": "Asset Maintenance Log-custom_accepted_by_moh_", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": null, + "read_only": 0, + "read_only_depends_on": null, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "show_dashboard": 0, + "sort_options": 0, + "translatable": 0, + "unique": 0, + "width": null + }, + { + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": null, + "depends_on": "eval:doc.asset_type == \"Non Biomedical\"\r\n", + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Work_Order", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_floor_number", "fieldtype": "Data", "hidden": 0, "hide_border": 0, @@ -4786,16 +4898,16 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "completion_date", + "insert_after": "custom_pending_reason", "is_system_generated": 0, "is_virtual": 0, - "label": "Early Completion Reason", + "label": "Floor Number", "length": 0, "link_filters": null, - "mandatory_depends_on": "eval:doc.custom_early_completion== \"Yes\"", - "modified": "2025-04-22 12:51:48.722813", + "mandatory_depends_on": null, + "modified": "2025-06-19 11:07:14.350945", "module": "Asset Lite", - "name": "Asset Maintenance Log-custom_early_completion_reason", + "name": "Work_Order-custom_floor_number", "no_copy": 0, "non_negative": 0, "options": null, @@ -4927,118 +5039,6 @@ "unique": 0, "width": null }, - { - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "collapsible_depends_on": null, - "columns": 0, - "default": null, - "depends_on": "eval:doc.custom_early_completion== \"Yes\"", - "description": null, - "docstatus": 0, - "doctype": "Custom Field", - "dt": "Asset Maintenance Log", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_accepted_by_moh_", - "fieldtype": "Check", - "hidden": 0, - "hide_border": 0, - "hide_days": 0, - "hide_seconds": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_preview": 0, - "in_standard_filter": 0, - "insert_after": "custom_early_completion_reason", - "is_system_generated": 0, - "is_virtual": 0, - "label": "Accepted By MOH", - "length": 0, - "link_filters": null, - "mandatory_depends_on": "eval:doc.custom_early_completion== \"Yes\"", - "modified": "2025-04-22 12:51:48.474950", - "module": "Asset Lite", - "name": "Asset Maintenance Log-custom_accepted_by_moh_", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": null, - "read_only": 0, - "read_only_depends_on": null, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "show_dashboard": 0, - "sort_options": 0, - "translatable": 0, - "unique": 0, - "width": null - }, - { - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "collapsible_depends_on": null, - "columns": 0, - "default": null, - "depends_on": null, - "description": null, - "docstatus": 0, - "doctype": "Custom Field", - "dt": "Asset Maintenance", - "fetch_from": "asset_name.custom__service_contract", - "fetch_if_empty": 0, - "fieldname": "custom_service_contract", - "fieldtype": "Check", - "hidden": 1, - "hide_border": 0, - "hide_days": 0, - "hide_seconds": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_preview": 0, - "in_standard_filter": 0, - "insert_after": "custom_service_coverage", - "is_system_generated": 0, - "is_virtual": 0, - "label": "Service Contract", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2025-04-22 12:52:25.013697", - "module": "Asset Lite", - "name": "Asset Maintenance-custom_service_contract", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": null, - "read_only": 1, - "read_only_depends_on": null, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "show_dashboard": 0, - "sort_options": 0, - "translatable": 0, - "unique": 0, - "width": null - }, { "allow_in_quick_entry": 0, "allow_on_submit": 0, @@ -5095,118 +5095,6 @@ "unique": 0, "width": null }, - { - "allow_in_quick_entry": 0, - "allow_on_submit": 1, - "bold": 0, - "collapsible": 0, - "collapsible_depends_on": null, - "columns": 0, - "default": null, - "depends_on": null, - "description": null, - "docstatus": 0, - "doctype": "Custom Field", - "dt": "Asset", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_modality", - "fieldtype": "Link", - "hidden": 0, - "hide_border": 0, - "hide_days": 0, - "hide_seconds": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_preview": 0, - "in_standard_filter": 0, - "insert_after": "custom_up_time", - "is_system_generated": 0, - "is_virtual": 0, - "label": "Modality", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2025-09-08 14:59:03.579899", - "module": "Asset Lite", - "name": "Asset-custom_modality", - "no_copy": 0, - "non_negative": 0, - "options": "Modality", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": null, - "read_only": 0, - "read_only_depends_on": null, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "show_dashboard": 0, - "sort_options": 0, - "translatable": 0, - "unique": 0, - "width": null - }, - { - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "collapsible_depends_on": null, - "columns": 0, - "default": null, - "depends_on": null, - "description": null, - "docstatus": 0, - "doctype": "Custom Field", - "dt": "Asset", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_column_break_ogoce", - "fieldtype": "Column Break", - "hidden": 0, - "hide_border": 0, - "hide_days": 0, - "hide_seconds": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_preview": 0, - "in_standard_filter": 0, - "insert_after": "custom_modality", - "is_system_generated": 0, - "is_virtual": 0, - "label": "", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2025-04-22 12:52:29.219032", - "module": "Asset Lite", - "name": "Asset-custom_column_break_ogoce", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": null, - "read_only": 0, - "read_only_depends_on": null, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "show_dashboard": 0, - "sort_options": 0, - "translatable": 0, - "unique": 0, - "width": null - }, { "allow_in_quick_entry": 0, "allow_on_submit": 0, @@ -5271,15 +5159,15 @@ "collapsible_depends_on": null, "columns": 0, "default": null, - "depends_on": "", + "depends_on": "eval:doc.asset_type == \"Non Biomedical\"\r\n", "description": null, "docstatus": 0, "doctype": "Custom Field", - "dt": "Asset Maintenance", - "fetch_from": "asset_name.custom_service_contract_status", + "dt": "Work_Order", + "fetch_from": null, "fetch_if_empty": 0, - "fieldname": "custom_service_contract_status", - "fieldtype": "Select", + "fieldname": "custom_office_noname", + "fieldtype": "Data", "hidden": 0, "hide_border": 0, "hide_days": 0, @@ -5290,19 +5178,75 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "custom_service_contract", + "insert_after": "custom_floor_number", "is_system_generated": 0, "is_virtual": 0, - "label": "Service Contract Status", + "label": "Office No/Name", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2025-04-22 12:52:26.558827", + "modified": "2025-06-19 11:07:15.835772", "module": "Asset Lite", - "name": "Asset Maintenance-custom_service_contract_status", + "name": "Work_Order-custom_office_noname", "no_copy": 0, "non_negative": 0, - "options": "\nActive\nExpired\nNot Applicable", + "options": null, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": null, + "read_only": 0, + "read_only_depends_on": null, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "show_dashboard": 0, + "sort_options": 0, + "translatable": 0, + "unique": 0, + "width": null + }, + { + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": null, + "depends_on": null, + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Asset Maintenance", + "fetch_from": "asset_name.custom__service_contract", + "fetch_if_empty": 0, + "fieldname": "custom_service_contract", + "fieldtype": "Check", + "hidden": 1, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_preview": 0, + "in_standard_filter": 0, + "insert_after": "custom_service_coverage", + "is_system_generated": 0, + "is_virtual": 0, + "label": "Service Contract", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2025-04-22 12:52:25.013697", + "module": "Asset Lite", + "name": "Asset Maintenance-custom_service_contract", + "no_copy": 0, + "non_negative": 0, + "options": null, "permlevel": 0, "precision": "", "print_hide": 0, @@ -5319,6 +5263,62 @@ "unique": 0, "width": null }, + { + "allow_in_quick_entry": 0, + "allow_on_submit": 1, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": null, + "depends_on": null, + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Asset", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_modality", + "fieldtype": "Link", + "hidden": 0, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_preview": 0, + "in_standard_filter": 0, + "insert_after": "custom_up_time", + "is_system_generated": 0, + "is_virtual": 0, + "label": "Modality", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2025-09-08 14:59:03.579899", + "module": "Asset Lite", + "name": "Asset-custom_modality", + "no_copy": 0, + "non_negative": 0, + "options": "Modality", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": null, + "read_only": 0, + "read_only_depends_on": null, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "show_dashboard": 0, + "sort_options": 0, + "translatable": 0, + "unique": 0, + "width": null + }, { "allow_in_quick_entry": 0, "allow_on_submit": 0, @@ -5439,16 +5439,16 @@ "collapsible_depends_on": null, "columns": 0, "default": null, - "depends_on": null, + "depends_on": "", "description": null, "docstatus": 0, "doctype": "Custom Field", "dt": "Asset Maintenance", - "fetch_from": "asset_name.custom_service_agreement", + "fetch_from": "asset_name.custom_service_contract_status", "fetch_if_empty": 0, - "fieldname": "custom_service_agreement", + "fieldname": "custom_service_contract_status", "fieldtype": "Select", - "hidden": 1, + "hidden": 0, "hide_border": 0, "hide_days": 0, "hide_seconds": 0, @@ -5458,25 +5458,25 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "custom_service_contract_status", + "insert_after": "custom_service_contract", "is_system_generated": 0, "is_virtual": 0, - "label": "Service Agreement", + "label": "Service Contract Status", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2025-04-22 12:51:54.134231", + "modified": "2025-04-22 12:52:26.558827", "module": "Asset Lite", - "name": "Asset Maintenance-custom_service_agreement", + "name": "Asset Maintenance-custom_service_contract_status", "no_copy": 0, "non_negative": 0, - "options": "Warranty\nContract\nFrame Work", + "options": "\nActive\nExpired\nNot Applicable", "permlevel": 0, "precision": "", "print_hide": 0, "print_hide_if_no_value": 0, "print_width": null, - "read_only": 0, + "read_only": 1, "read_only_depends_on": null, "report_hide": 0, "reqd": 0, @@ -5543,62 +5543,6 @@ "unique": 0, "width": null }, - { - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "collapsible_depends_on": null, - "columns": 0, - "default": null, - "depends_on": "eval:doc.work_order_type == \"Recall\"", - "description": null, - "docstatus": 0, - "doctype": "Custom Field", - "dt": "Work_Order", - "fetch_from": "asset.custom_umdns_device_name", - "fetch_if_empty": 0, - "fieldname": "custom_umdns_device_name", - "fieldtype": "Data", - "hidden": 1, - "hide_border": 0, - "hide_days": 0, - "hide_seconds": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_preview": 0, - "in_standard_filter": 0, - "insert_after": "make", - "is_system_generated": 0, - "is_virtual": 0, - "label": "UMDNS Device Name", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2025-04-22 12:52:12.762916", - "module": "Asset Lite", - "name": "Work_Order-custom_umdns_device_name", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": null, - "read_only": 0, - "read_only_depends_on": null, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "show_dashboard": 0, - "sort_options": 0, - "translatable": 0, - "unique": 0, - "width": null - }, { "allow_in_quick_entry": 0, "allow_on_submit": 0, @@ -5667,11 +5611,11 @@ "description": null, "docstatus": 0, "doctype": "Custom Field", - "dt": "Asset Maintenance", + "dt": "Asset", "fetch_from": null, "fetch_if_empty": 0, - "fieldname": "custom_abc", - "fieldtype": "Column Break", + "fieldname": "custom_moh_id", + "fieldtype": "Data", "hidden": 0, "hide_border": 0, "hide_days": 0, @@ -5682,16 +5626,72 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "custom_service_agreement", + "insert_after": "custom_modality", "is_system_generated": 0, "is_virtual": 0, - "label": "", + "label": "MOH ID", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2025-04-22 12:52:55.682724", + "modified": "2026-08-24 12:21:40.703453", "module": "Asset Lite", - "name": "Asset Maintenance-custom_abc", + "name": "Asset-custom_moh_id", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": null, + "read_only": 0, + "read_only_depends_on": null, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "show_dashboard": 0, + "sort_options": 0, + "translatable": 1, + "unique": 0, + "width": null + }, + { + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": null, + "depends_on": null, + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Work_Order", + "fetch_from": "aseet_id.custom_moh_id", + "fetch_if_empty": 1, + "fieldname": "custom_moh_id", + "fieldtype": "Data", + "hidden": 0, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_preview": 0, + "in_standard_filter": 0, + "insert_after": "custom_office_noname", + "is_system_generated": 0, + "is_virtual": 0, + "label": "MOH ID", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2026-08-24 12:21:38.947921", + "module": "Asset Lite", + "name": "Work_Order-custom_moh_id", "no_copy": 0, "non_negative": 0, "options": null, @@ -5726,8 +5726,8 @@ "dt": "Asset", "fetch_from": null, "fetch_if_empty": 0, - "fieldname": "custom_room_number", - "fieldtype": "Data", + "fieldname": "custom_column_break_ogoce", + "fieldtype": "Column Break", "hidden": 0, "hide_border": 0, "hide_days": 0, @@ -5738,16 +5738,128 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "department", + "insert_after": "custom_moh_id", "is_system_generated": 0, "is_virtual": 0, - "label": "Room Number", + "label": "", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2025-04-22 12:52:28.883544", + "modified": "2025-04-22 12:52:29.219032", "module": "Asset Lite", - "name": "Asset-custom_room_number", + "name": "Asset-custom_column_break_ogoce", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": null, + "read_only": 0, + "read_only_depends_on": null, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "show_dashboard": 0, + "sort_options": 0, + "translatable": 0, + "unique": 0, + "width": null + }, + { + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": null, + "depends_on": null, + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Asset Maintenance", + "fetch_from": "asset_name.custom_service_agreement", + "fetch_if_empty": 0, + "fieldname": "custom_service_agreement", + "fieldtype": "Select", + "hidden": 1, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_preview": 0, + "in_standard_filter": 0, + "insert_after": "custom_service_contract_status", + "is_system_generated": 0, + "is_virtual": 0, + "label": "Service Agreement", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2025-04-22 12:51:54.134231", + "module": "Asset Lite", + "name": "Asset Maintenance-custom_service_agreement", + "no_copy": 0, + "non_negative": 0, + "options": "Warranty\nContract\nFrame Work", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": null, + "read_only": 0, + "read_only_depends_on": null, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "show_dashboard": 0, + "sort_options": 0, + "translatable": 0, + "unique": 0, + "width": null + }, + { + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": null, + "depends_on": null, + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Asset Maintenance", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_abc", + "fieldtype": "Column Break", + "hidden": 0, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_preview": 0, + "in_standard_filter": 0, + "insert_after": "custom_service_agreement", + "is_system_generated": 0, + "is_virtual": 0, + "label": "", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2025-04-22 12:52:55.682724", + "module": "Asset Lite", + "name": "Asset Maintenance-custom_abc", "no_copy": 0, "non_negative": 0, "options": null, @@ -5823,6 +5935,286 @@ "unique": 0, "width": null }, + { + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": null, + "depends_on": null, + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Asset Maintenance Log", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_hours_section", + "fieldtype": "Section Break", + "hidden": 0, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_preview": 0, + "in_standard_filter": 0, + "insert_after": "actions_performed", + "is_system_generated": 0, + "is_virtual": 0, + "label": "", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2025-04-22 12:52:32.515417", + "module": "Asset Lite", + "name": "Asset Maintenance Log-custom_hours_section", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": null, + "read_only": 0, + "read_only_depends_on": null, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "show_dashboard": 0, + "sort_options": 0, + "translatable": 0, + "unique": 0, + "width": null + }, + { + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": null, + "depends_on": null, + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Asset", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_room_number", + "fieldtype": "Data", + "hidden": 0, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_preview": 0, + "in_standard_filter": 0, + "insert_after": "department", + "is_system_generated": 0, + "is_virtual": 0, + "label": "Room Number", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2025-04-22 12:52:28.883544", + "module": "Asset Lite", + "name": "Asset-custom_room_number", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": null, + "read_only": 0, + "read_only_depends_on": null, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "show_dashboard": 0, + "sort_options": 0, + "translatable": 0, + "unique": 0, + "width": null + }, + { + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": null, + "depends_on": "", + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Asset Maintenance", + "fetch_from": "asset_name.custom_start_date", + "fetch_if_empty": 0, + "fieldname": "custom_start_date", + "fieldtype": "Data", + "hidden": 1, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_preview": 0, + "in_standard_filter": 0, + "insert_after": "custom_frequency", + "is_system_generated": 0, + "is_virtual": 0, + "label": "Start Date", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2025-04-22 12:52:26.096420", + "module": "Asset Lite", + "name": "Asset Maintenance-custom_start_date", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": null, + "read_only": 1, + "read_only_depends_on": null, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "show_dashboard": 0, + "sort_options": 0, + "translatable": 0, + "unique": 0, + "width": null + }, + { + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": null, + "depends_on": null, + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Asset Maintenance Log", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_total_main_hour_at_site", + "fieldtype": "Data", + "hidden": 0, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_preview": 0, + "in_standard_filter": 0, + "insert_after": "custom_hours_section", + "is_system_generated": 0, + "is_virtual": 0, + "label": "Total Main Hour At Site", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2025-04-22 12:52:32.333485", + "module": "Asset Lite", + "name": "Asset Maintenance Log-custom_total_main_hour_at_site", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": null, + "read_only": 0, + "read_only_depends_on": null, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "show_dashboard": 0, + "sort_options": 0, + "translatable": 0, + "unique": 0, + "width": null + }, + { + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": null, + "depends_on": "eval:doc.work_order_type == \"Recall\"", + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Work_Order", + "fetch_from": "asset.custom_umdns_device_name", + "fetch_if_empty": 0, + "fieldname": "custom_umdns_device_name", + "fieldtype": "Data", + "hidden": 1, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_preview": 0, + "in_standard_filter": 0, + "insert_after": "make", + "is_system_generated": 0, + "is_virtual": 0, + "label": "UMDNS Device Name", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2025-04-22 12:52:12.762916", + "module": "Asset Lite", + "name": "Work_Order-custom_umdns_device_name", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": null, + "read_only": 0, + "read_only_depends_on": null, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "show_dashboard": 0, + "sort_options": 0, + "translatable": 0, + "unique": 0, + "width": null + }, { "allow_in_quick_entry": 0, "allow_on_submit": 0, @@ -5892,9 +6284,9 @@ "docstatus": 0, "doctype": "Custom Field", "dt": "Asset Maintenance", - "fetch_from": "asset_name.custom_start_date", + "fetch_from": "asset_name.custom_end_date", "fetch_if_empty": 0, - "fieldname": "custom_start_date", + "fieldname": "custom_end_date", "fieldtype": "Data", "hidden": 1, "hide_border": 0, @@ -5906,16 +6298,16 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "custom_frequency", + "insert_after": "custom_start_date", "is_system_generated": 0, "is_virtual": 0, - "label": "Start Date", + "label": "End Date", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2025-04-22 12:52:26.096420", + "modified": "2025-04-22 12:52:26.379383", "module": "Asset Lite", - "name": "Asset Maintenance-custom_start_date", + "name": "Asset Maintenance-custom_end_date", "no_copy": 0, "non_negative": 0, "options": null, @@ -5935,6 +6327,62 @@ "unique": 0, "width": null }, + { + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": null, + "depends_on": null, + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Asset Maintenance Log", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_serviced_by", + "fieldtype": "Data", + "hidden": 0, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_preview": 0, + "in_standard_filter": 0, + "insert_after": "custom_total_main_hour_at_site", + "is_system_generated": 0, + "is_virtual": 0, + "label": "Serviced By", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2025-04-22 12:52:32.167119", + "module": "Asset Lite", + "name": "Asset Maintenance Log-custom_serviced_by", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": null, + "read_only": 0, + "read_only_depends_on": null, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "show_dashboard": 0, + "sort_options": 0, + "translatable": 0, + "unique": 0, + "width": null + }, { "allow_in_quick_entry": 0, "allow_on_submit": 0, @@ -6003,12 +6451,12 @@ "description": null, "docstatus": 0, "doctype": "Custom Field", - "dt": "Asset Maintenance Log", - "fetch_from": null, + "dt": "Asset Maintenance", + "fetch_from": "asset_name.custom_starting_date", "fetch_if_empty": 0, - "fieldname": "custom_hours_section", - "fieldtype": "Section Break", - "hidden": 0, + "fieldname": "custom_starting_date", + "fieldtype": "Date", + "hidden": 1, "hide_border": 0, "hide_days": 0, "hide_seconds": 0, @@ -6018,16 +6466,16 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "actions_performed", + "insert_after": "custom_end_date", "is_system_generated": 0, "is_virtual": 0, - "label": "", + "label": "Starting Date", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2025-04-22 12:52:32.515417", + "modified": "2025-04-22 12:52:55.870985", "module": "Asset Lite", - "name": "Asset Maintenance Log-custom_hours_section", + "name": "Asset Maintenance-custom_starting_date", "no_copy": 0, "non_negative": 0, "options": null, @@ -6055,16 +6503,16 @@ "collapsible_depends_on": null, "columns": 0, "default": null, - "depends_on": "", + "depends_on": null, "description": null, "docstatus": 0, "doctype": "Custom Field", - "dt": "Asset Maintenance", - "fetch_from": "asset_name.custom_end_date", + "dt": "Asset Maintenance Log", + "fetch_from": null, "fetch_if_empty": 0, - "fieldname": "custom_end_date", + "fieldname": "custom_signature", "fieldtype": "Data", - "hidden": 1, + "hidden": 0, "hide_border": 0, "hide_days": 0, "hide_seconds": 0, @@ -6074,16 +6522,16 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "custom_start_date", + "insert_after": "custom_serviced_by", "is_system_generated": 0, "is_virtual": 0, - "label": "End Date", + "label": "Signature", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2025-04-22 12:52:26.379383", + "modified": "2025-04-22 12:52:32.002576", "module": "Asset Lite", - "name": "Asset Maintenance-custom_end_date", + "name": "Asset Maintenance Log-custom_signature", "no_copy": 0, "non_negative": 0, "options": null, @@ -6092,7 +6540,7 @@ "print_hide": 0, "print_hide_if_no_value": 0, "print_width": null, - "read_only": 1, + "read_only": 0, "read_only_depends_on": null, "report_hide": 0, "reqd": 0, @@ -6171,11 +6619,11 @@ "description": null, "docstatus": 0, "doctype": "Custom Field", - "dt": "Asset Maintenance Log", - "fetch_from": null, + "dt": "Asset Maintenance", + "fetch_from": "asset_name.custom_total_amount", "fetch_if_empty": 0, - "fieldname": "custom_total_main_hour_at_site", - "fieldtype": "Data", + "fieldname": "custom_total_amount", + "fieldtype": "Currency", "hidden": 0, "hide_border": 0, "hide_days": 0, @@ -6186,16 +6634,16 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "custom_hours_section", + "insert_after": "custom_starting_date", "is_system_generated": 0, "is_virtual": 0, - "label": "Total Main Hour At Site", + "label": "Total Amount", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2025-04-22 12:52:32.333485", + "modified": "2025-04-22 12:51:54.961473", "module": "Asset Lite", - "name": "Asset Maintenance Log-custom_total_main_hour_at_site", + "name": "Asset Maintenance-custom_total_amount", "no_copy": 0, "non_negative": 0, "options": null, @@ -6227,12 +6675,12 @@ "description": null, "docstatus": 0, "doctype": "Custom Field", - "dt": "Asset Maintenance", - "fetch_from": "asset_name.custom_starting_date", + "dt": "Asset Maintenance Log", + "fetch_from": null, "fetch_if_empty": 0, - "fieldname": "custom_starting_date", + "fieldname": "custom_date", "fieldtype": "Date", - "hidden": 1, + "hidden": 0, "hide_border": 0, "hide_days": 0, "hide_seconds": 0, @@ -6242,16 +6690,16 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "custom_end_date", + "insert_after": "custom_signature", "is_system_generated": 0, "is_virtual": 0, - "label": "Starting Date", + "label": "Date", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2025-04-22 12:52:55.870985", + "modified": "2025-04-22 12:52:31.814892", "module": "Asset Lite", - "name": "Asset Maintenance-custom_starting_date", + "name": "Asset Maintenance Log-custom_date", "no_copy": 0, "non_negative": 0, "options": null, @@ -6339,11 +6787,11 @@ "description": null, "docstatus": 0, "doctype": "Custom Field", - "dt": "Asset Maintenance Log", + "dt": "Asset Maintenance", "fetch_from": null, "fetch_if_empty": 0, - "fieldname": "custom_serviced_by", - "fieldtype": "Data", + "fieldname": "custom_no_of_pms", + "fieldtype": "Int", "hidden": 0, "hide_border": 0, "hide_days": 0, @@ -6354,16 +6802,16 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "custom_total_main_hour_at_site", + "insert_after": "custom_total_amount", "is_system_generated": 0, "is_virtual": 0, - "label": "Serviced By", + "label": "Total No of PMs", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2025-04-22 12:52:32.167119", + "modified": "2025-04-22 12:51:48.227693", "module": "Asset Lite", - "name": "Asset Maintenance Log-custom_serviced_by", + "name": "Asset Maintenance-custom_no_of_pms", "no_copy": 0, "non_negative": 0, "options": null, @@ -6395,11 +6843,11 @@ "description": null, "docstatus": 0, "doctype": "Custom Field", - "dt": "Asset Maintenance", - "fetch_from": "asset_name.custom_total_amount", + "dt": "Asset Maintenance Log", + "fetch_from": null, "fetch_if_empty": 0, - "fieldname": "custom_total_amount", - "fieldtype": "Currency", + "fieldname": "custom_first_column", + "fieldtype": "Column Break", "hidden": 0, "hide_border": 0, "hide_days": 0, @@ -6410,16 +6858,16 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "custom_starting_date", + "insert_after": "custom_date", "is_system_generated": 0, "is_virtual": 0, - "label": "Total Amount", + "label": "", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2025-04-22 12:51:54.961473", + "modified": "2025-04-22 12:52:31.577023", "module": "Asset Lite", - "name": "Asset Maintenance-custom_total_amount", + "name": "Asset Maintenance Log-custom_first_column", "no_copy": 0, "non_negative": 0, "options": null, @@ -6439,62 +6887,6 @@ "unique": 0, "width": null }, - { - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "collapsible_depends_on": null, - "columns": 0, - "default": null, - "depends_on": "", - "description": null, - "docstatus": 0, - "doctype": "Custom Field", - "dt": "Work_Order", - "fetch_from": "", - "fetch_if_empty": 0, - "fieldname": "custom_ecri", - "fieldtype": "Data", - "hidden": 1, - "hide_border": 0, - "hide_days": 0, - "hide_seconds": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_preview": 0, - "in_standard_filter": 0, - "insert_after": "column_break_kmog", - "is_system_generated": 0, - "is_virtual": 0, - "label": "ECRI", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2025-04-22 12:52:12.358021", - "module": "Asset Lite", - "name": "Work_Order-custom_ecri", - "no_copy": 0, - "non_negative": 0, - "options": "ECRI UMDNS", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": null, - "read_only": 0, - "read_only_depends_on": null, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "show_dashboard": 0, - "sort_options": 0, - "translatable": 0, - "unique": 0, - "width": null - }, { "allow_in_quick_entry": 0, "allow_on_submit": 1, @@ -6563,11 +6955,11 @@ "description": null, "docstatus": 0, "doctype": "Custom Field", - "dt": "Asset Maintenance Log", + "dt": "Asset Maintenance", "fetch_from": null, "fetch_if_empty": 0, - "fieldname": "custom_signature", - "fieldtype": "Data", + "fieldname": "custom_price_per_pm", + "fieldtype": "Currency", "hidden": 0, "hide_border": 0, "hide_days": 0, @@ -6578,16 +6970,16 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "custom_serviced_by", + "insert_after": "custom_no_of_pms", "is_system_generated": 0, "is_virtual": 0, - "label": "Signature", + "label": "Price Per PM", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2025-04-22 12:52:32.002576", + "modified": "2025-04-22 12:51:47.978784", "module": "Asset Lite", - "name": "Asset Maintenance Log-custom_signature", + "name": "Asset Maintenance-custom_price_per_pm", "no_copy": 0, "non_negative": 0, "options": null, @@ -6619,11 +7011,11 @@ "description": null, "docstatus": 0, "doctype": "Custom Field", - "dt": "Asset Maintenance", + "dt": "Asset Maintenance Log", "fetch_from": null, "fetch_if_empty": 0, - "fieldname": "custom_no_of_pms", - "fieldtype": "Int", + "fieldname": "custom_total_travel_hour", + "fieldtype": "Data", "hidden": 0, "hide_border": 0, "hide_days": 0, @@ -6634,72 +7026,16 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "custom_total_amount", + "insert_after": "custom_first_column", "is_system_generated": 0, "is_virtual": 0, - "label": "Total No of PMs", + "label": "Total Travel Hour", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2025-04-22 12:51:48.227693", + "modified": "2025-04-22 12:52:31.388189", "module": "Asset Lite", - "name": "Asset Maintenance-custom_no_of_pms", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": null, - "read_only": 0, - "read_only_depends_on": null, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "show_dashboard": 0, - "sort_options": 0, - "translatable": 0, - "unique": 0, - "width": null - }, - { - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "collapsible_depends_on": null, - "columns": 0, - "default": null, - "depends_on": "eval:doc.asset_type == \"Biomedical\"\r\n", - "description": null, - "docstatus": 0, - "doctype": "Custom Field", - "dt": "Work_Order", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_coverage", - "fieldtype": "Section Break", - "hidden": 0, - "hide_border": 0, - "hide_days": 0, - "hide_seconds": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_preview": 0, - "in_standard_filter": 0, - "insert_after": "custom_ecri", - "is_system_generated": 0, - "is_virtual": 0, - "label": "Coverage", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2025-06-19 11:04:47.501263", - "module": "Asset Lite", - "name": "Work_Order-custom_coverage", + "name": "Asset Maintenance Log-custom_total_travel_hour", "no_copy": 0, "non_negative": 0, "options": null, @@ -6790,119 +7126,7 @@ "dt": "Asset Maintenance Log", "fetch_from": null, "fetch_if_empty": 0, - "fieldname": "custom_date", - "fieldtype": "Date", - "hidden": 0, - "hide_border": 0, - "hide_days": 0, - "hide_seconds": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_preview": 0, - "in_standard_filter": 0, - "insert_after": "custom_signature", - "is_system_generated": 0, - "is_virtual": 0, - "label": "Date", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2025-04-22 12:52:31.814892", - "module": "Asset Lite", - "name": "Asset Maintenance Log-custom_date", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": null, - "read_only": 0, - "read_only_depends_on": null, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "show_dashboard": 0, - "sort_options": 0, - "translatable": 0, - "unique": 0, - "width": null - }, - { - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "collapsible_depends_on": null, - "columns": 0, - "default": null, - "depends_on": null, - "description": null, - "docstatus": 0, - "doctype": "Custom Field", - "dt": "Asset Maintenance", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_price_per_pm", - "fieldtype": "Currency", - "hidden": 0, - "hide_border": 0, - "hide_days": 0, - "hide_seconds": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_preview": 0, - "in_standard_filter": 0, - "insert_after": "custom_no_of_pms", - "is_system_generated": 0, - "is_virtual": 0, - "label": "Price Per PM", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2025-04-22 12:51:47.978784", - "module": "Asset Lite", - "name": "Asset Maintenance-custom_price_per_pm", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": null, - "read_only": 0, - "read_only_depends_on": null, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "show_dashboard": 0, - "sort_options": 0, - "translatable": 0, - "unique": 0, - "width": null - }, - { - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "collapsible_depends_on": null, - "columns": 0, - "default": null, - "depends_on": null, - "description": null, - "docstatus": 0, - "doctype": "Custom Field", - "dt": "Work_Order", - "fetch_from": "asset.custom_site_contractor", - "fetch_if_empty": 1, - "fieldname": "custom_site_contractor", + "fieldname": "custom_end_user", "fieldtype": "Data", "hidden": 0, "hide_border": 0, @@ -6914,16 +7138,16 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "custom_coverage", + "insert_after": "custom_total_travel_hour", "is_system_generated": 0, "is_virtual": 0, - "label": "Site Contractor", + "label": "End user", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2025-04-22 12:51:49.478723", + "modified": "2025-04-22 12:52:31.213065", "module": "Asset Lite", - "name": "Work_Order-custom_site_contractor", + "name": "Asset Maintenance Log-custom_end_user", "no_copy": 0, "non_negative": 0, "options": null, @@ -6943,6 +7167,62 @@ "unique": 0, "width": null }, + { + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": null, + "depends_on": "", + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Work_Order", + "fetch_from": "", + "fetch_if_empty": 0, + "fieldname": "custom_ecri", + "fieldtype": "Data", + "hidden": 1, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_preview": 0, + "in_standard_filter": 0, + "insert_after": "column_break_kmog", + "is_system_generated": 0, + "is_virtual": 0, + "label": "ECRI", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2025-04-22 12:52:12.358021", + "module": "Asset Lite", + "name": "Work_Order-custom_ecri", + "no_copy": 0, + "non_negative": 0, + "options": "ECRI UMDNS", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": null, + "read_only": 0, + "read_only_depends_on": null, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "show_dashboard": 0, + "sort_options": 0, + "translatable": 0, + "unique": 0, + "width": null + }, { "allow_in_quick_entry": 0, "allow_on_submit": 0, @@ -7014,63 +7294,7 @@ "dt": "Asset Maintenance Log", "fetch_from": null, "fetch_if_empty": 0, - "fieldname": "custom_first_column", - "fieldtype": "Column Break", - "hidden": 0, - "hide_border": 0, - "hide_days": 0, - "hide_seconds": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_preview": 0, - "in_standard_filter": 0, - "insert_after": "custom_date", - "is_system_generated": 0, - "is_virtual": 0, - "label": "", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2025-04-22 12:52:31.577023", - "module": "Asset Lite", - "name": "Asset Maintenance Log-custom_first_column", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": null, - "read_only": 0, - "read_only_depends_on": null, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "show_dashboard": 0, - "sort_options": 0, - "translatable": 0, - "unique": 0, - "width": null - }, - { - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "collapsible_depends_on": null, - "columns": 0, - "default": null, - "depends_on": null, - "description": null, - "docstatus": 0, - "doctype": "Custom Field", - "dt": "Work_Order", - "fetch_from": "asset.custom_subcontractor", - "fetch_if_empty": 1, - "fieldname": "custom_subcontractor", + "fieldname": "custom_signature1", "fieldtype": "Data", "hidden": 0, "hide_border": 0, @@ -7082,72 +7306,16 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "custom_site_contractor", + "insert_after": "custom_end_user", "is_system_generated": 0, "is_virtual": 0, - "label": "Subcontractor", + "label": "Signature", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2025-04-22 12:51:50.358933", + "modified": "2025-04-22 12:52:31.015797", "module": "Asset Lite", - "name": "Work_Order-custom_subcontractor", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": null, - "read_only": 0, - "read_only_depends_on": null, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "show_dashboard": 0, - "sort_options": 0, - "translatable": 0, - "unique": 0, - "width": null - }, - { - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "collapsible_depends_on": null, - "columns": 0, - "default": null, - "depends_on": null, - "description": null, - "docstatus": 0, - "doctype": "Custom Field", - "dt": "Asset Maintenance Log", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_total_travel_hour", - "fieldtype": "Data", - "hidden": 0, - "hide_border": 0, - "hide_days": 0, - "hide_seconds": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_preview": 0, - "in_standard_filter": 0, - "insert_after": "custom_first_column", - "is_system_generated": 0, - "is_virtual": 0, - "label": "Total Travel Hour", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2025-04-22 12:52:31.388189", - "module": "Asset Lite", - "name": "Asset Maintenance Log-custom_total_travel_hour", + "name": "Asset Maintenance Log-custom_signature1", "no_copy": 0, "non_negative": 0, "options": null, @@ -7223,6 +7391,622 @@ "unique": 0, "width": null }, + { + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": null, + "depends_on": null, + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Asset Maintenance Log", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_date1", + "fieldtype": "Date", + "hidden": 0, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_preview": 0, + "in_standard_filter": 0, + "insert_after": "custom_signature1", + "is_system_generated": 0, + "is_virtual": 0, + "label": "Date", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2025-04-22 12:52:30.853560", + "module": "Asset Lite", + "name": "Asset Maintenance Log-custom_date1", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": null, + "read_only": 0, + "read_only_depends_on": null, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "show_dashboard": 0, + "sort_options": 0, + "translatable": 0, + "unique": 0, + "width": null + }, + { + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": null, + "depends_on": null, + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Work_Order", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_delete_status", + "fieldtype": "Select", + "hidden": 0, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_preview": 0, + "in_standard_filter": 0, + "insert_after": "custom_ecri", + "is_system_generated": 0, + "is_virtual": 0, + "label": "Delete Status", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2026-08-24 12:21:38.693348", + "module": "Asset Lite", + "name": "Work_Order-custom_delete_status", + "no_copy": 0, + "non_negative": 0, + "options": "\nDeleted", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": null, + "read_only": 0, + "read_only_depends_on": null, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "show_dashboard": 0, + "sort_options": 0, + "translatable": 0, + "unique": 0, + "width": null + }, + { + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": null, + "depends_on": "eval:doc.asset_type == \"Biomedical\"\r\n", + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Work_Order", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_coverage", + "fieldtype": "Section Break", + "hidden": 0, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_preview": 0, + "in_standard_filter": 0, + "insert_after": "custom_delete_status", + "is_system_generated": 0, + "is_virtual": 0, + "label": "Coverage", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2025-06-19 11:04:47.501263", + "module": "Asset Lite", + "name": "Work_Order-custom_coverage", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": null, + "read_only": 0, + "read_only_depends_on": null, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "show_dashboard": 0, + "sort_options": 0, + "translatable": 0, + "unique": 0, + "width": null + }, + { + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": null, + "depends_on": null, + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Asset Maintenance Log", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_second_column", + "fieldtype": "Column Break", + "hidden": 0, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_preview": 0, + "in_standard_filter": 0, + "insert_after": "custom_date1", + "is_system_generated": 0, + "is_virtual": 0, + "label": "", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2025-04-22 12:52:30.689613", + "module": "Asset Lite", + "name": "Asset Maintenance Log-custom_second_column", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": null, + "read_only": 0, + "read_only_depends_on": null, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "show_dashboard": 0, + "sort_options": 0, + "translatable": 0, + "unique": 0, + "width": null + }, + { + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": null, + "depends_on": null, + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Asset", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_floor", + "fieldtype": "Data", + "hidden": 0, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_preview": 0, + "in_standard_filter": 0, + "insert_after": "custom_attach_image", + "is_system_generated": 0, + "is_virtual": 0, + "label": "Floor", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2026-08-24 12:21:41.104942", + "module": "Asset Lite", + "name": "Asset-custom_floor", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": null, + "read_only": 0, + "read_only_depends_on": null, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "show_dashboard": 0, + "sort_options": 0, + "translatable": 1, + "unique": 0, + "width": null + }, + { + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": null, + "depends_on": null, + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Work_Order", + "fetch_from": "asset.custom_site_contractor", + "fetch_if_empty": 1, + "fieldname": "custom_site_contractor", + "fieldtype": "Data", + "hidden": 0, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_preview": 0, + "in_standard_filter": 0, + "insert_after": "custom_coverage", + "is_system_generated": 0, + "is_virtual": 0, + "label": "Site Contractor", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2025-04-22 12:51:49.478723", + "module": "Asset Lite", + "name": "Work_Order-custom_site_contractor", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": null, + "read_only": 0, + "read_only_depends_on": null, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "show_dashboard": 0, + "sort_options": 0, + "translatable": 0, + "unique": 0, + "width": null + }, + { + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": null, + "depends_on": null, + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Asset Maintenance Log", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_total_hours", + "fieldtype": "Data", + "hidden": 0, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_preview": 0, + "in_standard_filter": 0, + "insert_after": "custom_second_column", + "is_system_generated": 0, + "is_virtual": 0, + "label": "Total Hours", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2025-04-22 12:52:30.166039", + "module": "Asset Lite", + "name": "Asset Maintenance Log-custom_total_hours", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": null, + "read_only": 0, + "read_only_depends_on": null, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "show_dashboard": 0, + "sort_options": 0, + "translatable": 0, + "unique": 0, + "width": null + }, + { + "allow_in_quick_entry": 0, + "allow_on_submit": 1, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": null, + "depends_on": null, + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Asset", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_moh_engg", + "fieldtype": "Link", + "hidden": 0, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_preview": 0, + "in_standard_filter": 0, + "insert_after": "custom_floor", + "is_system_generated": 0, + "is_virtual": 0, + "label": "MOH Engg", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2026-08-24 12:21:40.238657", + "module": "Asset Lite", + "name": "Asset-custom_moh_engg", + "no_copy": 0, + "non_negative": 0, + "options": "User", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": null, + "read_only": 0, + "read_only_depends_on": null, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "show_dashboard": 0, + "sort_options": 0, + "translatable": 0, + "unique": 0, + "width": null + }, + { + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": null, + "depends_on": null, + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Work_Order", + "fetch_from": "asset.custom_subcontractor", + "fetch_if_empty": 1, + "fieldname": "custom_subcontractor", + "fieldtype": "Data", + "hidden": 0, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_preview": 0, + "in_standard_filter": 0, + "insert_after": "custom_site_contractor", + "is_system_generated": 0, + "is_virtual": 0, + "label": "Subcontractor", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2025-04-22 12:51:50.358933", + "module": "Asset Lite", + "name": "Work_Order-custom_subcontractor", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": null, + "read_only": 0, + "read_only_depends_on": null, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "show_dashboard": 0, + "sort_options": 0, + "translatable": 0, + "unique": 0, + "width": null + }, + { + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": null, + "depends_on": null, + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Asset Maintenance Log", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_bio_med_dept", + "fieldtype": "Data", + "hidden": 0, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_preview": 0, + "in_standard_filter": 0, + "insert_after": "custom_total_hours", + "is_system_generated": 0, + "is_virtual": 0, + "label": "Bio Med Dept", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2025-04-22 12:52:29.934255", + "module": "Asset Lite", + "name": "Asset Maintenance Log-custom_bio_med_dept", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": null, + "read_only": 0, + "read_only_depends_on": null, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "show_dashboard": 0, + "sort_options": 0, + "translatable": 0, + "unique": 0, + "width": null + }, + { + "allow_in_quick_entry": 0, + "allow_on_submit": 1, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": null, + "depends_on": null, + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Asset", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_smeh_engg", + "fieldtype": "Link", + "hidden": 0, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_preview": 0, + "in_standard_filter": 0, + "insert_after": "custom_moh_engg", + "is_system_generated": 0, + "is_virtual": 0, + "label": "SMEH Engg", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2026-08-24 12:21:39.787508", + "module": "Asset Lite", + "name": "Asset-custom_smeh_engg", + "no_copy": 0, + "non_negative": 0, + "options": "User", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": null, + "read_only": 0, + "read_only_depends_on": null, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "show_dashboard": 0, + "sort_options": 0, + "translatable": 0, + "unique": 0, + "width": null + }, { "allow_in_quick_entry": 0, "allow_on_submit": 0, @@ -7283,7 +8067,7 @@ "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, - "collapsible": 1, + "collapsible": 0, "collapsible_depends_on": null, "columns": 0, "default": null, @@ -7291,12 +8075,12 @@ "description": null, "docstatus": 0, "doctype": "Custom Field", - "dt": "Asset", + "dt": "Item", "fetch_from": null, "fetch_if_empty": 0, - "fieldname": "custom_section_break_hu31x", - "fieldtype": "Section Break", - "hidden": 1, + "fieldname": "custom_warranty_in_months", + "fieldtype": "Data", + "hidden": 0, "hide_border": 0, "hide_days": 0, "hide_seconds": 0, @@ -7306,16 +8090,72 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "custom_attach_image", + "insert_after": "end_of_life", "is_system_generated": 0, "is_virtual": 0, - "label": "ECRI", + "label": "Warranty In Months", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2025-04-22 12:52:06.871701", + "modified": "2025-04-22 12:52:23.711597", "module": "Asset Lite", - "name": "Asset-custom_section_break_hu31x", + "name": "Item-custom_warranty_in_months", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": null, + "read_only": 0, + "read_only_depends_on": null, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "show_dashboard": 0, + "sort_options": 0, + "translatable": 1, + "unique": 0, + "width": null + }, + { + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": null, + "depends_on": null, + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Asset Maintenance Log", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_signature2", + "fieldtype": "Data", + "hidden": 0, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_preview": 0, + "in_standard_filter": 0, + "insert_after": "custom_bio_med_dept", + "is_system_generated": 0, + "is_virtual": 0, + "label": "Signature", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2025-04-22 12:52:29.752227", + "module": "Asset Lite", + "name": "Asset Maintenance Log-custom_signature2", "no_copy": 0, "non_negative": 0, "options": null, @@ -7347,11 +8187,11 @@ "description": null, "docstatus": 0, "doctype": "Custom Field", - "dt": "Asset Maintenance Log", + "dt": "Asset", "fetch_from": null, "fetch_if_empty": 0, - "fieldname": "custom_end_user", - "fieldtype": "Data", + "fieldname": "custom_delete_status", + "fieldtype": "Select", "hidden": 0, "hide_border": 0, "hide_days": 0, @@ -7362,16 +8202,72 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "custom_total_travel_hour", + "insert_after": "custom_smeh_engg", "is_system_generated": 0, "is_virtual": 0, - "label": "End user", + "label": "Delete Status", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2025-04-22 12:52:31.213065", + "modified": "2026-08-24 12:21:37.718324", "module": "Asset Lite", - "name": "Asset Maintenance Log-custom_end_user", + "name": "Asset-custom_delete_status", + "no_copy": 0, + "non_negative": 0, + "options": "\nDeleted", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": null, + "read_only": 0, + "read_only_depends_on": null, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "show_dashboard": 0, + "sort_options": 0, + "translatable": 0, + "unique": 0, + "width": null + }, + { + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "collapsible_depends_on": null, + "columns": 0, + "default": null, + "depends_on": null, + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Asset", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_section_break_hu31x", + "fieldtype": "Section Break", + "hidden": 1, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_preview": 0, + "in_standard_filter": 0, + "insert_after": "custom_delete_status", + "is_system_generated": 0, + "is_virtual": 0, + "label": "ECRI", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2025-04-22 12:52:06.871701", + "module": "Asset Lite", + "name": "Asset-custom_section_break_hu31x", "no_copy": 0, "non_negative": 0, "options": null, @@ -7459,11 +8355,11 @@ "description": null, "docstatus": 0, "doctype": "Custom Field", - "dt": "Asset", + "dt": "Asset Maintenance Log", "fetch_from": null, "fetch_if_empty": 0, - "fieldname": "custom_ecri", - "fieldtype": "Link", + "fieldname": "custom_date2", + "fieldtype": "Date", "hidden": 0, "hide_border": 0, "hide_days": 0, @@ -7474,19 +8370,19 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "custom_section_break_hu31x", + "insert_after": "custom_signature2", "is_system_generated": 0, "is_virtual": 0, - "label": "ECRI", + "label": "Date2", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2025-04-22 12:52:07.197889", + "modified": "2025-04-22 12:52:29.567579", "module": "Asset Lite", - "name": "Asset-custom_ecri", + "name": "Asset Maintenance Log-custom_date2", "no_copy": 0, "non_negative": 0, - "options": "ECRI UMDNS", + "options": null, "permlevel": 0, "precision": "", "print_hide": 0, @@ -7515,11 +8411,11 @@ "description": null, "docstatus": 0, "doctype": "Custom Field", - "dt": "Asset Maintenance Log", + "dt": "Asset", "fetch_from": null, "fetch_if_empty": 0, - "fieldname": "custom_signature1", - "fieldtype": "Data", + "fieldname": "custom_ecri", + "fieldtype": "Link", "hidden": 0, "hide_border": 0, "hide_days": 0, @@ -7530,19 +8426,19 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "custom_end_user", + "insert_after": "custom_section_break_hu31x", "is_system_generated": 0, "is_virtual": 0, - "label": "Signature", + "label": "ECRI", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2025-04-22 12:52:31.015797", + "modified": "2025-04-22 12:52:07.197889", "module": "Asset Lite", - "name": "Asset Maintenance Log-custom_signature1", + "name": "Asset-custom_ecri", "no_copy": 0, "non_negative": 0, - "options": null, + "options": "ECRI UMDNS", "permlevel": 0, "precision": "", "print_hide": 0, @@ -7671,62 +8567,6 @@ "unique": 0, "width": null }, - { - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "collapsible_depends_on": null, - "columns": 0, - "default": null, - "depends_on": null, - "description": null, - "docstatus": 0, - "doctype": "Custom Field", - "dt": "Asset Maintenance Log", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_date1", - "fieldtype": "Date", - "hidden": 0, - "hide_border": 0, - "hide_days": 0, - "hide_seconds": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_preview": 0, - "in_standard_filter": 0, - "insert_after": "custom_signature1", - "is_system_generated": 0, - "is_virtual": 0, - "label": "Date", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2025-04-22 12:52:30.853560", - "module": "Asset Lite", - "name": "Asset Maintenance Log-custom_date1", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": null, - "read_only": 0, - "read_only_depends_on": null, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "show_dashboard": 0, - "sort_options": 0, - "translatable": 0, - "unique": 0, - "width": null - }, { "allow_in_quick_entry": 0, "allow_on_submit": 0, @@ -7839,62 +8679,6 @@ "unique": 0, "width": null }, - { - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "collapsible_depends_on": null, - "columns": 0, - "default": null, - "depends_on": null, - "description": null, - "docstatus": 0, - "doctype": "Custom Field", - "dt": "Asset Maintenance Log", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_second_column", - "fieldtype": "Column Break", - "hidden": 0, - "hide_border": 0, - "hide_days": 0, - "hide_seconds": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_preview": 0, - "in_standard_filter": 0, - "insert_after": "custom_date1", - "is_system_generated": 0, - "is_virtual": 0, - "label": "", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2025-04-22 12:52:30.689613", - "module": "Asset Lite", - "name": "Asset Maintenance Log-custom_second_column", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": null, - "read_only": 0, - "read_only_depends_on": null, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "show_dashboard": 0, - "sort_options": 0, - "translatable": 0, - "unique": 0, - "width": null - }, { "allow_in_quick_entry": 0, "allow_on_submit": 0, @@ -8007,118 +8791,6 @@ "unique": 0, "width": null }, - { - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "collapsible_depends_on": null, - "columns": 0, - "default": null, - "depends_on": null, - "description": null, - "docstatus": 0, - "doctype": "Custom Field", - "dt": "Asset Maintenance Log", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_total_hours", - "fieldtype": "Data", - "hidden": 0, - "hide_border": 0, - "hide_days": 0, - "hide_seconds": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_preview": 0, - "in_standard_filter": 0, - "insert_after": "custom_second_column", - "is_system_generated": 0, - "is_virtual": 0, - "label": "Total Hours", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2025-04-22 12:52:30.166039", - "module": "Asset Lite", - "name": "Asset Maintenance Log-custom_total_hours", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": null, - "read_only": 0, - "read_only_depends_on": null, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "show_dashboard": 0, - "sort_options": 0, - "translatable": 0, - "unique": 0, - "width": null - }, - { - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "collapsible_depends_on": null, - "columns": 0, - "default": null, - "depends_on": null, - "description": null, - "docstatus": 0, - "doctype": "Custom Field", - "dt": "Item", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_warranty_in_months", - "fieldtype": "Data", - "hidden": 0, - "hide_border": 0, - "hide_days": 0, - "hide_seconds": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_preview": 0, - "in_standard_filter": 0, - "insert_after": "end_of_life", - "is_system_generated": 0, - "is_virtual": 0, - "label": "Warranty In Months", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2025-04-22 12:52:23.711597", - "module": "Asset Lite", - "name": "Item-custom_warranty_in_months", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": null, - "read_only": 0, - "read_only_depends_on": null, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "show_dashboard": 0, - "sort_options": 0, - "translatable": 1, - "unique": 0, - "width": null - }, { "allow_in_quick_entry": 0, "allow_on_submit": 0, @@ -8231,62 +8903,6 @@ "unique": 0, "width": null }, - { - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "collapsible_depends_on": null, - "columns": 0, - "default": null, - "depends_on": null, - "description": null, - "docstatus": 0, - "doctype": "Custom Field", - "dt": "Asset Maintenance Log", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_bio_med_dept", - "fieldtype": "Data", - "hidden": 0, - "hide_border": 0, - "hide_days": 0, - "hide_seconds": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_preview": 0, - "in_standard_filter": 0, - "insert_after": "custom_total_hours", - "is_system_generated": 0, - "is_virtual": 0, - "label": "Bio Med Dept", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2025-04-22 12:52:29.934255", - "module": "Asset Lite", - "name": "Asset Maintenance Log-custom_bio_med_dept", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": null, - "read_only": 0, - "read_only_depends_on": null, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "show_dashboard": 0, - "sort_options": 0, - "translatable": 0, - "unique": 0, - "width": null - }, { "allow_in_quick_entry": 0, "allow_on_submit": 0, @@ -8399,62 +9015,6 @@ "unique": 0, "width": null }, - { - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "collapsible_depends_on": null, - "columns": 0, - "default": null, - "depends_on": null, - "description": null, - "docstatus": 0, - "doctype": "Custom Field", - "dt": "Asset Maintenance Log", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_signature2", - "fieldtype": "Data", - "hidden": 0, - "hide_border": 0, - "hide_days": 0, - "hide_seconds": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_preview": 0, - "in_standard_filter": 0, - "insert_after": "custom_bio_med_dept", - "is_system_generated": 0, - "is_virtual": 0, - "label": "Signature", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2025-04-22 12:52:29.752227", - "module": "Asset Lite", - "name": "Asset Maintenance Log-custom_signature2", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": null, - "read_only": 0, - "read_only_depends_on": null, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "show_dashboard": 0, - "sort_options": 0, - "translatable": 0, - "unique": 0, - "width": null - }, { "allow_in_quick_entry": 0, "allow_on_submit": 0, @@ -8511,62 +9071,6 @@ "unique": 0, "width": null }, - { - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "collapsible_depends_on": null, - "columns": 0, - "default": null, - "depends_on": null, - "description": null, - "docstatus": 0, - "doctype": "Custom Field", - "dt": "Asset Maintenance Log", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_date2", - "fieldtype": "Date", - "hidden": 0, - "hide_border": 0, - "hide_days": 0, - "hide_seconds": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_preview": 0, - "in_standard_filter": 0, - "insert_after": "custom_signature2", - "is_system_generated": 0, - "is_virtual": 0, - "label": "Date2", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2025-04-22 12:52:29.567579", - "module": "Asset Lite", - "name": "Asset Maintenance Log-custom_date2", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": null, - "read_only": 0, - "read_only_depends_on": null, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "show_dashboard": 0, - "sort_options": 0, - "translatable": 0, - "unique": 0, - "width": null - }, { "allow_in_quick_entry": 0, "allow_on_submit": 0, @@ -10247,62 +10751,6 @@ "unique": 0, "width": null }, - { - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "collapsible_depends_on": null, - "columns": 0, - "default": null, - "depends_on": "eval:doc.custom_covering_spare_parts ==1 || doc.custom_spare_parts_labour == 1 || doc.custom_ppm_only ==1 ||doc.custom_covering_labour ==1", - "description": null, - "docstatus": 0, - "doctype": "Custom Field", - "dt": "Asset", - "fetch_from": "", - "fetch_if_empty": 0, - "fieldname": "custom_service_contract_end", - "fieldtype": "Date", - "hidden": 0, - "hide_border": 0, - "hide_days": 0, - "hide_seconds": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_preview": 0, - "in_standard_filter": 0, - "insert_after": "custom_service_contract_start", - "is_system_generated": 0, - "is_virtual": 0, - "label": "Service Contract End", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2025-04-22 12:52:46.693688", - "module": "Asset Lite", - "name": "Asset-custom_service_contract_end", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": null, - "read_only": 0, - "read_only_depends_on": null, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "show_dashboard": 0, - "sort_options": 0, - "translatable": 0, - "unique": 0, - "width": null - }, { "allow_in_quick_entry": 0, "allow_on_submit": 0, @@ -10367,15 +10815,15 @@ "collapsible_depends_on": null, "columns": 0, "default": null, - "depends_on": "eval:doc.custom_support_plan\r\n", + "depends_on": "eval:doc.custom_covering_spare_parts ==1 || doc.custom_spare_parts_labour == 1 || doc.custom_ppm_only ==1 ||doc.custom_covering_labour ==1", "description": null, "docstatus": 0, "doctype": "Custom Field", "dt": "Asset", "fetch_from": "", "fetch_if_empty": 0, - "fieldname": "custom_service_contract_status", - "fieldtype": "Select", + "fieldname": "custom_service_contract_end", + "fieldtype": "Date", "hidden": 0, "hide_border": 0, "hide_days": 0, @@ -10386,19 +10834,19 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "custom_service_contract_end", + "insert_after": "custom_service_contract_start", "is_system_generated": 0, "is_virtual": 0, - "label": "Service Contract Status", + "label": "Service Contract End", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2025-04-22 12:52:47.075974", + "modified": "2025-04-22 12:52:46.693688", "module": "Asset Lite", - "name": "Asset-custom_service_contract_status", + "name": "Asset-custom_service_contract_end", "no_copy": 0, "non_negative": 0, - "options": "\nActive\nExpired\nNot Applicable", + "options": null, "permlevel": 0, "precision": "", "print_hide": 0, @@ -10471,6 +10919,62 @@ "unique": 0, "width": null }, + { + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": null, + "depends_on": "eval:doc.custom_support_plan\r\n", + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Asset", + "fetch_from": "", + "fetch_if_empty": 0, + "fieldname": "custom_service_contract_status", + "fieldtype": "Select", + "hidden": 0, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_preview": 0, + "in_standard_filter": 0, + "insert_after": "custom_service_contract_end", + "is_system_generated": 0, + "is_virtual": 0, + "label": "Service Contract Status", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2025-04-22 12:52:47.075974", + "module": "Asset Lite", + "name": "Asset-custom_service_contract_status", + "no_copy": 0, + "non_negative": 0, + "options": "\nActive\nExpired\nNot Applicable", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": null, + "read_only": 0, + "read_only_depends_on": null, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "show_dashboard": 0, + "sort_options": 0, + "translatable": 0, + "unique": 0, + "width": null + }, { "allow_in_quick_entry": 0, "allow_on_submit": 0, @@ -11323,11 +11827,11 @@ "description": null, "docstatus": 0, "doctype": "Custom Field", - "dt": "Asset", + "dt": "Work_Order", "fetch_from": null, "fetch_if_empty": 0, - "fieldname": "custom_comments", - "fieldtype": "Small Text", + "fieldname": "custom_column_break_7bfpb", + "fieldtype": "Column Break", "hidden": 0, "hide_border": 0, "hide_days": 0, @@ -11338,16 +11842,16 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "custom_total_amount", + "insert_after": "repair_cost", "is_system_generated": 0, "is_virtual": 0, - "label": "Comments", + "label": "", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2025-04-22 12:52:00.011915", + "modified": "2025-04-22 12:51:55.208260", "module": "Asset Lite", - "name": "Asset-custom_comments", + "name": "Work_Order-custom_column_break_7bfpb", "no_copy": 0, "non_negative": 0, "options": null, @@ -11379,11 +11883,11 @@ "description": null, "docstatus": 0, "doctype": "Custom Field", - "dt": "Work_Order", + "dt": "Asset", "fetch_from": null, "fetch_if_empty": 0, - "fieldname": "custom_column_break_7bfpb", - "fieldtype": "Column Break", + "fieldname": "custom_comments", + "fieldtype": "Small Text", "hidden": 0, "hide_border": 0, "hide_days": 0, @@ -11394,16 +11898,16 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "repair_cost", + "insert_after": "custom_total_amount", "is_system_generated": 0, "is_virtual": 0, - "label": "", + "label": "Comments", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2025-04-22 12:51:55.208260", + "modified": "2025-04-22 12:52:00.011915", "module": "Asset Lite", - "name": "Work_Order-custom_column_break_7bfpb", + "name": "Asset-custom_comments", "no_copy": 0, "non_negative": 0, "options": null, diff --git a/asset_lite/fixtures/dashboard_chart.json b/asset_lite/fixtures/dashboard_chart.json index 3dd8a58..fe499e4 100644 --- a/asset_lite/fixtures/dashboard_chart.json +++ b/asset_lite/fixtures/dashboard_chart.json @@ -451,88 +451,6 @@ "x_field": null, "y_axis": [] }, - { - "aggregate_function_based_on": null, - "based_on": null, - "chart_name": "Technicians working Hours on Work orders", - "chart_type": "Report", - "color": null, - "custom_options": null, - "docstatus": 0, - "doctype": "Dashboard Chart", - "document_type": null, - "dynamic_filters_json": "{}", - "filters_json": "{}", - "from_date": null, - "group_by_based_on": null, - "group_by_type": "Count", - "heatmap_year": null, - "is_public": 1, - "is_standard": 0, - "last_synced_on": null, - "modified": "2025-02-18 13:40:45.427898", - "module": null, - "name": "Technicians working Hours on Work orders", - "number_of_groups": 0, - "parent_document_type": null, - "report_name": "Technicians working Hours", - "roles": [ - { - "parent": "Technicians working Hours on Work orders", - "parentfield": "roles", - "parenttype": "Dashboard Chart", - "role": "Technician" - }, - { - "parent": "Technicians working Hours on Work orders", - "parentfield": "roles", - "parenttype": "Dashboard Chart", - "role": "Maintenance Manager" - }, - { - "parent": "Technicians working Hours on Work orders", - "parentfield": "roles", - "parenttype": "Dashboard Chart", - "role": "End user" - }, - { - "parent": "Technicians working Hours on Work orders", - "parentfield": "roles", - "parenttype": "Dashboard Chart", - "role": "Finance Manager" - }, - { - "parent": "Technicians working Hours on Work orders", - "parentfield": "roles", - "parenttype": "Dashboard Chart", - "role": "Finance User" - }, - { - "parent": "Technicians working Hours on Work orders", - "parentfield": "roles", - "parenttype": "Dashboard Chart", - "role": "System Manager" - } - ], - "source": null, - "time_interval": "Yearly", - "timeseries": 0, - "timespan": "Last Year", - "to_date": null, - "type": "Bar", - "use_report_chart": 0, - "value_based_on": null, - "x_field": "technician_name", - "y_axis": [ - { - "color": "#85cc29", - "parent": "Technicians working Hours on Work orders", - "parentfield": "y_axis", - "parenttype": "Dashboard Chart", - "y_field": "total_hours" - } - ] - }, { "aggregate_function_based_on": null, "based_on": "creation", diff --git a/asset_lite/fixtures/notification.json b/asset_lite/fixtures/notification.json index 2f3df55..5f80419 100644 --- a/asset_lite/fixtures/notification.json +++ b/asset_lite/fixtures/notification.json @@ -1262,7 +1262,7 @@ { "attach_print": 0, "channel": "Email", - "condition": "doc.workflow_state == \"Completed\"", + "condition": "doc.workflow_state == \"Completed\" and (doc.company ==\"Iman General Hospital\" or doc.company == \"Mobile Team - Iman\")", "date_changed": null, "days_in_advance": 0, "docstatus": 0, @@ -1274,7 +1274,7 @@ "message": "Add your message here", "message_type": "Markdown", "method": null, - "modified": "2026-01-12 15:52:50.093133", + "modified": "2026-08-12 12:20:47.199206", "module": "Asset Lite", "name": "Work order Approved", "print_format": null, @@ -1323,7 +1323,7 @@ { "attach_print": 0, "channel": "Email", - "condition": "doc.workflow_state == \"Pending Approval\"", + "condition": "doc.workflow_state == \"Pending Approval\" and (doc.company ==\"Iman General Hospital\" or doc.company == \"Mobile Team - Iman\")", "date_changed": null, "days_in_advance": 0, "docstatus": 0, @@ -1335,7 +1335,7 @@ "message": "Add your message here", "message_type": "Markdown", "method": null, - "modified": "2026-01-12 15:51:25.758528", + "modified": "2026-08-12 12:22:47.792157", "module": "Asset Lite", "name": "Work order Pending Approval", "print_format": null, @@ -1611,7 +1611,7 @@ "message": "Add your message here", "message_type": "Markdown", "method": null, - "modified": "2026-01-12 15:55:50.454012", + "modified": "2026-08-12 12:37:14.552101", "module": "Asset Lite", "name": "WO Close", "print_format": null, @@ -1646,5 +1646,87 @@ "slack_webhook_url": null, "subject": "Work order {{doc.name }} is Closed. ", "value_changed": "workflow_state" + }, + { + "attach_print": 0, + "channel": "Email", + "condition": "doc.workflow_state == \"Sent To Project Manager\"", + "date_changed": null, + "days_in_advance": 0, + "docstatus": 0, + "doctype": "Notification", + "document_type": "Work_Order", + "enabled": 1, + "event": "Value Change", + "is_standard": 0, + "message": "Add your message here", + "message_type": "Markdown", + "method": null, + "modified": "2026-08-13 17:00:32.314840", + "module": "Asset Lite", + "name": "WO Sent To Project Manager", + "print_format": null, + "property_value": null, + "recipients": [ + { + "bcc": null, + "cc": null, + "condition": null, + "parent": "WO Sent To Project Manager", + "parentfield": "recipients", + "parenttype": "Notification", + "receiver_by_document_field": null, + "receiver_by_role": "Projects Manager" + } + ], + "send_system_notification": 1, + "send_to_all_assignees": 0, + "sender": "Asset Notifications", + "sender_email": "prebiyap@gmail.com", + "set_property_after_alert": null, + "slack_webhook_url": null, + "subject": "Work order {{doc.name }} is Sent To Project Manager. Please Take the necessary action. ", + "value_changed": "workflow_state" + }, + { + "attach_print": 0, + "channel": "Email", + "condition": "doc.workflow_state == \"Closed\"", + "date_changed": null, + "days_in_advance": 0, + "docstatus": 0, + "doctype": "Notification", + "document_type": "Work_Order", + "enabled": 1, + "event": "Value Change", + "is_standard": 0, + "message": "Add your message here", + "message_type": "Markdown", + "method": null, + "modified": "2026-08-18 15:42:44.801598", + "module": "Asset Lite", + "name": "Feedback Form Created", + "print_format": null, + "property_value": null, + "recipients": [ + { + "bcc": null, + "cc": null, + "condition": null, + "parent": "Feedback Form Created", + "parentfield": "recipients", + "parenttype": "Notification", + "receiver_by_document_field": "owner", + "receiver_by_role": null + } + ], + "send_system_notification": 1, + "send_to_all_assignees": 0, + "sender": "Asset Notifications", + "sender_email": "prebiyap@gmail.com", + "set_property_after_alert": null, + "slack_webhook_url": null, + "subject": "Work order {{doc.name }} is Closed, Please give the Feedback.", + "value_changed": "workflow_state" } ] \ No newline at end of file diff --git a/asset_lite/fixtures/print_format.json b/asset_lite/fixtures/print_format.json index 5ae296d..e3b18d4 100644 --- a/asset_lite/fixtures/print_format.json +++ b/asset_lite/fixtures/print_format.json @@ -167,13 +167,13 @@ "font": null, "font_size": 14, "format_data": null, - "html": "\n \n \n \n \n \n \n \n \n \n \n
\n \"Logo\"\n \n Seera Arabia
Medical Services\n
\n سيرا العربية
الخدمات الطبية\n
\n \"Logo\"\n
\n\n \n \n \n \n \n \n \n \n
\n Al Arabia II, Arcade 345 - P.O. Box 99
\nRiyadh 35436, Saudi Arabia
\nTel:+432 4354 4565 Toll Free Fax +556 445656
\nToll Free No.:4354 543 534\n
تقرير الخدمة
Service Report
\n العربية 2، رواق 345 - ص.ب. صندوق 99
\nالرياض 35436، المملكة العربية السعودية
\nهاتف:+432 4354 4565 رقم الفاكس المجاني +556 445656
\nالرقم المجاني: 4354 543 534\n
\n
\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Date:{{doc.failure_date}}Work Order No:{{doc.name}}
SERVICE CALLS{%- if doc.work_order_type ==\"Installation\" -%}✔{%- endif-%}Installation{%- if doc.work_order_type ==\"Warranty\" -%}✔{%- endif-%}Warranty{%- if doc.work_order_type ==\"HBS\" -%}✔{%- endif-%}HBS{%- if doc.work_order_type ==\"PM\" -%}✔{%- endif-%}PM{%- if doc.work_order_type ==\"PPM Contract\" -%}✔{%- endif-%}PPM Contract{%- if doc.work_order_type ==\"Call\" -%}✔{%- endif-%}Call{%- if doc.work_order_type ==\"Extended Warranty\" -%}✔{%- endif-%}Extended
Warranty
CUSTOMER/SITE NAME:\n

POSITION/DEPT./CONTACT NO.:\n

JOB NO./CASE NO.:
EQUIPMENT{{doc.asset_name}}
MODEL{{doc.model}}
SYSTEM ID/SW.NO.{{doc.serial_number}}

\n

NATURE OF COMPLAINT:
{{doc.description}}

\n
\n

WORK PERFORMED:
{{doc.actions_performed}}

\n
\n\n \n \n \n \n \n \n \n \n {% for row in doc.table_cmqp %}\n \n \n \n \n \n {% endfor%}\n
JOB COMPLETED   \n {%- if doc.job_completed ==\"Yes\" -%}✔{%- endif-%} YES   \n {%- if doc.job_completed ==\"No\" -%}✔{%- endif-%} NO
DEFECTIVE SPARE PARTSPART NO.QTY.
{{row.item_code}}{{row.qty}}

\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
TOTAL MAIN HOUR AT SITE{{doc.total_main_hour_at_site}}TOTAL TRAVEL HOUR{{doc.total_travel_hour}}TOTAL HOURS{{doc.total_hours}}
Serviced By:{{doc.serviced_by}}\n

Signature:\n

Date:\n
End-User:{{doc.end_user}}\n

Signature:\n

Date:\n
Bio-Med Dept.:{{doc.bio_med_dept}}\n

Signature:\n

Date:\n
Customer Comments:{{doc.customer_comments}}

\n\n", + "html": "\n \n \n \n \n \n \n \n \n \n \n
\n \"Logo\"\n \n Seera Arabia
Medical Services\n
\n سيرا العربية
الخدمات الطبية\n
\n \"Logo\"\n
\n\n \n \n \n \n \n \n \n \n
\n Al Arabia II, Arcade 345 - P.O. Box 99
\nRiyadh 35436, Saudi Arabia
\nTel:+432 4354 4565 Toll Free Fax +556 445656
\nToll Free No.:4354 543 534\n
تقرير الخدمة
Service Report
\n العربية 2، رواق 345 - ص.ب. صندوق 99
\nالرياض 35436، المملكة العربية السعودية
\nهاتف:+432 4354 4565 رقم الفاكس المجاني +556 445656
\nالرقم المجاني: 4354 543 534\n
\n
\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Date:{{doc.failure_date}}Work Order No:{{doc.name}}
SERVICE CALLS{%- if doc.work_order_type ==\"Installation\" -%}✔{%- endif-%}Installation{%- if doc.work_order_type ==\"Warranty\" -%}✔{%- endif-%}Warranty{%- if doc.work_order_type ==\"HBS\" -%}✔{%- endif-%}HBS{%- if doc.work_order_type ==\"PM\" -%}✔{%- endif-%}PM{%- if doc.work_order_type ==\"PPM Contract\" -%}✔{%- endif-%}PPM Contract{%- if doc.work_order_type ==\"Call\" -%}✔{%- endif-%}Call{%- if doc.work_order_type ==\"Extended Warranty\" -%}✔{%- endif-%}Extended
Warranty
CUSTOMER/SITE NAME:\n

POSITION/DEPT./CONTACT NO.:\n

JOB NO./CASE NO.:
EQUIPMENT{{doc.asset_name}}
MODEL{{doc.model}}
SYSTEM ID/SW.NO.{{doc.serial_number}}

\n

NATURE OF COMPLAINT:
{{doc.description}}

\n
\n

WORK PERFORMED:
{{doc.actions_performed}}

\n
\n\n \n \n \n \n \n \n \n \n {% for row in doc.table_cmqp %}\n \n \n \n \n \n {% endfor%}\n
JOB COMPLETED   \n {%- if doc.job_completed ==\"Yes\" -%}✔{%- endif-%} YES   \n {%- if doc.job_completed ==\"No\" -%}✔{%- endif-%} NO
DEFECTIVE SPARE PARTSPART NO.QTY.
{{row.item_code}}{{row.qty}}

\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
TOTAL MAIN HOUR AT SITE{{doc.total_main_hour_at_site}}TOTAL TRAVEL HOUR{{doc.total_travel_hour}}TOTAL HOURS{{doc.total_hours}}
Serviced By:{{doc.serviced_by}}\n

Signature:\n

Date:\n
End-User:{{doc.end_user}}\n

Signature:\n

Date:\n
Bio-Med Dept.:{{doc.bio_med_dept}}\n

Signature:\n

Date:\n
Customer Comments:{{doc.customer_comments}}
\n\n\n\n \n \n \n\n \n {% if doc.workflow_state == \"Closed\" %}\n \n {% endif %}\n \n
\n \n Your Satisfaction is our goal. We always strive to be the best.\n \n \n {% if doc.custom_wo_qr %}\n
\n \n
\n Please scan this to give feedback\n
\n
\n {% endif %}\n
\n
\n\n", "line_breaks": 0, "margin_bottom": 15.0, "margin_left": 15.0, "margin_right": 15.0, "margin_top": 15.0, - "modified": "2025-07-08 11:07:05.115562", + "modified": "2026-08-18 16:05:03.801334", "module": "Asset Lite", "name": "Service Report", "page_number": "Hide", diff --git a/asset_lite/fixtures/property_setter.json b/asset_lite/fixtures/property_setter.json index 27fea04..39221a0 100644 --- a/asset_lite/fixtures/property_setter.json +++ b/asset_lite/fixtures/property_setter.json @@ -1,4 +1,20 @@ [ + { + "default_value": null, + "doc_type": "Asset", + "docstatus": 0, + "doctype": "Property Setter", + "doctype_or_field": "DocType", + "field_name": null, + "is_system_generated": 0, + "modified": "2025-05-22 14:09:07.502818", + "module": "Asset Lite", + "name": "Asset-main-image_field", + "property": "image_field", + "property_type": "Data", + "row_name": null, + "value": "custom_attach_image" + }, { "default_value": null, "doc_type": "Asset", @@ -1903,22 +1919,6 @@ "row_name": null, "value": "1" }, - { - "default_value": null, - "doc_type": "Asset", - "docstatus": 0, - "doctype": "Property Setter", - "doctype_or_field": "DocField", - "field_name": "item_code", - "is_system_generated": 0, - "modified": "2025-04-22 14:45:40.948870", - "module": "Asset Lite", - "name": "Asset-item_code-read_only", - "property": "read_only", - "property_type": "Check", - "row_name": null, - "value": "1" - }, { "default_value": null, "doc_type": "Asset", @@ -2063,22 +2063,6 @@ "row_name": null, "value": "Hospital Name" }, - { - "default_value": null, - "doc_type": "Asset", - "docstatus": 0, - "doctype": "Property Setter", - "doctype_or_field": "DocField", - "field_name": "item_code", - "is_system_generated": 0, - "modified": "2025-04-22 14:45:37.632724", - "module": "Asset Lite", - "name": "Asset-item_code-hidden", - "property": "hidden", - "property_type": "Check", - "row_name": null, - "value": "1" - }, { "default_value": null, "doc_type": "Asset", @@ -3727,22 +3711,6 @@ "row_name": null, "value": "Light\nDark\nAutomatic\nModern_ui_theme" }, - { - "default_value": null, - "doc_type": "Asset", - "docstatus": 0, - "doctype": "Property Setter", - "doctype_or_field": "DocType", - "field_name": null, - "is_system_generated": 0, - "modified": "2025-05-22 14:09:07.502818", - "module": "Asset Lite", - "name": "Asset-main-image_field", - "property": "image_field", - "property_type": "Data", - "row_name": null, - "value": "custom_attach_image" - }, { "default_value": null, "doc_type": "Work_Order", @@ -4159,22 +4127,6 @@ "row_name": null, "value": "0" }, - { - "default_value": null, - "doc_type": "Work_Order", - "docstatus": 0, - "doctype": "Property Setter", - "doctype_or_field": "DocField", - "field_name": "company", - "is_system_generated": 0, - "modified": "2025-08-08 17:25:29.999119", - "module": "Asset Lite", - "name": "Work_Order-company-depends_on", - "property": "depends_on", - "property_type": "Data", - "row_name": null, - "value": "eval:doc.asset_type == \"Biomedical\"" - }, { "default_value": null, "doc_type": "Report", @@ -4303,22 +4255,6 @@ "row_name": null, "value": "PPM Assets" }, - { - "default_value": null, - "doc_type": "Work_Order", - "docstatus": 0, - "doctype": "Property Setter", - "doctype_or_field": "DocField", - "field_name": "site_name", - "is_system_generated": 0, - "modified": "2025-08-08 17:33:53.907942", - "module": "Asset Lite", - "name": "Work_Order-site_name-depends_on", - "property": "depends_on", - "property_type": "Data", - "row_name": null, - "value": "eval:doc.asset_type == \"Non Biomedical\" || (doc.company && doc.asset_type == \"Biomedical\" && doc.company.startsWith(\"Mobile\"))" - }, { "default_value": null, "doc_type": "Work_Order", @@ -4590,5 +4526,37 @@ "property_type": "Check", "row_name": null, "value": "1" + }, + { + "default_value": null, + "doc_type": "Work_Order", + "docstatus": 0, + "doctype": "Property Setter", + "doctype_or_field": "DocField", + "field_name": "company", + "is_system_generated": 0, + "modified": "2026-08-24 12:23:00.164566", + "module": "Asset Lite", + "name": "Work_Order-company-depends_on", + "property": "depends_on", + "property_type": "Data", + "row_name": null, + "value": "" + }, + { + "default_value": null, + "doc_type": "Work_Order", + "docstatus": 0, + "doctype": "Property Setter", + "doctype_or_field": "DocField", + "field_name": "site_name", + "is_system_generated": 0, + "modified": "2026-08-24 12:23:00.016499", + "module": "Asset Lite", + "name": "Work_Order-site_name-depends_on", + "property": "depends_on", + "property_type": "Data", + "row_name": null, + "value": "" } ] \ No newline at end of file diff --git a/asset_lite/fixtures/report.json b/asset_lite/fixtures/report.json index 1215536..07be49f 100644 --- a/asset_lite/fixtures/report.json +++ b/asset_lite/fixtures/report.json @@ -36,21 +36,46 @@ "disabled": 0, "docstatus": 0, "doctype": "Report", - "filters": [], + "filters": [ + { + "default": null, + "fieldname": "company", + "fieldtype": "Link", + "label": "Hospital", + "mandatory": 0, + "options": "Company", + "parent": "Asset Maintenance Frequency", + "parentfield": "filters", + "parenttype": "Report", + "wildcard_filter": 0 + }, + { + "default": null, + "fieldname": "site_name", + "fieldtype": "Link", + "label": "Site Name", + "mandatory": 0, + "options": "Mobile Team Site", + "parent": "Asset Maintenance Frequency", + "parentfield": "filters", + "parenttype": "Report", + "wildcard_filter": 0 + } + ], "is_standard": "No", "javascript": null, "json": null, "letter_head": "", - "modified": "2025-04-22 14:49:10.967185", + "modified": "2026-08-13 13:23:47.247073", "module": "Asset Lite", "name": "Asset Maintenance Frequency", "prepared_report": 0, - "query": "select\r\n custom_asset_names as Item,\r\n SUM(CASE WHEN maintenance_status = 'Planned' THEN 1 ELSE 0 END) AS Planned,\r\n SUM(CASE WHEN maintenance_status = 'Completed' THEN 1 ELSE 0 END) as \"Completed\",\r\n SUM(CASE WHEN maintenance_status = 'Cancelled' THEN 1 ELSE 0 END) as \"Cancelled\",\r\n SUM(CASE WHEN maintenance_status = 'Overdue' THEN 1 ELSE 0 END) as \"Overdue\",\r\n COUNT(custom_asset_names) as \"Total Count\"\r\nfrom \r\n `tabAsset Maintenance Log`\r\ngroup by\r\n custom_asset_names", + "query": null, "ref_doctype": "Asset Maintenance Log", "reference_report": null, "report_name": "Asset Maintenance Frequency", - "report_script": "", - "report_type": "Query Report", + "report_script": "def execute(filters=None):\n if filters is None:\n filters = {}\n\n conditions = [\"1=1\"]\n params = {}\n\n if filters.get(\"company\"):\n conditions.append(\"aml.custom_hospital_name = %(company)s\")\n params[\"company\"] = filters.get(\"company\")\n if filters.get(\"site_name\"):\n conditions.append(\"a.custom_site = %(site_name)s\")\n params[\"site_name\"] = filters.get(\"site_name\")\n\n where = \" AND \".join(conditions)\n\n query = \"\"\"\n SELECT\n aml.custom_asset_names AS item,\n SUM(CASE WHEN aml.maintenance_status = 'Planned' THEN 1 ELSE 0 END) AS planned,\n SUM(CASE WHEN aml.maintenance_status = 'Completed' THEN 1 ELSE 0 END) AS completed,\n SUM(CASE WHEN aml.maintenance_status = 'Cancelled' THEN 1 ELSE 0 END) AS cancelled,\n SUM(CASE WHEN aml.maintenance_status = 'Overdue' THEN 1 ELSE 0 END) AS overdue,\n COUNT(aml.custom_asset_names) AS total_count\n FROM `tabAsset Maintenance Log` aml\n LEFT JOIN `tabAsset` a ON aml.asset_name = a.name\n WHERE \"\"\" + where + \"\"\"\n GROUP BY aml.custom_asset_names\n \"\"\"\n\n data = frappe.db.sql(query, params, as_dict=True)\n return data\n\ndata = execute(filters)", + "report_type": "Script Report", "roles": [ { "parent": "Asset Maintenance Frequency", @@ -79,21 +104,46 @@ "disabled": 0, "docstatus": 0, "doctype": "Report", - "filters": [], + "filters": [ + { + "default": null, + "fieldname": "company", + "fieldtype": "Link", + "label": "Hospital", + "mandatory": 0, + "options": "Company", + "parent": "Asset Maintenance Assignees Status Count", + "parentfield": "filters", + "parenttype": "Report", + "wildcard_filter": 0 + }, + { + "default": null, + "fieldname": "site_name", + "fieldtype": "Link", + "label": "Site Name", + "mandatory": 0, + "options": "Mobile Team Site", + "parent": "Asset Maintenance Assignees Status Count", + "parentfield": "filters", + "parenttype": "Report", + "wildcard_filter": 0 + } + ], "is_standard": "No", "javascript": null, "json": null, "letter_head": "", - "modified": "2025-04-22 14:49:12.617127", + "modified": "2026-08-18 13:11:56.368418", "module": "Asset Lite", "name": "Asset Maintenance Assignees Status Count", "prepared_report": 0, - "query": "select item_name as \"Item Name\", maintenance_status as \"Maintenance Status\", assign_to_name as \"Assigned To\", sum(case when due_date = completion_date AND maintenance_status ='Completed' then 1 else 0 end) as \"Completed On Time\" ,sum(case when completion_date < due_date and maintenance_status = 'Completed' then 1 else 0 end) as \"Completed Within Time\",sum(case when completion_date >due_date then 1 else 0 end ) as \"Delay In Completion\",sum(case when maintenance_status = 'Planned' AND completion_date IS null AND due_date > current_date() then 1 else 0 end ) as \"Pending\",sum(case when maintenance_status = 'Planned' AND completion_date IS null AND due_date < current_date() then 1 else 0 end) as \"Overdue\" , sum(case when maintenance_status = 'Cancelled' then 1 else 0 end) as \"Cancelled\" from `tabAsset Maintenance Log` group by assign_to_name", + "query": null, "ref_doctype": "Asset Maintenance Log", "reference_report": null, "report_name": "Asset Maintenance Assignees Status Count", - "report_script": "", - "report_type": "Query Report", + "report_script": "def execute(filters=None):\n if filters is None:\n filters = {}\n\n conditions = [\"1=1\"]\n params = {}\n\n if filters.get(\"company\"):\n conditions.append(\"aml.custom_hospital_name = %(company)s\")\n params[\"company\"] = filters.get(\"company\")\n if filters.get(\"site_name\"):\n conditions.append(\"a.custom_site = %(site_name)s\")\n params[\"site_name\"] = filters.get(\"site_name\")\n\n where = \" AND \".join(conditions)\n\n query = \"\"\"\n SELECT\n aml.item_name AS item_name,\n aml.maintenance_status AS maintenance_status,\n aml.assign_to_name AS assigned_to,\n SUM(CASE WHEN aml.due_date = aml.completion_date AND aml.maintenance_status = 'Completed' THEN 1 ELSE 0 END) AS completed_on_time,\n SUM(CASE WHEN aml.completion_date < aml.due_date AND aml.maintenance_status = 'Completed' THEN 1 ELSE 0 END) AS completed_within_time,\n SUM(CASE WHEN aml.completion_date > aml.due_date THEN 1 ELSE 0 END) AS delay_in_completion,\n sum(case when maintenance_status = 'Planned' then 1 else 0 end) as \"Pending\",\n sum(case when maintenance_status = 'Overdue' then 1 else 0 end) as \"Overdue\",\n sum(case when maintenance_status = 'Cancelled' then 1 else 0 end) as \"Cancelled\"\n FROM `tabAsset Maintenance Log` aml\n LEFT JOIN `tabAsset` a ON aml.asset_name = a.name\n WHERE \"\"\" + where + \"\"\"\n GROUP BY aml.assign_to_name\n \"\"\"\n\n data = frappe.db.sql(query, params, as_dict=True)\n return data\n\nresult = execute(filters)", + "report_type": "Script Report", "roles": [ { "parent": "Asset Maintenance Assignees Status Count", @@ -122,21 +172,46 @@ "disabled": 0, "docstatus": 0, "doctype": "Report", - "filters": [], + "filters": [ + { + "default": null, + "fieldname": "company", + "fieldtype": "Link", + "label": "Hospital", + "mandatory": 0, + "options": "Company", + "parent": "Asset wise Count", + "parentfield": "filters", + "parenttype": "Report", + "wildcard_filter": 0 + }, + { + "default": null, + "fieldname": "site_name", + "fieldtype": "Link", + "label": "Site Name", + "mandatory": 0, + "options": "Mobile Team Site", + "parent": "Asset wise Count", + "parentfield": "filters", + "parenttype": "Report", + "wildcard_filter": 0 + } + ], "is_standard": "No", "javascript": null, "json": null, "letter_head": "", - "modified": "2025-04-22 14:49:12.387500", + "modified": "2026-08-13 13:23:47.184250", "module": "Asset Lite", "name": "Asset wise Count", "prepared_report": 0, - "query": "select item_name as \"Item Name\", maintenance_status as \"Maintenance Status\", sum(case when due_date = completion_date AND maintenance_status ='Completed' then 1 else 0 end) as \"Completed On Time\" ,sum(case when completion_date < due_date and maintenance_status = 'Completed' then 1 else 0 end) as \"Completed Within Time\",sum(case when completion_date >due_date then 1 else 0 end ) as \"Delay In Completion\",sum(case when maintenance_status = 'Planned' AND completion_date IS null AND due_date > current_date() then 1 else 0 end ) as \"Pending\",sum(case when maintenance_status = 'Planned' AND completion_date IS null AND due_date < current_date() then 1 else 0 end) as \"Overdue\" , sum(case when maintenance_status = 'Cancelled' then 1 else 0 end) as \"Cancelled\" from `tabAsset Maintenance Log` group by item_name", + "query": null, "ref_doctype": "Asset Maintenance Log", "reference_report": null, "report_name": "Asset wise Count", - "report_script": null, - "report_type": "Query Report", + "report_script": "def execute(filters=None):\n if filters is None:\n filters = {}\n\n conditions = [\"1=1\"]\n params = {}\n\n if filters.get(\"company\"):\n conditions.append(\"aml.custom_hospital_name = %(company)s\")\n params[\"company\"] = filters.get(\"company\")\n if filters.get(\"site_name\"):\n conditions.append(\"a.custom_site = %(site_name)s\")\n params[\"site_name\"] = filters.get(\"site_name\")\n\n where = \" AND \".join(conditions)\n\n query = \"\"\"\n SELECT\n aml.item_name AS item_name,\n aml.maintenance_status AS maintenance_status,\n SUM(CASE WHEN aml.due_date = aml.completion_date AND aml.maintenance_status = 'Completed' THEN 1 ELSE 0 END) AS completed_on_time,\n SUM(CASE WHEN aml.completion_date < aml.due_date AND aml.maintenance_status = 'Completed' THEN 1 ELSE 0 END) AS completed_within_time,\n SUM(CASE WHEN aml.completion_date > aml.due_date THEN 1 ELSE 0 END) AS delay_in_completion,\n SUM(CASE WHEN aml.maintenance_status = 'Planned' AND aml.completion_date IS NULL AND aml.due_date > CURRENT_DATE() THEN 1 ELSE 0 END) AS pending,\n SUM(CASE WHEN aml.maintenance_status = 'Planned' AND aml.completion_date IS NULL AND aml.due_date < CURRENT_DATE() THEN 1 ELSE 0 END) AS overdue,\n SUM(CASE WHEN aml.maintenance_status = 'Cancelled' THEN 1 ELSE 0 END) AS cancelled\n FROM `tabAsset Maintenance Log` aml\n LEFT JOIN `tabAsset` a ON aml.asset_name = a.name\n WHERE \"\"\" + where + \"\"\"\n GROUP BY aml.item_name\n \"\"\"\n\n data = frappe.db.sql(query, params, as_dict=True)\n return data\n\ndata = execute(filters)", + "report_type": "Script Report", "roles": [ { "parent": "Asset wise Count", @@ -1049,104 +1124,6 @@ ], "timeout": 0 }, - { - "add_total_row": 0, - "columns": [], - "disabled": 1, - "docstatus": 0, - "doctype": "Report", - "filters": [ - { - "default": null, - "fieldname": "from_date", - "fieldtype": "Date", - "label": "From Date", - "mandatory": 0, - "options": null, - "parent": "Technicians working Hours", - "parentfield": "filters", - "parenttype": "Report", - "wildcard_filter": 0 - }, - { - "default": null, - "fieldname": "to_date", - "fieldtype": "Date", - "label": "To Date", - "mandatory": 0, - "options": null, - "parent": "Technicians working Hours", - "parentfield": "filters", - "parenttype": "Report", - "wildcard_filter": 0 - } - ], - "is_standard": "No", - "javascript": null, - "json": null, - "letter_head": "Test", - "modified": "2025-04-22 14:49:11.337516", - "module": "Asset Lite", - "name": "Technicians working Hours", - "prepared_report": 0, - "query": null, - "ref_doctype": "Work_Order", - "reference_report": null, - "report_name": "Technicians working Hours", - "report_script": "def execute(filters):\r\n # Define the columns for the report\r\n columns = [\r\n {\"label\": \"Engineer\", \"fieldname\": \"engineer\", \"fieldtype\": \"Link\", \"options\": \"User\", \"width\": 200},\r\n {\"label\": \"Technician Name\", \"fieldname\": \"technician_name\", \"fieldtype\": \"Data\", \"width\": 200}, # New Column\r\n {\"label\": \"Total Hours Spent\", \"fieldname\": \"total_hours\", \"fieldtype\": \"Float\", \"width\": 150}\r\n ]\r\n\r\n # Prepare conditions and parameters\r\n conditions = []\r\n params = {}\r\n\r\n # Add date range filter if provided\r\n if filters.get(\"from_date\") and filters.get(\"to_date\"):\r\n conditions.append(\"t.creation BETWEEN %(start_date)s AND %(end_date)s\")\r\n params[\"start_date\"] = f\"{filters['from_date']} 00:00:00\"\r\n params[\"end_date\"] = f\"{filters['to_date']} 23:59:59\"\r\n\r\n # SQL Query to fetch technician details\r\n query = f\"\"\"\r\n SELECT\r\n t.assigned_technician AS engineer,\r\n u.full_name AS technician_name, -- Fetch Technician's Name from tabUser\r\n SUM(t.total_hours_spent) AS total_hours\r\n FROM\r\n `tabWork_Order` t\r\n LEFT JOIN \r\n `tabUser` u ON u.name = t.assigned_technician\r\n WHERE\r\n t.docstatus = 1\r\n GROUP BY\r\n t.assigned_technician, u.full_name\r\n \"\"\"\r\n\r\n # Execute the query with parameters\r\n result = frappe.db.sql(query, params, as_dict=True)\r\n\r\n return columns, result\r\n\r\ndata = execute(filters)\r\n", - "report_type": "Script Report", - "roles": [ - { - "parent": "Technicians working Hours", - "parentfield": "roles", - "parenttype": "Report", - "role": "Quality Manager" - }, - { - "parent": "Technicians working Hours", - "parentfield": "roles", - "parenttype": "Report", - "role": "Manufacturing Manager" - }, - { - "parent": "Technicians working Hours", - "parentfield": "roles", - "parenttype": "Report", - "role": "End user" - }, - { - "parent": "Technicians working Hours", - "parentfield": "roles", - "parenttype": "Report", - "role": "Technician" - }, - { - "parent": "Technicians working Hours", - "parentfield": "roles", - "parenttype": "Report", - "role": "Maintenance Manager" - }, - { - "parent": "Technicians working Hours", - "parentfield": "roles", - "parenttype": "Report", - "role": "Finance Manager" - }, - { - "parent": "Technicians working Hours", - "parentfield": "roles", - "parenttype": "Report", - "role": "Maintenance User" - }, - { - "parent": "Technicians working Hours", - "parentfield": "roles", - "parenttype": "Report", - "role": "System Manager" - } - ], - "timeout": 0 - }, { "add_total_row": 0, "columns": [], @@ -3519,6 +3496,30 @@ "docstatus": 0, "doctype": "Report", "filters": [ + { + "default": null, + "fieldname": "company", + "fieldtype": "Link", + "label": "Hospital", + "mandatory": 0, + "options": "Company", + "parent": "Asset Up and Down", + "parentfield": "filters", + "parenttype": "Report", + "wildcard_filter": 0 + }, + { + "default": null, + "fieldname": "site_name", + "fieldtype": "Link", + "label": "Site Name", + "mandatory": 0, + "options": "Mobile Team Site", + "parent": "Asset Up and Down", + "parentfield": "filters", + "parenttype": "Report", + "wildcard_filter": 0 + }, { "default": null, "fieldname": "department", @@ -3557,10 +3558,10 @@ } ], "is_standard": "No", - "javascript": "frappe.query_reports[\"Asset Up and Down\"] = {\n filters: [\n {\n fieldname: \"asset_name\",\n label: __(\"Asset\"),\n fieldtype: \"Link\",\n options: \"Asset\"\n },\n {\n fieldname: \"department\",\n label: __(\"Department\"),\n fieldtype: \"Link\",\n options: \"Department\"\n },\n {\n fieldname: \"custom_class\",\n label: __(\"Class\"),\n fieldtype: \"Data\"\n }\n ]\n};\n", + "javascript": "frappe.query_reports[\"Asset Up and Down\"] = {\n filters: [\n {\n fieldname: \"company\",\n label: __(\"Hospital\"),\n fieldtype: \"Link\",\n options: \"Company\"\n },\n {\n fieldname: \"site_name\",\n label: __(\"Site Name\"),\n fieldtype: \"Link\",\n options: \"Mobile Team Site\"\n },\n {\n fieldname: \"department\",\n label: __(\"Department\"),\n fieldtype: \"Link\",\n options: \"Department\"\n },\n {\n fieldname: \"custom_class\",\n label: __(\"Class\"),\n fieldtype: \"Select\",\n options: \"\\nClass A\\nClass B\\nClass C\"\n },\n {\n fieldname: \"name\",\n label: __(\"Asset\"),\n fieldtype: \"Link\",\n options: \"Asset\"\n }\n ]\n};\n", "json": null, "letter_head": null, - "modified": "2025-04-22 14:49:11.436123", + "modified": "2026-08-13 13:23:47.026878", "module": "Asset Lite", "name": "Asset Up and Down", "prepared_report": 0, @@ -3568,7 +3569,7 @@ "ref_doctype": "Asset", "reference_report": null, "report_name": "Asset Up and Down", - "report_script": "def execute(filters=None):\n if filters is None:\n filters = {}\n\n result = []\n status_count = {}\n\n # Fetch the department, name, and custom_class filter values (if any)\n department = filters.get(\"department\")\n name = filters.get(\"name\")\n custom_class = filters.get(\"custom_class\")\n\n # SQL query to fetch asset ID, asset name, status, department, and class\n if department and custom_class and name:\n query = \"\"\"\n SELECT\n name AS name,\n asset_name,\n custom_device_status AS status,\n department,\n name,\n custom_class\n FROM\n `tabAsset`\n WHERE\n department = %s AND custom_class = %s AND name = %s\n ORDER BY\n asset_name\n \"\"\"\n result = frappe.db.sql(query, (department, custom_class, name), as_dict=True)\n \n elif department and custom_class:\n query = \"\"\"\n SELECT\n name AS name,\n asset_name,\n custom_device_status AS status,\n department,\n name,\n custom_class\n FROM\n `tabAsset`\n WHERE\n department = %s AND custom_class = %s\n ORDER BY\n asset_name\n \"\"\"\n result = frappe.db.sql(query, (department, custom_class), as_dict=True)\n \n elif department and name:\n query = \"\"\"\n SELECT\n name AS name,\n asset_name,\n custom_device_status AS status,\n department,\n name,\n custom_class\n FROM\n `tabAsset`\n WHERE\n department = %s AND name = %s\n ORDER BY\n asset_name\n \"\"\"\n result = frappe.db.sql(query, (department, name), as_dict=True)\n \n elif custom_class and name:\n query = \"\"\"\n SELECT\n name AS name,\n asset_name,\n custom_device_status AS status,\n department,\n name,\n custom_class\n FROM\n `tabAsset`\n WHERE\n custom_class = %s AND name = %s\n ORDER BY\n asset_name\n \"\"\"\n result = frappe.db.sql(query, (custom_class, name), as_dict=True)\n elif department:\n query = \"\"\"\n SELECT\n name AS name,\n asset_name,\n custom_device_status AS status,\n department,\n name,\n custom_class\n FROM\n `tabAsset`\n WHERE\n department = %s\n ORDER BY\n asset_name\n \"\"\"\n result = frappe.db.sql(query, (department,), as_dict=True)\n elif custom_class:\n query = \"\"\"\n SELECT\n name AS name,\n asset_name,\n custom_device_status AS status,\n department,\n name,\n custom_class\n FROM\n `tabAsset`\n WHERE\n custom_class = %s\n ORDER BY\n asset_name\n \"\"\"\n result = frappe.db.sql(query, (custom_class,), as_dict=True)\n elif name:\n query = \"\"\"\n SELECT\n name AS name,\n asset_name,\n custom_device_status AS status,\n department,\n name,\n custom_class\n FROM\n `tabAsset`\n WHERE\n name = %s\n ORDER BY\n asset_name\n \"\"\"\n result = frappe.db.sql(query, (name,), as_dict=True)\n else:\n query_no_filters = \"\"\"\n SELECT\n name AS name,\n asset_name,\n custom_device_status AS status,\n department,\n name,\n custom_class\n FROM\n `tabAsset`\n ORDER BY\n asset_name\n \"\"\"\n result = frappe.db.sql(query_no_filters, as_dict=True)\n\n # Prepare data for the chart\n for row in result:\n status = row['status']\n if status:\n normalized_status = status.strip().lower()\n status_count[normalized_status] = status_count.get(normalized_status, 0) + 1\n\n chart_labels = list(status_count.keys())\n chart_values = list(status_count.values())\n\n columns = [\n {\"fieldname\": \"name\", \"label\": \"Asset ID\", \"fieldtype\": \"Link\", \"options\": \"Asset\", \"width\": 200},\n {\"fieldname\": \"asset_name\", \"label\": \"Asset Name\", \"fieldtype\": \"Data\", \"width\": 200},\n {\"fieldname\": \"status\", \"label\": \"Status\", \"fieldtype\": \"Data\", \"width\": 100},\n {\"fieldname\": \"department\", \"label\": \"Department\", \"fieldtype\": \"Link\", \"options\": \"Department\", \"width\": 150},\n {\"fieldname\": \"custom_class\", \"label\": \"Class\", \"fieldtype\": \"Data\", \"width\": 200},\n ]\n\n status_colors = [\"#2ba63d\" if status == 'up' else \"#FF0000\" if status == 'down' else \"#0000FF\" for status in chart_labels]\n\n chart = {\n \"data\": {\n \"labels\": chart_labels,\n \"datasets\": [{\"name\": \"Number of Assets\", \"values\": chart_values}]\n },\n \"type\": \"pie\",\n \"colors\": status_colors\n }\n\n return columns, result, None, chart\n\ndata = execute(filters)\n", + "report_script": "def execute(filters=None):\n if filters is None:\n filters = {}\n\n result = []\n status_count = {}\n\n company = filters.get(\"company\")\n site_name = filters.get(\"site_name\")\n department = filters.get(\"department\")\n name = filters.get(\"name\")\n custom_class = filters.get(\"custom_class\")\n\n conditions = [\"1=1\"]\n params = {}\n\n if company:\n conditions.append(\"company = %(company)s\")\n params[\"company\"] = company\n if site_name:\n conditions.append(\"custom_site = %(site_name)s\")\n params[\"site_name\"] = site_name\n if department:\n conditions.append(\"department = %(department)s\")\n params[\"department\"] = department\n if custom_class:\n conditions.append(\"custom_class = %(custom_class)s\")\n params[\"custom_class\"] = custom_class\n if name:\n conditions.append(\"name = %(name)s\")\n params[\"name\"] = name\n\n where = \" AND \".join(conditions)\n\n query = \"\"\"\n SELECT\n name AS name,\n asset_name,\n custom_device_status AS status,\n department,\n custom_class\n FROM\n `tabAsset`\n WHERE\n \"\"\" + where + \"\"\"\n ORDER BY\n asset_name\n \"\"\"\n\n result = frappe.db.sql(query, params, as_dict=True)\n\n for row in result:\n status = row.get('status')\n if status:\n normalized_status = status.strip().lower()\n status_count[normalized_status] = status_count.get(normalized_status, 0) + 1\n\n chart_labels = list(status_count.keys())\n chart_values = list(status_count.values())\n\n columns = [\n {\"fieldname\": \"name\", \"label\": \"Asset ID\", \"fieldtype\": \"Link\", \"options\": \"Asset\", \"width\": 200},\n {\"fieldname\": \"asset_name\", \"label\": \"Asset Name\", \"fieldtype\": \"Data\", \"width\": 200},\n {\"fieldname\": \"status\", \"label\": \"Status\", \"fieldtype\": \"Data\", \"width\": 100},\n {\"fieldname\": \"department\", \"label\": \"Department\", \"fieldtype\": \"Link\", \"options\": \"Department\", \"width\": 150},\n {\"fieldname\": \"custom_class\", \"label\": \"Class\", \"fieldtype\": \"Data\", \"width\": 200},\n ]\n\n status_colors = [\"#2ba63d\" if status == 'up' else \"#FF0000\" if status == 'down' else \"#0000FF\" for status in chart_labels]\n\n chart = {\n \"data\": {\n \"labels\": chart_labels,\n \"datasets\": [{\"name\": \"Number of Assets\", \"values\": chart_values}]\n },\n \"type\": \"pie\",\n \"colors\": status_colors\n }\n\n return columns, result, None, chart\n\ndata = execute(filters)", "report_type": "Script Report", "roles": [ { @@ -3617,6 +3618,30 @@ "docstatus": 0, "doctype": "Report", "filters": [ + { + "default": null, + "fieldname": "company", + "fieldtype": "Link", + "label": "Hospital", + "mandatory": 0, + "options": "Company", + "parent": "Work Order Status", + "parentfield": "filters", + "parenttype": "Report", + "wildcard_filter": 0 + }, + { + "default": null, + "fieldname": "site_name", + "fieldtype": "Link", + "label": "Site Name", + "mandatory": 0, + "options": "Mobile Team Site", + "parent": "Work Order Status", + "parentfield": "filters", + "parenttype": "Report", + "wildcard_filter": 0 + }, { "default": null, "fieldname": "repair_status", @@ -3670,15 +3695,15 @@ "javascript": "", "json": null, "letter_head": "", - "modified": "2025-06-20 13:40:07.036876", + "modified": "2026-08-13 13:23:47.145400", "module": "Asset Lite", "name": "Work Order Status", "prepared_report": 0, - "query": "", + "query": null, "ref_doctype": "Work_Order", "reference_report": null, "report_name": "Work Order Status", - "report_script": "def get_result(filters):\r\n\r\n columns = [\r\n {\"label\": _(\"Work Order Type\"), \"fieldname\": \"work_order_type\", \"fieldtype\": \"Data\", \"width\": 200},\r\n {\"label\": _(\"Open\"), \"fieldname\": \"open_count\", \"fieldtype\": \"Int\", \"width\": 200},\r\n {\"label\": _(\"Work In Progress\"), \"fieldname\": \"work_in_progress_count\", \"fieldtype\": \"Int\", \"width\": 200},\r\n {\"label\": _(\"Pending Review\"), \"fieldname\": \"pending_review_count\", \"fieldtype\": \"Int\", \"width\": 200},\r\n {\"label\": _(\"Completed\"), \"fieldname\": \"completed_count\", \"fieldtype\": \"Int\", \"width\": 200},\r\n {\"label\": _(\"Closed\"), \"fieldname\": \"closed_count\", \"fieldtype\": \"Int\", \"width\": 200}\r\n ]\r\n\r\n additional_filters = \"\"\r\n filter_fields = ['work_order_type','repair_status','asset_type']\r\n\r\n for field in filter_fields:\r\n if filters.get(field):\r\n additional_filters = additional_filters + f\" AND wt.{field} = '{filters.get(field)}'\"\r\n\r\n \r\n query = f\"\"\"\r\n SELECT\r\n name as wo_name,\r\n asset_type,\r\n work_order_type,\r\n SUM(CASE WHEN repair_status = 'Open' THEN 1 ELSE 0 END) AS open_count,\r\n SUM(CASE WHEN repair_status = 'Work In Progress' THEN 1 ELSE 0 END) AS work_in_progress_count,\r\n SUM(CASE WHEN repair_status = 'Pending Review' THEN 1 ELSE 0 END) AS pending_review_count,\r\n SUM(CASE WHEN repair_status = 'Completed' THEN 1 ELSE 0 END) AS completed_count,\r\n SUM(CASE WHEN repair_status = 'Closed' THEN 1 ELSE 0 END) AS closed_count\r\n FROM\r\n `tabWork_Order` as wt\r\n WHERE\r\n repair_status IN ('Open', 'Work In Progress', 'Pending Review', 'Completed', 'Closed','Cancelled') {additional_filters}\r\n GROUP BY\r\n work_order_type\r\n \"\"\"\r\n result = frappe.db.sql(query, as_dict=1)\r\n\r\n \r\n #data1 = []\r\n\r\n # Append the columns as the first element\r\n #data1.append(columns)\r\n\r\n # Append the result rows to the data list\r\n #data1.extend(result)\r\n\r\n sql1=\"SELECT repair_status, COUNT(*) as count FROM `tabWork_Order` WHERE repair_status IN ('Open')\"\r\n sql2=\"SELECT repair_status, COUNT(*) as count FROM `tabWork_Order` WHERE repair_status IN ('Work In Progress')\"\r\n sql3=\"SELECT repair_status, COUNT(*) as count FROM `tabWork_Order` WHERE repair_status IN ('Pending Review')\"\r\n sql4=\"SELECT repair_status, COUNT(*) as count FROM `tabWork_Order` WHERE repair_status IN ('Completed')\"\r\n sql5=\"SELECT repair_status, COUNT(*) as count FROM `tabWork_Order` WHERE repair_status IN ('Closed')\"\r\n sql6=\"SELECT repair_status, COUNT(*) as count FROM `tabWork_Order` WHERE repair_status IN ('Open', 'Work In Progress', 'Pending Review', 'Completed', 'Closed', 'Cancelled')\"\r\n report_summary = [\r\n {\"value\": row.count, \"label\": \"Open\"} for row in frappe.db.sql(sql1, as_dict=True)]+[\r\n {\"value\": row.count, \"label\": \"Work In Progress\"} for row in frappe.db.sql(sql2, as_dict=True)]+[\r\n {\"value\": row.count, \"label\": \"Pending Review\"} for row in frappe.db.sql(sql3, as_dict=True)]+[\r\n {\"value\": row.count, \"label\": \"Completed\"} for row in frappe.db.sql(sql4, as_dict=True)]+[\r\n {\"value\": row.count, \"label\": \"Closed\"} for row in frappe.db.sql(sql5, as_dict=True)]+[\r\n {\"value\": row.count, \"label\": \"Total Work Orders\"} for row in frappe.db.sql(sql6, as_dict=True)\r\n ]\r\n\r\n #chart = {\r\n # \"data\": {\r\n # \"labels\": [row['label'] for row in report_summary],\r\n # \"datasets\": [\r\n # {\r\n # \"name\": \"Count\",\r\n # \"values\": [row['value'] for row in report_summary],\r\n # }\r\n # ]\r\n # },\r\n # \"type\": \"bar\"\r\n #}\r\n chart = {\r\n \"data\": {\r\n \"labels\": [row['work_order_type'] for row in result],\r\n \"datasets\": [\r\n {\r\n \"name\": \"Open\",\r\n \"values\": [row['open_count'] for row in result],\r\n },\r\n {\r\n \"name\": \"Work In Progress\",\r\n \"values\": [row['work_in_progress_count'] for row in result],\r\n },\r\n {\r\n \"name\": \"Pending Review\",\r\n \"values\": [row['pending_review_count'] for row in result],\r\n },\r\n {\r\n \"name\": \"Completed\",\r\n \"values\": [row['completed_count'] for row in result],\r\n },\r\n {\r\n \"name\": \"Closed\",\r\n \"values\": [row['closed_count'] for row in result],\r\n },\r\n ]\r\n },\r\n \"type\": \"bar\",\r\n \"barOptions\": {\r\n \"stacked\": 1,\r\n \"spaceRatio\": 0.6\r\n },\r\n \"colors\": [\"#CCCCB7\", \"#52B2BF\", \"#9EC1A4\", \"#058D7C\", \"#A3A5CF\"],\r\n }\r\n return columns,result,None,chart,report_summary\r\n\r\n\r\ndata = get_result(filters)", + "report_script": "def execute(filters=None):\n if filters is None:\n filters = {}\n\n columns = [\n {\"label\": _(\"Work Order Type\"), \"fieldname\": \"work_order_type\", \"fieldtype\": \"Data\", \"width\": 200},\n {\"label\": _(\"Open\"), \"fieldname\": \"open_count\", \"fieldtype\": \"Int\", \"width\": 200},\n {\"label\": _(\"Work In Progress\"), \"fieldname\": \"work_in_progress_count\", \"fieldtype\": \"Int\", \"width\": 200},\n {\"label\": _(\"Pending Review\"), \"fieldname\": \"pending_review_count\", \"fieldtype\": \"Int\", \"width\": 200},\n {\"label\": _(\"Completed\"), \"fieldname\": \"completed_count\", \"fieldtype\": \"Int\", \"width\": 200},\n {\"label\": _(\"Closed\"), \"fieldname\": \"closed_count\", \"fieldtype\": \"Int\", \"width\": 200}\n ]\n\n conditions = [\"repair_status IN ('Open', 'Work In Progress', 'Pending Review', 'Completed', 'Closed', 'Cancelled')\"]\n params = {}\n\n if filters.get('work_order_type'):\n conditions.append(\"work_order_type = %(work_order_type)s\")\n params['work_order_type'] = filters.get('work_order_type')\n if filters.get('repair_status'):\n conditions.append(\"repair_status = %(repair_status)s\")\n params['repair_status'] = filters.get('repair_status')\n if filters.get('asset_type'):\n conditions.append(\"asset_type = %(asset_type)s\")\n params['asset_type'] = filters.get('asset_type')\n if filters.get('company'):\n conditions.append(\"company = %(company)s\")\n params['company'] = filters.get('company')\n if filters.get('site_name'):\n conditions.append(\"site_name = %(site_name)s\")\n params['site_name'] = filters.get('site_name')\n if filters.get('wo_name'):\n conditions.append(\"name = %(wo_name)s\")\n params['wo_name'] = filters.get('wo_name')\n\n where = \" AND \".join(conditions)\n\n query = \"\"\"\n SELECT\n name as wo_name,\n asset_type,\n work_order_type,\n SUM(CASE WHEN repair_status = 'Open' THEN 1 ELSE 0 END) AS open_count,\n SUM(CASE WHEN repair_status = 'Work In Progress' THEN 1 ELSE 0 END) AS work_in_progress_count,\n SUM(CASE WHEN repair_status = 'Pending Review' THEN 1 ELSE 0 END) AS pending_review_count,\n SUM(CASE WHEN repair_status = 'Completed' THEN 1 ELSE 0 END) AS completed_count,\n SUM(CASE WHEN repair_status = 'Closed' THEN 1 ELSE 0 END) AS closed_count\n FROM\n `tabWork_Order`\n WHERE\n \"\"\" + where + \"\"\"\n GROUP BY\n work_order_type\n \"\"\"\n\n result = frappe.db.sql(query, params, as_dict=1)\n\n report_summary = []\n for status in ['Open', 'Work In Progress', 'Pending Review', 'Completed', 'Closed']:\n status_conditions = list(conditions)\n status_conditions.append(\"repair_status = %(status)s\")\n status_params = dict(params)\n status_params['status'] = status\n status_where = \" AND \".join(status_conditions)\n count = frappe.db.sql(\n \"SELECT COUNT(*) FROM `tabWork_Order` WHERE \" + status_where,\n status_params\n )[0][0]\n report_summary.append({\"value\": count, \"label\": status})\n\n total = frappe.db.sql(\n \"SELECT COUNT(*) FROM `tabWork_Order` WHERE \" + where,\n params\n )[0][0]\n report_summary.append({\"value\": total, \"label\": \"Total Work Orders\"})\n\n chart = {\n \"data\": {\n \"labels\": [row['work_order_type'] for row in result],\n \"datasets\": [\n {\"name\": \"Open\", \"values\": [row['open_count'] for row in result]},\n {\"name\": \"Work In Progress\", \"values\": [row['work_in_progress_count'] for row in result]},\n {\"name\": \"Pending Review\", \"values\": [row['pending_review_count'] for row in result]},\n {\"name\": \"Completed\", \"values\": [row['completed_count'] for row in result]},\n {\"name\": \"Closed\", \"values\": [row['closed_count'] for row in result]},\n ]\n },\n \"type\": \"bar\",\n \"barOptions\": {\"stacked\": 1, \"spaceRatio\": 0.6},\n \"colors\": [\"#CCCCB7\", \"#52B2BF\", \"#9EC1A4\", \"#058D7C\", \"#A3A5CF\"],\n }\n\n return columns, result, None, chart, report_summary\n\ndata = execute(filters)", "report_type": "Script Report", "roles": [ { @@ -4191,5 +4216,347 @@ } ], "timeout": 0 + }, + { + "add_total_row": 1, + "columns": [], + "disabled": 0, + "docstatus": 0, + "doctype": "Report", + "filters": [ + { + "default": null, + "fieldname": "work_order_type", + "fieldtype": "Link", + "label": "Type", + "mandatory": 0, + "options": "Issue Type", + "parent": "Technician Work Order Summary", + "parentfield": "filters", + "parenttype": "Report", + "wildcard_filter": 0 + }, + { + "default": null, + "fieldname": "from_date", + "fieldtype": "Date", + "label": "From date", + "mandatory": 0, + "options": null, + "parent": "Technician Work Order Summary", + "parentfield": "filters", + "parenttype": "Report", + "wildcard_filter": 0 + }, + { + "default": null, + "fieldname": "to_date", + "fieldtype": "Date", + "label": "To date", + "mandatory": 0, + "options": null, + "parent": "Technician Work Order Summary", + "parentfield": "filters", + "parenttype": "Report", + "wildcard_filter": 0 + }, + { + "default": null, + "fieldname": "company", + "fieldtype": "Link", + "label": "Hospital", + "mandatory": 0, + "options": "Company", + "parent": "Technician Work Order Summary", + "parentfield": "filters", + "parenttype": "Report", + "wildcard_filter": 0 + }, + { + "default": null, + "fieldname": "site_name", + "fieldtype": "Link", + "label": "PHCC Site", + "mandatory": 0, + "options": "Mobile Team Site", + "parent": "Technician Work Order Summary", + "parentfield": "filters", + "parenttype": "Report", + "wildcard_filter": 0 + } + ], + "is_standard": "No", + "javascript": null, + "json": null, + "letter_head": "", + "modified": "2026-08-17 19:29:01.523828", + "module": "Asset Lite", + "name": "Technician Work Order Summary", + "prepared_report": 0, + "query": null, + "ref_doctype": "Work_Order", + "reference_report": null, + "report_name": "Technician Work Order Summary", + "report_script": "def execute(filters=None):\r\n if not filters:\r\n filters = {}\r\n\r\n def get_columns():\r\n return [\r\n {\r\n \"label\": _(\"Assigned Technician\"),\r\n \"fieldname\": \"custom_assign_to_contractor\",\r\n \"fieldtype\": \"Data\",\r\n \"width\": 220\r\n },\r\n {\r\n \"label\": _(\"Total\"),\r\n \"fieldname\": \"total\",\r\n \"fieldtype\": \"Int\",\r\n \"width\": 120\r\n },\r\n {\r\n \"label\": _(\"Completed\"),\r\n \"fieldname\": \"completed\",\r\n \"fieldtype\": \"Int\",\r\n \"width\": 120\r\n },\r\n {\r\n \"label\": _(\"In Progress\"),\r\n \"fieldname\": \"in_progress\",\r\n \"fieldtype\": \"Int\",\r\n \"width\": 130\r\n },\r\n {\r\n \"label\": _(\"Open\"),\r\n \"fieldname\": \"open\",\r\n \"fieldtype\": \"Int\",\r\n \"width\": 100\r\n }\r\n ]\r\n\r\n def get_data():\r\n conditions = []\r\n params = {}\r\n\r\n conditions.append(\"docstatus < 2\")\r\n conditions.append(\"custom_assign_to_contractor IS NOT NULL\")\r\n conditions.append(\"custom_assign_to_contractor != ''\")\r\n\r\n if filters.get(\"work_order_type\"):\r\n conditions.append(\"work_order_type = %(work_order_type)s\")\r\n params[\"work_order_type\"] = filters.get(\"work_order_type\")\r\n \r\n if filters.get(\"company\"):\r\n conditions.append(\"company = %(company)s\")\r\n params[\"company\"] = filters.get(\"company\")\r\n \r\n if filters.get(\"site_name\"):\r\n conditions.append(\"site_name = %(site_name)s\")\r\n params[\"site_name\"] = filters.get(\"site_name\")\r\n\r\n if filters.get(\"from_date\"):\r\n conditions.append(\"DATE(creation) >= %(from_date)s\")\r\n params[\"from_date\"] = filters.get(\"from_date\")\r\n\r\n if filters.get(\"to_date\"):\r\n conditions.append(\"DATE(creation) <= %(to_date)s\")\r\n params[\"to_date\"] = filters.get(\"to_date\")\r\n\r\n condition_str = \" AND \".join(conditions)\r\n\r\n query = f\"\"\"\r\n SELECT\r\n custom_assign_to_contractor,\r\n COUNT(name) AS total,\r\n SUM(CASE\r\n WHEN repair_status IN ('Completed', 'Closed', 'Pending Review')\r\n THEN 1 ELSE 0\r\n END) AS completed,\r\n SUM(CASE\r\n WHEN repair_status IN ('Work In Progress')\r\n THEN 1 ELSE 0\r\n END) AS in_progress,\r\n SUM(CASE\r\n WHEN repair_status IN ('Open')\r\n THEN 1 ELSE 0\r\n END) AS open\r\n FROM `tabWork_Order`\r\n WHERE {condition_str}\r\n GROUP BY custom_assign_to_contractor\r\n ORDER BY total DESC\r\n \"\"\"\r\n return frappe.db.sql(query, params, as_dict=True)\r\n\r\n columns = get_columns()\r\n data = get_data()\r\n return columns, data, None, None\r\n\r\n\r\ndata = execute(filters)", + "report_type": "Script Report", + "roles": [ + { + "parent": "Technician Work Order Summary", + "parentfield": "roles", + "parenttype": "Report", + "role": "Quality Manager" + }, + { + "parent": "Technician Work Order Summary", + "parentfield": "roles", + "parenttype": "Report", + "role": "Manufacturing Manager" + }, + { + "parent": "Technician Work Order Summary", + "parentfield": "roles", + "parenttype": "Report", + "role": "End user" + }, + { + "parent": "Technician Work Order Summary", + "parentfield": "roles", + "parenttype": "Report", + "role": "Technician" + }, + { + "parent": "Technician Work Order Summary", + "parentfield": "roles", + "parenttype": "Report", + "role": "Maintenance Manager" + }, + { + "parent": "Technician Work Order Summary", + "parentfield": "roles", + "parenttype": "Report", + "role": "Finance Manager" + }, + { + "parent": "Technician Work Order Summary", + "parentfield": "roles", + "parenttype": "Report", + "role": "Maintenance User" + }, + { + "parent": "Technician Work Order Summary", + "parentfield": "roles", + "parenttype": "Report", + "role": "System Manager" + }, + { + "parent": "Technician Work Order Summary", + "parentfield": "roles", + "parenttype": "Report", + "role": "Sales Manager" + } + ], + "timeout": 0 + }, + { + "add_total_row": 0, + "columns": [], + "disabled": 0, + "docstatus": 0, + "doctype": "Report", + "filters": [ + { + "default": null, + "fieldname": "from_date", + "fieldtype": "Date", + "label": "From Date", + "mandatory": 0, + "options": null, + "parent": "Technicians working Hours", + "parentfield": "filters", + "parenttype": "Report", + "wildcard_filter": 0 + }, + { + "default": null, + "fieldname": "to_date", + "fieldtype": "Date", + "label": "To Date", + "mandatory": 0, + "options": null, + "parent": "Technicians working Hours", + "parentfield": "filters", + "parenttype": "Report", + "wildcard_filter": 0 + }, + { + "default": null, + "fieldname": "work_order_type", + "fieldtype": "Link", + "label": "Type", + "mandatory": 0, + "options": "Issue Type", + "parent": "Technicians working Hours", + "parentfield": "filters", + "parenttype": "Report", + "wildcard_filter": 0 + }, + { + "default": null, + "fieldname": "company", + "fieldtype": "Link", + "label": "Hospital", + "mandatory": 0, + "options": "Company", + "parent": "Technicians working Hours", + "parentfield": "filters", + "parenttype": "Report", + "wildcard_filter": 0 + }, + { + "default": null, + "fieldname": "site_name", + "fieldtype": "Link", + "label": "PHCC Site Name", + "mandatory": 0, + "options": "Mobile Team Site", + "parent": "Technicians working Hours", + "parentfield": "filters", + "parenttype": "Report", + "wildcard_filter": 0 + } + ], + "is_standard": "No", + "javascript": null, + "json": null, + "letter_head": "", + "modified": "2026-08-18 12:21:08.564085", + "module": "Asset Lite", + "name": "Technicians working Hours", + "prepared_report": 0, + "query": null, + "ref_doctype": "Work_Order", + "reference_report": null, + "report_name": "Technicians working Hours", + "report_script": "def execute(filters=None):\r\n filters = filters or {}\r\n\r\n columns = [\r\n {\"label\": \"Engineer\", \"fieldname\": \"engineer\", \"fieldtype\": \"Link\", \"options\": \"User\", \"width\": 200},\r\n {\"label\": \"Technician Name\", \"fieldname\": \"technician_name\", \"fieldtype\": \"Data\", \"width\": 200},\r\n {\"label\": \"Total Hours Spent\", \"fieldname\": \"total_hours\", \"fieldtype\": \"Float\", \"width\": 150}\r\n ]\r\n\r\n conditions = []\r\n params = {}\r\n\r\n # Date filter\r\n if filters.get(\"from_date\"):\r\n conditions.append(\"DATE(t.creation) >= %(from_date)s\")\r\n params[\"from_date\"] = filters.get(\"from_date\")\r\n\r\n if filters.get(\"to_date\"):\r\n conditions.append(\"DATE(t.creation) <= %(to_date)s\")\r\n params[\"to_date\"] = filters.get(\"to_date\")\r\n \r\n if filters.get(\"work_order_type\"):\r\n conditions.append(\"t.work_order_type = %(work_order_type)s\")\r\n params[\"work_order_type\"] = filters.get(\"work_order_type\")\r\n\r\n if filters.get(\"company\"):\r\n conditions.append(\"t.company = %(company)s\")\r\n params[\"company\"] = filters.get(\"company\")\r\n\r\n if filters.get(\"site_name\"):\r\n conditions.append(\"t.site_name = %(site_name)s\")\r\n params[\"site_name\"] = filters.get(\"site_name\")\r\n\r\n\r\n # Build final condition string\r\n condition_str = \"\"\r\n if conditions:\r\n condition_str = \" AND \" + \" AND \".join(conditions)\r\n\r\n query = f\"\"\"\r\n SELECT\r\n t.custom_assign_to_contractor AS engineer,\r\n u.full_name AS technician_name,\r\n SUM(t.total_hours_spent) AS total_hours\r\n FROM\r\n `tabWork_Order` t\r\n LEFT JOIN \r\n `tabUser` u ON u.name = t.custom_assign_to_contractor\r\n WHERE\r\n IFNULL(t.custom_assign_to_contractor, '') != ''\r\n {condition_str}\r\n GROUP BY\r\n t.custom_assign_to_contractor, u.full_name\r\n \"\"\"\r\n\r\n\r\n data = frappe.db.sql(query, params, as_dict=True)\r\n\r\n return columns, data\r\n\r\n\r\ndata = execute(filters)\r\n", + "report_type": "Script Report", + "roles": [ + { + "parent": "Technicians working Hours", + "parentfield": "roles", + "parenttype": "Report", + "role": "Quality Manager" + }, + { + "parent": "Technicians working Hours", + "parentfield": "roles", + "parenttype": "Report", + "role": "Manufacturing Manager" + }, + { + "parent": "Technicians working Hours", + "parentfield": "roles", + "parenttype": "Report", + "role": "End user" + }, + { + "parent": "Technicians working Hours", + "parentfield": "roles", + "parenttype": "Report", + "role": "Technician" + }, + { + "parent": "Technicians working Hours", + "parentfield": "roles", + "parenttype": "Report", + "role": "Maintenance Manager" + }, + { + "parent": "Technicians working Hours", + "parentfield": "roles", + "parenttype": "Report", + "role": "Finance Manager" + }, + { + "parent": "Technicians working Hours", + "parentfield": "roles", + "parenttype": "Report", + "role": "Maintenance User" + }, + { + "parent": "Technicians working Hours", + "parentfield": "roles", + "parenttype": "Report", + "role": "System Manager" + } + ], + "timeout": 0 + }, + { + "add_total_row": 0, + "columns": [], + "disabled": 0, + "docstatus": 0, + "doctype": "Report", + "filters": [ + { + "default": null, + "fieldname": "work_order", + "fieldtype": "Link", + "label": "Work Order", + "mandatory": 0, + "options": "Work_Order", + "parent": "WO feedback", + "parentfield": "filters", + "parenttype": "Report", + "wildcard_filter": 0 + }, + { + "default": null, + "fieldname": "requester_name", + "fieldtype": "Data", + "label": "Requester Name", + "mandatory": 0, + "options": null, + "parent": "WO feedback", + "parentfield": "filters", + "parenttype": "Report", + "wildcard_filter": 0 + }, + { + "default": null, + "fieldname": "rating", + "fieldtype": "Select", + "label": "Rating", + "mandatory": 0, + "options": "\nExcellent / ممتاز\nGood / جيد\nAverage / متوسط\nPoor / ضعيف", + "parent": "WO feedback", + "parentfield": "filters", + "parenttype": "Report", + "wildcard_filter": 0 + } + ], + "is_standard": "No", + "javascript": null, + "json": null, + "letter_head": "", + "modified": "2026-08-18 14:15:09.785843", + "module": "Asset Lite", + "name": "WO feedback", + "prepared_report": 0, + "query": null, + "ref_doctype": "WO Feedback", + "reference_report": null, + "report_name": "WO feedback", + "report_script": "\r\n\r\ndef execute(filters=None):\r\n \r\n\r\n def get_columns():\r\n return [\r\n {\r\n \"label\": \"Work Order\",\r\n \"fieldname\": \"work_order\",\r\n \"fieldtype\": \"Link\",\r\n \"options\": \"Work_Order\",\r\n \"width\": 180,\r\n },\r\n {\r\n \"label\": \"Requester Name\",\r\n \"fieldname\": \"requester_name\",\r\n \"fieldtype\": \"Data\",\r\n \"width\": 200,\r\n },\r\n {\r\n \"label\": \"Rating\",\r\n \"fieldname\": \"rating\",\r\n \"fieldtype\": \"Select\",\r\n \"width\": 150,\r\n },\r\n {\r\n \"label\": \"Comments\",\r\n \"fieldname\": \"comments\",\r\n \"fieldtype\": \"Small Text\",\r\n \"width\": 400,\r\n },\r\n ]\r\n \r\n \r\n def get_data():\r\n conditions = {}\r\n \r\n if filters.get(\"work_order\"):\r\n conditions[\"work_order\"] = filters.get(\"work_order\")\r\n \r\n if filters.get(\"requester_name\"):\r\n conditions[\"requester_name\"] = [\"like\", f\"%{filters.get('requester_name')}%\"]\r\n \r\n if filters.get(\"rating\"):\r\n conditions[\"rating\"] = filters.get(\"rating\")\r\n \r\n return frappe.get_all(\r\n \"WO Feedback\",\r\n filters=conditions,\r\n fields=[\r\n \"work_order\",\r\n \"requester_name\",\r\n \"rating\",\r\n \"comments\",\r\n ],\r\n order_by=\"creation desc\",\r\n )\r\n \r\n \r\n def get_chart(data):\r\n rating_count = {}\r\n \r\n for row in data:\r\n rating = row.get(\"rating\") or \"Not Rated\"\r\n rating_count[rating] = rating_count.get(rating, 0) + 1\r\n \r\n return {\r\n \"data\": {\r\n \"labels\": list(rating_count.keys()),\r\n \"datasets\": [\r\n {\r\n \"name\": \"Work Orders\",\r\n \"values\": list(rating_count.values()),\r\n }\r\n ],\r\n },\r\n \"type\": \"pie\",\r\n \"height\": 300,\r\n \"colors\": [\r\n \"#28a745\",\r\n \"#ffc107\",\r\n \"#dc3545\",\r\n \"#17a2b8\",\r\n \"#6f42c1\",\r\n ],\r\n }\r\n \r\n columns = get_columns()\r\n data = get_data()\r\n\r\n chart = get_chart(data)\r\n\r\n return columns, data, None, chart\r\n \r\ndata = execute(filters)", + "report_type": "Script Report", + "roles": [ + { + "parent": "WO feedback", + "parentfield": "roles", + "parenttype": "Report", + "role": "System Manager" + } + ], + "timeout": 0 } ] \ No newline at end of file diff --git a/asset_lite/fixtures/role.json b/asset_lite/fixtures/role.json index 9cfdb38..6199201 100644 --- a/asset_lite/fixtures/role.json +++ b/asset_lite/fixtures/role.json @@ -1,743 +1,1472 @@ [ { + "bulk_actions": 1, + "dashboard": 1, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 1, "home_page": null, "is_custom": 0, + "list_sidebar": 1, + "modified": "2025-08-11 18:18:19.107262", + "name": "General", + "notifications": 1, + "restrict_to_domain": null, + "role_name": "General", + "search_bar": 1, + "timeline": 1, + "two_factor_auth": 0, + "view_switcher": 1 + }, + { + "bulk_actions": 1, + "dashboard": 1, + "desk_access": 1, + "disabled": 0, + "docstatus": 0, + "doctype": "Role", + "form_sidebar": 1, + "home_page": null, + "is_custom": 0, + "list_sidebar": 1, + "modified": "2025-08-11 18:18:19.149912", + "name": "PHCC End User", + "notifications": 1, + "restrict_to_domain": null, + "role_name": "PHCC End User", + "search_bar": 1, + "timeline": 1, + "two_factor_auth": 0, + "view_switcher": 1 + }, + { + "bulk_actions": 1, + "dashboard": 1, + "desk_access": 1, + "disabled": 0, + "docstatus": 0, + "doctype": "Role", + "form_sidebar": 1, + "home_page": null, + "is_custom": 0, + "list_sidebar": 1, + "modified": "2025-08-11 18:18:19.170359", + "name": "PHCC Site Manager", + "notifications": 1, + "restrict_to_domain": null, + "role_name": "PHCC Site Manager", + "search_bar": 1, + "timeline": 1, + "two_factor_auth": 0, + "view_switcher": 1 + }, + { + "bulk_actions": 1, + "dashboard": 1, + "desk_access": 1, + "disabled": 0, + "docstatus": 0, + "doctype": "Role", + "form_sidebar": 1, + "home_page": null, + "is_custom": 0, + "list_sidebar": 1, + "modified": "2025-08-11 18:18:19.186764", + "name": "Biomed Mobile Team", + "notifications": 1, + "restrict_to_domain": null, + "role_name": "Biomed Mobile Team", + "search_bar": 1, + "timeline": 1, + "two_factor_auth": 0, + "view_switcher": 1 + }, + { + "bulk_actions": 1, + "dashboard": 1, + "desk_access": 1, + "disabled": 0, + "docstatus": 0, + "doctype": "Role", + "form_sidebar": 1, + "home_page": null, + "is_custom": 0, + "list_sidebar": 1, + "modified": "2025-08-11 18:18:19.203087", + "name": "Non-Biomed Mobile Team", + "notifications": 1, + "restrict_to_domain": null, + "role_name": "Non-Biomed Mobile Team", + "search_bar": 1, + "timeline": 1, + "two_factor_auth": 0, + "view_switcher": 1 + }, + { + "bulk_actions": 1, + "dashboard": 1, + "desk_access": 1, + "disabled": 0, + "docstatus": 0, + "doctype": "Role", + "form_sidebar": 1, + "home_page": null, + "is_custom": 0, + "list_sidebar": 1, + "modified": "2025-08-11 18:18:19.219531", + "name": "Helpdesk Contact", + "notifications": 1, + "restrict_to_domain": null, + "role_name": "Helpdesk Contact", + "search_bar": 1, + "timeline": 1, + "two_factor_auth": 0, + "view_switcher": 1 + }, + { + "bulk_actions": 1, + "dashboard": 1, + "desk_access": 1, + "disabled": 0, + "docstatus": 0, + "doctype": "Role", + "form_sidebar": 1, + "home_page": null, + "is_custom": 0, + "list_sidebar": 1, + "modified": "2025-08-11 18:18:19.237795", + "name": "Agent Manager", + "notifications": 1, + "restrict_to_domain": null, + "role_name": "Agent Manager", + "search_bar": 1, + "timeline": 1, + "two_factor_auth": 0, + "view_switcher": 1 + }, + { + "bulk_actions": 1, + "dashboard": 1, + "desk_access": 1, + "disabled": 0, + "docstatus": 0, + "doctype": "Role", + "form_sidebar": 1, + "home_page": null, + "is_custom": 0, + "list_sidebar": 1, + "modified": "2025-08-11 18:18:19.254769", + "name": "Agent", + "notifications": 1, + "restrict_to_domain": null, + "role_name": "Agent", + "search_bar": 1, + "timeline": 1, + "two_factor_auth": 0, + "view_switcher": 1 + }, + { + "bulk_actions": 1, + "dashboard": 1, + "desk_access": 1, + "disabled": 0, + "docstatus": 0, + "doctype": "Role", + "form_sidebar": 1, + "home_page": null, + "is_custom": 0, + "list_sidebar": 1, + "modified": "2025-08-26 14:05:38.209045", + "name": "Sub Contractor", + "notifications": 1, + "restrict_to_domain": null, + "role_name": "Sub Contractor", + "search_bar": 1, + "timeline": 1, + "two_factor_auth": 0, + "view_switcher": 1 + }, + { + "bulk_actions": 1, + "dashboard": 1, + "desk_access": 1, + "disabled": 0, + "docstatus": 0, + "doctype": "Role", + "form_sidebar": 1, + "home_page": null, + "is_custom": 0, + "list_sidebar": 1, + "modified": "2025-08-26 14:05:38.262790", + "name": "General WOA", + "notifications": 1, + "restrict_to_domain": null, + "role_name": "General WOA", + "search_bar": 1, + "timeline": 1, + "two_factor_auth": 0, + "view_switcher": 1 + }, + { + "bulk_actions": 1, + "dashboard": 1, + "desk_access": 1, + "disabled": 0, + "docstatus": 0, + "doctype": "Role", + "form_sidebar": 1, + "home_page": null, + "is_custom": 0, + "list_sidebar": 1, + "modified": "2025-08-26 14:05:38.286650", + "name": "General Contractor", + "notifications": 1, + "restrict_to_domain": null, + "role_name": "General Contractor", + "search_bar": 1, + "timeline": 1, + "two_factor_auth": 0, + "view_switcher": 1 + }, + { + "bulk_actions": 1, + "dashboard": 1, + "desk_access": 1, + "disabled": 0, + "docstatus": 0, + "doctype": "Role", + "form_sidebar": 1, + "home_page": null, + "is_custom": 0, + "list_sidebar": 1, + "modified": "2025-08-26 14:05:38.309563", + "name": "Cluster Manager", + "notifications": 1, + "restrict_to_domain": null, + "role_name": "Cluster Manager", + "search_bar": 1, + "timeline": 1, + "two_factor_auth": 0, + "view_switcher": 1 + }, + { + "bulk_actions": 1, + "dashboard": 1, + "desk_access": 1, + "disabled": 0, + "docstatus": 0, + "doctype": "Role", + "form_sidebar": 1, + "home_page": null, + "is_custom": 0, + "list_sidebar": 1, + "modified": "2026-01-08 12:25:31.434306", + "name": "Site Supervisor", + "notifications": 1, + "restrict_to_domain": null, + "role_name": "Site Supervisor", + "search_bar": 1, + "timeline": 1, + "two_factor_auth": 0, + "view_switcher": 1 + }, + { + "bulk_actions": 0, + "dashboard": 0, + "desk_access": 1, + "disabled": 0, + "docstatus": 0, + "doctype": "Role", + "form_sidebar": 0, + "home_page": null, + "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:35:19.094250", "name": "All", + "notifications": 0, "restrict_to_domain": null, "role_name": "All", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:35:19.117689", "name": "Desk User", + "notifications": 0, "restrict_to_domain": null, "role_name": "Desk User", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:35:19.135948", "name": "Administrator", + "notifications": 0, "restrict_to_domain": null, "role_name": "Administrator", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:35:19.155222", "name": "System Manager", + "notifications": 0, "restrict_to_domain": null, "role_name": "System Manager", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 0, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:35:19.173127", "name": "Guest", + "notifications": 0, "restrict_to_domain": null, "role_name": "Guest", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:35:20.444323", "name": "Website Manager", + "notifications": 0, "restrict_to_domain": null, "role_name": "Website Manager", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:35:21.265113", "name": "Dashboard Manager", + "notifications": 0, "restrict_to_domain": null, "role_name": "Dashboard Manager", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:35:24.039903", "name": "Workspace Manager", + "notifications": 0, "restrict_to_domain": null, "role_name": "Workspace Manager", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:35:24.690340", "name": "Report Manager", + "notifications": 0, "restrict_to_domain": null, "role_name": "Report Manager", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:35:26.377446", "name": "Script Manager", + "notifications": 0, "restrict_to_domain": null, "role_name": "Script Manager", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:35:31.947922", "name": "Inbox User", + "notifications": 0, "restrict_to_domain": null, "role_name": "Inbox User", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:35:38.777401", "name": "Prepared Report User", + "notifications": 0, "restrict_to_domain": null, "role_name": "Prepared Report User", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:35:45.317483", "name": "Blogger", + "notifications": 0, "restrict_to_domain": null, "role_name": "Blogger", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:35:50.870457", "name": "Knowledge Base Contributor", + "notifications": 0, "restrict_to_domain": null, "role_name": "Knowledge Base Contributor", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:35:50.879219", "name": "Knowledge Base Editor", + "notifications": 0, "restrict_to_domain": null, "role_name": "Knowledge Base Editor", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:35:51.226238", "name": "Newsletter Manager", + "notifications": 0, "restrict_to_domain": null, "role_name": "Newsletter Manager", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:36:03.376844", "name": "Purchase User", + "notifications": 0, "restrict_to_domain": null, "role_name": "Purchase User", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:36:03.382037", "name": "Accounts Manager", + "notifications": 0, "restrict_to_domain": null, "role_name": "Accounts Manager", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:36:03.393822", "name": "Accounts User", + "notifications": 0, "restrict_to_domain": null, "role_name": "Accounts User", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:36:03.407907", "name": "Sales User", + "notifications": 0, "restrict_to_domain": null, "role_name": "Sales User", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:36:20.721069", "name": "Maintenance User", + "notifications": 0, "restrict_to_domain": null, "role_name": "Maintenance User", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:36:21.139134", "name": "Sales Master Manager", + "notifications": 0, "restrict_to_domain": null, "role_name": "Sales Master Manager", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-12-02 12:03:08.192040", "name": "Maintenance Manager", + "notifications": 0, "restrict_to_domain": null, "role_name": "Maintenance Manager", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:36:21.214703", "name": "Sales Manager", + "notifications": 0, "restrict_to_domain": null, "role_name": "Sales Manager", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:36:21.265634", "name": "Purchase Manager", + "notifications": 0, "restrict_to_domain": null, "role_name": "Purchase Manager", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:36:21.300925", "name": "Purchase Master Manager", + "notifications": 0, "restrict_to_domain": null, "role_name": "Purchase Master Manager", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:36:30.941434", "name": "Translator", + "notifications": 0, "restrict_to_domain": null, "role_name": "Translator", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:38:27.560209", "name": "Auditor", + "notifications": 0, "restrict_to_domain": null, "role_name": "Auditor", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:38:33.807572", "name": "Employee", + "notifications": 0, "restrict_to_domain": null, "role_name": "Employee", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:38:55.043319", "name": "Stock User", + "notifications": 0, "restrict_to_domain": null, "role_name": "Stock User", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:38:55.085051", "name": "Stock Manager", + "notifications": 0, "restrict_to_domain": null, "role_name": "Stock Manager", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:39:09.591960", "name": "HR Manager", + "notifications": 0, "restrict_to_domain": null, "role_name": "HR Manager", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:39:15.793051", "name": "Manufacturing Manager", + "notifications": 0, "restrict_to_domain": null, "role_name": "Manufacturing Manager", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:39:22.567962", "name": "Projects User", + "notifications": 0, "restrict_to_domain": null, "role_name": "Projects User", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:39:23.129226", "name": "Projects Manager", + "notifications": 0, "restrict_to_domain": null, "role_name": "Projects Manager", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:39:24.665470", "name": "Manufacturing User", + "notifications": 0, "restrict_to_domain": null, "role_name": "Manufacturing User", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:39:24.703795", "name": "HR User", + "notifications": 0, "restrict_to_domain": null, "role_name": "HR User", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:39:33.545346", "name": "Item Manager", + "notifications": 0, "restrict_to_domain": null, "role_name": "Item Manager", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:39:39.041152", "name": "Delivery Manager", + "notifications": 0, "restrict_to_domain": null, "role_name": "Delivery Manager", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:39:39.120493", "name": "Delivery User", + "notifications": 0, "restrict_to_domain": null, "role_name": "Delivery User", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:39:39.164591", "name": "Fleet Manager", + "notifications": 0, "restrict_to_domain": null, "role_name": "Fleet Manager", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 0, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:40:58.334106", "name": "Customer", + "notifications": 0, "restrict_to_domain": null, "role_name": "Customer", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:39:42.853853", "name": "Academics User", + "notifications": 0, "restrict_to_domain": null, "role_name": "Academics User", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:39:57.597870", "name": "Fulfillment User", + "notifications": 0, "restrict_to_domain": null, "role_name": "Fulfillment User", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:39:58.626027", "name": "Quality Manager", + "notifications": 0, "restrict_to_domain": null, "role_name": "Quality Manager", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:40:20.875114", "name": "Support Team", + "notifications": 0, "restrict_to_domain": null, "role_name": "Support Team", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:40:26.597194", "name": "Agriculture User", + "notifications": 0, "restrict_to_domain": null, "role_name": "Agriculture User", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:40:26.686632", "name": "Agriculture Manager", + "notifications": 0, "restrict_to_domain": null, "role_name": "Agriculture Manager", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 0, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:40:58.335720", "name": "Supplier", + "notifications": 0, "restrict_to_domain": null, "role_name": "Supplier", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-19 19:40:54.989931", "name": "Analytics", + "notifications": 0, "restrict_to_domain": null, "role_name": "Analytics", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-13 09:46:01.365842", "name": "End user", + "notifications": 0, "restrict_to_domain": null, "role_name": "End user", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-13 09:55:47.630048", "name": "Technician", + "notifications": 0, "restrict_to_domain": null, "role_name": "Technician", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-17 17:29:43.223879", "name": "Finance User", + "notifications": 0, "restrict_to_domain": null, "role_name": "Finance User", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-09-17 17:36:27.388207", "name": "Finance Manager", + "notifications": 0, "restrict_to_domain": null, "role_name": "Finance Manager", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2022-12-07 21:36:44.284615", "name": "Insights Admin", + "notifications": 0, "restrict_to_domain": null, "role_name": "Insights Admin", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 0, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2022-12-07 21:36:44.121244", "name": "Insights User", + "notifications": 0, "restrict_to_domain": null, "role_name": "Insights User", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 }, { + "bulk_actions": 0, + "dashboard": 0, "desk_access": 1, "disabled": 0, "docstatus": 0, "doctype": "Role", + "form_sidebar": 0, "home_page": null, "is_custom": 0, + "list_sidebar": 0, "modified": "2024-12-26 17:36:24.120200", "name": "Asset Manager", + "notifications": 0, "restrict_to_domain": null, "role_name": "Asset Manager", - "two_factor_auth": 0 + "search_bar": 0, + "timeline": 0, + "two_factor_auth": 0, + "view_switcher": 0 } ] \ No newline at end of file diff --git a/asset_lite/fixtures/server_script.json b/asset_lite/fixtures/server_script.json index ed094d5..1b5abfc 100644 --- a/asset_lite/fixtures/server_script.json +++ b/asset_lite/fixtures/server_script.json @@ -313,7 +313,7 @@ "doctype_event": "Before Insert", "enable_rate_limit": 0, "event_frequency": "All", - "modified": "2026-01-06 17:11:37.557942", + "modified": "2026-08-06 21:09:20.199705", "module": "Asset Lite", "name": "Create Item on Asset", "rate_limit_count": 5, diff --git a/asset_lite/fixtures/workflow.json b/asset_lite/fixtures/workflow.json index 47da068..0b8c548 100644 --- a/asset_lite/fixtures/workflow.json +++ b/asset_lite/fixtures/workflow.json @@ -1259,605 +1259,12 @@ "workflow_name": "Asset Maintenance Log", "workflow_state_field": "workflow_state" }, - { - "docstatus": 0, - "doctype": "Workflow", - "document_type": "Work_Order", - "is_active": 0, - "modified": "2026-01-09 09:12:45.581476", - "name": "Work Job Order", - "override_status": 0, - "send_email_alert": 0, - "states": [ - { - "allow_edit": "End user", - "avoid_status_override": 0, - "doc_status": "0", - "is_optional_state": 0, - "message": null, - "next_action_email_template": null, - "parent": "Work Job Order", - "parentfield": "states", - "parenttype": "Workflow", - "state": "Draft", - "update_field": "repair_status", - "update_value": "Open", - "workflow_builder_id": null - }, - { - "allow_edit": "Maintenance Manager", - "avoid_status_override": 0, - "doc_status": "0", - "is_optional_state": 0, - "message": null, - "next_action_email_template": null, - "parent": "Work Job Order", - "parentfield": "states", - "parenttype": "Workflow", - "state": "Sent To Maintenance manger", - "update_field": "repair_status", - "update_value": "Open", - "workflow_builder_id": null - }, - { - "allow_edit": "Technician", - "avoid_status_override": 0, - "doc_status": "0", - "is_optional_state": 0, - "message": null, - "next_action_email_template": null, - "parent": "Work Job Order", - "parentfield": "states", - "parenttype": "Workflow", - "state": "Repair InProgress", - "update_field": "repair_status", - "update_value": "Work In Progress", - "workflow_builder_id": null - }, - { - "allow_edit": "Technician", - "avoid_status_override": 0, - "doc_status": "0", - "is_optional_state": 0, - "message": null, - "next_action_email_template": null, - "parent": "Work Job Order", - "parentfield": "states", - "parenttype": "Workflow", - "state": "Repair InProgress", - "update_field": null, - "update_value": null, - "workflow_builder_id": null - }, - { - "allow_edit": "Finance Manager", - "avoid_status_override": 0, - "doc_status": "0", - "is_optional_state": 0, - "message": null, - "next_action_email_template": null, - "parent": "Work Job Order", - "parentfield": "states", - "parenttype": "Workflow", - "state": "Pending Purchase", - "update_field": null, - "update_value": null, - "workflow_builder_id": null - }, - { - "allow_edit": "Maintenance Manager", - "avoid_status_override": 0, - "doc_status": "0", - "is_optional_state": 0, - "message": null, - "next_action_email_template": null, - "parent": "Work Job Order", - "parentfield": "states", - "parenttype": "Workflow", - "state": "Pending Approval", - "update_field": "repair_status", - "update_value": "Pending Review", - "workflow_builder_id": null - }, - { - "allow_edit": "Cluster Manager", - "avoid_status_override": 0, - "doc_status": "2", - "is_optional_state": 0, - "message": null, - "next_action_email_template": null, - "parent": "Work Job Order", - "parentfield": "states", - "parenttype": "Workflow", - "state": "Cancelled", - "update_field": "repair_status", - "update_value": "Cancelled", - "workflow_builder_id": null - }, - { - "allow_edit": "Maintenance Manager", - "avoid_status_override": 0, - "doc_status": "1", - "is_optional_state": 0, - "message": null, - "next_action_email_template": null, - "parent": "Work Job Order", - "parentfield": "states", - "parenttype": "Workflow", - "state": "Rejected", - "update_field": "", - "update_value": "", - "workflow_builder_id": null - }, - { - "allow_edit": "Maintenance Manager", - "avoid_status_override": 0, - "doc_status": "1", - "is_optional_state": 0, - "message": null, - "next_action_email_template": null, - "parent": "Work Job Order", - "parentfield": "states", - "parenttype": "Workflow", - "state": "Completed", - "update_field": "repair_status", - "update_value": "Completed", - "workflow_builder_id": null - }, - { - "allow_edit": "PHCC Site Manager", - "avoid_status_override": 0, - "doc_status": "1", - "is_optional_state": 0, - "message": null, - "next_action_email_template": null, - "parent": "Work Job Order", - "parentfield": "states", - "parenttype": "Workflow", - "state": "Completed", - "update_field": "repair_status", - "update_value": "Completed", - "workflow_builder_id": null - }, - { - "allow_edit": "PHCC End User", - "avoid_status_override": 0, - "doc_status": "0", - "is_optional_state": 0, - "message": null, - "next_action_email_template": null, - "parent": "Work Job Order", - "parentfield": "states", - "parenttype": "Workflow", - "state": "Draft", - "update_field": "repair_status", - "update_value": "Open", - "workflow_builder_id": null - }, - { - "allow_edit": "PHCC Site Manager", - "avoid_status_override": 0, - "doc_status": "0", - "is_optional_state": 0, - "message": null, - "next_action_email_template": null, - "parent": "Work Job Order", - "parentfield": "states", - "parenttype": "Workflow", - "state": "Sent To Site Manager", - "update_field": "repair_status", - "update_value": "Open", - "workflow_builder_id": null - }, - { - "allow_edit": "PHCC Site Manager", - "avoid_status_override": 0, - "doc_status": "0", - "is_optional_state": 0, - "message": null, - "next_action_email_template": null, - "parent": "Work Job Order", - "parentfield": "states", - "parenttype": "Workflow", - "state": "Pending Approval", - "update_field": "repair_status", - "update_value": "Pending Review", - "workflow_builder_id": null - }, - { - "allow_edit": "PHCC Site Manager", - "avoid_status_override": 0, - "doc_status": "0", - "is_optional_state": 0, - "message": null, - "next_action_email_template": null, - "parent": "Work Job Order", - "parentfield": "states", - "parenttype": "Workflow", - "state": "Rejected", - "update_field": null, - "update_value": null, - "workflow_builder_id": null - }, - { - "allow_edit": "Technician", - "avoid_status_override": 0, - "doc_status": "0", - "is_optional_state": 0, - "message": null, - "next_action_email_template": null, - "parent": "Work Job Order", - "parentfield": "states", - "parenttype": "Workflow", - "state": "Draft", - "update_field": "repair_status", - "update_value": "Open", - "workflow_builder_id": null - }, - { - "allow_edit": "Cluster Manager", - "avoid_status_override": 0, - "doc_status": "0", - "is_optional_state": 0, - "message": null, - "next_action_email_template": null, - "parent": "Work Job Order", - "parentfield": "states", - "parenttype": "Workflow", - "state": "Closed", - "update_field": "repair_status", - "update_value": "Closed", - "workflow_builder_id": null - }, - { - "allow_edit": "General WOA", - "avoid_status_override": 0, - "doc_status": "0", - "is_optional_state": 0, - "message": null, - "next_action_email_template": null, - "parent": "Work Job Order", - "parentfield": "states", - "parenttype": "Workflow", - "state": "Sent to General WOA", - "update_field": "repair_status", - "update_value": "Open", - "workflow_builder_id": null - }, - { - "allow_edit": "General Contractor", - "avoid_status_override": 0, - "doc_status": "0", - "is_optional_state": 0, - "message": null, - "next_action_email_template": null, - "parent": "Work Job Order", - "parentfield": "states", - "parenttype": "Workflow", - "state": "Repair InProgress", - "update_field": "repair_status", - "update_value": "Work In Progress", - "workflow_builder_id": null - }, - { - "allow_edit": "General Contractor", - "avoid_status_override": 0, - "doc_status": "0", - "is_optional_state": 0, - "message": null, - "next_action_email_template": null, - "parent": "Work Job Order", - "parentfield": "states", - "parenttype": "Workflow", - "state": "Pending Approval", - "update_field": "repair_status", - "update_value": "Pending Review", - "workflow_builder_id": null - }, - { - "allow_edit": "General WOA", - "avoid_status_override": 0, - "doc_status": "0", - "is_optional_state": 0, - "message": null, - "next_action_email_template": null, - "parent": "Work Job Order", - "parentfield": "states", - "parenttype": "Workflow", - "state": "Pending Approval", - "update_field": "repair_status", - "update_value": "Pending Review", - "workflow_builder_id": null - } - ], - "transitions": [ - { - "action": "Apply", - "allow_self_approval": 1, - "allowed": "End user", - "condition": "doc.asset_type != \"Non Biomedical\" and not doc.site_name", - "next_state": "Sent To Maintenance manger", - "parent": "Work Job Order", - "parentfield": "transitions", - "parenttype": "Workflow", - "state": "Draft", - "workflow_builder_id": null - }, - { - "action": "Apply", - "allow_self_approval": 1, - "allowed": "Technician", - "condition": "doc.asset_type == \"Biomedical\"", - "next_state": "Sent To Maintenance manger", - "parent": "Work Job Order", - "parentfield": "transitions", - "parenttype": "Workflow", - "state": "Draft", - "workflow_builder_id": null - }, - { - "action": "Send For Repair", - "allow_self_approval": 1, - "allowed": "Maintenance Manager", - "condition": null, - "next_state": "Repair InProgress", - "parent": "Work Job Order", - "parentfield": "transitions", - "parenttype": "Workflow", - "state": "Sent To Maintenance manger", - "workflow_builder_id": null - }, - { - "action": "Send For Approval", - "allow_self_approval": 1, - "allowed": "Technician", - "condition": "", - "next_state": "Pending Approval", - "parent": "Work Job Order", - "parentfield": "transitions", - "parenttype": "Workflow", - "state": "Repair InProgress", - "workflow_builder_id": null - }, - { - "action": "Material Request", - "allow_self_approval": 1, - "allowed": "Technician", - "condition": "doc.need_procurement == 1", - "next_state": "Pending Purchase", - "parent": "Work Job Order", - "parentfield": "transitions", - "parenttype": "Workflow", - "state": "Repair InProgress", - "workflow_builder_id": null - }, - { - "action": "Send For Repair", - "allow_self_approval": 1, - "allowed": "Finance Manager", - "condition": null, - "next_state": "Repair InProgress", - "parent": "Work Job Order", - "parentfield": "transitions", - "parenttype": "Workflow", - "state": "Pending Purchase", - "workflow_builder_id": null - }, - { - "action": "Accept", - "allow_self_approval": 1, - "allowed": "Maintenance Manager", - "condition": "", - "next_state": "Completed", - "parent": "Work Job Order", - "parentfield": "transitions", - "parenttype": "Workflow", - "state": "Pending Approval", - "workflow_builder_id": null - }, - { - "action": "Reject", - "allow_self_approval": 1, - "allowed": "Maintenance Manager", - "condition": null, - "next_state": "Rejected", - "parent": "Work Job Order", - "parentfield": "transitions", - "parenttype": "Workflow", - "state": "Pending Approval", - "workflow_builder_id": null - }, - { - "action": "Apply", - "allow_self_approval": 1, - "allowed": "PHCC End User", - "condition": "doc.site_name and doc.asset_type == \"Biomedical\"", - "next_state": "Sent To Maintenance manger", - "parent": "Work Job Order", - "parentfield": "transitions", - "parenttype": "Workflow", - "state": "Draft", - "workflow_builder_id": null - }, - { - "action": "Close", - "allow_self_approval": 1, - "allowed": "Cluster Manager", - "condition": null, - "next_state": "Closed", - "parent": "Work Job Order", - "parentfield": "transitions", - "parenttype": "Workflow", - "state": "Sent To Maintenance manger", - "workflow_builder_id": null - }, - { - "action": "Close", - "allow_self_approval": 1, - "allowed": "Cluster Manager", - "condition": null, - "next_state": "Closed", - "parent": "Work Job Order", - "parentfield": "transitions", - "parenttype": "Workflow", - "state": "Repair InProgress", - "workflow_builder_id": null - }, - { - "action": "Close", - "allow_self_approval": 1, - "allowed": "Cluster Manager", - "condition": null, - "next_state": "Closed", - "parent": "Work Job Order", - "parentfield": "transitions", - "parenttype": "Workflow", - "state": "Pending Purchase", - "workflow_builder_id": null - }, - { - "action": "Close", - "allow_self_approval": 1, - "allowed": "Cluster Manager", - "condition": null, - "next_state": "Closed", - "parent": "Work Job Order", - "parentfield": "transitions", - "parenttype": "Workflow", - "state": "Pending Approval", - "workflow_builder_id": null - }, - { - "action": "Close", - "allow_self_approval": 1, - "allowed": "Cluster Manager", - "condition": null, - "next_state": "Closed", - "parent": "Work Job Order", - "parentfield": "transitions", - "parenttype": "Workflow", - "state": "Sent to General WOA", - "workflow_builder_id": null - }, - { - "action": "Re-Open", - "allow_self_approval": 1, - "allowed": "Cluster Manager", - "condition": "doc.asset_type != \"Non Biomedical\"", - "next_state": "Sent To Maintenance manger", - "parent": "Work Job Order", - "parentfield": "transitions", - "parenttype": "Workflow", - "state": "Closed", - "workflow_builder_id": null - }, - { - "action": "Re-Open", - "allow_self_approval": 1, - "allowed": "Cluster Manager", - "condition": "doc.site_name and doc.asset_type == \"Non Biomedical\"", - "next_state": "Sent to General WOA", - "parent": "Work Job Order", - "parentfield": "transitions", - "parenttype": "Workflow", - "state": "Closed", - "workflow_builder_id": null - }, - { - "action": "Cancel", - "allow_self_approval": 1, - "allowed": "Cluster Manager", - "condition": null, - "next_state": "Cancelled", - "parent": "Work Job Order", - "parentfield": "transitions", - "parenttype": "Workflow", - "state": "Completed", - "workflow_builder_id": null - }, - { - "action": "Cancel", - "allow_self_approval": 1, - "allowed": "Cluster Manager", - "condition": "doc.docstatus == 1", - "next_state": "Cancelled", - "parent": "Work Job Order", - "parentfield": "transitions", - "parenttype": "Workflow", - "state": "Rejected", - "workflow_builder_id": null - }, - { - "action": "Apply", - "allow_self_approval": 1, - "allowed": "PHCC End User", - "condition": "doc.site_name and doc.asset_type == \"Non Biomedical\"", - "next_state": "Sent to General WOA", - "parent": "Work Job Order", - "parentfield": "transitions", - "parenttype": "Workflow", - "state": "Draft", - "workflow_builder_id": null - }, - { - "action": "Send For Repair", - "allow_self_approval": 1, - "allowed": "General WOA", - "condition": "doc.custom_assign_to_contractor", - "next_state": "Repair InProgress", - "parent": "Work Job Order", - "parentfield": "transitions", - "parenttype": "Workflow", - "state": "Sent to General WOA", - "workflow_builder_id": null - }, - { - "action": "Send For Approval", - "allow_self_approval": 1, - "allowed": "General Contractor", - "condition": null, - "next_state": "Pending Approval", - "parent": "Work Job Order", - "parentfield": "transitions", - "parenttype": "Workflow", - "state": "Repair InProgress", - "workflow_builder_id": null - }, - { - "action": "Accept", - "allow_self_approval": 1, - "allowed": "General WOA", - "condition": null, - "next_state": "Completed", - "parent": "Work Job Order", - "parentfield": "transitions", - "parenttype": "Workflow", - "state": "Pending Approval", - "workflow_builder_id": null - }, - { - "action": "Reject", - "allow_self_approval": 1, - "allowed": "General WOA", - "condition": null, - "next_state": "Rejected", - "parent": "Work Job Order", - "parentfield": "transitions", - "parenttype": "Workflow", - "state": "Pending Approval", - "workflow_builder_id": null - } - ], - "workflow_data": null, - "workflow_name": "Work Job Order", - "workflow_state_field": "workflow_state" - }, { "docstatus": 0, "doctype": "Workflow", "document_type": "Work_Order", "is_active": 1, - "modified": "2026-01-29 14:26:57.557634", + "modified": "2026-08-14 13:26:21.302350", "name": "Work Order", "override_status": 0, "send_email_alert": 0, @@ -1907,21 +1314,6 @@ "update_value": "Work In Progress", "workflow_builder_id": null }, - { - "allow_edit": "Technician", - "avoid_status_override": 0, - "doc_status": "0", - "is_optional_state": 0, - "message": null, - "next_action_email_template": null, - "parent": "Work Order", - "parentfield": "states", - "parenttype": "Workflow", - "state": "Repair InProgress", - "update_field": null, - "update_value": null, - "workflow_builder_id": null - }, { "allow_edit": "Finance Manager", "avoid_status_override": 0, @@ -1952,10 +1344,55 @@ "update_value": "Pending Review", "workflow_builder_id": null }, + { + "allow_edit": "End user", + "avoid_status_override": 0, + "doc_status": "0", + "is_optional_state": 0, + "message": null, + "next_action_email_template": null, + "parent": "Work Order", + "parentfield": "states", + "parenttype": "Workflow", + "state": "Completed", + "update_field": "repair_status", + "update_value": "Completed", + "workflow_builder_id": null + }, + { + "allow_edit": "Site Supervisor", + "avoid_status_override": 0, + "doc_status": "0", + "is_optional_state": 0, + "message": null, + "next_action_email_template": null, + "parent": "Work Order", + "parentfield": "states", + "parenttype": "Workflow", + "state": "Completed", + "update_field": "repair_status", + "update_value": "Completed", + "workflow_builder_id": null + }, + { + "allow_edit": "Projects Manager", + "avoid_status_override": 0, + "doc_status": "0", + "is_optional_state": 0, + "message": null, + "next_action_email_template": null, + "parent": "Work Order", + "parentfield": "states", + "parenttype": "Workflow", + "state": "Completed", + "update_field": "repair_status", + "update_value": "Completed", + "workflow_builder_id": null + }, { "allow_edit": "Cluster Manager", "avoid_status_override": 0, - "doc_status": "2", + "doc_status": "0", "is_optional_state": 0, "message": null, "next_action_email_template": null, @@ -1970,7 +1407,7 @@ { "allow_edit": "Maintenance Manager", "avoid_status_override": 0, - "doc_status": "1", + "doc_status": "0", "is_optional_state": 0, "message": null, "next_action_email_template": null, @@ -2075,7 +1512,7 @@ { "allow_edit": "Cluster Manager", "avoid_status_override": 0, - "doc_status": "1", + "doc_status": "0", "is_optional_state": 0, "message": null, "next_action_email_template": null, @@ -2090,7 +1527,7 @@ { "allow_edit": "Maintenance Manager", "avoid_status_override": 0, - "doc_status": "1", + "doc_status": "0", "is_optional_state": 0, "message": null, "next_action_email_template": null, @@ -2105,7 +1542,7 @@ { "allow_edit": "End user", "avoid_status_override": 0, - "doc_status": "1", + "doc_status": "0", "is_optional_state": 0, "message": null, "next_action_email_template": null, @@ -2116,6 +1553,36 @@ "update_field": "repair_status", "update_value": "Closed", "workflow_builder_id": null + }, + { + "allow_edit": "Projects Manager", + "avoid_status_override": 0, + "doc_status": "0", + "is_optional_state": 0, + "message": null, + "next_action_email_template": null, + "parent": "Work Order", + "parentfield": "states", + "parenttype": "Workflow", + "state": "Sent To Project Manager", + "update_field": null, + "update_value": null, + "workflow_builder_id": null + }, + { + "allow_edit": "Maintenance Manager", + "avoid_status_override": 0, + "doc_status": "0", + "is_optional_state": 0, + "message": null, + "next_action_email_template": null, + "parent": "Work Order", + "parentfield": "states", + "parenttype": "Workflow", + "state": "Sent To Maintenance manger", + "update_field": null, + "update_value": null, + "workflow_builder_id": null } ], "transitions": [ @@ -2123,7 +1590,7 @@ "action": "Apply", "allow_self_approval": 1, "allowed": "End user", - "condition": "", + "condition": "(doc.company == \"Iman General Hospital\" or doc.company == \"Mobile Team - Iman\")", "next_state": "Sent to Team Leader", "parent": "Work Order", "parentfield": "transitions", @@ -2135,7 +1602,7 @@ "action": "Apply", "allow_self_approval": 1, "allowed": "Technician", - "condition": "doc.asset_type == \"Biomedical\"", + "condition": "doc.asset_type == \"Biomedical\" and (doc.company == \"Iman General Hospital\" or doc.company == \"Mobile Team - Iman\")", "next_state": "Sent to Team Leader", "parent": "Work Order", "parentfield": "transitions", @@ -2143,6 +1610,270 @@ "state": "Draft", "workflow_builder_id": null }, + { + "action": "Send For Repair", + "allow_self_approval": 1, + "allowed": "Maintenance Manager", + "condition": "doc.custom_assign_to_contractor and (doc.company == \"Iman General Hospital\" or doc.company == \"Mobile Team - Iman\")", + "next_state": "Repair InProgress", + "parent": "Work Order", + "parentfield": "transitions", + "parenttype": "Workflow", + "state": "Sent to Team Leader", + "workflow_builder_id": null + }, + { + "action": "Send For Approval", + "allow_self_approval": 1, + "allowed": "Technician", + "condition": "(doc.company == \"Iman General Hospital\" or doc.company == \"Mobile Team - Iman\")", + "next_state": "Pending Approval", + "parent": "Work Order", + "parentfield": "transitions", + "parenttype": "Workflow", + "state": "Repair InProgress", + "workflow_builder_id": null + }, + { + "action": "Material Request", + "allow_self_approval": 1, + "allowed": "Technician", + "condition": "doc.need_procurement == 1 and (doc.company == \"Iman General Hospital\" or doc.company == \"Mobile Team - Iman\")", + "next_state": "Pending Purchase", + "parent": "Work Order", + "parentfield": "transitions", + "parenttype": "Workflow", + "state": "Repair InProgress", + "workflow_builder_id": null + }, + { + "action": "Send For Repair", + "allow_self_approval": 1, + "allowed": "Finance Manager", + "condition": "(doc.company == \"Iman General Hospital\" or doc.company == \"Mobile Team - Iman\")", + "next_state": "Repair InProgress", + "parent": "Work Order", + "parentfield": "transitions", + "parenttype": "Workflow", + "state": "Pending Purchase", + "workflow_builder_id": null + }, + { + "action": "Accept", + "allow_self_approval": 1, + "allowed": "Maintenance Manager", + "condition": "(doc.company == \"Iman General Hospital\" or doc.company == \"Mobile Team - Iman\")", + "next_state": "Completed", + "parent": "Work Order", + "parentfield": "transitions", + "parenttype": "Workflow", + "state": "Pending Approval", + "workflow_builder_id": null + }, + { + "action": "Reject", + "allow_self_approval": 1, + "allowed": "Maintenance Manager", + "condition": "(doc.company == \"Iman General Hospital\" or doc.company == \"Mobile Team - Iman\")", + "next_state": "Rejected", + "parent": "Work Order", + "parentfield": "transitions", + "parenttype": "Workflow", + "state": "Pending Approval", + "workflow_builder_id": null + }, + { + "action": "Apply", + "allow_self_approval": 1, + "allowed": "PHCC End User", + "condition": "doc.site_name and doc.asset_type == \"Biomedical\" and (doc.company == \"Iman General Hospital\" or doc.company == \"Mobile Team - Iman\")", + "next_state": "Sent to Team Leader", + "parent": "Work Order", + "parentfield": "transitions", + "parenttype": "Workflow", + "state": "Draft", + "workflow_builder_id": null + }, + { + "action": "Close", + "allow_self_approval": 1, + "allowed": "End user", + "condition": "(doc.company == \"Iman General Hospital\" or doc.company == \"Mobile Team - Iman\")", + "next_state": "Closed", + "parent": "Work Order", + "parentfield": "transitions", + "parenttype": "Workflow", + "state": "Completed", + "workflow_builder_id": null + }, + { + "action": "Cancel", + "allow_self_approval": 1, + "allowed": "Cluster Manager", + "condition": "(doc.company == \"Iman General Hospital\" or doc.company == \"Mobile Team - Iman\")", + "next_state": "Cancelled", + "parent": "Work Order", + "parentfield": "transitions", + "parenttype": "Workflow", + "state": "Closed", + "workflow_builder_id": null + }, + { + "action": "Cancel", + "allow_self_approval": 1, + "allowed": "Cluster Manager", + "condition": "(doc.company == \"Iman General Hospital\" or doc.company == \"Mobile Team - Iman\")", + "next_state": "Cancelled", + "parent": "Work Order", + "parentfield": "transitions", + "parenttype": "Workflow", + "state": "Rejected", + "workflow_builder_id": null + }, + { + "action": "Re-Open", + "allow_self_approval": 1, + "allowed": "Maintenance Manager", + "condition": "(doc.company == \"Iman General Hospital\" or doc.company == \"Mobile Team - Iman\")", + "next_state": "Repair InProgress", + "parent": "Work Order", + "parentfield": "transitions", + "parenttype": "Workflow", + "state": "Completed", + "workflow_builder_id": null + }, + { + "action": "Apply", + "allow_self_approval": 1, + "allowed": "End user", + "condition": "doc.custom_assign_to_contractor and (doc.company != \"Iman General Hospital\" and doc.company != \"Mobile Team - Iman\")", + "next_state": "Repair InProgress", + "parent": "Work Order", + "parentfield": "transitions", + "parenttype": "Workflow", + "state": "Draft", + "workflow_builder_id": null + }, + { + "action": "Apply", + "allow_self_approval": 1, + "allowed": "Technician", + "condition": "doc.custom_assign_to_contractor and (doc.company != \"Iman General Hospital\" and doc.company != \"Mobile Team - Iman\")", + "next_state": "Repair InProgress", + "parent": "Work Order", + "parentfield": "transitions", + "parenttype": "Workflow", + "state": "Draft", + "workflow_builder_id": null + }, + { + "action": "Work Done", + "allow_self_approval": 1, + "allowed": "Technician", + "condition": "doc.custom_assign_to_contractor and (doc.company != \"Iman General Hospital\" and doc.company != \"Mobile Team - Iman\")", + "next_state": "Completed", + "parent": "Work Order", + "parentfield": "transitions", + "parenttype": "Workflow", + "state": "Repair InProgress", + "workflow_builder_id": null + }, + { + "action": "Approve & Close", + "allow_self_approval": 1, + "allowed": "End user", + "condition": "doc.custom_assign_to_contractor and (doc.company != \"Iman General Hospital\" and doc.company != \"Mobile Team - Iman\")", + "next_state": "Closed", + "parent": "Work Order", + "parentfield": "transitions", + "parenttype": "Workflow", + "state": "Completed", + "workflow_builder_id": null + }, + { + "action": "Approve & Close", + "allow_self_approval": 1, + "allowed": "Projects Manager", + "condition": "doc.custom_assign_to_contractor and (doc.company != \"Iman General Hospital\" and doc.company != \"Mobile Team - Iman\")", + "next_state": "Closed", + "parent": "Work Order", + "parentfield": "transitions", + "parenttype": "Workflow", + "state": "Completed", + "workflow_builder_id": null + }, + { + "action": "Approve & Close", + "allow_self_approval": 1, + "allowed": "Site Supervisor", + "condition": "doc.custom_assign_to_contractor and (doc.company != \"Iman General Hospital\" and doc.company != \"Mobile Team - Iman\")", + "next_state": "Closed", + "parent": "Work Order", + "parentfield": "transitions", + "parenttype": "Workflow", + "state": "Completed", + "workflow_builder_id": null + }, + { + "action": "Apply", + "allow_self_approval": 1, + "allowed": "End user", + "condition": "(doc.company == \"Long-Term Care Hospital\" or doc.company == \"Mobile Team - LCH\")", + "next_state": "Sent To Project Manager", + "parent": "Work Order", + "parentfield": "transitions", + "parenttype": "Workflow", + "state": "Draft", + "workflow_builder_id": null + }, + { + "action": "Apply", + "allow_self_approval": 1, + "allowed": "Technician", + "condition": "(doc.company == \"Long-Term Care Hospital\" or doc.company == \"Mobile Team - LCH\")", + "next_state": "Sent To Project Manager", + "parent": "Work Order", + "parentfield": "transitions", + "parenttype": "Workflow", + "state": "Draft", + "workflow_builder_id": null + }, + { + "action": "Send For Repair", + "allow_self_approval": 1, + "allowed": "Projects Manager", + "condition": "doc.custom_assign_to_contractor", + "next_state": "Repair InProgress", + "parent": "Work Order", + "parentfield": "transitions", + "parenttype": "Workflow", + "state": "Sent To Project Manager", + "workflow_builder_id": null + }, + { + "action": "Apply", + "allow_self_approval": 1, + "allowed": "End user", + "condition": "doc.company == \"Imam Abdulrahman AlFaisal Hospital\"", + "next_state": "Sent To Maintenance manger", + "parent": "Work Order", + "parentfield": "transitions", + "parenttype": "Workflow", + "state": "Draft", + "workflow_builder_id": null + }, + { + "action": "Apply", + "allow_self_approval": 1, + "allowed": "Technician", + "condition": "doc.company == \"Imam Abdulrahman AlFaisal Hospital\"", + "next_state": "Sent To Maintenance manger", + "parent": "Work Order", + "parentfield": "transitions", + "parenttype": "Workflow", + "state": "Draft", + "workflow_builder_id": null + }, { "action": "Send For Repair", "allow_self_approval": 1, @@ -2152,64 +1883,351 @@ "parent": "Work Order", "parentfield": "transitions", "parenttype": "Workflow", + "state": "Sent To Maintenance manger", + "workflow_builder_id": null + } + ], + "workflow_data": null, + "workflow_name": "Work Order", + "workflow_state_field": "workflow_state" + }, + { + "docstatus": 0, + "doctype": "Workflow", + "document_type": "Work_Order", + "is_active": 0, + "modified": "2026-08-11 15:09:53.752228", + "name": "Work Order Flow", + "override_status": 0, + "send_email_alert": 0, + "states": [ + { + "allow_edit": "End user", + "avoid_status_override": 0, + "doc_status": "0", + "is_optional_state": 0, + "message": null, + "next_action_email_template": null, + "parent": "Work Order Flow", + "parentfield": "states", + "parenttype": "Workflow", + "state": "Draft", + "update_field": "repair_status", + "update_value": "Open", + "workflow_builder_id": null + }, + { + "allow_edit": "Maintenance Manager", + "avoid_status_override": 0, + "doc_status": "0", + "is_optional_state": 0, + "message": null, + "next_action_email_template": null, + "parent": "Work Order Flow", + "parentfield": "states", + "parenttype": "Workflow", "state": "Sent to Team Leader", + "update_field": "repair_status", + "update_value": "Open", + "workflow_builder_id": null + }, + { + "allow_edit": "Technician", + "avoid_status_override": 0, + "doc_status": "0", + "is_optional_state": 0, + "message": null, + "next_action_email_template": null, + "parent": "Work Order Flow", + "parentfield": "states", + "parenttype": "Workflow", + "state": "Repair InProgress", + "update_field": "repair_status", + "update_value": "Work In Progress", + "workflow_builder_id": null + }, + { + "allow_edit": "Finance Manager", + "avoid_status_override": 0, + "doc_status": "0", + "is_optional_state": 0, + "message": null, + "next_action_email_template": null, + "parent": "Work Order Flow", + "parentfield": "states", + "parenttype": "Workflow", + "state": "Pending Purchase", + "update_field": null, + "update_value": null, + "workflow_builder_id": null + }, + { + "allow_edit": "Maintenance Manager", + "avoid_status_override": 0, + "doc_status": "0", + "is_optional_state": 0, + "message": null, + "next_action_email_template": null, + "parent": "Work Order Flow", + "parentfield": "states", + "parenttype": "Workflow", + "state": "Pending Approval", + "update_field": "repair_status", + "update_value": "Pending Review", + "workflow_builder_id": null + }, + { + "allow_edit": "End user", + "avoid_status_override": 0, + "doc_status": "0", + "is_optional_state": 0, + "message": null, + "next_action_email_template": null, + "parent": "Work Order Flow", + "parentfield": "states", + "parenttype": "Workflow", + "state": "Pending Approval", + "update_field": "repair_status", + "update_value": "Pending Review", + "workflow_builder_id": null + }, + { + "allow_edit": "Site Supervisor", + "avoid_status_override": 0, + "doc_status": "0", + "is_optional_state": 0, + "message": null, + "next_action_email_template": null, + "parent": "Work Order Flow", + "parentfield": "states", + "parenttype": "Workflow", + "state": "Pending Approval", + "update_field": "repair_status", + "update_value": "Pending Review", + "workflow_builder_id": null + }, + { + "allow_edit": "Projects Manager", + "avoid_status_override": 0, + "doc_status": "0", + "is_optional_state": 0, + "message": null, + "next_action_email_template": null, + "parent": "Work Order Flow", + "parentfield": "states", + "parenttype": "Workflow", + "state": "Pending Approval", + "update_field": "repair_status", + "update_value": "Pending Review", + "workflow_builder_id": null + }, + { + "allow_edit": "Maintenance Manager", + "avoid_status_override": 0, + "doc_status": "0", + "is_optional_state": 0, + "message": null, + "next_action_email_template": null, + "parent": "Work Order Flow", + "parentfield": "states", + "parenttype": "Workflow", + "state": "Completed", + "update_field": "repair_status", + "update_value": "Completed", + "workflow_builder_id": null + }, + { + "allow_edit": "PHCC Site Manager", + "avoid_status_override": 0, + "doc_status": "0", + "is_optional_state": 0, + "message": null, + "next_action_email_template": null, + "parent": "Work Order Flow", + "parentfield": "states", + "parenttype": "Workflow", + "state": "Completed", + "update_field": "repair_status", + "update_value": "Completed", + "workflow_builder_id": null + }, + { + "allow_edit": "PHCC End User", + "avoid_status_override": 0, + "doc_status": "0", + "is_optional_state": 0, + "message": null, + "next_action_email_template": null, + "parent": "Work Order Flow", + "parentfield": "states", + "parenttype": "Workflow", + "state": "Draft", + "update_field": "repair_status", + "update_value": "Open", + "workflow_builder_id": null + }, + { + "allow_edit": "PHCC Site Manager", + "avoid_status_override": 0, + "doc_status": "0", + "is_optional_state": 0, + "message": null, + "next_action_email_template": null, + "parent": "Work Order Flow", + "parentfield": "states", + "parenttype": "Workflow", + "state": "Sent To Site Manager", + "update_field": "repair_status", + "update_value": "Open", + "workflow_builder_id": null + }, + { + "allow_edit": "PHCC Site Manager", + "avoid_status_override": 0, + "doc_status": "0", + "is_optional_state": 0, + "message": null, + "next_action_email_template": null, + "parent": "Work Order Flow", + "parentfield": "states", + "parenttype": "Workflow", + "state": "Pending Approval", + "update_field": "repair_status", + "update_value": "Pending Review", + "workflow_builder_id": null + }, + { + "allow_edit": "Technician", + "avoid_status_override": 0, + "doc_status": "0", + "is_optional_state": 0, + "message": null, + "next_action_email_template": null, + "parent": "Work Order Flow", + "parentfield": "states", + "parenttype": "Workflow", + "state": "Draft", + "update_field": "repair_status", + "update_value": "Open", + "workflow_builder_id": null + }, + { + "allow_edit": "Cluster Manager", + "avoid_status_override": 0, + "doc_status": "0", + "is_optional_state": 0, + "message": null, + "next_action_email_template": null, + "parent": "Work Order Flow", + "parentfield": "states", + "parenttype": "Workflow", + "state": "Closed", + "update_field": "repair_status", + "update_value": "Closed", + "workflow_builder_id": null + }, + { + "allow_edit": "Maintenance Manager", + "avoid_status_override": 0, + "doc_status": "0", + "is_optional_state": 0, + "message": null, + "next_action_email_template": null, + "parent": "Work Order Flow", + "parentfield": "states", + "parenttype": "Workflow", + "state": "Closed", + "update_field": "repair_status", + "update_value": "Closed", + "workflow_builder_id": null + }, + { + "allow_edit": "End user", + "avoid_status_override": 0, + "doc_status": "0", + "is_optional_state": 0, + "message": null, + "next_action_email_template": null, + "parent": "Work Order Flow", + "parentfield": "states", + "parenttype": "Workflow", + "state": "Closed", + "update_field": "repair_status", + "update_value": "Closed", + "workflow_builder_id": null + }, + { + "allow_edit": "Projects Manager", + "avoid_status_override": 0, + "doc_status": "0", + "is_optional_state": 0, + "message": null, + "next_action_email_template": null, + "parent": "Work Order Flow", + "parentfield": "states", + "parenttype": "Workflow", + "state": "Sent To Project Manager", + "update_field": null, + "update_value": null, + "workflow_builder_id": null + } + ], + "transitions": [ + { + "action": "Apply", + "allow_self_approval": 1, + "allowed": "End user", + "condition": null, + "next_state": "Repair InProgress", + "parent": "Work Order Flow", + "parentfield": "transitions", + "parenttype": "Workflow", + "state": "Draft", "workflow_builder_id": null }, { "action": "Send For Approval", "allow_self_approval": 1, "allowed": "Technician", - "condition": "", - "next_state": "Pending Approval", - "parent": "Work Order", - "parentfield": "transitions", - "parenttype": "Workflow", - "state": "Repair InProgress", - "workflow_builder_id": null - }, - { - "action": "Material Request", - "allow_self_approval": 1, - "allowed": "Technician", - "condition": "doc.need_procurement == 1", - "next_state": "Pending Purchase", - "parent": "Work Order", - "parentfield": "transitions", - "parenttype": "Workflow", - "state": "Repair InProgress", - "workflow_builder_id": null - }, - { - "action": "Send For Repair", - "allow_self_approval": 1, - "allowed": "Finance Manager", "condition": null, - "next_state": "Repair InProgress", - "parent": "Work Order", + "next_state": "Pending Approval", + "parent": "Work Order Flow", "parentfield": "transitions", "parenttype": "Workflow", - "state": "Pending Purchase", + "state": "Repair InProgress", "workflow_builder_id": null }, { - "action": "Accept", + "action": "Approve & Close", "allow_self_approval": 1, - "allowed": "Maintenance Manager", - "condition": "", - "next_state": "Completed", - "parent": "Work Order", + "allowed": "End user", + "condition": null, + "next_state": "Closed", + "parent": "Work Order Flow", "parentfield": "transitions", "parenttype": "Workflow", "state": "Pending Approval", "workflow_builder_id": null }, { - "action": "Reject", + "action": "Approve & Close", "allow_self_approval": 1, - "allowed": "Maintenance Manager", + "allowed": "Projects Manager", "condition": null, - "next_state": "Rejected", - "parent": "Work Order", + "next_state": "Closed", + "parent": "Work Order Flow", + "parentfield": "transitions", + "parenttype": "Workflow", + "state": "Pending Approval", + "workflow_builder_id": null + }, + { + "action": "Approve & Close", + "allow_self_approval": 1, + "allowed": "Site Supervisor", + "condition": null, + "next_state": "Closed", + "parent": "Work Order Flow", "parentfield": "transitions", "parenttype": "Workflow", "state": "Pending Approval", @@ -2218,66 +2236,30 @@ { "action": "Apply", "allow_self_approval": 1, - "allowed": "PHCC End User", - "condition": "doc.site_name and doc.asset_type == \"Biomedical\"", - "next_state": "Sent to Team Leader", - "parent": "Work Order", + "allowed": "End user", + "condition": "(doc.company == \"Long-Term Care Hospital\" or doc.company == \"Mobile Team - LCH\")", + "next_state": "Sent To Project Manager", + "parent": "Work Order Flow", "parentfield": "transitions", "parenttype": "Workflow", "state": "Draft", "workflow_builder_id": null }, { - "action": "Close", + "action": "Send For Repair", "allow_self_approval": 1, - "allowed": "End user", - "condition": null, - "next_state": "Closed", - "parent": "Work Order", - "parentfield": "transitions", - "parenttype": "Workflow", - "state": "Completed", - "workflow_builder_id": null - }, - { - "action": "Cancel", - "allow_self_approval": 1, - "allowed": "Cluster Manager", - "condition": null, - "next_state": "Cancelled", - "parent": "Work Order", - "parentfield": "transitions", - "parenttype": "Workflow", - "state": "Closed", - "workflow_builder_id": null - }, - { - "action": "Cancel", - "allow_self_approval": 1, - "allowed": "Cluster Manager", - "condition": "doc.docstatus == 1", - "next_state": "Cancelled", - "parent": "Work Order", - "parentfield": "transitions", - "parenttype": "Workflow", - "state": "Rejected", - "workflow_builder_id": null - }, - { - "action": "Re-Open", - "allow_self_approval": 1, - "allowed": "Maintenance Manager", + "allowed": "Projects Manager", "condition": null, "next_state": "Repair InProgress", - "parent": "Work Order", + "parent": "Work Order Flow", "parentfield": "transitions", "parenttype": "Workflow", - "state": "Completed", + "state": "Sent To Project Manager", "workflow_builder_id": null } ], "workflow_data": null, - "workflow_name": "Work Order", + "workflow_name": "Work Order Flow", "workflow_state_field": "workflow_state" } ] \ No newline at end of file diff --git a/asset_lite/fixtures/workflow_action_master.json b/asset_lite/fixtures/workflow_action_master.json index de12920..d46429c 100644 --- a/asset_lite/fixtures/workflow_action_master.json +++ b/asset_lite/fixtures/workflow_action_master.json @@ -27,6 +27,20 @@ "name": "Approve", "workflow_action_name": "Approve" }, + { + "docstatus": 0, + "doctype": "Workflow Action Master", + "modified": "2026-08-11 11:41:34.048015", + "name": "Work Complete", + "workflow_action_name": "Work Complete" + }, + { + "docstatus": 0, + "doctype": "Workflow Action Master", + "modified": "2026-08-13 13:28:13.970367", + "name": "Work Done", + "workflow_action_name": "Work Done" + }, { "docstatus": 0, "doctype": "Workflow Action Master", @@ -41,13 +55,6 @@ "name": "Re-Open", "workflow_action_name": "Re-Open" }, - { - "docstatus": 0, - "doctype": "Workflow Action Master", - "modified": "2024-09-13 11:10:00.762984", - "name": "Send For Approval", - "workflow_action_name": "Send For Approval" - }, { "docstatus": 0, "doctype": "Workflow Action Master", @@ -62,6 +69,20 @@ "name": "Reject", "workflow_action_name": "Reject" }, + { + "docstatus": 0, + "doctype": "Workflow Action Master", + "modified": "2025-08-11 12:02:06.266995", + "name": "Close", + "workflow_action_name": "Close" + }, + { + "docstatus": 0, + "doctype": "Workflow Action Master", + "modified": "2024-09-13 11:10:00.762984", + "name": "Send For Approval", + "workflow_action_name": "Send For Approval" + }, { "docstatus": 0, "doctype": "Workflow Action Master", @@ -69,6 +90,13 @@ "name": "Cancel", "workflow_action_name": "Cancel" }, + { + "docstatus": 0, + "doctype": "Workflow Action Master", + "modified": "2026-08-11 11:47:24.201964", + "name": "Approve & Close", + "workflow_action_name": "Approve & Close" + }, { "docstatus": 0, "doctype": "Workflow Action Master", @@ -76,13 +104,6 @@ "name": "Send For Repair", "workflow_action_name": "Send For Repair" }, - { - "docstatus": 0, - "doctype": "Workflow Action Master", - "modified": "2025-08-11 12:02:06.266995", - "name": "Close", - "workflow_action_name": "Close" - }, { "docstatus": 0, "doctype": "Workflow Action Master", diff --git a/asset_lite/fixtures/workflow_state.json b/asset_lite/fixtures/workflow_state.json index 7394f0f..3352213 100644 --- a/asset_lite/fixtures/workflow_state.json +++ b/asset_lite/fixtures/workflow_state.json @@ -35,15 +35,6 @@ "style": "", "workflow_state_name": "Sent to Procurement User" }, - { - "docstatus": 0, - "doctype": "Workflow State", - "icon": "", - "modified": "2025-06-17 15:42:44.566036", - "name": "Sent To Site Manager", - "style": "", - "workflow_state_name": "Sent To Site Manager" - }, { "docstatus": 0, "doctype": "Workflow State", @@ -53,24 +44,6 @@ "style": "", "workflow_state_name": "Sent to General WOA" }, - { - "docstatus": 0, - "doctype": "Workflow State", - "icon": "", - "modified": "2024-09-17 17:37:02.717022", - "name": "Cancelled", - "style": "", - "workflow_state_name": "Cancelled" - }, - { - "docstatus": 0, - "doctype": "Workflow State", - "icon": "", - "modified": "2025-05-22 18:15:15.104122", - "name": "Pending Purchase", - "style": "", - "workflow_state_name": "Pending Purchase" - }, { "docstatus": 0, "doctype": "Workflow State", @@ -80,15 +53,6 @@ "style": "Success", "workflow_state_name": "Approved" }, - { - "docstatus": 0, - "doctype": "Workflow State", - "icon": "remove", - "modified": "2024-09-10 18:16:06.113226", - "name": "Rejected", - "style": "Danger", - "workflow_state_name": "Rejected" - }, { "docstatus": 0, "doctype": "Workflow State", @@ -102,19 +66,64 @@ "docstatus": 0, "doctype": "Workflow State", "icon": "", - "modified": "2026-01-12 15:31:11.081747", - "name": "Sent to Team Leader", - "style": "", - "workflow_state_name": "Sent to Team Leader" + "modified": "2025-05-22 18:15:14.987359", + "name": "Sent To Maintenance manger", + "style": "Info", + "workflow_state_name": "Sent To Maintenance manger" }, { "docstatus": 0, "doctype": "Workflow State", "icon": "", - "modified": "2025-08-11 12:01:35.474110", - "name": "Closed", + "modified": "2025-06-17 15:42:44.566036", + "name": "Sent To Site Manager", "style": "", - "workflow_state_name": "Closed" + "workflow_state_name": "Sent To Site Manager" + }, + { + "docstatus": 0, + "doctype": "Workflow State", + "icon": "", + "modified": "2026-08-11 11:37:18.893891", + "name": "Sent To Project Manager", + "style": "", + "workflow_state_name": "Sent To Project Manager" + }, + { + "docstatus": 0, + "doctype": "Workflow State", + "icon": "", + "modified": "2024-09-17 17:37:02.717022", + "name": "Cancelled", + "style": "", + "workflow_state_name": "Cancelled" + }, + { + "docstatus": 0, + "doctype": "Workflow State", + "icon": "remove", + "modified": "2024-09-10 18:16:06.113226", + "name": "Rejected", + "style": "Danger", + "workflow_state_name": "Rejected" + }, + { + "docstatus": 0, + "doctype": "Workflow State", + "icon": "", + "modified": "2025-05-22 18:15:15.104122", + "name": "Pending Purchase", + "style": "", + "workflow_state_name": "Pending Purchase" + }, + { + "docstatus": 0, + "doctype": "Workflow State", + "icon": "", + "modified": "2026-01-12 15:31:11.081747", + "name": "Sent to Team Leader", + "style": "", + "workflow_state_name": "Sent to Team Leader" }, { "docstatus": 0, @@ -129,10 +138,10 @@ "docstatus": 0, "doctype": "Workflow State", "icon": "", - "modified": "2025-05-22 18:15:14.987359", - "name": "Sent To Maintenance manger", - "style": "Info", - "workflow_state_name": "Sent To Maintenance manger" + "modified": "2025-08-11 12:01:35.474110", + "name": "Closed", + "style": "", + "workflow_state_name": "Closed" }, { "docstatus": 0, diff --git a/asset_lite/hooks.py b/asset_lite/hooks.py index 7114602..e87767d 100644 --- a/asset_lite/hooks.py +++ b/asset_lite/hooks.py @@ -142,9 +142,13 @@ override_doctype_class = { # Hook on document methods and events doc_events = { - "Asset":{ - "before_save": "asset_lite.public.py.asset.generate_asset_qr" - } + "Asset": { + "before_save": "asset_lite.public.py.asset.generate_asset_qr", + }, + "Work_Order": { + "after_insert": "asset_lite.public.py.work_order_qr.generate_work_order_feedback_qr", + "on_update": "asset_lite.notifications.work_order_notifications.notify_on_workflow_change", + }, } # Scheduled Tasks @@ -261,12 +265,12 @@ fixtures = [ "module", "=", "Asset Lite" ] ]}, - # { - # "doctype": "Role", - # "filters": [ - # ["creation", ">", "2024-09-12"] - # ] - # }, + { + "doctype": "Role", + "filters": [ + ["creation", ">", "2024-09-12"] + ] + }, {"doctype": "Workspace", "filters": [ [ "module", "=", "Asset Lite" @@ -296,16 +300,17 @@ fixtures = [ ] }, - { - "doctype": "Company", - "filters": [ - ["domain", "=", "Healthcare"] - ] - }, - { - "doctype": "User Permission", - "filters": [ - ["allow", "=", "Hospital"] - ] - }, + # Site-specific fixtures — skip on install to avoid company/account conflicts + # { + # "doctype": "Company", + # "filters": [ + # ["domain", "=", "Healthcare"] + # ] + # }, + # { + # "doctype": "User Permission", + # "filters": [ + # ["allow", "=", "Hospital"] + # ] + # }, ] diff --git a/asset_lite/map.py b/asset_lite/map.py index d97a27e..874f2ac 100644 --- a/asset_lite/map.py +++ b/asset_lite/map.py @@ -52,6 +52,7 @@ def get_active_map_data(hospital=None): "wo_progress": count("Work_Order", {"company": name, "repair_status": "Work In Progress"}), "wo_review": count("Work_Order", {"company": name, "repair_status": "Pending Review"}), "wo_completed": count("Work_Order", {"company": name, "repair_status": "Completed"}), + "wo_closed": count("Work_Order", {"company": name, "repair_status": "Closed"}), "planned_maintenance": count("Asset Maintenance Log", { diff --git a/asset_lite/notifications/__init__.py b/asset_lite/notifications/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/notifications/work_order_notifications.py b/asset_lite/notifications/work_order_notifications.py new file mode 100644 index 0000000..1965c55 --- /dev/null +++ b/asset_lite/notifications/work_order_notifications.py @@ -0,0 +1,119 @@ +import frappe +from frappe.utils import get_url + +EXCLUDED_HOSPITAL = "Iman General Hospital" + +NOTIFY_STATES = frozenset({ + "Repair InProgress", + "Sent To Project Manager", + "Sent To Maintenance manger", + "Closed", + "Completed", +}) + +MAINTENANCE_MANAGER_PROFILE = "Maintenace Manager" +MOH_SUPERVISOR_PROFILE = "MOH Supervisor" +PROJECT_MANAGER_PROFILE = "Project Manager" + +# workflow_state -> role profiles to notify (hospital matched via custom_site_name) +STATE_ROLE_PROFILES = { + "Sent To Maintenance manger": (MAINTENANCE_MANAGER_PROFILE,), + "Sent To Project Manager": ( + MAINTENANCE_MANAGER_PROFILE, + MOH_SUPERVISOR_PROFILE, + PROJECT_MANAGER_PROFILE, + ), +} + +DEFAULT_ROLE_PROFILES = (MAINTENANCE_MANAGER_PROFILE, MOH_SUPERVISOR_PROFILE) + + +def notify_on_workflow_change(doc, method=None): + """Send email + Notification Log only when workflow_state changes to a target state.""" + previous_state = _get_previous_workflow_state(doc) + if previous_state == doc.workflow_state: + return + + _send_workflow_notifications(doc, previous_state) + + +def _send_workflow_notifications(doc, previous_state=None): + if doc.workflow_state not in NOTIFY_STATES: + return + + if not doc.company or doc.company == EXCLUDED_HOSPITAL: + return + + recipients = _get_hospital_role_users(doc.company, doc.workflow_state) + if not recipients: + frappe.log_error( + f"No notification recipients for Work Order {doc.name} " + f"(company={doc.company}, workflow_state={doc.workflow_state})", + "Work Order Workflow Notification", + ) + return + + subject = f"Work Order {doc.name} - {doc.workflow_state}" + wo_link = _get_work_order_asm_app_url(doc.name) + message = _build_message(doc, previous_state, wo_link) + + for user in recipients: + _create_notification_log(doc, user, subject, message) + if user.email: + frappe.sendmail( + recipients=[user.email], + subject=subject, + message=message, + reference_doctype="Work_Order", + reference_name=doc.name, + ) + + +def _get_previous_workflow_state(doc): + previous = doc.get_doc_before_save() + if not previous: + return None + return previous.get("workflow_state") + + +def _get_work_order_asm_app_url(work_order_name): + base_url = get_url().rstrip("/") + app_base = (frappe.conf.get("asm_app_base_path") or "/asm_app").rstrip("/") + return f"{base_url}{app_base}/work-orders/{work_order_name}" + + +def _get_hospital_role_users(company, workflow_state=None): + role_profiles = STATE_ROLE_PROFILES.get(workflow_state, DEFAULT_ROLE_PROFILES) + return frappe.get_all( + "User", + filters={ + "enabled": 1, + "custom_site_name": company, + "role_profile_name": ["in", list(role_profiles)], + }, + fields=["name", "email", "full_name"], + ) + + +def _build_message(doc, previous_state, wo_link): + previous_label = previous_state or "N/A" + return f""" +

Work Order {doc.name} workflow has been updated.

+

Previous state: {previous_label}

+

Current state: {doc.workflow_state}

+

Hospital: {doc.company}

+

Open Work Order

+ """ + + +def _create_notification_log(doc, user, subject, message): + frappe.get_doc({ + "doctype": "Notification Log", + "type": "Alert", + "document_type": "Work_Order", + "document_name": doc.name, + "subject": subject, + "email_content": message, + "from_user": frappe.session.user, + "for_user": user.name, + }).insert(ignore_permissions=True) diff --git a/asset_lite/patches.txt b/asset_lite/patches.txt index f15c3a9..d1f0ccc 100644 --- a/asset_lite/patches.txt +++ b/asset_lite/patches.txt @@ -3,4 +3,6 @@ # Read docs to understand patches: https://frappeframework.com/docs/v14/user/en/database-migrations [post_model_sync] -# Patches added in this section will be executed after doctypes are migrated \ No newline at end of file +# Patches added in this section will be executed after doctypes are migrated +asset_lite.patches.sync_dashboard_reports.execute +asset_lite.patches.sync_work_order_workflow.execute \ No newline at end of file diff --git a/asset_lite/patches/dashboard_report_inline_scripts.py b/asset_lite/patches/dashboard_report_inline_scripts.py new file mode 100644 index 0000000..42eb663 --- /dev/null +++ b/asset_lite/patches/dashboard_report_inline_scripts.py @@ -0,0 +1,303 @@ +"""Full inline Script Report bodies stored in Report.report_script (no imports, no .format()).""" + +ASSET_UP_AND_DOWN = r'''def execute(filters=None): + if filters is None: + filters = {} + + result = [] + status_count = {} + + company = filters.get("company") + site_name = filters.get("site_name") + department = filters.get("department") + name = filters.get("name") + custom_class = filters.get("custom_class") + + conditions = ["1=1"] + params = {} + + if company: + conditions.append("company = %(company)s") + params["company"] = company + if site_name: + conditions.append("custom_site = %(site_name)s") + params["site_name"] = site_name + if department: + conditions.append("department = %(department)s") + params["department"] = department + if custom_class: + conditions.append("custom_class = %(custom_class)s") + params["custom_class"] = custom_class + if name: + conditions.append("name = %(name)s") + params["name"] = name + + where = " AND ".join(conditions) + + query = """ + SELECT + name AS name, + asset_name, + custom_device_status AS status, + department, + custom_class + FROM + `tabAsset` + WHERE + """ + where + """ + ORDER BY + asset_name + """ + + result = frappe.db.sql(query, params, as_dict=True) + + for row in result: + status = row.get('status') + if status: + normalized_status = status.strip().lower() + status_count[normalized_status] = status_count.get(normalized_status, 0) + 1 + + chart_labels = list(status_count.keys()) + chart_values = list(status_count.values()) + + columns = [ + {"fieldname": "name", "label": "Asset ID", "fieldtype": "Link", "options": "Asset", "width": 200}, + {"fieldname": "asset_name", "label": "Asset Name", "fieldtype": "Data", "width": 200}, + {"fieldname": "status", "label": "Status", "fieldtype": "Data", "width": 100}, + {"fieldname": "department", "label": "Department", "fieldtype": "Link", "options": "Department", "width": 150}, + {"fieldname": "custom_class", "label": "Class", "fieldtype": "Data", "width": 200}, + ] + + status_colors = ["#2ba63d" if status == 'up' else "#FF0000" if status == 'down' else "#0000FF" for status in chart_labels] + + chart = { + "data": { + "labels": chart_labels, + "datasets": [{"name": "Number of Assets", "values": chart_values}] + }, + "type": "pie", + "colors": status_colors + } + + return columns, result, None, chart + +data = execute(filters) +''' + +WORK_ORDER_STATUS = r'''def execute(filters=None): + if filters is None: + filters = {} + + columns = [ + {"label": _("Work Order Type"), "fieldname": "work_order_type", "fieldtype": "Data", "width": 200}, + {"label": _("Open"), "fieldname": "open_count", "fieldtype": "Int", "width": 200}, + {"label": _("Work In Progress"), "fieldname": "work_in_progress_count", "fieldtype": "Int", "width": 200}, + {"label": _("Pending Review"), "fieldname": "pending_review_count", "fieldtype": "Int", "width": 200}, + {"label": _("Completed"), "fieldname": "completed_count", "fieldtype": "Int", "width": 200}, + {"label": _("Closed"), "fieldname": "closed_count", "fieldtype": "Int", "width": 200} + ] + + conditions = ["repair_status IN ('Open', 'Work In Progress', 'Pending Review', 'Completed', 'Closed', 'Cancelled')"] + params = {} + + if filters.get('work_order_type'): + conditions.append("work_order_type = %(work_order_type)s") + params['work_order_type'] = filters.get('work_order_type') + if filters.get('repair_status'): + conditions.append("repair_status = %(repair_status)s") + params['repair_status'] = filters.get('repair_status') + if filters.get('asset_type'): + conditions.append("asset_type = %(asset_type)s") + params['asset_type'] = filters.get('asset_type') + if filters.get('company'): + conditions.append("company = %(company)s") + params['company'] = filters.get('company') + if filters.get('site_name'): + conditions.append("site_name = %(site_name)s") + params['site_name'] = filters.get('site_name') + if filters.get('wo_name'): + conditions.append("name = %(wo_name)s") + params['wo_name'] = filters.get('wo_name') + + where = " AND ".join(conditions) + + query = """ + SELECT + name as wo_name, + asset_type, + work_order_type, + SUM(CASE WHEN repair_status = 'Open' THEN 1 ELSE 0 END) AS open_count, + SUM(CASE WHEN repair_status = 'Work In Progress' THEN 1 ELSE 0 END) AS work_in_progress_count, + SUM(CASE WHEN repair_status = 'Pending Review' THEN 1 ELSE 0 END) AS pending_review_count, + SUM(CASE WHEN repair_status = 'Completed' THEN 1 ELSE 0 END) AS completed_count, + SUM(CASE WHEN repair_status = 'Closed' THEN 1 ELSE 0 END) AS closed_count + FROM + `tabWork_Order` + WHERE + """ + where + """ + GROUP BY + work_order_type + """ + + result = frappe.db.sql(query, params, as_dict=1) + + report_summary = [] + for status in ['Open', 'Work In Progress', 'Pending Review', 'Completed', 'Closed']: + status_conditions = list(conditions) + status_conditions.append("repair_status = %(status)s") + status_params = dict(params) + status_params['status'] = status + status_where = " AND ".join(status_conditions) + count = frappe.db.sql( + "SELECT COUNT(*) FROM `tabWork_Order` WHERE " + status_where, + status_params + )[0][0] + report_summary.append({"value": count, "label": status}) + + total = frappe.db.sql( + "SELECT COUNT(*) FROM `tabWork_Order` WHERE " + where, + params + )[0][0] + report_summary.append({"value": total, "label": "Total Work Orders"}) + + chart = { + "data": { + "labels": [row['work_order_type'] for row in result], + "datasets": [ + {"name": "Open", "values": [row['open_count'] for row in result]}, + {"name": "Work In Progress", "values": [row['work_in_progress_count'] for row in result]}, + {"name": "Pending Review", "values": [row['pending_review_count'] for row in result]}, + {"name": "Completed", "values": [row['completed_count'] for row in result]}, + {"name": "Closed", "values": [row['closed_count'] for row in result]}, + ] + }, + "type": "bar", + "barOptions": {"stacked": 1, "spaceRatio": 0.6}, + "colors": ["#CCCCB7", "#52B2BF", "#9EC1A4", "#058D7C", "#A3A5CF"], + } + + return columns, result, None, chart, report_summary + +data = execute(filters) +''' + +ASSET_WISE_COUNT = r'''def execute(filters=None): + if filters is None: + filters = {} + + conditions = ["1=1"] + params = {} + + if filters.get("company"): + conditions.append("aml.custom_hospital_name = %(company)s") + params["company"] = filters.get("company") + if filters.get("site_name"): + conditions.append("a.custom_site = %(site_name)s") + params["site_name"] = filters.get("site_name") + + where = " AND ".join(conditions) + + query = """ + SELECT + aml.item_name AS item_name, + aml.maintenance_status AS maintenance_status, + SUM(CASE WHEN aml.due_date = aml.completion_date AND aml.maintenance_status = 'Completed' THEN 1 ELSE 0 END) AS completed_on_time, + SUM(CASE WHEN aml.completion_date < aml.due_date AND aml.maintenance_status = 'Completed' THEN 1 ELSE 0 END) AS completed_within_time, + SUM(CASE WHEN aml.completion_date > aml.due_date THEN 1 ELSE 0 END) AS delay_in_completion, + SUM(CASE WHEN aml.maintenance_status = 'Planned' AND aml.completion_date IS NULL AND aml.due_date > CURRENT_DATE() THEN 1 ELSE 0 END) AS pending, + SUM(CASE WHEN aml.maintenance_status = 'Planned' AND aml.completion_date IS NULL AND aml.due_date < CURRENT_DATE() THEN 1 ELSE 0 END) AS overdue, + SUM(CASE WHEN aml.maintenance_status = 'Cancelled' THEN 1 ELSE 0 END) AS cancelled + FROM `tabAsset Maintenance Log` aml + LEFT JOIN `tabAsset` a ON aml.asset_name = a.name + WHERE """ + where + """ + GROUP BY aml.item_name + """ + + data = frappe.db.sql(query, params, as_dict=True) + return data + +data = execute(filters) +''' + +ASSIGNEES_STATUS_COUNT = r'''def execute(filters=None): + if filters is None: + filters = {} + + conditions = ["1=1"] + params = {} + + if filters.get("company"): + conditions.append("aml.custom_hospital_name = %(company)s") + params["company"] = filters.get("company") + if filters.get("site_name"): + conditions.append("a.custom_site = %(site_name)s") + params["site_name"] = filters.get("site_name") + + where = " AND ".join(conditions) + + query = """ + SELECT + aml.item_name AS item_name, + aml.maintenance_status AS maintenance_status, + aml.assign_to_name AS assigned_to, + SUM(CASE WHEN aml.due_date = aml.completion_date AND aml.maintenance_status = 'Completed' THEN 1 ELSE 0 END) AS completed_on_time, + SUM(CASE WHEN aml.completion_date < aml.due_date AND aml.maintenance_status = 'Completed' THEN 1 ELSE 0 END) AS completed_within_time, + SUM(CASE WHEN aml.completion_date > aml.due_date THEN 1 ELSE 0 END) AS delay_in_completion, + SUM(CASE WHEN aml.maintenance_status = 'Planned' AND aml.completion_date IS NULL AND aml.due_date > CURRENT_DATE() THEN 1 ELSE 0 END) AS pending, + SUM(CASE WHEN aml.maintenance_status = 'Planned' AND aml.completion_date IS NULL AND aml.due_date < CURRENT_DATE() THEN 1 ELSE 0 END) AS overdue, + SUM(CASE WHEN aml.maintenance_status = 'Cancelled' THEN 1 ELSE 0 END) AS cancelled + FROM `tabAsset Maintenance Log` aml + LEFT JOIN `tabAsset` a ON aml.asset_name = a.name + WHERE """ + where + """ + GROUP BY aml.assign_to_name + """ + + data = frappe.db.sql(query, params, as_dict=True) + return data + +data = execute(filters) +''' + +ASSET_MAINTENANCE_FREQUENCY = r'''def execute(filters=None): + if filters is None: + filters = {} + + conditions = ["1=1"] + params = {} + + if filters.get("company"): + conditions.append("aml.custom_hospital_name = %(company)s") + params["company"] = filters.get("company") + if filters.get("site_name"): + conditions.append("a.custom_site = %(site_name)s") + params["site_name"] = filters.get("site_name") + + where = " AND ".join(conditions) + + query = """ + SELECT + aml.custom_asset_names AS item, + SUM(CASE WHEN aml.maintenance_status = 'Planned' THEN 1 ELSE 0 END) AS planned, + SUM(CASE WHEN aml.maintenance_status = 'Completed' THEN 1 ELSE 0 END) AS completed, + SUM(CASE WHEN aml.maintenance_status = 'Cancelled' THEN 1 ELSE 0 END) AS cancelled, + SUM(CASE WHEN aml.maintenance_status = 'Overdue' THEN 1 ELSE 0 END) AS overdue, + COUNT(aml.custom_asset_names) AS total_count + FROM `tabAsset Maintenance Log` aml + LEFT JOIN `tabAsset` a ON aml.asset_name = a.name + WHERE """ + where + """ + GROUP BY aml.custom_asset_names + """ + + data = frappe.db.sql(query, params, as_dict=True) + return data + +data = execute(filters) +''' + +REPORT_SCRIPTS = { + "Asset Up and Down": ASSET_UP_AND_DOWN, + "Work Order Status": WORK_ORDER_STATUS, + "Asset wise Count": ASSET_WISE_COUNT, + "Asset Maintenance Assignees Status Count": ASSIGNEES_STATUS_COUNT, + "Asset Maintenance Frequency": ASSET_MAINTENANCE_FREQUENCY, +} diff --git a/asset_lite/patches/sync_dashboard_reports.py b/asset_lite/patches/sync_dashboard_reports.py new file mode 100644 index 0000000..936b49d --- /dev/null +++ b/asset_lite/patches/sync_dashboard_reports.py @@ -0,0 +1,173 @@ +"""Sync dashboard report scripts and Hospital/Site filters into the live database.""" + +import frappe + +from asset_lite.patches.dashboard_report_inline_scripts import REPORT_SCRIPTS + +LOCATION_FILTERS = [ + { + "fieldname": "company", + "label": "Hospital", + "fieldtype": "Link", + "options": "Company", + "mandatory": 0, + "wildcard_filter": 0, + }, + { + "fieldname": "site_name", + "label": "Site Name", + "fieldtype": "Link", + "options": "Mobile Team Site", + "mandatory": 0, + "wildcard_filter": 0, + }, +] + +DASHBOARD_REPORTS = { + "Asset Up and Down": { + "javascript": ( + 'frappe.query_reports["Asset Up and Down"] = {\n' + " filters: [\n" + " {\n" + ' fieldname: "company",\n' + ' label: __("Hospital"),\n' + ' fieldtype: "Link",\n' + ' options: "Company"\n' + " },\n" + " {\n" + ' fieldname: "site_name",\n' + ' label: __("Site Name"),\n' + ' fieldtype: "Link",\n' + ' options: "Mobile Team Site"\n' + " },\n" + " {\n" + ' fieldname: "department",\n' + ' label: __("Department"),\n' + ' fieldtype: "Link",\n' + ' options: "Department"\n' + " },\n" + " {\n" + ' fieldname: "custom_class",\n' + ' label: __("Class"),\n' + ' fieldtype: "Select",\n' + ' options: "\\nClass A\\nClass B\\nClass C"\n' + " },\n" + " {\n" + ' fieldname: "name",\n' + ' label: __("Asset"),\n' + ' fieldtype: "Link",\n' + ' options: "Asset"\n' + " }\n" + " ]\n" + "};\n" + ), + "extra_filters": [ + { + "fieldname": "department", + "label": "Department", + "fieldtype": "Link", + "options": "Department", + "mandatory": 0, + "wildcard_filter": 0, + }, + { + "fieldname": "custom_class", + "label": "Class", + "fieldtype": "Select", + "options": "\nClass A\nClass B\nClass C", + "mandatory": 0, + "wildcard_filter": 0, + }, + { + "fieldname": "name", + "label": "Asset", + "fieldtype": "Link", + "options": "Asset", + "mandatory": 0, + "wildcard_filter": 0, + }, + ], + }, + "Work Order Status": { + "extra_filters": [ + { + "fieldname": "repair_status", + "label": "Status", + "fieldtype": "Select", + "options": "\nOpen\nWork In Progress\nPending Review\nCompleted\nClosed", + "mandatory": 0, + "wildcard_filter": 0, + }, + { + "fieldname": "work_order_type", + "label": "Work Order Type", + "fieldtype": "Link", + "options": "Issue Type", + "mandatory": 0, + "wildcard_filter": 0, + }, + { + "fieldname": "wo_name", + "label": "Work Order", + "fieldtype": "Link", + "options": "Work_Order", + "mandatory": 0, + "wildcard_filter": 0, + }, + { + "fieldname": "asset_type", + "label": "Asset Type", + "fieldtype": "Link", + "options": "Asset Type", + "mandatory": 0, + "wildcard_filter": 0, + }, + ], + }, + "Asset wise Count": {"extra_filters": []}, + "Asset Maintenance Assignees Status Count": {"extra_filters": []}, + "Asset Maintenance Frequency": {"extra_filters": []}, +} + + +def _merge_filters(report_name, extra_filters): + merged = [] + seen = set() + for row in LOCATION_FILTERS + extra_filters: + fieldname = row["fieldname"] + if fieldname in seen: + continue + seen.add(fieldname) + merged.append({**row, "parent": report_name, "parenttype": "Report", "parentfield": "filters"}) + return merged + + +def sync_dashboard_reports(): + updated = [] + for report_name, config in DASHBOARD_REPORTS.items(): + if not frappe.db.exists("Report", report_name): + continue + + inline_script = REPORT_SCRIPTS.get(report_name) + if not inline_script: + continue + + doc = frappe.get_doc("Report", report_name) + doc.report_script = inline_script.strip() + doc.report_type = "Script Report" + doc.query = None + + if config.get("javascript") is not None: + doc.javascript = config.get("javascript") + + doc.set("filters", _merge_filters(report_name, config.get("extra_filters", []))) + doc.flags.ignore_permissions = True + doc.save() + updated.append(report_name) + + frappe.db.commit() + return updated + + +def execute(): + return sync_dashboard_reports() diff --git a/asset_lite/patches/sync_work_order_workflow.py b/asset_lite/patches/sync_work_order_workflow.py new file mode 100644 index 0000000..b7d152e --- /dev/null +++ b/asset_lite/patches/sync_work_order_workflow.py @@ -0,0 +1,90 @@ +"""Sync Work Order workflow states/transitions from fixtures into the live database.""" + +import json +from pathlib import Path + +import frappe + + +def _ensure_workflow_masters(): + for action_name in ("Work Done", "Approve & Close"): + if not frappe.db.exists("Workflow Action Master", action_name): + frappe.get_doc( + { + "doctype": "Workflow Action Master", + "workflow_action_name": action_name, + } + ).insert(ignore_permissions=True) + + for state_name in ("Sent To Project Manager", "Sent To Maintenance manger"): + if not frappe.db.exists("Workflow State", state_name): + frappe.get_doc( + { + "doctype": "Workflow State", + "workflow_state_name": state_name, + "style": "Info", + } + ).insert(ignore_permissions=True) + + +def _load_work_order_fixture(): + fixture_path = Path(frappe.get_app_path("asset_lite")) / "fixtures" / "workflow.json" + workflows = json.loads(fixture_path.read_text()) + for workflow in workflows: + if workflow.get("name") == "Work Order": + return workflow + raise frappe.ValidationError("Work Order workflow not found in fixtures/workflow.json") + + +def sync_work_order_workflow(): + _ensure_workflow_masters() + workflow_data = _load_work_order_fixture() + + if not frappe.db.exists("Workflow", "Work Order"): + return "Work Order workflow not found" + + doc = frappe.get_doc("Workflow", "Work Order") + doc.is_active = workflow_data.get("is_active", 1) + doc.override_status = workflow_data.get("override_status", 0) + doc.send_email_alert = workflow_data.get("send_email_alert", 0) + doc.workflow_state_field = workflow_data.get("workflow_state_field", "workflow_state") + + doc.states = [] + for row in workflow_data.get("states", []): + doc.append( + "states", + { + "state": row.get("state"), + "doc_status": row.get("doc_status"), + "update_field": row.get("update_field"), + "update_value": row.get("update_value"), + "is_optional_state": row.get("is_optional_state", 0), + "avoid_status_override": row.get("avoid_status_override", 0), + "allow_edit": row.get("allow_edit"), + "message": row.get("message"), + "next_action_email_template": row.get("next_action_email_template"), + }, + ) + + doc.transitions = [] + for row in workflow_data.get("transitions", []): + doc.append( + "transitions", + { + "state": row.get("state"), + "action": row.get("action"), + "next_state": row.get("next_state"), + "allowed": row.get("allowed"), + "allow_self_approval": row.get("allow_self_approval", 1), + "condition": row.get("condition") or "", + }, + ) + + doc.flags.ignore_permissions = True + doc.save() + frappe.db.commit() + return "Work Order workflow synced" + + +def execute(): + return sync_work_order_workflow() diff --git a/asset_lite/public/py/work_order_qr.py b/asset_lite/public/py/work_order_qr.py new file mode 100644 index 0000000..d6e64d2 --- /dev/null +++ b/asset_lite/public/py/work_order_qr.py @@ -0,0 +1,64 @@ +import base64 +import io + +import frappe +import pyqrcode + + +def generate_work_order_feedback_qr(doc, method=None): + """Attach a small QR code for the public WO feedback page to custom_wo_qr.""" + if not doc.name: + return + + meta = frappe.get_meta("Work_Order") + if not meta.has_field("custom_wo_qr"): + return + + if doc.get("custom_wo_qr"): + return + + if frappe.db.exists( + "File", + { + "attached_to_doctype": "Work_Order", + "attached_to_name": doc.name, + "attached_to_field": "custom_wo_qr", + }, + ): + return + + try: + site_url = frappe.utils.get_url().rstrip("/") + feedback_url = f"{site_url}/asm_app/wo-feedback?work_order={doc.name}" + + qr_obj = pyqrcode.create(feedback_url, error="H") + buffer = io.BytesIO() + qr_obj.png(buffer, scale=6) + encoded_content = base64.b64encode(buffer.getvalue()).decode("utf-8") + + file_doc = frappe.get_doc( + { + "doctype": "File", + "file_name": f"{doc.name}-wo-feedback-qr.png", + "attached_to_doctype": "Work_Order", + "attached_to_name": doc.name, + "attached_to_field": "custom_wo_qr", + "content": encoded_content, + "decode": True, + "is_private": 0, + } + ) + file_doc.insert(ignore_permissions=True) + + frappe.db.set_value( + "Work_Order", + doc.name, + "custom_wo_qr", + file_doc.file_url, + update_modified=False, + ) + except Exception: + frappe.log_error( + f"Error generating WO feedback QR for {doc.name}", + "Work Order QR Generation Error", + )