Lunaresk f41fdd076b major: add dynamic receipt item forms
New:
- Added the possibility to insert custom items on receipt upload in case
the receipt couldn't be read.
Changes:
- Changed the display of the sum at the overview. You now see what you
owe your establishment instead of just seeing how much you bought.
- In addition the sum in the overview now accounts for membership time.
You don't have to pay for something bought after you moved out for
example.
2023-11-26 23:16:05 +01:00

38 lines
1.7 KiB
Python

from flask import abort, redirect, request, url_for
from flask_login import current_user, login_required
from os import rename
from werkzeug.utils import secure_filename
from . import bp
from .forms import UploadReceiptForm
from src import db, LOGGER
from models.receipt import Receipt
from models.login_token import LoginToken
from src.utils.modules.receipt_parser.pdf_receipt_parser import PDFReceipt
from src.utils.routes_utils import render_custom_template as render_template
PDFDir = "./"
@bp.route('/<int:establishment>', methods=['GET', 'POST'])
@login_required
def upload_receipt(establishment: int):
"""Upload of a receipt."""
if current_user.is_anonymous:
abort(403)
if LoginToken.query.filter_by(establishment=establishment, user=current_user.id).first():
form = UploadReceiptForm()
LOGGER.debug(form.pdfReceipt.data)
if form.validate_on_submit():
pdfReceipt = form.pdfReceipt.data
pdfReceipt.save(f"{PDFDir}/temp.pdf")
with open(f"{PDFDir}/temp.pdf") as doc:
receipt = PDFReceipt(doc)
dbReceipt = Receipt(bonid = receipt.id, date = receipt.date,
from_user = LoginToken.query.filter_by(establishment=establishment, user=current_user.id).first().token)
db.session.add(dbReceipt)
db.session.commit()
rename(f"{PDFDir}/temp.pdf", f"{PDFDir}{secure_filename(f'{dbReceipt.id}.pdf')}")
LOGGER.debug(receipt.text)
return redirect(url_for("receipts.check_items.confirm_receipt_items", receipt_id = dbReceipt.id))
else:
LOGGER.debug(form.errors)
return render_template("receipts/upload.html", form = form)
abort(403)