def post(self): try: bank_statement = self.get_uploads()[0] from ofxparse import OfxParser ofx = OfxParser.parse(bank_statement.open()) user = users.get_current_user() logging.info(ofx.account.number) # The account number logging.info(ofx.account.routing_number) # The transit id (sometimes called branch number) #logging.info(ofx.account.statement # Account information for a period of time logging.info(ofx.account.statement.start_date) # The start date of the transactions logging.info(ofx.account.statement.end_date) # The end date of the transactions #ofx.account.statement.transactions # A list of account activities logging.info(ofx.account.statement.balance) # The money in the account as of the statement for tx in ofx.account.statement.transactions: logging.info(vars(tx)) if tx.type == 'debit': # new expense: new_expense = Expenses(parent=expenses_key(tx.date.month, tx.date.year)) new_expense.user = user new_expense.date = tx.date new_expense.amount = -float(str(tx.amount)) new_expense.category = tx.payee new_expense.exptype = 3 new_expense.put() finally: self.redirect('comptes')
def get_user_expenses(cls, month, year): """ """ first_day = date(year, month, 1) if month == 12: last_day = date(year + 1, 1, 1) else: last_day = date(year, month + 1, 1) logging.info("load user expenses between %s and %s" % (first_day.strftime('%d %b %Y'), last_day.strftime('%d %b %Y'))) q = Expenses.query(ancestor=expenses_key(month, year)) q.filter(ndb.AND(Expenses.date >= first_day, Expenses.date < last_day)) #query for old data that had no ancestor (before migration to High Replication Datastore) q_old = Expenses.query(ndb.AND(Expenses.date >= first_day, Expenses.date < last_day)) users_expenses = dict() keys = set() if users_helper.is_autorized(): # always start with the current user currentUser = users.get_current_user().nickname() users_expenses[currentUser] = UserExpenses(currentUser) x = 0 #TODO Hem refactor this ugly code for exp in q.fetch(500): exp.update_urlsafe() keys.add(exp.urlsafe) user_nickname = exp.user.nickname() if user_nickname not in users_expenses.keys(): users_expenses[user_nickname] = UserExpenses(user_nickname) users_expenses[user_nickname].add(exp) x += 1 logging.info('%d expenses with ancestor', x) x = 0 for exp in q_old.fetch(500): exp.update_urlsafe() if exp.urlsafe not in keys: user_nickname = exp.user.nickname() if user_nickname not in users_expenses.keys(): users_expenses[user_nickname] = UserExpenses(user_nickname) users_expenses[user_nickname].add(exp) x += 1 logging.info('%d expenses with no ancestor', x) for usr in users_expenses.keys(): users_expenses[usr].taxratio = cls.get_tax_ratio(usr, year) users_expenses[usr].expenses = sorted(users_expenses[usr].expenses, key=lambda e: e.date) return users_expenses.values()
def post(self): try: selected_month = int(self.request.get("mois")) selected_year = int(self.request.get("annee")) except: dtnow = datetime.utcnow() selected_month = dtnow.month selected_year = dtnow.year if users.get_current_user(): urlsafe = self.request.get("urlsafe") if urlsafe != "": logging.info("get expense from key " + urlsafe) new_expense = Expenses.get_from_key(ndb.Key(urlsafe=urlsafe)) if new_expense is None: raise Exception("unable to retrieve expense for key " + urlsafe) else: new_expense = Expenses(parent=expenses_key(selected_month, selected_year)) new_expense.update(users.get_current_user(), selected_month, selected_year, self.request) else: raise Exception("bad user") self.redirect("/comptes?mois=%d&annee=%d" % (selected_month, selected_year))