コード例 #1
0
ファイル: upload.py プロジェクト: pierroz127/family-balance
 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')
コード例 #2
0
    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()
コード例 #3
0
ファイル: edit.py プロジェクト: pierroz127/family-balance
    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))