"""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()