diff options
Diffstat (limited to 'src/expense/tracker/category.py')
-rw-r--r-- | src/expense/tracker/category.py | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/expense/tracker/category.py b/src/expense/tracker/category.py new file mode 100644 index 0000000..a36f737 --- /dev/null +++ b/src/expense/tracker/category.py @@ -0,0 +1,43 @@ +from typing import Union +from flask import ( + redirect, + render_template, + url_for, +) +from flask_login import login_required, current_user +from werkzeug import Response + +from .. import db + +from flask_wtf import FlaskForm +from wtforms import StringField, SubmitField +from wtforms.validators import InputRequired + +from ..model import Category +from .blueprint import tracker + + +class CategoryForm(FlaskForm): + """Add Category""" + category = StringField("Add Category", validators=[InputRequired()]) # type: ignore + submit = SubmitField() + + +@tracker.route("/category", methods=["GET", "POST"]) +@login_required +def category() -> Union[str, Response]: + """ + To manage the list of user defined capabilities + """ + form = CategoryForm() + if form.validate_on_submit(): + category = form.category.data + cat = db.session.scalars( + db.select(Category).where(Category.name == category) + ).one_or_none() + if cat is None: + cat = Category(name=category) + current_user.categories.append(cat) # type: ignore + db.session.commit() + return redirect(url_for("index")) + return render_template("tracker/category.html", form=form) |