Added the read-only view for the options.
This commit is contained in:
parent
619540da49
commit
7066f75e72
@ -22,7 +22,7 @@ import json
|
||||
import sqlalchemy as sa
|
||||
|
||||
from accounting import db
|
||||
from accounting.models import Option, Account
|
||||
from accounting.models import Option, Account, Currency
|
||||
from accounting.utils.current_account import CurrentAccount
|
||||
from accounting.utils.user import get_current_user_pk
|
||||
|
||||
@ -42,6 +42,14 @@ class RecurringItem:
|
||||
self.account_code: str = account_code
|
||||
self.description_template: str = description_template
|
||||
|
||||
@property
|
||||
def account_text(self) -> str:
|
||||
"""Returns the account text.
|
||||
|
||||
:return: The account text.
|
||||
"""
|
||||
return str(Account.find_by_code(self.account_code))
|
||||
|
||||
|
||||
class Recurring:
|
||||
"""The recurring expenses or incomes."""
|
||||
@ -90,6 +98,14 @@ class Options:
|
||||
"""
|
||||
self.__set_option("default_currency", value)
|
||||
|
||||
@property
|
||||
def default_currency_text(self) -> str:
|
||||
"""Returns the text of the default currency code.
|
||||
|
||||
:return: The text of the default currency code.
|
||||
"""
|
||||
return str(db.session.get(Currency, self.default_currency))
|
||||
|
||||
@property
|
||||
def default_ie_account_code(self) -> str:
|
||||
"""Returns the default account code for the income and expenses log.
|
||||
@ -107,6 +123,17 @@ class Options:
|
||||
"""
|
||||
self.__set_option("default_ie_account", value)
|
||||
|
||||
@property
|
||||
def default_ie_account_code_text(self) -> str:
|
||||
"""Returns the text of the default currency code.
|
||||
|
||||
:return: The text of the default currency code.
|
||||
"""
|
||||
code: str = self.default_ie_account_code
|
||||
if code == CurrentAccount.CURRENT_AL_CODE:
|
||||
return str(CurrentAccount.current_assets_and_liabilities())
|
||||
return str(CurrentAccount(db.session.get(Account, code)))
|
||||
|
||||
@property
|
||||
def default_ie_account(self) -> CurrentAccount:
|
||||
"""Returns the default account code for the income and expenses log.
|
||||
|
@ -35,7 +35,17 @@ bp: Blueprint = Blueprint("option", __name__)
|
||||
"""The view blueprint for the currency management."""
|
||||
|
||||
|
||||
@bp.get("", endpoint="form")
|
||||
@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.
|
||||
@ -52,7 +62,7 @@ def show_option_form() -> str:
|
||||
return render_template("accounting/option/form.html", form=form)
|
||||
|
||||
|
||||
@bp.post("", endpoint="update")
|
||||
@bp.post("update", endpoint="update")
|
||||
@has_permission(can_admin)
|
||||
def update_options() -> redirect:
|
||||
"""Updates the options.
|
||||
@ -63,7 +73,7 @@ def update_options() -> redirect:
|
||||
form.populate_obj(options)
|
||||
if not options.is_modified:
|
||||
flash(s(lazy_gettext("The options were not modified.")), "success")
|
||||
return redirect(inherit_next(url_for("accounting.option.form")))
|
||||
return redirect(inherit_next(url_for("accounting.option.detail")))
|
||||
options.commit()
|
||||
flash(s(lazy_gettext("The options are saved successfully.")), "success")
|
||||
return redirect(inherit_next(url_for("accounting.option.form")))
|
||||
return redirect(inherit_next(url_for("accounting.option.detail")))
|
||||
|
@ -53,7 +53,7 @@ First written: 2023/1/26
|
||||
</li>
|
||||
{% if accounting_can_admin() %}
|
||||
<li>
|
||||
<a class="dropdown-item {% if request.endpoint and request.endpoint.startswith("accounting.option.") %} active {% endif %}" href="{{ url_for("accounting.option.form") }}">
|
||||
<a class="dropdown-item {% if request.endpoint and request.endpoint.startswith("accounting.option.") %} active {% endif %}" href="{{ url_for("accounting.option.detail") }}">
|
||||
<i class="fa-solid fa-gear"></i>
|
||||
{{ A_("Settings") }}
|
||||
</a>
|
||||
|
63
src/accounting/templates/accounting/option/detail.html
Normal file
63
src/accounting/templates/accounting/option/detail.html
Normal file
@ -0,0 +1,63 @@
|
||||
{#
|
||||
The Mia! Accounting Flask Project
|
||||
detail.html: The option detail
|
||||
|
||||
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.
|
||||
|
||||
Author: imacat@mail.imacat.idv.tw (imacat)
|
||||
First written: 2023/3/22
|
||||
#}
|
||||
{% extends "accounting/base.html" %}
|
||||
|
||||
{% block header %}{% block title %}{{ A_("Settings") }}{% endblock %}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div class="mb-3 accounting-toolbar">
|
||||
<a class="btn btn-primary d-none d-md-inline" role="button" href="{{ url_for("accounting.option.edit")|accounting_inherit_next }}">
|
||||
<i class="fa-solid fa-pen-to-square"></i>
|
||||
{{ A_("Edit") }}
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="d-md-none accounting-material-fab">
|
||||
<a class="btn btn-primary" role="button" href="{{ url_for("accounting.option.edit")|accounting_inherit_next }}">
|
||||
<i class="fa-solid fa-pen-to-square"></i>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div id="accounting-default-currency" class="form-control mb-3 accounting-material-text-field accounting-not-empty">
|
||||
<label class="form-label" for="accounting-default-currency">{{ A_("Default Currency") }}</label>
|
||||
<div>{{ obj.default_currency_text }}</div>
|
||||
</div>
|
||||
|
||||
<div id="accounting-default-ie-account" class="form-control mb-3 accounting-material-text-field accounting-not-empty">
|
||||
<label class="form-label" for="accounting-default-ie-account">{{ A_("Default Account for the Income and Expenses Log") }}</label>
|
||||
<div>{{ obj.default_ie_account_code_text }}</div>
|
||||
</div>
|
||||
|
||||
{% with expense_income = "expense",
|
||||
label = A_("Expense"),
|
||||
recurring_items = obj.recurring.expenses %}
|
||||
{% include "accounting/option/include/detail-recurring-expense-income.html" %}
|
||||
{% endwith %}
|
||||
|
||||
{% with expense_income = "income",
|
||||
label = A_("Income"),
|
||||
recurring_items = obj.recurring.incomes %}
|
||||
{% include "accounting/option/include/detail-recurring-expense-income.html" %}
|
||||
{% endwith %}
|
||||
|
||||
{% endblock %}
|
@ -29,7 +29,14 @@ First written: 2023/3/22
|
||||
|
||||
{% block content %}
|
||||
|
||||
<form id="accounting-form" action="{{ url_for("accounting.option.form") }}" method="post" data-recurring-item-template="{{ form.recurring.item_template }}">
|
||||
<div class="mb-3 accounting-toolbar">
|
||||
<a class="btn btn-primary" role="button" href="{{ url_for("accounting.option.detail")|accounting_inherit_next }}">
|
||||
<i class="fa-solid fa-circle-chevron-left"></i>
|
||||
<span class="d-none d-md-inline">{{ A_("Back") }}</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<form id="accounting-form" action="{{ url_for("accounting.option.update") }}" method="post" data-recurring-item-template="{{ form.recurring.item_template }}">
|
||||
{{ form.csrf_token }}
|
||||
{% if request.args.next %}
|
||||
<input type="hidden" name="next" value="{{ request.args.next }}">
|
||||
|
@ -0,0 +1,29 @@
|
||||
{#
|
||||
The Mia! Accounting Flask Project
|
||||
detail-recurring-expense-income.html: The recurring expense or income in the option detail
|
||||
|
||||
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.
|
||||
|
||||
Author: imacat@mail.imacat.idv.tw (imacat)
|
||||
First written: 2023/3/22
|
||||
#}
|
||||
<div id="accounting-recurring-{{ expense_income }}" class="form-control mb-3 accounting-material-text-field accounting-not-empty">
|
||||
<label class="form-label" for="accounting-recurring-{{ expense_income }}">{{ label }}</label>
|
||||
<ul class="list-group mb-2 mt-2">
|
||||
{% for item in recurring_items %}
|
||||
{% include "accounting/option/include/detail-recurring-item.html" %}
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
@ -0,0 +1,28 @@
|
||||
{#
|
||||
The Mia! Accounting Flask Project
|
||||
detail-recurring-item.html: The recurring item in the option detail
|
||||
|
||||
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.
|
||||
|
||||
Author: imacat@mail.imacat.idv.tw (imacat)
|
||||
First written: 2023/3/22
|
||||
#}
|
||||
{# <ul> For SonarQube not to complain about incorrect HTML #}
|
||||
<li class="list-group-item list-group-item-action">
|
||||
<div class="small">{{ item.account_text }}</div>
|
||||
<div>{{ item.name }}</div>
|
||||
<div class="small">{{ item.description_template }}</div>
|
||||
</li>
|
||||
{# </ul> For SonarQube not to complain about incorrect HTML #}
|
Loading…
Reference in New Issue
Block a user