Der Code ist hier:
Sub Initialize
%REM
Dieser Agent schickt eine Mail an die Leute (und ihren direkten Vorgesetzten), dass in der vorletzten Woche nicht alle Stunden
verteilt wurden.
Das soll nachts und periodisch erfolgen, nicht auf Knopfdruck.
%END REM
On Error Goto fehler
Dim s As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim nextdoc As NotesDocument
Dim memo As NotesDocument
Dim rtitem As NotesRichTextItem
Dim text As String
Dim text1 As String
Dim text2 As String
Dim endesatz As String
Dim anrede As String
Dim view As NotesView
Dim datum As New NotesDateTime("")
Set db = S.CurrentDatabase
'Set memo = New NotesDocument( db )
Set view = db.GetView("viwAnMAGestern")
Set doc = view.GetFirstDocument
' NAB
Set adressdb = s.GetDatabase(db.Server, "names.nsf")
Set adressview = adressdb.GetView("People")
' diese gruppe wird nicht über fehlende stunden benachrichtigt
Call bearbeiter_aus_gruppe_auslesen(s, "int_zeit_db_Nutzer_optional", keine_mail)
'Stop
' diese gruppe wird über fehlende stunden benachrichtigt
Call bearbeiter_aus_gruppe_auslesen(s, "int_zeit_db_Nutzer", send_mail)
' adressbuchvariablen, um den direkten vorgesetzten zu ermitteln
'Set adressview = adressdb.GetView("People")
'######## variablen für suche nach arbeitszeit und aktivitäten #############
Dim arbeitcoll As NotesDocumentCollection
Dim aktcoll As NotesDocumentCollection
Dim arbeitformel As String
Dim aktformel As String
'##################################################
' schreibt die leute ohne mail in ein array
Dim anzahl_keine_mail As Integer
anzahl_keine_mail = 0
Dim anzahl_keine_mail2 As Integer
anzahl_keine_mail2 = 0
Forall x In keine_mail
anzahl_keine_mail = anzahl_keine_mail+1
End Forall
Redim array_ohne_mail(anzahl_keine_mail-1)
' array_ohne_mail beinhaltet die leute ohne mail in einem array
Dim name_ohne_mail As NotesName
Forall x In keine_mail
Set name_ohne_mail = New NotesName (Listtag(x))
array_ohne_mail(anzahl_keine_mail2)= name_ohne_mail.Common'Listtag(x)
anzahl_keine_mail2 = anzahl_keine_mail2+1
End Forall
'###################################################
' schreibt die leute mit mail in ein array
Dim anzahl_mail As Integer
anzahl_mail = 0
Dim anzahl_mail2 As Integer
anzahl_mail2 = 0
Forall x In send_mail
anzahl_mail = anzahl_mail+1
End Forall
anzahl_mail = anzahl_mail-1
Redim array_mit_mail(anzahl_mail)
' array_mit_mail beinhaltet die leute mit mail in einem array
Dim name_mail As NotesName
Forall x In send_mail
Set name_mail = New NotesName (Listtag(x))
array_mit_mail(anzahl_mail2)= name_mail.Common'Listtag(x)
anzahl_mail2 = anzahl_mail2+1
End Forall
'###################################################
' löscht alle leute ohne mail aus dem array mit mail
Dim i As Long
i = 0
Redim array_mit_mail_gesamt(anzahl_mail-anzahl_keine_mail)
Forall leute In array_mit_mail
prüfmail = Arraygetindex(array_ohne_mail, leute)
If Isnull(prüfmail) Then
array_mit_mail_gesamt(i) = leute
i = i+1
End If
End Forall
Stop
'###################################################
Dim monat As Integer
monat = Month(Today)
Dim arbeitdoc As NotesDocument
Dim nextarbeitdoc As NotesDocument
Dim aktdoc As NotesDocument
Dim nextaktdoc As NotesDocument
'######## variablen für die stunden #############
Dim a_stunden As Double
Dim v_stunden As Double
Dim tmp_verteilt As Double
'################################################
Dim startdate As NotesDateTime
Dim enddate As NotesDateTime
Dim strdate As String
Dim tag As String
Dim jahr As String
'######## views für arbcoll und aktcoll #########
Dim arbeitview As NotesView
Dim aktview As NotesView
Set arbeitview = db.GetView("viwAZMADatum")
Set aktview = db.GetView("viwAktNameNotNull")
'################################################
Dim formel As String
Forall leut In array_mit_mail_gesamt
Dim ma As String
ma = leut
Print leut
tag = "1."
jahr = Cstr(Year(Today))
'Stop
' hier wird in zeit_db nach einem teamleiter gesucht
' wenn keiner gefunden wird, wird das Personendoc im NAB von unten nach oben durchsucht,
'damit möglichst der nächste direkte vorgesetzte ermittelt wird
formel = "@DbLookup("""":""NoCache"";"""";""viw_Teamliste"";"""+ma+""";""teamer"")"
tmp_vorgesetzter = Evaluate(formel)
If Not Isempty (tmp_vorgesetzter) Then
vorgesetzter = tmp_vorgesetzter(0)
End If
If vorgesetzter = "" Then
Set adressdoc = adressview.getfirstdocument
Do
Set notes_name = New NotesName(adressdoc.Fullname(0))
Set nextadressdoc = adressview.GetNextDocument(adressdoc)
If ma <> notes_name.Common Then
Set adressdoc = nextadressdoc
End If
Loop Until ma = notes_name.Common 'adressdoc.Fullname(1)
If adressdoc.HasItem( "Level6" ) Then
vorgesetzter = adressdoc.Level6(0)
Goto weiter
End If
If adressdoc.HasItem( "Level5" ) Then
vorgesetzter = adressdoc.Level5 (0)
Goto weiter
End If
If adressdoc.HasItem( "Level4" ) Then
vorgesetzter = adressdoc.Level4(0)
Goto weiter
End If
If adressdoc.HasItem( "Level3" ) Then
vorgesetzter = adressdoc.Level3(0)
Goto weiter
End If
If adressdoc.HasItem( "Level2" ) Then
vorgesetzter = adressdoc.Level2(0)
Goto weiter
End If
If adressdoc.HasItem( "Level1" ) Then
vorgesetzter = adressdoc.Level1(0)
Goto weiter
End If
If adressdoc.HasItem( "Level0" ) Then
vorgesetzter = adressdoc.Level0(0)
Goto weiter
End If
End If
weiter:
'collections sammeln
Set startdate = New NotesDateTime(Today)
Call startdate.AdjustDay(-14) ' 14 tage, da der agent immer montags läuft
' und der agent so immer auf den montag der vorvorwoche kommt
Set enddate = New NotesDateTime(startdate.DateOnly)
'Call enddate.AdjustDay(6)
Dim counter As Integer
counter = 0
Do
' kw berechnen für key
Stop
Dim kw As String
Dim strdatum As String
strdatum = Cstr(enddate.DateOnly)
Dim wtag As String
wtag = Wochentag(FormatDatum(strdatum))
kw = Cstr(KW_bib(FormatDatum(strdatum) , 0))
Dim kwlen As Integer
kwlen = Len(kw)
If kwlen < 2 Then
kw = "0"+kw
End If
'arbeitformel = {Form = "frmAnwesenheit" & @date(Kalender) = @today}
arbeitformel = leut + enddate.DateOnly
Set arbeitcoll = arbeitview.GetAllDocumentsByKey(arbeitformel, True)
aktformel = leut + kw 'Cstr(monat)
Set aktcoll = aktview.GetAllDocumentsByKey(aktformel, True)
If arbeitcoll.Count > 0 Then
Set arbeitdoc = arbeitcoll.GetFirstDocument()
Do
a_stunden = a_stunden + arbeitdoc.Stunden(0)
Set nextarbeitdoc = arbeitcoll.GetNextDocument(arbeitdoc)
Set arbeitdoc = nextarbeitdoc
Loop Until arbeitdoc Is Nothing
If aktcoll.Count > 0 Then
Set aktdoc = aktcoll.GetFirstDocument()
Do
If aktdoc.Flag_montag(0) = enddate.DateOnly And aktdoc.f_Montag(0) > 0 Then
v_stunden = v_stunden + aktdoc.f_Montag(0)
End If
If aktdoc.Flag_dienstag(0) = enddate.DateOnly And aktdoc.f_Dienstag(0) > 0 Then
v_stunden = v_stunden + aktdoc.f_Dienstag(0)
End If
If aktdoc.Flag_mittwoch(0) = enddate.DateOnly And aktdoc.f_Mittwoch(0) > 0 Then
v_stunden = v_stunden + aktdoc.f_Mittwoch(0)
End If
If aktdoc.Flag_donnerstag(0) = enddate.DateOnly And aktdoc.f_Donnerstag(0) > 0 Then
v_stunden = v_stunden + aktdoc.f_Donnerstag(0)
End If
If aktdoc.Flag_freitag(0) = enddate.DateOnly And aktdoc.f_Freitag(0) > 0 Then
v_stunden = v_stunden + aktdoc.f_Freitag(0)
End If
If aktdoc.Flag_samstag(0) = enddate.DateOnly And aktdoc.f_Samstag(0) > 0 Then
v_stunden = v_stunden + aktdoc.f_Samstag(0)
End If
If aktdoc.Flag_sonntag(0) = enddate.DateOnly And aktdoc.f_Sonntag(0) > 0 Then
v_stunden = v_stunden + aktdoc.f_Sonntag(0)
End If
Set nextaktdoc = aktcoll.GetNextDocument(aktdoc)
Set aktdoc = nextaktdoc
Loop Until aktdoc Is Nothing
End If
End If
'%ENDREM
'%REM
'Stop
If a_stunden <> v_stunden Then
'############# Mail an Nichtabmelder
If memo Is Nothing Then
Set memo = New NotesDocument( db )
memo.form ="Memo"
memo.Subject = "Sie haben in zeit_db nicht alle Stunden innerhalb der Frist verteilt."' ("+vorgesetzter+ma+")"
Set rtitem = New NotesRichTextitem(memo, "Body")
anrede = "Hallo,"
text = "bitte melden Sie der Verwaltung die offenen Stunden für die Tage:"
Call rtitem.appendText(anrede)
Call rtitem.AddNewLine( 2 )
Call rtitem.appendText(text)
Call rtitem.AddNewLine( 1 )
End If
text2 = "Am " & enddate.DateOnly & " fehlen noch "& a_stunden - v_stunden & " Stunden."
Call rtitem.appendText(text2)
Call rtitem.AddNewLine( 1 )
'Call rtitem.AppendDocLink( doc, db.Title )
End If
'%ENDREM
Call enddate.AdjustDay( 1 )
a_stunden = 0
v_stunden = 0
'Loop Until Month(enddate.DateOnly) <> Month(startdate.DateOnly)
counter = counter+1
Loop Until counter = 7
If Not memo Is Nothing Then
endesatz = "Diese Mail wurde automatisch von zeit_db erzeugt."
Call rtitem.AddNewLine( 2 )
Call rtitem.appendText(endesatz)
Call rtitem.AddNewLine( 1 )
memo.SendTo = ma
memo.CopyTo = vorgesetzter
memo.BlindCopyTo = "AdminMeldungen"
Call memo.Send(False)
End If
Set memo = Nothing
vorgesetzter = ""
'Stop
End Forall
TheEnd:
Exit Sub
fehler:
' bei Fehler Mail an mich
Set memo = New NotesDocument( db )
memo.form ="Memo"
memo.subject = "zeit_db: Offene Stunden vorige Woche"& Str(Erl) & Chr(10) & Error
memo.SendTo = "AdminMeldungen"
Call memo.send(False)
' Kontrollierter Abbruch:
Goto TheEnd
Exit Sub
End Sub