working prototype
This commit is contained in:
parent
4f2723b767
commit
1a4abe978f
21 changed files with 706 additions and 145 deletions
60
main.py
60
main.py
|
|
@ -1,12 +1,16 @@
|
|||
# main.py
|
||||
import os
|
||||
import shutil
|
||||
from fastapi import FastAPI, UploadFile, File, Request
|
||||
from fastapi.responses import HTMLResponse
|
||||
from fastapi import FastAPI, UploadFile, File, Request, Form
|
||||
from fastapi.responses import HTMLResponse, RedirectResponse
|
||||
from fastapi.templating import Jinja2Templates
|
||||
from fastapi.staticfiles import StaticFiles
|
||||
|
||||
from cost_calculator import allowed_file, analyze_pdf, get_rate_black, get_rate_color, UPLOAD_FOLDER
|
||||
from mailer import send_order_sync
|
||||
|
||||
from dotenv import load_dotenv
|
||||
load_dotenv()
|
||||
|
||||
|
||||
app = FastAPI()
|
||||
templates = Jinja2Templates(directory="templates")
|
||||
|
|
@ -32,8 +36,8 @@ async def cost_dashboard(request: Request):
|
|||
{
|
||||
"request": request,
|
||||
"rate_black": get_rate_black(),
|
||||
"rate_color": get_rate_color()
|
||||
}
|
||||
"rate_color": get_rate_color(),
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
|
|
@ -57,6 +61,50 @@ async def upload_file(request: Request, file: UploadFile = File(...)):
|
|||
"request": request,
|
||||
"result": result,
|
||||
"rate_black": get_rate_black(),
|
||||
"rate_color": get_rate_color()
|
||||
"rate_color": get_rate_color(),
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
@app.post("/send-order")
|
||||
def send_order_endpoint(
|
||||
request: Request,
|
||||
filename: str = Form(...),
|
||||
comment: str = Form(""),
|
||||
):
|
||||
"""
|
||||
Handles the 'Send Order' button. Sends PDF + analysis + user comment via Matrix.
|
||||
"""
|
||||
path = os.path.join(UPLOAD_FOLDER, filename)
|
||||
if not os.path.exists(path):
|
||||
return templates.TemplateResponse(
|
||||
"cost-calculator.html",
|
||||
{"request": request, "error": "File not found. Please upload again."},
|
||||
)
|
||||
|
||||
analysis = analyze_pdf(path)
|
||||
|
||||
try:
|
||||
send_order_sync(path, analysis, room_id="!YokZIMTVFEmSMRmmsb:localhost", comment=comment)
|
||||
# Render same result.html but include a success banner
|
||||
return templates.TemplateResponse(
|
||||
"result.html",
|
||||
{
|
||||
"request": request,
|
||||
"result": analysis,
|
||||
"rate_black": get_rate_black(),
|
||||
"rate_color": get_rate_color(),
|
||||
"success": "✅ Your order has been sent!"
|
||||
},
|
||||
)
|
||||
except Exception as e:
|
||||
return templates.TemplateResponse(
|
||||
"result.html",
|
||||
{
|
||||
"request": request,
|
||||
"result": analysis,
|
||||
"rate_black": get_rate_black(),
|
||||
"rate_color": get_rate_color(),
|
||||
"error": f"Failed to send order: {e}",
|
||||
},
|
||||
)
|
||||
Loading…
Add table
Add a link
Reference in a new issue