Ejemplo n.º 1
0
    def post(self):
        request = reqparse.RequestParser() \
            .add_argument('balanceId', type=int, required=True) \
            .add_argument('amount', type=float, required=True) \
            .add_argument('description', required=True) \
            .add_argument('budgetId', type=int, required=True) \
            .parse_args()

        user_id = get_jwt_identity()

        if request['balanceId'] not in list(
                map(lambda b: b.id,
                    User.find_by_id(user_id).balances)):
            return resp_util.access_denied()

        if request['budgetId'] not in list(
                map(lambda b: b.id,
                    User.find_by_id(user_id).budgets)):
            return resp_util.access_denied()

        Transaction(balance_id=request['balanceId'],
                    user_id=user_id,
                    budget_id=request['budgetId'],
                    amount=request['amount'],
                    datetime=datetime.now(),
                    description=request['description']).save_to_db()
Ejemplo n.º 2
0
    def get(self):
        request = reqparse.RequestParser() \
            .add_argument('dateFrom', type=int, required=True) \
            .add_argument('dateTo', type=int, required=True) \
            .parse_args()

        balances = User.find_by_id(get_jwt_identity()).balances

        def fold(b: Budget):
            income = 0
            outcome = 0
            for t in b.transactions:
                transaction_unix = int(time.mktime(t.datetime.timetuple()))
                if not request['dateFrom'] < transaction_unix < request[
                        'dateTo']:
                    continue

                if t.amount >= 0:
                    income += t.amount
                else:
                    outcome += abs(t.amount)

            return {
                'name': b.name,
                'currency': b.currency,
                'income': float(income),
                'outcome': float(outcome),
            }

        return list(map(fold, balances))
Ejemplo n.º 3
0
    def post(self):
        request = reqparse.RequestParser() \
            .add_argument('balanceId', type=int, required=True) \
            .add_argument('amount', type=float, required=True) \
            .add_argument('goalId', type=int, required=True) \
            .parse_args()

        user_id = get_jwt_identity()

        if request['goalId'] not in list(
                map(lambda b: b.id,
                    User.find_by_id(user_id).goals)):
            return resp_util.access_denied()

        if request['balanceId'] not in list(
                map(lambda b: b.id,
                    User.find_by_id(user_id).balances)):
            return resp_util.access_denied()

        if request['amount'] <= 0:
            return resp_util.invalid_request()

        goal = Goal.find_by_id(request['goalId'])
        balance = Balance.find_by_id(request['balanceId'])

        if goal.currency != balance.currency:
            return {'message': 'Currencies doesn\'t match'}, 500

        t1 = Transaction(balance_id=request['balanceId'],
                         user_id=user_id,
                         amount=-request['amount'],
                         datetime=datetime.now(),
                         description='filling the goal: ' + str(goal.id))

        t2 = Transaction(balance_id=goal.balance_id,
                         user_id=user_id,
                         amount=request['amount'],
                         datetime=datetime.now(),
                         description='filling the goal: ' + str(goal.id))

        Transaction.save_to_db_in_session(t1, t2)
Ejemplo n.º 4
0
    def get(self):
        request = reqparse.RequestParser() \
            .add_argument('id', type=int) \
            .add_argument('currency') \
            .parse_args()

        if request['id'] is None:
            balances = list(
                filter(lambda b: b.system is False,
                       User.find_by_id(get_jwt_identity()).balances))
            return ser_util.serialize_balances(balances) if not request['currency'] \
                else ser_util.serialize_balances(list(filter(lambda b: b.currency == request['currency'], balances)))

        if request['id'] <= 0:
            return resp_util.invalid_request('Given id isn\'t valid')

        balance = Balance.find_by_user_id(get_jwt_identity(), request['id'])
        if not balance or balance.system is True:
            return resp_util.not_found()
        return ser_util.serialize_balance(balance)
Ejemplo n.º 5
0
    def get(self):
        id = reqparse.RequestParser() \
            .add_argument('id', type=int) \
            .parse_args()['id']

        if id is None:
            response = []
            for goal in User.find_by_id(get_jwt_identity()).goals:
                response.append(
                    ser_util.serialize_goal(
                        goal, Balance.actual_balance(goal.balance_id)))
            return response

        if id <= 0:
            return resp_util.invalid_request('Given id isn\'t valid')

        goal = Goal.find_by_user_id(get_jwt_identity(), id)
        if not goal:
            return resp_util.not_found()
        return ser_util.serialize_goal(goal,
                                       Balance.actual_balance(goal.balance_id))
Ejemplo n.º 6
0
    def get(self):
        id = reqparse.RequestParser() \
            .add_argument('id', type=int) \
            .parse_args()['id']

        if id is None:
            response = []
            for budget in User.find_by_id(get_jwt_identity()).budgets:
                response.append(
                    ser_util.serialize_budget(
                        budget, calculate_budget_current_amount(budget)))
            return response

        if id <= 0:
            return resp_util.invalid_request('Given id isn\'t valid')

        budget = Budget.find_by_user_id(get_jwt_identity(), id)
        if not budget:
            return resp_util.not_found()
        return ser_util.serialize_budget(
            budget, calculate_budget_current_amount(budget))