Jump to content
Tom Wellige

Public Holidays (in Germany, incl. Federal States)

Recommended Posts

Heute ist mir aufgefallen, dass das Skript festlegt, dass das Bundesland Sachsen einen neuen Feiertag, nämlich Fronleichnam dazubekommt ;) 

 

Jedenfalls ist das im Abschnitt Fronleichnam so definiert:

    case Fronleichnam            
      if (nFederalState and (vb_FS_BW or vb_FS_BY or vb_FS_HE or vb_FS_NW or vb_FS_RP or vb_FS_SL or vb_FS_SN or vb_FS_TH)) then bReturn = True        

 

Ich habe das mal korrigiert (auch wenn ich natürlich weiß das dieses Forum nicht mehr aktuell ist, wollte ich die Info so nicht stehen lassen.

 

Außerdem hat Berlin seit diesem Jahr mit dem 8.3. einen neuen Feiertag (Weltfrauentag) - Den habe ich ebenfalls ergänzt, bin mir aber nicht sicher ob ich den korrekt ergänzt habe, wäre schön wenn du da nochmal drüber schauen könntest.

feiertage-vb.txt

 

 

Viele Grüße aus Berlin!

Fabian

Edited by Fabian L

Share this post


Link to post
Share on other sites
On 6/20/2019 at 2:18 PM, Fabian L said:

Außerdem hat Berlin seit diesem Jahr mit dem 8.3. einen neuen Feiertag (Weltfrauentag) - Den habe ich ebenfalls ergänzt, bin mir aber nicht sicher ob ich den korrekt ergänzt habe, wäre schön wenn du da nochmal drüber schauen könntest.

 

Hi Fabian,

 

danke für die Erweiterungen/Fixes. Das mit dem Weltfrauentag ist richtig implementiert. Ich habe die Änderungen in den ersten Post in diesem Topic übernommen.

 

Viele Grüße, Tom.

 

Share this post


Link to post
Share on other sites

@kroni99 hat eine neue Version für Österreich zur Verfügung gestellt.

 

 

In dem Zusammenhang habe ich die Funktion im ersten Post hier von "IsPublicHoliday" nach "IsPublicHolidayDE" umbenannt.

 

Danke Dominik!

 

Share this post


Link to post
Share on other sites

Habe gerade die Funktion für den Reformationstag angepasst. In Bremen, Hamburg, Niedersachen und Schleswig-Holstein wird er nun auch als solcher erkannt.

 

Ausserdem habe ich den reinen Skriptcode aus dem Post entfernt und ihn statt dessen in einer Textdatei eingefügt, für die nun ein Downloadlink vorhanden ist.

 

Wie immer findet man alles notwendige im ersten Post in diesem Topic.

 

Share this post


Link to post
Share on other sites

Hallo zusammen,

 

vielen Dank für das Skript - bin leider erst heute darüber gestolpert, nachdem ein Kunde das in genau dieser Form angefragt hat.

Ich habe parallel bei Swyx vorgeschlagen, diese Funktion offiziell mit aufzunehmen (soweit der Urheber damit einverstanden ist), dann würde sie global zur Verfügung stehen und könnte ggf. durch Swyx-Updates mit aktualisiert werden.

Share this post


Link to post
Share on other sites

Hallo allerseits,

 

das Skript funktioniert wie erwartet wunderbar!

Mir ist noch ein Fall eingefallen, der bisher noch nicht berücksichtigt ist: Augsburg hat im Unterschied zum restlichen Bayern noch zusätzlich den 8.8. als gesetzlichen Feiertag (Friedensfest) - vielleicht kann das ja auch noch mit eingebaut werden...

Share this post


Link to post
Share on other sites

Ich habe gerade folgende Erweiteurngen am Skript vorgenommen:

  • Befreiungstag (08.05.) für Berlin hinzugefügt
  • Friedensfest (08.08.) und neues "Bundesland" für Augsburg (vb_FS_AU) hinzugefügt
  • Weltkindertag (20.09.) für Thüringen hinzugefügt

 

Das "Bundesland" Augsburg enthält nur das Friedensfest, d.h. man muss in Augsburg auf Bayern und Augsburg prüfen:

  • vb_FS_BY or vb_FS_AU
  • vb_FS_BYMH or vb_FS_AU

 

Wie immer findet man alles notwendige im ersten Post in diesem Topic.

 

Share this post


Link to post
Share on other sites

Hallo Tom,

 

ich hätte da nochmal ein Feature Request - mal schauen, was du dazu sagst:

Manchmal wäre es super, wenn man als Rückgabewert nicht nur "true/false" hätte, sondern um welchen Feiertag es sich handelt. Dann könnte man z.B. spezifischere Ansagen für Ostern vs. Weihnachten verwenden.

Um bestehende Skripte nicht ändern zu müssen, die auf True/False warten, könnte ja evtl. eine Variable außerhalb der Funktion verwendet werden (die dann natürlich vorher deklariert werden müsste)

Share this post


Link to post
Share on other sites

Das ist im Prinzip keine schlechte Idee. Allerdings würde ich die vorhandene Funktion nicht ändern wollen. Dabei müssten dann zuviele Leute ihre Skripte anpassen.

 

Ich würde das über einer weitere Funktion lösen: GetPublicHolidayDE

 

Dim nPublicHoliday
nPublicHoliday = 0

If IsPublicHolidayDE(vb_FS_NW, "") Then
	nPublicHoliday = GetPublicHolidayDE(vb_FS_NW, "")
End If

If nPublicHoliday <> 0 Then
	' announce the public holiday here
End If

 

So eine Funktion GetPublicHolidayDE sollte schnell zu implementieren sein. Mal gucken, vielleicht ist das was fürs kommende Wochenende.

 

Share this post


Link to post
Share on other sites

Hallo,

 

ich hatte das mal für einen Kunden gebraucht. Der wollte für Weihnachten und Ostern andere Ansagen haben.

Ich habe einfach den Rückgabewert angepasst und die Ausgänge entsprechend des Werts belegt.

Hier mein Script, ich müsste es bei Gelegenheit mal auf die aktuellste Version anpassen

' Federal States of Germany
const vb_FS_BW = 1       ' Baden-Württemberg
const vb_FS_BY = 2       ' Bayern
const vb_FS_BE = 4       ' Berlin
const vb_FS_BB = 8       ' Brandenburg
const vb_FS_HB = 16      ' Bremen
const vb_FS_HH = 32      ' Hamburg
const vb_FS_HE = 64      ' Hessen
const vb_FS_MV = 128     ' Mecklenburg-Vorpommern
const vb_FS_NI = 256     ' Niedersachsen
const vb_FS_NW = 512     ' Nordrhein-Westfalen
const vb_FS_RP = 1024    ' Rheinland-Pfalz
const vb_FS_SL = 2048    ' Saarland
const vb_FS_SN = 4096    ' Sachsen
const vb_FS_ST = 8192    ' Sachen-Anhalt
const vb_FS_SH = 16384   ' Schleswig-Holstein
const vb_FS_TH = 32768   ' Thüringen
const vb_FS_KD = 65536   ' Köln/Düsseldorf (Rosenmontag)




''-------------------------------------------------------------------
'' Name:     IsPublicHoliday 
''           ===============
'' 
'' Returns 1,2 or 3 if the given date is a public holiday in the given German federal state.
'' Multiple federal states can be combined with "OR"
''
'' Parameter:
''   nFederalState     single or combination of federal states
''   vCheckDate        vbscript date to check (e.g. as returned by now) or "" (for current date)
''
'' Returns:
''   Int        0 = ist kein Feiertag
''				1 = ist Feiertag
''				2 = ist Ostern
''				3 = ist Weihnahten
''				UseExit = IsPublicHoliday(vb_FS_HE, "") 
''				Im VB-Block die Ausgänge entsprechend belegen
''--------------------------------------------------------------------
Function IsPublicHoliday ( nFederalState, vCheckDate )


    On Error Resume Next


    PBXScript.OutputTrace "-------> IsPublicHoliday"
    PBXScript.OutputTrace "nFederalState = " & nFederalState
    PBXScript.OutputTrace "vCheckDate = " & vCheckDate


    Dim bReturn
    bReturn = 0


    Dim a, b, c, d, e, f
    Dim nTempYear, vTempDate
    Dim Neujahr, Erscheinungsfest, Karfreitag, Ostersonntag, Ostermontag
    Dim Maifeiertag, Rosenmontag, ChrHimmelfahrt, Pfingstmontag, Fronleichnam
    Dim MarieaHimmelfahrt, Tagdereinheit, Reformationstag, Allerheiligen
    Dim BussUndBettag, Weihnachten1, Weihnachten2 


    if Not IsDate(vCheckDate) then
        vCheckDate = Now
    end if
    vTempDate = DateSerial(Year(vCheckDate), Month(vCheckDate), Day(vCheckDate))
    nTempYear = Year(vTempDate)


    PBXScript.OutputTrace "Using nTempYear = " & nTempYear
    PBXScript.OutputTrace "Using vTempDate = " & vTempDate
          
    ' Gauss Formular
    a = nTempYear Mod 19
    b = nTempYear \ 100
    c = (8 * b + 13) \ 25 - 2
    d = b - (nTempYear \ 400) - 2
    e = (19 * (nTempYear Mod 19) + ((15 - c + d) Mod 30)) Mod 30
    If e = 28 Then
        If a > 10 Then
            e = 27
        End If
    ElseIf e = 29 Then
        e = 28
    End If
    f = (d + 6 * e + 2 * (nTempYear Mod 4) + 4 * (nTempYear Mod 7) + 6) Mod 7


    ' Calculate public holidays
    Neujahr           = DateSerial(nTempYear, 1, 1)
    Erscheinungsfest  = DateSerial(nTempYear, 1, 6)
    Ostersonntag      = DateSerial(nTempYear, 3, e + f + 22)
    Rosenmontag       = DateSerial(nTempYear, 3, e + f + 22 - 48)
    Karfreitag        = DateSerial(nTempYear, 3, e + f + 22 - 2)
    Ostermontag       = DateSerial(nTempYear, 3, e + f + 22 + 1)
    Maifeiertag       = DateSerial(nTempYear, 5, 1)
    ChrHimmelfahrt    = DateSerial(nTempYear, 3, e + f + 22 + 39)
    Pfingstmontag     = DateSerial(nTempYear, 3, e + f + 22 + 50)
    Fronleichnam      = DateSerial(nTempYear, 3, e + f + 22 + 60)
    MarieaHimmelfahrt = DateSerial(nTempYear, 8, 15) 
    Tagdereinheit     = DateSerial(nTempYear, 10, 3) 
    Reformationstag   = DateSerial(nTempYear, 10, 31) 
    Allerheiligen     = DateSerial(nTempYear, 11, 1) 
    BussUndBettag     = DateSerial(nTempYear, 12, 25) - Weekday(DateSerial(nTempYear, 12, 25), vbMonday) - 4 * 7 - vbWednesday 
    Weihnachten1      = DateSerial(nTempYear, 12, 25)
    Weihnachten2      = DateSerial(nTempYear, 12, 26)


    ' Is public holiday?
    select case vTempDate
        case Neujahr
            bReturn = 1
        case Erscheinungsfest
            if (nFederalState and (vb_FS_BW or vb_FS_BY or vb_FS_ST)) then bReturn = 1
        case Ostersonntag
            bReturn = 2
        Case Rosenmontag
            If(nFederalState and (vb_FS_KD)) then bReturn = 1
        case Karfreitag
            bReturn = 2
        case Ostermontag
            bReturn = 2
        case Maifeiertag
            bReturn = 1
        case ChrHimmelfahrt
            bReturn = 1
        case Pfingstmontag
            bReturn = 1
        case Fronleichnam
            if (nFederalState and (vb_FS_BW or vb_FS_BY or vb_FS_HE or vb_FS_NW or vb_FS_RP or vb_FS_SL or vb_FS_SN or vb_FS_TH)) then bReturn = 1
        case MarieaHimmelfahrt
            if (nFederalState and (vb_FS_BY or vb_FS_SL)) then bReturn = 1
        case Tagdereinheit
            bReturn = 1
        case Reformationstag
            if (nFederalState and (vb_FS_BB or vb_FS_MV or vb_FS_SN or vb_FS_ST or vb_FS_TH)) then bReturn = 1
        case Allerheiligen
            if (nFederalState and (vb_FS_BW or vb_FS_BY or vb_FS_NW or vb_FS_RP or vb_FS_SL)) then bReturn = 1
        case BussUndBettag
            if (nFederalState and (vb_FS_SN)) then bReturn = 1
        case Weihnachten1
            bReturn = 3
        case Weihnachten2
            bReturn = 3
    end select


    IsPublicHoliday = bReturn


    PBXScript.OutputTrace "bReturn = " & bReturn
    PBXScript.OutputTrace "<------- IsPublicHoliday"


End Function

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use and have taken note of our Privacy Policy.
We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.