XUXTADSSEF ;SLC/JLA - Service/Section Edit Form callback API's ; OCT 30, 2024@12:30
 ;;8.0;KERNEL;**807**;Oct 30, 2024;Build 56;
 ;
 ;
 ; External API'S
 ;
 ; FileMan/ScreenMan API's
FMDIC D ^DIC Q 
FMDIE D ^DIE Q
FMDIK D ^DIK Q
CNVDT D ^%DT Q
FMTE(AY) Q $$FMTE^XLFDT($G(AY),)
 ;
 ; XUXTAD API's
 ; COMMENTING OUT THE NON FILEMAN VERSIONS OF THE CODE
 ;GASSI(AXUXTADSSIA) Q $$GASSI^XUXTADAPI($G(AXUXTADSSIA))
 ;GASSIN(AXUXTADSSIA) Q $$GASSIN^XUXTADAPI($G(AXUXTADSSIA))
 ;GSSCDCR(AXUXTADSSIEN) Q $$GSSCDCR^XUXTADAPI($G(AXUXTADSSIEN))
 ;GSSOCS(AXUXTADSSIEN) Q $$GSSOCS^XUXTADAPI($G(AXUXTADSSIEN))
 ;ISSA(AXUXTADSSIEN) Q $$ISSA^XUXTADAPI($G(AXUXTADSSIEN))
GASSI(AXUXTADSSIA) Q $$GASSIFM^XUXTADAPI($G(AXUXTADSSIA))
GASSIN(AXUXTADSSIA) Q $$GASSINFM^XUXTADAPI($G(AXUXTADSSIA))
GSSCDCR(AXUXTADSSIEN) Q $$GSSCDCRFM^XUXTADAPI($G(AXUXTADSSIEN))
GSSOCS(AXUXTADSSIEN) Q $$GSSOCSFM^XUXTADAPI($G(AXUXTADSSIEN))
ISSA(AXUXTADSSIEN) Q $$ISSAFM^XUXTADAPI($G(AXUXTADSSIEN))
 ;
 ;
 ; If AXUXTADYN is true then Save today's date in the Date Closed global
 ; else clear the Date Closed global
 ;
 ; Returns
 ;   0^Error message when an error occurs
 ;   1^Success message
 ;
 ; W $$CLOSESS^XUXTADSSEF(1049,1)
CLOSESS(AXUXTADSSIEN,AXUXTADYN) ;
 NEW XUXTADSSIEN,XUXTADYN,XUXTADRTNVAL,XUXTADSSIA ;,XUXTADSSFILE
 S XUXTADRTNVAL=0,XUXTADSSIA="CLOSESSSSI"
 S XUXTADSSIEN=+$G(AXUXTADSSIEN)
 ; Get All Service/Section IEN's
 D GASSI(XUXTADSSIA)
 ;S XUXTADSSFILE=49 ; File number of SERVICE/SECTION file
 ;I (XUXTADSSIEN'>0)!'$D(^DIC(XUXTADSSFILE,XUXTADSSIEN,0)) D  G CLOSESSDN
 I (XUXTADSSIEN'>0)!('$D(@XUXTADSSIA@(XUXTADSSIEN))) D  G CLOSESSDN
 . S XUXTADRTNVAL="0^Invalid Service/Section IEN: "_XUXTADSSIEN
 S XUXTADYN=$G(AXUXTADYN)
 I $L(XUXTADYN)=0 D  G CLOSESSDN
 . S XUXTADRTNVAL="0^Undefined Yes/No parameter"
 S XUXTADYN=(XUXTADYN?1(1"Y",1"y"))
 I XUXTADYN D  G CLOSESSDN
 . S XUXTADRTNVAL=$$SDCRDTG(XUXTADSSIEN,"T","DC")
 I 'XUXTADYN D  G CLOSESSDN
 . S XUXTADRTNVAL="1^Cancelling Close Service Section"
 . KILL ^TMP("SS",$J)
CLOSESSDN ;
 K @XUXTADSSIA
 Q XUXTADRTNVAL
 ;
 ;
 ; If AXUXTADYN is true then Save today's date in the Date Re-opened global
 ; else clear the Date Re-opened global
 ;
 ; Returns
 ;   0^Error message when an error occurs
 ;   1^Success message
 ;
 ; W $$REOPENSS^XUXTADSSEF(1049,1)
REOPENSS(AXUXTADSSIEN,AXUXTADYN) ;
 NEW XUXTADSSIEN,XUXTADYN,XUXTADRTNVAL,XUXTADSSIA ;,XUXTADSSFILE
 S XUXTADRTNVAL=0,XUXTADSSIA="REOPENSSSSI"
 S XUXTADSSIEN=+$G(AXUXTADSSIEN)
 ; Get All Service/Section IEN's
 D GASSI(XUXTADSSIA)
 ;S XUXTADSSFILE=49 ; File number of SERVICE/SECTION file
 ;I (XUXTADSSIEN'>0)!'$D(^DIC(XUXTADSSFILE,XUXTADSSIEN,0)) D  G REOPENDN
 I (XUXTADSSIEN'>0)!('$D(@XUXTADSSIA@(XUXTADSSIEN))) D  G REOPENDN
 . S XUXTADRTNVAL="0^Invalid Service/Section IEN: "_XUXTADSSIEN
 S XUXTADYN=$G(AXUXTADYN)
 I $L(XUXTADYN)=0 D  G REOPENDN
 . S XUXTADRTNVAL="0^Undefined Yes/No parameter"
 S XUXTADYN=(XUXTADYN?1(1"Y",1"y"))
 I XUXTADYN D  G REOPENDN
 . S XUXTADRTNVAL=$$SDCRDTG(XUXTADSSIEN,"T","DR")
 I 'XUXTADYN D  G REOPENDN
 . S XUXTADRTNVAL="1^Cancelling Re-open Service Section"
 . KILL ^TMP("SS",$J)
REOPENDN ;
 K @XUXTADSSIA
 Q XUXTADRTNVAL
 ;
 ;
 ; Save Service/Section IEN and a Date Closed Record Date (Date Closed or Date Re-opened) to global ^TMP("SS",$J)
 ;
 ;   AXUXTADSSIEN   - A Service/Section IEN
 ;   AXUXTADDCRDATE - A Date Closed record date in external form 
 ;   AXUXTADNODE    - A "DC" or "DR" XUXTADNODE
 ;
 ; Returns
 ;   0^Error message when an error occurs
 ;   1^Success message
 ;
 ; W $$SDCRDTG^XUXTADSSEF(AXUXTADSSIEN,AXUXTADDCRDATE,AXUXTADNODE)
SDCRDTG(AXUXTADSSIEN,AXUXTADDCRDATE,AXUXTADNODE) ;
 NEW XUXTADSSIEN,XUXTADDCRDATE,XUXTADNODE,XUXTADRTNVAL,XUXTADDCDRT,XUXTADSSIA ;,XUXTADSSFILE
 NEW X,Y
 I '$D(VERBOSE) NEW VERBOSE S VERBOSE=0
 I VERBOSE W !,"SDCRDTG^XUXTADSSEF(",$G(AXUXTADSSIEN),",",$G(AXUXTADDCRDATE),",",$G(AXUXTADNODE),") Called"
 S XUXTADRTNVAL=0,XUXTADSSIA="SDCRDTGSSI"
 S XUXTADSSIEN=+$G(AXUXTADSSIEN)
 ; Get All Service/Section IEN's
 D GASSI(XUXTADSSIA)
 ;S XUXTADSSFILE=49 ; File number of SERVICE/SECTION file
 ;I (XUXTADSSIEN'>0)!'$D(^DIC(XUXTADSSFILE,XUXTADSSIEN,0)) D  G SDCRDTGDN
 I (XUXTADSSIEN'>0)!('$D(@XUXTADSSIA@(XUXTADSSIEN))) D  G SDCRDTGDN
 . S XUXTADRTNVAL="0^Invalid Service/Section IEN: "_XUXTADSSIEN
 S X=$G(AXUXTADDCRDATE)
 D CNVDT
 I Y<1 D  G SDCRDTGDN
 . S XUXTADRTNVAL="0^Invalid Date Closed Record date"
 S XUXTADDCRDATE=Y
 S XUXTADNODE=$G(AXUXTADNODE)
 I ($L(XUXTADNODE)=0)!(XUXTADNODE'?1(1"DC",1"DR")) D  G SDCRDTGDN
 . S XUXTADRTNVAL="0^Invalid Date Node: "_XUXTADNODE_", DC or DR only"
 KILL ^TMP("SS",$J)
 S ^TMP("SS",$J,"SSIEN")=XUXTADSSIEN
 S ^TMP("SS",$J,XUXTADNODE)=XUXTADDCRDATE
 I XUXTADNODE="DC" S XUXTADDCDRT="Closed"
 E  S XUXTADDCDRT="Re-opened"
 I $L(XUXTADDCRDATE)'>0 D  G SDCRDTGDN
 . S XUXTADRTNVAL="0^Date "_XUXTADDCDRT_" Reset"
 S XUXTADRTNVAL="1^Service/Section will be "_XUXTADDCDRT_" on Save or Exit"
SDCRDTGDN ;
 I VERBOSE W !,"SDCRDTG^XUXTADSSEF Exiting  Response: ",XUXTADRTNVAL,!!
 K @XUXTADSSIA
 Q XUXTADRTNVAL
 ;
 ;
 ; Save a Date Closed or Date Re-opened that has been put in the global 
 ; ^TMP("SS",$J,"DC") or ^TMP("SS",$J,"DR") respectively to the Service/Section file (^DIC(49)). 
 ; Called when the User Exits or Saves the Form
 ;
 ; Returns
 ;   0^Error message when an error occurs
 ;   1^Success message
 ;
 ; W $$SVDCDR^XUXTADSSEF
SVDCDR() ;
 NEW XUXTADSSIEN,XUXTADDCDT,XUXTADRTNVAL
 S XUXTADRTNVAL=0
 ; Save Date Closed or Date Re-opened based on globals setup in the call to SDCRDTG(AXUXTADSSIEN,AXUXTADDCRDATE,AXUXTADNODE)
 S XUXTADSSIEN=$G(^TMP("SS",$J,"SSIEN"))
 I $L(XUXTADSSIEN)'>0 D  G SVDCDRDN
 . S XUXTADRTNVAL="1^Service/Section edits saved"
 S XUXTADDCDT=$G(^TMP("SS",$J,"DC"))
 I $L(XUXTADDCDT)>0 D  G SVDCDRDN
 . S XUXTADRTNVAL=$$DCRSAVE(XUXTADSSIEN,XUXTADDCDT)
 S XUXTADDCDT=$G(^TMP("SS",$J,"DR"))
 I $L(XUXTADDCDT)>0 D  G SVDCDRDN
 .  S XUXTADRTNVAL=$$DRSAVE(XUXTADSSIEN,XUXTADDCDT)
 S XUXTADRTNVAL="0^Service/Section Date global not set"
SVDCDRDN ;
 I +XUXTADRTNVAL S ^TMP("SS",$J,"SSSAVED")=$P(XUXTADRTNVAL,"^",2)
 Q XUXTADRTNVAL
 ;
 ;
 ; Form Post Save is called when the user Saves or Exits
 ;   Saves the Date Closed Record Date if one exists in ^TMP("SS",$J,)
 ;   Get the Close Service/Section and Re-open Service/Section form only fields enable/disabled status
 ;   Get the current Service/Section Open/Closed status 
 ;
 ; Returns
 ;   SDCU^SDRU^HMSG^SSOCS
 ;   SDCU  - Set Date Closed Uneditable
 ;   SDRU  - Set Date Re-opened Uneditable
 ;   HMSG  - Service/Section Date Closed/Date Reopened Help message
 ;   SSOCS - Service/Section Open Close Status: Closed or Open
 ;
 ; W $$FMPS^XUXTADSSEF(XUXTADSSIEN)
FMPS(AXUXTADSSIEN) ;
 NEW XUXTADRTNVAL,XUXTADSSOCS,XUXTADBPVAL
 I '$D(VERBOSE) NEW VERBOSE S VERBOSE=0
 ; Save the Date Closed/Date Re-opened
 S XUXTADRTNVAL=$$SVDCDR
 I VERBOSE W !,"$$SVDCDR returned XUXTADRTNVAL: ",XUXTADRTNVAL,!
 S XUXTADBPVAL=$$BLKPRE(AXUXTADSSIEN)
 I VERBOSE W !,"$$BLKPRE(",AXUXTADSSIEN,") returned XUXTADBPVAL: ",XUXTADBPVAL,!
 S XUXTADSSOCS=$$GSSOCS(AXUXTADSSIEN)
 I VERBOSE W !,"$$GSSOCS(",AXUXTADSSIEN,") returned XUXTADSSOCS: ",XUXTADSSOCS,!
 I (+XUXTADSSOCS) S $P(XUXTADBPVAL,"^",4)=$P(XUXTADSSOCS,"^",2)
 S $P(XUXTADBPVAL,"^",3)=$P(XUXTADRTNVAL,"^",2)
 I VERBOSE W !,"$$FMPS(",AXUXTADSSIEN,") returned: ",XUXTADBPVAL,!
 Q XUXTADBPVAL
 ;
 ;
 ; Set the Form Only fields CLOSE SERVICE/SECTION and RE-OPEN SERVICE/SECTION uneditable property
 ; based on if Users are assigned to the service/section with IEN=AXUXTADSSIEN and the current 
 ; Date Closed field and Date Re-opened field.
 ; This is called in the PRE ACTION of the Block SERVICE/SECTION EDIT PG
 ; 
 ;   AXUXTADSSIEN  - A Service/Section IEN
 ;
 ; Returns
 ;   SDCU^SDRU^HMSG^DC
 ;   SDCU - Set Date Closed Uneditable
 ;   SDRU - Set Date Re-opened Uneditable
 ;   HMSG - Service/Section Date Closed/Date Reopened Help message
 ;   DC   - Date Closed 
 ;
 ; W $$BLKPRE^XUXTADSSEF(AXUXTADSSIEN)
BLKPRE(AXUXTADSSIEN) ;
 NEW XUXTADSSIEN,XUXTADUSRLNKS,XUXTADSSN,XUXTADCDCR,XUXTADCDC
 NEW XUXTADCDR,XUXTADRTNVAL,XUXTADSSIA ;,XUXTADSSFILE
 S XUXTADRTNVAL="1^1^^^",XUXTADSSIA="BLKPRESSI"
 S XUXTADSSIEN=+$G(AXUXTADSSIEN)
 ; Get All Service/Section IEN's
 D GASSIN(XUXTADSSIA)
 ;S XUXTADSSFILE=49 ; File number of SERVICE/SECTION file
 ;I (XUXTADSSIEN'>0)!('$D(^DIC(XUXTADSSFILE,XUXTADSSIEN))) D  G BLKPREDN
 I (XUXTADSSIEN'>0)!('$D(@XUXTADSSIA@(XUXTADSSIEN))) D  G BLKPREDN
 . S $P(XUXTADRTNVAL,"^",3)="Invalid Service/Section IEN: "_XUXTADSSIEN
 S XUXTADUSRLNKS=$$ISSA(XUXTADSSIEN)
 ;S XUXTADSSN=$P(^DIC(XUXTADSSFILE,XUXTADSSIEN,0),"^")
 S XUXTADSSN=@XUXTADSSIA@(XUXTADSSIEN)
 I XUXTADUSRLNKS>0 D
 . S $P(XUXTADRTNVAL,"^",3)="Service/Section "_XUXTADSSN_" has users assigned and cannot be Closed/Re-opened!"
 I XUXTADUSRLNKS=0 D
 . ; Get the current Date Closed Record
 . S XUXTADCDCR=$$GSSCDCR(XUXTADSSIEN),XUXTADCDC=$P(XUXTADCDCR,"^",1),XUXTADCDR=$P(XUXTADCDCR,"^",2)
 . I ($L(XUXTADCDC)>0) D
 .. I ($L(XUXTADCDR)>0) D
 ... S $P(XUXTADRTNVAL,"^",1)=0,$P(XUXTADRTNVAL,"^",2)=1
 ... S $P(XUXTADRTNVAL,"^",3)="Service/Section "_XUXTADSSN_" has no users assigned and can be Closed"
 .. I ($L(XUXTADCDR)=0) D
 ... S $P(XUXTADRTNVAL,"^",1)=1,$P(XUXTADRTNVAL,"^",2)=0
 ... S $P(XUXTADRTNVAL,"^",3)="Service/Section "_XUXTADSSN_" has no users assigned and can be Re-opened"
 ... S X=XUXTADCDC D CNVDT
 ... I Y>0 S $P(XUXTADRTNVAL,"^",4)=$$FMTE(Y)
 . I ($L(XUXTADCDC)=0) D 
 .. S $P(XUXTADRTNVAL,"^",1)=0,$P(XUXTADRTNVAL,"^",2)=1
 .. S $P(XUXTADRTNVAL,"^",3)="Service/Section "_XUXTADSSN_" has no users assigned and can be Closed"
BLKPREDN ; 
 K @XUXTADSSIA
 Q XUXTADRTNVAL
 ;
 ;
 ; Save the new Date Closed record with IEN: AXUXTADDCIEN for the Service/Section with IEN: AXUXTADSSIEN 
 ; in the Service/Section file (49)
 ; 
 ;   AXUXTADSSIEN  - A Service/Section IEN
 ;   AXUXTADDCIEN  - A Date Closed record date (IEN)
 ;
 ; Returns
 ;   0^Error message when an error occurs
 ;   1^Success message
 ;
 ; W $$DCRSAVE^XUXTADSSEF(1049,3241008)
 ;
DCRSAVE(AXUXTADSSIEN,AXUXTADDCIEN) ;
 NEW XUXTADSSIEN,XUXTADDCIEN,XUXTADCDCR,XUXTADCDC,XUXTADCDR,XUXTADADDED
 NEW XUXTADGRDC,XUXTADSSIA,XUXTADSSFILE,XUXTADDCNODE
 NEW DIC,X,Y
 I '$D(VERBOSE) NEW VERBOSE S VERBOSE=0
 I VERBOSE W !,"DCRSAVE^XUXTADSSEF(",$G(AXUXTADSSIEN),",",$G(AXUXTADDCIEN),") Called"
 S XUXTADADDED=0,XUXTADSSIA="DCRSAVESSI"
 S XUXTADSSIEN=+$G(AXUXTADSSIEN)
 ; Get All Service/Section IEN's
 D GASSI(XUXTADSSIA)
 S XUXTADSSFILE=49 ; File number of SERVICE/SECTION file
 S XUXTADDCNODE=3  ; Date Closed node
 ;I (XUXTADSSIEN'>0)!('$D(^DIC(XUXTADSSFILE,XUXTADSSIEN))) D  G DCRSAVEDN
 I (XUXTADSSIEN'>0)!('$D(@XUXTADSSIA@(XUXTADSSIEN))) D  G DCRSAVEDN
 . S XUXTADADDED="0^Invalid Service/Section IEN: "_XUXTADSSIEN
 S XUXTADDCIEN=+$G(AXUXTADDCIEN)
 I XUXTADDCIEN'>0 D  G DCRSAVEDN
 . S XUXTADADDED="0^Invalid Date Closed IEN: "_XUXTADDCIEN
 S:'$D(U) U="^"
 ; Set the Global root of subfile Date Closed
 S XUXTADGRDC="^DIC("_XUXTADSSFILE_","_XUXTADSSIEN_","_XUXTADDCNODE_","
 ; Get the current Date Closed Record
 S XUXTADCDCR=$$GSSCDCR(XUXTADSSIEN)
 I $L(XUXTADCDCR)=0 G NEWDCR
 ; Check here to see if XUXTADDCIEN is equal to the last Re-opened Date.
 ; If it is then delete the last Re-opened date field
 S XUXTADCDC=$P(XUXTADCDCR,U,1)
 S XUXTADCDR=$P(XUXTADCDCR,U,2)
 I $L(XUXTADCDR)=0 D  G DCRSAVEDN
 . S XUXTADADDED="0^Service/Section is already closed"
 I XUXTADCDR=XUXTADDCIEN D  G DCRSAVEDN
 . S XUXTADADDED=$$ESSDRF(XUXTADSSIEN,XUXTADCDC,"@")    ; Delete the Service/Section Date Re-opened field
 . I $P(XUXTADADDED,U) S XUXTADADDED="1^Re-open Service/Section is cancelled, Service/Section is closed"
 ; Make sure XUXTADDCIEN is after the last Re-opened Date.
 I XUXTADCDR>XUXTADDCIEN D  G DCRSAVEDN
 . S XUXTADADDED="0^Service/Section closed date must be after the last date re-opened"
NEWDCR ;
 S DIC=XUXTADGRDC,DIC(0)="ML"
 S X=XUXTADDCIEN
 D FMDIC
 I Y=-1 D  G DCRSAVEDN
 . S XUXTADADDED="0^WRITE USING DIC: "_DIC_", X: "_X_" FAILED" G DCRSAVEDN
 I $P(Y,U,3)=1 S XUXTADADDED="1^Service/Section Closed"
DCRSAVEDN ;
 I VERBOSE W !,"DCRSAVE^XUXTADSSEF Exiting  Response: ",XUXTADADDED,!!
 K @XUXTADSSIA
 Q XUXTADADDED
 ;
 ;
 ; Save the new Date Re-opened field : AXUXTADDTRE to the most recent Date Closed record 
 ; for the Service/Section with IEN: AXUXTADSSIEN in the Service/Section file (49)
 ; 
 ;   AXUXTADSSIEN  - A Service/Section IEN
 ;   AXUXTADDTRE   - A Date Re-opened date
 ;
 ; Returns
 ;   0^Error message when an error occurs
 ;   1^Success message
 ;
 ; W $$DRSAVE^XUXTADSSEF(1049,3241103)
 ;
DRSAVE(AXUXTADSSIEN,AXUXTADDTRE) ;
 NEW XUXTADSSIEN,XUXTADDTRE,XUXTADCDCR,XUXTADCDC,XUXTADCDR,XUXTADADDED
 NEW XUXTADGRDC,XUXTADSSIA,XUXTADSSFILE,XUXTADDCNODE
 NEW DIE,DA,DR,DIK
 I '$D(VERBOSE) NEW VERBOSE S VERBOSE=0
 I VERBOSE W !,"DRSAVE^XUXTADSSEF(",$G(AXUXTADSSIEN),",",$G(AXUXTADDTRE),") Called"
 S XUXTADADDED=0,XUXTADSSIA="DRSAVESSI"
 S XUXTADSSIEN=+$G(AXUXTADSSIEN)
 ; Get All Service/Section IEN's
 D GASSI(XUXTADSSIA)
 S XUXTADSSFILE=49 ; File number of SERVICE/SECTION file
 S XUXTADDCNODE=3  ; Date Closed node
 ;I (XUXTADSSIEN'>0)!('$D(^DIC(XUXTADSSFILE,XUXTADSSIEN))) D  G DRSAVEDN
 I (XUXTADSSIEN'>0)!('$D(@XUXTADSSIA@(XUXTADSSIEN))) D  G DRSAVEDN
 . S XUXTADADDED="0^Invalid Service/Section IEN: "_XUXTADSSIEN
 S XUXTADDTRE=+$G(AXUXTADDTRE)
 I XUXTADDTRE'>0 D  G DRSAVEDN
 . S XUXTADADDED="0^Invalid Date Re-opened: "_XUXTADDTRE
 S:'$D(U) U="^"
 ; Set the Global root of subfile Date Closed
 S XUXTADGRDC="^DIC("_XUXTADSSFILE_","_XUXTADSSIEN_","_XUXTADDCNODE_","
 ; Get the current Date Closed Record
 S XUXTADCDCR=$$GSSCDCR(XUXTADSSIEN)
 ; If we don't have a Date closed record, then the Service/Section is already open
 I $L(XUXTADCDCR)=0 D  G DRSAVEDN
 . S XUXTADADDED="0^Service/Section is already open"
 ; Check here to see if XUXTADDTRE is equal to the current Date Closed.
 ; If it is then delete the current Date Closed record
 S XUXTADCDC=$P(XUXTADCDCR,U,1)
 S XUXTADCDR=$P(XUXTADCDCR,U,2)
 I $L(XUXTADCDR)>0 D  G DRSAVEDN
 . S XUXTADADDED="0^Service/Section is already open"
 S DA=XUXTADCDC,DA(1)=XUXTADSSIEN
 I XUXTADCDC=XUXTADDTRE D  G DRSAVEDN
 . S XUXTADADDED=$$DSSDCR(XUXTADSSIEN,XUXTADCDC)    ; Delete the Service/Section Date Closed Record
 . I $P(XUXTADADDED,U) S XUXTADADDED="1^Close Service/Section cancelled, Service/Section is Re-opened"
 ; Make sure XUXTADDTRE is after the current Date Closed Date.
 I XUXTADCDC>XUXTADDTRE D  G DRSAVEDN
 . S XUXTADADDED="0^Service/Section re-opened date must be after the current date closed"
 ; Setup the DIE call
 S DIE=XUXTADGRDC    ; Global root of subfile
 S DR="1////"_XUXTADDTRE
 D FMDIE
 S XUXTADADDED="1^Service/Section Re-opened"
DRSAVEDN ;
 I VERBOSE W !,"DRSAVE^XUXTADSSEF Exiting  Response: ",XUXTADADDED,!!
 K @XUXTADSSIA
 Q XUXTADADDED
 ;
 ;
 ; Delete the Service/Section Date Closed Record with IEN: AXUXTADDCRIEN,
 ; and Service/Section with IEN: AXUXTADSSIEN in the Service/Section file (49)
 ; 
 ;   AXUXTADSSIEN  - A Service/Section IEN
 ;   AXUXTADDCRIEN - A Date Closed IEN (Internal form)
 ;
 ; Returns
 ;   0^Error message when an error occurs
 ;   1^Success message
 ; 
 ; W $$DSSDCR^XUXTADSSEF(1049,3241103)
DSSDCR(AXUXTADSSIEN,AXUXTADDCRIEN) ;
 NEW XUXTADSSIEN,XUXTADDCRIEN,XUXTADDELETED,XUXTADSSIA,XUXTADSSFILE,XUXTADDCNODE
 NEW DIK,DA
 I '$D(VERBOSE) NEW VERBOSE S VERBOSE=0
 I VERBOSE W !,"DSSDCR^XUXTADSSEF(",$G(AXUXTADSSIEN),",",$G(AXUXTADDCRIEN),") Called"
 S XUXTADDELETED=0,XUXTADSSIA="DSSDCRSSI"
 S XUXTADSSIEN=+$G(AXUXTADSSIEN)
 ; Get All Service/Section IEN's
 D GASSI(XUXTADSSIA)
 S XUXTADSSFILE=49 ; File number of SERVICE/SECTION file
 S XUXTADDCNODE=3  ; Date Closed node
 ;I (XUXTADSSIEN'>0)!('$D(^DIC(XUXTADSSFILE,XUXTADSSIEN))) D  G DSSDCRDN
 I (XUXTADSSIEN'>0)!('$D(@XUXTADSSIA@(XUXTADSSIEN))) D  G DSSDCRDN
 . S XUXTADDELETED="0^Invalid Service/Section IEN: "_XUXTADSSIEN
 S XUXTADDCRIEN=+$G(AXUXTADDCRIEN)
 I (XUXTADDCRIEN'>0) D  G DSSDCRDN
 . S XUXTADDELETED="0^Invalid Date Closed IEN: "_XUXTADDCRIEN
 S DA=XUXTADDCRIEN,DA(1)=XUXTADSSIEN
 S DIK="^DIC("_XUXTADSSFILE_","_XUXTADSSIEN_","_XUXTADDCNODE_","    ; Global root of subfile
 I VERBOSE W !,"DIK: ",DIK,! ZW DA
 D FMDIK
 S XUXTADDELETED="1^Service/Section Date Closed record deleted. IEN: "_XUXTADDCRIEN
DSSDCRDN ;
 I VERBOSE W !,"DSSDCR^XUXTADSSEF Exiting  Response: ",XUXTADDELETED,!!
 K @XUXTADSSIA
 Q XUXTADDELETED
 ;
 ;
 ; Edit the Service/Section Date Re-opened field in the Date Closed Record with IEN: AXUXTADDCRIEN
 ; and Service/Section with IEN: AXUXTADSSIEN in the Service/Section file (49)
 ; 
 ;   AXUXTADSSIEN  - A Service/Section IEN
 ;   AXUXTADDCRIEN - A Date Closed IEN (Internal form)
 ;   AXUXTADDRV    - A Date Re-opened value (Internal form,"@" for deletion)
 ;
 ; Returns
 ;   0^Error message when an error occurs
 ;   1^Success message
 ; 
 ; W $$ESSDRF^XUXTADSSEF(1049,3241103,3241104)
 ; W $$ESSDRF^XUXTADSSEF(1049,3240910,"@")
ESSDRF(AXUXTADSSIEN,AXUXTADDCRIEN,AXUXTADDRV) ;
 NEW XUXTADSSIEN,XUXTADDCRIEN,XUXTADDRV,XUXTADEDITED,XUXTADSSIA
 NEW XUXTADSSFILE,XUXTADDCNODE
 NEW DIE,DA,DR
 I '$D(VERBOSE) NEW VERBOSE S VERBOSE=0
 I VERBOSE W !,"ESSDRF^XUXTADSSEF(",$G(AXUXTADSSIEN),",",$G(AXUXTADDCRIEN),",",$G(AXUXTADDRV),") Called"
 S XUXTADEDITED=0,XUXTADSSIA="ESSDRFSSI"
 S XUXTADSSIEN=+$G(AXUXTADSSIEN)
 ; Get All Service/Section IEN's
 D GASSI(XUXTADSSIA)
 S XUXTADSSFILE=49 ; File number of SERVICE/SECTION file
 S XUXTADDCNODE=3  ; Date Closed node
 ;I (XUXTADSSIEN'>0)!('$D(^DIC(XUXTADSSFILE,XUXTADSSIEN))) D  G ESSDRFDN
 I (XUXTADSSIEN'>0)!('$D(@XUXTADSSIA@(XUXTADSSIEN))) D  G ESSDRFDN
 . S XUXTADEDITED="0^Invalid Service/Section IEN: "_XUXTADSSIEN
 S XUXTADDCRIEN=+$G(AXUXTADDCRIEN)
 I (XUXTADDCRIEN'>0) D  G ESSDRFDN
 . S XUXTADEDITED="0^Invalid Date Closed IEN: "_XUXTADDCRIEN
 S XUXTADDRV=$G(AXUXTADDRV)
 I $L(XUXTADDRV)'>0 D  G ESSDRFDN
 . S XUXTADEDITED="0^Invalid Date Re-opened value: "_XUXTADDRV
 S DA=XUXTADDCRIEN,DA(1)=XUXTADSSIEN
 S DIE="^DIC("_XUXTADSSFILE_","_XUXTADSSIEN_","_XUXTADDCNODE_","    ; Global root of subfile
 I VERBOSE W !,"DIE: ",DIE,", XUXTADDRV: ",XUXTADDRV,! ZW DA
 S DR="1////"_XUXTADDRV
 D FMDIE
 S XUXTADEDITED="1^Service/Section Date Closed record edited."
ESSDRFDN ;
 I VERBOSE W !,"ESSDRF^XUXTADSSEF Exiting  Response: ",XUXTADEDITED,!!
 K @XUXTADSSIA
 Q XUXTADEDITED
 ;
 ;
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HXUXTADSSEF   18688     printed  Sep 23, 2025@19:50:39                                                                                                                                                                                                 Page 2
XUXTADSSEF ;SLC/JLA - Service/Section Edit Form callback API's ; OCT 30, 2024@12:30
 +1       ;;8.0;KERNEL;**807**;Oct 30, 2024;Build 56;
 +2       ;
 +3       ;
 +4       ; External API'S
 +5       ;
 +6       ; FileMan/ScreenMan API's
FMDIC      DO ^DIC
           QUIT 
FMDIE      DO ^DIE
           QUIT 
FMDIK      DO ^DIK
           QUIT 
CNVDT      DO ^%DT
           QUIT 
FMTE(AY)   QUIT $$FMTE^XLFDT($GET(AY),)
 +1       ;
 +2       ; XUXTAD API's
 +3       ; COMMENTING OUT THE NON FILEMAN VERSIONS OF THE CODE
 +4       ;GASSI(AXUXTADSSIA) Q $$GASSI^XUXTADAPI($G(AXUXTADSSIA))
 +5       ;GASSIN(AXUXTADSSIA) Q $$GASSIN^XUXTADAPI($G(AXUXTADSSIA))
 +6       ;GSSCDCR(AXUXTADSSIEN) Q $$GSSCDCR^XUXTADAPI($G(AXUXTADSSIEN))
 +7       ;GSSOCS(AXUXTADSSIEN) Q $$GSSOCS^XUXTADAPI($G(AXUXTADSSIEN))
 +8       ;ISSA(AXUXTADSSIEN) Q $$ISSA^XUXTADAPI($G(AXUXTADSSIEN))
GASSI(AXUXTADSSIA)  QUIT $$GASSIFM^XUXTADAPI($GET(AXUXTADSSIA))
GASSIN(AXUXTADSSIA)  QUIT $$GASSINFM^XUXTADAPI($GET(AXUXTADSSIA))
GSSCDCR(AXUXTADSSIEN)  QUIT $$GSSCDCRFM^XUXTADAPI($GET(AXUXTADSSIEN))
GSSOCS(AXUXTADSSIEN)  QUIT $$GSSOCSFM^XUXTADAPI($GET(AXUXTADSSIEN))
ISSA(AXUXTADSSIEN)  QUIT $$ISSAFM^XUXTADAPI($GET(AXUXTADSSIEN))
 +1       ;
 +2       ;
 +3       ; If AXUXTADYN is true then Save today's date in the Date Closed global
 +4       ; else clear the Date Closed global
 +5       ;
 +6       ; Returns
 +7       ;   0^Error message when an error occurs
 +8       ;   1^Success message
 +9       ;
 +10      ; W $$CLOSESS^XUXTADSSEF(1049,1)
CLOSESS(AXUXTADSSIEN,AXUXTADYN) ;
 +1       ;,XUXTADSSFILE
           NEW XUXTADSSIEN,XUXTADYN,XUXTADRTNVAL,XUXTADSSIA
 +2        SET XUXTADRTNVAL=0
           SET XUXTADSSIA="CLOSESSSSI"
 +3        SET XUXTADSSIEN=+$GET(AXUXTADSSIEN)
 +4       ; Get All Service/Section IEN's
 +5        DO GASSI(XUXTADSSIA)
 +6       ;S XUXTADSSFILE=49 ; File number of SERVICE/SECTION file
 +7       ;I (XUXTADSSIEN'>0)!'$D(^DIC(XUXTADSSFILE,XUXTADSSIEN,0)) D  G CLOSESSDN
 +8        IF (XUXTADSSIEN'>0)!('$DATA(@XUXTADSSIA@(XUXTADSSIEN)))
               Begin DoDot:1
 +9                SET XUXTADRTNVAL="0^Invalid Service/Section IEN: "_XUXTADSSIEN
               End DoDot:1
               GOTO CLOSESSDN
 +10       SET XUXTADYN=$GET(AXUXTADYN)
 +11       IF $LENGTH(XUXTADYN)=0
               Begin DoDot:1
 +12               SET XUXTADRTNVAL="0^Undefined Yes/No parameter"
               End DoDot:1
               GOTO CLOSESSDN
 +13       SET XUXTADYN=(XUXTADYN?1(1"Y",1"y"))
 +14       IF XUXTADYN
               Begin DoDot:1
 +15               SET XUXTADRTNVAL=$$SDCRDTG(XUXTADSSIEN,"T","DC")
               End DoDot:1
               GOTO CLOSESSDN
 +16       IF 'XUXTADYN
               Begin DoDot:1
 +17               SET XUXTADRTNVAL="1^Cancelling Close Service Section"
 +18               KILL ^TMP("SS",$JOB)
               End DoDot:1
               GOTO CLOSESSDN
CLOSESSDN ;
 +1        KILL @XUXTADSSIA
 +2        QUIT XUXTADRTNVAL
 +3       ;
 +4       ;
 +5       ; If AXUXTADYN is true then Save today's date in the Date Re-opened global
 +6       ; else clear the Date Re-opened global
 +7       ;
 +8       ; Returns
 +9       ;   0^Error message when an error occurs
 +10      ;   1^Success message
 +11      ;
 +12      ; W $$REOPENSS^XUXTADSSEF(1049,1)
REOPENSS(AXUXTADSSIEN,AXUXTADYN) ;
 +1       ;,XUXTADSSFILE
           NEW XUXTADSSIEN,XUXTADYN,XUXTADRTNVAL,XUXTADSSIA
 +2        SET XUXTADRTNVAL=0
           SET XUXTADSSIA="REOPENSSSSI"
 +3        SET XUXTADSSIEN=+$GET(AXUXTADSSIEN)
 +4       ; Get All Service/Section IEN's
 +5        DO GASSI(XUXTADSSIA)
 +6       ;S XUXTADSSFILE=49 ; File number of SERVICE/SECTION file
 +7       ;I (XUXTADSSIEN'>0)!'$D(^DIC(XUXTADSSFILE,XUXTADSSIEN,0)) D  G REOPENDN
 +8        IF (XUXTADSSIEN'>0)!('$DATA(@XUXTADSSIA@(XUXTADSSIEN)))
               Begin DoDot:1
 +9                SET XUXTADRTNVAL="0^Invalid Service/Section IEN: "_XUXTADSSIEN
               End DoDot:1
               GOTO REOPENDN
 +10       SET XUXTADYN=$GET(AXUXTADYN)
 +11       IF $LENGTH(XUXTADYN)=0
               Begin DoDot:1
 +12               SET XUXTADRTNVAL="0^Undefined Yes/No parameter"
               End DoDot:1
               GOTO REOPENDN
 +13       SET XUXTADYN=(XUXTADYN?1(1"Y",1"y"))
 +14       IF XUXTADYN
               Begin DoDot:1
 +15               SET XUXTADRTNVAL=$$SDCRDTG(XUXTADSSIEN,"T","DR")
               End DoDot:1
               GOTO REOPENDN
 +16       IF 'XUXTADYN
               Begin DoDot:1
 +17               SET XUXTADRTNVAL="1^Cancelling Re-open Service Section"
 +18               KILL ^TMP("SS",$JOB)
               End DoDot:1
               GOTO REOPENDN
REOPENDN  ;
 +1        KILL @XUXTADSSIA
 +2        QUIT XUXTADRTNVAL
 +3       ;
 +4       ;
 +5       ; Save Service/Section IEN and a Date Closed Record Date (Date Closed or Date Re-opened) to global ^TMP("SS",$J)
 +6       ;
 +7       ;   AXUXTADSSIEN   - A Service/Section IEN
 +8       ;   AXUXTADDCRDATE - A Date Closed record date in external form 
 +9       ;   AXUXTADNODE    - A "DC" or "DR" XUXTADNODE
 +10      ;
 +11      ; Returns
 +12      ;   0^Error message when an error occurs
 +13      ;   1^Success message
 +14      ;
 +15      ; W $$SDCRDTG^XUXTADSSEF(AXUXTADSSIEN,AXUXTADDCRDATE,AXUXTADNODE)
SDCRDTG(AXUXTADSSIEN,AXUXTADDCRDATE,AXUXTADNODE) ;
 +1       ;,XUXTADSSFILE
           NEW XUXTADSSIEN,XUXTADDCRDATE,XUXTADNODE,XUXTADRTNVAL,XUXTADDCDRT,XUXTADSSIA
 +2        NEW X,Y
 +3        IF '$DATA(VERBOSE)
               NEW VERBOSE
               SET VERBOSE=0
 +4        IF VERBOSE
               WRITE !,"SDCRDTG^XUXTADSSEF(",$GET(AXUXTADSSIEN),",",$GET(AXUXTADDCRDATE),",",$GET(AXUXTADNODE),") Called"
 +5        SET XUXTADRTNVAL=0
           SET XUXTADSSIA="SDCRDTGSSI"
 +6        SET XUXTADSSIEN=+$GET(AXUXTADSSIEN)
 +7       ; Get All Service/Section IEN's
 +8        DO GASSI(XUXTADSSIA)
 +9       ;S XUXTADSSFILE=49 ; File number of SERVICE/SECTION file
 +10      ;I (XUXTADSSIEN'>0)!'$D(^DIC(XUXTADSSFILE,XUXTADSSIEN,0)) D  G SDCRDTGDN
 +11       IF (XUXTADSSIEN'>0)!('$DATA(@XUXTADSSIA@(XUXTADSSIEN)))
               Begin DoDot:1
 +12               SET XUXTADRTNVAL="0^Invalid Service/Section IEN: "_XUXTADSSIEN
               End DoDot:1
               GOTO SDCRDTGDN
 +13       SET X=$GET(AXUXTADDCRDATE)
 +14       DO CNVDT
 +15       IF Y<1
               Begin DoDot:1
 +16               SET XUXTADRTNVAL="0^Invalid Date Closed Record date"
               End DoDot:1
               GOTO SDCRDTGDN
 +17       SET XUXTADDCRDATE=Y
 +18       SET XUXTADNODE=$GET(AXUXTADNODE)
 +19       IF ($LENGTH(XUXTADNODE)=0)!(XUXTADNODE'?1(1"DC",1"DR"))
               Begin DoDot:1
 +20               SET XUXTADRTNVAL="0^Invalid Date Node: "_XUXTADNODE_", DC or DR only"
               End DoDot:1
               GOTO SDCRDTGDN
 +21       KILL ^TMP("SS",$JOB)
 +22       SET ^TMP("SS",$JOB,"SSIEN")=XUXTADSSIEN
 +23       SET ^TMP("SS",$JOB,XUXTADNODE)=XUXTADDCRDATE
 +24       IF XUXTADNODE="DC"
               SET XUXTADDCDRT="Closed"
 +25      IF '$TEST
               SET XUXTADDCDRT="Re-opened"
 +26       IF $LENGTH(XUXTADDCRDATE)'>0
               Begin DoDot:1
 +27               SET XUXTADRTNVAL="0^Date "_XUXTADDCDRT_" Reset"
               End DoDot:1
               GOTO SDCRDTGDN
 +28       SET XUXTADRTNVAL="1^Service/Section will be "_XUXTADDCDRT_" on Save or Exit"
SDCRDTGDN ;
 +1        IF VERBOSE
               WRITE !,"SDCRDTG^XUXTADSSEF Exiting  Response: ",XUXTADRTNVAL,!!
 +2        KILL @XUXTADSSIA
 +3        QUIT XUXTADRTNVAL
 +4       ;
 +5       ;
 +6       ; Save a Date Closed or Date Re-opened that has been put in the global 
 +7       ; ^TMP("SS",$J,"DC") or ^TMP("SS",$J,"DR") respectively to the Service/Section file (^DIC(49)). 
 +8       ; Called when the User Exits or Saves the Form
 +9       ;
 +10      ; Returns
 +11      ;   0^Error message when an error occurs
 +12      ;   1^Success message
 +13      ;
 +14      ; W $$SVDCDR^XUXTADSSEF
SVDCDR()  ;
 +1        NEW XUXTADSSIEN,XUXTADDCDT,XUXTADRTNVAL
 +2        SET XUXTADRTNVAL=0
 +3       ; Save Date Closed or Date Re-opened based on globals setup in the call to SDCRDTG(AXUXTADSSIEN,AXUXTADDCRDATE,AXUXTADNODE)
 +4        SET XUXTADSSIEN=$GET(^TMP("SS",$JOB,"SSIEN"))
 +5        IF $LENGTH(XUXTADSSIEN)'>0
               Begin DoDot:1
 +6                SET XUXTADRTNVAL="1^Service/Section edits saved"
               End DoDot:1
               GOTO SVDCDRDN
 +7        SET XUXTADDCDT=$GET(^TMP("SS",$JOB,"DC"))
 +8        IF $LENGTH(XUXTADDCDT)>0
               Begin DoDot:1
 +9                SET XUXTADRTNVAL=$$DCRSAVE(XUXTADSSIEN,XUXTADDCDT)
               End DoDot:1
               GOTO SVDCDRDN
 +10       SET XUXTADDCDT=$GET(^TMP("SS",$JOB,"DR"))
 +11       IF $LENGTH(XUXTADDCDT)>0
               Begin DoDot:1
 +12               SET XUXTADRTNVAL=$$DRSAVE(XUXTADSSIEN,XUXTADDCDT)
               End DoDot:1
               GOTO SVDCDRDN
 +13       SET XUXTADRTNVAL="0^Service/Section Date global not set"
SVDCDRDN  ;
 +1        IF +XUXTADRTNVAL
               SET ^TMP("SS",$JOB,"SSSAVED")=$PIECE(XUXTADRTNVAL,"^",2)
 +2        QUIT XUXTADRTNVAL
 +3       ;
 +4       ;
 +5       ; Form Post Save is called when the user Saves or Exits
 +6       ;   Saves the Date Closed Record Date if one exists in ^TMP("SS",$J,)
 +7       ;   Get the Close Service/Section and Re-open Service/Section form only fields enable/disabled status
 +8       ;   Get the current Service/Section Open/Closed status 
 +9       ;
 +10      ; Returns
 +11      ;   SDCU^SDRU^HMSG^SSOCS
 +12      ;   SDCU  - Set Date Closed Uneditable
 +13      ;   SDRU  - Set Date Re-opened Uneditable
 +14      ;   HMSG  - Service/Section Date Closed/Date Reopened Help message
 +15      ;   SSOCS - Service/Section Open Close Status: Closed or Open
 +16      ;
 +17      ; W $$FMPS^XUXTADSSEF(XUXTADSSIEN)
FMPS(AXUXTADSSIEN) ;
 +1        NEW XUXTADRTNVAL,XUXTADSSOCS,XUXTADBPVAL
 +2        IF '$DATA(VERBOSE)
               NEW VERBOSE
               SET VERBOSE=0
 +3       ; Save the Date Closed/Date Re-opened
 +4        SET XUXTADRTNVAL=$$SVDCDR
 +5        IF VERBOSE
               WRITE !,"$$SVDCDR returned XUXTADRTNVAL: ",XUXTADRTNVAL,!
 +6        SET XUXTADBPVAL=$$BLKPRE(AXUXTADSSIEN)
 +7        IF VERBOSE
               WRITE !,"$$BLKPRE(",AXUXTADSSIEN,") returned XUXTADBPVAL: ",XUXTADBPVAL,!
 +8        SET XUXTADSSOCS=$$GSSOCS(AXUXTADSSIEN)
 +9        IF VERBOSE
               WRITE !,"$$GSSOCS(",AXUXTADSSIEN,") returned XUXTADSSOCS: ",XUXTADSSOCS,!
 +10       IF (+XUXTADSSOCS)
               SET $PIECE(XUXTADBPVAL,"^",4)=$PIECE(XUXTADSSOCS,"^",2)
 +11       SET $PIECE(XUXTADBPVAL,"^",3)=$PIECE(XUXTADRTNVAL,"^",2)
 +12       IF VERBOSE
               WRITE !,"$$FMPS(",AXUXTADSSIEN,") returned: ",XUXTADBPVAL,!
 +13       QUIT XUXTADBPVAL
 +14      ;
 +15      ;
 +16      ; Set the Form Only fields CLOSE SERVICE/SECTION and RE-OPEN SERVICE/SECTION uneditable property
 +17      ; based on if Users are assigned to the service/section with IEN=AXUXTADSSIEN and the current 
 +18      ; Date Closed field and Date Re-opened field.
 +19      ; This is called in the PRE ACTION of the Block SERVICE/SECTION EDIT PG
 +20      ; 
 +21      ;   AXUXTADSSIEN  - A Service/Section IEN
 +22      ;
 +23      ; Returns
 +24      ;   SDCU^SDRU^HMSG^DC
 +25      ;   SDCU - Set Date Closed Uneditable
 +26      ;   SDRU - Set Date Re-opened Uneditable
 +27      ;   HMSG - Service/Section Date Closed/Date Reopened Help message
 +28      ;   DC   - Date Closed 
 +29      ;
 +30      ; W $$BLKPRE^XUXTADSSEF(AXUXTADSSIEN)
BLKPRE(AXUXTADSSIEN) ;
 +1        NEW XUXTADSSIEN,XUXTADUSRLNKS,XUXTADSSN,XUXTADCDCR,XUXTADCDC
 +2       ;,XUXTADSSFILE
           NEW XUXTADCDR,XUXTADRTNVAL,XUXTADSSIA
 +3        SET XUXTADRTNVAL="1^1^^^"
           SET XUXTADSSIA="BLKPRESSI"
 +4        SET XUXTADSSIEN=+$GET(AXUXTADSSIEN)
 +5       ; Get All Service/Section IEN's
 +6        DO GASSIN(XUXTADSSIA)
 +7       ;S XUXTADSSFILE=49 ; File number of SERVICE/SECTION file
 +8       ;I (XUXTADSSIEN'>0)!('$D(^DIC(XUXTADSSFILE,XUXTADSSIEN))) D  G BLKPREDN
 +9        IF (XUXTADSSIEN'>0)!('$DATA(@XUXTADSSIA@(XUXTADSSIEN)))
               Begin DoDot:1
 +10               SET $PIECE(XUXTADRTNVAL,"^",3)="Invalid Service/Section IEN: "_XUXTADSSIEN
               End DoDot:1
               GOTO BLKPREDN
 +11       SET XUXTADUSRLNKS=$$ISSA(XUXTADSSIEN)
 +12      ;S XUXTADSSN=$P(^DIC(XUXTADSSFILE,XUXTADSSIEN,0),"^")
 +13       SET XUXTADSSN=@XUXTADSSIA@(XUXTADSSIEN)
 +14       IF XUXTADUSRLNKS>0
               Begin DoDot:1
 +15               SET $PIECE(XUXTADRTNVAL,"^",3)="Service/Section "_XUXTADSSN_" has users assigned and cannot be Closed/Re-opened!"
               End DoDot:1
 +16       IF XUXTADUSRLNKS=0
               Begin DoDot:1
 +17      ; Get the current Date Closed Record
 +18               SET XUXTADCDCR=$$GSSCDCR(XUXTADSSIEN)
                   SET XUXTADCDC=$PIECE(XUXTADCDCR,"^",1)
                   SET XUXTADCDR=$PIECE(XUXTADCDCR,"^",2)
 +19               IF ($LENGTH(XUXTADCDC)>0)
                       Begin DoDot:2
 +20                       IF ($LENGTH(XUXTADCDR)>0)
                               Begin DoDot:3
 +21                               SET $PIECE(XUXTADRTNVAL,"^",1)=0
                                   SET $PIECE(XUXTADRTNVAL,"^",2)=1
 +22                               SET $PIECE(XUXTADRTNVAL,"^",3)="Service/Section "_XUXTADSSN_" has no users assigned and can be Closed"
                               End DoDot:3
 +23                       IF ($LENGTH(XUXTADCDR)=0)
                               Begin DoDot:3
 +24                               SET $PIECE(XUXTADRTNVAL,"^",1)=1
                                   SET $PIECE(XUXTADRTNVAL,"^",2)=0
 +25                               SET $PIECE(XUXTADRTNVAL,"^",3)="Service/Section "_XUXTADSSN_" has no users assigned and can be Re-opened"
 +26                               SET X=XUXTADCDC
                                   DO CNVDT
 +27                               IF Y>0
                                       SET $PIECE(XUXTADRTNVAL,"^",4)=$$FMTE(Y)
                               End DoDot:3
                       End DoDot:2
 +28               IF ($LENGTH(XUXTADCDC)=0)
                       Begin DoDot:2
 +29                       SET $PIECE(XUXTADRTNVAL,"^",1)=0
                           SET $PIECE(XUXTADRTNVAL,"^",2)=1
 +30                       SET $PIECE(XUXTADRTNVAL,"^",3)="Service/Section "_XUXTADSSN_" has no users assigned and can be Closed"
                       End DoDot:2
               End DoDot:1
BLKPREDN  ; 
 +1        KILL @XUXTADSSIA
 +2        QUIT XUXTADRTNVAL
 +3       ;
 +4       ;
 +5       ; Save the new Date Closed record with IEN: AXUXTADDCIEN for the Service/Section with IEN: AXUXTADSSIEN 
 +6       ; in the Service/Section file (49)
 +7       ; 
 +8       ;   AXUXTADSSIEN  - A Service/Section IEN
 +9       ;   AXUXTADDCIEN  - A Date Closed record date (IEN)
 +10      ;
 +11      ; Returns
 +12      ;   0^Error message when an error occurs
 +13      ;   1^Success message
 +14      ;
 +15      ; W $$DCRSAVE^XUXTADSSEF(1049,3241008)
 +16      ;
DCRSAVE(AXUXTADSSIEN,AXUXTADDCIEN) ;
 +1        NEW XUXTADSSIEN,XUXTADDCIEN,XUXTADCDCR,XUXTADCDC,XUXTADCDR,XUXTADADDED
 +2        NEW XUXTADGRDC,XUXTADSSIA,XUXTADSSFILE,XUXTADDCNODE
 +3        NEW DIC,X,Y
 +4        IF '$DATA(VERBOSE)
               NEW VERBOSE
               SET VERBOSE=0
 +5        IF VERBOSE
               WRITE !,"DCRSAVE^XUXTADSSEF(",$GET(AXUXTADSSIEN),",",$GET(AXUXTADDCIEN),") Called"
 +6        SET XUXTADADDED=0
           SET XUXTADSSIA="DCRSAVESSI"
 +7        SET XUXTADSSIEN=+$GET(AXUXTADSSIEN)
 +8       ; Get All Service/Section IEN's
 +9        DO GASSI(XUXTADSSIA)
 +10      ; File number of SERVICE/SECTION file
           SET XUXTADSSFILE=49
 +11      ; Date Closed node
           SET XUXTADDCNODE=3
 +12      ;I (XUXTADSSIEN'>0)!('$D(^DIC(XUXTADSSFILE,XUXTADSSIEN))) D  G DCRSAVEDN
 +13       IF (XUXTADSSIEN'>0)!('$DATA(@XUXTADSSIA@(XUXTADSSIEN)))
               Begin DoDot:1
 +14               SET XUXTADADDED="0^Invalid Service/Section IEN: "_XUXTADSSIEN
               End DoDot:1
               GOTO DCRSAVEDN
 +15       SET XUXTADDCIEN=+$GET(AXUXTADDCIEN)
 +16       IF XUXTADDCIEN'>0
               Begin DoDot:1
 +17               SET XUXTADADDED="0^Invalid Date Closed IEN: "_XUXTADDCIEN
               End DoDot:1
               GOTO DCRSAVEDN
 +18       if '$DATA(U)
               SET U="^"
 +19      ; Set the Global root of subfile Date Closed
 +20       SET XUXTADGRDC="^DIC("_XUXTADSSFILE_","_XUXTADSSIEN_","_XUXTADDCNODE_","
 +21      ; Get the current Date Closed Record
 +22       SET XUXTADCDCR=$$GSSCDCR(XUXTADSSIEN)
 +23       IF $LENGTH(XUXTADCDCR)=0
               GOTO NEWDCR
 +24      ; Check here to see if XUXTADDCIEN is equal to the last Re-opened Date.
 +25      ; If it is then delete the last Re-opened date field
 +26       SET XUXTADCDC=$PIECE(XUXTADCDCR,U,1)
 +27       SET XUXTADCDR=$PIECE(XUXTADCDCR,U,2)
 +28       IF $LENGTH(XUXTADCDR)=0
               Begin DoDot:1
 +29               SET XUXTADADDED="0^Service/Section is already closed"
               End DoDot:1
               GOTO DCRSAVEDN
 +30       IF XUXTADCDR=XUXTADDCIEN
               Begin DoDot:1
 +31      ; Delete the Service/Section Date Re-opened field
                   SET XUXTADADDED=$$ESSDRF(XUXTADSSIEN,XUXTADCDC,"@")
 +32               IF $PIECE(XUXTADADDED,U)
                       SET XUXTADADDED="1^Re-open Service/Section is cancelled, Service/Section is closed"
               End DoDot:1
               GOTO DCRSAVEDN
 +33      ; Make sure XUXTADDCIEN is after the last Re-opened Date.
 +34       IF XUXTADCDR>XUXTADDCIEN
               Begin DoDot:1
 +35               SET XUXTADADDED="0^Service/Section closed date must be after the last date re-opened"
               End DoDot:1
               GOTO DCRSAVEDN
NEWDCR    ;
 +1        SET DIC=XUXTADGRDC
           SET DIC(0)="ML"
 +2        SET X=XUXTADDCIEN
 +3        DO FMDIC
 +4        IF Y=-1
               Begin DoDot:1
 +5                SET XUXTADADDED="0^WRITE USING DIC: "_DIC_", X: "_X_" FAILED"
                   GOTO DCRSAVEDN
               End DoDot:1
               GOTO DCRSAVEDN
 +6        IF $PIECE(Y,U,3)=1
               SET XUXTADADDED="1^Service/Section Closed"
DCRSAVEDN ;
 +1        IF VERBOSE
               WRITE !,"DCRSAVE^XUXTADSSEF Exiting  Response: ",XUXTADADDED,!!
 +2        KILL @XUXTADSSIA
 +3        QUIT XUXTADADDED
 +4       ;
 +5       ;
 +6       ; Save the new Date Re-opened field : AXUXTADDTRE to the most recent Date Closed record 
 +7       ; for the Service/Section with IEN: AXUXTADSSIEN in the Service/Section file (49)
 +8       ; 
 +9       ;   AXUXTADSSIEN  - A Service/Section IEN
 +10      ;   AXUXTADDTRE   - A Date Re-opened date
 +11      ;
 +12      ; Returns
 +13      ;   0^Error message when an error occurs
 +14      ;   1^Success message
 +15      ;
 +16      ; W $$DRSAVE^XUXTADSSEF(1049,3241103)
 +17      ;
DRSAVE(AXUXTADSSIEN,AXUXTADDTRE) ;
 +1        NEW XUXTADSSIEN,XUXTADDTRE,XUXTADCDCR,XUXTADCDC,XUXTADCDR,XUXTADADDED
 +2        NEW XUXTADGRDC,XUXTADSSIA,XUXTADSSFILE,XUXTADDCNODE
 +3        NEW DIE,DA,DR,DIK
 +4        IF '$DATA(VERBOSE)
               NEW VERBOSE
               SET VERBOSE=0
 +5        IF VERBOSE
               WRITE !,"DRSAVE^XUXTADSSEF(",$GET(AXUXTADSSIEN),",",$GET(AXUXTADDTRE),") Called"
 +6        SET XUXTADADDED=0
           SET XUXTADSSIA="DRSAVESSI"
 +7        SET XUXTADSSIEN=+$GET(AXUXTADSSIEN)
 +8       ; Get All Service/Section IEN's
 +9        DO GASSI(XUXTADSSIA)
 +10      ; File number of SERVICE/SECTION file
           SET XUXTADSSFILE=49
 +11      ; Date Closed node
           SET XUXTADDCNODE=3
 +12      ;I (XUXTADSSIEN'>0)!('$D(^DIC(XUXTADSSFILE,XUXTADSSIEN))) D  G DRSAVEDN
 +13       IF (XUXTADSSIEN'>0)!('$DATA(@XUXTADSSIA@(XUXTADSSIEN)))
               Begin DoDot:1
 +14               SET XUXTADADDED="0^Invalid Service/Section IEN: "_XUXTADSSIEN
               End DoDot:1
               GOTO DRSAVEDN
 +15       SET XUXTADDTRE=+$GET(AXUXTADDTRE)
 +16       IF XUXTADDTRE'>0
               Begin DoDot:1
 +17               SET XUXTADADDED="0^Invalid Date Re-opened: "_XUXTADDTRE
               End DoDot:1
               GOTO DRSAVEDN
 +18       if '$DATA(U)
               SET U="^"
 +19      ; Set the Global root of subfile Date Closed
 +20       SET XUXTADGRDC="^DIC("_XUXTADSSFILE_","_XUXTADSSIEN_","_XUXTADDCNODE_","
 +21      ; Get the current Date Closed Record
 +22       SET XUXTADCDCR=$$GSSCDCR(XUXTADSSIEN)
 +23      ; If we don't have a Date closed record, then the Service/Section is already open
 +24       IF $LENGTH(XUXTADCDCR)=0
               Begin DoDot:1
 +25               SET XUXTADADDED="0^Service/Section is already open"
               End DoDot:1
               GOTO DRSAVEDN
 +26      ; Check here to see if XUXTADDTRE is equal to the current Date Closed.
 +27      ; If it is then delete the current Date Closed record
 +28       SET XUXTADCDC=$PIECE(XUXTADCDCR,U,1)
 +29       SET XUXTADCDR=$PIECE(XUXTADCDCR,U,2)
 +30       IF $LENGTH(XUXTADCDR)>0
               Begin DoDot:1
 +31               SET XUXTADADDED="0^Service/Section is already open"
               End DoDot:1
               GOTO DRSAVEDN
 +32       SET DA=XUXTADCDC
           SET DA(1)=XUXTADSSIEN
 +33       IF XUXTADCDC=XUXTADDTRE
               Begin DoDot:1
 +34      ; Delete the Service/Section Date Closed Record
                   SET XUXTADADDED=$$DSSDCR(XUXTADSSIEN,XUXTADCDC)
 +35               IF $PIECE(XUXTADADDED,U)
                       SET XUXTADADDED="1^Close Service/Section cancelled, Service/Section is Re-opened"
               End DoDot:1
               GOTO DRSAVEDN
 +36      ; Make sure XUXTADDTRE is after the current Date Closed Date.
 +37       IF XUXTADCDC>XUXTADDTRE
               Begin DoDot:1
 +38               SET XUXTADADDED="0^Service/Section re-opened date must be after the current date closed"
               End DoDot:1
               GOTO DRSAVEDN
 +39      ; Setup the DIE call
 +40      ; Global root of subfile
           SET DIE=XUXTADGRDC
 +41       SET DR="1////"_XUXTADDTRE
 +42       DO FMDIE
 +43       SET XUXTADADDED="1^Service/Section Re-opened"
DRSAVEDN  ;
 +1        IF VERBOSE
               WRITE !,"DRSAVE^XUXTADSSEF Exiting  Response: ",XUXTADADDED,!!
 +2        KILL @XUXTADSSIA
 +3        QUIT XUXTADADDED
 +4       ;
 +5       ;
 +6       ; Delete the Service/Section Date Closed Record with IEN: AXUXTADDCRIEN,
 +7       ; and Service/Section with IEN: AXUXTADSSIEN in the Service/Section file (49)
 +8       ; 
 +9       ;   AXUXTADSSIEN  - A Service/Section IEN
 +10      ;   AXUXTADDCRIEN - A Date Closed IEN (Internal form)
 +11      ;
 +12      ; Returns
 +13      ;   0^Error message when an error occurs
 +14      ;   1^Success message
 +15      ; 
 +16      ; W $$DSSDCR^XUXTADSSEF(1049,3241103)
DSSDCR(AXUXTADSSIEN,AXUXTADDCRIEN) ;
 +1        NEW XUXTADSSIEN,XUXTADDCRIEN,XUXTADDELETED,XUXTADSSIA,XUXTADSSFILE,XUXTADDCNODE
 +2        NEW DIK,DA
 +3        IF '$DATA(VERBOSE)
               NEW VERBOSE
               SET VERBOSE=0
 +4        IF VERBOSE
               WRITE !,"DSSDCR^XUXTADSSEF(",$GET(AXUXTADSSIEN),",",$GET(AXUXTADDCRIEN),") Called"
 +5        SET XUXTADDELETED=0
           SET XUXTADSSIA="DSSDCRSSI"
 +6        SET XUXTADSSIEN=+$GET(AXUXTADSSIEN)
 +7       ; Get All Service/Section IEN's
 +8        DO GASSI(XUXTADSSIA)
 +9       ; File number of SERVICE/SECTION file
           SET XUXTADSSFILE=49
 +10      ; Date Closed node
           SET XUXTADDCNODE=3
 +11      ;I (XUXTADSSIEN'>0)!('$D(^DIC(XUXTADSSFILE,XUXTADSSIEN))) D  G DSSDCRDN
 +12       IF (XUXTADSSIEN'>0)!('$DATA(@XUXTADSSIA@(XUXTADSSIEN)))
               Begin DoDot:1
 +13               SET XUXTADDELETED="0^Invalid Service/Section IEN: "_XUXTADSSIEN
               End DoDot:1
               GOTO DSSDCRDN
 +14       SET XUXTADDCRIEN=+$GET(AXUXTADDCRIEN)
 +15       IF (XUXTADDCRIEN'>0)
               Begin DoDot:1
 +16               SET XUXTADDELETED="0^Invalid Date Closed IEN: "_XUXTADDCRIEN
               End DoDot:1
               GOTO DSSDCRDN
 +17       SET DA=XUXTADDCRIEN
           SET DA(1)=XUXTADSSIEN
 +18      ; Global root of subfile
           SET DIK="^DIC("_XUXTADSSFILE_","_XUXTADSSIEN_","_XUXTADDCNODE_","
 +19       IF VERBOSE
               WRITE !,"DIK: ",DIK,!