Most desktop screens are generated from metadata by the generic widgets. This reference lists the hand-written screens in the seven folders of src/cluster_erp/desktop/modules/, how a sidebar section reaches each one, the server routes each calls, and what each adds. Business rules behind the routes are documented on the module pages linked in each section.
Scope and source¶
- Defined in:
src/cluster_erp/desktop/modules/and the registry_CUSTOM_WIDGET_REGISTRY(src/cluster_erp/desktop/widgets/main_window.py:501-528). - Count: 7 folders. 13 Python files with code, found by listing non-empty
.pyfiles. 10 registry entries. The folderpurchasing_quotationsholds only an empty__init__.py. - Server routes were collected by searching each file for string literals that start with a module path. Paths are relative to the API base.
How a section reaches a screen¶
A sidebar section with view_type custom names a custom_widget. MainWindow looks up <module>.<custom_widget> in the registry, imports the class, and calls it with the API client, the signal bus, the translator, the metadata store, and the foreign-key cache (src/cluster_erp/desktop/widgets/main_window.py:530-553). The sidebar hides a custom section whose key is not in the registry (src/cluster_erp/desktop/widgets/sidebar.py:217-221).
| Registry key | Class | File |
|---|---|---|
production.scheduling_board |
SchedulingBoard |
src/cluster_erp/desktop/modules/production/scheduling_board.py:1474 |
procurement.mrp_exception_workbench |
ExceptionWorkbench |
src/cluster_erp/desktop/modules/procurement/mrp/exception_workbench.py:105 |
procurement.mrp_planned_orders |
PlannedOrdersView |
src/cluster_erp/desktop/modules/procurement/mrp/planned_orders.py:67 |
procurement.mrp_dashboard |
MrpDashboard |
src/cluster_erp/desktop/modules/procurement/mrp/dashboard.py:152 |
procurement.mrp_stock_requirements |
StockRequirementsView |
src/cluster_erp/desktop/modules/procurement/mrp/stock_requirements.py:73 |
logs.activity_log_view |
ActivityLogView |
src/cluster_erp/desktop/modules/logs/activity_log_view.py:310 |
logs.error_log_view |
ErrorLogView |
src/cluster_erp/desktop/modules/logs/error_log_view.py:230 |
inventory.warehouse_dashboard |
WarehouseDashboard |
src/cluster_erp/desktop/modules/inventory/warehouse_dashboard.py:258 |
bom.bom_explorer |
BomExplorer |
src/cluster_erp/desktop/modules/bom/bom_explorer.py:1054 |
calendars.global_calendar |
GlobalCalendarView |
src/cluster_erp/desktop/modules/calendars/global_calendar_view.py:55 |
Three more classes are not in the registry. BomBuilderPanel is embedded in BomExplorer (src/cluster_erp/desktop/modules/bom/bom_explorer.py:1494-1497). TimePhasedDialog and PeggingDialog open from PlannedOrdersView (src/cluster_erp/desktop/modules/procurement/mrp/planned_orders.py:492-519).
Bill of materials¶
BomExplorer is a two-tab explorer. The docstring describes a component tree fed by GET /bom/bom-versions/{id}/tree, with drill-down and a where-used view, and an operation tree for routings with inline standard-time editing and input assignment (src/cluster_erp/desktop/modules/bom/bom_explorer.py:1-15). It has apply_navigation, so a record link can open it on one bill of materials (src/cluster_erp/desktop/modules/bom/bom_explorer.py:1846). It reads the colour-blind mode for its tree delegate and listens to accessibility_changed (src/cluster_erp/desktop/modules/bom/bom_explorer.py:1412-1419, src/cluster_erp/desktop/modules/bom/bom_explorer.py:1118).
BomBuilderPanel is the explorer's edit mode: a product palette, an item hierarchy edited by drag and drop with a cycle guard, and an inspector form. Only draft versions are editable, and every mutation emits a bom_item change signal (src/cluster_erp/desktop/modules/bom/bom_builder.py:1-12, src/cluster_erp/desktop/modules/bom/bom_builder.py:838-840).
| Area | Routes | Source |
|---|---|---|
| Explorer | /bom/boms/, /bom/bom-versions/, /bom/bom-versions/{version_id}/tree, /bom/bom-items/, /bom/bom-items/where-used/{part_id}, /production/routings/, /production/routings/for-product/{product_id}, /production/routings/scaffold-from-bom, /production/routings/scaffold-tree-from-bom, /production/operation-types/, /production/work-centers/, /production/component-allocations/, /products_and_services/products/ |
src/cluster_erp/desktop/modules/bom/bom_explorer.py |
| Builder | /bom/bom-items/, /bom/bom-items/{bom_item_id}, /bom/bom-items/{item_id}/move, and product, model, version, category, and unit lists under /products_and_services/ |
src/cluster_erp/desktop/modules/bom/bom_builder.py |
Business rules: BOM module.
Calendars¶
GlobalCalendarView has two tabs: the group calendar, edited with WorkingCalendarPanel in group mode, and an overview grid of every organisation calendar over a date range (src/cluster_erp/desktop/modules/calendars/global_calendar_view.py:1-11, src/cluster_erp/desktop/modules/calendars/global_calendar_view.py:83). In a worker, the overview reads /calendars/calendars, /owned_organisations/organisations/, and /calendars/calendars/{id}/preview for each group or organisation calendar (src/cluster_erp/desktop/modules/calendars/global_calendar_view.py:50, src/cluster_erp/desktop/modules/calendars/global_calendar_view.py:136-165). Business rules: calendars module and working time.
Inventory¶
WarehouseDashboard reads /inventory/warehouses/dashboard and draws cards and bar charts. A double-click on a card emits navigate_to for the card's module and section (src/cluster_erp/desktop/modules/inventory/warehouse_dashboard.py:76-97, src/cluster_erp/desktop/modules/inventory/warehouse_dashboard.py:258). Business rules: inventory module.
Logs¶
| Class | Routes | Source |
|---|---|---|
ActivityLogView |
/logs/activities/ |
src/cluster_erp/desktop/modules/logs/activity_log_view.py:310 |
ErrorLogView |
/logs/errors/, /logs/errors/by-trace/{trace_id} |
src/cluster_erp/desktop/modules/logs/error_log_view.py:230 |
Both use their own QAbstractTableModel (src/cluster_erp/desktop/modules/logs/activity_log_view.py:67, src/cluster_erp/desktop/modules/logs/error_log_view.py:61). Business rules: logs module.
Procurement and MRP¶
| Class | Routes | Source |
|---|---|---|
MrpDashboard |
/procurement/mrp/runs, /procurement/mrp/runs/{run_id}/summary |
src/cluster_erp/desktop/modules/procurement/mrp/dashboard.py:152 |
ExceptionWorkbench |
/procurement/mrp/runs, /procurement/mrp/runs/{run_id}/items, .../items/bulk-action, .../summary |
src/cluster_erp/desktop/modules/procurement/mrp/exception_workbench.py:105 |
PlannedOrdersView |
/procurement/mrp/runs, .../items, .../items/bulk-action, .../items/firm, .../items/unfirm |
src/cluster_erp/desktop/modules/procurement/mrp/planned_orders.py:67 |
StockRequirementsView |
/procurement/mrp/stock-requirements, /products_and_services/products/ |
src/cluster_erp/desktop/modules/procurement/mrp/stock_requirements.py:73 |
TimePhasedDialog |
/procurement/mrp/runs/{run_id}/products/{product_id}/time-phased |
src/cluster_erp/desktop/modules/procurement/mrp/time_phased.py:51 |
PeggingDialog |
/procurement/mrp/runs/{run_id}/products/{product_id}/pegging |
src/cluster_erp/desktop/modules/procurement/mrp/pegging.py:27 |
The bulk action create_pr posts selected planned items to .../items/bulk-action (src/cluster_erp/desktop/modules/procurement/mrp/planned_orders.py:411-417). MrpDashboard cards emit navigate_to (src/cluster_erp/desktop/modules/procurement/mrp/dashboard.py:94). Business rules: MRP.
Production¶
SchedulingBoard is a Gantt board: rows are work centers, the axis is time, and bars are scheduled work orders. The docstring describes drag with snapping, conflict colouring computed on the client, cancel with Esc, undo with Ctrl+Z, nudging with arrow keys, and a precise date-time editor on double-click (src/cluster_erp/desktop/modules/production/scheduling_board.py:1-16). It reads /production/scheduling/board and writes /production/scheduling/work-orders/{wo_id}/schedule and /production/scheduling/work-orders/{wo_id}/auto-schedule with a work_order descriptor (src/cluster_erp/desktop/modules/production/scheduling_board.py:2096-2099, src/cluster_erp/desktop/modules/production/scheduling_board.py:2263-2293). It reloads when a work order or work center changes (src/cluster_erp/desktop/modules/production/scheduling_board.py:1516-1525) and opens records through open_entity (src/cluster_erp/desktop/modules/production/scheduling_board.py:2220). Business rules: scheduling.
Purchasing quotations¶
The package src/cluster_erp/desktop/modules/purchasing_quotations/ contains only an empty __init__.py. Supplier quotations appear on the desktop through the generic widgets when the server metadata declares them. Business rules: purchasing quotations module.
Constraints and validation¶
- Every registered class takes the five keyword arguments that
_create_custom_widgetpasses (src/cluster_erp/desktop/widgets/main_window.py:544-553). - The docstrings of
BomExplorerandSchedulingBoardstate that the screens use only the REST API and no direct module calls (src/cluster_erp/desktop/modules/bom/bom_explorer.py:13-14,src/cluster_erp/desktop/modules/production/scheduling_board.py:3-4).
Discrepancies¶
Terms introduced¶
| Term | Code identifier | Definition | Turkish term | Source |
|---|---|---|---|---|
| module screen | custom_widget |
A hand-written desktop screen reached through a custom sidebar section. |
modül ekranı | src/cluster_erp/desktop/widgets/main_window.py:373-376 |
| navigation hook | apply_navigation |
A screen method that receives navigation parameters to focus one record. | gezinme kancası | src/cluster_erp/desktop/widgets/main_window.py:213-215 |
Related pages¶
Verified against commit 92f8051 on 2026-11-13.