Files
handoff-pro/scripts/project_scheduler.py

36 lines
1.9 KiB
Python

"""Project scheduler: milestones and timeline management."""
import json, sys, os
sys.path.insert(0, os.path.join(os.path.dirname(__file__), ".."))
from lib.db import get_db, new_id, row_to_dict, rows_to_list
def set_milestone(job_id, phase_name, start_date=None, end_date=None, status="pending"):
mid = new_id()
conn = get_db()
conn.execute("INSERT INTO project_milestones (id, job_id, phase_name, start_date, end_date, status) VALUES (?,?,?,?,?,?)",
(mid, job_id, phase_name, start_date, end_date, status))
conn.commit(); conn.close()
return {"id": mid, "job_id": job_id, "phase": phase_name}
def update_milestone(milestone_id, status=None, start_date=None, end_date=None):
conn = get_db()
if status: conn.execute("UPDATE project_milestones SET status=? WHERE id=?", (status, milestone_id))
if start_date: conn.execute("UPDATE project_milestones SET start_date=? WHERE id=?", (start_date, milestone_id))
if end_date: conn.execute("UPDATE project_milestones SET end_date=? WHERE id=?", (end_date, milestone_id))
conn.commit(); conn.close()
return {"ok": True, "id": milestone_id}
def get_schedule(job_id):
conn = get_db()
job = row_to_dict(conn.execute("SELECT * FROM jobs WHERE id=?", (job_id,)).fetchone())
milestones = rows_to_list(conn.execute("SELECT * FROM project_milestones WHERE job_id=? ORDER BY start_date", (job_id,)).fetchall())
conn.close()
if not job: return {"error": "job not found"}
return {"job_id": job_id, "client": job.get("client_name"), "milestones": milestones}
if __name__ == "__main__":
from lib.db import init_db; init_db()
cmd = sys.argv[1] if len(sys.argv) > 1 else "get"
if cmd == "set": print(json.dumps(set_milestone(sys.argv[2], sys.argv[3], sys.argv[4] if len(sys.argv)>4 else None, sys.argv[5] if len(sys.argv)>5 else None)))
elif cmd == "get": print(json.dumps(get_schedule(sys.argv[2]), indent=2))
else: print(json.dumps({"error": f"unknown: {cmd}"}))