SDES2GETHOLIDAYS ;ALB/BWF - SDES2 GET HOLIDAYS ;JULY 10, 2023
;;5.3;Scheduling;**853**;Aug 13, 1993;Build 9
;;Per VHA Directive 6402, this routine should not be modified
;
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
; 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 2463 printed Aug 26, 2025@23:10:20 Page 2
SDES2GETHOLIDAYS ;ALB/BWF - SDES2 GET HOLIDAYS ;JULY 10, 2023
+1 ;;5.3;Scheduling;**853**;Aug 13, 1993;Build 9
+2 ;;Per VHA Directive 6402, this routine should not be modified
+3 ;
+4 QUIT
+5 ; SDCONTEXT("ACHERON AUDIT ID") = 36 Character unique ID number. Ex: 11d9dcc6-c6a2-4785-8031-8261576fca37
+6 ; SDCONTEXT("USER DUZ") = The DUZ of the user taking action on the calling application.
+7 ; SDCONTEXT("USER NAME") = The name of the user taking action on the calling application.
+8 ; SDCONTEXT("PATIENT DFN") = The name of the patient taking action on the calling application.
+9 ; SDCONTEXT("PATIENT ICN") = The ICN of the patient taking action on the calling application.
+10 ;
+11 ; PARAMS("START DATE") - START DATE IN ISO FORMAT (OPTIONAL - DEFAULTS TO TODAY)
+12 ; PARAMS("END DATE") - END DATE IN ISO FORMAT (OPTIONAL - DEFAULTS TO 9999999)
+13 ;
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 ; get the start and end date. Strip off time because we do not need it.
+6 SET STRTDTISO=$PIECE($GET(PARAMS("START DATE")),"T")
+7 SET ENDDTISO=$PIECE($GET(PARAMS("END DATE")),"T")
+8 ; start date passed, but no end date - validate start date alone
+9 IF STRTDTISO'=""
IF (ENDDTISO="")
SET FMDATES=$$VALISODTTM^SDES2VALISODTTM(.ERRORS,STRTDTISO,,,498,499)
+10 ; start date is not passed, but end date is passed
+11 IF STRTDTISO=""
IF (ENDDTISO'="")
SET $PIECE(FMDATES,U,2)=$$VALISODTTM^SDES2VALISODTTM(.ERRORS,ENDDTISO,,,501,502)
+12 ; both dates are passed in, validate the range
+13 IF STRTDTISO'=""
IF (ENDDTISO'="")
SET FMDATES=$$VALISODATERANGE^SDES2VALISODTTM(.ERRORS,STRTDTISO,ENDDTISO)
+14 IF $DATA(ERRORS)
SET ERRORS("Holiday",1)=""
DO BUILDJSON^SDES2JSON(.RES,.ERRORS)
QUIT
+15 IF $GET(FMDATES)'=""
SET STRTDT=$PIECE($GET(FMDATES),U)
SET ENDDT=$PIECE($GET(FMDATES),U,2)
+16 IF '$GET(STRTDT)
SET STRTDT=DT
+17 IF '$GET(ENDDT)
SET ENDDT=9999999
+18 IF ENDDT<STRTDT
DO ERRLOG^SDES2JSON(.ERRORS,13)
+19 IF $DATA(ERRORS)
SET ERRORS("Holiday",1)=""
DO BUILDJSON^SDES2JSON(.RES,.ERRORS)
QUIT
+20 SET CNT=0
+21 SET STRTDT=$$FMADD^XLFDT(STRTDT,-1)
+22 FOR
SET STRTDT=$ORDER(^HOLIDAY(STRTDT))
if 'STRTDT!(STRTDT>ENDDT)
QUIT
Begin DoDot:1
+23 SET CNT=CNT+1
+24 SET RESULT("Holiday",CNT,"Date")=$$FMTISO^SDAMUTDT($$GET1^DIQ(40.5,STRTDT,.01,"I"))
+25 SET RESULT("Holiday",CNT,"Name")=$$GET1^DIQ(40.5,STRTDT,2,"E")
End DoDot:1
+26 IF '$DATA(RESULT)
SET RESULT("Holiday",1)=""
+27 DO BUILDJSON^SDES2JSON(.RES,.RESULT)
+28 QUIT