Implement work log creation and update API; add new worklog entry route and enhance worklog template with JavaScript functionality
This commit is contained in:
parent
146dcafab3
commit
bb564809ea
5 changed files with 209 additions and 33 deletions
|
@ -1,7 +1,9 @@
|
|||
from flask import request, render_template
|
||||
import datetime
|
||||
|
||||
from flask import request, render_template, jsonify
|
||||
|
||||
from . import main
|
||||
from .helpers import worklog_headers, worklog_form_fields
|
||||
from .helpers import worklog_headers
|
||||
from .. import db
|
||||
from ..models import WorkLog, User, Inventory
|
||||
from ..utils.load import eager_load_worklog_relationships, eager_load_user_relationships, eager_load_inventory_relationships
|
||||
|
@ -46,6 +48,83 @@ def worklog_entry(id):
|
|||
title=title,
|
||||
log=log,
|
||||
users=users,
|
||||
items=items,
|
||||
form_fields=worklog_form_fields
|
||||
items=items
|
||||
)
|
||||
|
||||
@main.route("/worklog_entry/new", methods=["GET"])
|
||||
def new_worklog():
|
||||
items = eager_load_inventory_relationships(db.session.query(Inventory)).all()
|
||||
users = eager_load_user_relationships(db.session.query(User)).all()
|
||||
|
||||
log = WorkLog(
|
||||
start_time=datetime.datetime.now(),
|
||||
followup=True
|
||||
)
|
||||
|
||||
return render_template(
|
||||
"worklog.html",
|
||||
title="New Entry",
|
||||
log=log,
|
||||
users=users,
|
||||
items=items
|
||||
)
|
||||
|
||||
@main.route("/api/worklog", methods=["POST"])
|
||||
def create_worklog():
|
||||
try:
|
||||
data = request.get_json(force=True)
|
||||
|
||||
new_worklog = WorkLog.from_dict(data)
|
||||
|
||||
db.session.add(new_worklog)
|
||||
db.session.commit()
|
||||
|
||||
return jsonify({"success": True, "id": new_worklog.id}), 201
|
||||
|
||||
except Exception as e:
|
||||
db.session.rollback()
|
||||
return jsonify({"success": False, "error": str(e)}), 400
|
||||
|
||||
@main.route("/api/worklog/<int:id>", methods=["PUT"])
|
||||
def update_worklog(id):
|
||||
try:
|
||||
data = request.get_json(force=True)
|
||||
print(data)
|
||||
log = db.session.query(WorkLog).get(id)
|
||||
|
||||
if not log:
|
||||
return jsonify({"success": False, "error": f"Work Log with ID {id} not found."}), 404
|
||||
|
||||
log.start_time = datetime.datetime.fromisoformat(data.get("start_time")) if data.get("start_time") else log.start_time
|
||||
log.end_time = datetime.datetime.fromisoformat(data.get("end_time")) if data.get("end_time") else log.end_time
|
||||
log.notes = data.get("notes", log.notes)
|
||||
log.complete = bool(data.get("complete", log.complete))
|
||||
log.followup = bool(data.get("followup", log.followup))
|
||||
log.analysis = bool(data.get("analysis", log.analysis))
|
||||
log.contact_id = data.get("contact_id", log.contact_id)
|
||||
log.work_item_id = data.get("work_item_id", log.work_item_id)
|
||||
|
||||
db.session.commit()
|
||||
|
||||
return jsonify({"success": True, "id": log.id}), 200
|
||||
|
||||
except Exception as e:
|
||||
db.session.rollback()
|
||||
return jsonify({"success": False, "error": str(e)}), 400
|
||||
|
||||
@main.route("/api/worklog/<int:id>", methods=["DELETE"])
|
||||
def delete_worklog(id):
|
||||
try:
|
||||
log = db.session.query(WorkLog).get(id)
|
||||
|
||||
if not log:
|
||||
return jsonify({"success": False, "errpr": f"Item with ID {id} not found!"}), 404
|
||||
|
||||
db.session.delete(log)
|
||||
db.session.commit()
|
||||
|
||||
return jsonify({"success": True}), 200
|
||||
|
||||
except Exception as e:
|
||||
db.session.rollback()
|
||||
return jsonify({"success": False, "error": str(e)}), 400
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue