diff --git a/member_management/__init__.py b/member_management/__init__.py index 040835a..c35625a 100644 --- a/member_management/__init__.py +++ b/member_management/__init__.py @@ -1 +1 @@ -__version__ = "0.0.20" +__version__ = "0.0.21" diff --git a/member_management/member_management/web_form/business_addresses/__init__.py b/member_management/member_management/web_form/business_addresses/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/member_management/member_management/web_form/business_addresses/business_addresses.js b/member_management/member_management/web_form/business_addresses/business_addresses.js new file mode 100644 index 0000000..699703c --- /dev/null +++ b/member_management/member_management/web_form/business_addresses/business_addresses.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/business_addresses/business_addresses.json b/member_management/member_management/web_form/business_addresses/business_addresses.json new file mode 100644 index 0000000..a67b990 --- /dev/null +++ b/member_management/member_management/web_form/business_addresses/business_addresses.json @@ -0,0 +1,256 @@ +{ + "allow_comments": 0, + "allow_delete": 0, + "allow_edit": 1, + "allow_incomplete": 0, + "allow_multiple": 1, + "allow_print": 0, + "anonymous": 0, + "apply_document_permissions": 0, + "button_label": "Save", + "condition_json": "[]", + "creation": "2025-11-17 17:54:44.884332", + "doc_type": "Address", + "docstatus": 0, + "doctype": "Web Form", + "idx": 0, + "introduction_text": "

Please ensure your business locations are up-to-date! At a minimum you should list the following address types:


  1. Permanent: Registered corporate business mailing address as found on your business state registration certificate or other corporate documents
  2. Personal: Personal residential mailing address. Please create even if duplicate of corporate.


You may add any other addresses as necessary under the appropriate location types.


Please mark which address should be preferred for billing (invoices). Most commonly it's the permanent address.


", + "is_standard": 1, + "list_columns": [ + { + "fieldname": "address_title", + "fieldtype": "Data", + "label": "Address Title" + }, + { + "fieldname": "address_type", + "fieldtype": "Select", + "label": "Address Type", + "options": "Billing\nShipping\nOffice\nPersonal\nPlant\nPostal\nShop\nSubsidiary\nWarehouse\nCurrent\nPermanent\nOther" + }, + { + "fieldname": "is_primary_address", + "fieldtype": "Check", + "label": "Billing" + } + ], + "list_title": "Addresses", + "login_required": 1, + "max_attachment_size": 0, + "modified": "2025-11-17 18:03:46.177623", + "modified_by": "Administrator", + "module": "Member Management", + "name": "business-addresses", + "owner": "Administrator", + "published": 1, + "route": "profile-address", + "show_attachments": 0, + "show_list": 1, + "show_sidebar": 1, + "title": "Business Addresses", + "web_form_fields": [ + { + "allow_read_on_all_link_options": 0, + "fieldname": "address_details", + "fieldtype": "Section Break", + "hidden": 0, + "max_length": 0, + "max_value": 0, + "options": "fa fa-map-marker", + "precision": "", + "read_only": 0, + "reqd": 0, + "show_in_filter": 0 + }, + { + "allow_read_on_all_link_options": 0, + "fieldname": "address_title", + "fieldtype": "Data", + "hidden": 0, + "label": "Legal Business Name", + "max_length": 0, + "max_value": 0, + "precision": "", + "read_only": 0, + "reqd": 0, + "show_in_filter": 0 + }, + { + "allow_read_on_all_link_options": 0, + "fieldname": "address_type", + "fieldtype": "Select", + "hidden": 0, + "label": "Address Type", + "max_length": 0, + "max_value": 0, + "options": "Billing\nShipping\nOffice\nPersonal\nPlant\nPostal\nShop\nSubsidiary\nWarehouse\nPermanent\nOther", + "precision": "", + "read_only": 0, + "reqd": 1, + "show_in_filter": 0 + }, + { + "allow_read_on_all_link_options": 0, + "fieldname": "address_line1", + "fieldtype": "Data", + "hidden": 0, + "label": "Address Line 1", + "max_length": 0, + "max_value": 0, + "precision": "", + "read_only": 0, + "reqd": 1, + "show_in_filter": 0 + }, + { + "allow_read_on_all_link_options": 0, + "fieldname": "address_line2", + "fieldtype": "Data", + "hidden": 0, + "label": "Address Line 2", + "max_length": 0, + "max_value": 0, + "precision": "", + "read_only": 0, + "reqd": 0, + "show_in_filter": 0 + }, + { + "allow_read_on_all_link_options": 0, + "fieldname": "city", + "fieldtype": "Data", + "hidden": 0, + "label": "City", + "max_length": 0, + "max_value": 0, + "precision": "", + "read_only": 0, + "reqd": 1, + "show_in_filter": 0 + }, + { + "allow_read_on_all_link_options": 0, + "fieldname": "county", + "fieldtype": "Data", + "hidden": 0, + "label": "County", + "max_length": 0, + "max_value": 0, + "precision": "", + "read_only": 0, + "reqd": 0, + "show_in_filter": 0 + }, + { + "allow_read_on_all_link_options": 0, + "fieldname": "state", + "fieldtype": "Data", + "hidden": 0, + "label": "State", + "max_length": 0, + "max_value": 0, + "options": "Connecticut\nDelaware\nDistrict of Columbia\nMaryland\nNew Jersey\nNew York\nPennsylvania\nWest Virginia", + "precision": "", + "read_only": 0, + "reqd": 1, + "show_in_filter": 0 + }, + { + "allow_read_on_all_link_options": 0, + "fieldname": "pincode", + "fieldtype": "Data", + "hidden": 0, + "label": "Postal Code", + "max_length": 0, + "max_value": 0, + "precision": "", + "read_only": 0, + "reqd": 1, + "show_in_filter": 0 + }, + { + "allow_read_on_all_link_options": 0, + "default": "United States", + "fieldname": "country", + "fieldtype": "Link", + "hidden": 0, + "label": "Country", + "max_length": 0, + "max_value": 0, + "options": "Country", + "precision": "", + "read_only": 0, + "reqd": 1, + "show_in_filter": 0 + }, + { + "allow_read_on_all_link_options": 0, + "fieldname": "column_break0", + "fieldtype": "Column Break", + "hidden": 0, + "max_length": 0, + "max_value": 0, + "precision": "", + "read_only": 0, + "reqd": 0, + "show_in_filter": 0 + }, + { + "allow_read_on_all_link_options": 0, + "fieldname": "email_id", + "fieldtype": "Data", + "hidden": 0, + "label": "Email Address", + "max_length": 0, + "max_value": 0, + "options": "Email", + "precision": "", + "read_only": 0, + "reqd": 0, + "show_in_filter": 0 + }, + { + "allow_read_on_all_link_options": 0, + "fieldname": "phone", + "fieldtype": "Data", + "hidden": 0, + "label": "Phone at Address", + "max_length": 0, + "max_value": 0, + "options": "Phone", + "precision": "", + "read_only": 0, + "reqd": 0, + "show_in_filter": 0 + }, + { + "allow_read_on_all_link_options": 0, + "default": "0", + "fieldname": "is_primary_address", + "fieldtype": "Check", + "hidden": 0, + "label": "Preferred Billing Address", + "max_length": 0, + "max_value": 0, + "precision": "", + "read_only": 0, + "reqd": 0, + "show_in_filter": 0 + }, + { + "allow_read_on_all_link_options": 0, + "default": "0", + "fieldname": "is_shipping_address", + "fieldtype": "Check", + "hidden": 0, + "label": "Preferred Shipping Address", + "max_length": 0, + "max_value": 0, + "precision": "", + "read_only": 0, + "reqd": 0, + "show_in_filter": 0 + } + ], + "website_sidebar": "Member Sidebar" +} \ No newline at end of file diff --git a/member_management/member_management/web_form/business_addresses/business_addresses.py b/member_management/member_management/web_form/business_addresses/business_addresses.py new file mode 100644 index 0000000..e1ada61 --- /dev/null +++ b/member_management/member_management/web_form/business_addresses/business_addresses.py @@ -0,0 +1,5 @@ +import frappe + +def get_context(context): + # do your magic here + pass diff --git a/member_management/member_management/web_form/business_contacts/__init__.py b/member_management/member_management/web_form/business_contacts/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/member_management/member_management/web_form/business_contacts/business_contacts.js b/member_management/member_management/web_form/business_contacts/business_contacts.js new file mode 100644 index 0000000..699703c --- /dev/null +++ b/member_management/member_management/web_form/business_contacts/business_contacts.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/business_contacts/business_contacts.json b/member_management/member_management/web_form/business_contacts/business_contacts.json new file mode 100644 index 0000000..e11675a --- /dev/null +++ b/member_management/member_management/web_form/business_contacts/business_contacts.json @@ -0,0 +1,179 @@ +{ + "allow_comments": 0, + "allow_delete": 0, + "allow_edit": 1, + "allow_incomplete": 0, + "allow_multiple": 1, + "allow_print": 0, + "anonymous": 0, + "apply_document_permissions": 1, + "button_label": "Save", + "condition_json": "[]", + "creation": "2025-11-17 17:47:52.074000", + "doc_type": "Contact", + "docstatus": 0, + "doctype": "Web Form", + "idx": 0, + "introduction_text": "

Please provide contact information for every owner or employee of your business with access to the facility.


  1. Each person with access to the facility should have an individual record in this list. Each record may have multiple contact entries for email and phone as necessary.
  2. Every person must have an associated photo identification document. Acceptable documents include a Driver's License, Passport, or State-issued ID card.
  3. Please mark one contact person as primary billing contact (typically one of the owners).


NB: There's an apparent bug in the phone table if adding multiple numbers. If you are adding multiple contact numbers- add one, save, then edit to add alternate contacts and designate which is primary. (Sorry for this- not under my control to fix).


", + "is_standard": 1, + "list_columns": [ + { + "fieldname": "full_name", + "fieldtype": "Data", + "label": "Full Name" + }, + { + "fieldname": "designation", + "fieldtype": "Data", + "label": "Designation" + }, + { + "fieldname": "is_primary_contact", + "fieldtype": "Check", + "label": "Is Primary Contact" + }, + { + "fieldname": "is_billing_contact", + "fieldtype": "Check", + "label": "Is Billing Contact" + } + ], + "login_required": 1, + "max_attachment_size": 0, + "modified": "2025-11-17 17:53:41.616425", + "modified_by": "Administrator", + "module": "Member Management", + "name": "business-contacts", + "owner": "Administrator", + "published": 1, + "route": "profile-contact", + "show_attachments": 1, + "show_list": 1, + "show_sidebar": 1, + "title": "Business Contacts", + "web_form_fields": [ + { + "allow_read_on_all_link_options": 0, + "fieldname": "first_name", + "fieldtype": "Data", + "hidden": 0, + "label": "First Name", + "max_length": 0, + "max_value": 0, + "precision": "", + "read_only": 0, + "reqd": 0, + "show_in_filter": 0 + }, + { + "allow_read_on_all_link_options": 0, + "fieldname": "last_name", + "fieldtype": "Data", + "hidden": 0, + "label": "Last Name", + "max_length": 0, + "max_value": 0, + "precision": "", + "read_only": 0, + "reqd": 0, + "show_in_filter": 0 + }, + { + "allow_read_on_all_link_options": 0, + "fieldname": "company_name", + "fieldtype": "Data", + "hidden": 0, + "label": "Company Legal Name", + "max_length": 0, + "max_value": 0, + "precision": "", + "read_only": 0, + "reqd": 0, + "show_in_filter": 0 + }, + { + "allow_read_on_all_link_options": 0, + "fieldname": "designation", + "fieldtype": "Data", + "hidden": 0, + "label": "Relationship to Business", + "max_length": 0, + "max_value": 0, + "precision": "", + "read_only": 0, + "reqd": 0, + "show_in_filter": 0 + }, + { + "allow_read_on_all_link_options": 0, + "fieldname": "email_ids", + "fieldtype": "Table", + "hidden": 0, + "label": "Email IDs", + "max_length": 0, + "max_value": 0, + "options": "Contact Email", + "precision": "", + "read_only": 0, + "reqd": 0, + "show_in_filter": 0 + }, + { + "allow_read_on_all_link_options": 0, + "fieldname": "phone_nos", + "fieldtype": "Table", + "hidden": 0, + "label": "Phone Numbers", + "max_length": 0, + "max_value": 0, + "options": "Contact Phone", + "precision": "", + "read_only": 0, + "reqd": 0, + "show_in_filter": 0 + }, + { + "allow_read_on_all_link_options": 0, + "description": "Link contact to existing address record", + "fieldname": "address", + "fieldtype": "Link", + "hidden": 0, + "label": "Address Record", + "max_length": 0, + "max_value": 0, + "options": "Address", + "precision": "", + "read_only": 0, + "reqd": 0, + "show_in_filter": 0 + }, + { + "allow_read_on_all_link_options": 0, + "default": "0", + "fieldname": "is_primary_contact", + "fieldtype": "Check", + "hidden": 0, + "label": "Is Primary Contact", + "max_length": 0, + "max_value": 0, + "precision": "", + "read_only": 0, + "reqd": 0, + "show_in_filter": 0 + }, + { + "allow_read_on_all_link_options": 0, + "fieldname": "is_billing_contact", + "fieldtype": "Check", + "hidden": 0, + "label": "Is Billing Contact", + "max_length": 0, + "max_value": 0, + "precision": "", + "read_only": 0, + "reqd": 0, + "show_in_filter": 0 + } + ], + "website_sidebar": "Member Sidebar" +} \ No newline at end of file diff --git a/member_management/member_management/web_form/business_contacts/business_contacts.py b/member_management/member_management/web_form/business_contacts/business_contacts.py new file mode 100644 index 0000000..e1ada61 --- /dev/null +++ b/member_management/member_management/web_form/business_contacts/business_contacts.py @@ -0,0 +1,5 @@ +import frappe + +def get_context(context): + # do your magic here + pass 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 index 2eb4e74..5b9dd9e 100644 --- a/member_management/member_management/web_form/member_profile/member_profile.json +++ b/member_management/member_management/web_form/member_profile/member_profile.json @@ -14,7 +14,7 @@ "docstatus": 0, "doctype": "Web Form", "idx": 0, - "introduction_text": "

Please provide required membership information on this form.


Member Details
  1. Confirm your legal business name
  2. Your Member ID is pre-generated and cannot be changed
  3. Risk class is determined by the Authorizing Jurisdiction. You may leave it blank if unsure.
  4. Type 1 is prepackaged commercial food (grocery items)
  5. Type 2 is limited preparation of pre-cooked food, bread, or other low-risk items
  6. Type 3 includes preparation of melons, dairy, raw meat or fish, or complex operations involving reheating or hot holding of food. Most members are Type 3.
  7. Please provide your EIN if your are organized as an LLC, S or C corp.


Corporate Identity Documents

Upload one per required document type.


Corporation (including LLC):

  1. Certificate of Formation (example)
  2. State Business Registration Certificate (example)
  3. Certificate of Trade Name, if any (example)
  4. IRS EIN Letter (example)


Sole Proprietorship:

  1. Certificate of Trade Name


All Business Types:

  1. State Sales Tax Registration Certificate (example)


Food Protection Manager Certificate

Risk Type 3 members must upload a valid unexpired food protection manager certificate from an acceptable issuer.


Insurance

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.


Inspection Records

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.


Menu

A menu is required to be submitted to the authorizing jurisdiction to determine risk type. This will be submitted with any application paperwork.


Associates

All employees or business associates who will be present in the facility must be individually identified.

  1. Each person with access to the facility should have an individual record in this list. Each record may have multiple contact entries for email and phone as necessary.
  2. Every person must have an associated photo identification document. Acceptable documents include a Driver's License, Passport, or State-issued ID card.
Agreements

Your member contracts will appear here when completed.

", + "introduction_text": "

Please provide required membership information on this form.


Member Details
  1. Confirm your legal business name
  2. Your Member ID is pre-generated and cannot be changed
  3. Risk class is determined by the Authorizing Jurisdiction. You may leave it blank if unsure.
  4. Type 1 is prepackaged commercial food (grocery items)
  5. Type 2 is limited preparation of pre-cooked food, bread, or other low-risk items
  6. Type 3 includes preparation of melons, dairy, raw meat or fish, or complex operations involving reheating or hot holding of food. Most members are Type 3.
  7. Please provide your EIN if your are organized as an LLC, S or C corp.



For other sections, please navigate to the specific topic on the left sidebar for instructions and examples.


", "is_standard": 1, "list_columns": [ { @@ -42,7 +42,7 @@ "list_title": "Member Profile", "login_required": 1, "max_attachment_size": 0, - "modified": "2025-11-17 11:19:01.733553", + "modified": "2025-11-17 18:22:20.059402", "modified_by": "Administrator", "module": "Member Management", "name": "member-profile",