diff --git a/drcr/general_journal/views.py b/drcr/general_journal/views.py index 3c3655a..5763866 100644 --- a/drcr/general_journal/views.py +++ b/drcr/general_journal/views.py @@ -20,13 +20,44 @@ from .. import AMOUNT_DPS from ..database import db_session from ..models import TrialBalancer from ..webapp import all_transactions, app -from .models import BalanceAssertion, GeneralJournalTransaction +from .models import BalanceAssertion, GeneralJournalPosting, GeneralJournalTransaction from datetime import datetime @app.route('/general-journal') def general_journal(): - return render_template('general_journal/general_journal.html', transactions=GeneralJournalTransaction.query.all()) + return render_template('general_journal/general_journal.html', transactions=sorted(GeneralJournalTransaction.query.all(), key=lambda t: t.dt)) + +@app.route('/general-journal/new', methods=['GET', 'POST']) +def general_journal_new(): + if request.method == 'GET': + return render_template('general_journal/general_journal_edit.html', transaction=None) + + # New transaction + transaction = GeneralJournalTransaction( + dt=datetime.strptime(request.form['dt'], '%Y-%m-%d'), + description=request.form['description'], + postings=[] + ) + + for account, sign, amount in zip(request.form.getlist('account'), request.form.getlist('sign'), request.form.getlist('amount')): + quantity = round(float(amount) * (10**AMOUNT_DPS)) + if sign == 'cr': + quantity = -quantity + + posting = GeneralJournalPosting( + account=account, + quantity=quantity, + commodity='$' # TODO: Commodities + ) + transaction.postings.append(posting) + + transaction.assert_valid() + + db_session.add(transaction) + db_session.commit() + + return redirect('/general-journal') @app.route('/balance-assertions') def balance_assertions(): diff --git a/drcr/templates/general_journal/general_journal.html b/drcr/templates/general_journal/general_journal.html index 31f1411..8d9d8c6 100644 --- a/drcr/templates/general_journal/general_journal.html +++ b/drcr/templates/general_journal/general_journal.html @@ -21,6 +21,10 @@ {% block content %}