minor: set folder for receipts
This commit is contained in:
parent
5a453a140e
commit
2581021f2b
@ -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"
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
@ -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
|
||||
|
||||
@ -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('/<int:receipt_id>', 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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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('/<int:establishment>', 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:
|
||||
|
||||
@ -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)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user