From a6f229e7fb1cb2eae1eb2fe852ef1388e3fd5cc9 Mon Sep 17 00:00:00 2001 From: Lunaresk Date: Mon, 26 Aug 2024 19:43:47 +0200 Subject: [PATCH] minor: set folder for receipts --- backend/configs/config.py | 1 + backend/src/__init__.py | 2 ++ backend/src/item/details/routes.py | 1 - backend/src/receipts/check_items/forms.py | 2 -- backend/src/receipts/check_items/routes.py | 6 +++--- backend/src/receipts/upload/forms.py | 2 +- backend/src/receipts/upload/routes.py | 6 +++--- .../receipt_parser/pdf_receipt_parser.py | 18 +----------------- 8 files changed, 11 insertions(+), 27 deletions(-) diff --git a/backend/configs/config.py b/backend/configs/config.py index bbc6e6e..b8ebb6b 100644 --- a/backend/configs/config.py +++ b/backend/configs/config.py @@ -20,3 +20,4 @@ class Config(object): MAIL_PASSWORD = os.environ.get('MAIL_PASSWORD') ADMINS = ['postmaster@wpgcommunity.net'] POSTS_PER_PAGE = 15 + RECEIPT_FOLDER = f"{basedir}/../PDFReceipts" \ No newline at end of file diff --git a/backend/src/__init__.py b/backend/src/__init__.py index 9fd17e8..37d3583 100644 --- a/backend/src/__init__.py +++ b/backend/src/__init__.py @@ -38,6 +38,8 @@ migrate = Migrate(transaction_per_migration=True) def create_app(config_class=Config): + if not exists(config_class.RECEIPT_FOLDER): + makedirs(config_class.RECEIPT_FOLDER) app = Flask(__name__, template_folder="../web/templates", static_folder="../web/static") app.config.from_object(config_class) bootstrap.init_app(app) diff --git a/backend/src/item/details/routes.py b/backend/src/item/details/routes.py index f0a4757..f97aff5 100644 --- a/backend/src/item/details/routes.py +++ b/backend/src/item/details/routes.py @@ -10,5 +10,4 @@ def show_item(item: int): itemschema = ItemSchema().dump(itemobj) itemschema['PriceChange'].sort(key=lambda d: d['date'], reverse=True) itemschema['AmountChange'].sort(key=lambda d: d['date'], reverse=True) - print(itemschema) return render_template('item/details/show_item.html', item = itemschema) \ No newline at end of file diff --git a/backend/src/receipts/check_items/forms.py b/backend/src/receipts/check_items/forms.py index b2ea846..d978b14 100644 --- a/backend/src/receipts/check_items/forms.py +++ b/backend/src/receipts/check_items/forms.py @@ -73,6 +73,4 @@ class CheckItemsForm(FlaskForm): item['itemname'], item['price'], item['amount'] if 'amount' in item else 1, 0)) check_items = CheckItems(check_items_entry) form = cls(obj=check_items) - - print(f"{form.items.entries}") return form diff --git a/backend/src/receipts/check_items/routes.py b/backend/src/receipts/check_items/routes.py index 965bf95..0e55c1a 100644 --- a/backend/src/receipts/check_items/routes.py +++ b/backend/src/receipts/check_items/routes.py @@ -1,5 +1,5 @@ from datetime import date -from flask import abort, request, url_for +from flask import abort, current_app, request, url_for from flask_login import current_user, login_required from . import bp from .forms import CheckCustomItemsEntryForm, CheckItemsEntryForm, CheckItemsForm, get_choices @@ -9,16 +9,16 @@ from models import AmountChange, Item, LoginToken, PriceChange, Receipt, Receipt 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('/', methods=['GET', 'POST']) @login_required def confirm_receipt_items(receipt_id: int): """Check items from a receipt if they should be accounted for payment. Get those items from the receipt PDF itself.""" + PDFDir: str = current_app.config["RECEIPT_FOLDER"] receipt_details: Receipt = Receipt.query.get(receipt_id) if current_user.is_authenticated and current_user.id == receipt_details.LoginToken.Establishment.owner: - receipt: PDFReceipt = PDFReceipt.getPDFReceiptFromFile(PDFDir + f"{receipt_details.id}.pdf") + receipt: PDFReceipt = PDFReceipt.getPDFReceiptFromFile(PDFDir + f"/{receipt_details.id}.pdf") form: CheckItemsForm = CheckItemsForm.new(receipt.items) _template = CheckCustomItemsEntryForm(prefix="custom_items-_-") # TODO: Precheck if items are already in database. If yes, check if item is present only once or multiple diff --git a/backend/src/receipts/upload/forms.py b/backend/src/receipts/upload/forms.py index 5a8c2f5..68905f7 100644 --- a/backend/src/receipts/upload/forms.py +++ b/backend/src/receipts/upload/forms.py @@ -1,5 +1,5 @@ from flask_wtf import FlaskForm -from flask_wtf.file import FileAllowed, FileField, FileRequired +from flask_wtf.file import FileAllowed, FileField from wtforms import DateField, SelectField, SubmitField from models import Establishment diff --git a/backend/src/receipts/upload/routes.py b/backend/src/receipts/upload/routes.py index 78560ca..7bcf754 100644 --- a/backend/src/receipts/upload/routes.py +++ b/backend/src/receipts/upload/routes.py @@ -1,4 +1,4 @@ -from flask import abort, redirect, request, url_for +from flask import abort, current_app, redirect, request, url_for from flask_login import current_user, login_required from os import rename from werkzeug.utils import secure_filename @@ -10,11 +10,11 @@ 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('/', methods=['GET', 'POST']) @login_required def upload_receipt(establishment: int): """Upload of a receipt.""" + PDFDir: str = current_app.config["RECEIPT_FOLDER"] if current_user.is_anonymous: abort(403) if LoginToken.query.filter_by(establishment=establishment, user=current_user.id).first(): @@ -39,7 +39,7 @@ def upload_receipt(establishment: int): db.session.add(dbReceipt) db.session.commit() if pdfReceipt: - rename(f"{PDFDir}/temp.pdf", f"{PDFDir}{secure_filename(f'{dbReceipt.id}.pdf')}") + rename(f"{PDFDir}/temp.pdf", f"{PDFDir}/{secure_filename(f'{dbReceipt.id}.pdf')}") LOGGER.debug(receipt.words) return redirect(url_for("receipts.check_items.confirm_receipt_items", receipt_id = dbReceipt.id)) else: diff --git a/backend/src/utils/modules/receipt_parser/pdf_receipt_parser.py b/backend/src/utils/modules/receipt_parser/pdf_receipt_parser.py index 1d2e0cd..92293d7 100644 --- a/backend/src/utils/modules/receipt_parser/pdf_receipt_parser.py +++ b/backend/src/utils/modules/receipt_parser/pdf_receipt_parser.py @@ -1,5 +1,5 @@ import fitz -from datetime import datetime, date +from datetime import date from .edeka.edeka_parser import getDictFromWords as edekaparser from .kaufland.kaufland_parser import getDictFromWords as kauflandparser from re import search @@ -36,22 +36,6 @@ class PDFReceipt: return word[4].lower() return "unknown" - def _getItemsTextFromText(text, start="", end=""): - return text[text.index(start)+len(start):text.index(end)].strip() - - def _convertItemsTextToDict(text): - temp = text.split("\n") - resultsArr = [] - i = 0 - while i < len(temp): - if search("(\d+) x", temp[i]): - resultsArr.append({"itemname": temp[i+2], "price": temp[i+1], "amount": temp[i][:-2]}) - i += 4 - else: - resultsArr.append({"itemname": temp[i], "price": temp[i+1][:-2]}) - i += 2 - return resultsArr - def _getInfosFromText(words: str, store: str = "edeka"): if store == "edeka": result = edekaparser(words)