Jump to content

Swyx Script getrennt nach Feiertagen und 24./31.12. mit separaten Ansagetexten


Go to solution Solved by Tom Wellige,

Recommended Posts

Posted

Hallo zusammen,

ich habe eine Frage an die Script-Profis, welche sich auf den Themennamen bezieht - die Suche habe ich natürlich vorher benutzt, aber nicht wirklich das gefunden, was ich mir vorstelle 🙂

 

Ich nutze auf unserer SwyxOn ein Skript für die Feiertagsansage in der auch der 24. und 31.12. inkludiert sind (Füge ich dem Post mal hinzu). Nun möchte ich den 24.12. und 31.12. jedoch aus diesem Skript herausnehmen und eine weiteres Script einfügen, welches sich nur auf diese beiden Tage bezieht und eine separate Ansage abspielt - sind ja eigentlich keine Feiertage.

 

Hätte da jemand eine Idee oder vielleicht schon ein fertiges Script?

 

Hier noch das aktuelle Script - welches tadellos läuft:

 

' Federal States of Germany

const vb_FS_BW   = 1       ' Baden-Wuerttemberg

const vb_FS_BYMH = 131072  ' Bayern (mit Mariea Himmelfahrt)

const vb_FS_BY   = 2       ' Bayern (ohne Mariea Himmelfahrt)

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   ' Thueringen

const vb_FS_KD   = 65536   ' Koeln/Duesseldorf (Rosenmontag)

const vb_FS_AU   = 262144  ' Augsburg (Friedensfest)

 

'-------------------------------------------------------------------

' Name:     IsPublicHolidayDE

'           =================

'

' Returns true 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:

'   Boolean           True = is public holiday

'

'--------------------------------------------------------------------

Function IsPublicHolidayDE ( nFederalState, vCheckDate )

 

  On Error Resume Next

  PBXScript.OutputTrace "-------> IsPublicHolidayDE"   

  PBXScript.OutputTrace "nFederalState = " & nFederalState   

  PBXScript.OutputTrace "vCheckDate = " & vCheckDate   

  

  Dim bReturn   

  bReturn = False   

  

  Dim a, b, c, d, e, f   

  Dim nTempYear, vTempDate   

  Dim Neujahr, Erscheinungsfest, Karfreitag, Ostersonntag, Ostermontag   

  Dim Weltfrauentag, Maifeiertag, Befreiungstag, Rosenmontag, ChrHimmelfahrt, Pfingstmontag, Fronleichnam   

  Dim MarieaHimmelfahrt, Friedensfest, Weltkindertag, Tagdereinheit, Reformationstag, Allerheiligen   

  Dim BussUndBettag, Weihnachten1, Weihnachten2, Weihnachten0, Sylvester

 

  if not IsDate(vCheckDate) then vCheckDate = Now

 

  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)

  Weltfrauentag     = DateSerial(nTempYear, 3, 8)

  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)  

  Befreiungstag     = DateSerial(nTempYear, 5, 8)  

  ChrHimmelfahrt    = DateSerial(nTempYear, 3, e + f + 22 + 39)   

  Pfingstmontag     = DateSerial(nTempYear, 3, e + f + 22 + 50)   

  Fronleichnam      = DateSerial(nTempYear, 3, e + f + 22 + 60)  

  Friedensfest      = DateSerial(nTempYear, 8, 8)     

  MarieaHimmelfahrt = DateSerial(nTempYear, 8, 15)

  Weltkindertag     = DateSerial(nTempYear, 9, 20)

  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    

  Weihnachten0      = DateSerial(nTempYear, 12, 24)   

  Weihnachten1      = DateSerial(nTempYear, 12, 25)   

  Weihnachten2      = DateSerial(nTempYear, 12, 26)   

  Sylvester         = DateSerial(nTempYear, 12, 31)

 

  ' Is public holiday?   

  select case vTempDate       

    case Neujahr           

      bReturn = True       

    case Erscheinungsfest           

      if (nFederalState and (vb_FS_BW or vb_FS_BY or vb_FS_BYMH or vb_FS_ST)) then bReturn = True      

    case Weltfrauentag           

      if (nFederalState and (vb_FS_BE)) then bReturn = True     

    case Ostersonntag           

      bReturn = True       

    case Rosenmontag           

      If(nFederalState and (vb_FS_KD)) then bReturn = True       

    case Karfreitag           

      bReturn = True       

    case Ostermontag           

      bReturn = True       

    case Maifeiertag           

      bReturn = True   

    case Befreiungstag   

      if (nFederalState and (vb_FS_BE)) then bReturn = True     

    case ChrHimmelfahrt           

      bReturn = True       

    case Pfingstmontag           

      bReturn = True       

    case Fronleichnam   

      if (nFederalState and (vb_FS_BW or vb_FS_BY or vb_FS_BYMH or vb_FS_HE or vb_FS_NW or vb_FS_RP or vb_FS_SL)) then bReturn = True 

    case Friedensfest

      If(nFederalState and (vb_FS_AU)) then bReturn = True       

    case MarieaHimmelfahrt           

      if (nFederalState and (vb_FS_BYMH or vb_FS_SL)) then bReturn = True

    case Weltkindertag      

      if (nFederalState and (vb_FS_TH)) then bReturn = True     

    case Tagdereinheit           

      bReturn = True       

    case Reformationstag           

      if (nFederalState and (vb_FS_BB or vb_FS_HB or vb_FS_HH or vb_FS_MV or vb_FS_NI or vb_FS_SN or vb_FS_ST or vb_FS_SH or vb_FS_TH)) then bReturn = True       

    case Allerheiligen           

      if (nFederalState and (vb_FS_BW or vb_FS_BY or vb_FS_BYMH or vb_FS_NW or vb_FS_RP or vb_FS_SL)) then bReturn = True       

    case BussUndBettag           

      if (nFederalState and (vb_FS_SN)) then bReturn = True    

    case Weihnachten0           

      bReturn = True  

    case Weihnachten1           

      bReturn = True       

    case Weihnachten2           

      bReturn = True  

    case Sylvester

      bReturn = True

  end select   

  

  IsPublicHolidayDE = bReturn   

  

  PBXScript.OutputTrace "bReturn = " & bReturn   

  PBXScript.OutputTrace "<------- IsPublicHolidayDE"

 

End Function

 

 

 

 Ich bedanke mich schonmal im Voraus für euer Feedback

 

Posted

Du kannst einfach einige Zeilen im Code auskommentieren, indem Du ein ' an den Zeilenanfang setzt:

 

...
    case BussUndBettag           
      if (nFederalState and (vb_FS_SN)) then bReturn = True    

    'case Weihnachten0           
    '  bReturn = True  

    case Weihnachten1           
      bReturn = True       

    case Weihnachten2           
      bReturn = True  

    'case Sylvester
    '  bReturn = True

  end select   
  ...

 

Anschliessend wird die Funktion den 24. und 31. nicht mehr als Feiertag zurückgeben und Du kannst auf die beiden Tage nach der Feiertagsfunktion prüfen.

 

Alternativ kannst Du natürlich auch selbst auf die beiden Tage vor der Feiertagsfunktion prüfen. Dann musst Du nichts am Code ändern. Das sieht für ich als einfachte Lösung aus. Auch mit Blick auf Wartung in der Zukunft, da sich dann keine Sonderbehandlung im Code und in Deinem GSE Skript befindet, sondern nur in Deinem GSE Skript.

 

 

Posted

Hallo Tom, vielen Dank für dein schnelles Feedback - das hat mir schonmal geholfen, die beiden Tage rauszuwerfen. Kannst du mir ein Beispiel schicken, wie du das GSE Skript für die beiden Tage gestalten würdest? Ich bin da noch etwas frisch in den Themen - sorry 🙂

 

Viele Grüße

  • Solution
Posted

Hallo Kai,

 

mit einem "Datum/Uhrzeit" Block könntest Du jeweils auf eine Zeitspanne vom 24.12.2024 bis 24.12.2024 bzw. dem 31. prüfen. Hierbei hast Du allerdings das Jahr fest verdrahtet da mit drin stehen und müsstest das Call Routing jedes Jahr anpassen.

 

Besser ist es, nur auf den Tag und Monat zu prüfen. Das geht mit dem "Variable auswerten" Block.

 

image.png

 

image.png


EDIT: siehe meinen Post weiter unten!

 

Hier die obige Regel als .rse Datei. Einfach im GSE über "Datei | Importieren..." importieren.

 

Feiertag.rse

 

 

Ich habe vor vor einiger Zeit mal etwas zum Thema Datum bzw. Zeitspanne dynamisch und nicht fest verdrahtet prüfen zu können geschrieben. Das ist evtl. auch interessant für Dich zu lesen:

 

 

Posted

Ich sehe gerade, dass ich da ein wenig Mist geschrieben haben. Die Funktionen "CurDay" und "CurMonth" haben keine Parameter und liefern Zeichenketten statt Zahlen zurück. Damit sieht die Zeile im "Variable auswerten" Block dann wie folgt aus:

 

CurDay() = "24" and CurMonth() = "12"

 

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • 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.