﻿# coding: windows-1252
#
#---Bezeichnung: Vorschuss verrechnen
#   Klassen: Vorschuss
#   CondExpression:
#   ObjectScript: Y
#   ContainerScript: N
#   EventType: None
#   EventClass:
#   EventMembers:
#   ExtendedRights: N
#
#---Erstellt eine Rechnung für den aktuellen
#   Vorschuss und verrechnet diese. Es wird folgendes durchgeführt:
#   * Erstellt eine Rechnung
#   * Entfernt alles ausser dem Vorschuss
#   * Verrechnet die Rechnung
#
#---Ab Version 4.4.
#
#---2010-11-08, Vertec AG: erstellt.
#   2012-03-29, Vertec AG, TS: pauschalphasen von Rechnung entfernen
#   2012-05-25, Vertec AG, IB: Vorschuss explizit zuordnen, Rechnung am Schluss anzeigen
#   2017-12-13, Vertec AG, MWY, Version 100: Umgeschrieben in Python.
#
#   Version = 100


def remove_from_invoice(invoice, listname, exclude=[]):
    """Entfernt alle Einträge von einer Rechnung ausser die in exclude gelieferten."""
    boldlist = getattr(invoice, listname)
    pylist = list(boldlist)
    for e in pylist:
        if e not in exclude:
            boldlist.remove(e)

def main(vorschuss):
    # Muss Vorschuss sein
    if not vorschuss and vorschuss.istypeof('Vorschuss'):
        raise Exception('Die Funktion muss auf einem Vorschuss ausgeführt werden.')

    # Ist der Vorschuss bereits verrechnet
    if vorschuss.eval("vorschussRechnung"):
        raise Exception('Der Vorschuss ist bereits verrechnet')

    # Setzt das Projekt des Vorschuess
    projekt = vorschuss.projekt

    if projekt:
        # Erstellt die Rechnung
        rechnung = vtcapp.createobject('Rechnung')
        rechnung.projekt = projekt

        # Vorschuss explizit zuordnen
        rechnung.vorschuesseaufrechnung.append(vorschuss)

        # Entfernt alles von der Rechnung bis auf den betroffenen Vorschuss
        remove_from_invoice(rechnung, 'leistungen')
        remove_from_invoice(rechnung, 'auslagen')
        remove_from_invoice(rechnung, 'spesen')
        remove_from_invoice(rechnung, 'vorschuesse')
        remove_from_invoice(rechnung, 'vorschuesseAufRechnung', [vorschuss])
        remove_from_invoice(rechnung, 'pauschalphasen')

        # Stellt sicher, dass die Rechnung nicht pauschal / Pauschalspesen usw ist
        rechnung.pauschal = False
        rechnung.rabatt  = False
        rechnung.pauschalspesen = False

        # So, alles gemacht. Jetzt wird die Rechnung noch verrechnet
        rechnung.makeverrechnet()

        # Form anzeigen
        vtcapp.showdetailform(rechnung)

main(argobject)