06/02 Update account balance adjustment
This commit is contained in:
@@ -137,3 +137,59 @@ def delete(id):
|
||||
db.session.commit()
|
||||
flash(f'Account "{account.name}" removed.', 'info')
|
||||
return redirect(url_for('accounts.index'))
|
||||
|
||||
|
||||
@accounts_bp.route('/<int:id>/adjust', methods=['GET', 'POST'])
|
||||
@login_required
|
||||
def adjust_balance(id):
|
||||
account = db.get_or_404(Account, id)
|
||||
calc_balance(account.id)
|
||||
db.session.refresh(account)
|
||||
current_balance = float(account.balance)
|
||||
|
||||
if request.method == 'POST':
|
||||
from app.models.transaction import Transaction
|
||||
from app.models.category import Category
|
||||
from wtforms import ValidationError
|
||||
|
||||
try:
|
||||
new_balance = float(request.form.get('new_balance', '').replace(',', ''))
|
||||
except (ValueError, AttributeError):
|
||||
flash('Invalid amount entered.', 'danger')
|
||||
return redirect(url_for('accounts.adjust_balance', id=id))
|
||||
|
||||
difference = round(new_balance - current_balance, 2)
|
||||
|
||||
if difference == 0:
|
||||
flash('Balance is already at that amount — no adjustment needed.', 'info')
|
||||
return redirect(url_for('accounts.index',
|
||||
tab='credit' if account.account_type == 'credit_card' else 'bank'))
|
||||
|
||||
txn_type = 'income' if difference > 0 else 'expense'
|
||||
amount = abs(difference)
|
||||
notes = request.form.get('notes', '').strip() or 'Manual balance adjustment'
|
||||
|
||||
txn = Transaction(
|
||||
account_id=account.id,
|
||||
transaction_type=txn_type,
|
||||
amount=amount,
|
||||
description='Balance Adjustment',
|
||||
date=date.today(),
|
||||
notes=notes,
|
||||
)
|
||||
db.session.add(txn)
|
||||
db.session.commit()
|
||||
calc_balance(account.id)
|
||||
|
||||
flash(
|
||||
f'Balance adjusted by '
|
||||
f'{"+" if difference > 0 else ""}{difference:,.2f}. '
|
||||
f'New balance: {new_balance:,.2f}.',
|
||||
'success'
|
||||
)
|
||||
return redirect(url_for('accounts.index',
|
||||
tab='credit' if account.account_type == 'credit_card' else 'bank'))
|
||||
|
||||
return render_template('accounts/adjust.html',
|
||||
account=account,
|
||||
current_balance=current_balance)
|
||||
|
||||
Reference in New Issue
Block a user