Files
eamco_printer/app/routers/cron_print.py
2024-04-04 16:39:29 -04:00

78 lines
2.2 KiB
Python

from fastapi import APIRouter, BackgroundTasks
from app.database import session
from app.models.printer import Printer_jobs
import subprocess
import shutil
import pdfkit
location_tickets = '/home/amnesia/gitbox/tickets/'
printer_url_service = 'http://172.18.0.1:5173/ticket/'
router = APIRouter(
prefix="/cron",
tags=["cron"],
responses={404: {"description": "Not found"}},
)
@router.get("/waiting")
async def make_waiting():
"""
Cron job - Gets waiting tickets in database and makes pdf files
Updates values in database for next step
"""
get_tickets_to_print = (session.query(Printer_jobs)
.filter(Printer_jobs.status == 0)
.all())
count = 0
for f in get_tickets_to_print:
# get the pdf name
filename_out = str(f.id) + '.pdf'
# read website for the html in
web_url = printer_url_service + str(f.id)
pdfkit.from_url(web_url, filename_out, verbose=True)
#set location and name to move the ticket too
renamed_file = location_tickets + filename_out
# perform command to move command
shutil.move(filename_out, renamed_file)
# update count
newcount = count + 1
count = newcount
f.status = 1
session.add(f)
session.commit()
return {'ok': True,
'count': count,
}
@router.get("/print/waiting")
async def print_waiting(background_tasks: BackgroundTasks):
"""
Checks if pdfs are made by query
Prints tickets using linux command on background tasks
"""
get_tickets_to_print = (session.query(Printer_jobs)
.filter(Printer_jobs.status == 1)
.all())
if get_tickets_to_print is not None:
for f in get_tickets_to_print:
background_tasks.add_task(print_ticket, id=f.id)
f.status = 3
session.add(f)
session.commit()
return {'ok': True }
def print_ticket(id: int):
location = location_tickets + id + '.pdf'
p = (subprocess.run(["lp", location], capture_output=True))
for line in p.stdout.readlines():
print(line)