Example #1
0
def getMonthsList():
    firstMovement = Movement.select().order_by(Movement.date.asc()).get()
    firstMovement.date = firstMovement.date + relativedelta(months=-1)
    lastMovement = Movement.select().order_by(Movement.date.desc()).get()

    startDate = datetime.datetime.strftime(firstMovement.date, '%Y-%m-%d')
    endDate = datetime.datetime.strftime(lastMovement.date, '%Y-%m-%d')

    months = pd.date_range(startDate, endDate,
                           freq='MS').strftime("%b-%Y$%Y/%m").tolist()
    return months
Example #2
0
def addMovement(year, month):
    movement = Movement.create(date=request.form['date'],
                               original_name=request.form['name'],
                               value=request.form['value'],
                               type=request.form['type'],
                               status='SHOW')
    movement.save()

    return redirect("/" + year + "/" + month)
Example #3
0
def addCategory(movement_id):
    name = request.form['name']
    try:
        category = Category.get(name=name)
    except:
        category = Category.create(name=name)
        category.save()

    movement = Movement.get(id=movement_id)
    Movement_has_Category.create(movement=movement, category=category).save()

    return jsonify({'id': category.id})
Example #4
0
def list(year, month):
    if not month:
        now = datetime.datetime.now()
        year = str(now.year)
        month = str(now.month)

    try:
        movements = Movement.select().where(
            Movement.date.between(year + '-' + month + '-01', year + '-' +
                                  month + '-31')).order_by(Movement.date.asc())

        months = getMonthsList()

        total = 0
        totalIncome = 0
        totalOutcome = 0
        for movement in movements:
            if movement.status == 'SHOW':
                movement.tags = Category.select().join(
                    Movement_has_Category).join(Movement).where(
                        Movement.id == movement.id)
                if movement.type == 'OUTCOME':
                    total = total - movement.value
                    totalOutcome = totalOutcome + movement.value
                else:
                    total = total + movement.value
                    totalIncome = totalIncome + movement.value

        return render_template('movements.jinja2',
                               movements=movements,
                               total=total,
                               months=months,
                               totalIncome=totalIncome,
                               totalOutcome=totalOutcome,
                               year=year,
                               month=month)

    except:
        return render_template('movements.jinja2',
                               movements=[],
                               total=0,
                               months=[],
                               totalIncome=0,
                               totalOutcome=0)
Example #5
0
def getMovementsByTags(year, month):
    tags = Category.select().execute()
    data = []
    for tag in tags:
        movements = Movement.select().join(Movement_has_Category).join(
            Category).where((Category.id == tag.id) & (Movement.date.between(
                year + '-' + month + '-01', year + '-' + month + '-31')))

        sum = 0
        for movement in movements:
            if movement.type == "OUTCOME":
                sum = sum + movement.value

        if sum:
            data.append({'name': tag.name, 'value': sum})

    data = sorted(data, key=lambda k: k['value'])

    for item in data:
        item['value'] = str(item['value'])

    return jsonify(data)
Example #6
0
def changeMovementName(movement_id):
    movement = Movement.get(id=movement_id)
    movement.edited_name = request.form['newName']
    movement.save()
    return "ok"
Example #7
0
def removeMovement(movement_id):
    movement = Movement.get(id=movement_id)
    movement.status = Movement.STATUS_HIDE
    movement.save()
    return "ok"
Example #8
0
    def __init__(self, uuid):
        # Movement_has_Category.delete().execute()
        # Movement.delete().execute()

        downloader = Downloader(uuid)
        account_statements = downloader.download_account_data()

        for statement in account_statements:

            try:
                movement = Movement.get(hash=statement['id'])

                if movement.id:
                    continue
            except:
                date = datetime.strptime(statement['postDate'], '%Y-%m-%d')

                if statement['__typename'] == 'BarcodePaymentEvent':
                    type = 'OUTCOME'
                    original_name = statement['title'] + " " + statement[
                        'detail']
                elif statement['__typename'] == 'TransferOutEvent':
                    type = 'OUTCOME'
                    original_name = statement['title'] + " " + statement[
                        'destinationAccount']['name']
                elif statement['__typename'] == 'TransferInEvent':
                    original_name = statement['title']

                    if statement['originAccount']:
                        original_name = original_name + " " + statement[
                            'originAccount']['name']

                    type = 'INCOME'

                if statement['__typename'] == 'TransferOutReversalEvent':
                    value = float(statement['detail'].split(
                        'R$ ', 1)[1].replace('.', '').replace(',', '.'))
                    type = 'REVERSAL'
                else:
                    value = statement['amount']

                Movement.create(original_name=original_name,
                                date=date,
                                value=value,
                                status='SHOW',
                                type=type,
                                hash=statement['id'])

        card_statements = downloader.download_credit_card_data()

        for statement in card_statements:

            try:
                movement = Movement.get(hash=statement['id'])
                if movement.id:
                    continue
            except:
                rest = statement['time'].split(
                    'T', 1)[0]  # todo Haw ficou de corrigir para a data iso

                date = datetime.strptime(rest, '%Y-%m-%d')
                Movement.create(original_name=statement['description'],
                                date=date,
                                value=statement['amount'] / 100,
                                status='SHOW',
                                type='OUTCOME',
                                hash=statement['id'])