Guest User

Untitled

a guest
Nov 3rd, 2025
27
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.90 KB | None | 0 0
  1. // Function Call
  2. DueBusinessDate(Max(0, Value(txtCycleTime.Text)), 8, 17, Now())DueBusinessDate(Max(0, Value(txtCycleTime.Text)), 8, 17, Now())
  3.  
  4. //UDFS
  5. //Choose the correct business-hours start based on a reference datetime
  6. NextBusinessStart(
  7.     Reference: DateTime,
  8.     StartHour: Number,
  9.     EndHour: Number
  10. ): DateTime =
  11. With(
  12.     {
  13.         weekdayMon1: Weekday(Reference, StartOfWeek.Monday),
  14.         today: DateValue(Reference),
  15.         timeNow: Time(Hour(Reference), Minute(Reference), Second(Reference))
  16.     },
  17.     Switch(
  18.         true,
  19.         // Weekend -> next Monday 08:00
  20.         weekdayMon1 >= 6,
  21.             DateAdd(today, 8 - weekdayMon1, TimeUnit.Days) + Time(StartHour, 0, 0),
  22.  
  23.  
  24.         // After hours -> next business day 08:00
  25.         timeNow >= Time(EndHour, 0, 0),
  26.             With(
  27.                 { d1: DateAdd(today, 1, TimeUnit.Days) },
  28.                 If(
  29.                     Weekday(d1, StartOfWeek.Monday) >= 6,
  30.                     DateAdd(d1, 8 - Weekday(d1, StartOfWeek.Monday), TimeUnit.Days),
  31.                     d1
  32.                 ) + Time(StartHour, 0, 0)
  33.             ),
  34.  
  35.  
  36.         // Before hours -> today 08:00
  37.         timeNow < Time(StartHour, 0, 0),
  38.             today + Time(StartHour, 0, 0),
  39.  
  40.  
  41.         // Otherwise -> now
  42.         Reference
  43.     )
  44. );
  45.  
  46.  
  47. //Add business minutes starting from a given start datetime (Mon–Fri, StartHour–EndHour)
  48. AddBusinessMinutes(
  49.     StartDateTime: DateTime,
  50.     MinutesToAdd: Number,
  51.     StartHour: Number,
  52.     EndHour: Number
  53. ): DateTime =
  54. With(
  55.     {
  56.         DayMins: (EndHour - StartHour) * 60,
  57.         MinsLeftToday:
  58.             Max(
  59.                 0,
  60.                 DateDiff(
  61.                     StartDateTime,
  62.                     DateValue(StartDateTime) + Time(EndHour, 0, 0),
  63.                     TimeUnit.Minutes
  64.                 )
  65.             )
  66.     },
  67.     If(
  68.         MinutesToAdd <= MinsLeftToday,
  69.         DateAdd(StartDateTime, MinutesToAdd, TimeUnit.Minutes),
  70.         With(
  71.             {
  72.                 FullDays: RoundDown(MinutesToAdd - MinsLeftToday / DayMins, 0),
  73.                 Leftover: Mod(MinutesToAdd - MinsLeftToday, DayMins)
  74.             },
  75.  
  76.  
  77.             With(
  78.                 {
  79.                     FirstFull:
  80.                         With(
  81.                             { d0: DateAdd(DateValue(StartDateTime), 1, TimeUnit.Days) },
  82.                             If(
  83.                                 Weekday(d0, StartOfWeek.Monday) >= 6,
  84.                                 DateAdd(d0, 8 - Weekday(d0, StartOfWeek.Monday), TimeUnit.Days),
  85.                                 d0
  86.                             )
  87.                         )
  88.                 },
  89.                 With(
  90.                     {
  91.                         TargetDay:
  92.                             DateAdd(
  93.                                 FirstFull,
  94.                                 FullDays
  95.                                     + RoundDown(
  96.                                         (Weekday(FirstFull, StartOfWeek.Monday) - 1 + FullDays) / 5,
  97.                                         0
  98.                                     ) * 2,
  99.                                 TimeUnit.Days
  100.                             )
  101.                     },
  102.                     If(
  103.                         Leftover = 0,
  104.                         TargetDay + Time(EndHour, 0, 0),
  105.                         DateAdd(TargetDay + Time(StartHour, 0, 0), Leftover, TimeUnit.Minutes)
  106.                     )
  107.                 )
  108.             )
  109.         )
  110.     )
  111. );
  112.  
  113.  
  114. // Function
  115. DueBusinessDate(
  116.     PlannedHours: Number,
  117.     StartHour: Number,
  118.     EndHour: Number,
  119.     Reference: DateTime
  120. ): DateTime =
  121. With(
  122.     {
  123.         StartTime: NextBusinessStart(Reference, StartHour, EndHour),
  124.         PlannedMins: Round(PlannedHours * 60, 0)
  125.     },
  126.     AddBusinessMinutes(StartTime, PlannedMins, StartHour, EndHour)
  127. );//Choose the correct business-hours start based on a reference datetime
  128. NextBusinessStart(
  129.     Reference: DateTime,
  130.     StartHour: Number,
  131.     EndHour: Number
  132. ): DateTime =
  133. With(
  134.     {
  135.         weekdayMon1: Weekday(Reference, StartOfWeek.Monday),
  136.         today: DateValue(Reference),
  137.         timeNow: Time(Hour(Reference), Minute(Reference), Second(Reference))
  138.     },
  139.     Switch(
  140.         true,
  141.         // Weekend -> next Monday 08:00
  142.         weekdayMon1 >= 6,
  143.             DateAdd(today, 8 - weekdayMon1, TimeUnit.Days) + Time(StartHour, 0, 0),
  144.  
  145.  
  146.         // After hours -> next business day 08:00
  147.         timeNow >= Time(EndHour, 0, 0),
  148.             With(
  149.                 { d1: DateAdd(today, 1, TimeUnit.Days) },
  150.                 If(
  151.                     Weekday(d1, StartOfWeek.Monday) >= 6,
  152.                     DateAdd(d1, 8 - Weekday(d1, StartOfWeek.Monday), TimeUnit.Days),
  153.                     d1
  154.                 ) + Time(StartHour, 0, 0)
  155.             ),
  156.  
  157.  
  158.         // Before hours -> today 08:00
  159.         timeNow < Time(StartHour, 0, 0),
  160.             today + Time(StartHour, 0, 0),
  161.  
  162.  
  163.         // Otherwise -> now
  164.         Reference
  165.     )
  166. );
  167.  
  168.  
  169. //Add business minutes starting from a given start datetime (Mon–Fri, StartHour–EndHour)
  170. AddBusinessMinutes(
  171.     StartDateTime: DateTime,
  172.     MinutesToAdd: Number,
  173.     StartHour: Number,
  174.     EndHour: Number
  175. ): DateTime =
  176. With(
  177.     {
  178.         DayMins: (EndHour - StartHour) * 60,
  179.         MinsLeftToday:
  180.             Max(
  181.                 0,
  182.                 DateDiff(
  183.                     StartDateTime,
  184.                     DateValue(StartDateTime) + Time(EndHour, 0, 0),
  185.                     TimeUnit.Minutes
  186.                 )
  187.             )
  188.     },
  189.     If(
  190.         MinutesToAdd <= MinsLeftToday,
  191.         DateAdd(StartDateTime, MinutesToAdd, TimeUnit.Minutes),
  192.         With(
  193.             {
  194.                 FullDays: RoundDown(MinutesToAdd - MinsLeftToday / DayMins, 0),
  195.                 Leftover: Mod(MinutesToAdd - MinsLeftToday, DayMins)
  196.             },
  197.  
  198.  
  199.             With(
  200.                 {
  201.                     FirstFull:
  202.                         With(
  203.                             { d0: DateAdd(DateValue(StartDateTime), 1, TimeUnit.Days) },
  204.                             If(
  205.                                 Weekday(d0, StartOfWeek.Monday) >= 6,
  206.                                 DateAdd(d0, 8 - Weekday(d0, StartOfWeek.Monday), TimeUnit.Days),
  207.                                 d0
  208.                             )
  209.                         )
  210.                 },
  211.                 With(
  212.                     {
  213.                         TargetDay:
  214.                             DateAdd(
  215.                                 FirstFull,
  216.                                 FullDays
  217.                                     + RoundDown(
  218.                                         (Weekday(FirstFull, StartOfWeek.Monday) - 1 + FullDays) / 5,
  219.                                         0
  220.                                     ) * 2,
  221.                                 TimeUnit.Days
  222.                             )
  223.                     },
  224.                     If(
  225.                         Leftover = 0,
  226.                         TargetDay + Time(EndHour, 0, 0),
  227.                         DateAdd(TargetDay + Time(StartHour, 0, 0), Leftover, TimeUnit.Minutes)
  228.                     )
  229.                 )
  230.             )
  231.         )
  232.     )
  233. );
  234.  
  235. // Function
  236. DueBusinessDate(
  237.     PlannedHours: Number,
  238.     StartHour: Number,
  239.     EndHour: Number,
  240.     Reference: DateTime
  241. ): DateTime =
  242. With(
  243.     {
  244.         StartTime: NextBusinessStart(Reference, StartHour, EndHour),
  245.         PlannedMins: Round(PlannedHours * 60, 0)
  246.     },
  247.     AddBusinessMinutes(StartTime, PlannedMins, StartHour, EndHour)
  248. );
  249.  
  250.  
Advertisement
Add Comment
Please, Sign In to add comment