84 lines
2.8 KiB
Python
84 lines
2.8 KiB
Python
# The Mia! Accounting Project.
|
|
# Author: imacat@mail.imacat.idv.tw (imacat), 2023/3/22
|
|
|
|
# Copyright (c) 2023 imacat.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
"""The views for the option management.
|
|
|
|
"""
|
|
from urllib.parse import parse_qsl, urlencode
|
|
|
|
from flask import Blueprint, render_template, redirect, session, request, \
|
|
flash, url_for
|
|
from werkzeug.datastructures import ImmutableMultiDict
|
|
|
|
from accounting.locale import lazy_gettext
|
|
from accounting.utils.cast import s
|
|
from accounting.utils.flash_errors import flash_form_errors
|
|
from accounting.utils.next_uri import inherit_next
|
|
from accounting.utils.options import options
|
|
from accounting.utils.permission import has_permission, can_admin
|
|
from .forms import OptionForm
|
|
|
|
bp: Blueprint = Blueprint("option", __name__)
|
|
"""The view blueprint for the currency management."""
|
|
|
|
|
|
@bp.get("", endpoint="detail")
|
|
@has_permission(can_admin)
|
|
def show_options() -> str:
|
|
"""Shows the options.
|
|
|
|
:return: The options.
|
|
"""
|
|
return render_template("accounting/option/detail.html", obj=options)
|
|
|
|
|
|
@bp.get("edit", endpoint="edit")
|
|
@has_permission(can_admin)
|
|
def show_option_form() -> str:
|
|
"""Shows the option form.
|
|
|
|
:return: The option form.
|
|
"""
|
|
form: OptionForm
|
|
if "form" in session:
|
|
form = OptionForm(ImmutableMultiDict(parse_qsl(session["form"])))
|
|
del session["form"]
|
|
form.validate()
|
|
else:
|
|
form = OptionForm(obj=options)
|
|
return render_template("accounting/option/form.html", form=form)
|
|
|
|
|
|
@bp.post("update", endpoint="update")
|
|
@has_permission(can_admin)
|
|
def update_options() -> redirect:
|
|
"""Updates the options.
|
|
|
|
:return: The redirection to the option form.
|
|
"""
|
|
form = OptionForm(request.form)
|
|
if not form.validate():
|
|
flash_form_errors(form)
|
|
session["form"] = urlencode(list(request.form.items()))
|
|
return redirect(inherit_next(url_for("accounting.option.edit")))
|
|
form.populate_obj(options)
|
|
if not options.is_modified:
|
|
flash(s(lazy_gettext("The settings were not modified.")), "success")
|
|
return redirect(inherit_next(url_for("accounting.option.detail")))
|
|
options.commit()
|
|
flash(s(lazy_gettext("The settings are saved successfully.")), "success")
|
|
return redirect(inherit_next(url_for("accounting.option.detail")))
|