Example #1
0
def _format_dauerauftrag_floatpoint(dauerauftraege):
    for dauerauftrag in dauerauftraege:
        dauerauftrag['Wert'] = '%.2f' % dauerauftrag['Wert']
        dauerauftrag['Startdatum'] = datum_to_german(
            dauerauftrag['Startdatum'])
        dauerauftrag['Endedatum'] = datum_to_german(dauerauftrag['Endedatum'])

    return dauerauftraege
Example #2
0
    def get_month_summary(self):
        kopierte_tabelle = self.content.copy()[[
            'Datum', 'Wert', 'Kategorie', 'Name'
        ]]

        kopierte_tabelle = kopierte_tabelle.sort_values(
            by=['Datum', 'Kategorie'])

        zusammenfassung = []
        kategorie_alt = ''
        summe_alt = 0
        name_alt = ''
        datum_alt = ''
        tag_liste = []
        more_than_one = False
        for _, row in kopierte_tabelle.iterrows():
            if (kategorie_alt != row.Kategorie or datum_alt != row.Datum
                ) and kategorie_alt != '':  # next cat or day
                if datum_alt != row.Datum:
                    zusammenfassung.append(
                        (datum_to_german(datum_alt), tag_liste))
                    tag_liste = []
                tag_liste.append({
                    'kategorie': kategorie_alt,
                    'name': name_alt,
                    'summe': '%.2f' % summe_alt
                })
                datum_alt = row.Datum
                summe_alt = row.Wert
                kategorie_alt = row.Kategorie
                name_alt = row.Name
                more_than_one = False
            elif kategorie_alt == '':  # initial state
                datum_alt = row.Datum
                kategorie_alt = row.Kategorie
                summe_alt = row.Wert
                name_alt = row.Name
            else:
                if not more_than_one:
                    name_alt = name_alt + '(' + str(summe_alt) + '€)'
                    more_than_one = True
                name_alt = name_alt + ', ' + row.Name + '(' + str(
                    row.Wert) + '€)'
                summe_alt += row.Wert

        tag_liste.append({
            'kategorie': kategorie_alt,
            'name': name_alt,
            'summe': '%.2f' % summe_alt
        })
        zusammenfassung.append([datum_to_german(datum_alt), tag_liste])
        return zusammenfassung
def _handle_request(_):
    einzelbuchungen = viewcore.database_instance().einzelbuchungen
    selector = einzelbuchungen.select()
    ausgaben_liste = []
    for row_index, row in selector.select_aktueller_monat().raw_table(
    ).iterrows():
        ausgaben_liste.append({
            'index': row_index,
            'datum': datum_to_german(row.Datum),
            'name': row.Name,
            'kategorie': row.Kategorie,
            'wert': '%.2f' % row.Wert
        })

    context = {
        'zusammenfassung_monatsliste':
        _monatsliste(),
        'zusammenfassung_einnahmenliste':
        _list_to_json(
            selector.select_einnahmen().inject_zeros_for_last_6_months(
            ).select_letzte_6_montate().sum_monthly()),
        'zusammenfassung_ausgabenliste':
        _list_to_json(
            selector.select_ausgaben().inject_zeros_for_last_6_months(
            ).select_letzte_6_montate().sum_monthly()),
        'ausgaben_des_aktuellen_monats':
        ausgaben_liste,
    }
    context = {**context, **viewcore.generate_base_context('dashboard')}
    return context
    def test_withEntry_shouldReturnGermanDate(self):
        self.set_up()
        db = viewcore.database_instance()
        today = datetime.now().date()
        db.einzelbuchungen.add(today, 'eine einnahme kategorie', 'some name',
                               10)

        result = dashboard.index(GetRequest())
        assert result['ausgaben_des_aktuellen_monats'][0][
            'datum'] == datum_to_german(today)
def _handle_request(request):
    einzelbuchungen = viewcore.database_instance().einzelbuchungen
    if post_action_is(request, 'delete'):
        print("Delete: ", request.values['delete_index'])
        einzelbuchungen.delete(int(request.values['delete_index']))

    db = einzelbuchungen.get_all()
    ausgaben_monatlich = {}
    datum_alt = None
    ausgaben_liste = []
    for row_index, row in db.iterrows():
        if datum_alt == None:
            datum_alt = row.Datum
        if datum_alt.month != row.Datum.month or datum_alt.year != row.Datum.year:
            ausgaben_monatlich["" + str(datum_alt.year) + "." +
                               str(datum_alt.month)] = ausgaben_liste
            ausgaben_liste = []
            datum_alt = row.Datum

        link = 'addeinnahme'
        if row.Wert < 0:
            link = 'addausgabe'
        ausgaben_liste.append({
            'index': row_index,
            'datum': datum_to_german(row.Datum),
            'name': row.Name,
            'kategorie': row.Kategorie,
            'wert': '%.2f' % row.Wert,
            'dynamisch': row.Dynamisch,
            'link': link,
            'tags': str(row.Tags)
        })

    if datum_alt != None:
        ausgaben_monatlich["" + str(datum_alt.year) + "." +
                           str(datum_alt.month)] = ausgaben_liste

    context = viewcore.generate_base_context('uebersicht')
    context['alles'] = ausgaben_monatlich
    context['transaction_key'] = 'requested'
    return context
Example #6
0
def handle_request(request):
    if request.method == 'POST' and request.values['action'] == 'add':
        value = dezimal_float(request.values['wert'])
        if request.values['typ'] == 'Ausgabe':
            value = value * -1

        if 'edit_index' in request.values:
            startdatum = datum(request.values['startdatum'])
            endedatum = datum(request.values['endedatum'])
            viewcore.database_instance().dauerauftraege.edit(
                int(request.values['edit_index']),
                startdatum,
                endedatum,
                request.values['kategorie'],
                request.values['name'],
                request.values['rhythmus'],
                value)
            viewcore.add_changed_dauerauftraege({
                'fa': 'pencil',
                'startdatum': datum_to_german(startdatum),
                'endedatum':  datum_to_german(endedatum),
                'kategorie': request.values['kategorie'],
                'name': request.values['name'],
                'rhythmus': request.values['rhythmus'],
                'wert': from_double_to_german(value)
                })
        else:
            startdatum = datum(request.values['startdatum'])
            endedatum = datum(request.values['endedatum'])
            viewcore.database_instance().dauerauftraege.add(
                startdatum,
                endedatum,
                request.values['kategorie'],
                request.values['name'],
                request.values['rhythmus'],
                value)
            viewcore.add_changed_dauerauftraege({
                'fa': 'plus',
                'startdatum': datum_to_german(startdatum),
                'endedatum': datum_to_german(endedatum),
                'kategorie': request.values['kategorie'],
                'name': request.values['name'],
                'rhythmus': request.values['rhythmus'],
                'wert': from_double_to_german(value)
                })

    context = viewcore.generate_base_context('adddauerauftrag')
    context['approve_title'] = 'Dauerauftrag hinzufügen'

    if post_action_is(request, 'edit'):
        db_index = int(request.values['edit_index'])
        default_item = viewcore.database_instance().dauerauftraege.get(db_index)
        default_item['Startdatum'] = datum_to_string(default_item['Startdatum'])
        default_item['Endedatum'] = datum_to_string(default_item['Endedatum'])

        if default_item['Wert'] < 0:
            default_item['typ'] = 'Ausgabe'
        else:
            default_item['typ'] = 'Einnahme'

        default_item['Wert'] = from_double_to_german(abs(default_item['Wert']))

        context['default_item'] = default_item
        context['bearbeitungsmodus'] = True
        context['edit_index'] = db_index
        context['approve_title'] = 'Dauerauftrag aktualisieren'
        context['element_titel'] = 'Dauerauftrag bearbeiten'
        context['active_name'] = 'Dauerauftrag bearbeiten'

    if 'default_item' not in context:
        context['default_item'] = {
            'Startdatum': '',
            'Endedatum': '',
            'typ': 'Ausgabe',
            'Wert': '',
            'Name': ''
        }

    context['transaction_key'] = 'requested'
    context['kategorien'] = sorted(viewcore.database_instance().einzelbuchungen.get_alle_kategorien(hide_ausgeschlossene_kategorien=True))
    context['letzte_erfassung'] = reversed(viewcore.get_changed_dauerauftraege())
    context['rhythmen'] = ['monatlich']
    return context
Example #7
0
def handle_request(request):
    context = viewcore.generate_base_context('addeinzelbuchung')
    context['element_titel'] = 'Neue Ausgabe'
    context['approve_title'] = 'Ausgabe hinzufügen'
    einzelbuchungen = viewcore.database_instance().einzelbuchungen

    if post_action_is(request, 'add'):
        value = dezimal_float(request.values['wert']) * -1
        if 'edit_index' in request.values:
            database_index = int(request.values['edit_index'])
            datum_object = datum(request.values['date'])
            einzelbuchungen.edit(database_index, datum_object,
                                 request.values['kategorie'],
                                 request.values['name'], value)
            viewcore.add_changed_einzelbuchungen({
                'fa':
                'pencil',
                'datum':
                datum_to_german(datum_object),
                'kategorie':
                request.values['kategorie'],
                'name':
                request.values['name'],
                'wert':
                from_double_to_german(value)
            })
        else:
            datum_object = datum(request.values['date'])
            einzelbuchungen.add(datum_object, request.values['kategorie'],
                                request.values['name'], value)

            viewcore.add_changed_einzelbuchungen({
                'fa':
                'plus',
                'datum':
                datum_to_german(datum_object),
                'kategorie':
                request.values['kategorie'],
                'name':
                request.values['name'],
                'wert':
                from_double_to_german(value)
            })

    if post_action_is(request, 'edit'):
        print('Please edit:', request.values['edit_index'])
        db_index = int(request.values['edit_index'])

        selected_item = einzelbuchungen.get(db_index)
        selected_item['Datum'] = datum_to_string(selected_item['Datum'])
        selected_item['Wert'] = from_double_to_german(selected_item['Wert'] *
                                                      -1)
        context['default_item'] = selected_item

        context['bearbeitungsmodus'] = True
        context['edit_index'] = db_index
        context['set_kategorie'] = True
        context['element_titel'] = 'Einzelbuchung bearbeiten'
        context['active_name'] = 'Einzelbuchung bearbeiten'
        context['approve_title'] = 'Ausgabe aktualisieren'

    if 'default_item' not in context:
        context['default_item'] = {
            'Name': '',
            'Datum': '',
            'Wert': '',
        }

    context['transaction_key'] = 'requested'
    context['kategorien'] = sorted(
        einzelbuchungen.get_kategorien_ausgaben(
            hide_ausgeschlossene_kategorien=True))
    context['letzte_erfassung'] = reversed(
        viewcore.get_changed_einzelbuchungen())
    return context
def handle_request(request):
    if post_action_is(request, 'add'):
        date = datum(request.values['date'])
        value = request.values['wert'].replace(",", ".")
        value = float(value)
        value = value * -1
        if "edit_index" in request.values:
            viewcore.database_instance().gemeinsamebuchungen.edit(
                int(request.values['edit_index']),
                datum=date,
                name=str(request.values['name']),
                kategorie=request.values['kategorie'],
                wert=value,
                person=request.values['person'])
            viewcore.add_changed_gemeinsamebuchungen({
                'fa':
                'pencil',
                'datum':
                datum_to_german(date),
                'kategorie':
                request.values['kategorie'],
                'name':
                request.values['name'],
                'wert':
                from_double_to_german(value),
                'person':
                request.values['person']
            })

        else:
            viewcore.database_instance().gemeinsamebuchungen.add(
                ausgaben_datum=date,
                kategorie=request.values['kategorie'],
                ausgaben_name=request.values['name'],
                wert="%.2f" % value,
                person=request.values['person'])
            viewcore.add_changed_gemeinsamebuchungen({
                'fa':
                'plus',
                'datum':
                datum_to_german(date),
                'kategorie':
                request.values['kategorie'],
                'name':
                request.values['name'],
                'wert':
                from_double_to_german(value),
                'person':
                request.values['person']
            })

    context = viewcore.generate_base_context("addgemeinsam")
    context['approve_title'] = 'Gemeinsame Ausgabe hinzufügen'
    if post_action_is(request, 'edit'):
        print("Please edit:", request.values['edit_index'])
        db_index = int(request.values['edit_index'])
        db_row = viewcore.database_instance(
        ).gemeinsamebuchungen.content.iloc[db_index]
        default_item = {
            'edit_index': str(db_index),
            'datum': datum_to_string(db_row.Datum),
            'name': db_row.Name,
            'wert': from_double_to_german(db_row.Wert * -1),
            'kategorie': db_row.Kategorie,
            'person': db_row.Person
        }

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

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

    context['personen'] = [
        viewcore.database_instance().name,
        viewcore.name_of_partner()
    ]
    context['kategorien'] = sorted(
        viewcore.database_instance().einzelbuchungen.get_kategorien_ausgaben(
            hide_ausgeschlossene_kategorien=True))
    context['letzte_erfassung'] = reversed(
        viewcore.get_changed_gemeinsamebuchungen())
    context['transaction_key'] = 'requested'
    return context
Example #9
0
    def abrechnen(self):
        '''
        rechnet gemeinsame ausgaben aus der Datenbank ab
        '''
        name_self = viewcore.database_instance().name
        name_partner = viewcore.name_of_partner()

        ausgaben_maureen = self.gemeinsamebuchungen.content[
            self.gemeinsamebuchungen.content.Person == name_partner]
        ausgaben_sebastian = self.gemeinsamebuchungen.content[
            self.gemeinsamebuchungen.content.Person == name_self]
        summe_maureen = self._sum(ausgaben_maureen['Wert'])
        summe_sebastian = self._sum(ausgaben_sebastian['Wert'])

        ausgaben_gesamt = summe_maureen + summe_sebastian

        dif_maureen = (ausgaben_gesamt / 2) - summe_maureen

        abrechnunsdatei = StringWriter()
        abrechnunsdatei.write("Abrechnung vom " +
                              datum_to_german(viewcore.today()) + "\n")
        self._write_trenner(abrechnunsdatei)
        abrechnunsdatei.write("Ergebnis:\n")

        if dif_maureen > 0:
            abrechnunsdatei.write(name_self + ' muss an ' + name_partner +
                                  ' noch ' + str('%.2f' % dif_maureen) +
                                  "€ überweisen.\n")
        else:
            abrechnunsdatei.write(name_partner + ' muss an ' + name_self +
                                  ' noch ' + str("%.2f" % (dif_maureen * -1)) +
                                  "€ überweisen.\n")

        abrechnunsdatei.write("\n")
        abrechnunsdatei.write(('Ausgaben von ' + name_partner).ljust(30, " ") +
                              str("%.2f" % summe_maureen).rjust(7, " ") + "\n")
        abrechnunsdatei.write(('Ausgaben von ' + name_self).ljust(30, " ") +
                              str("%.2f" % summe_sebastian).rjust(7, " ") +
                              "\n")
        abrechnunsdatei.write("".ljust(38, "-") + "\n")
        abrechnunsdatei.write("Gesamt".ljust(30, " ") +
                              str("%.2f" % ausgaben_gesamt).rjust(7, " ") +
                              "\n \n \n")

        self._write_trenner(abrechnunsdatei)
        abrechnunsdatei.write("Gesamtausgaben pro Person \n")
        self._write_trenner(abrechnunsdatei)

        abrechnunsdatei.write("Datum".ljust(10, " ") + " Kategorie    " +
                              "Name".ljust(20, " ") + " " +
                              "Wert".rjust(7, " ") + "\n")
        for _, row in self.gemeinsamebuchungen.content.iterrows():
            abrechnunsdatei.write(
                datum_to_german(row['Datum']) + "  " +
                row['Kategorie'].ljust(len("Kategorie   "), " ") + " " +
                row['Name'].ljust(20, " ") + " " +
                str("%.2f" % (row['Wert'] / 2)).rjust(7, " ") + "\n")

        abrechnunsdatei.write("\n")
        abrechnunsdatei.write("\n")

        self._write_trenner(abrechnunsdatei)
        abrechnunsdatei.write('Ausgaben von ' + name_partner + '\n')
        self._write_trenner(abrechnunsdatei)

        abrechnunsdatei.write("Datum".ljust(10, " ") + " Kategorie    " +
                              "Name".ljust(20, " ") + " " +
                              "Wert".rjust(7, " ") + "\n")
        for _, row in ausgaben_maureen.iterrows():
            abrechnunsdatei.write(
                datum_to_german(row['Datum']) + "  " +
                row['Kategorie'].ljust(len("Kategorie   "), " ") + " " +
                row['Name'].ljust(20, " ") + " " +
                str("%.2f" % (row['Wert'])).rjust(7, " ") + "\n")

        abrechnunsdatei.write("\n")
        abrechnunsdatei.write("\n")
        self._write_trenner(abrechnunsdatei)
        abrechnunsdatei.write('Ausgaben von ' + name_self + '\n')
        self._write_trenner(abrechnunsdatei)

        abrechnunsdatei.write("Datum".ljust(10, " ") + " Kategorie    " +
                              "Name".ljust(20, " ") + " " +
                              "Wert".rjust(7, " ") + "\n")
        for _, row in ausgaben_sebastian.iterrows():
            abrechnunsdatei.write(
                datum_to_german(row['Datum']) + "  " +
                row['Kategorie'].ljust(len("Kategorie   "), " ") + " " +
                row['Name'].ljust(20, " ") + " " +
                str("%.2f" % (row['Wert'])).rjust(7, " ") + "\n")

        ausgaben = DataFrame()
        for _, row in self.gemeinsamebuchungen.content.iterrows():
            buchung = self._berechne_abbuchung(row['Datum'], row['Kategorie'],
                                               row['Name'],
                                               ("%.2f" % (row['Wert'] / 2)))
            buchung.Dynamisch = False
            ausgaben = ausgaben.append(buchung)

        abrechnunsdatei.write("\n\n")
        abrechnunsdatei.write("#######MaschinenimportStart\n")
        abrechnunsdatei.write(ausgaben.to_csv(index=False))
        abrechnunsdatei.write("#######MaschinenimportEnd\n")

        self.einzelbuchungen.append_row(ausgaben)
        self.gemeinsamebuchungen.empty()
        self.taint()
        FileSystem.instance().write(
            "../Abrechnungen/Abrechnung_" + str(datetime.now()),
            abrechnunsdatei.to_string())
        return abrechnunsdatei.to_string()