# coding: windows-1252
#
#---Bezeichnung: Ebene Stundensatz anzeigen
#   Klassen: Leistung
#   CondExpression:
#   ObjectScript: Y
#   ContainerScript: N
#   EventType: Kein
#   EventClass:
#   EventMembers:
#   ExtendedRights: N
#---Zeigt an auf welcher Ebene der Stundensatz
#---einer Leistung berechnet wird.
#---2014-09-18, FG: erstellt.
#---2014-09-22, FG: Formatierung angepasst(Leerschläge bei der Aufzählung).
#---2014-10-29, FG: bei der Tariftabelle ansatzKosten geändert in ansatzExt
#   Version = 102
#
import vtcapp

# zeigt eine MessageBox mit Kennzeichnung auf der
# Prioritätsstufe
def showPriority(stufe):
    msg = "1. Priorität: Tätigkeit auf Phase"
    if stufe == 1:
        msg += "\t\t<----"
    msg += "\n2. Priorität: Bearbeiter auf Phase"
    msg += "\n\t1. Explizit gesetzter Ansatz"
    if stufe == 2:
        msg += "\t\t<----"
    msg += "\n\t2. Gesetzte Stufe"
    if stufe == 3:
        msg += "\t\t<----"
    msg += "\n3. Priorität: Vorgabe auf Phase"
    if stufe == 4:
        msg += "\t\t<----"
    msg += "\n4. Priorität: Bearbeiter auf Projekt"
    msg += "\n\t1. Explizit gesetzter Ansatz"
    if stufe == 5:
        msg += "\t\t<----"
    msg += "\n\t2. Gesetzte Stufe"
    if stufe == 6:
        msg += "\t\t<----"
    msg += "\n5. Priorität: Vorgabe auf Projekt"
    if stufe == 7:
        msg += "\t\t<----"
    msg += "\n6. Priorität: Vorgabe auf Projekttyp"
    if stufe == 8:
        msg += "\t\t<----"
    msg += "\n7. Priorität: Tariftabelle"
    if stufe == 9:
        msg += "\t\t<----"
    msg += "\n8. Priorität: Vorgabe auf Bearbeiter"
    if stufe == 10:
        msg += "\t\t<----"
    msg += "\n 9.Priorität: 0.00"
    if stufe == 11:
        msg += "\t\t<----"
    vtcapp.msgbox(msg)

# gibt die Tariftabelle einer Leistung zurück
def getTariftabelle(leistung):
    if leistung.typ:
        for obj in leistung.typ.tarife:
            if obj.waehrung == leistung.waehrung:
                # Tariftabelle gefunden
                return obj

    for obj in leistung.waehrung.tarife:
        if not obj.taetigkeit:
            # Tariftabelle gefunden
            return obj

    return None

def main():
    leistung = argobject

    # Wenn eine Phase zugewiesen ist
    if leistung.phase:
        # 1. Priorität: Tätigkeit auf Phase
        if leistung.typ and leistung.eval("phase.taetigkeitphaselink->select(name=self.typ.code).ansatzExt->first"):
            showPriority(1)
            return

        # 2.1 Priorität: Bearbeiter auf Phase -> Explizit gesetzter Ansatz
        if leistung.eval("phase.bearbeiterPhasen->select(aktiv)->select(bearbeiter=self.bearbeiter).ansatzext->first"):
            showPriority(2)
            return
            
         # 2.2 Priorität: Bearbeiter auf Phase -> Gesetzte Stufe
        if leistung.eval("phase.bearbeiterPhasen->select(aktiv)->select(bearbeiter=self.bearbeiter).bearbeiterstufe->first"):
            showPriority(3)
            return

        # 3. Priorität: Vorgabe auf Phase
        if leistung.phase.ansatzext:
            showPriority(4)
            return

    # Wenn ein Projekt zugewiesen ist
    if leistung.projekt:
        # 4.1 Priorität: Bearbeiter auf Projekt -> Explizit gesetzter Ansatz
        if leistung.eval("projekt.bearbeiterlinks->select(bearbeiter=self.bearbeiter).ansatzext->first"):
            showPriority(5)
            return
            
        # 4.2 Priorität: Bearbeiter auf Projekt -> Gesetzte Stufe
        if leistung.eval("projekt.bearbeiterlinks->select(bearbeiter=self.bearbeiter).bearbeiterstufe->first"):
            showPriority(6)
            return

        # 5. Priorität: Vorgabe auf Projekt
        if leistung.projekt.ansatzext:
            showPriority(7)
            return

        # 6. Priorität: Vorgabe auf Projekttyp
        if leistung.projekt.typ.ansatzext:
            showPriority(8)
            return

        # 7. Priorität: Tariftabelle
        # Tariftabelle finden via Typ
        tariftabelle = getTariftabelle(leistung)

        if tariftabelle:
        # Ansatz in Tariftabelle suchen
            for obj in tariftabelle.ansaetze:
                if (obj.tarifstufe == leistung.projekt.tarifstufe) and (obj.bearbeiterstufe == leistung.bearbeiter.stufe):
                    # Ansatz gefunden
                    if obj.ansatzext:
                        showPriority(9)
                        return

        # 8. Priorität: Vorgabe auf Bearbeiter
        if leistung.bearbeiter.ansatzext:
            showPriority(10)
            return

        # 9. Priorität: 0.00
        showPriority(11)

main()