From 6ce57462a2d6c5b95fdbaba306551d5cd60a3d5d Mon Sep 17 00:00:00 2001 From: Scott Korvek Date: Fri, 14 Nov 2025 15:13:36 +0000 Subject: [PATCH] initial integrations unifi booked --- member_management/__init__.py | 2 +- .../doctype/booked_group/__init__.py | 0 .../doctype/booked_group/booked_group.js | 8 ++ .../doctype/booked_group/booked_group.json | 60 +++++++++ .../doctype/booked_group/booked_group.py | 9 ++ .../doctype/booked_group/test_booked_group.py | 9 ++ .../doctype/booked_groupid/__init__.py | 0 .../booked_groupid/booked_groupid.json | 34 +++++ .../doctype/booked_groupid/booked_groupid.py | 9 ++ .../doctype/booked_member/__init__.py | 0 .../doctype/booked_member/booked_member.js | 8 ++ .../doctype/booked_member/booked_member.json | 127 ++++++++++++++++++ .../doctype/booked_member/booked_member.py | 9 ++ .../booked_member/test_booked_member.py | 9 ++ .../member_profile/member_profile.json | 63 ++++++++- .../doctype/offboarding/__init__.py | 0 .../doctype/offboarding/offboarding.js | 8 ++ .../doctype/offboarding/offboarding.json | 48 +++++++ .../doctype/offboarding/offboarding.py | 9 ++ .../doctype/offboarding/test_offboarding.py | 9 ++ .../doctype/onboarding/__init__.py | 0 .../doctype/onboarding/onboarding.js | 8 ++ .../doctype/onboarding/onboarding.json | 120 +++++++++++++++++ .../doctype/onboarding/onboarding.py | 9 ++ .../doctype/onboarding/test_onboarding.py | 9 ++ .../doctype/unifi_access_profile/__init__.py | 0 .../test_unifi_access_profile.py | 9 ++ .../unifi_access_profile.js | 8 ++ .../unifi_access_profile.json | 116 ++++++++++++++++ .../unifi_access_profile.py | 9 ++ 30 files changed, 705 insertions(+), 4 deletions(-) create mode 100644 member_management/member_management/doctype/booked_group/__init__.py create mode 100644 member_management/member_management/doctype/booked_group/booked_group.js create mode 100644 member_management/member_management/doctype/booked_group/booked_group.json create mode 100644 member_management/member_management/doctype/booked_group/booked_group.py create mode 100644 member_management/member_management/doctype/booked_group/test_booked_group.py create mode 100644 member_management/member_management/doctype/booked_groupid/__init__.py create mode 100644 member_management/member_management/doctype/booked_groupid/booked_groupid.json create mode 100644 member_management/member_management/doctype/booked_groupid/booked_groupid.py create mode 100644 member_management/member_management/doctype/booked_member/__init__.py create mode 100644 member_management/member_management/doctype/booked_member/booked_member.js create mode 100644 member_management/member_management/doctype/booked_member/booked_member.json create mode 100644 member_management/member_management/doctype/booked_member/booked_member.py create mode 100644 member_management/member_management/doctype/booked_member/test_booked_member.py create mode 100644 member_management/member_management/doctype/offboarding/__init__.py create mode 100644 member_management/member_management/doctype/offboarding/offboarding.js create mode 100644 member_management/member_management/doctype/offboarding/offboarding.json create mode 100644 member_management/member_management/doctype/offboarding/offboarding.py create mode 100644 member_management/member_management/doctype/offboarding/test_offboarding.py create mode 100644 member_management/member_management/doctype/onboarding/__init__.py create mode 100644 member_management/member_management/doctype/onboarding/onboarding.js create mode 100644 member_management/member_management/doctype/onboarding/onboarding.json create mode 100644 member_management/member_management/doctype/onboarding/onboarding.py create mode 100644 member_management/member_management/doctype/onboarding/test_onboarding.py create mode 100644 member_management/member_management/doctype/unifi_access_profile/__init__.py create mode 100644 member_management/member_management/doctype/unifi_access_profile/test_unifi_access_profile.py create mode 100644 member_management/member_management/doctype/unifi_access_profile/unifi_access_profile.js create mode 100644 member_management/member_management/doctype/unifi_access_profile/unifi_access_profile.json create mode 100644 member_management/member_management/doctype/unifi_access_profile/unifi_access_profile.py diff --git a/member_management/__init__.py b/member_management/__init__.py index f102a9c..b1a19e3 100644 --- a/member_management/__init__.py +++ b/member_management/__init__.py @@ -1 +1 @@ -__version__ = "0.0.1" +__version__ = "0.0.5" diff --git a/member_management/member_management/doctype/booked_group/__init__.py b/member_management/member_management/doctype/booked_group/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/member_management/member_management/doctype/booked_group/booked_group.js b/member_management/member_management/doctype/booked_group/booked_group.js new file mode 100644 index 0000000..76af19b --- /dev/null +++ b/member_management/member_management/doctype/booked_group/booked_group.js @@ -0,0 +1,8 @@ +// Copyright (c) 2025, Haddon Kitchen Incubator LLC and contributors +// For license information, please see license.txt + +// frappe.ui.form.on("Booked Group", { +// refresh(frm) { + +// }, +// }); diff --git a/member_management/member_management/doctype/booked_group/booked_group.json b/member_management/member_management/doctype/booked_group/booked_group.json new file mode 100644 index 0000000..c349de0 --- /dev/null +++ b/member_management/member_management/doctype/booked_group/booked_group.json @@ -0,0 +1,60 @@ +{ + "actions": [], + "allow_rename": 1, + "autoname": "field:group_label", + "creation": "2025-11-13 23:06:55.027840", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "groupid", + "group_label" + ], + "fields": [ + { + "fieldname": "group_label", + "fieldtype": "Data", + "in_list_view": 1, + "label": "Group Label", + "reqd": 1, + "unique": 1 + }, + { + "fieldname": "groupid", + "fieldtype": "Int", + "in_list_view": 1, + "label": "Group ID", + "non_negative": 1, + "reqd": 1, + "unique": 1 + } + ], + "grid_page_length": 50, + "index_web_pages_for_search": 1, + "links": [], + "modified": "2025-11-13 23:28:08.843972", + "modified_by": "Administrator", + "module": "Member Management", + "name": "Booked Group", + "naming_rule": "By fieldname", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "row_format": "Dynamic", + "rows_threshold_for_grid_search": 20, + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/member_management/member_management/doctype/booked_group/booked_group.py b/member_management/member_management/doctype/booked_group/booked_group.py new file mode 100644 index 0000000..c28eae0 --- /dev/null +++ b/member_management/member_management/doctype/booked_group/booked_group.py @@ -0,0 +1,9 @@ +# Copyright (c) 2025, Haddon Kitchen Incubator LLC and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class BookedGroup(Document): + pass diff --git a/member_management/member_management/doctype/booked_group/test_booked_group.py b/member_management/member_management/doctype/booked_group/test_booked_group.py new file mode 100644 index 0000000..d42655e --- /dev/null +++ b/member_management/member_management/doctype/booked_group/test_booked_group.py @@ -0,0 +1,9 @@ +# Copyright (c) 2025, Haddon Kitchen Incubator LLC and Contributors +# See license.txt + +# import frappe +from frappe.tests.utils import FrappeTestCase + + +class TestBookedGroup(FrappeTestCase): + pass diff --git a/member_management/member_management/doctype/booked_groupid/__init__.py b/member_management/member_management/doctype/booked_groupid/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/member_management/member_management/doctype/booked_groupid/booked_groupid.json b/member_management/member_management/doctype/booked_groupid/booked_groupid.json new file mode 100644 index 0000000..d935a3a --- /dev/null +++ b/member_management/member_management/doctype/booked_groupid/booked_groupid.json @@ -0,0 +1,34 @@ +{ + "actions": [], + "allow_rename": 1, + "creation": "2025-11-13 23:21:54.581573", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "booked_group" + ], + "fields": [ + { + "fieldname": "booked_group", + "fieldtype": "Link", + "label": "Group", + "options": "Booked Group" + } + ], + "grid_page_length": 50, + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2025-11-13 23:22:59.561662", + "modified_by": "Administrator", + "module": "Member Management", + "name": "Booked GroupId", + "owner": "Administrator", + "permissions": [], + "row_format": "Dynamic", + "rows_threshold_for_grid_search": 20, + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/member_management/member_management/doctype/booked_groupid/booked_groupid.py b/member_management/member_management/doctype/booked_groupid/booked_groupid.py new file mode 100644 index 0000000..54b79f2 --- /dev/null +++ b/member_management/member_management/doctype/booked_groupid/booked_groupid.py @@ -0,0 +1,9 @@ +# Copyright (c) 2025, Haddon Kitchen Incubator LLC and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class BookedGroupId(Document): + pass diff --git a/member_management/member_management/doctype/booked_member/__init__.py b/member_management/member_management/doctype/booked_member/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/member_management/member_management/doctype/booked_member/booked_member.js b/member_management/member_management/doctype/booked_member/booked_member.js new file mode 100644 index 0000000..49ae7bf --- /dev/null +++ b/member_management/member_management/doctype/booked_member/booked_member.js @@ -0,0 +1,8 @@ +// Copyright (c) 2025, Haddon Kitchen Incubator LLC and contributors +// For license information, please see license.txt + +// frappe.ui.form.on("Booked Member", { +// refresh(frm) { + +// }, +// }); diff --git a/member_management/member_management/doctype/booked_member/booked_member.json b/member_management/member_management/doctype/booked_member/booked_member.json new file mode 100644 index 0000000..44b5d2c --- /dev/null +++ b/member_management/member_management/doctype/booked_member/booked_member.json @@ -0,0 +1,127 @@ +{ + "actions": [], + "autoname": "field:booked_contact", + "creation": "2025-11-13 21:19:39.193998", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "booked_contact", + "firstname", + "lastname", + "emailaddress", + "phonecountrycode", + "phone", + "column_break_smfo", + "username", + "password", + "groupid", + "position" + ], + "fields": [ + { + "fieldname": "username", + "fieldtype": "Data", + "in_list_view": 1, + "label": "User Name", + "reqd": 1 + }, + { + "fetch_from": "booked_contact.email_id", + "fieldname": "emailaddress", + "fieldtype": "Read Only", + "in_list_view": 1, + "label": "Email", + "reqd": 1 + }, + { + "fieldname": "password", + "fieldtype": "Password", + "label": "Password", + "reqd": 1 + }, + { + "fieldname": "column_break_smfo", + "fieldtype": "Column Break" + }, + { + "fetch_from": "booked_contact.first_name", + "fieldname": "firstname", + "fieldtype": "Read Only", + "in_list_view": 1, + "label": "First Name", + "reqd": 1 + }, + { + "fetch_from": "booked_contact.last_name", + "fieldname": "lastname", + "fieldtype": "Read Only", + "in_list_view": 1, + "label": "Last Name", + "reqd": 1 + }, + { + "fetch_from": "booked_contact.phone", + "fieldname": "phone", + "fieldtype": "Read Only", + "label": "Phone", + "reqd": 1 + }, + { + "default": "US", + "fieldname": "phonecountrycode", + "fieldtype": "Data", + "label": "Phone Country Code", + "read_only": 1, + "reqd": 1 + }, + { + "fetch_from": "booked_contact.designation", + "fieldname": "position", + "fieldtype": "Read Only", + "label": "Position" + }, + { + "fieldname": "groupid", + "fieldtype": "Table MultiSelect", + "label": "Groups", + "options": "Booked GroupId" + }, + { + "fieldname": "booked_contact", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Contact", + "options": "Contact", + "reqd": 1, + "unique": 1 + } + ], + "grid_page_length": 50, + "index_web_pages_for_search": 1, + "istable": 1, + "links": [ + { + "group": "Users", + "link_doctype": "Member Profile", + "link_fieldname": "member_id" + }, + { + "group": "Users", + "link_doctype": "Onboarding", + "link_fieldname": "member_id" + } + ], + "modified": "2025-11-14 00:31:54.667540", + "modified_by": "Administrator", + "module": "Member Management", + "name": "Booked Member", + "naming_rule": "By fieldname", + "owner": "Administrator", + "permissions": [], + "row_format": "Dynamic", + "rows_threshold_for_grid_search": 20, + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/member_management/member_management/doctype/booked_member/booked_member.py b/member_management/member_management/doctype/booked_member/booked_member.py new file mode 100644 index 0000000..390bfe0 --- /dev/null +++ b/member_management/member_management/doctype/booked_member/booked_member.py @@ -0,0 +1,9 @@ +# Copyright (c) 2025, Haddon Kitchen Incubator LLC and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class BookedMember(Document): + pass diff --git a/member_management/member_management/doctype/booked_member/test_booked_member.py b/member_management/member_management/doctype/booked_member/test_booked_member.py new file mode 100644 index 0000000..e033edc --- /dev/null +++ b/member_management/member_management/doctype/booked_member/test_booked_member.py @@ -0,0 +1,9 @@ +# Copyright (c) 2025, Haddon Kitchen Incubator LLC and Contributors +# See license.txt + +# import frappe +from frappe.tests.utils import FrappeTestCase + + +class TestBookedMember(FrappeTestCase): + pass diff --git a/member_management/member_management/doctype/member_profile/member_profile.json b/member_management/member_management/doctype/member_profile/member_profile.json index 8271850..57965ca 100644 --- a/member_management/member_management/doctype/member_profile/member_profile.json +++ b/member_management/member_management/doctype/member_profile/member_profile.json @@ -1,5 +1,12 @@ { - "actions": [], + "actions": [ + { + "action": "Onboarding", + "action_type": "Route", + "group": "User", + "label": "Tasks" + } + ], "autoname": "format:{member_id}", "creation": "2025-11-09 09:55:16.302059", "default_view": "List", @@ -23,6 +30,10 @@ "onboard_date", "join_date", "approve_date", + "column_break_ivvj", + "button_tasks", + "access_card_count", + "wifi_codes_issued", "dashboard_tab", "documents", "agreements_section", @@ -39,7 +50,10 @@ "tempattach", "associates_tab", "associates_section", - "table_cdln" + "table_cdln", + "tab_5_tab", + "unifi_profile", + "booked_member" ], "fields": [ { @@ -227,6 +241,44 @@ "fieldname": "onboarding_section", "fieldtype": "Section Break", "label": "Onboarding" + }, + { + "fieldname": "button_tasks", + "fieldtype": "Button", + "label": "Codes", + "options": "Onboarding" + }, + { + "fieldname": "column_break_ivvj", + "fieldtype": "Column Break" + }, + { + "fieldname": "access_card_count", + "fieldtype": "Int", + "label": "Number of Access Cards Issued", + "non_negative": 1 + }, + { + "fieldname": "wifi_codes_issued", + "fieldtype": "Text", + "label": "Wifi Codes Issued" + }, + { + "fieldname": "tab_5_tab", + "fieldtype": "Tab Break", + "label": "Provisioning" + }, + { + "fieldname": "unifi_profile", + "fieldtype": "Table", + "label": "Facility Access", + "options": "UniFi Access Profile" + }, + { + "fieldname": "booked_member", + "fieldtype": "Table", + "label": "Schedule Access", + "options": "Booked Member" } ], "grid_page_length": 50, @@ -240,9 +292,14 @@ "group": "User", "link_doctype": "Customer", "link_fieldname": "customer_name" + }, + { + "group": "User", + "link_doctype": "Onboarding", + "link_fieldname": "member_id" } ], - "modified": "2025-11-11 18:35:14.522070", + "modified": "2025-11-14 00:19:01.685822", "modified_by": "Administrator", "module": "Member Management", "name": "Member Profile", diff --git a/member_management/member_management/doctype/offboarding/__init__.py b/member_management/member_management/doctype/offboarding/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/member_management/member_management/doctype/offboarding/offboarding.js b/member_management/member_management/doctype/offboarding/offboarding.js new file mode 100644 index 0000000..556f0a8 --- /dev/null +++ b/member_management/member_management/doctype/offboarding/offboarding.js @@ -0,0 +1,8 @@ +// Copyright (c) 2025, Haddon Kitchen Incubator LLC and contributors +// For license information, please see license.txt + +// frappe.ui.form.on("Offboarding", { +// refresh(frm) { + +// }, +// }); diff --git a/member_management/member_management/doctype/offboarding/offboarding.json b/member_management/member_management/doctype/offboarding/offboarding.json new file mode 100644 index 0000000..45c972c --- /dev/null +++ b/member_management/member_management/doctype/offboarding/offboarding.json @@ -0,0 +1,48 @@ +{ + "actions": [], + "allow_rename": 1, + "creation": "2025-11-13 22:50:54.370722", + "doctype": "DocType", + "engine": "InnoDB", + "field_order": [ + "member_id" + ], + "fields": [ + { + "fieldname": "member_id", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Member", + "link_filters": "[[\"Member Profile\",\"status\",\"=\",\"Offboarding\"]]", + "options": "Member Profile", + "reqd": 1 + } + ], + "grid_page_length": 50, + "index_web_pages_for_search": 1, + "links": [], + "modified": "2025-11-13 22:53:03.268661", + "modified_by": "Administrator", + "module": "Member Management", + "name": "Offboarding", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "row_format": "Dynamic", + "rows_threshold_for_grid_search": 20, + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/member_management/member_management/doctype/offboarding/offboarding.py b/member_management/member_management/doctype/offboarding/offboarding.py new file mode 100644 index 0000000..db1c628 --- /dev/null +++ b/member_management/member_management/doctype/offboarding/offboarding.py @@ -0,0 +1,9 @@ +# Copyright (c) 2025, Haddon Kitchen Incubator LLC and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class Offboarding(Document): + pass diff --git a/member_management/member_management/doctype/offboarding/test_offboarding.py b/member_management/member_management/doctype/offboarding/test_offboarding.py new file mode 100644 index 0000000..52f1581 --- /dev/null +++ b/member_management/member_management/doctype/offboarding/test_offboarding.py @@ -0,0 +1,9 @@ +# Copyright (c) 2025, Haddon Kitchen Incubator LLC and Contributors +# See license.txt + +# import frappe +from frappe.tests.utils import FrappeTestCase + + +class TestOffboarding(FrappeTestCase): + pass diff --git a/member_management/member_management/doctype/onboarding/__init__.py b/member_management/member_management/doctype/onboarding/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/member_management/member_management/doctype/onboarding/onboarding.js b/member_management/member_management/doctype/onboarding/onboarding.js new file mode 100644 index 0000000..6dd3749 --- /dev/null +++ b/member_management/member_management/doctype/onboarding/onboarding.js @@ -0,0 +1,8 @@ +// Copyright (c) 2025, Haddon Kitchen Incubator LLC and contributors +// For license information, please see license.txt + +// frappe.ui.form.on("Onboarding", { +// refresh(frm) { + +// }, +// }); diff --git a/member_management/member_management/doctype/onboarding/onboarding.json b/member_management/member_management/doctype/onboarding/onboarding.json new file mode 100644 index 0000000..89c6eb4 --- /dev/null +++ b/member_management/member_management/doctype/onboarding/onboarding.json @@ -0,0 +1,120 @@ +{ + "actions": [], + "allow_rename": 1, + "autoname": "field:member_id", + "creation": "2025-11-11 19:14:43.300935", + "default_view": "Kanban", + "doctype": "DocType", + "engine": "InnoDB", + "field_order": [ + "member_id", + "column_break_leyy", + "onboarding_step", + "payments_section", + "security_deposit_amount", + "security_paid", + "column_break_xbmx", + "app_fee", + "app_paid", + "dashboard_tab" + ], + "fields": [ + { + "fieldname": "member_id", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Member", + "link_filters": "[[\"Member Profile\",\"status\",\"=\",\"Onboarding\"]]", + "options": "Member Profile", + "reqd": 1, + "set_only_once": 1, + "unique": 1 + }, + { + "fieldname": "column_break_leyy", + "fieldtype": "Column Break" + }, + { + "fieldname": "payments_section", + "fieldtype": "Section Break", + "label": "Payments" + }, + { + "fieldname": "security_deposit_amount", + "fieldtype": "Currency", + "label": "Security Deposit", + "non_negative": 1 + }, + { + "default": "0", + "fieldname": "security_paid", + "fieldtype": "Check", + "label": "Paid" + }, + { + "fieldname": "column_break_xbmx", + "fieldtype": "Column Break" + }, + { + "fieldname": "app_fee", + "fieldtype": "Currency", + "label": "Application Fee" + }, + { + "default": "0", + "fieldname": "app_paid", + "fieldtype": "Check", + "label": "Paid" + }, + { + "allow_in_quick_entry": 1, + "default": "Login Setup", + "fieldname": "onboarding_step", + "fieldtype": "Select", + "label": "Onboarding Status", + "options": "Login Setup\nAwaiting Documentation\nDocument Approval\nSchedule Onboarding\nAwaiting Payment\nPending Onboarding Meeting\nDOH Application\nDOH Approval\nSchedule Orientation\nCredit Bank Invoicing\nCheck-In\nComplete", + "reqd": 1 + }, + { + "fieldname": "dashboard_tab", + "fieldtype": "Tab Break", + "label": "Dashboard", + "show_dashboard": 1 + } + ], + "grid_page_length": 50, + "index_web_pages_for_search": 1, + "links": [ + { + "link_doctype": "Member Profile", + "link_fieldname": "member_id" + } + ], + "modified": "2025-11-11 22:47:23.901625", + "modified_by": "Administrator", + "module": "Member Management", + "name": "Onboarding", + "naming_rule": "By fieldname", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "row_format": "Dynamic", + "rows_threshold_for_grid_search": 20, + "show_title_field_in_link": 1, + "sort_field": "modified", + "sort_order": "DESC", + "states": [], + "title_field": "member_id" +} \ No newline at end of file diff --git a/member_management/member_management/doctype/onboarding/onboarding.py b/member_management/member_management/doctype/onboarding/onboarding.py new file mode 100644 index 0000000..74fd8f2 --- /dev/null +++ b/member_management/member_management/doctype/onboarding/onboarding.py @@ -0,0 +1,9 @@ +# Copyright (c) 2025, Haddon Kitchen Incubator LLC and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class Onboarding(Document): + pass diff --git a/member_management/member_management/doctype/onboarding/test_onboarding.py b/member_management/member_management/doctype/onboarding/test_onboarding.py new file mode 100644 index 0000000..0e1ab0e --- /dev/null +++ b/member_management/member_management/doctype/onboarding/test_onboarding.py @@ -0,0 +1,9 @@ +# Copyright (c) 2025, Haddon Kitchen Incubator LLC and Contributors +# See license.txt + +# import frappe +from frappe.tests.utils import FrappeTestCase + + +class TestOnboarding(FrappeTestCase): + pass diff --git a/member_management/member_management/doctype/unifi_access_profile/__init__.py b/member_management/member_management/doctype/unifi_access_profile/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/member_management/member_management/doctype/unifi_access_profile/test_unifi_access_profile.py b/member_management/member_management/doctype/unifi_access_profile/test_unifi_access_profile.py new file mode 100644 index 0000000..a3e75ab --- /dev/null +++ b/member_management/member_management/doctype/unifi_access_profile/test_unifi_access_profile.py @@ -0,0 +1,9 @@ +# Copyright (c) 2025, Haddon Kitchen Incubator LLC and Contributors +# See license.txt + +# import frappe +from frappe.tests.utils import FrappeTestCase + + +class TestUniFiAccessProfile(FrappeTestCase): + pass diff --git a/member_management/member_management/doctype/unifi_access_profile/unifi_access_profile.js b/member_management/member_management/doctype/unifi_access_profile/unifi_access_profile.js new file mode 100644 index 0000000..b536b8f --- /dev/null +++ b/member_management/member_management/doctype/unifi_access_profile/unifi_access_profile.js @@ -0,0 +1,8 @@ +// Copyright (c) 2025, Haddon Kitchen Incubator LLC and contributors +// For license information, please see license.txt + +// frappe.ui.form.on("UniFi Access Profile", { +// refresh(frm) { + +// }, +// }); diff --git a/member_management/member_management/doctype/unifi_access_profile/unifi_access_profile.json b/member_management/member_management/doctype/unifi_access_profile/unifi_access_profile.json new file mode 100644 index 0000000..5cf6a6f --- /dev/null +++ b/member_management/member_management/doctype/unifi_access_profile/unifi_access_profile.json @@ -0,0 +1,116 @@ +{ + "actions": [], + "autoname": "field:contact_name", + "creation": "2025-11-13 23:43:02.590767", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "contact_section", + "contact_name", + "acess_status_section", + "unifi_status", + "column_break_felf", + "unifi_profile_section", + "first_name", + "last_name", + "email", + "column_break_rhfh", + "unifi_pin", + "unifi_policy", + "unifi_id" + ], + "fields": [ + { + "fieldname": "contact_name", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Contact", + "options": "Contact", + "unique": 1 + }, + { + "fetch_from": "contact_name.first_name", + "fieldname": "first_name", + "fieldtype": "Data", + "label": "First Name" + }, + { + "fetch_from": "contact_name.last_name", + "fieldname": "last_name", + "fieldtype": "Data", + "label": "Last Name" + }, + { + "fetch_from": "contact_name.email_id", + "fieldname": "email", + "fieldtype": "Data", + "label": "Email" + }, + { + "fieldname": "unifi_id", + "fieldtype": "Data", + "label": "UniFi ID", + "unique": 1 + }, + { + "fieldname": "unifi_pin", + "fieldtype": "Data", + "label": "PIN Code" + }, + { + "fieldname": "unifi_status", + "fieldtype": "Select", + "in_list_view": 1, + "label": "Status", + "options": "ACTIVE\nPENDING\nDEACTIVATED", + "reqd": 1 + }, + { + "default": "ID HERE", + "fieldname": "unifi_policy", + "fieldtype": "Data", + "label": "Access Policy ID", + "read_only": 1 + }, + { + "fieldname": "column_break_rhfh", + "fieldtype": "Column Break" + }, + { + "fieldname": "contact_section", + "fieldtype": "Section Break", + "label": "Contact" + }, + { + "fieldname": "column_break_felf", + "fieldtype": "Column Break" + }, + { + "fieldname": "acess_status_section", + "fieldtype": "Section Break", + "label": "Acess Status" + }, + { + "fieldname": "unifi_profile_section", + "fieldtype": "Section Break", + "label": "UniFi Profile" + } + ], + "grid_page_length": 50, + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2025-11-14 00:28:38.504479", + "modified_by": "Administrator", + "module": "Member Management", + "name": "UniFi Access Profile", + "naming_rule": "By fieldname", + "owner": "Administrator", + "permissions": [], + "row_format": "Dynamic", + "rows_threshold_for_grid_search": 20, + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/member_management/member_management/doctype/unifi_access_profile/unifi_access_profile.py b/member_management/member_management/doctype/unifi_access_profile/unifi_access_profile.py new file mode 100644 index 0000000..fd94bd4 --- /dev/null +++ b/member_management/member_management/doctype/unifi_access_profile/unifi_access_profile.py @@ -0,0 +1,9 @@ +# Copyright (c) 2025, Haddon Kitchen Incubator LLC and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class UniFiAccessProfile(Document): + pass