Estimated vs actual hours and cost variance for a work order.
(
wonum: str, site_id: str
)
| 174 | |
| 175 | |
| 176 | async def get_workorder_actuals_vs_planned( |
| 177 | wonum: str, site_id: str |
| 178 | ) -> Union[ActualsVsPlannedResult, ErrorResult]: |
| 179 | """Estimated vs actual hours and cost variance for a work order.""" |
| 180 | res = await wo.get_workorder_actuals_vs_planned(db(), wonum, site_id) |
| 181 | err = _failed(res) |
| 182 | if err: |
| 183 | return err |
| 184 | return ActualsVsPlannedResult.model_validate( |
| 185 | {**res["data"], "message": f"Actuals vs planned for {wonum}."} |
| 186 | ) |
| 187 | |
| 188 | |
| 189 | async def get_workorder_kpis( |