diff --git a/westech_r2/__pycache__/__init__.cpython-312.pyc b/westech_r2/__pycache__/__init__.cpython-312.pyc index 0b2fbe3..d4af1d0 100644 Binary files a/westech_r2/__pycache__/__init__.cpython-312.pyc and b/westech_r2/__pycache__/__init__.cpython-312.pyc differ diff --git a/westech_r2/__pycache__/hooks.cpython-312.pyc b/westech_r2/__pycache__/hooks.cpython-312.pyc index c0831a1..286ba05 100644 Binary files a/westech_r2/__pycache__/hooks.cpython-312.pyc and b/westech_r2/__pycache__/hooks.cpython-312.pyc differ diff --git a/westech_r2/fixtures/client_script.json b/westech_r2/fixtures/client_script.json index 07c0734..0879b39 100644 --- a/westech_r2/fixtures/client_script.json +++ b/westech_r2/fixtures/client_script.json @@ -1,23 +1,29 @@ [ { - "name": "Pallet - View Serials", - "dt": "Pallet", - "script": "frappe.ui.form.on('Pallet', {\n refresh: function(frm) {\n frm.add_custom_button(__('View Serials'), function() {\n frappe.set_route('List', 'Serial No', {\n 'pallet': frm.doc.pallet_number || frm.doc.name\n });\n }, __('View'));\n \n frm.add_custom_button(__('Serials Spreadsheet'), function() {\n frappe.set_route('query-report', 'Serial Nos by Pallet', {\n 'pallet': frm.doc.pallet_number || frm.doc.name\n });\n }, __('View'));\n }\n});\n", + "name": "Scheduled Pickup - Auto Fill", + "dt": "Scheduled Pickup", "view": "Form", - "enabled": 1 + "module": null, + "enabled": 1, + "script": "frappe.ui.form.on('Scheduled Pickup', {\n customer_number: function(frm) {\n var customer = frm.doc.customer_number;\n if (!customer) {\n clear_supplier_fields(frm);\n return;\n }\n frappe.call({\n method: 'frappe.client.get',\n args: {doctype: 'Supplier', name: customer},\n callback: function(r) {\n if (!r.message) return;\n var s = r.message;\n if (!frm.doc.company_name && s.supplier_name) {\n frm.set_value('company_name', s.supplier_name);\n }\n if (s.supplier_primary_contact) {\n frappe.call({\n method: 'frappe.client.get',\n args: {doctype: 'Contact', name: s.supplier_primary_contact},\n callback: function(cr) {\n if (!cr.message) return;\n var ct = cr.message;\n var full_name = [ct.first_name, ct.last_name].filter(Boolean).join(' ');\n if (!frm.doc.contact_name) frm.set_value('contact_name', full_name);\n if (!frm.doc.contact_phone) frm.set_value('contact_phone', ct.phone || '');\n if (!frm.doc.contact_email) frm.set_value('contact_email', ct.email_id || '');\n }\n });\n }\n if (s.supplier_primary_address) {\n frappe.call({\n method: 'frappe.client.get',\n args: {doctype: 'Address', name: s.supplier_primary_address},\n callback: function(ar) {\n if (!ar.message) return;\n var a = ar.message;\n if (!frm.doc.address_line) frm.set_value('address_line', a.address_line1 || '');\n if (!frm.doc.city) frm.set_value('city', a.city || '');\n if (!frm.doc.state) frm.set_value('state', a.state || '');\n if (!frm.doc.zip_code) frm.set_value('zip_code', a.pincode || '');\n }\n });\n }\n if (s.geocoded && s.latitude && s.longitude) {\n frm.set_value('latitude', s.latitude);\n frm.set_value('longitude', s.longitude);\n frm.set_value('geocoded', 1);\n }\n }\n });\n }\n});\n\nfunction clear_supplier_fields(frm) {\n frm.set_value('company_name', '');\n frm.set_value('contact_name', '');\n frm.set_value('contact_phone', '');\n frm.set_value('contact_email', '');\n frm.set_value('address_line', '');\n frm.set_value('city', '');\n frm.set_value('state', '');\n frm.set_value('zip_code', '');\n frm.set_value('latitude', '');\n frm.set_value('longitude', '');\n frm.set_value('geocoded', 0);\n}\n", + "doctype": "Client Script" }, { "name": "Load - View Pallets Button", "dt": "Load", - "script": "frappe.ui.form.on('Load', {\n refresh: function(frm) {\n frm.add_custom_button(__('View Pallets'), function() {\n frappe.set_route('List', 'Pallet', {'load': frm.doc.name});\n }, __('Actions'));\n }\n});\n", "view": "Form", - "enabled": 1 + "module": null, + "enabled": 1, + "script": "frappe.ui.form.on('Load', {\n refresh: function(frm) {\n frm.add_custom_button(__('View Pallets'), function() {\n frappe.set_route('List', 'Pallet', {'load': frm.doc.name});\n }, __('Actions'));\n }\n});\n", + "doctype": "Client Script" }, { - "name": "Scheduled Pickup - Auto Fill", - "dt": "Scheduled Pickup", - "script": "frappe.ui.form.on('Scheduled Pickup', {\n customer_number: function(frm) {\n var customer = frm.doc.customer_number;\n if (!customer) {\n clear_supplier_fields(frm);\n return;\n }\n frappe.call({\n method: 'frappe.client.get',\n args: {doctype: 'Supplier', name: customer},\n callback: function(r) {\n if (!r.message) return;\n var s = r.message;\n if (!frm.doc.company_name && s.supplier_name) {\n frm.set_value('company_name', s.supplier_name);\n }\n if (s.supplier_primary_contact) {\n frappe.call({\n method: 'frappe.client.get',\n args: {doctype: 'Contact', name: s.supplier_primary_contact},\n callback: function(cr) {\n if (!cr.message) return;\n var ct = cr.message;\n var full_name = [ct.first_name, ct.last_name].filter(Boolean).join(' ');\n if (!frm.doc.contact_name) frm.set_value('contact_name', full_name);\n if (!frm.doc.contact_phone) frm.set_value('contact_phone', ct.phone || '');\n if (!frm.doc.contact_email) frm.set_value('contact_email', ct.email_id || '');\n }\n });\n }\n if (s.supplier_primary_address) {\n frappe.call({\n method: 'frappe.client.get',\n args: {doctype: 'Address', name: s.supplier_primary_address},\n callback: function(ar) {\n if (!ar.message) return;\n var a = ar.message;\n if (!frm.doc.address_line) frm.set_value('address_line', a.address_line1 || '');\n if (!frm.doc.city) frm.set_value('city', a.city || '');\n if (!frm.doc.state) frm.set_value('state', a.state || '');\n if (!frm.doc.zip_code) frm.set_value('zip_code', a.pincode || '');\n }\n });\n }\n if (s.geocoded && s.latitude && s.longitude) {\n frm.set_value('latitude', s.latitude);\n frm.set_value('longitude', s.longitude);\n frm.set_value('geocoded', 1);\n }\n }\n });\n }\n});\n\nfunction clear_supplier_fields(frm) {\n frm.set_value('company_name', '');\n frm.set_value('contact_name', '');\n frm.set_value('contact_phone', '');\n frm.set_value('contact_email', '');\n frm.set_value('address_line', '');\n frm.set_value('city', '');\n frm.set_value('state', '');\n frm.set_value('zip_code', '');\n frm.set_value('latitude', '');\n frm.set_value('longitude', '');\n frm.set_value('geocoded', 0);\n}\n", + "name": "Pallet - View Serials", + "dt": "Pallet", "view": "Form", - "enabled": 1 + "module": null, + "enabled": 1, + "script": "frappe.ui.form.on('Pallet', {\n refresh: function(frm) {\n frm.add_custom_button(__('View Serials'), function() {\n frappe.set_route('List', 'Serial No', {\n 'pallet': frm.doc.pallet_number || frm.doc.name\n });\n }, __('View'));\n \n frm.add_custom_button(__('Serials Spreadsheet'), function() {\n frappe.set_route('query-report', 'Serial Nos by Pallet', {\n 'pallet': frm.doc.pallet_number || frm.doc.name\n });\n }, __('View'));\n }\n});\n", + "doctype": "Client Script" } ] \ No newline at end of file diff --git a/westech_r2/fixtures/workspace.json b/westech_r2/fixtures/workspace.json index 6b28a0e..7a84576 100644 --- a/westech_r2/fixtures/workspace.json +++ b/westech_r2/fixtures/workspace.json @@ -15,160 +15,8 @@ "is_hidden": 0, "content": "[{\"type\": \"header\", \"data\": {\"text\": \"Westech Recyclers\"}}, {\"type\": \"shortcut\", \"data\": {\"shortcut_name\": \"New Intake\"}}, {\"type\": \"shortcut\", \"data\": {\"shortcut_name\": \"Pallets\"}}, {\"type\": \"shortcut\", \"data\": {\"shortcut_name\": \"Pallet List\"}}, {\"type\": \"shortcut\", \"data\": {\"shortcut_name\": \"Scheduled Pickups\"}}, {\"type\": \"shortcut\", \"data\": {\"shortcut_name\": \"Route Planner\"}}, {\"type\": \"spacer\", \"data\": {}}, {\"type\": \"header\", \"data\": {\"text\": \"Tools\"}}, {\"type\": \"shortcut\", \"data\": {\"shortcut_name\": \"EIM Device Portal\"}}, {\"type\": \"shortcut\", \"data\": {\"shortcut_name\": \"R2 Data Tracking\"}}, {\"type\": \"shortcut\", \"data\": {\"shortcut_name\": \"Wes AI Assistant\"}}, {\"type\": \"spacer\", \"data\": {}}, {\"type\": \"header\", \"data\": {\"text\": \"Records\"}}, {\"type\": \"shortcut\", \"data\": {\"shortcut_name\": \"Customers\"}}, {\"type\": \"shortcut\", \"data\": {\"shortcut_name\": \"Suppliers\"}}]", "doctype": "Workspace", - "number_cards": [], - "roles": [], - "charts": [], - "custom_blocks": [], - "shortcuts": [ - { - "name": "udas5ds8ot", - "type": "Page", - "link_to": "intake", - "url": null, - "doc_view": "", - "kanban_board": null, - "label": "New Intake", - "icon": "add", - "restrict_to_domain": null, - "report_ref_doctype": null, - "stats_filter": null, - "color": null, - "format": null, - "doctype": "Workspace Shortcut" - }, - { - "name": "udait4ne28", - "type": "Page", - "link_to": "eim-portal", - "url": null, - "doc_view": "", - "kanban_board": null, - "label": "EIM Device Portal", - "icon": "scan", - "restrict_to_domain": null, - "report_ref_doctype": null, - "stats_filter": null, - "color": null, - "format": null, - "doctype": "Workspace Shortcut" - }, - { - "name": "uda22lpk4d", - "type": "Page", - "link_to": "r2-tracking", - "url": null, - "doc_view": "", - "kanban_board": null, - "label": "R2 Data Tracking", - "icon": "table", - "restrict_to_domain": null, - "report_ref_doctype": null, - "stats_filter": null, - "color": null, - "format": null, - "doctype": "Workspace Shortcut" - }, - { - "name": "uda1ujmmbm", - "type": "DocType", - "link_to": "Pallet", - "url": null, - "doc_view": "", - "kanban_board": null, - "label": "Pallets", - "icon": "stock", - "restrict_to_domain": null, - "report_ref_doctype": null, - "stats_filter": null, - "color": null, - "format": null, - "doctype": "Workspace Shortcut" - }, - { - "name": "udacp7r9mm", - "type": "DocType", - "link_to": "Customer", - "url": null, - "doc_view": "", - "kanban_board": null, - "label": "Customers", - "icon": "customer", - "restrict_to_domain": null, - "report_ref_doctype": null, - "stats_filter": null, - "color": null, - "format": null, - "doctype": "Workspace Shortcut" - }, - { - "name": "udata7hnp2", - "type": "DocType", - "link_to": "Supplier", - "url": null, - "doc_view": "", - "kanban_board": null, - "label": "Suppliers", - "icon": "users", - "restrict_to_domain": null, - "report_ref_doctype": null, - "stats_filter": null, - "color": null, - "format": null, - "doctype": "Workspace Shortcut" - }, - { - "name": "32sa54pcd0", - "type": "Page", - "link_to": "pallet-list", - "url": null, - "doc_view": "", - "kanban_board": null, - "label": "Pallet List", - "icon": "list", - "restrict_to_domain": null, - "report_ref_doctype": null, - "stats_filter": null, - "color": null, - "format": null, - "doctype": "Workspace Shortcut" - }, - { - "name": "dur8jjfd70", - "type": "Page", - "link_to": "route-planner", - "url": null, - "doc_view": "", - "kanban_board": null, - "label": "Route Planner", - "icon": "map", - "restrict_to_domain": null, - "report_ref_doctype": null, - "stats_filter": null, - "color": null, - "format": null, - "doctype": "Workspace Shortcut" - }, - { - "name": "durrgfv1f7", - "type": "DocType", - "link_to": "Scheduled Pickup", - "url": null, - "doc_view": "List", - "kanban_board": null, - "label": "Scheduled Pickups", - "icon": "calendar", - "restrict_to_domain": null, - "report_ref_doctype": null, - "stats_filter": null, - "color": null, - "format": null, - "doctype": "Workspace Shortcut" - } - ], - "quick_lists": [], "links": [ { - "name": "a3kfn55i4u", "type": "Card Break", "label": "Stock", "icon": null, @@ -182,10 +30,11 @@ "onboard": 0, "is_query_report": 0, "link_count": 0, - "doctype": "Workspace Link" + "doctype": "Workspace Link", + "parentfield": "links", + "parenttype": "Workspace" }, { - "name": "a3khtlprab", "type": "Link", "label": "Warehouses", "icon": null, @@ -199,10 +48,11 @@ "onboard": 0, "is_query_report": 0, "link_count": 0, - "doctype": "Workspace Link" + "doctype": "Workspace Link", + "parentfield": "links", + "parenttype": "Workspace" }, { - "name": "a3kfh5qu2i", "type": "Link", "label": "Serial Nos", "icon": null, @@ -216,10 +66,11 @@ "onboard": 0, "is_query_report": 0, "link_count": 0, - "doctype": "Workspace Link" + "doctype": "Workspace Link", + "parentfield": "links", + "parenttype": "Workspace" }, { - "name": "a3kd2bjk00", "type": "Link", "label": "Stock Entry", "icon": null, @@ -233,10 +84,11 @@ "onboard": 0, "is_query_report": 0, "link_count": 0, - "doctype": "Workspace Link" + "doctype": "Workspace Link", + "parentfield": "links", + "parenttype": "Workspace" }, { - "name": "a3k18ofk9m", "type": "Link", "label": "Pallets", "icon": null, @@ -250,10 +102,11 @@ "onboard": 0, "is_query_report": 0, "link_count": 0, - "doctype": "Workspace Link" + "doctype": "Workspace Link", + "parentfield": "links", + "parenttype": "Workspace" }, { - "name": "a3knidvhdq", "type": "Link", "label": "Stock Balance", "icon": null, @@ -267,10 +120,11 @@ "onboard": 0, "is_query_report": 0, "link_count": 0, - "doctype": "Workspace Link" + "doctype": "Workspace Link", + "parentfield": "links", + "parenttype": "Workspace" }, { - "name": "q8h2lf3bto", "type": "Card Break", "label": "R2 Tracking", "icon": "octicon octicon-shield-check", @@ -284,10 +138,11 @@ "onboard": 0, "is_query_report": 0, "link_count": 0, - "doctype": "Workspace Link" + "doctype": "Workspace Link", + "parentfield": "links", + "parenttype": "Workspace" }, { - "name": "q8hvn93ud9", "type": "Link", "label": "Loads", "icon": null, @@ -301,8 +156,187 @@ "onboard": 0, "is_query_report": 0, "link_count": 0, - "doctype": "Workspace Link" + "doctype": "Workspace Link", + "parentfield": "links", + "parenttype": "Workspace" } - ] + ], + "quick_lists": [], + "custom_blocks": [], + "roles": [], + "number_cards": [], + "shortcuts": [ + { + "type": "Page", + "link_to": "intake", + "url": null, + "doc_view": "", + "kanban_board": null, + "label": "New Intake", + "icon": "add", + "restrict_to_domain": null, + "report_ref_doctype": null, + "stats_filter": null, + "color": null, + "format": null, + "doctype": "Workspace Shortcut", + "parentfield": "shortcuts", + "parenttype": "Workspace" + }, + { + "type": "Page", + "link_to": "eim-portal", + "url": null, + "doc_view": "", + "kanban_board": null, + "label": "EIM Device Portal", + "icon": "scan", + "restrict_to_domain": null, + "report_ref_doctype": null, + "stats_filter": null, + "color": null, + "format": null, + "doctype": "Workspace Shortcut", + "parentfield": "shortcuts", + "parenttype": "Workspace" + }, + { + "type": "Page", + "link_to": "r2-tracking", + "url": null, + "doc_view": "", + "kanban_board": null, + "label": "R2 Data Tracking", + "icon": "table", + "restrict_to_domain": null, + "report_ref_doctype": null, + "stats_filter": null, + "color": null, + "format": null, + "doctype": "Workspace Shortcut", + "parentfield": "shortcuts", + "parenttype": "Workspace" + }, + { + "type": "DocType", + "link_to": "Pallet", + "url": null, + "doc_view": "", + "kanban_board": null, + "label": "Pallets", + "icon": "stock", + "restrict_to_domain": null, + "report_ref_doctype": null, + "stats_filter": null, + "color": null, + "format": null, + "doctype": "Workspace Shortcut", + "parentfield": "shortcuts", + "parenttype": "Workspace" + }, + { + "type": "DocType", + "link_to": "Customer", + "url": null, + "doc_view": "", + "kanban_board": null, + "label": "Customers", + "icon": "customer", + "restrict_to_domain": null, + "report_ref_doctype": null, + "stats_filter": null, + "color": null, + "format": null, + "doctype": "Workspace Shortcut", + "parentfield": "shortcuts", + "parenttype": "Workspace" + }, + { + "type": "DocType", + "link_to": "Supplier", + "url": null, + "doc_view": "", + "kanban_board": null, + "label": "Suppliers", + "icon": "users", + "restrict_to_domain": null, + "report_ref_doctype": null, + "stats_filter": null, + "color": null, + "format": null, + "doctype": "Workspace Shortcut", + "parentfield": "shortcuts", + "parenttype": "Workspace" + }, + { + "type": "Page", + "link_to": "pallet-list", + "url": null, + "doc_view": "", + "kanban_board": null, + "label": "Pallet List", + "icon": "list", + "restrict_to_domain": null, + "report_ref_doctype": null, + "stats_filter": null, + "color": null, + "format": null, + "doctype": "Workspace Shortcut", + "parentfield": "shortcuts", + "parenttype": "Workspace" + }, + { + "type": "Page", + "link_to": "route-planner", + "url": null, + "doc_view": "", + "kanban_board": null, + "label": "Route Planner", + "icon": "map", + "restrict_to_domain": null, + "report_ref_doctype": null, + "stats_filter": null, + "color": null, + "format": null, + "doctype": "Workspace Shortcut", + "parentfield": "shortcuts", + "parenttype": "Workspace" + }, + { + "type": "DocType", + "link_to": "Scheduled Pickup", + "url": null, + "doc_view": "List", + "kanban_board": null, + "label": "Scheduled Pickups", + "icon": "calendar", + "restrict_to_domain": null, + "report_ref_doctype": null, + "stats_filter": null, + "color": null, + "format": null, + "doctype": "Workspace Shortcut", + "parentfield": "shortcuts", + "parenttype": "Workspace" + }, + { + "type": "DocType", + "link_to": "Truck Profile", + "url": null, + "doc_view": "", + "kanban_board": null, + "label": "Truck Profiles", + "icon": "truck", + "restrict_to_domain": null, + "report_ref_doctype": null, + "stats_filter": null, + "color": null, + "format": null, + "doctype": "Workspace Shortcut", + "parentfield": "shortcuts", + "parenttype": "Workspace" + } + ], + "charts": [] } ] \ No newline at end of file diff --git a/westech_r2/westech_r2/__pycache__/__init__.cpython-312.pyc b/westech_r2/westech_r2/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..7e452d0 Binary files /dev/null and b/westech_r2/westech_r2/__pycache__/__init__.cpython-312.pyc differ diff --git a/westech_r2/westech_r2/workspace/westech/westech.json b/westech_r2/westech_r2/workspace/westech/westech.json new file mode 100644 index 0000000..4d302c2 --- /dev/null +++ b/westech_r2/westech_r2/workspace/westech/westech.json @@ -0,0 +1,186 @@ +{ + "charts": [], + "content": "[{\"type\": \"header\", \"data\": {\"text\": \"Westech Recyclers\"}}, {\"type\": \"shortcut\", \"data\": {\"shortcut_name\": \"New Intake\"}}, {\"type\": \"shortcut\", \"data\": {\"shortcut_name\": \"Pallets\"}}, {\"type\": \"shortcut\", \"data\": {\"shortcut_name\": \"Pallet List\"}}, {\"type\": \"shortcut\", \"data\": {\"shortcut_name\": \"Scheduled Pickups\"}}, {\"type\": \"shortcut\", \"data\": {\"shortcut_name\": \"Route Planner\"}}, {\"type\": \"spacer\", \"data\": {}}, {\"type\": \"header\", \"data\": {\"text\": \"Tools\"}}, {\"type\": \"shortcut\", \"data\": {\"shortcut_name\": \"EIM Device Portal\"}}, {\"type\": \"shortcut\", \"data\": {\"shortcut_name\": \"R2 Data Tracking\"}}, {\"type\": \"shortcut\", \"data\": {\"shortcut_name\": \"Wes AI Assistant\"}}, {\"type\": \"spacer\", \"data\": {}}, {\"type\": \"header\", \"data\": {\"text\": \"Records\"}}, {\"type\": \"shortcut\", \"data\": {\"shortcut_name\": \"Customers\"}}, {\"type\": \"shortcut\", \"data\": {\"shortcut_name\": \"Suppliers\"}}]", + "creation": "2026-05-16 17:36:54.540512", + "custom_blocks": [], + "docstatus": 0, + "doctype": "Workspace", + "hide_custom": 0, + "icon": "stock", + "idx": 0, + "indicator_color": "green", + "is_hidden": 0, + "label": "Westech", + "links": [ + { + "dependencies": "", + "hidden": 0, + "is_query_report": 0, + "label": "Stock", + "link_count": 0, + "link_to": "", + "link_type": "DocType", + "onboard": 0, + "type": "Card Break" + }, + { + "dependencies": "", + "hidden": 0, + "is_query_report": 0, + "label": "Warehouses", + "link_count": 0, + "link_to": "Warehouse", + "link_type": "DocType", + "onboard": 0, + "type": "Link" + }, + { + "dependencies": "", + "hidden": 0, + "is_query_report": 0, + "label": "Serial Nos", + "link_count": 0, + "link_to": "Serial No", + "link_type": "DocType", + "onboard": 0, + "type": "Link" + }, + { + "dependencies": "", + "hidden": 0, + "is_query_report": 0, + "label": "Stock Entry", + "link_count": 0, + "link_to": "Stock Entry", + "link_type": "DocType", + "onboard": 0, + "type": "Link" + }, + { + "dependencies": "", + "hidden": 0, + "is_query_report": 0, + "label": "Pallets", + "link_count": 0, + "link_to": "Pallet", + "link_type": "DocType", + "onboard": 0, + "type": "Link" + }, + { + "dependencies": "", + "hidden": 0, + "is_query_report": 0, + "label": "Stock Balance", + "link_count": 0, + "link_to": "Stock Balance", + "link_type": "Report", + "onboard": 0, + "report_ref_doctype": "Stock Ledger Entry", + "type": "Link" + }, + { + "hidden": 0, + "icon": "octicon octicon-shield-check", + "is_query_report": 0, + "label": "R2 Tracking", + "link_count": 0, + "link_type": "DocType", + "onboard": 0, + "type": "Card Break" + }, + { + "hidden": 0, + "is_query_report": 0, + "label": "Loads", + "link_count": 0, + "link_to": "Load", + "link_type": "DocType", + "onboard": 0, + "type": "Link" + } + ], + "modified": "2026-05-16 18:45:11.778496", + "modified_by": "Administrator", + "module": "Westech R2", + "name": "Westech", + "number_cards": [], + "owner": "Administrator", + "public": 1, + "quick_lists": [], + "roles": [], + "sequence_id": 0.0, + "shortcuts": [ + { + "doc_view": "", + "icon": "add", + "label": "New Intake", + "link_to": "intake", + "type": "Page" + }, + { + "doc_view": "", + "icon": "scan", + "label": "EIM Device Portal", + "link_to": "eim-portal", + "type": "Page" + }, + { + "doc_view": "", + "icon": "table", + "label": "R2 Data Tracking", + "link_to": "r2-tracking", + "type": "Page" + }, + { + "doc_view": "", + "icon": "stock", + "label": "Pallets", + "link_to": "Pallet", + "type": "DocType" + }, + { + "doc_view": "", + "icon": "customer", + "label": "Customers", + "link_to": "Customer", + "type": "DocType" + }, + { + "doc_view": "", + "icon": "users", + "label": "Suppliers", + "link_to": "Supplier", + "type": "DocType" + }, + { + "doc_view": "", + "icon": "list", + "label": "Pallet List", + "link_to": "pallet-list", + "type": "Page" + }, + { + "doc_view": "", + "icon": "map", + "label": "Route Planner", + "link_to": "route-planner", + "type": "Page" + }, + { + "doc_view": "List", + "icon": "calendar", + "label": "Scheduled Pickups", + "link_to": "Scheduled Pickup", + "type": "DocType" + }, + { + "doc_view": "", + "icon": "truck", + "label": "Truck Profiles", + "link_to": "Truck Profile", + "type": "DocType" + } + ], + "title": "Westech" +} \ No newline at end of file