diff --git a/custom_ui/custom_ui/doctype/__init__.py b/custom_ui/custom_ui/doctype/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/custom_ui/custom_ui/doctype/service_appointment/__init__.py b/custom_ui/custom_ui/doctype/service_appointment/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/custom_ui/custom_ui/doctype/service_appointment/service_appointment.js b/custom_ui/custom_ui/doctype/service_appointment/service_appointment.js new file mode 100644 index 0000000..b37bf72 --- /dev/null +++ b/custom_ui/custom_ui/doctype/service_appointment/service_appointment.js @@ -0,0 +1,8 @@ +// Copyright (c) 2026, Shiloh Code LLC and contributors +// For license information, please see license.txt + +// frappe.ui.form.on("Service Appointment", { +// refresh(frm) { + +// }, +// }); diff --git a/custom_ui/custom_ui/doctype/service_appointment/service_appointment.json b/custom_ui/custom_ui/doctype/service_appointment/service_appointment.json new file mode 100644 index 0000000..784998f --- /dev/null +++ b/custom_ui/custom_ui/doctype/service_appointment/service_appointment.json @@ -0,0 +1,138 @@ +{ + "actions": [], + "allow_rename": 1, + "autoname": "format:SA-{MM}-{YYYY}-{####}", + "creation": "2026-02-11 05:12:39.498845", + "doctype": "DocType", + "engine": "InnoDB", + "field_order": [ + "expected_start_date", + "expected_end_date", + "project_template", + "project", + "actual_start_date", + "actual_end_date", + "expected_start_time", + "expected_end_time", + "actual_end_time", + "actual_start_time", + "status", + "customer", + "company", + "service_address" + ], + "fields": [ + { + "fieldname": "expected_start_date", + "fieldtype": "Date", + "label": "Expected Start Date" + }, + { + "fieldname": "expected_end_date", + "fieldtype": "Date", + "label": "Expected End Date" + }, + { + "fieldname": "project_template", + "fieldtype": "Link", + "label": "Project Template", + "options": "Project Template" + }, + { + "fieldname": "project", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Project", + "options": "Project", + "reqd": 1 + }, + { + "fieldname": "actual_start_date", + "fieldtype": "Date", + "label": "Actual Start Date" + }, + { + "fieldname": "actual_end_date", + "fieldtype": "Date", + "label": "Actual End Date" + }, + { + "fieldname": "expected_start_time", + "fieldtype": "Time", + "label": "Expected Start Time" + }, + { + "fieldname": "expected_end_time", + "fieldtype": "Time", + "label": "Expected End Time" + }, + { + "fieldname": "actual_end_time", + "fieldtype": "Time", + "label": "Actual End Time" + }, + { + "fieldname": "actual_start_time", + "fieldtype": "Time", + "label": "Actual Start Time" + }, + { + "default": "Open", + "fieldname": "status", + "fieldtype": "Select", + "in_list_view": 1, + "label": "Status", + "options": "Open\nScheduled\nStarted\nCompleted\nCanceled", + "reqd": 1 + }, + { + "fieldname": "customer", + "fieldtype": "Link", + "label": "Customer", + "options": "Customer", + "reqd": 1 + }, + { + "fieldname": "company", + "fieldtype": "Link", + "label": "Company", + "options": "Company", + "reqd": 1 + }, + { + "fieldname": "service_address", + "fieldtype": "Link", + "label": "Service Address", + "options": "Address", + "reqd": 1 + } + ], + "grid_page_length": 50, + "index_web_pages_for_search": 1, + "links": [], + "modified": "2026-02-11 06:01:13.520710", + "modified_by": "Administrator", + "module": "Custom UI", + "name": "Service Appointment", + "naming_rule": "Expression", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "row_format": "Dynamic", + "rows_threshold_for_grid_search": 20, + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/custom_ui/custom_ui/doctype/service_appointment/service_appointment.py b/custom_ui/custom_ui/doctype/service_appointment/service_appointment.py new file mode 100644 index 0000000..1e96ee3 --- /dev/null +++ b/custom_ui/custom_ui/doctype/service_appointment/service_appointment.py @@ -0,0 +1,9 @@ +# Copyright (c) 2026, Shiloh Code LLC and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class ServiceAppointment(Document): + pass diff --git a/custom_ui/custom_ui/doctype/service_appointment/test_service_appointment.py b/custom_ui/custom_ui/doctype/service_appointment/test_service_appointment.py new file mode 100644 index 0000000..36a8b1f --- /dev/null +++ b/custom_ui/custom_ui/doctype/service_appointment/test_service_appointment.py @@ -0,0 +1,9 @@ +# Copyright (c) 2026, Shiloh Code LLC and Contributors +# See license.txt + +# import frappe +from frappe.tests.utils import FrappeTestCase + + +class TestServiceAppointment(FrappeTestCase): + pass