Renamed the "is_pay_off_needed" column of the Account data model to "is_offset_needed", and the "pay_off_target_id" column of the JournalEntry data model to "original_id".
This commit is contained in:
parent
e37f6792c9
commit
5132141c68
@ -30,7 +30,7 @@ from accounting.utils.user import has_user, get_user_pk
|
|||||||
|
|
||||||
AccountData = tuple[int, str, int, str, str, str, bool]
|
AccountData = tuple[int, str, int, str, str, str, bool]
|
||||||
"""The format of the account data, as a list of (ID, base account code, number,
|
"""The format of the account data, as a list of (ID, base account code, number,
|
||||||
English, Traditional Chinese, Simplified Chinese, is-pay-off-needed) tuples."""
|
English, Traditional Chinese, Simplified Chinese, is-offset-needed) tuples."""
|
||||||
|
|
||||||
|
|
||||||
def __validate_username(ctx: click.core.Context, param: click.core.Option,
|
def __validate_username(ctx: click.core.Context, param: click.core.Option,
|
||||||
@ -93,10 +93,10 @@ def init_accounts_command(username: str) -> None:
|
|||||||
data: list[AccountData] = []
|
data: list[AccountData] = []
|
||||||
for base in bases_to_add:
|
for base in bases_to_add:
|
||||||
l10n: dict[str, str] = {x.locale: x.title for x in base.l10n}
|
l10n: dict[str, str] = {x.locale: x.title for x in base.l10n}
|
||||||
is_pay_off_needed: bool = True if re.match("^[12]1[34]", base.code) \
|
is_offset_needed: bool = True if re.match("^[12]1[34]", base.code) \
|
||||||
else False
|
else False
|
||||||
data.append((get_new_id(), base.code, 1, base.title_l10n,
|
data.append((get_new_id(), base.code, 1, base.title_l10n,
|
||||||
l10n["zh_Hant"], l10n["zh_Hans"], is_pay_off_needed))
|
l10n["zh_Hant"], l10n["zh_Hans"], is_offset_needed))
|
||||||
__add_accounting_accounts(data, creator_pk)
|
__add_accounting_accounts(data, creator_pk)
|
||||||
click.echo(F"{len(data)} added. Accounting accounts initialized.")
|
click.echo(F"{len(data)} added. Accounting accounts initialized.")
|
||||||
|
|
||||||
@ -113,7 +113,7 @@ def __add_accounting_accounts(data: list[AccountData], creator_pk: int)\
|
|||||||
base_code=x[1],
|
base_code=x[1],
|
||||||
no=x[2],
|
no=x[2],
|
||||||
title_l10n=x[3],
|
title_l10n=x[3],
|
||||||
is_pay_off_needed=x[6],
|
is_offset_needed=x[6],
|
||||||
created_by_id=creator_pk,
|
created_by_id=creator_pk,
|
||||||
updated_by_id=creator_pk)
|
updated_by_id=creator_pk)
|
||||||
for x in data]
|
for x in data]
|
||||||
|
@ -66,8 +66,8 @@ class AccountForm(FlaskForm):
|
|||||||
filters=[strip_text],
|
filters=[strip_text],
|
||||||
validators=[DataRequired(lazy_gettext("Please fill in the title"))])
|
validators=[DataRequired(lazy_gettext("Please fill in the title"))])
|
||||||
"""The title."""
|
"""The title."""
|
||||||
is_pay_off_needed = BooleanField()
|
is_offset_needed = BooleanField()
|
||||||
"""Whether the the entries of this account need pay-off."""
|
"""Whether the the entries of this account need offset."""
|
||||||
|
|
||||||
def populate_obj(self, obj: Account) -> None:
|
def populate_obj(self, obj: Account) -> None:
|
||||||
"""Populates the form data into an account object.
|
"""Populates the form data into an account object.
|
||||||
@ -87,7 +87,7 @@ class AccountForm(FlaskForm):
|
|||||||
obj.base_code = self.base_code.data
|
obj.base_code = self.base_code.data
|
||||||
obj.no = count + 1
|
obj.no = count + 1
|
||||||
obj.title = self.title.data
|
obj.title = self.title.data
|
||||||
obj.is_pay_off_needed = self.is_pay_off_needed.data
|
obj.is_offset_needed = self.is_offset_needed.data
|
||||||
if is_new:
|
if is_new:
|
||||||
current_user_pk: int = get_current_user_pk()
|
current_user_pk: int = get_current_user_pk()
|
||||||
obj.created_by_id = current_user_pk
|
obj.created_by_id = current_user_pk
|
||||||
|
@ -47,8 +47,8 @@ def get_account_query() -> list[Account]:
|
|||||||
Account.title_l10n.contains(k),
|
Account.title_l10n.contains(k),
|
||||||
code.contains(k),
|
code.contains(k),
|
||||||
Account.id.in_(l10n_matches)]
|
Account.id.in_(l10n_matches)]
|
||||||
if k in gettext("Pay-off needed"):
|
if k in gettext("Need offset"):
|
||||||
sub_conditions.append(Account.is_pay_off_needed)
|
sub_conditions.append(Account.is_offset_needed)
|
||||||
conditions.append(sa.or_(*sub_conditions))
|
conditions.append(sa.or_(*sub_conditions))
|
||||||
|
|
||||||
return Account.query.filter(*conditions)\
|
return Account.query.filter(*conditions)\
|
||||||
|
@ -113,8 +113,8 @@ class Account(db.Model):
|
|||||||
"""The account number under the base account."""
|
"""The account number under the base account."""
|
||||||
title_l10n = db.Column("title", db.String, nullable=False)
|
title_l10n = db.Column("title", db.String, nullable=False)
|
||||||
"""The title."""
|
"""The title."""
|
||||||
is_pay_off_needed = db.Column(db.Boolean, nullable=False, default=False)
|
is_offset_needed = db.Column(db.Boolean, nullable=False, default=False)
|
||||||
"""Whether the entries of this account need pay-off."""
|
"""Whether the entries of this account need offset."""
|
||||||
created_at = db.Column(db.DateTime(timezone=True), nullable=False,
|
created_at = db.Column(db.DateTime(timezone=True), nullable=False,
|
||||||
server_default=db.func.now())
|
server_default=db.func.now())
|
||||||
"""The time of creation."""
|
"""The time of creation."""
|
||||||
@ -597,15 +597,15 @@ class JournalEntry(db.Model):
|
|||||||
"""True for a debit entry, or False for a credit entry."""
|
"""True for a debit entry, or False for a credit entry."""
|
||||||
no = db.Column(db.Integer, nullable=False)
|
no = db.Column(db.Integer, nullable=False)
|
||||||
"""The entry number under the transaction and debit or credit."""
|
"""The entry number under the transaction and debit or credit."""
|
||||||
pay_off_target_id = db.Column(db.Integer,
|
original_id = db.Column(db.Integer,
|
||||||
db.ForeignKey(id, onupdate="CASCADE"),
|
db.ForeignKey(id, onupdate="CASCADE"),
|
||||||
nullable=True)
|
nullable=True)
|
||||||
"""The ID of the pay-off target entry."""
|
"""The ID of the original entry when offsetting."""
|
||||||
pay_off_target = db.relationship("JournalEntry", back_populates="pay_off",
|
original = db.relationship("JournalEntry", back_populates="offset",
|
||||||
remote_side=id, passive_deletes=True)
|
remote_side=id, passive_deletes=True)
|
||||||
"""The pay-off target entry."""
|
"""The original entry when offsetting."""
|
||||||
pay_off = db.relationship("JournalEntry", back_populates="pay_off_target")
|
offset = db.relationship("JournalEntry", back_populates="original")
|
||||||
"""The pay-off entries."""
|
"""The offset entries."""
|
||||||
currency_code = db.Column(db.String,
|
currency_code = db.Column(db.String,
|
||||||
db.ForeignKey(Currency.code, onupdate="CASCADE"),
|
db.ForeignKey(Currency.code, onupdate="CASCADE"),
|
||||||
nullable=False)
|
nullable=False)
|
||||||
|
@ -91,8 +91,8 @@ class EntryCollector:
|
|||||||
Account.title_l10n.contains(k),
|
Account.title_l10n.contains(k),
|
||||||
code.contains(k),
|
code.contains(k),
|
||||||
Account.id.in_(select_l10n)]
|
Account.id.in_(select_l10n)]
|
||||||
if k in gettext("Pay-off needed"):
|
if k in gettext("Need offset"):
|
||||||
conditions.append(Account.is_pay_off_needed)
|
conditions.append(Account.is_offset_needed)
|
||||||
return sa.select(Account.id).filter(sa.or_(*conditions))
|
return sa.select(Account.id).filter(sa.or_(*conditions))
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
@ -85,9 +85,9 @@ First written: 2023/1/31
|
|||||||
<div class="accounting-card col-sm-6">
|
<div class="accounting-card col-sm-6">
|
||||||
<div class="accounting-card-title">{{ obj.title }}</div>
|
<div class="accounting-card-title">{{ obj.title }}</div>
|
||||||
<div class="accounting-card-code">{{ obj.code }}</div>
|
<div class="accounting-card-code">{{ obj.code }}</div>
|
||||||
{% if obj.is_pay_off_needed %}
|
{% if obj.is_offset_needed %}
|
||||||
<div>
|
<div>
|
||||||
<span class="badge rounded-pill bg-info">{{ A_("Pay-off needed") }}</span>
|
<span class="badge rounded-pill bg-info">{{ A_("Need offset") }}</span>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<div class="small text-secondary fst-italic">
|
<div class="small text-secondary fst-italic">
|
||||||
|
@ -63,9 +63,9 @@ First written: 2023/2/1
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-check form-switch mb-3">
|
<div class="form-check form-switch mb-3">
|
||||||
<input id="accounting-is-pay-off-needed" class="form-check-input" type="checkbox" name="is_pay_off_needed" value="1" {% if form.is_pay_off_needed.data %} checked="checked" {% endif %}>
|
<input id="accounting-is-offset-needed" class="form-check-input" type="checkbox" name="is_offset_needed" value="1" {% if form.is_offset_needed.data %} checked="checked" {% endif %}>
|
||||||
<label class="form-check-label" for="accounting-is-pay-off-needed">
|
<label class="form-check-label" for="accounting-is-offset-needed">
|
||||||
{{ A_("The entries in the account need pay-off.") }}
|
{{ A_("The entries in the account need offset.") }}
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -58,8 +58,8 @@ First written: 2023/1/30
|
|||||||
{% for item in list %}
|
{% for item in list %}
|
||||||
<a class="list-group-item list-group-item-action" href="{{ url_for("accounting.account.detail", account=item)|accounting_append_next }}">
|
<a class="list-group-item list-group-item-action" href="{{ url_for("accounting.account.detail", account=item)|accounting_append_next }}">
|
||||||
{{ item }}
|
{{ item }}
|
||||||
{% if item.is_pay_off_needed %}
|
{% if item.is_offset_needed %}
|
||||||
<span class="badge rounded-pill bg-info">{{ A_("Pay-off needed") }}</span>
|
<span class="badge rounded-pill bg-info">{{ A_("Need offset") }}</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</a>
|
</a>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
Loading…
Reference in New Issue
Block a user