Example #1
0
    def handle(self, filepath, **options):
        if not os.path.isfile(filepath):
            raise CommandError("Filepath %r doesn't exist." % filepath)

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

        try:
            Rechnung.objects.all().delete()
        except Rechnung.DoesNotExist:
            pass

        try:
            RechnungsPosten.objects.all().delete()
        except RechnungsPosten.DoesNotExist:
            pass

        try:
            Lieferant.objects.all().delete()
        except Lieferant.DoesNotExist:
            pass


        for line in _get_dictlist(filepath):
            notiz = ""
            raw_summe = line["Wert"]

            if self.verbosity >= 3:
                self.stdout.write("_" * 80)
                self.stdout.write("\n")
                self.stdout.write(pprint.pformat(line))
                self.stdout.write("\n")
            if raw_summe == "" or line["Rechnungstext"].startswith("^^^"):
                self.stdout.write(" *** SKIP *** \n")
                continue

            if self.verbosity >= 3:
                self.stdout.write(" -" * 40)
                self.stdout.write("\n")

            #----------------------------------------------------------------------

            raw_summe = raw_summe.split(" ")[0]
            summe = _get_decimal(raw_summe)
            if self.verbosity >= 3:
                self.stdout.write("Betrag: %r\n" % summe)

            #----------------------------------------------------------------------

            kunden_nummer1 = line["K.Nr."]
            if kunden_nummer1 == "" or kunden_nummer1 == "999":
                # Kein kunde eingetragen
                kunde = None
            else:
                kunden_nummer2 = int(kunden_nummer1)
                kunde = Kunde.objects.get(nummer=kunden_nummer2)
            if self.verbosity >= 3:
                self.stdout.write("Kunde: %r\n" % kunde)

            #----------------------------------------------------------------------

            datum = _get_datum(raw_datum=line["R.Datum"])
            raw_valuta_datum = line["gezahlt\nEingang"]
            try:
                valuta = _get_datum(raw_datum=raw_valuta_datum)
            except ValueError, err:
                self.stdout.write("ValueError: %s\n" % err)
                notiz += raw_valuta_datum

            #----------------------------------------------------------------------

            re_posten = _get_re_posten(line["Rechnungstext"], summe)
            if self.verbosity >= 3:
                self.stdout.write("RE.Posten:\n")
                if len(re_posten) > 1:
                    self.stdout.write(" *" * 40)
                    self.stdout.write("\n")
                self.stdout.write(pprint.pformat(re_posten))
                self.stdout.write("\n")

            #----------------------------------------------------------------------

            raw_nr = line["R.Nr."]
            if raw_nr == "":
                re_nr = None
            else:
                re_nr = int(raw_nr)

            #----------------------------------------------------------------------

            if summe < 0:
                self.stdout.write("TODO: Ausgabe - Eingangsrechnung\n")
                if self.verbosity >= 2:
                    self.stdout.write("*" * 79)
                    self.stdout.write("\n")
                continue


            if re_nr == None:
                self.stdout.write("Fehler: Rechnung ohne Re.Nummer???\n")
                continue

            rechnung = Rechnung(
                createtime=datum,

                nummer=re_nr,
                kunde=kunde,
                datum=datum,
                valuta=valuta,
            )
            rechnung.save()
            reversion.revision.comment = "KRB import"

            for menge, txt, preis in re_posten:
                p = RechnungsPosten(
                    menge=menge,
                    beschreibung=txt,
                    einzelpreis=preis,
                    rechnung=rechnung
                )
                p.save()
                reversion.revision.comment = "KRB import"

            self.stdout.write("Einnahme - Rechnung %s erstellt.\n" % rechnung)
Example #2
0
                    rechnung = rechnungen[0]
                    if self.verbosity >= 3:
                        self.stdout.write("Rechnung über summe+datum gefunden: %s\n" % rechnung)
                    self._update_rechnung(rechnung, summe_netto, datum, konto, ggkto)
                    continue
                else:
                    sys.stderr.write("Fehler: Mehrere Rechnungen vom %s mit %s€ gefunden:\n" % (datum, summe))
                    print len(rechnungen)
                    for rechnung in rechnungen:
                        print "rechnung: %s" % rechnung
                    continue

            rechnung = Rechnung(
                rechnungs_typ=rechnungs_typ,
                notizen="Raw MMS import line: %r" % line,
                datum=datum,
                valuta=datum,
                status=self.status_bezahlt,
            )
            rechnung.save()
            reversion.revision.comment = "Neu erstellt beim MMS import."

            p = RechnungsPosten(
                rechnung=rechnung,
                menge=1,
                konto=konto,
                gegenkonto=ggkto,
                beschreibung="MMS import",
                notizen="Raw MMS import line: %r" % line,
                einzelpreis=summe,
                mwst=mwst,