diff --git a/api/institution_account/controllers.py b/api/institution_account/controllers.py index b6ac6df..3c0a4a7 100644 --- a/api/institution_account/controllers.py +++ b/api/institution_account/controllers.py @@ -1,6 +1,7 @@ -from flask import g, request, jsonify, make_response +from flask import g, request, jsonify, make_response, session from flask_restx import Resource, fields from api.institution_account.models import InstitutionAccountModel +from api.transaction.models import TransactionModel institution_account_model = g.api.model('InstitutionAccount', { 'institution_id': fields.String(required=True, description='Institution ID'), @@ -8,7 +9,10 @@ 'name': fields.String(required=True, description='Account Name'), 'number': fields.String(required=True, description='Account Number'), 'status': fields.String(enum=['active', 'inactive'], required=True, description='Account Status'), - 'balance': fields.Float(required=True, description='Account Balance') + 'balance': fields.Float(required=True, description='Account Balance'), + 'starting_balance': fields.Float(required=False, description='Starting Balance'), + 'account_type': fields.String(enum=['checking', 'savings', 'credit', 'loan', 'investment', 'other'], required=True, description='Account Type'), + 'account_class': fields.String(enum=['asset', 'liability'], required=True, description='Account Class') }) @g.api.route('/institution/account') @@ -22,6 +26,9 @@ def post(self): number = data.get('number') status = data.get('status') balance = data.get('balance') + starting_balance = data.get('starting_balance') + account_type = data.get('account_type') + account_class = data.get('account_class') new_account = InstitutionAccountModel( institution_id=institution_id, @@ -29,7 +36,10 @@ def post(self): name=name, number=number, status=status, - balance=balance + balance=balance, + starting_balance=starting_balance, + account_type=account_type, + account_class=account_class ) new_account.save() @@ -39,3 +49,22 @@ def get(self): accounts = InstitutionAccountModel.query.all() _accounts = [account.to_dict() for account in accounts] return make_response(jsonify({'accounts': _accounts}), 200) + +@g.api.route('/institution/account/update_balance') +class InstitutionAccountUpdateBalance(Resource): + def get(self): + __accounts = [] + user_id = session.get('_user_id') + accounts = InstitutionAccountModel.query.all() + for account in accounts: + # get the current account balance + starting_balance = account.starting_balance + # get all the transactions for that account + transactions = TransactionModel.query.filter_by(account_id=account.id, user_id=user_id).all() + # sum up all the transactions for the account + total = sum([transaction.amount for transaction in transactions]) + # update the account balance + new_account_balance = starting_balance + total + # we need to offset the transactions + print(f'Updating account {account.name} balance from {account.balance} to {new_account_balance}') + \ No newline at end of file diff --git a/api/institution_account/models.py b/api/institution_account/models.py index 249c6df..817773a 100644 --- a/api/institution_account/models.py +++ b/api/institution_account/models.py @@ -7,17 +7,23 @@ class InstitutionAccountModel(Base): institution = db.relationship('InstitutionModel', backref='account') user_id = db.Column('user_id', db.Text, db.ForeignKey('user.id'), nullable=False) name = db.Column(db.String(255), nullable=False) - number = db.Column(db.String(255), nullable=False) status = db.Column(db.Enum('active', 'inactive',name='status_enum'), nullable=False) - balance = db.Column(db.Float, nullable=False) + balance = db.Column(db.Float, nullable=True) + starting_balance = db.Column(db.Float, nullable=True) + account_type = db.Column(db.Enum('checking', 'savings', 'credit', 'loan', 'investment', 'other', name='account_type_enum'), nullable=True) + account_class = db.Column(db.Enum('asset','liability', name='account_class_enum'), nullable=True) + number = db.Column(db.String(255), nullable=True) - def __init__(self, institution_id, user_id, name, number, status, balance): + def __init__(self, institution_id, user_id, name, status, balance, starting_balance, account_type, account_class, number): self.institution_id = institution_id self.user_id = user_id self.name = name - self.number = number self.status = status self.balance = balance + self.starting_balance = starting_balance + self.account_type = account_type + self.account_class = account_class + self.number = number def __repr__(self): return f'' @@ -29,9 +35,12 @@ def to_dict(self): 'institution': self.institution.to_dict(), 'user_id': self.user_id, 'name': self.name, - 'number': self.number, 'status': self.status, 'balance': self.balance, + 'starting_balance': self.starting_balance, + 'account_type': self.account_type, + 'account_class': self.account_class, + 'number': self.number, 'created_at': self.created_at, 'updated_at': self.updated_at } diff --git a/api/transaction/controllers.py b/api/transaction/controllers.py index 8ebc6af..004548e 100644 --- a/api/transaction/controllers.py +++ b/api/transaction/controllers.py @@ -172,7 +172,7 @@ def ensure_account_exists(self,account_name, institution_id): account = InstitutionAccountModel.query.filter_by(name=account_name,user_id=user_id).first() if not account: print(f"InstitutionAccountModel '{account_name}' does not exist. Creating...") - account = InstitutionAccountModel(name=account_name, institution_id=institution_id, user_id=user_id, number="Unknown", status='active', balance=0) + account = InstitutionAccountModel(name=account_name, institution_id=institution_id, user_id=user_id, number="Unknown", status='active', balance=0, starting_balance=0,account_type='other',account_class='asset') db.session.add(account) db.session.commit() return account.id diff --git a/app/institution_account/controllers.py b/app/institution_account/controllers.py index 34385a3..da183a5 100644 --- a/app/institution_account/controllers.py +++ b/app/institution_account/controllers.py @@ -24,3 +24,4 @@ def institution_account(): _istitutions = requests.get(url_for('institution', _external=True), timeout=15).json().get('institutions', []) return render_template('institution_account/index.html', accounts=accounts, user_id=user_id, institutions=_istitutions) + diff --git a/app/templates/institution_account/index.html b/app/templates/institution_account/index.html index fa72ed2..55793e1 100644 --- a/app/templates/institution_account/index.html +++ b/app/templates/institution_account/index.html @@ -133,6 +133,7 @@ + diff --git a/app/templates/transactions/import.html b/app/templates/transactions/import.html new file mode 100644 index 0000000..b039992 --- /dev/null +++ b/app/templates/transactions/import.html @@ -0,0 +1,91 @@ +{% extends "partials/base.html" %} +{% block title %}Import Transactions{% endblock title %} +{% block extra_css %} + + + + + +{% endblock extra_css %} +{% block content %} +
+ +
+
+ +
+
+
+
+

Multiple File Upload

+
+ +
+
+
+ +
+
+
+ +
+ +

Drop files here or click to upload.

+
+
+
    +
  • + +
    +
    +
    +
    + Dropzone-Image +
    +
    +
    +
    +
     
    +

    + +
    +
    +
    + +
    +
    +
    +
  • +
+ +
+ +
+ +
+
+ +
+ +
+
+ + + +{% block footer %} +{% include "partials/footer.html" %} +{% endblock footer %} + + +{% endblock content %} +{% block extra_js %} + + + + + + + + + +{% endblock extra_js %} diff --git a/app/templates/transactions/index.html b/app/templates/transactions/index.html index f6efa15..c7ebf07 100644 --- a/app/templates/transactions/index.html +++ b/app/templates/transactions/index.html @@ -1,11 +1,6 @@ {% extends "partials/base.html" %} {% block title %}Transactions{% endblock title %} {% block extra_css %} - - - - - {% endblock extra_css %} {% block content %}
diff --git a/app/transactions/controllers.py b/app/transactions/controllers.py index 86e50cb..c29e50f 100644 --- a/app/transactions/controllers.py +++ b/app/transactions/controllers.py @@ -21,3 +21,18 @@ def transactions(): _transactions = requests.get(api_url, timeout=15).json().get('transactions', []) user_id = session.get('_user_id') return render_template('transactions/index.html', transactions=_transactions, user_id=user_id) + +@transactions_blueprint.route('/transactions/import') +@login_required +def import_transactions(): + """ + Render the import transactions page. + + This view function renders the transactions/import.html template with the user ID + from the session. + + Returns: + str: Rendered HTML template for the import transactions page. + """ + user_id = session.get('_user_id') + return render_template('transactions/import.html', user_id=user_id)