コード例 #1
0
ファイル: MMS_view.py プロジェクト: bennyn/PyRM
def transfer_konten():
#    Konto.objects.all().delete()

    buchungen, konten = get_csv_tables(CSV_DATEI)

    exist_mwst = tuple([i[0] for i in MWST])

    dictlist = get_dictlist(konten, used_fieldnames=None)
    for line in dictlist:
#        pprint(line)
        datev_nummer = int(line['Konto'])
        konto_name = line['Listenname']

        mwst = None
        try:
            mwst_string = PROZ_RE.findall(konto_name)[0]
        except IndexError:
            pass
        else:
            mwst = int(mwst_string)
            if mwst in exist_mwst:
                print "MwSt: %s%%" % mwst

        try:
            konto = Konto.objects.get(datev_nummer=datev_nummer)
        except Konto.DoesNotExist:
            konto = Konto(
                datev_nummer=datev_nummer,
                name=konto_name,
                mwst=mwst,
            )
            add_message(konto, "Neues Konto aus MMS import")
            konto.save()
            print "Neues Konto erstellt:", konto
        else:
            print "Konto besteht schon:", konto
            must_save = False

            if konto_name != konto.name:
                print " *** andere Bezeichnung:"
                print konto_name, "!=", konto.name
                print "Setzte neuen Namen"
                konto.name = konto_name
                add_message(konto, "Neuer Konto Namen aus MMS import")
                konto.notizen += "\n neuer Konto namen aus MMS import"
                must_save = True

            if mwst != konto.mwst:
                print " *** andere MwSt.:"
                print mwst, "!=", konto.mwst
                print "setzte neue MwSt:"
                konto.mwst = mwst
                add_message(konto, "Neue MwSt.Satz aus MMS import")
                konto.notizen += "\n neue MwSt.Satz aus MMS import"
                must_save = True

            if must_save:
                konto.save()

        print "-" * 80
コード例 #2
0
ファイル: import_KRB_buchungen.py プロジェクト: bennyn/PyRM
def _get_dictlist(filename):
    # python csv module doesn't work with unicode! So no codecs.open() here!
    f = file(filename, "rb")
    data = f.readlines()
    f.close()

    dictlist = get_dictlist(data, encoding="latin-1", used_fieldnames=None)
    return dictlist
コード例 #3
0
ファイル: import_MMS.py プロジェクト: jedie/PyRM
    def _insert_buchungen(self, buchungen):
        dictlist = get_dictlist(buchungen, used_fieldnames=None)
        for line in dictlist:
            if self.verbosity >= 4:
                self.stdout.write("_" * 80)
                self.stdout.write("\n%s\n" % pprint.pformat(line))

            date_string = line["Datum"]
            # print "date_string:", date_string
            datum = datetime.strptime(date_string, "%d.%m.%Y").date()
            # datum = date.strptime(date_string, "%d.%m.%Y")

            raw_summe = line["Betrag"]
            summe = _get_decimal(raw_summe)

            konto_nr = int(line["Konto"])
            # print "konto_nr:", konto_nr, type(konto_nr)
            if konto_nr == 9000:  # EB-Sachkonten
                if self.verbosity >= 2:
                    self.stdout.write("Endbestand des Kontos vom Vorjahr: %s\n" % summe)
                continue

            try:
                konto = Konto.objects.get(nummer=konto_nr)
            except Konto.DoesNotExist, err:
                print "*" * 79
                print "Fehler: Konto unbekannt:", err
                konto = None

            ggkto = line["GGKto"]
            if len(ggkto) > 4:
                # SteuerSchlüssel drin
                stsl_nr = int(ggkto[0])
                ggkto_nr = int(ggkto[1:])
                mwst = STEUER_SCHLUESSEL[stsl_nr]

                summe_netto = summe / ((mwst / Decimal(100)) + Decimal(1))
                if self.verbosity >= 3:
                    self.stdout.write(
                        "Brutto: %s - %s%% (Steuerschlüssel: %i) = %s Netto\n" % (summe, mwst, stsl_nr, summe_netto)
                    )
            else:
                summe_netto = summe
                ggkto_nr = int(ggkto)
                mwst = None

            try:
                ggkto = Konto.objects.get(nummer=ggkto_nr)
            except Konto.DoesNotExist, err:
                print "*" * 79
                print "Fehler: Gegenkonto unbekannt:", err
                ggkto = None
コード例 #4
0
ファイル: MMS_view.py プロジェクト: bennyn/PyRM
def transfer_buchungen():
#    Konto.objects.all().delete()

    buchungen, konten = get_csv_tables(CSV_DATEI)

    exist_mwst = tuple([i[0] for i in MWST])

    dictlist = get_dictlist(buchungen, used_fieldnames=None)
    for line in dictlist:
        kommentar = line["Kommentar"]
        print "_" * 79
#        pprint(line)
#        print " -"*40

        date_string = line["Datum"]
#        print "date_string:", date_string
        datum = datetime.strptime(date_string, "%d.%m.%Y").date()
#        datum = date.strptime(date_string, "%d.%m.%Y")

        raw_summe = line["Betrag"]
        summe = _get_decimal(raw_summe)

        konto_nr = int(line["Konto"])
#        print "konto_nr:", konto_nr, type(konto_nr)
        try:
            konto = Konto.objects.get(datev_nummer=konto_nr)
        except Konto.DoesNotExist, err:
            print "*" * 79
            print "Fehler: Konto unbekannt:", err
#            print "Erstelle neuen Eintrag!"
            return

        ggkto = line["GGKto"]
        if len(ggkto) > 4:
            # SteuerSchlüssel drin
            stsl_nr = int(ggkto[0])
            stsl = StSl.objects.get(id=stsl_nr)
#            print u"Steuerschlüssel:", stsl
            ggkto = ggkto[1:]
        else:
            stsl = None

        Gkonto_nr = int(ggkto)
        try:
            ggkto = Konto.objects.get(datev_nummer=Gkonto_nr)
        except Konto.DoesNotExist, err:
            print "*" * 79
            print "Fehler: GKonto unbekannt:", err
            return
コード例 #5
0
ファイル: import_MMS.py プロジェクト: jedie/PyRM
    def _insert_konten(self, konten):
        dictlist = get_dictlist(konten, used_fieldnames=None)
        for line in dictlist:
            if self.verbosity >= 4:
                self.stdout.write("_" * 80)
                self.stdout.write("\n")
                self.stdout.write(pprint.pformat(line))

            nummer = int(line["Konto"])
            konto_name = line["Listenname"]

            konto, created = Konto.objects.get_or_create(nummer=nummer, defaults={"name": konto_name})
            if created:
                if self.verbosity:
                    self.stdout.write("Konto erstellt: %s\n" % konto)
            else:
                if konto.name != konto_name:
                    self.stdout.write("Konto %i wird von %r auf %r geändert\n" % (nummer, konto.name, konto_name))
                    konto.name = konto_name
                    konto.save()
                elif self.verbosity >= 2:
                    self.stdout.write("Vorhandes Konto genutzt: %s\n" % konto)
コード例 #6
0
ファイル: import_cronbank.py プロジェクト: bennyn/PyRM
    def handle(self, filepath, **options):
        if not os.path.isfile(filepath):
            raise CommandError("Filepath %r doesn't exist." % filepath)

        self.stdout.write("Import Cronbank Buchungen von %r\n" % filepath)

        self.verbosity = int(options.get('verbosity', 1))

        buchungen = get_buchungen(filepath)
#        print buchungen

        for line in get_dictlist(buchungen):
            if line["art"] == u"H":
                if self.verbosity >= 3:
                    self.stdout.write(pprint.pformat(line))
                    self.stdout.write("\n")

                raw_valuta = line["Valuta"]
                if not raw_valuta:
                    self.stdout.write("Skip, kein valuta Datum vorhanden.\n")
                    continue

                valuta = to_datetime_date(raw_valuta)
                if self.verbosity >= 2:
                    self.stdout.write("Konvertiertes Valuta-Datum: %r\n" % valuta)

                raw_umsatz = line["Umsatz"].replace(".", "").replace(",", ".")
                umsatz = Decimal(raw_umsatz)
                if self.verbosity >= 2:
                    self.stdout.write("Konvertierter Umsatz: %r\n" % umsatz)

                start_date = valuta - datetime.timedelta(days=40)
                end_date = valuta
                rechnungen = Rechnung.objects.filter(datum__range=(start_date, end_date))
                if self.verbosity:
                    self.stdout.write("Anzahl der Rechnungen im Zeitraum %s - %s: %i\n" % (start_date, end_date, rechnungen.count()))

                if self.verbosity >= 3:
                    for no, r in enumerate(rechnungen):
                        self.stdout.write("%i: %s\n" % (no, r))

                rechnungen = rechnungen.exclude(valuta__isnull=False)
                if self.verbosity:
                    self.stdout.write("Anzahl der Rechnungen ohne Valuta-Datum: %i\n" % rechnungen.count())

                if self.verbosity >= 3:
                    for no, r in enumerate(rechnungen):
                        self.stdout.write("%i: %s\n" % (no, r))

                matched_rechnungen = []
                for rechnung in rechnungen:
                    total_brutto = rechnung.get_total_brutto()

                    if umsatz == total_brutto:
                        if self.verbosity:
                            self.stdout.write("Rechnung mit richtigem Umsatz gefunden: %s\n" % rechnung)
                        if str(rechnung.nummer) in line["Vorgang/Verwendungszweck"]:
                            if self.verbosity:
                                self.stdout.write("Rechnungsnummer in Verwendungszweck gefunden.\n")
                            matched_rechnungen.append(rechnung)

                if len(matched_rechnungen) == 1:
                    rechnung = matched_rechnungen[0]
                    self.stdout.write("Passende Rechnung gefunden: %s - speichere Valuta-Datum.\n" % rechnung)

                    rechnung.valuta = valuta
                    rechnung.save()
                    reversion.revision.comment = "Setzten vom Valuta-Datum auf %s nach cronbank csv Abgleich." % valuta

                self.stdout.write("-"*79)
                self.stdout.write("\n")