06/02 Update add new balance option

This commit is contained in:
2026-06-02 16:09:42 -04:00
parent 8b97854949
commit 8536988b1a
2 changed files with 34 additions and 2 deletions
+20 -2
View File
@@ -2,8 +2,8 @@ from datetime import date
from flask import Blueprint, render_template, redirect, url_for, flash, request, jsonify from flask import Blueprint, render_template, redirect, url_for, flash, request, jsonify
from flask_login import login_required from flask_login import login_required
from flask_wtf import FlaskForm from flask_wtf import FlaskForm
from wtforms import StringField, SelectField, TextAreaField, SubmitField from wtforms import StringField, SelectField, TextAreaField, SubmitField, DecimalField
from wtforms.validators import DataRequired, Length, Optional from wtforms.validators import DataRequired, Length, Optional, NumberRange
from sqlalchemy import func, extract from sqlalchemy import func, extract
from app.extensions import db from app.extensions import db
from app.models.account import Account from app.models.account import Account
@@ -44,6 +44,8 @@ class AccountForm(FlaskForm):
color = StringField('Color', default='#4F81C7') color = StringField('Color', default='#4F81C7')
icon = StringField('Icon', default='bi-bank') icon = StringField('Icon', default='bi-bank')
notes = TextAreaField('Notes', validators=[Optional(), Length(max=500)]) notes = TextAreaField('Notes', validators=[Optional(), Length(max=500)])
opening_balance = DecimalField('Opening Balance', places=2, default=0,
validators=[Optional()])
submit = SubmitField('Save') submit = SubmitField('Save')
@@ -103,7 +105,23 @@ def new():
balance=0, balance=0,
) )
db.session.add(account) db.session.add(account)
db.session.flush() # get account.id before creating transaction
opening = float(form.opening_balance.data or 0)
if opening != 0:
from app.models.transaction import Transaction
txn_type = 'income' if opening > 0 else 'expense'
db.session.add(Transaction(
account_id=account.id,
transaction_type=txn_type,
amount=abs(opening),
description='Opening Balance',
date=date.today(),
notes='Initial account balance',
))
db.session.commit() db.session.commit()
calc_balance(account.id)
flash(f'Account "{account.name}" created.', 'success') flash(f'Account "{account.name}" created.', 'success')
return redirect(url_for('accounts.index')) return redirect(url_for('accounts.index'))
return render_template('accounts/form.html', form=form, title='New Account', return render_template('accounts/form.html', form=form, title='New Account',
+14
View File
@@ -53,6 +53,20 @@
{{ form.notes(class="form-control", rows=2, placeholder="Optional notes") }} {{ form.notes(class="form-control", rows=2, placeholder="Optional notes") }}
</div> </div>
{% if not account %}
<div class="mb-4">
{{ form.opening_balance.label(class="form-label fw-medium", style="font-size:13px;") }}
<div class="input-group">
<span class="input-group-text" style="font-size:13px;">{{ current_user.currency_symbol }}</span>
{{ form.opening_balance(class="form-control", placeholder="0.00", id="openingBalance") }}
</div>
<div style="font-size:11px;color:var(--muted);margin-top:4px;">
Current real-world balance. Leave at 0 if you'll enter all transactions from scratch.
For credit cards, enter a negative value if you currently owe money (e.g. -500).
</div>
</div>
{% endif %}
<div class="d-flex gap-2"> <div class="d-flex gap-2">
{{ form.submit(class="btn btn-primary") }} {{ form.submit(class="btn btn-primary") }}
<a href="{{ url_for('accounts.index') }}" class="btn btn-outline-secondary">Cancel</a> <a href="{{ url_for('accounts.index') }}" class="btn btn-outline-secondary">Cancel</a>