36 lines
1.9 KiB
Python
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}"}))
|