From 1610905a437cc18013df7aca74eff441b0d9e002 Mon Sep 17 00:00:00 2001 From: Casey Date: Wed, 18 Feb 2026 06:56:19 -0600 Subject: [PATCH] update --- custom_ui/api/db/clients.py | 95 + custom_ui/api/db/service_appointments.py | 5 +- custom_ui/fixtures/company.json | 12 +- custom_ui/fixtures/custom_field.json | 4133 +++++++++-------- custom_ui/fixtures/doctype.json | 346 ++ custom_ui/fixtures/project_template.json | 4 +- custom_ui/fixtures/property_setter.json | 208 +- custom_ui/fixtures/task_type.json | 50 +- custom_ui/services/db_restore_service.py | 20 + .../services/service_appointment_service.py | 24 +- frontend/src/api.js | 7 +- .../calendar/jobs/SNWProjectCalendar.vue | 552 ++- .../clientSubPages/AddressInformationForm.vue | 28 +- .../clientSubPages/ContactInformationForm.vue | 30 +- .../clientView/AddContactAddressModal.vue | 99 + .../clientView/GeneralClientInfo.vue | 211 +- 16 files changed, 3303 insertions(+), 2521 deletions(-) create mode 100644 custom_ui/services/db_restore_service.py create mode 100644 frontend/src/components/clientView/AddContactAddressModal.vue diff --git a/custom_ui/api/db/clients.py b/custom_ui/api/db/clients.py index e89ecbf..5c8aae8 100644 --- a/custom_ui/api/db/clients.py +++ b/custom_ui/api/db/clients.py @@ -9,6 +9,101 @@ from custom_ui.services import AddressService, ContactService, ClientService # CLIENT MANAGEMENT API METHODS # =============================================================================== +@frappe.whitelist() +def add_addresses_contacts(client_name, company_name, addresses=[], contacts=[]): + if isinstance(addresses, str): + addresses = json.loads(addresses) + if isinstance(contacts, str): + contacts = json.loads(contacts) + print(f"DEBUG: add_addresses_contacts called with client_name: {client_name}, addresses: {addresses}, contacts: {contacts}") + try: + client_doc = ClientService.get_client_or_throw(client_name) + if contacts: + contact_docs = [frappe.get_doc("Contact", contact.contact) for contact in client_doc.contacts] + for contact in contacts: + contact_doc = None + if frappe.db.exists("Contact", {"email_id": contact.get("email")}): + contact_doc = frappe.get_doc("Contact", {"email_id": contact.get("email")}) + else: + contact_doc = ContactService.create({ + "first_name": contact.get("first_name"), + "last_name": contact.get("last_name"), + "email_id": contact.get("email"), + "role": contact.get("role"), + "phone": contact.get("phone"), + "custom_email": contact.get("email"), + "is_primary_contact": 0, + "customer_type": client_doc.doctype, + "customer_name": client_doc.name, + "email_ids": [{ + "email": contact.get("email"), + "is_primary": 1 + }], + "phone_nos": [{ + "phone": contact.get("phone"), + "is_primary_phone": 1, + "is_primary_mobile_no": 1 + }] + }) + contact_doc.insert() + ClientService.append_link_v2(client_doc.name, "contacts", {"contact": contact_doc.name}) + ContactService.link_contact_to_customer(contact_doc, client_doc.doctype, client_doc.name) + contact_docs.append(contact_doc) + address_docs = [frappe.get_doc("Address", link.address) for link in client_doc.properties] + for address in addresses: + address_doc = None + if frappe.db.exists("Address", { + "address_line1": address.get("address_line1"), + "address_line2": address.get("address_line2"), + "city": address.get("city"), + # "state": address.get("state"), + "pincode": address.get("pincode") + }): + address_doc = frappe.get_doc("Address", { + "address_line1": address.get("address_line1"), + "address_line2": address.get("address_line2"), + "city": address.get("city"), + # "state": address.get("state"), + "pincode": address.get("pincode") + }) + else: + address_doc = AddressService.create({ + "address_title": AddressService.build_address_title(customer_name=client_name, address_data=address), + "address_line1": address.get("address_line1"), + "address_line2": address.get("address_line2"), + "city": address.get("city"), + "state": address.get("state"), + "pincode": address.get("pincode"), + "country": "United States", + "address_type": "Service", + "custom_billing_address": 0, + "is_primary_address": 0, + "is_service_address": 1, + "customer_type": client_doc.doctype, + "customer_name": client_doc.name + }) + address_doc.insert() + if company_name not in [company.company for company in address_doc.companies]: + address_doc.append("companies", {"company": company_name}) + address_doc.save(ignore_permissions=True) + AddressService.link_address_to_customer(address_doc, client_doc.doctype, client_doc.name) + for contact_to_link_idx in address.get("contacts", []): + contact_doc = contact_docs[contact_to_link_idx] + AddressService.link_address_to_contact(address_doc, contact_doc.name) + ContactService.link_contact_to_address(contact_doc, address_doc.name) + primary_contact = contact_docs[address.get("primary_contact", 0)] + AddressService.set_primary_contact(address_doc.name, primary_contact.name) + ClientService.append_link_v2(client_doc.name, "properties", {"address": address_doc.name}) + address_docs.append(address_doc) + + return build_success_response({ + "contacts": [contact.as_dict() for contact in contact_docs], + "addresses": [address.as_dict() for address in address_docs], + "message": "Addresses and contacts added successfully." + }) + except Exception as e: + return build_error_response(str(e), 500) + @frappe.whitelist() def check_client_exists(client_name): """Check if a client exists as either a Customer or a Lead. diff --git a/custom_ui/api/db/service_appointments.py b/custom_ui/api/db/service_appointments.py index d02e707..c626831 100644 --- a/custom_ui/api/db/service_appointments.py +++ b/custom_ui/api/db/service_appointments.py @@ -61,7 +61,7 @@ def get_unscheduled_service_appointments(companies): return build_error_response(str(e), 500) @frappe.whitelist() -def update_service_appointment_scheduled_dates(service_appointment_name: str, start_date, end_date, crew_lead_name, start_time=None, end_time=None): +def update_service_appointment_scheduled_dates(service_appointment_name: str, start_date, end_date, crew_lead_name, skipped_days=[], start_time=None, end_time=None): """Update scheduled dates for a Service Appointment.""" print(f"DEBUG: Updating scheduled dates for Service Appointment {service_appointment_name} to start: {start_date}, end: {end_date}, crew lead: {crew_lead_name}, start time: {start_time}, end time: {end_time}") try: @@ -71,7 +71,8 @@ def update_service_appointment_scheduled_dates(service_appointment_name: str, st start_date, end_date, start_time, - end_time + end_time, + skip_days=skipped_days ) return build_success_response(updated_service_appointment.as_dict()) except Exception as e: diff --git a/custom_ui/fixtures/company.json b/custom_ui/fixtures/company.json index 39bffd3..8a3778c 100644 --- a/custom_ui/fixtures/company.json +++ b/custom_ui/fixtures/company.json @@ -61,7 +61,7 @@ "expenses_included_in_valuation": "Expenses Included In Valuation - VS", "fax": null, "is_group": 0, - "modified": "2026-02-15 00:56:31.933618", + "modified": "2026-02-17 03:05:48.497419", "monthly_sales_target": 0.0, "name": "Veritas Stone", "old_parent": "", @@ -149,7 +149,7 @@ "expenses_included_in_valuation": "Expenses Included In Valuation - DL", "fax": null, "is_group": 0, - "modified": "2026-02-15 00:56:31.935944", + "modified": "2026-02-17 03:05:48.503038", "monthly_sales_target": 0.0, "name": "Daniels Landscape Supplies", "old_parent": "", @@ -237,7 +237,7 @@ "expenses_included_in_valuation": "Expenses Included In Valuation - SD", "fax": null, "is_group": 0, - "modified": "2026-02-15 00:56:31.938072", + "modified": "2026-02-17 03:05:48.505280", "monthly_sales_target": 0.0, "name": "sprinklersnorthwest (Demo)", "old_parent": "", @@ -325,7 +325,7 @@ "expenses_included_in_valuation": "Expenses Included In Valuation - NYC", "fax": null, "is_group": 0, - "modified": "2026-02-15 00:56:31.942129", + "modified": "2026-02-17 03:05:48.509153", "monthly_sales_target": 0.0, "name": "Nuco Yard Care", "old_parent": "", @@ -413,7 +413,7 @@ "expenses_included_in_valuation": "Expenses Included In Valuation - LF", "fax": null, "is_group": 0, - "modified": "2026-02-15 00:56:31.940118", + "modified": "2026-02-17 03:05:48.507129", "monthly_sales_target": 0.0, "name": "Lowe Fencing", "old_parent": "", @@ -501,7 +501,7 @@ "expenses_included_in_valuation": "Expenses Included In Valuation - S", "fax": null, "is_group": 0, - "modified": "2026-02-15 00:56:31.946270", + "modified": "2026-02-17 03:05:48.512257", "monthly_sales_target": 0.0, "name": "Sprinklers Northwest", "old_parent": "", diff --git a/custom_ui/fixtures/custom_field.json b/custom_ui/fixtures/custom_field.json index ee0e522..aa04261 100644 --- a/custom_ui/fixtures/custom_field.json +++ b/custom_ui/fixtures/custom_field.json @@ -911,63 +911,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": "Contact", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_column_break_g4zvy", - "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": "sb_01", - "is_system_generated": 0, - "is_virtual": 0, - "label": "", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2024-12-27 15:15:18.076019", - "module": null, - "name": "Contact-custom_column_break_g4zvy", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "placeholder": null, - "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": 1, "allow_on_submit": 0, @@ -1025,63 +968,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": "Address", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_column_break_vqa4d", - "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": "address_details", - "is_system_generated": 0, - "is_virtual": 0, - "label": "", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2025-05-07 09:35:30.582314", - "module": null, - "name": "Address-custom_column_break_vqa4d", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "placeholder": null, - "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, @@ -1367,6 +1253,120 @@ "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": "Contact", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_column_break_g4zvy", + "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": "sb_01", + "is_system_generated": 0, + "is_virtual": 0, + "label": "", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2024-12-27 15:15:18.076019", + "module": null, + "name": "Contact-custom_column_break_g4zvy", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "placeholder": null, + "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": "Address", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_column_break_vqa4d", + "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": "address_details", + "is_system_generated": 0, + "is_virtual": 0, + "label": "", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2025-05-07 09:35:30.582314", + "module": null, + "name": "Address-custom_column_break_vqa4d", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "placeholder": null, + "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, @@ -1595,63 +1595,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": "Address", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_column_break_jw2ty", - "fieldtype": "Column 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_column_break_vqa4d", - "is_system_generated": 0, - "is_virtual": 0, - "label": "", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2024-12-06 12:51:45.652483", - "module": null, - "name": "Address-custom_column_break_jw2ty", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "placeholder": null, - "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, @@ -2165,6 +2108,63 @@ "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": "Address", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_column_break_jw2ty", + "fieldtype": "Column 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_column_break_vqa4d", + "is_system_generated": 0, + "is_virtual": 0, + "label": "", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2024-12-06 12:51:45.652483", + "module": null, + "name": "Address-custom_column_break_jw2ty", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "placeholder": null, + "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, @@ -2564,120 +2564,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": "Contact", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_column_break_hpz5b", - "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": "first_name", - "is_system_generated": 0, - "is_virtual": 0, - "label": "", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2025-01-14 18:03:58.483385", - "module": null, - "name": "Contact-custom_column_break_hpz5b", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "placeholder": null, - "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": "Address", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_installationservice_address", - "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_column_break_jw2ty", - "is_system_generated": 0, - "is_virtual": 0, - "label": "Installation/Service Address", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2026-02-12 02:45:07.618975", - "module": null, - "name": "Address-custom_installationservice_address", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "placeholder": null, - "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, @@ -2963,6 +2849,120 @@ "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": "Contact", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_column_break_hpz5b", + "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": "first_name", + "is_system_generated": 0, + "is_virtual": 0, + "label": "", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2025-01-14 18:03:58.483385", + "module": null, + "name": "Contact-custom_column_break_hpz5b", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "placeholder": null, + "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": "Address", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_installationservice_address", + "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_column_break_jw2ty", + "is_system_generated": 0, + "is_virtual": 0, + "label": "Installation/Service Address", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2026-02-12 02:45:07.618975", + "module": null, + "name": "Address-custom_installationservice_address", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "placeholder": null, + "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, @@ -3134,63 +3134,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": "0", - "depends_on": null, - "description": null, - "docstatus": 0, - "doctype": "Custom Field", - "dt": "Address", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_billing_address", - "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_installationservice_address", - "is_system_generated": 0, - "is_virtual": 0, - "label": "Billing Address", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2025-03-04 20:12:01.030950", - "module": null, - "name": "Address-custom_billing_address", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "placeholder": null, - "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, @@ -3419,6 +3362,63 @@ "unique": 0, "width": null }, + { + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": "0", + "depends_on": null, + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Address", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_billing_address", + "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_installationservice_address", + "is_system_generated": 0, + "is_virtual": 0, + "label": "Billing Address", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2025-03-04 20:12:01.030950", + "module": null, + "name": "Address-custom_billing_address", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "placeholder": null, + "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, @@ -3533,63 +3533,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": "Contact", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_column_break_3pehb", - "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": "middle_name", - "is_system_generated": 0, - "is_virtual": 0, - "label": "", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2025-01-14 18:03:58.603921", - "module": null, - "name": "Contact-custom_column_break_3pehb", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "placeholder": null, - "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, @@ -3932,6 +3875,63 @@ "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": "Contact", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_column_break_3pehb", + "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": "middle_name", + "is_system_generated": 0, + "is_virtual": 0, + "label": "", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2025-01-14 18:03:58.603921", + "module": null, + "name": "Contact-custom_column_break_3pehb", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "placeholder": null, + "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, @@ -4730,63 +4730,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": "0", - "depends_on": null, - "description": null, - "docstatus": 0, - "doctype": "Custom Field", - "dt": "Address", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_is_compnay_address", - "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": "is_primary_address", - "is_system_generated": 0, - "is_virtual": 0, - "label": "Is company address-hidden", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2024-12-10 04:16:38.338226", - "module": null, - "name": "Address-custom_is_compnay_address", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "placeholder": null, - "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, @@ -4958,6 +4901,63 @@ "unique": 0, "width": null }, + { + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": "0", + "depends_on": null, + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Address", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_is_compnay_address", + "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": "is_primary_address", + "is_system_generated": 0, + "is_virtual": 0, + "label": "Is company address-hidden", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2024-12-10 04:16:38.338226", + "module": null, + "name": "Address-custom_is_compnay_address", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "placeholder": null, + "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, @@ -5072,63 +5072,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": "Address", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_column_break_ky1zo", - "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_is_compnay_address", - "is_system_generated": 0, - "is_virtual": 0, - "label": "", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2025-01-14 09:56:58.070846", - "module": null, - "name": "Address-custom_column_break_ky1zo", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "placeholder": null, - "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, @@ -5414,6 +5357,63 @@ "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": "Address", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_column_break_ky1zo", + "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_is_compnay_address", + "is_system_generated": 0, + "is_virtual": 0, + "label": "", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2025-01-14 09:56:58.070846", + "module": null, + "name": "Address-custom_column_break_ky1zo", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "placeholder": null, + "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, @@ -5585,63 +5585,6 @@ "unique": 0, "width": null }, - { - "allow_in_quick_entry": 1, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "collapsible_depends_on": null, - "columns": 0, - "default": "Not Started", - "depends_on": null, - "description": null, - "docstatus": 0, - "doctype": "Custom Field", - "dt": "Address", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_estimate_sent_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_column_break_ky1zo", - "is_system_generated": 0, - "is_virtual": 0, - "label": "Estimate Sent Status", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2025-11-07 10:12:52.379735", - "module": null, - "name": "Address-custom_estimate_sent_status", - "no_copy": 0, - "non_negative": 0, - "options": "Not Started\nIn Progress\nCompleted", - "permlevel": 0, - "placeholder": null, - "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": 1, - "search_index": 0, - "show_dashboard": 0, - "sort_options": 0, - "translatable": 1, - "unique": 0, - "width": null - }, { "allow_in_quick_entry": 0, "allow_on_submit": 0, @@ -5984,6 +5927,63 @@ "unique": 0, "width": null }, + { + "allow_in_quick_entry": 1, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": "Not Started", + "depends_on": null, + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Address", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_estimate_sent_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_column_break_ky1zo", + "is_system_generated": 0, + "is_virtual": 0, + "label": "Estimate Sent Status", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2025-11-07 10:12:52.379735", + "module": null, + "name": "Address-custom_estimate_sent_status", + "no_copy": 0, + "non_negative": 0, + "options": "Not Started\nIn Progress\nCompleted", + "permlevel": 0, + "placeholder": null, + "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": 1, + "search_index": 0, + "show_dashboard": 0, + "sort_options": 0, + "translatable": 1, + "unique": 0, + "width": null + }, { "allow_in_quick_entry": 0, "allow_on_submit": 0, @@ -6041,63 +6041,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": "Customer", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_appointment_date", - "fieldtype": "Date", - "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": "customer_group", - "is_system_generated": 0, - "is_virtual": 0, - "label": "Appointment Date", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2024-10-21 04:06:47.935309", - "module": null, - "name": "Customer-custom_appointment_date", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "placeholder": null, - "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, @@ -6212,63 +6155,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": "Not Started", - "depends_on": null, - "description": null, - "docstatus": 0, - "doctype": "Custom Field", - "dt": "Address", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_onsite_meeting_scheduled", - "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_estimate_sent_status", - "is_system_generated": 0, - "is_virtual": 0, - "label": "On-Site Meeting Scheduled", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2025-11-07 10:12:52.881382", - "module": null, - "name": "Address-custom_onsite_meeting_scheduled", - "no_copy": 0, - "non_negative": 0, - "options": "Not Started\nIn Progress\nCompleted", - "permlevel": 0, - "placeholder": null, - "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": 1, - "search_index": 0, - "show_dashboard": 0, - "sort_options": 0, - "translatable": 1, - "unique": 0, - "width": null - }, { "allow_in_quick_entry": 0, "allow_on_submit": 0, @@ -6440,6 +6326,120 @@ "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": "Customer", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_appointment_date", + "fieldtype": "Date", + "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": "customer_group", + "is_system_generated": 0, + "is_virtual": 0, + "label": "Appointment Date", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2024-10-21 04:06:47.935309", + "module": null, + "name": "Customer-custom_appointment_date", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "placeholder": null, + "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": "Not Started", + "depends_on": null, + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Address", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_onsite_meeting_scheduled", + "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_estimate_sent_status", + "is_system_generated": 0, + "is_virtual": 0, + "label": "On-Site Meeting Scheduled", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2025-11-07 10:12:52.881382", + "module": null, + "name": "Address-custom_onsite_meeting_scheduled", + "no_copy": 0, + "non_negative": 0, + "options": "Not Started\nIn Progress\nCompleted", + "permlevel": 0, + "placeholder": null, + "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": 1, + "search_index": 0, + "show_dashboard": 0, + "sort_options": 0, + "translatable": 1, + "unique": 0, + "width": null + }, { "allow_in_quick_entry": 0, "allow_on_submit": 0, @@ -6497,63 +6497,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": "Not Started", - "depends_on": null, - "description": null, - "docstatus": 0, - "doctype": "Custom Field", - "dt": "Address", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_job_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_onsite_meeting_scheduled", - "is_system_generated": 0, - "is_virtual": 0, - "label": "Job Status", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2025-11-07 10:12:53.465004", - "module": null, - "name": "Address-custom_job_status", - "no_copy": 0, - "non_negative": 0, - "options": "Not Started\nIn Progress\nCompleted", - "permlevel": 0, - "placeholder": null, - "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": 1, - "search_index": 0, - "show_dashboard": 0, - "sort_options": 0, - "translatable": 1, - "unique": 0, - "width": null - }, { "allow_in_quick_entry": 0, "allow_on_submit": 0, @@ -6683,7 +6626,7 @@ "dt": "Address", "fetch_from": null, "fetch_if_empty": 0, - "fieldname": "custom_payment_received_status", + "fieldname": "custom_job_status", "fieldtype": "Select", "hidden": 0, "hide_border": 0, @@ -6695,16 +6638,16 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "custom_job_status", + "insert_after": "custom_onsite_meeting_scheduled", "is_system_generated": 0, "is_virtual": 0, - "label": "Payment Received Status", + "label": "Job Status", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2025-11-10 01:28:45.145725", + "modified": "2025-11-07 10:12:53.465004", "module": null, - "name": "Address-custom_payment_received_status", + "name": "Address-custom_job_status", "no_copy": 0, "non_negative": 0, "options": "Not Started\nIn Progress\nCompleted", @@ -6903,7 +6846,7 @@ "collapsible": 0, "collapsible_depends_on": null, "columns": 0, - "default": null, + "default": "Not Started", "depends_on": null, "description": null, "docstatus": 0, @@ -6911,8 +6854,8 @@ "dt": "Address", "fetch_from": null, "fetch_if_empty": 0, - "fieldname": "custom_section_break_fvgdt", - "fieldtype": "Section Break", + "fieldname": "custom_payment_received_status", + "fieldtype": "Select", "hidden": 0, "hide_border": 0, "hide_days": 0, @@ -6923,19 +6866,19 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "custom_payment_received_status", + "insert_after": "custom_job_status", "is_system_generated": 0, "is_virtual": 0, - "label": "", + "label": "Payment Received Status", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2024-12-06 12:51:45.744682", + "modified": "2025-11-10 01:28:45.145725", "module": null, - "name": "Address-custom_section_break_fvgdt", + "name": "Address-custom_payment_received_status", "no_copy": 0, "non_negative": 0, - "options": null, + "options": "Not Started\nIn Progress\nCompleted", "permlevel": 0, "placeholder": null, "precision": "", @@ -6945,11 +6888,11 @@ "read_only": 0, "read_only_depends_on": null, "report_hide": 0, - "reqd": 0, + "reqd": 1, "search_index": 0, "show_dashboard": 0, "sort_options": 0, - "translatable": 0, + "translatable": 1, "unique": 0, "width": null }, @@ -7181,6 +7124,63 @@ "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": "Address", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_section_break_fvgdt", + "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_payment_received_status", + "is_system_generated": 0, + "is_virtual": 0, + "label": "", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2024-12-06 12:51:45.744682", + "module": null, + "name": "Address-custom_section_break_fvgdt", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "placeholder": null, + "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, @@ -7352,63 +7352,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": "Address", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "tax_category", - "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": "fax", - "is_system_generated": 0, - "is_virtual": 0, - "label": "Tax Category", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2018-12-28 22:29:21.828090", - "module": null, - "name": "Address-tax_category", - "no_copy": 0, - "non_negative": 0, - "options": "Tax Category", - "permlevel": 0, - "placeholder": null, - "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, @@ -8036,6 +7979,63 @@ "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": "Contact", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "is_billing_contact", + "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": "is_primary_contact", + "is_system_generated": 0, + "is_virtual": 0, + "label": "Is Billing Contact", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2019-12-02 11:00:03.432994", + "module": null, + "name": "Contact-is_billing_contact", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "placeholder": null, + "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, @@ -8150,63 +8150,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": "Contact", - "fetch_from": "address.address_title", - "fetch_if_empty": 1, - "fieldname": "custom_service_address", - "fieldtype": "Link", - "hidden": 0, - "hide_border": 0, - "hide_days": 0, - "hide_seconds": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_global_search": 1, - "in_list_view": 1, - "in_preview": 0, - "in_standard_filter": 1, - "insert_after": "is_billing_contact", - "is_system_generated": 0, - "is_virtual": 0, - "label": "Service/Installation Address", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2025-01-14 17:40:19.828715", - "module": null, - "name": "Contact-custom_service_address", - "no_copy": 0, - "non_negative": 0, - "options": "Address", - "permlevel": 0, - "placeholder": null, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": "100", - "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, @@ -8435,6 +8378,63 @@ "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": "Contact", + "fetch_from": "address.address_title", + "fetch_if_empty": 1, + "fieldname": "custom_service_address", + "fieldtype": "Link", + "hidden": 0, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_global_search": 1, + "in_list_view": 1, + "in_preview": 0, + "in_standard_filter": 1, + "insert_after": "is_billing_contact", + "is_system_generated": 0, + "is_virtual": 0, + "label": "Service/Installation Address", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2025-01-14 17:40:19.828715", + "module": null, + "name": "Contact-custom_service_address", + "no_copy": 0, + "non_negative": 0, + "options": "Address", + "permlevel": 0, + "placeholder": null, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": "100", + "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, @@ -8549,63 +8549,6 @@ "unique": 0, "width": null }, - { - "allow_in_quick_entry": 1, - "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": "Address", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_linked_city", - "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": "address_line2", - "is_system_generated": 0, - "is_virtual": 0, - "label": "Linked City", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2024-12-05 11:54:10.862148", - "module": null, - "name": "Address-custom_linked_city", - "no_copy": 0, - "non_negative": 0, - "options": "City", - "permlevel": 0, - "placeholder": null, - "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, @@ -8664,13 +8607,13 @@ "width": null }, { - "allow_in_quick_entry": 0, + "allow_in_quick_entry": 1, "allow_on_submit": 0, "bold": 0, "collapsible": 0, "collapsible_depends_on": null, "columns": 0, - "default": "0", + "default": null, "depends_on": null, "description": null, "docstatus": 0, @@ -8678,8 +8621,8 @@ "dt": "Address", "fetch_from": null, "fetch_if_empty": 0, - "fieldname": "is_your_company_address", - "fieldtype": "Check", + "fieldname": "custom_linked_city", + "fieldtype": "Link", "hidden": 0, "hide_border": 0, "hide_days": 0, @@ -8690,19 +8633,19 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "linked_with", + "insert_after": "address_line2", "is_system_generated": 0, "is_virtual": 0, - "label": "Is Your Company Address", + "label": "Linked City", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2020-10-14 17:41:40.878179", + "modified": "2024-12-05 11:54:10.862148", "module": null, - "name": "Address-is_your_company_address", + "name": "Address-custom_linked_city", "no_copy": 0, "non_negative": 0, - "options": null, + "options": "City", "permlevel": 0, "placeholder": null, "precision": "", @@ -8846,11 +8789,11 @@ "description": null, "docstatus": 0, "doctype": "Custom Field", - "dt": "Address", + "dt": "Service Appointment", "fetch_from": null, "fetch_if_empty": 0, - "fieldname": "custom_subdivision", - "fieldtype": "Link", + "fieldname": "custom_section_break_gndxh", + "fieldtype": "Section Break", "hidden": 0, "hide_border": 0, "hide_days": 0, @@ -8858,22 +8801,79 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_global_search": 0, - "in_list_view": 1, + "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "custom_linked_city", + "insert_after": "custom_internal_company", "is_system_generated": 0, "is_virtual": 0, - "label": "Subdivision", + "label": "", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2025-03-04 20:07:51.639967", + "modified": "2025-01-06 16:50:41.747787", "module": null, - "name": "Address-custom_subdivision", + "name": "Service Appointment-custom_section_break_gndxh", "no_copy": 0, "non_negative": 0, - "options": "Territory", + "options": null, + "permlevel": 0, + "placeholder": null, + "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": "0", + "depends_on": null, + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Address", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "is_your_company_address", + "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_subdivision", + "is_system_generated": 0, + "is_virtual": 0, + "label": "Is Your Company Address", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2020-10-14 17:41:40.878179", + "module": null, + "name": "Address-is_your_company_address", + "no_copy": 0, + "non_negative": 0, + "options": null, "permlevel": 0, "placeholder": null, "precision": "", @@ -8903,11 +8903,11 @@ "description": null, "docstatus": 0, "doctype": "Custom Field", - "dt": "Service Appointment", + "dt": "Address", "fetch_from": null, "fetch_if_empty": 0, - "fieldname": "custom_section_break_gndxh", - "fieldtype": "Section Break", + "fieldname": "custom_subdivision", + "fieldtype": "Link", "hidden": 0, "hide_border": 0, "hide_days": 0, @@ -8915,22 +8915,22 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_global_search": 0, - "in_list_view": 0, + "in_list_view": 1, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "custom_internal_company", + "insert_after": "custom_linked_city", "is_system_generated": 0, "is_virtual": 0, - "label": "", + "label": "Subdivision", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2025-01-06 16:50:41.747787", + "modified": "2025-03-04 20:07:51.639967", "module": null, - "name": "Service Appointment-custom_section_break_gndxh", + "name": "Address-custom_subdivision", "no_copy": 0, "non_negative": 0, - "options": null, + "options": "Territory", "permlevel": 0, "placeholder": null, "precision": "", @@ -9119,120 +9119,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": "Contact", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_column_break_sn9hu", - "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": "more_info", - "is_system_generated": 0, - "is_virtual": 0, - "label": "", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2024-12-27 15:15:17.875587", - "module": null, - "name": "Contact-custom_column_break_sn9hu", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "placeholder": null, - "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": "Address", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_column_break_3mo7x", - "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": "is_your_company_address", - "is_system_generated": 0, - "is_virtual": 0, - "label": "", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2025-01-13 16:23:38.952888", - "module": null, - "name": "Address-custom_column_break_3mo7x", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "placeholder": null, - "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, @@ -9359,11 +9245,11 @@ "description": null, "docstatus": 0, "doctype": "Custom Field", - "dt": "Customer", + "dt": "Contact", "fetch_from": null, "fetch_if_empty": 0, - "fieldname": "custom_previous_year_price", - "fieldtype": "Currency", + "fieldname": "custom_column_break_sn9hu", + "fieldtype": "Column Break", "hidden": 0, "hide_border": 0, "hide_days": 0, @@ -9374,16 +9260,73 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "default_price_list", + "insert_after": "more_info", "is_system_generated": 0, "is_virtual": 0, - "label": "Previous Year Price", + "label": "", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2024-10-21 04:06:48.267280", + "modified": "2024-12-27 15:15:17.875587", "module": null, - "name": "Customer-custom_previous_year_price", + "name": "Contact-custom_column_break_sn9hu", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "placeholder": null, + "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": "Address", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_column_break_3mo7x", + "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": "is_your_company_address", + "is_system_generated": 0, + "is_virtual": 0, + "label": "", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2025-01-13 16:23:38.952888", + "module": null, + "name": "Address-custom_column_break_3mo7x", "no_copy": 0, "non_negative": 0, "options": null, @@ -9575,6 +9518,63 @@ "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": "Customer", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_previous_year_price", + "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": "default_price_list", + "is_system_generated": 0, + "is_virtual": 0, + "label": "Previous Year Price", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2024-10-21 04:06:48.267280", + "module": null, + "name": "Customer-custom_previous_year_price", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "placeholder": null, + "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, @@ -9860,63 +9860,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": "Contact", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "is_billing_contact", - "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": "is_primary_contact", - "is_system_generated": 0, - "is_virtual": 0, - "label": "Is Billing Contact", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2019-12-02 11:00:03.432994", - "module": null, - "name": "Contact-is_billing_contact", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "placeholder": null, - "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, @@ -10544,63 +10487,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": "Contact", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_column_break_kmlkz", - "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": "sb_00", - "is_system_generated": 0, - "is_virtual": 0, - "label": "", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2024-12-23 16:27:55.413283", - "module": null, - "name": "Contact-custom_column_break_kmlkz", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "placeholder": null, - "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, @@ -10715,6 +10601,63 @@ "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": "Contact", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_column_break_kmlkz", + "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": "sb_00", + "is_system_generated": 0, + "is_virtual": 0, + "label": "", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2024-12-23 16:27:55.413283", + "module": null, + "name": "Contact-custom_column_break_kmlkz", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "placeholder": null, + "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, @@ -11570,6 +11513,63 @@ "unique": 0, "width": null }, + { + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": "Locate incomplete", + "depends_on": null, + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Project", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_utlity_locate_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": 1, + "in_preview": 0, + "in_standard_filter": 0, + "insert_after": "custom_permit_status", + "is_system_generated": 0, + "is_virtual": 0, + "label": "Utlity Locate Status", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2024-11-02 07:07:12.654207", + "module": null, + "name": "Project-custom_utlity_locate_status", + "no_copy": 0, + "non_negative": 0, + "options": "Locate incomplete\nNeed More Information\nLocate Not Necessary\nUtility Locate complete", + "permlevel": 0, + "placeholder": null, + "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, @@ -11634,7 +11634,7 @@ "collapsible": 0, "collapsible_depends_on": null, "columns": 0, - "default": "Locate incomplete", + "default": null, "depends_on": null, "description": null, "docstatus": 0, @@ -11642,8 +11642,8 @@ "dt": "Project", "fetch_from": null, "fetch_if_empty": 0, - "fieldname": "custom_utlity_locate_status", - "fieldtype": "Select", + "fieldname": "custom_crew_scheduling", + "fieldtype": "Table", "hidden": 0, "hide_border": 0, "hide_days": 0, @@ -11651,22 +11651,22 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_global_search": 0, - "in_list_view": 1, + "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "custom_permit_status", + "insert_after": "custom_utlity_locate_status", "is_system_generated": 0, "is_virtual": 0, - "label": "Utlity Locate Status", + "label": "Crew Scheduling", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2024-11-02 07:07:12.654207", + "modified": "2024-11-04 11:51:00.400929", "module": null, - "name": "Project-custom_utlity_locate_status", + "name": "Project-custom_crew_scheduling", "no_copy": 0, "non_negative": 0, - "options": "Locate incomplete\nNeed More Information\nLocate Not Necessary\nUtility Locate complete", + "options": "Crew Schedule Detail", "permlevel": 0, "placeholder": null, "precision": "", @@ -11680,7 +11680,7 @@ "search_index": 0, "show_dashboard": 0, "sort_options": 0, - "translatable": 1, + "translatable": 0, "unique": 0, "width": null }, @@ -11741,63 +11741,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": "Project", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_crew_scheduling", - "fieldtype": "Table", - "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_utlity_locate_status", - "is_system_generated": 0, - "is_virtual": 0, - "label": "Crew Scheduling", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2024-11-04 11:51:00.400929", - "module": null, - "name": "Project-custom_crew_scheduling", - "no_copy": 0, - "non_negative": 0, - "options": "Crew Schedule Detail", - "permlevel": 0, - "placeholder": null, - "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, @@ -12881,6 +12824,63 @@ "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": "Address", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "tax_category", + "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": "fax", + "is_system_generated": 0, + "is_virtual": 0, + "label": "Tax Category", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2018-12-28 22:29:21.828090", + "module": null, + "name": "Address-tax_category", + "no_copy": 0, + "non_negative": 0, + "options": "Tax Category", + "permlevel": 0, + "placeholder": null, + "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, @@ -13109,6 +13109,63 @@ "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": "Address", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_customers", + "fieldtype": "Table", + "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": "is_service_address", + "is_system_generated": 0, + "is_virtual": 0, + "label": "Customers", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2026-02-17 08:16:54.701995", + "module": null, + "name": "Address-custom_customers", + "no_copy": 0, + "non_negative": 0, + "options": "Address Customer Link", + "permlevel": 0, + "placeholder": null, + "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, @@ -13136,7 +13193,7 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "disabled", + "insert_after": "custom_customers", "is_system_generated": 0, "is_virtual": 0, "label": "", @@ -13394,63 +13451,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": "Address", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_google_map", - "fieldtype": "HTML", - "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_show_irrigation_district", - "is_system_generated": 0, - "is_virtual": 0, - "label": "Google Map", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2024-12-06 05:34:24.226193", - "module": null, - "name": "Address-custom_google_map", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "placeholder": null, - "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, @@ -13508,63 +13508,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": "Address", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_latitude", - "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_google_map", - "is_system_generated": 0, - "is_virtual": 0, - "label": "Latitude", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2024-12-13 07:17:59.819553", - "module": null, - "name": "Address-custom_latitude", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "placeholder": null, - "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, @@ -13637,8 +13580,8 @@ "dt": "Address", "fetch_from": null, "fetch_if_empty": 0, - "fieldname": "custom_longitude", - "fieldtype": "Data", + "fieldname": "custom_google_map", + "fieldtype": "HTML", "hidden": 0, "hide_border": 0, "hide_days": 0, @@ -13649,16 +13592,16 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "custom_latitude", + "insert_after": "custom_show_irrigation_district", "is_system_generated": 0, "is_virtual": 0, - "label": "longitude", + "label": "Google Map", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2024-12-13 07:17:59.942073", + "modified": "2024-12-06 05:34:24.226193", "module": null, - "name": "Address-custom_longitude", + "name": "Address-custom_google_map", "no_copy": 0, "non_negative": 0, "options": null, @@ -13675,7 +13618,7 @@ "search_index": 0, "show_dashboard": 0, "sort_options": 0, - "translatable": 1, + "translatable": 0, "unique": 0, "width": null }, @@ -13694,9 +13637,9 @@ "dt": "Address", "fetch_from": null, "fetch_if_empty": 0, - "fieldname": "custom_address_for_coordinates", + "fieldname": "custom_latitude", "fieldtype": "Data", - "hidden": 1, + "hidden": 0, "hide_border": 0, "hide_days": 0, "hide_seconds": 0, @@ -13706,16 +13649,16 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "custom_longitude", + "insert_after": "custom_google_map", "is_system_generated": 0, "is_virtual": 0, - "label": "Address For Coordinates", + "label": "Latitude", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2025-05-15 11:37:40.846923", + "modified": "2024-12-13 07:17:59.819553", "module": null, - "name": "Address-custom_address_for_coordinates", + "name": "Address-custom_latitude", "no_copy": 0, "non_negative": 0, "options": null, @@ -13732,7 +13675,7 @@ "search_index": 0, "show_dashboard": 0, "sort_options": 0, - "translatable": 0, + "translatable": 1, "unique": 0, "width": null }, @@ -13850,6 +13793,63 @@ "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": "Address", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_longitude", + "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_latitude", + "is_system_generated": 0, + "is_virtual": 0, + "label": "longitude", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2024-12-13 07:17:59.942073", + "module": null, + "name": "Address-custom_longitude", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "placeholder": null, + "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, @@ -13922,8 +13922,8 @@ "dt": "Address", "fetch_from": null, "fetch_if_empty": 0, - "fieldname": "custom_linked_contacts", - "fieldtype": "Table", + "fieldname": "custom_address_for_coordinates", + "fieldtype": "Data", "hidden": 1, "hide_border": 0, "hide_days": 0, @@ -13934,19 +13934,19 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "linked_with", + "insert_after": "custom_longitude", "is_system_generated": 0, "is_virtual": 0, - "label": "Linked Contacts", + "label": "Address For Coordinates", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2024-12-09 05:20:08.566488", + "modified": "2025-05-15 11:37:40.846923", "module": null, - "name": "Address-custom_linked_contacts", + "name": "Address-custom_address_for_coordinates", "no_copy": 0, "non_negative": 0, - "options": "Address Contact Role", + "options": null, "permlevel": 0, "placeholder": null, "precision": "", @@ -14135,6 +14135,63 @@ "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": "Address", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_linked_contacts", + "fieldtype": "Table", + "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": "linked_with", + "is_system_generated": 0, + "is_virtual": 0, + "label": "Linked Contacts", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2024-12-09 05:20:08.566488", + "module": null, + "name": "Address-custom_linked_contacts", + "no_copy": 0, + "non_negative": 0, + "options": "Address Contact Role", + "permlevel": 0, + "placeholder": null, + "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, @@ -14192,63 +14249,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": "Address", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_column_break_9cbvb", - "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": "links", - "is_system_generated": 0, - "is_virtual": 0, - "label": "", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2025-05-07 09:35:30.889103", - "module": null, - "name": "Address-custom_column_break_9cbvb", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "placeholder": null, - "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, @@ -14321,8 +14321,8 @@ "dt": "Address", "fetch_from": null, "fetch_if_empty": 0, - "fieldname": "custom_linked_companies", - "fieldtype": "Table", + "fieldname": "custom_column_break_9cbvb", + "fieldtype": "Column Break", "hidden": 0, "hide_border": 0, "hide_days": 0, @@ -14333,19 +14333,19 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "custom_column_break_9cbvb", + "insert_after": "links", "is_system_generated": 0, "is_virtual": 0, - "label": "Linked Companies", + "label": "", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2024-12-06 04:53:56.106322", + "modified": "2025-05-07 09:35:30.889103", "module": null, - "name": "Address-custom_linked_companies", + "name": "Address-custom_column_break_9cbvb", "no_copy": 0, "non_negative": 0, - "options": "Linked Companies", + "options": null, "permlevel": 0, "placeholder": null, "precision": "", @@ -14420,63 +14420,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": "Address", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_irrigation", - "fieldtype": "Tab 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_linked_companies", - "is_system_generated": 0, - "is_virtual": 0, - "label": "Irrigation", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2024-12-06 04:34:51.016671", - "module": null, - "name": "Address-custom_irrigation", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "placeholder": null, - "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, @@ -14549,8 +14492,8 @@ "dt": "Address", "fetch_from": null, "fetch_if_empty": 0, - "fieldname": "custom_upcoming_services", - "fieldtype": "Section Break", + "fieldname": "custom_linked_companies", + "fieldtype": "Table", "hidden": 0, "hide_border": 0, "hide_days": 0, @@ -14561,19 +14504,19 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "custom_irrigation", + "insert_after": "custom_column_break_9cbvb", "is_system_generated": 0, "is_virtual": 0, - "label": "Upcoming Services", + "label": "Linked Companies", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2024-12-31 12:10:42.455406", + "modified": "2024-12-06 04:53:56.106322", "module": null, - "name": "Address-custom_upcoming_services", + "name": "Address-custom_linked_companies", "no_copy": 0, "non_negative": 0, - "options": null, + "options": "Linked Companies", "permlevel": 0, "placeholder": null, "precision": "", @@ -14712,7 +14655,7 @@ "collapsible": 0, "collapsible_depends_on": null, "columns": 0, - "default": "None", + "default": null, "depends_on": null, "description": null, "docstatus": 0, @@ -14720,9 +14663,9 @@ "dt": "Address", "fetch_from": null, "fetch_if_empty": 0, - "fieldname": "custom_service_type", - "fieldtype": "Select", - "hidden": 1, + "fieldname": "custom_irrigation", + "fieldtype": "Tab Break", + "hidden": 0, "hide_border": 0, "hide_days": 0, "hide_seconds": 0, @@ -14732,19 +14675,19 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "custom_upcoming_services", + "insert_after": "custom_linked_companies", "is_system_generated": 0, "is_virtual": 0, - "label": "Service Type", + "label": "Irrigation", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2024-12-09 06:25:23.173103", + "modified": "2024-12-06 04:34:51.016671", "module": null, - "name": "Address-custom_service_type", + "name": "Address-custom_irrigation", "no_copy": 0, "non_negative": 0, - "options": "Spring Turn-On\nBackflow Testing\nSpring TO/BFT\nWinterization\nNone\nRepair\nWarranty", + "options": null, "permlevel": 0, "placeholder": null, "precision": "", @@ -14758,7 +14701,7 @@ "search_index": 0, "show_dashboard": 0, "sort_options": 0, - "translatable": 1, + "translatable": 0, "unique": 0, "width": null }, @@ -14833,9 +14776,9 @@ "doctype": "Custom Field", "dt": "Address", "fetch_from": null, - "fetch_if_empty": 1, - "fieldname": "custom_service_route", - "fieldtype": "Data", + "fetch_if_empty": 0, + "fieldname": "custom_upcoming_services", + "fieldtype": "Section Break", "hidden": 0, "hide_border": 0, "hide_days": 0, @@ -14843,19 +14786,19 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_global_search": 0, - "in_list_view": 1, + "in_list_view": 0, "in_preview": 0, - "in_standard_filter": 1, - "insert_after": "custom_service_type", + "in_standard_filter": 0, + "insert_after": "custom_irrigation", "is_system_generated": 0, "is_virtual": 0, - "label": "Service Route", + "label": "Upcoming Services", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2024-12-11 12:34:43.871663", + "modified": "2024-12-31 12:10:42.455406", "module": null, - "name": "Address-custom_service_route", + "name": "Address-custom_upcoming_services", "no_copy": 0, "non_negative": 0, "options": null, @@ -14872,7 +14815,7 @@ "search_index": 0, "show_dashboard": 0, "sort_options": 0, - "translatable": 1, + "translatable": 0, "unique": 0, "width": null }, @@ -14997,39 +14940,39 @@ "collapsible": 0, "collapsible_depends_on": null, "columns": 0, - "default": "No Response", + "default": "None", "depends_on": null, "description": null, "docstatus": 0, "doctype": "Custom Field", "dt": "Address", - "fetch_from": "custom_tech.status", + "fetch_from": null, "fetch_if_empty": 0, - "fieldname": "custom_confirmation_status", + "fieldname": "custom_service_type", "fieldtype": "Select", - "hidden": 0, + "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": 1, + "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "custom_service_route", + "insert_after": "custom_upcoming_services", "is_system_generated": 0, "is_virtual": 0, - "label": "Confirmation Status", + "label": "Service Type", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2024-12-09 06:25:23.408235", + "modified": "2024-12-09 06:25:23.173103", "module": null, - "name": "Address-custom_confirmation_status", + "name": "Address-custom_service_type", "no_copy": 0, "non_negative": 0, - "options": "\nNo Response\nConfirmed\nReschedule\nDeclined\nPrefers calls", + "options": "Spring Turn-On\nBackflow Testing\nSpring TO/BFT\nWinterization\nNone\nRepair\nWarranty", "permlevel": 0, "placeholder": null, "precision": "", @@ -15118,9 +15061,9 @@ "doctype": "Custom Field", "dt": "Address", "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_backflow_test_form_filed", - "fieldtype": "Check", + "fetch_if_empty": 1, + "fieldname": "custom_service_route", + "fieldtype": "Data", "hidden": 0, "hide_border": 0, "hide_days": 0, @@ -15128,19 +15071,19 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_global_search": 0, - "in_list_view": 0, + "in_list_view": 1, "in_preview": 0, - "in_standard_filter": 0, - "insert_after": "custom_confirmation_status", + "in_standard_filter": 1, + "insert_after": "custom_service_type", "is_system_generated": 0, "is_virtual": 0, - "label": "Backflow Test Form Filed", + "label": "Service Route", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2024-12-09 06:25:23.518891", + "modified": "2024-12-11 12:34:43.871663", "module": null, - "name": "Address-custom_backflow_test_form_filed", + "name": "Address-custom_service_route", "no_copy": 0, "non_negative": 0, "options": null, @@ -15157,7 +15100,7 @@ "search_index": 0, "show_dashboard": 0, "sort_options": 0, - "translatable": 0, + "translatable": 1, "unique": 0, "width": null }, @@ -15225,16 +15168,16 @@ "collapsible": 0, "collapsible_depends_on": null, "columns": 0, - "default": null, + "default": "No Response", "depends_on": null, "description": null, "docstatus": 0, "doctype": "Custom Field", "dt": "Address", - "fetch_from": null, + "fetch_from": "custom_tech.status", "fetch_if_empty": 0, - "fieldname": "custom_column_break_j79td", - "fieldtype": "Column Break", + "fieldname": "custom_confirmation_status", + "fieldtype": "Select", "hidden": 0, "hide_border": 0, "hide_days": 0, @@ -15242,22 +15185,22 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_global_search": 0, - "in_list_view": 0, + "in_list_view": 1, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "custom_backflow_test_form_filed", + "insert_after": "custom_service_route", "is_system_generated": 0, "is_virtual": 0, - "label": "", + "label": "Confirmation Status", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2025-01-23 15:20:26.363501", + "modified": "2024-12-09 06:25:23.408235", "module": null, - "name": "Address-custom_column_break_j79td", + "name": "Address-custom_confirmation_status", "no_copy": 0, "non_negative": 0, - "options": null, + "options": "\nNo Response\nConfirmed\nReschedule\nDeclined\nPrefers calls", "permlevel": 0, "placeholder": null, "precision": "", @@ -15271,7 +15214,7 @@ "search_index": 0, "show_dashboard": 0, "sort_options": 0, - "translatable": 0, + "translatable": 1, "unique": 0, "width": null }, @@ -15288,10 +15231,10 @@ "docstatus": 0, "doctype": "Custom Field", "dt": "Address", - "fetch_from": "custom_test_route.assigned_tech", + "fetch_from": null, "fetch_if_empty": 0, - "fieldname": "custom_technician_assigned", - "fieldtype": "Link", + "fieldname": "custom_backflow_test_form_filed", + "fieldtype": "Check", "hidden": 0, "hide_border": 0, "hide_days": 0, @@ -15302,19 +15245,19 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "custom_column_break_j79td", + "insert_after": "custom_confirmation_status", "is_system_generated": 0, "is_virtual": 0, - "label": "Technician Assigned", + "label": "Backflow Test Form Filed", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2024-12-09 06:25:23.727688", + "modified": "2024-12-09 06:25:23.518891", "module": null, - "name": "Address-custom_technician_assigned", + "name": "Address-custom_backflow_test_form_filed", "no_copy": 0, "non_negative": 0, - "options": "Employee", + "options": null, "permlevel": 0, "placeholder": null, "precision": "", @@ -15459,10 +15402,10 @@ "docstatus": 0, "doctype": "Custom Field", "dt": "Address", - "fetch_from": "custom_test_route.service_date", + "fetch_from": null, "fetch_if_empty": 0, - "fieldname": "custom_scheduled_date", - "fieldtype": "Date", + "fieldname": "custom_column_break_j79td", + "fieldtype": "Column Break", "hidden": 0, "hide_border": 0, "hide_days": 0, @@ -15470,19 +15413,19 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_global_search": 0, - "in_list_view": 1, + "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "custom_technician_assigned", + "insert_after": "custom_backflow_test_form_filed", "is_system_generated": 0, "is_virtual": 0, - "label": "Scheduled Date", + "label": "", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2024-12-09 06:25:23.865625", + "modified": "2025-01-23 15:20:26.363501", "module": null, - "name": "Address-custom_scheduled_date", + "name": "Address-custom_column_break_j79td", "no_copy": 0, "non_negative": 0, "options": null, @@ -15573,10 +15516,10 @@ "docstatus": 0, "doctype": "Custom Field", "dt": "Address", - "fetch_from": null, + "fetch_from": "custom_test_route.assigned_tech", "fetch_if_empty": 0, - "fieldname": "custom_column_break_sqplk", - "fieldtype": "Column Break", + "fieldname": "custom_technician_assigned", + "fieldtype": "Link", "hidden": 0, "hide_border": 0, "hide_days": 0, @@ -15587,19 +15530,19 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "custom_scheduled_date", + "insert_after": "custom_column_break_j79td", "is_system_generated": 0, "is_virtual": 0, - "label": "", + "label": "Technician Assigned", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2025-01-23 15:17:48.611375", + "modified": "2024-12-09 06:25:23.727688", "module": null, - "name": "Address-custom_column_break_sqplk", + "name": "Address-custom_technician_assigned", "no_copy": 0, "non_negative": 0, - "options": null, + "options": "Employee", "permlevel": 0, "placeholder": null, "precision": "", @@ -15687,10 +15630,10 @@ "docstatus": 0, "doctype": "Custom Field", "dt": "Address", - "fetch_from": "custom_tech.", - "fetch_if_empty": 1, - "fieldname": "custom_test_route", - "fieldtype": "Link", + "fetch_from": "custom_test_route.service_date", + "fetch_if_empty": 0, + "fieldname": "custom_scheduled_date", + "fieldtype": "Date", "hidden": 0, "hide_border": 0, "hide_days": 0, @@ -15700,20 +15643,20 @@ "in_global_search": 0, "in_list_view": 1, "in_preview": 0, - "in_standard_filter": 1, - "insert_after": "custom_column_break_sqplk", + "in_standard_filter": 0, + "insert_after": "custom_technician_assigned", "is_system_generated": 0, "is_virtual": 0, - "label": "test route", + "label": "Scheduled Date", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2025-02-13 14:00:22.859303", + "modified": "2024-12-09 06:25:23.865625", "module": null, - "name": "Address-custom_test_route", + "name": "Address-custom_scheduled_date", "no_copy": 0, "non_negative": 0, - "options": "Pre-Built Routes", + "options": null, "permlevel": 0, "placeholder": null, "precision": "", @@ -15788,6 +15731,177 @@ "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": "Address", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_column_break_sqplk", + "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_scheduled_date", + "is_system_generated": 0, + "is_virtual": 0, + "label": "", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2025-01-23 15:17:48.611375", + "module": null, + "name": "Address-custom_column_break_sqplk", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "placeholder": null, + "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": "Employee", + "fetch_from": "department.payroll_cost_center", + "fetch_if_empty": 1, + "fieldname": "payroll_cost_center", + "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": "salary_cb", + "is_system_generated": 1, + "is_virtual": 0, + "label": "Payroll Cost Center", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2025-01-13 10:13:26.512094", + "module": null, + "name": "Employee-payroll_cost_center", + "no_copy": 0, + "non_negative": 0, + "options": "Cost Center", + "permlevel": 0, + "placeholder": null, + "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": "Address", + "fetch_from": "custom_tech.", + "fetch_if_empty": 1, + "fieldname": "custom_test_route", + "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": 1, + "in_preview": 0, + "in_standard_filter": 1, + "insert_after": "custom_column_break_sqplk", + "is_system_generated": 0, + "is_virtual": 0, + "label": "test route", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2025-02-13 14:00:22.859303", + "module": null, + "name": "Address-custom_test_route", + "no_copy": 0, + "non_negative": 0, + "options": "Pre-Built Routes", + "permlevel": 0, + "placeholder": null, + "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, @@ -15857,11 +15971,11 @@ "description": null, "docstatus": 0, "doctype": "Custom Field", - "dt": "Employee", - "fetch_from": "department.payroll_cost_center", - "fetch_if_empty": 1, - "fieldname": "payroll_cost_center", - "fieldtype": "Link", + "dt": "Quotation", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "remarks", + "fieldtype": "Small Text", "hidden": 0, "hide_border": 0, "hide_days": 0, @@ -15872,19 +15986,19 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "salary_cb", + "insert_after": "grand_total", "is_system_generated": 1, "is_virtual": 0, - "label": "Payroll Cost Center", + "label": "Remarks", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2025-01-13 10:13:26.512094", + "modified": "2026-02-13 03:40:47.513866", "module": null, - "name": "Employee-payroll_cost_center", + "name": "Quotation-remarks", "no_copy": 0, "non_negative": 0, - "options": "Cost Center", + "options": null, "permlevel": 0, "placeholder": null, "precision": "", @@ -16016,63 +16130,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": "Quotation", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "remarks", - "fieldtype": "Small Text", - "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": "grand_total", - "is_system_generated": 1, - "is_virtual": 0, - "label": "Remarks", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2026-02-13 03:40:47.513866", - "module": null, - "name": "Quotation-remarks", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "placeholder": null, - "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, @@ -16244,120 +16301,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": "Address", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_column_break_djjw3", - "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_makemodel_", - "is_system_generated": 0, - "is_virtual": 0, - "label": "", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2024-12-06 04:38:24.820901", - "module": null, - "name": "Address-custom_column_break_djjw3", - "no_copy": 1, - "non_negative": 0, - "options": null, - "permlevel": 0, - "placeholder": null, - "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": "Address", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_backflow_location", - "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": 1, - "in_preview": 0, - "in_standard_filter": 0, - "insert_after": "custom_column_break_djjw3", - "is_system_generated": 0, - "is_virtual": 0, - "label": "Backflow Location:", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2024-12-06 12:33:25.345256", - "module": null, - "name": "Address-custom_backflow_location", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "placeholder": null, - "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, @@ -16472,6 +16415,120 @@ "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": "Address", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_column_break_djjw3", + "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_makemodel_", + "is_system_generated": 0, + "is_virtual": 0, + "label": "", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2024-12-06 04:38:24.820901", + "module": null, + "name": "Address-custom_column_break_djjw3", + "no_copy": 1, + "non_negative": 0, + "options": null, + "permlevel": 0, + "placeholder": null, + "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": "Address", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_backflow_location", + "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": 1, + "in_preview": 0, + "in_standard_filter": 0, + "insert_after": "custom_column_break_djjw3", + "is_system_generated": 0, + "is_virtual": 0, + "label": "Backflow Location:", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2024-12-06 12:33:25.345256", + "module": null, + "name": "Address-custom_backflow_location", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "placeholder": null, + "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, @@ -16643,120 +16700,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": "Address", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_column_break_slusf", - "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_timer_type_and_location", - "is_system_generated": 0, - "is_virtual": 0, - "label": "", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2025-01-23 15:17:48.832422", - "module": null, - "name": "Address-custom_column_break_slusf", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "placeholder": null, - "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": "Address", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_section_break_5d1cf", - "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_column_break_slusf", - "is_system_generated": 0, - "is_virtual": 0, - "label": "Installation", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2024-12-06 05:22:20.939860", - "module": null, - "name": "Address-custom_section_break_5d1cf", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "placeholder": null, - "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, @@ -16829,8 +16772,8 @@ "dt": "Address", "fetch_from": null, "fetch_if_empty": 0, - "fieldname": "custom_installed_by_sprinklers_nw", - "fieldtype": "Check", + "fieldname": "custom_column_break_slusf", + "fieldtype": "Column Break", "hidden": 0, "hide_border": 0, "hide_days": 0, @@ -16841,16 +16784,16 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "custom_section_break_5d1cf", + "insert_after": "custom_timer_type_and_location", "is_system_generated": 0, "is_virtual": 0, - "label": "Installed By Sprinklers NW", + "label": "", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2024-12-06 05:24:29.120640", + "modified": "2025-01-23 15:17:48.832422", "module": null, - "name": "Address-custom_installed_by_sprinklers_nw", + "name": "Address-custom_column_break_slusf", "no_copy": 0, "non_negative": 0, "options": null, @@ -16943,8 +16886,8 @@ "dt": "Address", "fetch_from": null, "fetch_if_empty": 0, - "fieldname": "custom_column_break_th7rq", - "fieldtype": "Column Break", + "fieldname": "custom_section_break_5d1cf", + "fieldtype": "Section Break", "hidden": 0, "hide_border": 0, "hide_days": 0, @@ -16955,16 +16898,16 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "custom_installed_by_sprinklers_nw", + "insert_after": "custom_column_break_slusf", "is_system_generated": 0, "is_virtual": 0, - "label": "", + "label": "Installation", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2024-12-06 05:22:21.118371", + "modified": "2024-12-06 05:22:20.939860", "module": null, - "name": "Address-custom_column_break_th7rq", + "name": "Address-custom_section_break_5d1cf", "no_copy": 0, "non_negative": 0, "options": null, @@ -17099,6 +17042,120 @@ "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": "Address", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_installed_by_sprinklers_nw", + "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_section_break_5d1cf", + "is_system_generated": 0, + "is_virtual": 0, + "label": "Installed By Sprinklers NW", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2024-12-06 05:24:29.120640", + "module": null, + "name": "Address-custom_installed_by_sprinklers_nw", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "placeholder": null, + "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": "Address", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_column_break_th7rq", + "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_installed_by_sprinklers_nw", + "is_system_generated": 0, + "is_virtual": 0, + "label": "", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2024-12-06 05:22:21.118371", + "module": null, + "name": "Address-custom_column_break_th7rq", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "placeholder": null, + "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, @@ -17327,120 +17384,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": "Address", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_section_break_xfdtv", - "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_column_break_4itse", - "is_system_generated": 0, - "is_virtual": 0, - "label": "Attachments", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2024-12-06 05:22:21.298446", - "module": null, - "name": "Address-custom_section_break_xfdtv", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "placeholder": null, - "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": "Address", - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "custom_backflow_test_report", - "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_section_break_xfdtv", - "is_system_generated": 0, - "is_virtual": 0, - "label": "Backflow Test Report", - "length": 0, - "link_filters": null, - "mandatory_depends_on": null, - "modified": "2024-12-06 05:22:21.381843", - "module": null, - "name": "Address-custom_backflow_test_report", - "no_copy": 0, - "non_negative": 0, - "options": null, - "permlevel": 0, - "placeholder": null, - "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, @@ -17570,8 +17513,8 @@ "dt": "Address", "fetch_from": null, "fetch_if_empty": 0, - "fieldname": "custom_column_break_oxppn", - "fieldtype": "Column Break", + "fieldname": "custom_section_break_xfdtv", + "fieldtype": "Section Break", "hidden": 0, "hide_border": 0, "hide_days": 0, @@ -17582,16 +17525,16 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "custom_backflow_test_report", + "insert_after": "custom_column_break_4itse", "is_system_generated": 0, "is_virtual": 0, - "label": "", + "label": "Attachments", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2024-12-06 05:22:21.480422", + "modified": "2024-12-06 05:22:21.298446", "module": null, - "name": "Address-custom_column_break_oxppn", + "name": "Address-custom_section_break_xfdtv", "no_copy": 0, "non_negative": 0, "options": null, @@ -17684,8 +17627,8 @@ "dt": "Address", "fetch_from": null, "fetch_if_empty": 0, - "fieldname": "custom_photo_attachment", - "fieldtype": "Attach Image", + "fieldname": "custom_backflow_test_report", + "fieldtype": "Attach", "hidden": 0, "hide_border": 0, "hide_days": 0, @@ -17696,16 +17639,16 @@ "in_list_view": 0, "in_preview": 0, "in_standard_filter": 0, - "insert_after": "custom_column_break_oxppn", + "insert_after": "custom_section_break_xfdtv", "is_system_generated": 0, "is_virtual": 0, - "label": "Photo Attachment", + "label": "Backflow Test Report", "length": 0, "link_filters": null, "mandatory_depends_on": null, - "modified": "2024-12-06 05:22:21.561887", + "modified": "2024-12-06 05:22:21.381843", "module": null, - "name": "Address-custom_photo_attachment", + "name": "Address-custom_backflow_test_report", "no_copy": 0, "non_negative": 0, "options": null, @@ -17783,6 +17726,63 @@ "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": "Address", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_column_break_oxppn", + "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_backflow_test_report", + "is_system_generated": 0, + "is_virtual": 0, + "label": "", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2024-12-06 05:22:21.480422", + "module": null, + "name": "Address-custom_column_break_oxppn", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "placeholder": null, + "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, @@ -17840,6 +17840,63 @@ "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": "Address", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_photo_attachment", + "fieldtype": "Attach Image", + "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_column_break_oxppn", + "is_system_generated": 0, + "is_virtual": 0, + "label": "Photo Attachment", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2024-12-06 05:22:21.561887", + "module": null, + "name": "Address-custom_photo_attachment", + "no_copy": 0, + "non_negative": 0, + "options": null, + "permlevel": 0, + "placeholder": null, + "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, diff --git a/custom_ui/fixtures/doctype.json b/custom_ui/fixtures/doctype.json index 9c17530..a55e6c3 100644 --- a/custom_ui/fixtures/doctype.json +++ b/custom_ui/fixtures/doctype.json @@ -33179,5 +33179,351 @@ "track_views": 0, "translated_doctype": 0, "website_search_field": null + }, + { + "_assign": null, + "_comments": null, + "_last_update": null, + "_liked_by": null, + "_user_tags": null, + "actions": [], + "allow_auto_repeat": 0, + "allow_copy": 0, + "allow_events_in_timeline": 0, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 1, + "app": null, + "autoname": null, + "beta": 0, + "color": null, + "colour": null, + "custom": 1, + "default_email_template": null, + "default_print_format": null, + "default_view": null, + "description": null, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "documentation": null, + "editable_grid": 1, + "email_append_to": 0, + "engine": "InnoDB", + "fields": [ + { + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": "Customer", + "depends_on": null, + "description": null, + "documentation_url": null, + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "customer_type", + "fieldtype": "Select", + "hidden": 0, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_preview": 0, + "in_standard_filter": 0, + "is_virtual": 0, + "label": "Customer Type", + "length": 0, + "link_filters": null, + "make_attachment_public": 0, + "mandatory_depends_on": null, + "max_height": null, + "no_copy": 0, + "non_negative": 0, + "oldfieldname": null, + "oldfieldtype": null, + "options": "Customer\nLead", + "parent": "Address Customer Link", + "parentfield": "fields", + "parenttype": "DocType", + "permlevel": 0, + "placeholder": null, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": null, + "read_only": 0, + "read_only_depends_on": null, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "show_dashboard": 0, + "show_on_timeline": 0, + "show_preview_popup": 0, + "sort_options": 0, + "translatable": 0, + "trigger": null, + "unique": 0, + "width": null + }, + { + "allow_bulk_edit": 0, + "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, + "documentation_url": null, + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "customer_name", + "fieldtype": "Dynamic Link", + "hidden": 0, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_preview": 0, + "in_standard_filter": 0, + "is_virtual": 0, + "label": "Customer Name", + "length": 0, + "link_filters": null, + "make_attachment_public": 0, + "mandatory_depends_on": null, + "max_height": null, + "no_copy": 0, + "non_negative": 0, + "oldfieldname": null, + "oldfieldtype": null, + "options": "customer_type", + "parent": "Address Customer Link", + "parentfield": "fields", + "parenttype": "DocType", + "permlevel": 0, + "placeholder": null, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": null, + "read_only": 0, + "read_only_depends_on": null, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "show_dashboard": 0, + "show_on_timeline": 0, + "show_preview_popup": 0, + "sort_options": 0, + "translatable": 0, + "trigger": null, + "unique": 0, + "width": null + }, + { + "allow_bulk_edit": 0, + "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, + "documentation_url": null, + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "relation", + "fieldtype": "Select", + "hidden": 0, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_preview": 0, + "in_standard_filter": 0, + "is_virtual": 0, + "label": "Relation", + "length": 0, + "link_filters": null, + "make_attachment_public": 0, + "mandatory_depends_on": null, + "max_height": null, + "no_copy": 0, + "non_negative": 0, + "oldfieldname": null, + "oldfieldtype": null, + "options": "Owner\nBuilder", + "parent": "Address Customer Link", + "parentfield": "fields", + "parenttype": "DocType", + "permlevel": 0, + "placeholder": null, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": null, + "read_only": 0, + "read_only_depends_on": null, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "show_dashboard": 0, + "show_on_timeline": 0, + "show_preview_popup": 0, + "sort_options": 0, + "translatable": 0, + "trigger": null, + "unique": 0, + "width": null + }, + { + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": "1", + "depends_on": null, + "description": null, + "documentation_url": null, + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "is_active", + "fieldtype": "Check", + "hidden": 0, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_preview": 0, + "in_standard_filter": 0, + "is_virtual": 0, + "label": "Active", + "length": 0, + "link_filters": null, + "make_attachment_public": 0, + "mandatory_depends_on": null, + "max_height": null, + "no_copy": 0, + "non_negative": 0, + "oldfieldname": null, + "oldfieldtype": null, + "options": null, + "parent": "Address Customer Link", + "parentfield": "fields", + "parenttype": "DocType", + "permlevel": 0, + "placeholder": null, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": null, + "read_only": 0, + "read_only_depends_on": null, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "show_dashboard": 0, + "show_on_timeline": 0, + "show_preview_popup": 0, + "sort_options": 0, + "translatable": 0, + "trigger": null, + "unique": 0, + "width": null + } + ], + "force_re_route_to_default_view": 0, + "grid_page_length": 50, + "has_web_view": 0, + "hide_toolbar": 0, + "icon": null, + "image_field": null, + "in_create": 0, + "index_web_pages_for_search": 1, + "is_calendar_and_gantt": 0, + "is_published_field": null, + "is_submittable": 0, + "is_tree": 0, + "is_virtual": 0, + "issingle": 0, + "istable": 1, + "links": [], + "make_attachments_public": 0, + "max_attachments": 0, + "menu_index": null, + "migration_hash": null, + "modified": "2026-02-17 08:14:21.379886", + "module": "Custom UI", + "name": "Address Customer Link", + "naming_rule": "", + "nsm_parent_field": null, + "parent_node": null, + "permissions": [], + "print_outline": null, + "protect_attached_files": 0, + "queue_in_background": 0, + "quick_entry": 0, + "read_only": 0, + "recipient_account_field": null, + "restrict_to_domain": null, + "route": null, + "row_format": "Dynamic", + "rows_threshold_for_grid_search": 20, + "search_fields": null, + "sender_field": null, + "sender_name_field": null, + "show_name_in_global_search": 0, + "show_preview_popup": 0, + "show_title_field_in_link": 0, + "smallicon": null, + "sort_field": "modified", + "sort_order": "DESC", + "states": [], + "subject": null, + "subject_field": null, + "tag_fields": null, + "timeline_field": null, + "title_field": null, + "track_changes": 0, + "track_seen": 0, + "track_views": 0, + "translated_doctype": 0, + "website_search_field": null } ] \ No newline at end of file diff --git a/custom_ui/fixtures/project_template.json b/custom_ui/fixtures/project_template.json index d110516..5c095ce 100644 --- a/custom_ui/fixtures/project_template.json +++ b/custom_ui/fixtures/project_template.json @@ -1,13 +1,13 @@ [ { "bid_meeting_note_form": "SNW Install Bid Meeting Notes", - "calendar_color": "#CB2929", + "calendar_color": "#c1dec5", "company": "Sprinklers Northwest", "custom__complete_method": "Task Weight", "docstatus": 0, "doctype": "Project Template", "item_groups": "SNW-I, SNW-S, SNW-LS", - "modified": "2026-02-15 01:31:39.325004", + "modified": "2026-02-16 03:59:53.719382", "name": "SNW Install", "project_type": "External", "tasks": [ diff --git a/custom_ui/fixtures/property_setter.json b/custom_ui/fixtures/property_setter.json index 2d02baa..bcf5bcf 100644 --- a/custom_ui/fixtures/property_setter.json +++ b/custom_ui/fixtures/property_setter.json @@ -95,22 +95,6 @@ "row_name": null, "value": "[\"weight\", \"description\", \"base_date\", \"offset_days\", \"skip_weekends\", \"skip_holidays\", \"logic_key\", \"offset_direction\", \"title\", \"days\", \"calculate_from\", \"trigger\", \"task_type_calculate_from\", \"work_type\", \"no_due_date\", \"triggering_doctype\", \"custom_completion_trigger\", \"custom_completion_trigger_doctype\", \"target_percent\"]" }, - { - "default_value": null, - "doc_type": "Contact", - "docstatus": 0, - "doctype": "Property Setter", - "doctype_or_field": "DocField", - "field_name": "email_id", - "is_system_generated": 0, - "modified": "2025-01-06 14:08:26.445944", - "module": null, - "name": "Contact-email_id-options", - "property": "options", - "property_type": "Text", - "row_name": null, - "value": "email_id" - }, { "default_value": null, "doc_type": "Pre-Built Routes", @@ -10415,22 +10399,6 @@ "row_name": null, "value": "None" }, - { - "default_value": null, - "doc_type": "Customer", - "docstatus": 0, - "doctype": "Property Setter", - "doctype_or_field": "DocType", - "field_name": null, - "is_system_generated": 0, - "modified": "2025-02-05 06:03:40.318065", - "module": null, - "name": "Customer-main-field_order", - "property": "field_order", - "property_type": "Data", - "row_name": null, - "value": "[\"basic_info\", \"naming_series\", \"salutation\", \"customer_name\", \"customer_type\", \"customer_group\", \"custom_appointment_date\", \"column_break0\", \"territory\", \"gender\", \"lead_name\", \"opportunity_name\", \"account_manager\", \"image\", \"defaults_tab\", \"default_currency\", \"default_bank_account\", \"column_break_14\", \"default_price_list\", \"custom_previous_year_price\", \"internal_customer_section\", \"is_internal_customer\", \"represents_company\", \"column_break_70\", \"companies\", \"more_info\", \"market_segment\", \"industry\", \"customer_pos_id\", \"website\", \"language\", \"column_break_45\", \"customer_details\", \"contact_and_address_tab\", \"address_contacts\", \"address_html\", \"column_break1\", \"contact_html\", \"custom_related_addresses\", \"custom_select_address\", \"custom_associated_contacts\", \"custom_add_contacts\", \"custom_primary_billing_and_contact_details\", \"custom_billing_address\", \"custom_column_break_q0puw\", \"custom_billing_contact\", \"primary_address_and_contact_detail\", \"column_break_26\", \"primary_address\", \"customer_primary_address\", \"column_break_nwor\", \"customer_primary_contact\", \"mobile_no\", \"email_id\", \"tax_tab\", \"taxation_section\", \"tax_id\", \"column_break_21\", \"tax_category\", \"tax_withholding_category\", \"accounting_tab\", \"credit_limit_section\", \"payment_terms\", \"credit_limits\", \"default_receivable_accounts\", \"accounts\", \"loyalty_points_tab\", \"loyalty_program\", \"column_break_54\", \"loyalty_program_tier\", \"sales_team_tab\", \"sales_team\", \"sales_team_section\", \"default_sales_partner\", \"column_break_66\", \"default_commission_rate\", \"settings_tab\", \"so_required\", \"dn_required\", \"exempt_from_sales_tax\", \"column_break_53\", \"is_frozen\", \"disabled\", \"portal_users_tab\", \"portal_users\", \"dashboard_tab\"]" - }, { "default_value": null, "doc_type": "SMS Log", @@ -12751,22 +12719,6 @@ "row_name": null, "value": "format:{full_address)-#-{MM}-{YYYY}-{####}" }, - { - "default_value": null, - "doc_type": "Address", - "docstatus": 0, - "doctype": "Property Setter", - "doctype_or_field": "DocType", - "field_name": null, - "is_system_generated": 0, - "modified": "2026-01-21 03:31:53.827100", - "module": null, - "name": "Address-main-field_order", - "property": "field_order", - "property_type": "Data", - "row_name": null, - "value": "[\"address_details\", \"custom_column_break_vqa4d\", \"custom_column_break_jw2ty\", \"custom_installationservice_address\", \"custom_billing_address\", \"is_shipping_address\", \"is_primary_address\", \"custom_is_compnay_address\", \"custom_column_break_ky1zo\", \"custom_estimate_sent_status\", \"custom_onsite_meeting_scheduled\", \"custom_job_status\", \"custom_payment_received_status\", \"custom_section_break_fvgdt\", \"address_title\", \"primary_contact\", \"address_type\", \"address_line1\", \"address_line2\", \"custom_linked_city\", \"custom_subdivision\", \"is_your_company_address\", \"custom_column_break_3mo7x\", \"state\", \"city\", \"pincode\", \"county\", \"country\", \"full_address\", \"latitude\", \"longitude\", \"onsite_meeting_scheduled\", \"estimate_sent_status\", \"job_status\", \"payment_received_status\", \"custom_column_break_rrto0\", \"custom_customer_to_bill\", \"lead_name\", \"customer_type\", \"customer_name\", \"contacts\", \"companies\", \"quotations\", \"onsite_meetings\", \"projects\", \"sales_orders\", \"tasks\", \"custom_contact_name\", \"phone\", \"email_id\", \"fax\", \"tax_category\", \"disabled\", \"custom_section_break_aecpx\", \"column_break0\", \"custom_show_irrigation_district\", \"custom_google_map\", \"custom_latitude\", \"custom_longitude\", \"custom_address_for_coordinates\", \"linked_with\", \"custom_linked_contacts\", \"links\", \"custom_column_break_9cbvb\", \"custom_linked_companies\", \"custom_irrigation\", \"custom_upcoming_services\", \"custom_service_type\", \"custom_service_route\", \"custom_confirmation_status\", \"custom_backflow_test_form_filed\", \"custom_column_break_j79td\", \"custom_technician_assigned\", \"custom_scheduled_date\", \"custom_column_break_sqplk\", \"custom_test_route\", \"custom_tech\", \"custom_column_break_wcs7g\", \"custom_section_break_zruvq\", \"custom_irrigation_district\", \"custom_serial_\", \"custom_makemodel_\", \"custom_column_break_djjw3\", \"custom_backflow_location\", \"custom_shutoff_location\", \"custom_valve_boxes\", \"custom_timer_type_and_location\", \"custom_column_break_slusf\", \"custom_section_break_5d1cf\", \"custom_installed_by_sprinklers_nw\", \"custom_column_break_th7rq\", \"custom_installed_for\", \"custom_install_month\", \"custom_install_year\", \"custom_column_break_4itse\", \"custom_section_break_xfdtv\", \"custom_backflow_test_report\", \"custom_column_break_oxppn\", \"custom_photo_attachment\"]" - }, { "default_value": null, "doc_type": "Project Template", @@ -15119,38 +15071,6 @@ "row_name": null, "value": "format:{custom_customer_name}-#-{YYYY}-{MM}-{####}" }, - { - "default_value": null, - "doc_type": "Address", - "docstatus": 0, - "doctype": "Property Setter", - "doctype_or_field": "DocType", - "field_name": null, - "is_system_generated": 0, - "modified": "2026-01-26 02:35:09.522811", - "module": null, - "name": "Address-main-links_order", - "property": "links_order", - "property_type": "Small Text", - "row_name": null, - "value": "[\"21ddd8462e\", \"c26b89d0d3\", \"ee207f2316\"]" - }, - { - "default_value": null, - "doc_type": "Address", - "docstatus": 0, - "doctype": "Property Setter", - "doctype_or_field": "DocType", - "field_name": null, - "is_system_generated": 0, - "modified": "2026-01-26 02:35:09.598292", - "module": null, - "name": "Address-main-states_order", - "property": "states_order", - "property_type": "Small Text", - "row_name": null, - "value": "[\"62m56h85vo\", \"62m5uugrvr\", \"62m57bgpkf\", \"62m5fgrjb0\"]" - }, { "default_value": null, "doc_type": "Contact", @@ -15167,22 +15087,6 @@ "row_name": null, "value": "Expression" }, - { - "default_value": null, - "doc_type": "Contact", - "docstatus": 0, - "doctype": "Property Setter", - "doctype_or_field": "DocType", - "field_name": null, - "is_system_generated": 0, - "modified": "2026-01-26 02:40:01.427255", - "module": null, - "name": "Contact-main-autoname", - "property": "autoname", - "property_type": "Data", - "row_name": null, - "value": "format:{full-name}-#-{MM}-{YYYY}-{####}" - }, { "default_value": null, "doc_type": "Contact", @@ -15262,5 +15166,117 @@ "property_type": "Data", "row_name": null, "value": "[\"custom_column_break_k7sgq\", \"custom_installation_address\", \"naming_series\", \"project_name\", \"job_address\", \"status\", \"custom_warranty_duration_days\", \"custom_warranty_expiration_date\", \"custom_warranty_information\", \"project_type\", \"percent_complete_method\", \"percent_complete\", \"column_break_5\", \"project_template\", \"expected_start_date\", \"expected_start_time\", \"expected_end_date\", \"expected_end_time\", \"requires_half_payment\", \"is_half_down_paid\", \"is_scheduled\", \"invoice_status\", \"custom_completion_date\", \"priority\", \"custom_foreman\", \"custom_hidden_fields\", \"department\", \"service_appointment\", \"tasks\", \"ready_to_schedule\", \"is_active\", \"custom_address\", \"custom_section_break_lgkpd\", \"custom_workflow_related_custom_fields__landry\", \"custom_permit_status\", \"custom_utlity_locate_status\", \"custom_crew_scheduling\", \"customer_details\", \"customer\", \"column_break_14\", \"sales_order\", \"users_section\", \"users\", \"copied_from\", \"section_break0\", \"notes\", \"section_break_18\", \"actual_start_date\", \"actual_start_time\", \"actual_time\", \"column_break_20\", \"actual_end_date\", \"actual_end_time\", \"project_details\", \"estimated_costing\", \"total_costing_amount\", \"total_expense_claim\", \"total_purchase_cost\", \"company\", \"column_break_28\", \"total_sales_amount\", \"total_billable_amount\", \"total_billed_amount\", \"total_consumed_material_cost\", \"cost_center\", \"margin\", \"gross_margin\", \"column_break_37\", \"per_gross_margin\", \"monitor_progress\", \"collect_progress\", \"holiday_list\", \"frequency\", \"from_time\", \"to_time\", \"first_email\", \"second_email\", \"daily_time_to_send\", \"day_to_send\", \"weekly_time_to_send\", \"column_break_45\", \"subject\", \"message\"]" + }, + { + "default_value": null, + "doc_type": "Customer", + "docstatus": 0, + "doctype": "Property Setter", + "doctype_or_field": "DocType", + "field_name": null, + "is_system_generated": 0, + "modified": "2026-02-17 03:51:08.179106", + "module": null, + "name": "Customer-main-naming_rule", + "property": "naming_rule", + "property_type": "Data", + "row_name": null, + "value": "Expression" + }, + { + "default_value": null, + "doc_type": "Customer", + "docstatus": 0, + "doctype": "Property Setter", + "doctype_or_field": "DocType", + "field_name": null, + "is_system_generated": 0, + "modified": "2026-02-17 03:51:08.313125", + "module": null, + "name": "Customer-main-autoname", + "property": "autoname", + "property_type": "Data", + "row_name": null, + "value": "format:{customer_name}-CUST-{MM}-{YYYY}-{#####}" + }, + { + "default_value": null, + "doc_type": "Customer", + "docstatus": 0, + "doctype": "Property Setter", + "doctype_or_field": "DocType", + "field_name": null, + "is_system_generated": 0, + "modified": "2026-02-17 03:51:08.370590", + "module": null, + "name": "Customer-main-field_order", + "property": "field_order", + "property_type": "Data", + "row_name": null, + "value": "[\"basic_info\", \"naming_series\", \"salutation\", \"customer_name\", \"from_lead\", \"properties\", \"contacts\", \"primary_contact\", \"customer_type\", \"customer_group\", \"custom_appointment_date\", \"column_break0\", \"territory\", \"gender\", \"lead_name\", \"opportunity_name\", \"prospect_name\", \"account_manager\", \"image\", \"defaults_tab\", \"default_currency\", \"default_bank_account\", \"column_break_14\", \"default_price_list\", \"custom_previous_year_price\", \"internal_customer_section\", \"is_internal_customer\", \"represents_company\", \"column_break_70\", \"companies\", \"quotations\", \"onsite_meetings\", \"projects\", \"tasks\", \"sales_orders\", \"more_info\", \"market_segment\", \"industry\", \"customer_pos_id\", \"website\", \"language\", \"column_break_45\", \"customer_details\", \"contact_and_address_tab\", \"address_contacts\", \"address_html\", \"column_break1\", \"contact_html\", \"custom_related_addresses\", \"custom_select_address\", \"custom_associated_contacts\", \"custom_add_contacts\", \"custom_primary_billing_and_contact_details\", \"custom_billing_address\", \"custom_column_break_q0puw\", \"custom_billing_contact\", \"primary_address_and_contact_detail\", \"column_break_26\", \"primary_address\", \"customer_primary_address\", \"column_break_nwor\", \"customer_primary_contact\", \"mobile_no\", \"email_id\", \"first_name\", \"last_name\", \"tax_tab\", \"taxation_section\", \"tax_id\", \"column_break_21\", \"tax_category\", \"tax_withholding_category\", \"accounting_tab\", \"credit_limit_section\", \"payment_terms\", \"credit_limits\", \"default_receivable_accounts\", \"accounts\", \"loyalty_points_tab\", \"loyalty_program\", \"column_break_54\", \"loyalty_program_tier\", \"sales_team_tab\", \"sales_team\", \"sales_team_section\", \"default_sales_partner\", \"column_break_66\", \"default_commission_rate\", \"settings_tab\", \"so_required\", \"dn_required\", \"exempt_from_sales_tax\", \"column_break_53\", \"is_frozen\", \"disabled\", \"portal_users_tab\", \"portal_users\", \"dashboard_tab\"]" + }, + { + "default_value": null, + "doc_type": "Contact", + "docstatus": 0, + "doctype": "Property Setter", + "doctype_or_field": "DocType", + "field_name": null, + "is_system_generated": 0, + "modified": "2026-02-17 03:53:14.660505", + "module": null, + "name": "Contact-main-autoname", + "property": "autoname", + "property_type": "Data", + "row_name": null, + "value": "format:{full_name}-CONT-{MM}-{YYYY}-{####}" + }, + { + "default_value": null, + "doc_type": "Address", + "docstatus": 0, + "doctype": "Property Setter", + "doctype_or_field": "DocType", + "field_name": null, + "is_system_generated": 0, + "modified": "2026-02-17 08:16:54.459462", + "module": null, + "name": "Address-main-field_order", + "property": "field_order", + "property_type": "Data", + "row_name": null, + "value": "[\"address_details\", \"custom_column_break_vqa4d\", \"custom_column_break_jw2ty\", \"custom_installationservice_address\", \"custom_billing_address\", \"is_shipping_address\", \"is_primary_address\", \"custom_is_compnay_address\", \"custom_column_break_ky1zo\", \"custom_estimate_sent_status\", \"custom_onsite_meeting_scheduled\", \"custom_job_status\", \"custom_payment_received_status\", \"custom_section_break_fvgdt\", \"address_title\", \"primary_contact\", \"address_type\", \"address_line1\", \"address_line2\", \"custom_linked_city\", \"custom_subdivision\", \"is_your_company_address\", \"custom_column_break_3mo7x\", \"state\", \"city\", \"pincode\", \"county\", \"country\", \"full_address\", \"latitude\", \"longitude\", \"onsite_meeting_scheduled\", \"estimate_sent_status\", \"job_status\", \"payment_received_status\", \"custom_column_break_rrto0\", \"custom_customer_to_bill\", \"lead_name\", \"customer_type\", \"customer_name\", \"contacts\", \"companies\", \"quotations\", \"onsite_meetings\", \"projects\", \"sales_orders\", \"tasks\", \"custom_contact_name\", \"phone\", \"email_id\", \"fax\", \"tax_category\", \"disabled\", \"is_service_address\", \"customers\", \"custom_section_break_aecpx\", \"column_break0\", \"custom_show_irrigation_district\", \"custom_google_map\", \"custom_latitude\", \"custom_longitude\", \"custom_address_for_coordinates\", \"linked_with\", \"custom_linked_contacts\", \"links\", \"custom_column_break_9cbvb\", \"custom_linked_companies\", \"custom_irrigation\", \"custom_upcoming_services\", \"custom_service_type\", \"custom_service_route\", \"custom_confirmation_status\", \"custom_backflow_test_form_filed\", \"custom_column_break_j79td\", \"custom_technician_assigned\", \"custom_scheduled_date\", \"custom_column_break_sqplk\", \"custom_test_route\", \"custom_tech\", \"custom_column_break_wcs7g\", \"custom_section_break_zruvq\", \"custom_irrigation_district\", \"custom_serial_\", \"custom_makemodel_\", \"custom_column_break_djjw3\", \"custom_backflow_location\", \"custom_shutoff_location\", \"custom_valve_boxes\", \"custom_timer_type_and_location\", \"custom_column_break_slusf\", \"custom_section_break_5d1cf\", \"custom_installed_by_sprinklers_nw\", \"custom_column_break_th7rq\", \"custom_installed_for\", \"custom_install_month\", \"custom_install_year\", \"custom_column_break_4itse\", \"custom_section_break_xfdtv\", \"custom_backflow_test_report\", \"custom_column_break_oxppn\", \"custom_photo_attachment\"]" + }, + { + "default_value": null, + "doc_type": "Address", + "docstatus": 0, + "doctype": "Property Setter", + "doctype_or_field": "DocType", + "field_name": null, + "is_system_generated": 0, + "modified": "2026-02-17 08:16:54.562064", + "module": null, + "name": "Address-main-links_order", + "property": "links_order", + "property_type": "Small Text", + "row_name": null, + "value": "[\"21ddd8462e\", \"c26b89d0d3\", \"ee207f2316\"]" + }, + { + "default_value": null, + "doc_type": "Address", + "docstatus": 0, + "doctype": "Property Setter", + "doctype_or_field": "DocType", + "field_name": null, + "is_system_generated": 0, + "modified": "2026-02-17 08:16:54.619557", + "module": null, + "name": "Address-main-states_order", + "property": "states_order", + "property_type": "Small Text", + "row_name": null, + "value": "[\"62m56h85vo\", \"62m5uugrvr\", \"62m57bgpkf\", \"62m5fgrjb0\"]" } ] \ No newline at end of file diff --git a/custom_ui/fixtures/task_type.json b/custom_ui/fixtures/task_type.json index 4160529..c5a0909 100644 --- a/custom_ui/fixtures/task_type.json +++ b/custom_ui/fixtures/task_type.json @@ -324,31 +324,6 @@ "weight": 0.0, "work_type": "Admin" }, - { - "base_date": "Start", - "calculate_from": "Service Address 2", - "custom_completion_trigger": null, - "custom_completion_trigger_doctype": null, - "custom_target_percent": 0, - "days": 0, - "description": "Permits required prior to installation start.", - "docstatus": 0, - "doctype": "Task Type", - "logic_key": null, - "modified": "2026-02-08 01:48:15.012387", - "name": "Permit", - "no_due_date": 0, - "offset_days": 7, - "offset_direction": "Before", - "skip_holidays": 1, - "skip_weekends": 0, - "task_type_calculate_from": null, - "title": "Permit", - "trigger": "Scheduled", - "triggering_doctype": "Service Address 2", - "weight": 7.0, - "work_type": "Admin" - }, { "base_date": "Completion", "calculate_from": "Service Address 2", @@ -424,6 +399,31 @@ "weight": 25.0, "work_type": "Labor" }, + { + "base_date": "Start", + "calculate_from": "Service Address 2", + "custom_completion_trigger": null, + "custom_completion_trigger_doctype": null, + "custom_target_percent": 0, + "days": 0, + "description": "Permits required prior to installation start.", + "docstatus": 0, + "doctype": "Task Type", + "logic_key": null, + "modified": "2026-02-08 01:48:15.012387", + "name": "Permit", + "no_due_date": 0, + "offset_days": 7, + "offset_direction": "Before", + "skip_holidays": 1, + "skip_weekends": 0, + "task_type_calculate_from": null, + "title": "Permit", + "trigger": "Scheduled", + "triggering_doctype": "Service Address 2", + "weight": 7.0, + "work_type": "Admin" + }, { "base_date": "Project Start", "calculate_from": "Service Appointment", diff --git a/custom_ui/services/db_restore_service.py b/custom_ui/services/db_restore_service.py new file mode 100644 index 0000000..a6c37c9 --- /dev/null +++ b/custom_ui/services/db_restore_service.py @@ -0,0 +1,20 @@ +import frappe + +class DBRestoreService: + @staticmethod + def massage_customer_address_contact_links(): + """Fixes the links between Customer, Address, and Contacts from legacy data that may have been imported without proper linking.""" + # use emojis in print statments to make it more fun and visually distinct in the logs + print("DEBUG: 🛠️ Starting to massage customer, address, and contact links") + all_addresses = frappe.get_all("Address", pluck="name") + print(f"DEBUG: Found {len(all_addresses)} addresses to process") + all_customers = frappe.get_all("Customer", pluck="name") + print(f"DEBUG: Found {len(all_customers)} customers to process") + all_leads = frappe.get_all("Lead", pluck="name") + print(f"DEBUG: Found {len(all_leads)} leads to process") + all_contacts = frappe.get_all("Contact", pluck="name") + print(f"DEBUG: Found {len(all_contacts)} contacts to process") + + # query all customer doctypes that don't have an empty array for custom_select_address. This field is a child table so get_all cannot be used. We need to use a custom sql query + # the child table is a doctype called "Custom " + # print(f"DEBUG: Found {len(customers_with_addresses)} customers with addresses to process") \ No newline at end of file diff --git a/custom_ui/services/service_appointment_service.py b/custom_ui/services/service_appointment_service.py index 2ba915a..da8982c 100644 --- a/custom_ui/services/service_appointment_service.py +++ b/custom_ui/services/service_appointment_service.py @@ -24,6 +24,7 @@ class ServiceAppointmentService: service_appointment["service_address"] = AddressService.get_or_throw(service_appointment["service_address"]).as_dict() service_appointment["customer"] = ClientService.get_client_or_throw(service_appointment["customer"]).as_dict() service_appointment["project"] = DbService.get_or_throw("Project", service_appointment["project"]).as_dict() + service_appointment["color"] = frappe.get_value("Project Template", service_appointment["project_template"], "calendar_color") return service_appointment @@ -43,20 +44,21 @@ class ServiceAppointmentService: if end_time: service_appointment.expected_end_time = end_time if skip_days: - current_skip_days + print(f"DEBUG: Updating skip days for Service Appointment {service_appointment_name}. Current skip days: {[skip_day.date for skip_day in service_appointment.skip_days]}, New skip days: {skip_days}") # Compare skip_days with the current skip_days and remove/add as needed - current_skip_days = set([skip_day.date for skip_day in service_appointment.skip_days]) - new_skip_days = set(skip_days) + current_skip_days = [skip_day.date for skip_day in service_appointment.skip_days] # Remove skip days that are no longer needed - for skip_day in current_skip_days - new_skip_days: - skip_day_doc = service_appointment.skip_days.find(lambda d: d.date == skip_day) - if skip_day_doc: - service_appointment.skip_days.remove(skip_day_doc.name) - print(f"DEBUG: Removed skip day {skip_day} from Service Appointment {service_appointment_name}") + for skip_day in current_skip_days: + if skip_day not in skip_days: + skip_day_doc = service_appointment.skip_days.find(lambda d: d.date == skip_day) + if skip_day_doc: + service_appointment.skip_days.remove(skip_day_doc.name) + print(f"DEBUG: Removed skip day {skip_day} from Service Appointment {service_appointment_name}") # Add new skip days - for skip_day in new_skip_days - current_skip_days: - service_appointment.append("skip_days", {"date": skip_day}) - print(f"DEBUG: Added new skip day {skip_day} for Service Appointment {service_appointment_name}") + for skip_day in skip_days: + if skip_day not in current_skip_days: + service_appointment.append("skip_days", {"date": skip_day["date"]}) + print(f"DEBUG: Added new skip day {skip_day} for Service Appointment {service_appointment_name}") service_appointment.save() print(f"DEBUG: Updated scheduled dates for Service Appointment {service_appointment_name}") return service_appointment diff --git a/frontend/src/api.js b/frontend/src/api.js index c8f41b2..82c2d06 100644 --- a/frontend/src/api.js +++ b/frontend/src/api.js @@ -68,6 +68,7 @@ const FRAPPE_GET_CLIENT_TABLE_DATA_V2_METHOD = "custom_ui.api.db.clients.get_cli const FRAPPE_GET_CLIENT_METHOD = "custom_ui.api.db.clients.get_client_v2"; const FRAPPE_GET_CLIENT_NAMES_METHOD = "custom_ui.api.db.clients.get_client_names"; const FRAPPE_CHECK_CLIENT_EXISTS_METHOD = "custom_ui.api.db.clients.check_client_exists"; +const FRAPPE_ADD_ADDRESSES_CONTACTS_METHOD = "custom_ui.api.db.clients.add_addresses_contacts"; // Employee methods const FRAPPE_GET_EMPLOYEES_METHOD = "custom_ui.api.db.employees.get_employees"; const FRAPPE_GET_EMPLOYEES_ORGANIZED_METHOD = "custom_ui.api.db.employees.get_employees_organized"; @@ -81,7 +82,7 @@ const FRAPPE_UPDATE_SERVICE_APPOINTMENT_SCHEDULED_DATES_METHOD = "custom_ui.api. const FRAPPE_UPDATE_SERVICE_APPOINTMENT_STATUS_METHOD = "custom_ui.api.db.service_appointments.update_service_appointment_status"; class Api { // ============================================================================ - // CORE REQUEST METHOPD + // CORE REQUEST METHOD // ============================================================================ static async request(frappeMethod, args = {}) { @@ -183,6 +184,10 @@ class Api { return result; } + static async addAddressesAndContacts(clientName, companyName, addresses = [], contacts = []) { + return await this.request(FRAPPE_ADD_ADDRESSES_CONTACTS_METHOD, { clientName, companyName, addresses, contacts }); + } + // ============================================================================ // ON-SITE MEETING METHODS // ============================================================================ diff --git a/frontend/src/components/calendar/jobs/SNWProjectCalendar.vue b/frontend/src/components/calendar/jobs/SNWProjectCalendar.vue index ec5dbbb..f3a9af5 100644 --- a/frontend/src/components/calendar/jobs/SNWProjectCalendar.vue +++ b/frontend/src/components/calendar/jobs/SNWProjectCalendar.vue @@ -57,7 +57,9 @@ Select Project Templates - + if (isHoliday(date)) { + classes.push('holiday'); + } @@ -203,7 +205,7 @@
-
+
Crew
-
+
{{ foreman.employeeName }}
@@ -230,67 +232,65 @@ v-for="day in weekDays" :key="`${foreman.name}-${day.date}`" class="day-cell" - :class="{ - 'today': isToday(day.date), - 'holiday': isHoliday(day.date), - 'sunday': isSunday(day.date), - 'drag-over': isDragOver && dragOverCell?.foremanId === foreman.name && dragOverCell?.date === day.date, - 'has-skipped-jobs': getSkippedJobsForCell(foreman.name, day.date).length > 0, - }" + :class="getCellStyling(foreman.name, day.date).classes" + :style="Object.assign({}, getCellStyling(foreman.name, day.date).data.backgroundColor ? { background: getCellStyling(foreman.name, day.date).data.backgroundColor } : {}, getCellStyling(foreman.name, day.date).data.rightBorder ? { borderRight: '2px solid #333' } : {})" + :draggable="getCellStyling(foreman.name, day.date).data.jobs.length > 0" + @dragstart="handleCellDragStart($event, foreman.name, day.date)" @dragover="handleDragOver($event, foreman.name, day.date)" @dragleave="handleDragLeave" @drop="handleDrop($event, foreman.name, day.date)" - @click="skipMode ? handleSkipDayClick(foreman.name, day.date) : null" + @click="skipMode ? handleSkipDayClick(foreman.name, day.date) : handleCellClick(foreman.name, day.date, $event)" + @mousedown="(event) => handleCellMouseDown(event, foreman.name, day.date)" > - -
- mdi-arrow-left -
-
{{ job.projectTemplate }}
-
{{ job.serviceAddress.fullAddress }}
-
- mdi-arrow-right -
-
- - -
- Skipped - -
+ + - - + +
@@ -716,24 +716,120 @@ const formatDuration = (minutes) => { return `${hours}h ${mins}m`; }; -// Get jobs for a specific foreman and date -const getJobsForCell = (foremanId, date) => { - // Don't render jobs on Sunday or holidays - if (isSunday(date) || isHoliday(date)) return []; +// Get cell styling classes and data for a specific foreman and date +const getCellStyling = (foreman, date) => { + const classes = []; + const data = { jobs: [], isSkipped: false, skipJob: null }; - return scheduledServices.value.filter((job) => { - if (job.foreman !== foremanId) return false; - - const jobStart = job.expectedStartDate; - const jobEnd = job.expectedEndDate || job.expectedStartDate; - - // Check if this date falls within the job's date range - // AND that it's a valid segment start date - // AND not in skipDays - const segments = getJobSegments(job); - const isSkipped = job.skipDays && job.skipDays.some(skip => skip.date === date); - return segments.some(seg => seg.start === date) && !isSkipped; + // Check if holiday + if (isHoliday(date)) { + classes.push('holiday'); + } + + // Check if Sunday + if (isSunday(date)) { + classes.push('sunday'); + } + + // Check if today + if (isToday(date)) { + classes.push('today'); + } + + // Get jobs for this cell + const jobs = scheduledServices.value.filter(job => { + if (job.foreman !== foreman) return false; + const start = job.expectedStartDate; + const end = job.expectedEndDate || start; + return date >= start && date <= end; }); + data.jobs = jobs; + + // Check for skipped days + const skippedJobs = jobs.filter(job => { + return job.skipDays && job.skipDays.some(skip => skip.date === date); + }); + if (skippedJobs.length > 0) { + data.isSkipped = true; + data.skipJob = skippedJobs[0]; // Take first one + classes.push('skipped'); + // Add background color for skipped cell + data.backgroundColor = (skippedJobs[0].color || '#2196f3') + '40'; + return { classes, data }; + } + + // If no jobs, return basic styling + if (jobs.length === 0) { + classes.push('empty'); + return { classes, data }; + } + + // Cell is part of a scheduled job - determine styling + const jobForStyling = jobs[0]; + const startDate = jobForStyling.expectedStartDate; + const endDate = jobForStyling.expectedEndDate || startDate; + const isStart = date === startDate; + const isEnd = date === endDate; + + // Add priority class + classes.push(getPriorityClass(jobForStyling.priority)); + + // Add job color for all scheduled days + data.backgroundColor = jobForStyling.color || '#2196f3'; + + // Border styling for start/end + if (isStart) { + classes.push('job-start'); + data.showStartIcon = true; + data.showAddress = true; + } else { + classes.push('job-continuation'); + + // Check if previous day was skipped + const prevDate = addDays(date, -1); + const prevSkipped = jobForStyling.skipDays && jobForStyling.skipDays.some(skip => skip.date === prevDate); + if (prevSkipped) { + classes.push('after-skip'); + } + + // Check if previous dates are on previous week + const weekStart = parseLocalDate(weekStartDate.value); + const cellDate = parseLocalDate(date); + if (cellDate.getDay() === 1 && cellDate.getTime() > weekStart.getTime()) { // Monday and not first Monday + classes.push('after-week-break'); + } + } + + // Right side styling + if (isEnd) { + classes.push('job-end'); + data.showEndIcon = true; + // Only add right border for end cell + data.rightBorder = true; + } else { + data.rightBorder = false; + } + + // Add job-end class on every update + classes.push('job-end'); + + // Check if next day is skipped + const nextDate = addDays(date, 1); + const nextSkipped = jobForStyling.skipDays && jobForStyling.skipDays.some(skip => skip.date === nextDate); + if (nextSkipped) { + classes.push('before-skip'); + } + + // Check if job continues to next week + const weekEnd = parseLocalDate(addDays(weekStartDate.value, 6)); + const endDateObj = parseLocalDate(endDate); + if (endDateObj > weekEnd) { + classes.push('continues-next-week'); + } + + // Only show resize bar on end cell + data.showResizeBar = isEnd; + return { classes, data }; }; // Get skipped jobs for a specific foreman and date @@ -788,15 +884,17 @@ const getJobStyle = (job, currentDate) => { ? 'calc(100% - 8px)' // Single day: full width minus padding : `calc(${visualDays * 100}% + ${(visualDays - 1)}px)`; // Multi-day: span cells accounting for borders - // Get color from project template - let backgroundColor = '#2196f3'; // Default color - if (job.projectTemplate) { - const template = projectTemplates.value.find(t => t.name === job.projectTemplate); - if (template && template.calendarColor) { - backgroundColor = template.calendarColor; - } + // Use job.color for cell background if available + let backgroundColor = job.color || '#2196f3'; + // Use higher opacity for skip days + if (job.skipDays && job.skipDays.some(skip => skip.date === currentDate)) { + backgroundColor = backgroundColor.replace(/\)$/,", 0.25)") || backgroundColor + '40'; } - const darkerColor = darkenColor(backgroundColor, 20); + return { + width: widthCalc, + zIndex: 10, + background: backgroundColor + }; return { width: widthCalc, @@ -909,14 +1007,40 @@ const onDateSelected = (date) => { } }; -const showEventDetails = (event) => { - // Don't open modal if we just finished resizing - if (justFinishedResize.value) { - justFinishedResize.value = false; - return; +const handleCellDragStart = (event, foremanId, date) => { + const cellData = getCellStyling(foremanId, date); + if (cellData.data.jobs.length > 0 && !cellData.data.isSkipped) { + const job = cellData.data.jobs[0]; + if (job.status === 'Scheduled') { + handleDragStart(job, event); + } else { + // Prevent dragging if not scheduled + event.preventDefault(); + } + } else { + // Prevent dragging skipped cells or empty cells + event.preventDefault(); + } +}; + +const handleCellMouseDown = (event, foremanId, date) => { + const cellData = getCellStyling(foremanId, date); + if (cellData.data.jobs.length > 0 && !cellData.data.isSkipped) { + const job = cellData.data.jobs[0]; + if (job.status === 'Scheduled' || job.status === 'Started') { + // Check if click is on resize handle area (right edge) + const target = event.target; + const rect = target.closest('.day-cell').getBoundingClientRect(); + const clickX = event.clientX; + const isNearRightEdge = clickX > rect.right - 20; // 20px from right edge + + if (isNearRightEdge && cellData.classes.includes('job-end')) { + event.preventDefault(); // Only prevent default for resize + startResize(event, job, date); + } + // If not near right edge, allow normal drag behavior + } } - selectedEvent.value = event.event; - eventDialog.value = true; }; const scheduleService = (service) => { @@ -933,20 +1057,6 @@ const handleDragStart = (service, event) => { event.dataTransfer.effectAllowed = "move"; event.dataTransfer.setData("text/plain", service.name); - // Get the dimensions of the dragged element - const dragElement = event.target; - const rect = dragElement.getBoundingClientRect(); - - // Set the drag image offset to center the element horizontally and position cursor at top - const offsetX = rect.width / 2; - const offsetY = 10; - - try { - event.dataTransfer.setDragImage(dragElement, offsetX, offsetY); - } catch (e) { - console.log("Could not set custom drag image"); - } - // Add visual feedback event.target.style.opacity = '0.5'; console.log("Drag started for service:", service.projectTemplate); @@ -1315,46 +1425,12 @@ const handleUnscheduledDrop = async (event) => { // Allow moving scheduled jobs between days/crews if status is 'Scheduled' const handleScheduledDragOver = (job, event, foremanId, date) => { - if (!draggedService.value) return; - // Only allow if dragging a scheduled job and target is a valid cell - if (draggedService.value.status === 'Scheduled' && job.status === 'Scheduled') { - event.dataTransfer.dropEffect = 'move'; - } + // This is now handled by the main handleDragOver function }; -const handleScheduledDrop = async (job, event, foremanId, date) => { - if (!draggedService.value) return; - // Only allow if dragging a scheduled job and target is a valid cell - if (draggedService.value.status !== 'Scheduled') return; - // Prevent dropping on same cell - if (draggedService.value.name === job.name && draggedService.value.foreman === foremanId && draggedService.value.expectedStartDate === date) return; - - // Prevent dropping on Sunday or holidays - if (isSunday(date) || isHoliday(date)) return; - - // Update job's foreman and date - const serviceIndex = scheduledServices.value.findIndex(s => s.name === draggedService.value.name); - if (serviceIndex !== -1) { - try { - await Api.updateServiceAppointmentScheduledDates( - draggedService.value.name, - date, - draggedService.value.expectedEndDate, - foremanId - ); - scheduledServices.value[serviceIndex] = { - ...scheduledServices.value[serviceIndex], - expectedStartDate: date, - foreman: foremanId - }; - notifications.addSuccess('Job moved successfully!'); - } catch (error) { - notifications.addError('Failed to move job'); - } - } - isDragOver.value = false; - dragOverCell.value = null; - draggedService.value = null; +// Allow moving scheduled jobs between days/crews if status is 'Scheduled' +const handleScheduledDrop = async (event, foremanId, date) => { + // This is now handled by the main handleDrop function }; // Resize functionality @@ -1366,28 +1442,28 @@ const startResize = (event, job, date) => { const target = event.target; const rect = target.getBoundingClientRect(); const clickX = event.clientX; - // Check if click is on the resize handle or near right edge const isNearRightEdge = clickX > rect.right - 10; const isResizeHandle = target.classList.contains('resize-handle'); - + // Allow repeated extension: remove restriction on job.expectedEndDate + // (no early return) if (!isNearRightEdge && !isResizeHandle) return; - + event.stopPropagation(); event.preventDefault(); - + // Set flag immediately to prevent modal from opening justFinishedResize.value = true; - + resizingJob.value = job; resizeStartX.value = event.clientX; resizeStartDate.value = date; originalEndDate.value = job.expectedEndDate || job.expectedStartDate; - + // Add global mouse move and mouse up listeners document.addEventListener('mousemove', handleResize); document.addEventListener('mouseup', stopResize); - + // Add visual feedback document.body.style.cursor = 'ew-resize'; }; @@ -1727,7 +1803,7 @@ onMounted(async () => { } .weekly-calendar { - min-width: 1000px; + min-width: 1130px; background: white; border-radius: 8px; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); @@ -1812,15 +1888,20 @@ onMounted(async () => { } .day-cell { - border-right: 1px solid var(--surface-border); + border: 1px solid #e0e0e0; position: relative; cursor: pointer; transition: background-color 0.2s; min-height: 80px; max-height: 80px; padding: 4px; - overflow: visible; /* Allow multi-day jobs to overflow */ - width: 100%; /* Ensure cell doesn't expand */ + overflow: hidden; /* Prevent content from expanding cell */ + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + flex-shrink: 0; /* Prevent shrinking */ + box-sizing: border-box; /* Include padding in width calculation */ } .day-cell:hover { @@ -1837,67 +1918,148 @@ onMounted(async () => { box-sizing: border-box; } -.calendar-job { - position: absolute; - left: 4px; - top: 4px; - background: linear-gradient(135deg, #2196f3, #1976d2); - color: white; - border-radius: 4px; - padding: 8px 10px; - font-size: 0.85em; - cursor: pointer; - overflow: hidden; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); - transition: all 0.2s; - display: flex; - align-items: center; - min-height: 68px; - height: calc(100% - 8px); - max-width: none; /* Allow spanning */ -} - -.calendar-job:hover { - transform: scale(1.02); - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3); -} - -.calendar-job:hover .resize-handle { - opacity: 1; -} - -.calendar-job[draggable="true"] { +.day-cell[draggable="true"] { cursor: grab; } -.calendar-job[draggable="true"]:active { +.day-cell[draggable="true"]:active { cursor: grabbing; } +/* Job styling based on priority */ +.day-cell.priority-urgent { + background: linear-gradient(135deg, #f44336, #d32f2f); + color: white; +} + +.day-cell.priority-high { + background: linear-gradient(135deg, #ff9800, #f57c00); + color: white; +} + +.day-cell.priority-medium { + background: linear-gradient(135deg, #2196f3, #1976d2); + color: white; +} + +.day-cell.priority-low { + background: linear-gradient(135deg, #4caf50, #388e3c); + color: white; +} + +/* Job border styling - only for cells that contain jobs */ +.day-cell.priority-urgent:not(.empty):not(.skipped), +.day-cell.priority-high:not(.empty):not(.skipped), +.day-cell.priority-medium:not(.empty):not(.skipped), +.day-cell.priority-low:not(.empty):not(.skipped) { + border-top: 3px solid currentColor; + border-bottom: 3px solid currentColor; +} + +/* Job start/end border styling */ +.day-cell.job-start:not(.skipped) { + border-left: 4px solid currentColor; +} + +.day-cell.job-end:not(.skipped) { + border-right: 4px solid currentColor; +} + +/* Skip day styling */ +.day-cell.skipped { + border: 2px dotted #ff0000; + background: rgba(255, 0, 0, 0.1); + color: #ff0000; + font-weight: 500; + justify-content: center; + align-items: center; +} + +/* Special week break borders */ +.day-cell.after-week-break:not(.skipped) { + border-left: 4px double currentColor; +} + +.day-cell.continues-next-week:not(.skipped) { + border-right: 4px double currentColor; +} + +/* Skip day adjacent styling */ +.day-cell.after-skip:not(.skipped) { + border-left: 2px dashed currentColor; +} + +.day-cell.before-skip:not(.skipped) { + border-right: 2px dashed currentColor; +} + +/* Holiday and Sunday styling */ +.day-cell.holiday { + background: repeating-linear-gradient( + 45deg, + rgba(255, 193, 7, 0.15), + rgba(255, 193, 7, 0.15) 10px, + rgba(255, 193, 7, 0.05) 10px, + rgba(255, 193, 7, 0.05) 20px + ); + border-left: 3px solid #ffc107; + border-right: 3px solid #ffc107; +} + +.day-cell.sunday { + background-color: rgba(200, 200, 200, 0.1); /* light gray for Sunday */ +} + +/* Skipped styling */ +.day-cell.skipped { + background: rgba(255, 0, 0, 0.1); + border-top: 2px dotted #ff0000; + border-bottom: 2px dotted #ff0000; + color: #ff0000; + font-weight: 500; + justify-content: center; + align-items: center; +} + +/* Empty cell styling */ +.day-cell.empty { + background-color: transparent; +} + + + .job-content { - flex: 1; - overflow: hidden; display: flex; flex-direction: column; justify-content: center; + align-items: center; + text-align: center; + width: 100%; + padding: 2px; + box-sizing: border-box; + overflow: hidden; } .job-title { font-weight: 600; + font-size: 0.85em; + margin-bottom: 2px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; - margin-bottom: 4px; - font-size: 0.95em; + max-width: 100%; + box-sizing: border-box; } .job-address { - font-size: 0.8em; + font-size: 0.75em; opacity: 0.9; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; - line-height: 1.3; + max-width: 100%; + line-height: 1.2; + box-sizing: border-box; } .resize-handle { @@ -1921,17 +2083,15 @@ onMounted(async () => { .spans-arrow-left { position: absolute; - left: 5px; - top: 50%; - transform: translateY(-50%); + left: 2px; + top: 2px; color: rgba(255, 255, 255, 0.8); } .spans-arrow-right { position: absolute; - right: 25px; /* Position before resize handle */ - top: 50%; - transform: translateY(-50%); + right: 2px; + top: 2px; color: rgba(255, 255, 255, 0.8); } diff --git a/frontend/src/components/clientSubPages/AddressInformationForm.vue b/frontend/src/components/clientSubPages/AddressInformationForm.vue index ac3f229..86f4328 100644 --- a/frontend/src/components/clientSubPages/AddressInformationForm.vue +++ b/frontend/src/components/clientSubPages/AddressInformationForm.vue @@ -174,6 +174,10 @@ const props = defineProps({ type: Array, default: () => [], }, + contactOptions: { + type: Array, + default: () => [], + }, }); const emit = defineEmits(["update:formData"]); @@ -205,7 +209,7 @@ const localFormData = computed({ const contactOptions = computed(() => { if (!localFormData.value.contacts || localFormData.value.contacts.length === 0) { - return []; + return props.contactOptions; } return localFormData.value.contacts.map((contact, index) => ({ label: `${contact.firstName || ""} ${contact.lastName || ""}`.trim() || `Contact ${index + 1}`, @@ -231,28 +235,6 @@ onMounted(() => { ]; } }); - -const addAddress = () => { - localFormData.value.addresses.push({ - addressLine1: "", - addressLine2: "", - isBillingAddress: false, - isServiceAddress: true, - pincode: "", - city: "", - state: "", - contacts: [], - primaryContact: null, - zipcodeLookupDisabled: true, - }); -}; - -const removeAddress = (index) => { - if (localFormData.value.addresses.length > 1) { - localFormData.value.addresses.splice(index, 1); - } -}; - const formatAddressLine = (index, field, event) => { const value = event.target.value; if (!value) return; diff --git a/frontend/src/components/clientSubPages/ContactInformationForm.vue b/frontend/src/components/clientSubPages/ContactInformationForm.vue index 831b83c..fbeec2b 100644 --- a/frontend/src/components/clientSubPages/ContactInformationForm.vue +++ b/frontend/src/components/clientSubPages/ContactInformationForm.vue @@ -149,24 +149,24 @@ const props = defineProps({ const emit = defineEmits(["update:formData"]); const localFormData = computed({ - get: () => { - if (!props.formData.contacts || props.formData.contacts.length === 0) { - props.formData.contacts = [ - { - firstName: "", - lastName: "", - phoneNumber: "", - email: "", - contactRole: "", - isPrimary: true, - }, - ]; - } - return props.formData; - }, + get: () => props.formData, set: (value) => emit("update:formData", value), }); +// Ensure at least one contact always exists +if (!localFormData.value.contacts || localFormData.value.contacts.length === 0) { + localFormData.value.contacts = [ + { + firstName: "", + lastName: "", + phoneNumber: "", + email: "", + contactRole: "", + isPrimary: true, + }, + ]; +} + const roleOptions = ref([ { label: "Owner", value: "Owner" }, { label: "Property Manager", value: "Property Manager" }, diff --git a/frontend/src/components/clientView/AddContactAddressModal.vue b/frontend/src/components/clientView/AddContactAddressModal.vue new file mode 100644 index 0000000..10b32ea --- /dev/null +++ b/frontend/src/components/clientView/AddContactAddressModal.vue @@ -0,0 +1,99 @@ + + + + + diff --git a/frontend/src/components/clientView/GeneralClientInfo.vue b/frontend/src/components/clientView/GeneralClientInfo.vue index 2b27689..e5efd04 100644 --- a/frontend/src/components/clientView/GeneralClientInfo.vue +++ b/frontend/src/components/clientView/GeneralClientInfo.vue @@ -1,116 +1,123 @@ +