SDES2GETHOLIDAYS ;ALB/BWF,JHC - SDES2 GET HOLIDAYS ;FEBRUARY 28, 2025
;;5.3;Scheduling;**853,909**;Aug 13, 1993;Build 12
;;Per VHA Directive 6402, this routine should not be modified
;
; Reference to DUZ^XUP is supported by IA #7487
Q
; SDCONTEXT("ACHERON AUDIT ID") = 36 Character unique ID number. Ex: 11d9dcc6-c6a2-4785-8031-8261576fca37
; SDCONTEXT("USER DUZ") = The DUZ of the user taking action on the calling application.
; SDCONTEXT("USER NAME") = The name of the user taking action on the calling application.
; SDCONTEXT("PATIENT DFN") = The name of the patient taking action on the calling application.
; SDCONTEXT("PATIENT ICN") = The ICN of the patient taking action on the calling application.
;
; PARAMS("START DATE") - START DATE IN ISO FORMAT (OPTIONAL - DEFAULTS TO TODAY)
; PARAMS("END DATE") - END DATE IN ISO FORMAT (OPTIONAL - DEFAULTS TO 9999999)
;
GETHOLIDAYS(RES,SDCONTEXT,PARAMS) ;
N IEN,RESULT,STRTDTISO,ENDDTISO,STRTDT,ENDDT,CNT,ENDDT,ERRORS,FMDATES
; validate context array, quit if errors
D VALCONTEXT^SDES2VALCONTEXT(.ERRORS,.SDCONTEXT)
I $D(ERRORS) S ERRORS("Holiday",1)="" D BUILDJSON^SDES2JSON(.RES,.ERRORS) Q
I $G(SDCONTEXT("USER DUZ"))'="" N DUZ D DUZ^XUP(SDCONTEXT("USER DUZ"))
; get the start and end date. Strip off time because we do not need it.
S STRTDTISO=$P($G(PARAMS("START DATE")),"T")
S ENDDTISO=$P($G(PARAMS("END DATE")),"T")
; start date passed, but no end date - validate start date alone
I STRTDTISO'="",(ENDDTISO="") S FMDATES=$$VALISODTTM^SDES2VALISODTTM(.ERRORS,STRTDTISO,,,498,499)
; start date is not passed, but end date is passed
I STRTDTISO="",(ENDDTISO'="") S $P(FMDATES,U,2)=$$VALISODTTM^SDES2VALISODTTM(.ERRORS,ENDDTISO,,,501,502)
; both dates are passed in, validate the range
I STRTDTISO'="",(ENDDTISO'="") S FMDATES=$$VALISODATERANGE^SDES2VALISODTTM(.ERRORS,STRTDTISO,ENDDTISO)
I $D(ERRORS) S ERRORS("Holiday",1)="" D BUILDJSON^SDES2JSON(.RES,.ERRORS) Q
I $G(FMDATES)'="" S STRTDT=$P($G(FMDATES),U),ENDDT=$P($G(FMDATES),U,2)
I '$G(STRTDT) S STRTDT=DT
I '$G(ENDDT) S ENDDT=9999999
I ENDDT<STRTDT D ERRLOG^SDES2JSON(.ERRORS,13)
I $D(ERRORS) S ERRORS("Holiday",1)="" D BUILDJSON^SDES2JSON(.RES,.ERRORS) Q
S CNT=0
S STRTDT=$$FMADD^XLFDT(STRTDT,-1)
F S STRTDT=$O(^HOLIDAY(STRTDT)) Q:'STRTDT!(STRTDT>ENDDT) D
.S CNT=CNT+1
.S RESULT("Holiday",CNT,"Date")=$$FMTISO^SDAMUTDT($$GET1^DIQ(40.5,STRTDT,.01,"I"))
.S RESULT("Holiday",CNT,"Name")=$$GET1^DIQ(40.5,STRTDT,2,"E")
I '$D(RESULT) S RESULT("Holiday",1)=""
D BUILDJSON^SDES2JSON(.RES,.RESULT)
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HSDES2GETHOLIDAYS 2599 printed May 25, 2026@12:58:36 Page 2
SDES2GETHOLIDAYS ;ALB/BWF,JHC - SDES2 GET HOLIDAYS ;FEBRUARY 28, 2025
+1 ;;5.3;Scheduling;**853,909**;Aug 13, 1993;Build 12
+2 ;;Per VHA Directive 6402, this routine should not be modified
+3 ;
+4 ; Reference to DUZ^XUP is supported by IA #7487
+5 QUIT
+6 ; SDCONTEXT("ACHERON AUDIT ID") = 36 Character unique ID number. Ex: 11d9dcc6-c6a2-4785-8031-8261576fca37
+7 ; SDCONTEXT("USER DUZ") = The DUZ of the user taking action on the calling application.
+8 ; SDCONTEXT("USER NAME") = The name of the user taking action on the calling application.
+9 ; SDCONTEXT("PATIENT DFN") = The name of the patient taking action on the calling application.
+10 ; SDCONTEXT("PATIENT ICN") = The ICN of the patient taking action on the calling application.
+11 ;
+12 ; PARAMS("START DATE") - START DATE IN ISO FORMAT (OPTIONAL - DEFAULTS TO TODAY)
+13 ; PARAMS("END DATE") - END DATE IN ISO FORMAT (OPTIONAL - DEFAULTS TO 9999999)
+14 ;
GETHOLIDAYS(RES,SDCONTEXT,PARAMS) ;
+1 NEW IEN,RESULT,STRTDTISO,ENDDTISO,STRTDT,ENDDT,CNT,ENDDT,ERRORS,FMDATES
+2 ; validate context array, quit if errors
+3 DO VALCONTEXT^SDES2VALCONTEXT(.ERRORS,.SDCONTEXT)
+4 IF $DATA(ERRORS)
SET ERRORS("Holiday",1)=""
DO BUILDJSON^SDES2JSON(.RES,.ERRORS)
QUIT
+5 IF $GET(SDCONTEXT("USER DUZ"))'=""
NEW DUZ
DO DUZ^XUP(SDCONTEXT("USER DUZ"))
+6 ; get the start and end date. Strip off time because we do not need it.
+7 SET STRTDTISO=$PIECE($GET(PARAMS("START DATE")),"T")
+8 SET ENDDTISO=$PIECE($GET(PARAMS("END DATE")),"T")
+9 ; start date passed, but no end date - validate start date alone
+10 IF STRTDTISO'=""
IF (ENDDTISO="")
SET FMDATES=$$VALISODTTM^SDES2VALISODTTM(.ERRORS,STRTDTISO,,,498,499)
+11 ; start date is not passed, but end date is passed
+12 IF STRTDTISO=""
IF (ENDDTISO'="")
SET $PIECE(FMDATES,U,2)=$$VALISODTTM^SDES2VALISODTTM(.ERRORS,ENDDTISO,,,501,502)
+13 ; both dates are passed in, validate the range
+14 IF STRTDTISO'=""
IF (ENDDTISO'="")
SET FMDATES=$$VALISODATERANGE^SDES2VALISODTTM(.ERRORS,STRTDTISO,ENDDTISO)
+15 IF $DATA(ERRORS)
SET ERRORS("Holiday",1)=""
DO BUILDJSON^SDES2JSON(.RES,.ERRORS)
QUIT
+16 IF $GET(FMDATES)'=""
SET STRTDT=$PIECE($GET(FMDATES),U)
SET ENDDT=$PIECE($GET(FMDATES),U,2)
+17 IF '$GET(STRTDT)
SET STRTDT=DT
+18 IF '$GET(ENDDT)
SET ENDDT=9999999
+19 IF ENDDT<STRTDT
DO ERRLOG^SDES2JSON(.ERRORS,13)
+20 IF $DATA(ERRORS)
SET ERRORS("Holiday",1)=""
DO BUILDJSON^SDES2JSON(.RES,.ERRORS)
QUIT
+21 SET CNT=0
+22 SET STRTDT=$$FMADD^XLFDT(STRTDT,-1)
+23 FOR
SET STRTDT=$ORDER(^HOLIDAY(STRTDT))
if 'STRTDT!(STRTDT>ENDDT)
QUIT
Begin DoDot:1
+24 SET CNT=CNT+1
+25 SET RESULT("Holiday",CNT,"Date")=$$FMTISO^SDAMUTDT($$GET1^DIQ(40.5,STRTDT,.01,"I"))
+26 SET RESULT("Holiday",CNT,"Name")=$$GET1^DIQ(40.5,STRTDT,2,"E")
End DoDot:1
+27 IF '$DATA(RESULT)
SET RESULT("Holiday",1)=""
+28 DO BUILDJSON^SDES2JSON(.RES,.RESULT)
+29 QUIT