This app packages Sales Order customizations so they can be moved to another server.
Backend design:
- Custom Fields (
Sales Order) includingcustom_detail_statusandcustom_po_item - Client logic moved to app files:
order_tracking_report/public/js/sales_order.js(detail status + SO actions)order_tracking_report/public/js/data_entry/*.js(Data Entry on Sales Order, Sales Invoice, Purchase Order, Purchase Receipt, Purchase Invoice, Stock Entry)
- Property Setters (
Sales Order) - API logic moved to app file:
order_tracking_report/api.py - Detail status backend engine:
order_tracking_report/so_detail_status_backend.py - Legacy
Client ScriptandServer Scriptrecords are auto-removed by:order_tracking_report.cleanup.remove_legacy_ui_scripts(hook:after_migrate)
- Purchase Order -> Item PO status sync is now app
doc_events:order_tracking_report.po_sync.sync_item_po_status_for_purchase_order- old
Status update Creat PO from SO_po_tab*server scripts are removed on migrate
- Child table dependency is auto-ensured by:
order_tracking_report.bootstrap.ensure_item_po_setup(createsItem PODoctype/fields if missing)
Included fixtures:
Custom FieldProperty SetterPrint Format
Install on new server/site:
cd /home/frappe/frappe-bench
bench get-app --branch main order_tracking_report https://github.com/ERPNEXT-PAKISTAN/Order-Tracking-Report.git
bench --site site1.local install-app order_tracking_report
bench --site site1.local migrate
bench --site site1.local clear-cache
bench restartIf your server already has old UI scripts/fields, install is still safe:
- Existing fields with same name are updated by fixtures.
- Legacy app script records are removed on migrate (exact known names only).
If git pull origin main fails with:
fatal: 'origin' does not appear to be a git repository
then app folder is not linked to remote yet. Run one-time setup:
cd /home/frappe/frappe-bench/apps/order_tracking_report
git init
git remote add origin https://github.com/ERPNEXT-PAKISTAN/Order-Tracking-Report.git
git fetch origin
git checkout -B main origin/mainRegular update command:
cd /home/frappe/frappe-bench/apps/order_tracking_report
git pull origin main
cd /home/frappe/frappe-bench
bench --site site1.local migrate
bench --site site1.local clear-cache
bench restartImportant:
- Use
/home/frappe/frappe-benchfor all commands on this setup.
Use this when updating the app on another server and you want Sales Order changes to load cleanly.
- Go to the app folder:
cd /home/frappe/frappe-bench/apps/order_tracking_report- Pull the latest code:
git pull origin main- Go back to bench folder:
cd /home/frappe/frappe-bench- Run migrate on the target site:
bench --site site1.local migrate- Clear cache:
bench --site site1.local clear-cache- Restart services:
bench restart- Verify in ERPNext:
- Open
Sales Order - Confirm custom fields are visible
- Confirm Sales Order custom JS is loading correctly
- Confirm default ERPNext buttons like
CreateandUpdate Itemsstill show - Confirm report and related Sales Order actions work as expected
If the server is installing this app for the first time, use the Installation section above instead of only this checklist.
cd /home/frappe/frappe-bench/apps/order_tracking_report
git pull origin main
cd /home/frappe/frappe-bench
bench --site site2.local migrate
bench --site site2.local clear-cache
bench restartIf this app folder is not linked to GitHub yet:
cd /home/frappe/frappe-bench/apps/order_tracking_report
git init
git remote add origin https://github.com/ERPNEXT-PAKISTAN/Order-Tracking-Report.git
git fetch origin
git checkout -B main origin/main- Core Backend
apps/order_tracking_report/
order_tracking_report/
hooks.py
api.py
bootstrap.py
so_detail_status_backend.py
cleanup.py
- Frontend JS (inside app)
apps/order_tracking_report/
order_tracking_report/public/js/
sales_order.js
data_entry/
sales_order_data_entry.js
sales_invoice_data_entry.js
purchase_order_data_entry.js
purchase_receipt_data_entry.js
purchase_invoice_data_entry.js
stock_entry_data_entry.js
- Fixtures and Reports
apps/order_tracking_report/
order_tracking_report/fixtures/
custom_field.json
property_setter.json
print_format.json
order_tracking_report/order_tracking_report/report/
purchase_order_updated_status/
purchase_order_updated_status.py
purchase_order_updated_status.js
purchase_order_updated_status.json
Store screenshots in:
docs/images/
Example markdown syntax:
With custom size (HTML):
<img src="docs/images/dashboard.png" alt="Dashboard" width="900">mit