Make dry-run report remote job material blockers

This commit is contained in:
2026-05-18 15:50:11 +09:30
parent 49e7a60f98
commit 16283a64e3
+36 -4
View File
@@ -547,7 +547,38 @@ def main() -> int:
} }
if not args.apply: if not args.apply:
remote_existing_rows = list_remote_job_materials(session, job_uuid)
remote_existing_blocks_apply = bool(remote_existing_rows)
if remote_existing_blocks_apply:
remote_active_count = sum(1 for remote_row in remote_existing_rows if is_active_remote_job_material(remote_row))
reason = (
f"Remote ServiceM8 job already has {len(remote_existing_rows)} jobMaterial row(s) "
f"({remote_active_count} active); apply would be blocked before updates or creates"
)
incident_id = record_remote_existing_incident(
conn,
form_response_uuid=form_response_uuid,
job_uuid=job_uuid,
apply_run_id=run_id,
desired_count=len(desired_rows),
remote_rows=remote_existing_rows,
action="dry_run_would_block",
reason=reason,
)
result["remote_existing"] = {
"incident_id": incident_id,
"action": "would_block_remote_existing",
"remote_count": len(remote_existing_rows),
"remote_active_count": remote_active_count,
"reason": reason,
}
if job_update_payload: if job_update_payload:
job_update_action = (
"would_update_work_done_description_if_remote_empty"
if remote_existing_blocks_apply
else "would_update_work_done_description"
)
record_apply_row( record_apply_row(
conn, conn,
run_id=run_id, run_id=run_id,
@@ -556,13 +587,14 @@ def main() -> int:
row_index=0, row_index=0,
row=job_update_row, row=job_update_row,
api_payload=job_update_record_payload, api_payload=job_update_record_payload,
action="would_update_work_done_description", action=job_update_action,
) )
result["job_update"] = {"action": "would_update_work_done_description", **job_update_record_payload} result["job_update"] = {"action": job_update_action, **job_update_record_payload}
else: else:
result["job_update"] = {"action": "skipped", "reason": "Quote description is empty"} result["job_update"] = {"action": "skipped", "reason": "Quote description is empty"}
for idx, row in enumerate(desired_rows, start=1): for idx, row in enumerate(desired_rows, start=1):
api_payload = build_payload(job_uuid, row) api_payload = build_payload(job_uuid, row)
row_action = "would_create_if_remote_empty" if remote_existing_blocks_apply else "would_create"
record_apply_row( record_apply_row(
conn, conn,
run_id=run_id, run_id=run_id,
@@ -571,9 +603,9 @@ def main() -> int:
row_index=idx, row_index=idx,
row=row, row=row,
api_payload=api_payload, api_payload=api_payload,
action="would_create", action=row_action,
) )
result["rows"].append({"action": "would_create", "kind": row.get("kind"), "payload": api_payload}) result["rows"].append({"action": row_action, "kind": row.get("kind"), "payload": api_payload})
finish_apply_run(conn, run_id, status="dry-run", created_count=0) finish_apply_run(conn, run_id, status="dry-run", created_count=0)
conn.execute( conn.execute(
"UPDATE quote_template_form_responses SET process_status = ? WHERE form_response_uuid = ?", "UPDATE quote_template_form_responses SET process_status = ? WHERE form_response_uuid = ?",