ppm_change_request_start_review
Start the review phase for a submitted change request by specifying its ID to advance the workflow state.
Instructions
Start review of a submitted Change Request.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| cr_id | Yes |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- src/qod_ppm_mcp/server.py:169-173 (handler)Main handler for ppm_change_request_start_review. Decorated with @mcp.tool(), it calls the Odoo 'action_start_review' server action on the 'ppm.change.request' model for the given record ID, then returns the updated state fields.
@mcp.tool() def ppm_change_request_start_review(cr_id: int) -> dict[str, Any]: """Start review of a submitted Change Request.""" client().call_action("ppm.change.request", "action_start_review", [cr_id]) return _read_state("ppm.change.request", cr_id, _CR_FIELDS) - src/qod_ppm_mcp/server.py:159-159 (schema)Fields schema _CR_FIELDS used to read back the change request state after the action.
_CR_FIELDS = ["name", "state", "project_id", "change_type", "priority", "initiator_id"] - src/qod_ppm_mcp/server.py:169-169 (registration)Registration via @mcp.tool() decorator on line 169. The FastMCP instance 'mcp' is created on line 19.
@mcp.tool() - src/qod_ppm_mcp/client.py:122-127 (helper)Helper method call_action on OdooClient that invokes an action_* method via execute_kw.
def call_action(self, model: str, method: str, ids: list[int]) -> Any: """Invoke an `action_*` button method on the given record ids.""" return self.execute_kw(model, method, [ids]) def close(self) -> None: self._http.close() - src/qod_ppm_mcp/server.py:30-34 (helper)Helper _read_state reads record fields after the action to return updated state to the caller.
def _read_state(model: str, rec_id: int, fields: list[str]) -> dict[str, Any]: rows = client().read(model, [rec_id], fields) if not rows: raise ValueError(f"{model} id={rec_id} not found") return rows[0]