Duplicate job
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import math
|
||||
import os
|
||||
import re
|
||||
import uuid as _uuid
|
||||
from datetime import datetime, timedelta
|
||||
from pathlib import Path
|
||||
@@ -90,10 +91,17 @@ def printer_detail(printer_id: int, request: Request, db: Session = Depends(get_
|
||||
printer = db.query(Printer).filter(Printer.id == printer_id).first()
|
||||
if not printer:
|
||||
raise HTTPException(status_code=404, detail="Printer not found")
|
||||
current_job = (
|
||||
db.query(PrintJob)
|
||||
.filter(PrintJob.printer_id == printer_id, PrintJob.status == JobStatus.printing)
|
||||
.order_by(PrintJob.started_at.desc())
|
||||
.first()
|
||||
)
|
||||
return templates.TemplateResponse("printer_detail.html", {
|
||||
"request": request,
|
||||
"active": "printers",
|
||||
"printer": printer,
|
||||
"current_job": current_job,
|
||||
})
|
||||
|
||||
|
||||
@@ -335,6 +343,45 @@ def edit_job(
|
||||
return RedirectResponse(url=f"/jobs/{job_id}", status_code=HTTP_303_SEE_OTHER)
|
||||
|
||||
|
||||
@router.post("/jobs/{job_id}/duplicate")
|
||||
def duplicate_job(job_id: int, db: Session = Depends(get_db)):
|
||||
from fastapi import HTTPException
|
||||
job = db.query(PrintJob).filter(PrintJob.id == job_id).first()
|
||||
if not job:
|
||||
raise HTTPException(404, "Job not found")
|
||||
|
||||
copy = PrintJob(
|
||||
job_uuid=str(_uuid.uuid4()),
|
||||
name=job.name,
|
||||
file_name=job.file_name,
|
||||
printer_id=None,
|
||||
bracket_id=job.bracket_id,
|
||||
customer=job.customer,
|
||||
job_material=job.job_material,
|
||||
job_color=job.job_color,
|
||||
priority=job.priority,
|
||||
status=JobStatus.queued,
|
||||
notes=job.notes,
|
||||
)
|
||||
db.add(copy)
|
||||
|
||||
# If the original was in a bracket, extend the "×N" count in its name to match.
|
||||
if job.bracket and job.bracket.name:
|
||||
job.bracket.name = re.sub(
|
||||
r"×(\d+)\s*$",
|
||||
lambda m: f"×{int(m.group(1)) + 1}",
|
||||
job.bracket.name,
|
||||
)
|
||||
|
||||
db.flush()
|
||||
db.add(JobLog(job_id=copy.id, message=f"Job created (duplicate of #{job.id})"))
|
||||
db.commit()
|
||||
|
||||
if copy.bracket_id:
|
||||
return RedirectResponse(url=f"/jobs?bracket_id={copy.bracket_id}", status_code=HTTP_303_SEE_OTHER)
|
||||
return RedirectResponse(url="/jobs", status_code=HTTP_303_SEE_OTHER)
|
||||
|
||||
|
||||
@router.get("/files/{filename}")
|
||||
def download_file(filename: str):
|
||||
from fastapi import HTTPException
|
||||
|
||||
Reference in New Issue
Block a user