""" This file is part of Accountant. Accountant is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Foobar is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with Accountant. If not, see . """ from app import app from app import db from api.model.entries import Entry from sqlalchemy import func, desc from sqlalchemy.ext.hybrid import hybrid_property, hybrid_method from sqlalchemy.orm import sessionmaker, column_property from sqlalchemy.sql import func, select #from sqlalchemy import * from flask import json, request @app.route("/api/entries///") def get_entries(account_id, year, month): """ Return entries for an account, year, and month. """ session = db.session query = session.query( Entry ).select_from( session.query(Entry) .filter(Entry.account_id == account_id) .order_by( desc(Entry.operation_date), Entry.value, Entry.label, ).subquery() ).filter(func.date_trunc('month', Entry.operation_date) == "%s-%s-01" % (year, month)) return json.dumps([{ "id": i.id, "pointed": i.pointed, "operation_date": i.operation_date.strftime("%Y-%m-%d"), "label": i.label, "value": str(i.value), "category": i.category, "sold": str(i.sold), "account_id": i.account_id } for i in query.all()]) @app.route("/api/entries", methods=["PUT"]) def add_entry(): session = db.session try: entry = Entry( operation_date = request.json['operation_date'], pointed = request.json['pointed'], label = request.json['label'], value = request.json['value'], category = request.json['category'], account_id = request.json['account_id'] ) session.add(entry) session.commit() return json.dumps("Entry added.") except: session.rollback() raise @app.route("/api/entries/", methods=["PUT"]) def update_entry(entry_id): session = db.session try: entry = session.query(Entry).filter(Entry.id == entry_id).first() entry.id = entry_id entry.operation_date = request.json['operation_date'] entry.pointed = request.json['pointed'] entry.label = request.json['label'] entry.value = request.json['value'] entry.category = request.json['category'] entry.account_id = request.json['account_id'] session.merge(entry) session.commit() return json.dumps("Entry #%s updated." % entry_id) except: session.rollback() raise @app.route("/api/entries/", methods=["DELETE"]) def delete_entry(entry_id): session = db.session try: entry = session.query(Entry).filter(Entry.id == entry_id).first() session.delete(entry) session.commit() return json.dumps("Entry #%s deleted." % entry_id) except: session.rollback() raise