This page describes three sub-modules of src/cluster_erp/modules/projects/. projects/ holds the project record and its lifecycle. items/ holds what the project delivers, with a product breakdown. fixtures/ holds the fixtures, jigs, tools, and equipment the project needs. Schedules are on schedules; meetings and actions on actions, activities, and meetings.
Scope and source¶
- Defined in:
models.py,schemas.py,services.py,routes.py, andmetadata.pyof the three sub-modules, and the sales order handler insrc/cluster_erp/modules/projects/module.py:98-150. - Count: 3 tables; 9 project routes, 7 item routes, and 7 fixture routes (
@router.decorators); 3ActionMetaentries.
Project fields¶
| Name | Meaning | Source |
|---|---|---|
project_no, name |
Business key from the yearly sequence project, and name |
src/cluster_erp/modules/projects/projects/models.py:38-39, src/cluster_erp/modules/projects/projects/services.py:124 |
status |
Default planning |
src/cluster_erp/modules/projects/projects/models.py:40-44 |
customer_id, project_manager_id |
Customer and manager | src/cluster_erp/modules/projects/projects/models.py:45-46 |
stock_mode |
common (default) or project_striped |
src/cluster_erp/modules/projects/projects/models.py:49-53, src/cluster_erp/modules/projects/projects/schemas.py:13 |
sales_order_id |
The sales order that opened the project | src/cluster_erp/modules/projects/projects/models.py:54 |
kickoff_at, planned_finish_at, actual_finish_at, description |
Dates and description | src/cluster_erp/modules/projects/projects/models.py:55-58 |
Item and fixture fields¶
| Entity | Fields | Source |
|---|---|---|
ProjectItem (projects_project_items) |
code (yearly sequence project_item), project_id, line_no, product_id, product_model_id, product_version_id, customer_part_id, description, qty, uom, status (default planned), notes, activity_ref |
src/cluster_erp/modules/projects/items/models.py:17-78, src/cluster_erp/modules/projects/items/services.py:59 |
FixtureRequirement (projects_fixtures) |
code (yearly sequence fixture_requirement), project_id, fixture_type, name, qty, need_by_date, status (default identified), designer_id, manufacturing_method, cost_estimate |
src/cluster_erp/modules/projects/fixtures/models.py:18-52, src/cluster_erp/modules/projects/fixtures/services.py:60 |
Item statuses are planned, in_progress, completed, and cancelled. Fixture types are fixture, jig, tool, and equipment (src/cluster_erp/modules/projects/items/schemas.py:10, src/cluster_erp/modules/projects/fixtures/schemas.py:10).
Lifecycles and actions¶
A project moves one step at a time along planning, kickoff_done, in_execution, near_completion, completed, and closed (src/cluster_erp/modules/projects/projects/services.py:32-43). A fixture moves along identified, in_design, in_production, ready, and delivered (src/cluster_erp/modules/projects/fixtures/services.py:19-24).
stateDiagram-v2 [*] --> planning planning --> kickoff_done kickoff_done --> in_execution in_execution --> near_completion near_completion --> completed completed --> closed
In prose: each project status has exactly one next status. kickoff_done stamps kickoff_at and emits ProjectKickoffCompleted; closed emits ProjectClosed; every step emits ProjectStatusChanged (src/cluster_erp/modules/projects/projects/services.py:250-300).
| Action | Label | Condition | Endpoint | Permission | Source |
|---|---|---|---|---|---|
transition (project) |
Change Status | none; the service checks the step | POST /projects/{id}/transition |
project.update |
src/cluster_erp/modules/projects/projects/metadata.py:55-64, src/cluster_erp/modules/projects/projects/routes.py:285 |
transition (fixture) |
Change Status | none; the service checks the step | POST /fixtures/{id}/transition |
project.update |
src/cluster_erp/modules/projects/fixtures/metadata.py:64-73, src/cluster_erp/modules/projects/fixtures/routes.py:75 |
create_production_order (item) |
Create Production Order | none | POST /project-items/{id}/create-production-order |
CreateProductionOrderForProject.REQUIRED_PERMISSION |
src/cluster_erp/modules/projects/items/metadata.py:115-127, src/cluster_erp/modules/projects/items/routes.py:88-138 |
Routes¶
| Method and path | Permission | Source |
|---|---|---|
GET, POST /projects/; GET, PUT, DELETE /projects/{project_id}; POST /projects/bulk-delete |
project.read, .create, .update, .delete, .bulk_delete |
src/cluster_erp/modules/projects/projects/routes.py:40-310 |
GET /projects/{project_id}/production-rollup, GET /projects/{project_id}/evm |
project.read |
src/cluster_erp/modules/projects/projects/routes.py:102, src/cluster_erp/modules/projects/projects/routes.py:125 |
GET /project-items/by-project/{project_id}, GET /project-items/{item_id}; POST, PUT, DELETE, bulk delete |
project.read, project.update |
src/cluster_erp/modules/projects/items/routes.py:25-139 |
GET /fixtures/by-project/{project_id}, GET /fixtures/{fixture_id}; POST, PUT, DELETE, bulk delete |
project.read, project.update |
src/cluster_erp/modules/projects/fixtures/routes.py:24-100 |
Constraints and validation¶
- When
SalesOrderPoReceivedarrives, the module reads the order withGetSalesOrderByIdand opens one project for it. The name is the order number or the customer PO number, and the planned finish is the order's delivery date. A second event for the same order does not open a second project (src/cluster_erp/modules/projects/module.py:98-150). - Creating a production order for an item needs a product with model and version; the order is created by the query
CreateProductionOrderForProject(src/cluster_erp/modules/projects/items/routes.py:100-138). production-rollupandevmreadGetProjectProductionRollupandGetProjectProductionEvm; the EVM is hour-based, and its docstring states that it is not a money value (src/cluster_erp/modules/projects/projects/routes.py:102-268).- Events:
ProjectCreatedon create,ProjectFixtureRequiredon fixture create (src/cluster_erp/modules/projects/projects/services.py:142-150,src/cluster_erp/modules/projects/fixtures/services.py:77).
Terms introduced¶
| Term | Code identifier | Definition | Turkish term | Source |
|---|---|---|---|---|
| project item | ProjectItem |
One deliverable of a project, with product breakdown and quantity. | Proje kalemi | src/cluster_erp/modules/projects/items/models.py:17 |
| fixture requirement | FixtureRequirement |
A fixture, jig, tool, or equipment the project needs to make or obtain. | Fikstür ihtiyacı | src/cluster_erp/modules/projects/fixtures/models.py:18 |
Related pages¶
Verified against commit 92f8051 on 2026-11-13.