Пример #1
0
def handle_request(request):
    if post_action_is(request, 'add'):
        isin = request.values['isin']
        if '_' in isin:
            return viewcore.generate_error_context(
                'add_depotwert', 'ISIN darf kein Unterstrich "_" enthalten.')
        name = request.values['name']
        typ = request.values['typ']

        if "edit_index" in request.values:
            database_instance().depotwerte.edit(int(
                request.values['edit_index']),
                                                name=name,
                                                isin=isin,
                                                typ=typ)
            non_persisted_state.add_changed_depotwerte({
                'fa': 'pencil',
                'Name': name,
                'Isin': isin,
                'Typ': typ
            })
        else:
            database_instance().depotwerte.add(name=name, isin=isin, typ=typ)
            non_persisted_state.add_changed_depotwerte({
                'fa': 'plus',
                'Name': name,
                'Isin': isin,
                'Typ': typ
            })

    context = viewcore.generate_transactional_context('add_depotwert')
    context['approve_title'] = 'Depotwert hinzufügen'

    if post_action_is(request, 'edit'):
        db_index = int(request.values['edit_index'])
        db_row = database_instance().depotwerte.get(db_index)

        default_item = {
            'edit_index': str(db_index),
            'name': db_row['Name'],
            'isin': db_row['ISIN'],
            'typ': db_row['Typ']
        }

        context['default_item'] = default_item
        context['bearbeitungsmodus'] = True
        context['edit_index'] = db_index
        context['approve_title'] = 'Depotwert aktualisieren'

    if 'default_item' not in context:
        context['default_item'] = {
            'name': '',
            'isin': '',
            'typ': database_instance().depotwerte.TYP_ETF
        }

    context['letzte_erfassung'] = reversed(
        non_persisted_state.get_changed_depotwerte())
    context['types'] = database_instance().depotwerte.TYPES
    return context
Пример #2
0
def _handle_request(request):
    if persisted_state.database_instance().einzelbuchungen.anzahl() == 0:
        return viewcore.generate_error_context('uebersicht_sparen', 'Bitte erfassen Sie zuerst eine Einzelbuchung.')

    context = viewcore.generate_transactional_context('sparen')
    kontos = persisted_state.database_instance().sparkontos.get_all().Kontoname.tolist()
    typen = persisted_state.database_instance().sparkontos.KONTO_TYPEN
    depot_typen = persisted_state.database_instance().depotwerte.TYPES

    color_kontos = viewcore.get_generic_color_chooser(kontos)
    color_typen = viewcore.get_generic_color_chooser(typen + depot_typen)

    gesamt, kontos, typen = generate_konto_uebersicht(color_kontos, color_typen)
    diagramm_uebersicht, year_kontostaende = gesamt_uebersicht()
    gesamt_tabelle = berechne_gesamt_tabelle(year_kontostaende)
    gesamt_diagramm_labels, gesamt_diagramm_data = berechne_diagramm(diagramm_uebersicht)
    gesamt_linechart = berechne_kontogesamt(gesamt_tabelle)

    order_until_today = persisted_state.database_instance().orderdauerauftrag.get_all_order_until_today()

    context['kontos'] = kontos
    context['typen'] = typen
    context['gesamt'] = gesamt
    context['monatlich'] = berechne_monatlich()
    context['order_typ'] = berechne_order_typ(order_until_today)
    context['general_infos'] = general_infos()
    context['konto_diagramm'] = to_piechart(kontos, gesamt['wert'])
    context['typen_diagramm'] = to_piechart(typen, gesamt['wert'])
    context['gesamt_diagramm_labels'] = gesamt_diagramm_labels
    context['gesamt_diagramm_data'] = gesamt_diagramm_data
    context['gesamt_linechart'] = gesamt_linechart
    return context
Пример #3
0
def handle_request(request):
    if post_action_is(request, 'add'):
        kontoname = request.values['kontoname']
        if '_' in kontoname:
            return viewcore.generate_error_context(
                'add_depotwert',
                'Kontoname darf kein Unterstrich "_" enthalten.')
        kontotyp = request.values['kontotyp']

        if "edit_index" in request.values:
            database_instance().sparkontos.edit(int(
                request.values['edit_index']),
                                                kontoname=kontoname,
                                                kontotyp=kontotyp)
            non_persisted_state.add_changed_sparkontos({
                'fa': 'pencil',
                'Kontoname': kontoname,
                'Kontotyp': kontotyp
            })

        else:
            database_instance().sparkontos.add(kontoname=kontoname,
                                               kontotyp=kontotyp)
            non_persisted_state.add_changed_sparkontos({
                'fa': 'plus',
                'Kontoname': kontoname,
                'Kontotyp': kontotyp
            })

    context = viewcore.generate_transactional_context('add_sparkonto')
    context['approve_title'] = 'Sparkonto hinzufügen'
    if post_action_is(request, 'edit'):
        print("Please edit:", request.values['edit_index'])
        db_index = int(request.values['edit_index'])
        db_row = database_instance().sparkontos.get(db_index)

        default_item = {
            'edit_index': str(db_index),
            'kontotyp': db_row['Kontotyp'],
            'kontoname': db_row['Kontoname']
        }

        context['default_item'] = default_item
        context['bearbeitungsmodus'] = True
        context['edit_index'] = db_index
        context['approve_title'] = 'Sparkonto aktualisieren'

    if 'default_item' not in context:
        context['default_item'] = {'kontoname': '', 'kontotyp': ''}

    context['kontotypen'] = database_instance().sparkontos.KONTO_TYPEN
    context['letzte_erfassung'] = reversed(
        non_persisted_state.get_changed_sparkontos())
    return context
Пример #4
0
def _generate_content(context):
    depotwerte = persisted_state.database_instance().depotwerte
    shares_info = persisted_state.shares_data()
    depotauszuege = persisted_state.database_instance().depotauszuege
    isins = depotwerte.get_valid_isins()
    if not isins:
        return viewcore.generate_error_context(PAGE_NAME, NO_VALID_ISIN_IN_DB)

    etfs = []
    for isin in isins:
        isin_datum = 'Noch keine Daten'
        if shares_info.get_last_changed_date_for(isin):
            isin_datum = shares_info.get_last_changed_date_for(isin)

        etfs.append(
            {
                'Name': depotwerte.get_description_for(isin),
                'Datum': isin_datum,
                'ISIN': isin
            }
        )

    all_relevant_isins = depotauszuege.get_isins_invested_by()
    isins_with_data = shares_info.filter_out_isins_without_data(all_relevant_isins)

    german = gettext.translation('iso3166', pycountry.LOCALES_DIR, languages=['de'])

    context['etfs'] = etfs
    context['regions'] = get_data(
        lambda x: shares_info.get_latest_data_for(x)[SharesInfo.REGIONEN],
        isins_with_data,
        lambda x: depotauszuege.get_depotwert_by(x),
        depotwerte,
        lambda x: _translate(x, german)
    )
    context['sectors'] = get_data(
        lambda x: shares_info.get_latest_data_for(x)[SharesInfo.SEKTOREN],
        isins_with_data,
        lambda x: depotauszuege.get_depotwert_by(x),
        depotwerte,
        lambda x: x
    )
    context['costs'] = _get_costs(shares_info, isins_with_data, lambda x: depotauszuege.get_depotwert_by(x), depotwerte)

    return context
Пример #5
0
def handle_request(request):
    if not database_instance().sparkontos.get_depots():
        return viewcore.generate_error_context('add_depotauszug', NO_VALID_DEPOT_IN_DB)

    if not database_instance().depotwerte.get_depotwerte():
        return viewcore.generate_error_context('add_depotauszug', NO_VALID_SHARE_IN_DB)

    if post_action_is(request, 'add'):
        current_date = None
        for element in request.values:
            if element.startswith('datum_'):
                current_date = datum(request.values[element])
        if not current_date:
            return viewcore.generate_error_context('add_depotauszug', 'Interner Fehler <Kein Datum gefunden>.')
        konto = request.values['konto']

        if "edit_index" in request.values:
            for element in request.values:
                if element.startswith(KEY_WERT):
                    depotwert = element.split('_')[-1]
                    db_index = database_instance().depotauszuege.resolve_index(current_date, konto, depotwert)
                    value = request.values[element].replace(",", ".")
                    value = float(value)

                    if db_index is not None:
                        database_instance().depotauszuege.edit(db_index,
                                                               datum=current_date,
                                                               depotwert=depotwert,
                                                               wert="%.2f" % value,
                                                               konto=konto)
                        non_persisted_state.add_changed_depotauszuege(
                            {
                                'fa': 'pencil',
                                'datum': datum_to_german(current_date),
                                'wert': from_double_to_german(value),
                                'depotwert': depotwert,
                                'konto': konto
                            })
                    else:
                        database_instance().depotauszuege.add(datum=current_date,
                                                              depotwert=depotwert,
                                                              wert="%.2f" % value,
                                                              konto=konto)
                        non_persisted_state.add_changed_depotauszuege(
                            {
                                'fa': 'plus',
                                'datum': datum_to_german(current_date),
                                'wert': from_double_to_german(value),
                                'depotwert': depotwert,
                                'konto': konto
                            })


        else:

            result = database_instance().depotauszuege.get_by(current_date, konto)
            if len(result) > 0:
                return viewcore.generate_error_context('add_depotauszug',
                                                       'Für es besteht bereits ein Kontoauszug für {} am {}'.format(
                                                           konto,
                                                           datum_to_german(current_date)))

            for element in request.values:
                if element.startswith(KEY_WERT):
                    depotwert = element.split('_')[-1]
                    value = request.values[element].replace(",", ".")
                    value = float(value)

                    if value == 0 and not database_instance().depotauszuege.exists_wert(konto, depotwert):
                        continue

                    database_instance().depotauszuege.add(datum=current_date,
                                                          depotwert=depotwert,
                                                          wert="%.2f" % value,
                                                          konto=konto)
                    non_persisted_state.add_changed_depotauszuege(
                        {
                            'fa': 'plus',
                            'datum': datum_to_german(current_date),
                            'wert': from_double_to_german(value),
                            'depotwert': depotwert,
                            'konto': konto
                            })

    context = viewcore.generate_transactional_context('add_depotauszug')
    context['approve_title'] = 'Depotauszug hinzufügen'

    depotwerte = database_instance().depotwerte.get_depotwerte_descriptions()
    if post_action_is(request, 'edit'):
        print("Please edit:", request.values['edit_index'])
        db_index = int(request.values['edit_index'])
        db_row = database_instance().depotauszuege.get(db_index)

        edit_datum = db_row['Datum']
        edit_konto = db_row['Konto']
        db_row = database_instance().depotauszuege.get_by(edit_datum, edit_konto)

        filled_items = calculate_filled_items(db_row, depotwerte)
        empty_items = calculate_empty_items(depotwerte, filled_items)

        default_item = [{
            'datum': datum_to_string(edit_datum),
            'konto': edit_konto,
            'filled_items': filled_items,
            'empty_items': empty_items
        }]

        context['default_items'] = default_item
        context['bearbeitungsmodus'] = True
        context['edit_index'] = db_index
        context['approve_title'] = 'Depotauszug aktualisieren'

    if 'default_items' not in context:
        context['default_items'] = []
        for konto in database_instance().sparkontos.get_depots():
            default_datum = database_instance().depotauszuege.get_latest_datum_by(konto)
            if not default_datum:
                default_datum = date.today()

            db_row = database_instance().depotauszuege.get_by(default_datum, konto)

            filled_items = calculate_filled_items(db_row, depotwerte)
            empty_items = calculate_empty_items(depotwerte, filled_items)

            if len(filled_items) == 0:
                filled_items = empty_items
                empty_items = []

            default_item = {
                'datum': datum_to_string(date.today()),
                'konto': konto,
                'filled_items': filled_items,
                'empty_items': empty_items
            }
            context['default_items'].append(default_item)

    context['letzte_erfassung'] = reversed(non_persisted_state.get_changed_depotauszuege())
    return context
Пример #6
0
def _handle_request(request):
    context = viewcore.generate_base_context('monatsuebersicht')
    einzelbuchungen = persisted_state.database_instance().einzelbuchungen
    monate = sorted(einzelbuchungen.get_monate(), reverse=True)
    context['monate'] = monate

    if not monate:
        return viewcore.generate_error_context('monatsuebersicht',
                                               'Keine Ausgaben erfasst')

    selected_item = context['monate'][0]
    if request.method == "POST":
        selected_item = request.values['date']
    month = int(float(selected_item.split("_")[1]))
    year = int(float(selected_item.split("_")[0]))

    table_data_selection = einzelbuchungen.select().select_month(
        month).select_year(year)
    table_ausgaben = table_data_selection.select_ausgaben()
    table_einnahmen = table_data_selection.select_einnahmen()

    kategorien = einzelbuchungen.get_alle_kategorien()
    color_chooser = viewcore.get_generic_color_chooser(list(kategorien))
    '''
    Berechnung der Ausgaben für das Kreisdiagramm
    '''
    ausgaben_liste = []
    ausgaben_labels = []
    ausgaben_data = []
    ausgaben_colors = []
    for kategorie, row in table_ausgaben.group_by_kategorie().iterrows():
        ausgaben_labels.append(kategorie)
        ausgaben_data.append("%.2f" % abs(row.Wert))
        ausgaben_colors.append(color_chooser.get_for_value(kategorie))
        ausgaben_liste.append((kategorie, "%.2f" % row.Wert,
                               color_chooser.get_for_value(kategorie)))
    context['ausgaben'] = ausgaben_liste
    context['ausgaben_labels'] = ausgaben_labels
    context['ausgaben_data'] = ausgaben_data
    context['ausgaben_colors'] = ausgaben_colors
    '''
    Berechnung der Einnahmen für das Kreisdiagramm
    '''
    einnahmen_liste = []
    einnahmen_labels = []
    einnahmen_data = []
    einnahmen_colors = []
    for kategorie, row in table_einnahmen.group_by_kategorie().iterrows():
        einnahmen_labels.append(kategorie)
        einnahmen_data.append("%.2f" % abs(row.Wert))
        einnahmen_colors.append(color_chooser.get_for_value(kategorie))
        einnahmen_liste.append((kategorie, "%.2f" % row.Wert,
                                color_chooser.get_for_value(kategorie)))
    context['einnahmen'] = einnahmen_liste
    context['einnahmen_labels'] = einnahmen_labels
    context['einnahmen_data'] = einnahmen_data
    context['einnahmen_colors'] = einnahmen_colors

    zusammenfassung = table_data_selection.get_month_summary()
    for tag, kategorien_liste in zusammenfassung:
        for einheit in kategorien_liste:
            einheit['farbe'] = color_chooser.get_for_value(
                einheit['kategorie'])
    context['zusammenfassung'] = zusammenfassung

    ausgaben_monat = table_ausgaben.sum()
    context['gesamt'] = "%.2f" % ausgaben_monat
    einnahmen_monat = table_einnahmen.sum()
    context['gesamt_einnahmen'] = "%.2f" % einnahmen_monat

    selected_date = str(year) + "_" + str(month).rjust(2, "0")
    context['selected_date'] = selected_date
    context['selected_year'] = year

    if einnahmen_monat >= abs(ausgaben_monat):
        context['color_uebersicht_gruppe_1'] = "gray"
        context['name_uebersicht_gruppe_1'] = 'Gedeckte Ausgaben'
        context['wert_uebersicht_gruppe_1'] = '%.2f' % abs(ausgaben_monat)

        context['color_uebersicht_gruppe_2'] = "lightgreen"
        context['name_uebersicht_gruppe_2'] = 'Einnahmenüberschuss'
        context['wert_uebersicht_gruppe_2'] = '%.2f' % (einnahmen_monat +
                                                        ausgaben_monat)

    else:
        context['color_uebersicht_gruppe_1'] = "gray"
        context['name_uebersicht_gruppe_1'] = 'Gedeckte Ausgaben'
        context['wert_uebersicht_gruppe_1'] = '%.2f' % einnahmen_monat

        context['color_uebersicht_gruppe_2'] = "red"
        context['name_uebersicht_gruppe_2'] = 'Ungedeckte Ausgaben'
        context['wert_uebersicht_gruppe_2'] = '%.2f' % (
            (ausgaben_monat + einnahmen_monat) * -1)

    einnahmen_jahr = einzelbuchungen.select().select_einnahmen().select_year(
        year).sum()
    ausgaben_jahr = einzelbuchungen.select().select_ausgaben().select_year(
        year).sum()
    if einnahmen_jahr >= abs(ausgaben_jahr):
        context['color_uebersicht_jahr_gruppe_1'] = "gray"
        context['name_uebersicht_jahr_gruppe_1'] = 'Gedeckte Einnahmen'
        context['wert_uebersicht_jahr_gruppe_1'] = '%.2f' % abs(ausgaben_jahr)

        context['color_uebersicht_jahr_gruppe_2'] = "lightgreen"
        context['name_uebersicht_jahr_gruppe_2'] = 'Einnahmenüberschuss'
        context['wert_uebersicht_jahr_gruppe_2'] = '%.2f' % (einnahmen_jahr +
                                                             ausgaben_jahr)

    else:
        context['color_uebersicht_jahr_gruppe_1'] = "gray"
        context['name_uebersicht_jahr_gruppe_1'] = 'Gedeckte Ausgaben'
        context['wert_uebersicht_jahr_gruppe_1'] = '%.2f' % einnahmen_jahr

        context['color_uebersicht_jahr_gruppe_2'] = "red"
        context['name_uebersicht_jahr_gruppe_2'] = 'Ungedeckte Ausgaben'
        context['wert_uebersicht_jahr_gruppe_2'] = '%.2f' % (
            (ausgaben_jahr + einnahmen_jahr) * -1)

    return context
Пример #7
0
def handle_request(request):
    if not database_instance().sparkontos.get_sparfaehige_kontos():
        return viewcore.generate_error_context('add_sparbuchung',
                                               NO_VALID_SAVINGS_ACCOUNT_IN_DB)

    if post_action_is(request, 'add'):
        date = datum(request.values['datum'])
        value = request.values['wert'].replace(",", ".")
        value = float(value)

        if request.values[EIGENSCHAFT] == EIGENSCHAFT_AUSZAHLUNG:
            value = value * -1

        if "edit_index" in request.values:
            database_instance().sparbuchungen.edit(
                int(request.values['edit_index']),
                datum=date,
                name=request.values['name'],
                wert="%.2f" % value,
                typ=request.values['typ'],
                konto=request.values['konto'])
            non_persisted_state.add_changed_sparbuchungen({
                'fa':
                'pencil',
                'datum':
                datum_to_german(date),
                'wert':
                from_double_to_german(value),
                'name':
                request.values['name'],
                'typ':
                request.values['typ'],
                'konto':
                request.values['konto']
            })

        else:
            database_instance().sparbuchungen.add(
                datum=date,
                name=request.values['name'],
                wert="%.2f" % value,
                typ=request.values['typ'],
                konto=request.values['konto'])
            non_persisted_state.add_changed_sparbuchungen({
                'fa':
                'plus',
                'datum':
                datum_to_german(date),
                'wert':
                from_double_to_german(value),
                'name':
                request.values['name'],
                'typ':
                request.values['typ'],
                'konto':
                request.values['konto']
            })

    context = viewcore.generate_transactional_context('add_sparbuchung')
    context['approve_title'] = 'Sparbuchung hinzufügen'
    if post_action_is(request, 'edit'):
        print("Please edit:", request.values['edit_index'])
        db_index = int(request.values['edit_index'])
        db_row = database_instance().sparbuchungen.get(db_index)

        if db_row['Wert'] > 0:
            eigenschaft = EIGENSCHAFT_EINZAHLUNG
        else:
            eigenschaft = EIGENSCHAFT_AUSZAHLUNG

        default_item = {
            'edit_index': str(db_index),
            'datum': datum_to_string(db_row['Datum']),
            'name': db_row['Name'],
            'wert': from_double_to_german(abs(db_row['Wert'])),
            'typ': db_row['Typ'],
            'eigenschaft': eigenschaft,
            'konto': db_row['Konto']
        }

        context['default_item'] = default_item
        context['bearbeitungsmodus'] = True
        context['edit_index'] = db_index
        context['approve_title'] = 'Sparbuchung aktualisieren'

    if 'default_item' not in context:
        context['default_item'] = {
            'name': '',
            'wert': '',
            'datum': '',
            'typ': '',
            'konto': ''
        }

    context['kontos'] = database_instance().sparkontos.get_sparfaehige_kontos()
    context['typen'] = database_instance().sparbuchungen.AUFTRAGS_TYPEN
    context[EIGENSCHAFTEN] = [EIGENSCHAFT_EINZAHLUNG, EIGENSCHAFT_AUSZAHLUNG]
    context['letzte_erfassung'] = reversed(
        non_persisted_state.get_changed_sparbuchungen())
    return context
Пример #8
0
def handle_request(request):
    if not database_instance().sparkontos.get_depots():
        return viewcore.generate_error_context('add_order',
                                               NO_VALID_DEPOT_IN_DB)

    if not database_instance().depotwerte.get_depotwerte():
        return viewcore.generate_error_context('add_order',
                                               NO_VALID_SHARE_IN_DB)

    if post_action_is(request, 'add'):
        date = datum(request.values['datum'])
        value = request.values['wert'].replace(",", ".")
        value = float(value)

        if request.values[TYP] == TYP_VERKAUF:
            value = value * -1

        if "edit_index" in request.values:
            database_instance().order.edit(
                int(request.values['edit_index']),
                datum=date,
                name=request.values['name'],
                wert="%.2f" % value,
                depotwert=request.values['depotwert'],
                konto=request.values['konto'])
            non_persisted_state.add_changed_order({
                'fa':
                'pencil',
                'datum':
                datum_to_german(date),
                'wert':
                from_double_to_german(abs(value)),
                'name':
                request.values['name'],
                TYP:
                request.values[TYP],
                'depotwert':
                request.values['depotwert'],
                'konto':
                request.values['konto']
            })

        else:
            database_instance().order.add(
                datum=date,
                name=request.values['name'],
                wert="%.2f" % value,
                depotwert=request.values['depotwert'],
                konto=request.values['konto'])
            non_persisted_state.add_changed_order({
                'fa':
                'plus',
                'datum':
                datum_to_german(date),
                'wert':
                from_double_to_german(value),
                'name':
                request.values['name'],
                TYP:
                request.values[TYP],
                'value':
                '%.2f' % abs(value),
                'depotwert':
                request.values['depotwert'],
                'konto':
                request.values['konto']
            })

    context = viewcore.generate_transactional_context('add_order')
    context['approve_title'] = 'Order hinzufügen'
    if post_action_is(request, 'edit'):
        print("Please edit:", request.values['edit_index'])
        db_index = int(request.values['edit_index'])
        db_row = database_instance().order.get(db_index)

        if db_row['Wert'] > 0:
            typ = TYP_KAUF
        else:
            typ = TYP_VERKAUF

        default_item = {
            'edit_index': str(db_index),
            'datum': datum_to_string(db_row['Datum']),
            'name': db_row['Name'],
            'wert': from_double_to_german(abs(db_row['Wert'])),
            'depotwert': db_row['Depotwert'],
            'typ': typ,
            'konto': db_row['Konto']
        }

        context['default_item'] = default_item
        context['bearbeitungsmodus'] = True
        context['edit_index'] = db_index
        context['approve_title'] = 'Order aktualisieren'

    if 'default_item' not in context:
        context['default_item'] = {
            'name': '',
            'wert': '',
            'datum': '',
            'depotwert': '',
            'konto': ''
        }

    context['kontos'] = database_instance().sparkontos.get_depots()
    context[TYPEN] = [TYP_KAUF, TYP_VERKAUF]
    context['depotwerte'] = database_instance(
    ).depotwerte.get_depotwerte_descriptions()
    context['letzte_erfassung'] = reversed(
        non_persisted_state.get_changed_order())
    return context