174 lines
4.1 KiB
Python
174 lines
4.1 KiB
Python
"""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()
|