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