home *** CD-ROM | disk | FTP | other *** search
/ PC World 2003 April / PCWorld_2003-04_cd.bin / Software / Komercni / openoffice / f_0032 / BankHoliday.xba next >
Extensible Markup Language  |  2002-11-01  |  5KB  |  192 lines

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
  3. <script:module xmlns:script="http://openoffice.org/2000/script" script:name="BankHoliday" script:language="StarBasic">Option Explicit
  4.  
  5. Sub Main()
  6.     Call CalAutopilotTable()
  7. End Sub
  8.  
  9.  
  10. Function CalEasterTable&(byval Year%)
  11. Dim B%,C%,D%,E%,F%,G%,H%,I%,K%,L%,M%,N%,O%, nMonth%, nDay%
  12.        N = Year% mod 19
  13.        B = int(Year% / 100)
  14.        C = Year% mod 100
  15.        D = int(B / 4)
  16.        E = B mod 4
  17.        F = int((B + 8) / 25)
  18.        G = int((B - F + 1) / 3)
  19.        H =(19 * N + B - D - G + 15) mod 30
  20.        I = int(C / 4)
  21.        K = C mod 4
  22.        L =(32 + 2 * E + 2 * I - H - K) mod 7
  23.        M = int((N + 11 * H + 22 * L) / 451)
  24.        O = H + L - 7 * M + 114
  25.        nDay = O mod 31 + 1
  26.        nMonth = int(O / 31)
  27.        CalEasterTable& = DateSerial(Year, nMonth,nDay)
  28. End Function
  29.  
  30.  
  31. ' Note: the following algorithm is valid only till the Year 2100.
  32. ' but I have no Idea from which date in the paste it is valid
  33. Function CalOrthodoxEasterTable(ByVal iYear as Integer) as Long
  34. Dim R1%, R2%, R3%, RA%, R4%, RB%, R5%, RC%
  35. Dim lDate as Long
  36.     R1 = iYear mod 19
  37.     R2 = iYear mod 4
  38.     R3 = iYear mod 7
  39.     RA =19 * R1 + 16
  40.     R4 = RA mod 30
  41.     RB = 2 * R2 + 4 * R3 + 6 * R4
  42.     R5 = RB mod 7
  43.     RC = R4 + R5
  44.     lDate = DateSerial(iYear, 4,4)
  45.     CalOrthodoxEasterTable() = lDate + RC
  46. End Function
  47.  
  48.  
  49. Sub CalInitGlobalVariablesDate()
  50. Dim i as Integer
  51.     For i = 1 To 374
  52.         CalBankholidayName$(i) = ""
  53.         CalTypeOfBankHoliday%(i) = cHolidayType_None
  54.     Next
  55. End Sub
  56.  
  57.  
  58. Sub CalInsertBankholiday(byval CurDate as Long, byval EventName as String, ByVal iLevel as Integer)
  59. Dim iDay
  60.     iDay =(Month(CurDate)-1)*31 +Day(CurDate)
  61.  
  62.     If 0 <> CalTypeOfBankHoliday(iDay) Then
  63.         If iLevel < CalTypeOfBankHoliday(iDay) Then
  64.             CalTypeOfBankHoliday(iDay) = iLevel
  65.         End If
  66.     Else
  67.         CalTypeOfBankHoliday(iDay) = iLevel
  68.     End If
  69.  
  70.     If CalBankHolidayName(iDay) = "" Then
  71.         CalBankHolidayName(iDay) = EventName
  72.     Else
  73.         CalBankHolidayName(iDay) = CalBankHolidayName(iDay) & " / " & EventName
  74.     End If
  75. End Sub
  76.  
  77.  
  78.  
  79. Function CalIsLeapYear(ByVal iYear as Integer) as Boolean
  80.     CalIsLeapYear = iYear Mod 4 = 0
  81. End Function
  82.  
  83.  
  84. Function CalMaxDayInMonth(ByVal iYear as Integer, ByVal iMonth as Integer) as Integer
  85. ' delivers the maximum Day of a month in a certain year
  86.     Dim TmpDate as Long
  87.     Dim    MaxDay as Long
  88.     
  89.     MaxDay = 28
  90.     TmpDate = DateSerial(iYear, iMonth, MaxDay)
  91.     
  92.     While Month(TmpDate) = iMonth
  93.         MaxDay = MaxDay + 1
  94.         TmpDate = TmpDate + 1
  95.     Wend
  96.     Maxday = MaxDay - 1
  97.     CalMaxDayInMonth() = MaxDay
  98. End Function
  99.  
  100.  
  101. Function CalGetIntOfShortMonthName(ByVal MonthName as String) as Integer
  102. Dim i as Integer
  103. Dim nMonth as Integer
  104.     
  105.     nMonth = Val(MonthName)
  106.     
  107.     If (1 <= nMonth And 12 >= nMonth) Then
  108.         CalGetIntOfShortMonthName = nMonth
  109.         Exit Function
  110.     End If    
  111.     
  112.     MonthName = UCase(Trim(Left(MonthName, 3)))
  113.  
  114.     For i = 0 To 11 
  115.         If (UCase(cCalShortMonthNames(i)) = MonthName) Then
  116.             CalGetIntOfShortMonthName = i+1
  117.             Exit Function
  118.         End If
  119.     Next
  120.     
  121.     '    Not Found
  122.     CalGetIntOfShortMonthName = 0
  123. End Function
  124.  
  125.  
  126. Sub CalInsertOwnDataInTables(ByVal iSelYear as Integer)
  127.     '    F├╝gt die eigenen Individuellen Daten aus der Tabelle in die
  128.     '    bereits erstellte unsortierte Tabelle ein.    
  129. Dim CurEventName as String
  130. Dim CurYear as Integer
  131. Dim CurMonth as Integer
  132. Dim CurDay as Integer
  133. Dim LastIndex as Integer
  134. Dim i as Integer
  135.     LastIndex = Ubound(DlgCalModel.lstOwnData.StringItemList())
  136.     For i = 0 To LastIndex
  137.         CurYear = CalGetYearOfEvent(i)
  138.         If DlgCalModel.lstOwnData.StringItemList(i) <> "" Then
  139.             If (CurYear = iSelYear) Or (CurYear = 0) Then
  140.                 CurMonth = CalGetMonthofEvent(i)
  141.                 CurDay = CalGetDayofEvent(i)
  142.                 CurEventName = CalGetNameOfEvent(i)
  143.                 CalInsertBankholiday(DateSerial(CurYear, CurMonth, CurDay), CurEventName, cHolidayType_Own)
  144.             End If
  145.         End If
  146.     Next
  147. End Sub
  148.  
  149.  
  150.  
  151. ' Finds eg the first,second Monday in a month
  152. ' Note: in This Function the week starts with the Sunday
  153. Function GetMonthDate(YearInt as Integer, iMonth as Integer, iWeekDay as Integer, iOffset as Integer)
  154. Dim bFound as Boolean
  155. Dim lDate as Long
  156.     '    1st Tue in Nov : Election Day, Half
  157.     bFound = False
  158.     lDate = DateSerial(YearInt, iMonth, 1)
  159.     Do
  160.         If iWeekDay = WeekDay(lDate) Then 
  161.             bFound = True
  162.         Else
  163.             lDate = lDate + 1
  164.         End If
  165.     Loop Until bFound
  166.     GetMonthDate = lDate + iOffset
  167. End Function
  168.  
  169.  
  170.  
  171. ' Finds the next weekday after a fixed date
  172. ' e.g. Midsummerfeast in Sweden: next Saturday after 20th June
  173. Function GetNextWeekDay(iYear as Integer, iMonth as Integer, iDay as Integer, iWeekDay as Integer)
  174. Dim lDate as Long
  175. Dim iCurWeekDay as Integer
  176.     lDate = DateSerial(iYear, iMonth, iDay)
  177.     iCurWeekDay = WeekDay(lDate)
  178.     While iCurWeekDay <> iWeekDay
  179.         lDate = lDate + 1
  180.         iCurWeekDay = WeekDay(lDate)
  181.     Wend
  182.     GetNextWeekDay() = lDate
  183. End Function
  184.  
  185.  
  186. Sub AddFollowUpHolidays(ByVal lStartDate as Long, iCount as Integer, HolidayName as String, iType as Integer)
  187. Dim lDate as Long
  188.     For lDate = lStartDate + 1 To lStartDate + iCount
  189.         CalInsertBankholiday(lDate, HolidayName, iType)
  190.     Next lDate
  191. End Sub
  192. </script:module>