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
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
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
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
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()