"""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}"}))