# coding: windows-1252
#
#---Bezeichnung: Absenzen von - bis erfassen
#   Klassen: Projektbearbeiter
#   ObjectScript: Y
#   ContainerScript: N
#   EventType: Kein
#   EventClass: 
#   EventMembers: 
#   ExtendedRights: N
#---Erstellt Leistungen im angegeben Zeitrahmen  auf der ausgewählten Absenzphase.
#   Das interne "Absenzenprojekt" muss untenstehend im Script eingetragen werden mit dem Projektcode. absProjekt =
#	Die aktiven Phasen des Absenzenprojektes stehen als Dropdownauswahl für die Absenzenerfassung zur Verfügung.
#	Beim Erfassen von Ferien als Phase muss in den Systemeinstellungen eine Ferientätigkeit definiert und der Phase zugeordnet werden. Siehe Ferienerfassung auf http://www.vertec.com/support
#	Absenzen werden erfasst mittels Kontextmenu/rechte Maustaste auf dem Bearbeiter.
#	Die Sollzeit jeden Tages in der Absenzperiode wird als Absenzleistung erzeugt.
#---31.03.2011, IB: erstellt.

from vtcapp import msgbox, createobject, evalocl
import vtcforms

absProjekt = "Absenzen"
projekt = None
phase = None
frm = None
def main():
    global frm
    global phase
    global projekt
    
    projekt = evalocl("projekt->select(code='%s')->first" % absProjekt)
    if not projekt:
        msgbox("Das Absenzprojekt '%s' existiert nicht." % absProjekt)
        return
    
    aktBearbeiter = None
    if argobject.eval("self.oclistypeof(Projektbearbeiter)"):
        aktBearbeiter = argobject
    else:
        msgbox("Die Absenzerfassung sollte auf einem Bearbeiter gemacht werden.")
        return
        
    # Form initialisieren
    frm = vtcforms.readcomponent(formdef)
    try:
        frm.Caption = "Absenzerfassung"
        frm.edtVon.Date = argobject.eval("self.date")
        frm.edtBis.Date = argobject.eval("self.date")
        for tmpphase in projekt.eval("phasen->select(aktiv)"):
            frm.cmbTyp.Items.Add(tmpphase.code)
        frm.cmbTyp.ItemIndex = 0
        frm.btnOK.OnClick = btnOkClick
        
        if frm.ShowModal() == 2:
            return
        else:
            # Leistungen erstellen
            for datum in range(int(frm.edtVon.Date), int(frm.edtBis.Date)+1):
                sollzeit = aktBearbeiter.eval("self->getSollzeit(%i.floatToDate, %i.floatToDate)" % (datum, datum))
                arbeitszeit = aktBearbeiter.eval("self->getArbeitszeit(%i.floatToDate, %i.floatToDate)" % (datum, datum))
                sollzeit = sollzeit - arbeitszeit
                if sollzeit > 0:
                    leistung = createobject("OffeneLeistung")
                    leistung.projekt = projekt
                    leistung.phase = phase
                    leistung.minutenint = sollzeit
                    leistung.bearbeiter = aktBearbeiter
                    leistung.datum = projekt.eval("%i.floatToDate" % datum)
                
    finally:
        del frm
        
def btnOkClick(Sender):
    global frm
    global projekt
    global phase

    frm.ModalResult = 0

    # Werte abfragen
    if int(frm.edtVon.Date) > int(frm.edtBis.Date):
        msgbox("Von-Datum ist grösser als Bis-Datum")
        return
        
    if frm.cmbTyp.Text == "":
        msgbox("Bitte wählen Sie eine Absenzkategorie aus.")
        return
        
    phase = projekt.eval("self.phasen->select(code='%s')->first" % frm.cmbTyp.Text)
    if not phase:
        msgbox("Absenzkategorie wurde nicht gefunden. Bitte wählen Sie einen aus der Liste aus.")
        return
        
    frm.ModalResult = 1

formdef="""
object Form1: TForm1
  Left = 425
  Top = 134
  Width = 207
  Height = 190
  Caption = 'Absenzerfassung'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object lblVon: TLabel
    Left = 8
    Top = 14
    Width = 53
    Height = 13
    Caption = 'Zeitrahmen'
  end
  object Label1: TLabel
    Left = 96
    Top = 32
    Width = 6
    Height = 16
    Caption = '-'
    Font.Charset = DEFAULT_CHARSET
    Font.Color = clWindowText
    Font.Height = -13
    Font.Name = 'MS Sans Serif'
    Font.Style = [fsBold]
    ParentFont = False
  end
  object lblPhase: TLabel
    Left = 8
    Top = 64
    Width = 79
    Height = 13
    Caption = 'Absenzkategorie'
  end
  object cmbTyp: TComboBox
    Left = 8
    Top = 80
    Width = 145
    Height = 21
    ItemHeight = 13
    TabOrder = 0
  end
  object btnAbbrechen: TButton
    Left = 32
    Top = 120
    Width = 75
    Height = 25
    Cancel = True
    Caption = 'Abbrechen'
    ModalResult = 2
    TabOrder = 1
  end
  object btnOK: TButton
    Left = 114
    Top = 120
    Width = 75
    Height = 25
    Caption = 'OK'
    Default = True
    ModalResult = 1
    TabOrder = 2
  end
  object edtVon: TDateTimePicker
    Left = 8
    Top = 30
    Width = 81
    Height = 21
    CalAlignment = dtaLeft
    Date = 40633.4548374653
    Time = 40633.4548374653
    DateFormat = dfShort
    DateMode = dmComboBox
    Kind = dtkDate
    ParseInput = False
    TabOrder = 3
  end
  object edtBis: TDateTimePicker
    Left = 109
    Top = 30
    Width = 81
    Height = 21
    CalAlignment = dtaLeft
    Date = 40633.4548374653
    Time = 40633.4548374653
    DateFormat = dfShort
    DateMode = dmComboBox
    Kind = dtkDate
    ParseInput = False
    TabOrder = 4
  end
end
"""

main()

