diff --git a/member_management/member_management/doctype/__init__.py b/member_management/member_management/doctype/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/member_management/member_management/doctype/associate_list/__init__.py b/member_management/member_management/doctype/associate_list/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/member_management/member_management/doctype/associate_list/associate_list.json b/member_management/member_management/doctype/associate_list/associate_list.json new file mode 100644 index 0000000..4703e65 --- /dev/null +++ b/member_management/member_management/doctype/associate_list/associate_list.json @@ -0,0 +1,32 @@ +{ + "actions": [], + "allow_rename": 1, + "creation": "2025-11-09 09:57:45.397759", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "section_break_ppay" + ], + "fields": [ + { + "fieldname": "section_break_ppay", + "fieldtype": "Section Break" + } + ], + "grid_page_length": 50, + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2025-11-09 09:57:45.397759", + "modified_by": "Administrator", + "module": "Member Management", + "name": "Associate List", + "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/associate_list/associate_list.py b/member_management/member_management/doctype/associate_list/associate_list.py new file mode 100644 index 0000000..41f42e0 --- /dev/null +++ b/member_management/member_management/doctype/associate_list/associate_list.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 AssociateList(Document): + pass diff --git a/member_management/member_management/doctype/corporate_documents/__init__.py b/member_management/member_management/doctype/corporate_documents/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/member_management/member_management/doctype/corporate_documents/corporate_documents.json b/member_management/member_management/doctype/corporate_documents/corporate_documents.json new file mode 100644 index 0000000..071c8fe --- /dev/null +++ b/member_management/member_management/doctype/corporate_documents/corporate_documents.json @@ -0,0 +1,48 @@ +{ + "actions": [], + "allow_rename": 1, + "autoname": "format:{member_id}_{member_doctype}_{YYYY}_{MM}_{DD}_{#####}", + "creation": "2025-11-09 09:55:54.869737", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "member_doctype", + "file" + ], + "fields": [ + { + "description": "See instructions. Not all applicants require all documents. ", + "fieldname": "member_doctype", + "fieldtype": "Select", + "in_list_view": 1, + "label": "Document Type", + "options": "Business Registration Certificate\nCertificate of Formation\nCertificate of Trade Name\nIRS EIN Letter\nSales Tax Authority", + "reqd": 1, + "search_index": 1 + }, + { + "fieldname": "file", + "fieldtype": "Attach", + "in_list_view": 1, + "label": "File Name", + "reqd": 1 + } + ], + "grid_page_length": 50, + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2025-11-09 11:14:45.962456", + "modified_by": "Administrator", + "module": "Member Management", + "name": "Corporate Documents", + "naming_rule": "Expression", + "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/corporate_documents/corporate_documents.py b/member_management/member_management/doctype/corporate_documents/corporate_documents.py new file mode 100644 index 0000000..91072c6 --- /dev/null +++ b/member_management/member_management/doctype/corporate_documents/corporate_documents.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 CorporateDocuments(Document): + pass diff --git a/member_management/member_management/doctype/food_protection_manager_record/__init__.py b/member_management/member_management/doctype/food_protection_manager_record/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/member_management/member_management/doctype/food_protection_manager_record/food_protection_manager_record.json b/member_management/member_management/doctype/food_protection_manager_record/food_protection_manager_record.json new file mode 100644 index 0000000..187174a --- /dev/null +++ b/member_management/member_management/doctype/food_protection_manager_record/food_protection_manager_record.json @@ -0,0 +1,69 @@ +{ + "actions": [], + "allow_rename": 1, + "creation": "2025-11-09 09:57:03.492727", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "section_break_srta", + "manager_issuer", + "certificate", + "column_break_ysbr", + "issue_date", + "expire_date" + ], + "fields": [ + { + "fieldname": "section_break_srta", + "fieldtype": "Section Break" + }, + { + "fieldname": "manager_issuer", + "fieldtype": "Select", + "in_list_view": 1, + "label": "Issuer", + "options": "360 Training\nAAA Food Manager\nAboveTraining/StateFoodSafety\nEnvironmental Health Testing\nMy Food Service License\nNational Restaurant Association\nServSafe Manager\nThe Always Food Safe Company\nTrust20\nWFSO Academy", + "reqd": 1 + }, + { + "fieldname": "certificate", + "fieldtype": "Attach", + "in_list_view": 1, + "label": "Certificate", + "reqd": 1 + }, + { + "fieldname": "column_break_ysbr", + "fieldtype": "Column Break" + }, + { + "fieldname": "issue_date", + "fieldtype": "Date", + "in_list_view": 1, + "label": "Issue Date" + }, + { + "fieldname": "expire_date", + "fieldtype": "Date", + "in_list_view": 1, + "label": "Expiration Date", + "reqd": 1 + } + ], + "grid_page_length": 50, + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2025-11-09 11:41:55.956305", + "modified_by": "Administrator", + "module": "Member Management", + "name": "Food Protection Manager Record", + "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/food_protection_manager_record/food_protection_manager_record.py b/member_management/member_management/doctype/food_protection_manager_record/food_protection_manager_record.py new file mode 100644 index 0000000..32ae305 --- /dev/null +++ b/member_management/member_management/doctype/food_protection_manager_record/food_protection_manager_record.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 FoodProtectionManagerRecord(Document): + pass diff --git a/member_management/member_management/doctype/inspection_record/__init__.py b/member_management/member_management/doctype/inspection_record/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/member_management/member_management/doctype/inspection_record/inspection_record.js b/member_management/member_management/doctype/inspection_record/inspection_record.js new file mode 100644 index 0000000..78041b9 --- /dev/null +++ b/member_management/member_management/doctype/inspection_record/inspection_record.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("Inspection Record", { +// refresh(frm) { + +// }, +// }); diff --git a/member_management/member_management/doctype/inspection_record/inspection_record.json b/member_management/member_management/doctype/inspection_record/inspection_record.json new file mode 100644 index 0000000..26fb386 --- /dev/null +++ b/member_management/member_management/doctype/inspection_record/inspection_record.json @@ -0,0 +1,76 @@ +{ + "actions": [], + "allow_rename": 1, + "creation": "2025-11-09 09:56:19.768362", + "doctype": "DocType", + "engine": "InnoDB", + "field_order": [ + "jurisdiction", + "inspection_type", + "inspection_file", + "column_break_urym", + "issue_date", + "expire_date" + ], + "fields": [ + { + "description": "Authorizing Jurisdiction (County, State, Federal Agency)", + "fieldname": "jurisdiction", + "fieldtype": "Data", + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Jurisdiction", + "reqd": 1 + }, + { + "description": "See Instructions. Not all applicants will need to supply all docuuments.", + "fieldname": "inspection_type", + "fieldtype": "Select", + "in_list_view": 1, + "in_preview": 1, + "label": "Document Type", + "options": "Mobile Application\nMobile Certificate\nMobile Inspection Report\nFacility Application\nFacility Certificate\nFacility Inspection Report", + "reqd": 1 + }, + { + "fieldname": "inspection_file", + "fieldtype": "Attach", + "in_list_view": 1, + "in_preview": 1, + "label": "File", + "reqd": 1 + }, + { + "fieldname": "column_break_urym", + "fieldtype": "Column Break" + }, + { + "fieldname": "issue_date", + "fieldtype": "Date", + "label": "Issue Date" + }, + { + "description": "County sanitation certificates expire at calendar year end", + "fieldname": "expire_date", + "fieldtype": "Date", + "in_list_view": 1, + "label": "Expiration Date", + "reqd": 1 + } + ], + "grid_page_length": 50, + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2025-11-09 11:40:46.022312", + "modified_by": "Administrator", + "module": "Member Management", + "name": "Inspection Record", + "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/inspection_record/inspection_record.py b/member_management/member_management/doctype/inspection_record/inspection_record.py new file mode 100644 index 0000000..3731d6c --- /dev/null +++ b/member_management/member_management/doctype/inspection_record/inspection_record.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 InspectionRecord(Document): + pass diff --git a/member_management/member_management/doctype/inspection_record/test_inspection_record.py b/member_management/member_management/doctype/inspection_record/test_inspection_record.py new file mode 100644 index 0000000..61ef8b9 --- /dev/null +++ b/member_management/member_management/doctype/inspection_record/test_inspection_record.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 TestInspectionRecord(FrappeTestCase): + pass diff --git a/member_management/member_management/doctype/insurance_record/__init__.py b/member_management/member_management/doctype/insurance_record/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/member_management/member_management/doctype/insurance_record/insurance_record.js b/member_management/member_management/doctype/insurance_record/insurance_record.js new file mode 100644 index 0000000..9838bcb --- /dev/null +++ b/member_management/member_management/doctype/insurance_record/insurance_record.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("Insurance Record", { +// refresh(frm) { + +// }, +// }); diff --git a/member_management/member_management/doctype/insurance_record/insurance_record.json b/member_management/member_management/doctype/insurance_record/insurance_record.json new file mode 100644 index 0000000..137e6b7 --- /dev/null +++ b/member_management/member_management/doctype/insurance_record/insurance_record.json @@ -0,0 +1,60 @@ +{ + "actions": [], + "allow_rename": 1, + "creation": "2025-11-09 09:57:22.638768", + "doctype": "DocType", + "engine": "InnoDB", + "field_order": [ + "insurer", + "declaration", + "column_break_wgkt", + "issue_date", + "expire_date" + ], + "fields": [ + { + "fieldname": "insurer", + "fieldtype": "Data", + "in_list_view": 1, + "label": "Insurer" + }, + { + "fieldname": "declaration", + "fieldtype": "Attach", + "in_list_view": 1, + "label": "File", + "reqd": 1 + }, + { + "fieldname": "column_break_wgkt", + "fieldtype": "Column Break" + }, + { + "fieldname": "issue_date", + "fieldtype": "Date", + "label": "Issue Date" + }, + { + "fieldname": "expire_date", + "fieldtype": "Date", + "in_list_view": 1, + "label": "Expiration Date", + "reqd": 1 + } + ], + "grid_page_length": 50, + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2025-11-09 11:39:42.856785", + "modified_by": "Administrator", + "module": "Member Management", + "name": "Insurance Record", + "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/insurance_record/insurance_record.py b/member_management/member_management/doctype/insurance_record/insurance_record.py new file mode 100644 index 0000000..52b18d5 --- /dev/null +++ b/member_management/member_management/doctype/insurance_record/insurance_record.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 InsuranceRecord(Document): + pass diff --git a/member_management/member_management/doctype/insurance_record/test_insurance_record.py b/member_management/member_management/doctype/insurance_record/test_insurance_record.py new file mode 100644 index 0000000..14d5f1c --- /dev/null +++ b/member_management/member_management/doctype/insurance_record/test_insurance_record.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 TestInsuranceRecord(FrappeTestCase): + pass diff --git a/member_management/member_management/doctype/member_agreements/__init__.py b/member_management/member_management/doctype/member_agreements/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/member_management/member_management/doctype/member_agreements/member_agreements.json b/member_management/member_management/doctype/member_agreements/member_agreements.json new file mode 100644 index 0000000..e0d5f82 --- /dev/null +++ b/member_management/member_management/doctype/member_agreements/member_agreements.json @@ -0,0 +1,65 @@ +{ + "actions": [], + "allow_rename": 1, + "creation": "2025-11-09 09:59:42.069937", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "contract_type", + "file", + "column_break_bkzm", + "date_effective", + "date_end" + ], + "fields": [ + { + "fieldname": "contract_type", + "fieldtype": "Select", + "in_list_view": 1, + "in_preview": 1, + "label": "Contract Type", + "options": "Facilities Use Agreement\nStorage Addendum\nMobile Base Station Addendum\nEquipment Rental\nEvent Room Rental", + "reqd": 1 + }, + { + "fieldname": "file", + "fieldtype": "Attach", + "in_list_view": 1, + "label": "File", + "reqd": 1 + }, + { + "fieldname": "column_break_bkzm", + "fieldtype": "Column Break" + }, + { + "fieldname": "date_effective", + "fieldtype": "Date", + "in_list_view": 1, + "label": "Effective Date", + "reqd": 1 + }, + { + "fieldname": "date_end", + "fieldtype": "Date", + "in_list_view": 1, + "label": "Date End" + } + ], + "grid_page_length": 50, + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2025-11-09 11:48:36.156523", + "modified_by": "Administrator", + "module": "Member Management", + "name": "Member Agreements", + "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/member_agreements/member_agreements.py b/member_management/member_management/doctype/member_agreements/member_agreements.py new file mode 100644 index 0000000..a1ad86b --- /dev/null +++ b/member_management/member_management/doctype/member_agreements/member_agreements.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 MemberAgreements(Document): + pass diff --git a/member_management/member_management/doctype/member_profile/__init__.py b/member_management/member_management/doctype/member_profile/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/member_management/member_management/doctype/member_profile/member_file.js b/member_management/member_management/doctype/member_profile/member_file.js new file mode 100644 index 0000000..ada16dc --- /dev/null +++ b/member_management/member_management/doctype/member_profile/member_file.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("Member File", { +// refresh(frm) { + +// }, +// }); diff --git a/member_management/member_management/doctype/member_profile/member_file.json b/member_management/member_management/doctype/member_profile/member_file.json new file mode 100644 index 0000000..418f223 --- /dev/null +++ b/member_management/member_management/doctype/member_profile/member_file.json @@ -0,0 +1,235 @@ +{ + "actions": [], + "autoname": "field:member_id", + "creation": "2025-11-09 09:55:16.302059", + "default_view": "List", + "doctype": "DocType", + "document_type": "Document", + "engine": "InnoDB", + "field_order": [ + "member_data_section", + "column_break_vdps", + "member_name", + "member_ein", + "risk_class", + "column_break_jznx", + "member_id", + "join_date", + "onboard_date", + "membership_details_section", + "membership_type", + "column_break_iofm", + "dashboard_tab", + "documents", + "agreements_section", + "table_cabr", + "corporate_documents_section", + "table_rkkt", + "food_manager_records_section", + "table_wsni", + "insurance_records_section", + "table_wmpy", + "inspection_records_section", + "table_yzvn", + "menus_section", + "tempattach", + "associates_tab", + "associates_section", + "table_cdln" + ], + "fields": [ + { + "fieldname": "member_name", + "fieldtype": "Data", + "in_list_view": 1, + "label": "Name", + "reqd": 1, + "unique": 1 + }, + { + "fieldname": "dashboard_tab", + "fieldtype": "Tab Break", + "label": "Dashboard", + "show_dashboard": 1 + }, + { + "fieldname": "documents", + "fieldtype": "Tab Break", + "label": "Documents" + }, + { + "fieldname": "agreements_section", + "fieldtype": "Section Break", + "label": "Agreements" + }, + { + "fieldname": "table_cabr", + "fieldtype": "Table", + "options": "Member Agreements" + }, + { + "fieldname": "corporate_documents_section", + "fieldtype": "Section Break", + "label": "Corporate Documents" + }, + { + "fieldname": "table_rkkt", + "fieldtype": "Table", + "options": "Corporate Documents" + }, + { + "fieldname": "food_manager_records_section", + "fieldtype": "Section Break", + "label": "Food Manager Records" + }, + { + "fieldname": "table_wsni", + "fieldtype": "Table", + "options": "Food Protection Manager Record" + }, + { + "fieldname": "insurance_records_section", + "fieldtype": "Section Break", + "label": "Insurance Records" + }, + { + "fieldname": "table_wmpy", + "fieldtype": "Table", + "options": "Insurance Record" + }, + { + "fieldname": "inspection_records_section", + "fieldtype": "Section Break", + "label": "Inspection Records" + }, + { + "fieldname": "table_yzvn", + "fieldtype": "Table", + "options": "Inspection Record" + }, + { + "fieldname": "menus_section", + "fieldtype": "Section Break", + "label": "Menus" + }, + { + "fieldname": "tempattach", + "fieldtype": "Attach" + }, + { + "fieldname": "associates_tab", + "fieldtype": "Tab Break", + "label": "Associates" + }, + { + "fieldname": "associates_section", + "fieldtype": "Section Break", + "label": "Associates" + }, + { + "fieldname": "table_cdln", + "fieldtype": "Table", + "options": "Associate List" + }, + { + "fieldname": "join_date", + "fieldtype": "Date", + "label": "Joined" + }, + { + "fieldname": "onboard_date", + "fieldtype": "Date", + "label": "Onboarded" + }, + { + "fieldname": "risk_class", + "fieldtype": "Select", + "label": "Risk Class", + "options": "1\n2\n3" + }, + { + "fieldname": "member_ein", + "fieldtype": "Data", + "label": "EIN" + }, + { + "columns": 1, + "fieldname": "column_break_jznx", + "fieldtype": "Column Break" + }, + { + "description": "For API Integrations", + "fieldname": "member_id", + "fieldtype": "Int", + "label": "Member ID", + "length": 12, + "non_negative": 1, + "reqd": 1, + "unique": 1 + }, + { + "fieldname": "member_data_section", + "fieldtype": "Section Break", + "label": "Member Data" + }, + { + "fieldname": "column_break_vdps", + "fieldtype": "Column Break" + }, + { + "fieldname": "membership_details_section", + "fieldtype": "Section Break", + "label": "Membership Details" + }, + { + "fieldname": "membership_type", + "fieldtype": "Select", + "label": "Membership Type", + "options": "Standard\nCold Pack\nMobile Only\nWarewashing Only" + }, + { + "fieldname": "column_break_iofm", + "fieldtype": "Column Break" + } + ], + "grid_page_length": 50, + "links": [], + "modified": "2025-11-09 13:17:36.571988", + "modified_by": "Administrator", + "module": "Member Management", + "name": "Member File", + "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 + }, + { + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "Member", + "share": 1, + "write": 1 + } + ], + "row_format": "Dynamic", + "rows_threshold_for_grid_search": 20, + "show_preview_popup": 1, + "show_title_field_in_link": 1, + "sort_field": "modified", + "sort_order": "DESC", + "states": [], + "title_field": "member_name" +} \ No newline at end of file diff --git a/member_management/member_management/doctype/member_profile/member_file.py b/member_management/member_management/doctype/member_profile/member_file.py new file mode 100644 index 0000000..3c64e19 --- /dev/null +++ b/member_management/member_management/doctype/member_profile/member_file.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 MemberFile(Document): + pass diff --git a/member_management/member_management/doctype/member_profile/member_profile.js b/member_management/member_management/doctype/member_profile/member_profile.js new file mode 100644 index 0000000..9535d87 --- /dev/null +++ b/member_management/member_management/doctype/member_profile/member_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("Member Profile", { +// refresh(frm) { + +// }, +// }); diff --git a/member_management/member_management/doctype/member_profile/member_profile.json b/member_management/member_management/doctype/member_profile/member_profile.json new file mode 100644 index 0000000..8a5e8b4 --- /dev/null +++ b/member_management/member_management/doctype/member_profile/member_profile.json @@ -0,0 +1,254 @@ +{ + "actions": [], + "autoname": "format:{member_id}", + "creation": "2025-11-09 09:55:16.302059", + "default_view": "List", + "doctype": "DocType", + "document_type": "Document", + "engine": "InnoDB", + "field_order": [ + "member_data_section", + "column_break_vdps", + "member_name", + "member_ein", + "join_date", + "onboard_date", + "risk_class", + "column_break_jznx", + "member_id", + "api_id", + "membership_details_section", + "membership_type", + "column_break_iofm", + "dashboard_tab", + "documents", + "agreements_section", + "table_cabr", + "corporate_documents_section", + "table_rkkt", + "food_manager_records_section", + "table_wsni", + "insurance_records_section", + "table_wmpy", + "inspection_records_section", + "table_yzvn", + "menus_section", + "tempattach", + "associates_tab", + "associates_section", + "table_cdln" + ], + "fields": [ + { + "fieldname": "member_data_section", + "fieldtype": "Section Break", + "label": "Member Data" + }, + { + "fieldname": "column_break_vdps", + "fieldtype": "Column Break" + }, + { + "bold": 1, + "description": "Legal Business Name", + "fieldname": "member_name", + "fieldtype": "Data", + "in_list_view": 1, + "label": "Name", + "reqd": 1, + "unique": 1 + }, + { + "fieldname": "member_ein", + "fieldtype": "Data", + "label": "IRS Employer Identification Number (EIN)" + }, + { + "description": "Department of Health Classification", + "fieldname": "risk_class", + "fieldtype": "Select", + "label": "Risk Class", + "options": "Undetermined\n1\n2\n3" + }, + { + "columns": 1, + "fieldname": "column_break_jznx", + "fieldtype": "Column Break" + }, + { + "description": "Not editable", + "fieldname": "member_id", + "fieldtype": "Data", + "label": "Member ID", + "reqd": 1, + "set_only_once": 1, + "unique": 1 + }, + { + "fieldname": "join_date", + "fieldtype": "Date", + "label": "Joined", + "permlevel": 2 + }, + { + "fieldname": "onboard_date", + "fieldtype": "Date", + "label": "Onboarded", + "permlevel": 3 + }, + { + "fieldname": "membership_details_section", + "fieldtype": "Section Break", + "label": "Membership Details" + }, + { + "fieldname": "membership_type", + "fieldtype": "Select", + "label": "Membership Type", + "options": "Standard\nCold Pack\nMobile Only\nWarewashing Only", + "permlevel": 2 + }, + { + "fieldname": "column_break_iofm", + "fieldtype": "Column Break" + }, + { + "fieldname": "dashboard_tab", + "fieldtype": "Tab Break", + "label": "Dashboard", + "show_dashboard": 1 + }, + { + "fieldname": "documents", + "fieldtype": "Tab Break", + "label": "Documents" + }, + { + "fieldname": "agreements_section", + "fieldtype": "Section Break", + "label": "Agreements" + }, + { + "fieldname": "table_cabr", + "fieldtype": "Table", + "options": "Member Agreements" + }, + { + "fieldname": "corporate_documents_section", + "fieldtype": "Section Break", + "label": "Corporate Documents" + }, + { + "fieldname": "table_rkkt", + "fieldtype": "Table", + "options": "Corporate Documents" + }, + { + "fieldname": "food_manager_records_section", + "fieldtype": "Section Break", + "label": "Food Manager Records" + }, + { + "fieldname": "table_wsni", + "fieldtype": "Table", + "options": "Food Protection Manager Record" + }, + { + "fieldname": "insurance_records_section", + "fieldtype": "Section Break", + "label": "Insurance Records" + }, + { + "fieldname": "table_wmpy", + "fieldtype": "Table", + "options": "Insurance Record" + }, + { + "fieldname": "inspection_records_section", + "fieldtype": "Section Break", + "label": "Inspection Records" + }, + { + "fieldname": "table_yzvn", + "fieldtype": "Table", + "options": "Inspection Record" + }, + { + "fieldname": "menus_section", + "fieldtype": "Section Break", + "label": "Menus" + }, + { + "fieldname": "tempattach", + "fieldtype": "Attach" + }, + { + "fieldname": "associates_tab", + "fieldtype": "Tab Break", + "label": "Associates" + }, + { + "fieldname": "associates_section", + "fieldtype": "Section Break", + "label": "Associates" + }, + { + "fieldname": "table_cdln", + "fieldtype": "Table", + "options": "Associate List" + }, + { + "description": "For API Integrations", + "fieldname": "api_id", + "fieldtype": "Data", + "label": "API ID", + "length": 32, + "non_negative": 1, + "unique": 1 + } + ], + "grid_page_length": 50, + "links": [ + { + "group": "User", + "link_doctype": "User", + "link_fieldname": "full_name" + }, + { + "group": "User", + "link_doctype": "Customer", + "link_fieldname": "customer_name" + } + ], + "modified": "2025-11-09 17:42:12.364409", + "modified_by": "Administrator", + "module": "Member Management", + "name": "Member Profile", + "naming_rule": "Expression", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "protect_attached_files": 1, + "row_format": "Dynamic", + "rows_threshold_for_grid_search": 20, + "show_name_in_global_search": 1, + "show_preview_popup": 1, + "show_title_field_in_link": 1, + "sort_field": "modified", + "sort_order": "DESC", + "states": [], + "title_field": "member_name", + "track_seen": 1 +} \ No newline at end of file diff --git a/member_management/member_management/doctype/member_profile/member_profile.py b/member_management/member_management/doctype/member_profile/member_profile.py new file mode 100644 index 0000000..2f4a600 --- /dev/null +++ b/member_management/member_management/doctype/member_profile/member_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 MemberProfile(Document): + pass diff --git a/member_management/member_management/doctype/member_profile/test_member_file.py b/member_management/member_management/doctype/member_profile/test_member_file.py new file mode 100644 index 0000000..cfb520e --- /dev/null +++ b/member_management/member_management/doctype/member_profile/test_member_file.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 TestMemberFile(FrappeTestCase): + pass diff --git a/member_management/member_management/doctype/member_profile/test_member_profile.py b/member_management/member_management/doctype/member_profile/test_member_profile.py new file mode 100644 index 0000000..6fd26e5 --- /dev/null +++ b/member_management/member_management/doctype/member_profile/test_member_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 TestMemberProfile(FrappeTestCase): + pass diff --git a/member_management/member_management/web_form/__init__.py b/member_management/member_management/web_form/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/member_management/member_management/web_form/member_profile/__init__.py b/member_management/member_management/web_form/member_profile/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/member_management/member_management/web_form/member_profile/member_profile.js b/member_management/member_management/web_form/member_profile/member_profile.js new file mode 100644 index 0000000..699703c --- /dev/null +++ b/member_management/member_management/web_form/member_profile/member_profile.js @@ -0,0 +1,3 @@ +frappe.ready(function() { + // bind events here +}) \ No newline at end of file diff --git a/member_management/member_management/web_form/member_profile/member_profile.json b/member_management/member_management/web_form/member_profile/member_profile.json new file mode 100644 index 0000000..b6583c6 --- /dev/null +++ b/member_management/member_management/web_form/member_profile/member_profile.json @@ -0,0 +1,336 @@ +{ + "allow_comments": 0, + "allow_delete": 0, + "allow_edit": 1, + "allow_incomplete": 0, + "allow_multiple": 0, + "allow_print": 0, + "anonymous": 0, + "apply_document_permissions": 1, + "button_label": "Save", + "condition_json": "[]", + "creation": "2025-11-09 13:01:42.166805", + "doc_type": "Member Profile", + "docstatus": 0, + "doctype": "Web Form", + "idx": 0, + "introduction_text": "
Please provide required membership information on this form.
Upload one per required document type.
Corporation (including LLC):
Sole Proprietorship:
All Business Types:
Risk Type 3 members must upload a valid unexpired food protection manager certificate from an acceptable issuer.
Please upload your current unexpired insurance declaration page. (EXAMPLE FORM)
Under the Certificate Holder section there must be the following:
Haddon Kitchen Incubator LLC
SJKJSN Enterprises LLC
901 White Horse Pike
Haddon Township, NJ 0107
Contact your insurer to add us as a \"Named Insured/Loss Payee\" to obtain this form. You can usually obtain it on their self-service website.
If you have a dedicated sales location or warehouse for finished goods, please upload inspection/approval related records here. Otherwise, this area will hold your completed inspection records when approved.
A menu is required to be submitted to the authorizing jurisdiction to determine risk type. This will be submitted with any application paperwork.
All employees or business associates who will be present in the facility must be individually identified.
Your member contracts will appear here when completed.