def index(): '''Budget dashboard''' current_user_id = session.get('logged_in_user') # get uncategorized expenses exp = Expenses(current_user_id) uncategorized_expenses = exp.get_entries(category_name="Uncategorized") # get latest expenses exp = Expenses(current_user_id) latest_expenses = exp.get_entries(limit=5) # get latest income inc = Income(current_user_id) latest_income = inc.get_entries(limit=5) # get accounts acc = Accounts(current_user_id) accounts = acc.get_accounts_and_loans() # split, get totals assets, liabilities, loans, assets_total, liabilities_total = [], [], [], 0, 0 for a in accounts: if a[0].type == 'asset': assets.append(a) assets_total += float(a[0].balance) elif a[0].type == 'liability': liabilities.append(a) liabilities_total += float(a[0].balance) elif a[0].type == 'loan': # if we owe someone, it is our liability if float(a[0].balance) < 0: liabilities.append(a) liabilities_total += float(a[0].balance) else: assets.append(a) # monthly totals t, totals_list, highest_bar = Totals(current_user_id), [], 0. # object to dict for total in t.get_totals(): bar = {} bar['month'] = total.month if (float(total.expenses) > 0): bar['expenses'] = float(total.expenses) if (float(total.income) > 0): bar['income'] = float(total.income) totals_list.append(bar) if (total.expenses > highest_bar): highest_bar = total.expenses if (total.income > highest_bar): highest_bar = total.income # calculate height for each bar for total in totals_list: if 'expenses' in total: total['expenses-height'] = (total['expenses'] / highest_bar) * 100 if 'income' in total: total['income-height'] = (total['income'] / highest_bar) * 100 return render_template('admin_dashboard.html', **locals())
def index(date=None, category=None, page=1, items_per_page=10): '''List income entries for the user''' model = Income(session.get('logged_in_user')) dict = entries.index(**locals()) for key in dict.keys(): exec(key + " = dict['" + key + "']") return render_template('admin_show_income.html', **locals())
def add_income(): '''Add an income entry''' current_user_id = session.get('logged_in_user') inc = Income(current_user_id) acc = Accounts(current_user_id) if request.method == 'POST': dict = __validate_income_form() for key in dict.keys(): exec(key + " = dict['" + key + "']") # 'heavier' checks if not error: # valid date? if is_date(date): # valid amount? if is_float(amount): # valid category? if inc.is_category(id=category_id): # valid account? if acc.is_account(account_id=account_id): # add new income inc.add_income(account_id=account_id, amount=amount, category_id=category_id, date=date, description=description) # credit to account acc.modify_account_balance(account_id, amount) flash('Income added') else: error = 'Not a valid account' else: error = 'Not a valid category' else: error = 'Not a valid amount' else: error = 'Not a valid date' # fetch user's categories and accounts categories = inc.get_categories() accounts = acc.get_accounts() return render_template('admin_add_income.html', **locals())
def search(): '''Search income''' model = Income(session.get('logged_in_user')) # query query = request.form['q'] if 'q' in request.form else "" # fetch entries entries = model.get_entries() # filter entries = entries.filter(IncomeTable.description.like("%" + query + "%")) # categories categories = model.get_categories() # date ranges for the template date_ranges = get_date_ranges() return render_template('admin_search_income.html', **locals())
def delete_income(income_id): '''Delete income entry''' current_user_id = session.get('logged_in_user') incomes = Income(current_user_id) # is it valid? income = incomes.get_income(income_id) if income: # revert accounts = Accounts(current_user_id) accounts.modify_account_balance(amount=-float(income.amount), account_id=income.credit_to) incomes.delete_income(income_id) flash('Income deleted') else: flash('Not a valid income entry', 'error') return redirect(url_for('income.index'))
def search(): '''Search income''' model = Income(session.get('logged_in_user')) # query query = request.form['q'] if 'q' in request.form else "" # fetch entries entries = model.get_entries() # filter entries = entries.filter(IncomeTable.description.like("%"+query+"%")) # categories categories = model.get_categories() # date ranges for the template date_ranges = get_date_ranges() return render_template('admin_search_income.html', **locals())
def add_category(): '''Add an income category''' error = None if request.method == 'POST': new_category_name, current_user_id = request.form['name'], session.get( 'logged_in_user') inc = Income(current_user_id) error = entries.add_category(inc, new_category_name) if not error: flash('Income category added') return render_template('admin_add_income_category.html', error=error)
def export(date=None, category=None, page=1, items_per_page=10): '''Export income entries on a filter''' model = Income(session.get('logged_in_user')) dict = entries.index(**locals()) for key in dict.keys(): exec(key + " = dict['" + key + "']") response = make_response( render_template('admin_export_income.html', **locals())) response.headers['Content-type'] = 'text/csv' response.headers[ 'Content-disposition'] = 'attachment;filename=' + 'income-' + str( today_date()) + '.csv' return response
def edit_income(income_id): '''Edit income entry''' current_user_id = session.get('logged_in_user') inc = Income(current_user_id) # is it valid? income = inc.get_income(income_id) if income: # fetch user's categories and accounts categories = inc.get_categories() acc = Accounts(current_user_id) accounts = acc.get_accounts() if request.method == 'POST': # POST dict = __validate_income_form() for key in dict.keys(): exec(key + " = dict['" + key + "']") # 'heavier' checks if not error: # valid date? if is_date(date): # valid amount? if is_float(amount): # valid category? if inc.is_category(id=category_id): # valid account? if acc.is_account(account_id=account_id): # debit the original account acc.modify_account_balance(income.credit_to, -float(income.amount)) # credit the 'new' account acc.modify_account_balance(account_id, amount) # edit income entry inc.edit_income(account_id=account_id, amount=amount, category_id=category_id, date=date, description=description, income_id=income.id) flash('Income edited') return redirect(url_for('income.edit_income', income_id=income_id)) else: error = 'Not a valid account' else: error = 'Not a valid category' else: error = 'Not a valid amount' else: error = 'Not a valid date' return render_template('admin_edit_income.html', **locals()) else: return redirect(url_for('income.index'))
def edit_income(income_id): '''Edit income entry''' current_user_id = session.get('logged_in_user') inc = Income(current_user_id) # is it valid? income = inc.get_income(income_id) if income: # fetch user's categories and accounts categories = inc.get_categories() acc = Accounts(current_user_id) accounts = acc.get_accounts() if request.method == 'POST': # POST dict = __validate_income_form() for key in dict.keys(): exec(key + " = dict['" + key + "']") # 'heavier' checks if not error: # valid date? if is_date(date): # valid amount? if is_float(amount): # valid category? if inc.is_category(id=category_id): # valid account? if acc.is_account(account_id=account_id): # debit the original account acc.modify_account_balance( income.credit_to, -float(income.amount)) # credit the 'new' account acc.modify_account_balance(account_id, amount) # edit income entry inc.edit_income(account_id=account_id, amount=amount, category_id=category_id, date=date, description=description, income_id=income.id) flash('Income edited') return redirect( url_for('income.edit_income', income_id=income_id)) else: error = 'Not a valid account' else: error = 'Not a valid category' else: error = 'Not a valid amount' else: error = 'Not a valid date' return render_template('admin_edit_income.html', **locals()) else: return redirect(url_for('income.index'))
def getWKYIncome(account): check_and_update_account(account.account_id) wky = WKYInterface() month_income = wky.getMonthIncome('0', account.sessionid, account.user_id) json_month_income = json.loads(month_income) coin_info = wky.getCoinInfo(account.sessionid, account.user_id) json_coin_info = json.loads(coin_info) if 'iRet' not in json_month_income: return if json_month_income['iRet'] != 0: return if 'iRet' not in json_coin_info: return if json_coin_info['iRet'] != 0: return data_month_income = json_month_income['data'] data_coin_info = json_coin_info['data'] if 'month' in data_month_income and data_month_income['month'] != "": last_month_income = wky.getMonthIncome(data_month_income['month'], account.sessionid, account.user_id) json_last_month_income = json.loads(last_month_income) if 'iRet' not in json_last_month_income: return if json_last_month_income['iRet'] != 0: return data_last_month_income = json_last_month_income['data'] print data_last_month_income total_income = str(data_month_income['totalIncome']) total_outcome = str(data_coin_info['totalOutcome']) current_month_income = 0 date_list = [] income_list = [] if len(data_month_income['incomeArr']) > 0: last_income = data_month_income['incomeArr'][0]['num'] for kk in range(len(data_month_income['incomeArr'])): current_month_income += float(data_month_income['incomeArr'][kk]['num']) else: last_income = data_last_month_income['incomeArr'][0]['num'] month_income = str(current_month_income) for k in range(7): current_len = len(data_month_income['incomeArr']) if k < current_len: date_list.append(data_month_income['incomeArr'][k]['date'][4:]) income_list.append(data_month_income['incomeArr'][k]['num']) else: date_list.append(data_last_month_income['incomeArr'][k-current_len]['date'][4:]) income_list.append(data_last_month_income['incomeArr'][k-current_len]['num']) income_list.reverse() date_list.reverse() income = Income(total_income=total_income, total_outcome=total_outcome, last_income=last_income, month_income=month_income, date_list=date_list, income_list=income_list, update_time=time.mktime(datetime.now().timetuple())) account = Account.objects(account_id=account.account_id).first() if account is None: return account.update(income=income, update_time=time.mktime(datetime.now().timetuple()))
def insert(self, dto): reg = Income() reg.map(dto) return IncomeDb().insert(reg)
def update(self, id, dto): reg = Income() reg.map(dto) return IncomeDb().update(id, reg)
from flask import Flask, jsonify, request from models.expense import Expense, ExpenseSchema from models.income import Income, IncomeSchema from models.transaction_type import TransactionType app = Flask(__name__) transactions = [ Income('Salary', 5000), Income('Dividends', 200), Expense('pizza', 50), Expense('Rock Concert', 100) ] @app.route('/incomes') def get_incomes(): schema = IncomeSchema(many=True) incomes = schema.dump( filter(lambda t: t.type == TransactionType.INCOME, transactions)) return jsonify(incomes.data) @app.route('/incomes', methods=['POST']) def add_income(): income = IncomeSchema().load(request.get_json()) transactions.append(income.data) return "", 204