# coding: windows-1252
#
#---Bezeichnung: Rechnung auf gebucht setzen (ohne Buchhaltung)
#   Klassen: Rechnung
#   ObjectScript: Y
#   ContainerScript: Y
#   EventType: Kein
#   EventClass:
#   EventMembers:
#   ExtendedRights: N
#---Wenn das Member gebucht auf der Rechnung geändert wird, anstelle der Standardfunktion buchen,
#   dann fehlen auf den Buchungen einige Informationen (konto, pknr). Mit diesem Skript werden die Informationen
#   der Reihe nach gespeichert und nach dem Umstellen wieder eingesetzt.
#---29.10.2010, IB: erstellt.
#---05.10.2012  RS: erweitert, damit stornieren und buchen mit einem Skript möglich ist.
#---19.06.2015  BR: erweitert: Ausführen auf Listen und Einzelojekten. UpdateDatabase eingefügt.
#---05.11.2019 STH: Setze beim Buchen die Belegnr auf "0".

from vtcapp import getpropertyvalue


def main():
    # Auswahlobjekte laden
    if argobject.eval('oclistypeof(Rechnung)'):
        rechnungen = argobject.eval('self->asset')
    else:
        rechnungen = argobject.eval('eintraege.list.oclastype(Rechnung)')

    # Rechnngen buchen/stornieren anpassen.
    for rechnung in rechnungen:
        if rechnung.verrechnet:
            if rechnung.gebucht:
        # Rechnung gebucht ändern, damit alle Informationen drin sind.
                rechnung.gebucht = False
            else:
                rechnung.bhEKontoLeistungen = rechnung.ErtragsKontoLeistungen
                rechnung.bhEKontoSpesen = rechnung.ErtragsKontoSpesen
                rechnung.bhEKontoAuslagen = rechnung.ErtragsKontoAuslagen
                rechnung.bhPersonenkonto = rechnung.Personenkonto
                rechnung.bhVorschussKonto = rechnung.projekt.vorschussKonto
                rechnung.bhDebiKonto = rechnung.buchungsbeleg.sammelkonto
                rechnung.bhRabattKonto = getpropertyvalue("RabattKonto")
                rechnung.belegnr = "0"
                rechnung.gebucht = True
      
    # Save
    vtcapp.updatedatabase()

main()