Bizdays: calcola i giorni lavorativi fra 2 date

Calcola i giorni lavorativi fra due date escludendo sabati, domeniche ed i giorni festivi presenti nel names.nsf (vista Holidays)

 
Dim s As New NotesSession
Dim questodb As NotesDatabase
Dim profilo As NotesDocument
Dim ndc As NotesDocumentCollection
Dim doc As NotesDocument
Dim nab As NotesDatabase
Dim vacanze As NotesView
Dim lista() As String
Dim descr() As string
Dim conta As Integer
Dim questanno As String

Dim inizio As NotesDateTime
Dim fine As NotesDateTime
Dim intervallo As Integer
Dim giorno As Integer
intervallo = 20
Set questodb = s.CurrentDatabase
questoserver = questodb.Server


questanno = Right(CStr(Today),4)
Set nab = s.Getdatabase(questoserver, "names.nsf")
Set vacanze = nab.Getview("Holidays")
Set ndc = vacanze.Getalldocumentsbykey("Italy", true)

conta = 0
Set doc = ndc.Getfirstdocument()
Do While Not doc Is Nothing
If doc.RepeatUnit(0) = "Y" Then
ReDim Preserve lista(conta)
ReDim Preserve descr(conta)
lista(conta) = Left(CStr(doc.StartDateTime(0)),6) + questanno
descr(conta) = doc.Subject(0)
conta = conta +1
End If
If doc.RepeatUnit(0) = "C" Then
ForAll d In doc.RepeatCustom
If Right(CStr(d),4) = questanno Then
ReDim Preserve lista(conta)
ReDim Preserve descr(conta)
lista(conta) = CStr(d)
descr(conta) = doc.Subject(0)
conta = conta + 1
End If
End ForAll
End If
Set doc = ndc.Getnextdocument(doc)
Loop

Set inizio = New NotesDateTime( Today ) ' questa è la data di inizio, da settare a seconda delle esigenze
Set fine = New NotesDateTime( Today )
giorno = 1
Do while Not giorno > intervallo
Call fine.AdjustDay(1)
wd = Weekday(fine.lslocaltime)
If wd = 1 Or wd = 7 Then GoTo cicladata' se è sabato o domenica
If Not IsNull( ArrayGetIndex( lista, fine.DateOnly , 5) ) Then GoTo cicladata ' se la data è compresa nei giorni festivi
giorno = giorno + 1
cicladata:
Loop

0 commenti