| 1 | PRSPEAU ;WOIFO/SAB - EXTENDED ABSENCE UTILITIES ;10/19/2004
 | 
|---|
| 2 |  ;;4.0;PAID;**93**;Sep 21, 1995;Build 7
 | 
|---|
| 3 |  ;;Per VHA Directive 2004-038, this routine should not be modified.
 | 
|---|
| 4 |  Q
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 |  ;
 | 
|---|
| 7 | CONFLICT(PRSIEN,NFDT,NTDT,XEAIEN) ; check for conflict with existing EAs
 | 
|---|
| 8 |  ; input
 | 
|---|
| 9 |  ;   PRSIEN - employee ien (file 450)
 | 
|---|
| 10 |  ;   NFDT   - new from date in fileman format
 | 
|---|
| 11 |  ;   NTDT   - (optional) new to date in fileman format
 | 
|---|
| 12 |  ;   XEAIEN - (optional) existing extended absense ien, passed if dates
 | 
|---|
| 13 |  ;            for an existing record are being checked so that entry does
 | 
|---|
| 14 |  ;            not conflict with itself.
 | 
|---|
| 15 |  ; returns string with value =
 | 
|---|
| 16 |  ;   list of Extended Absence iens (delimited by ^) that conflict OR
 | 
|---|
| 17 |  ;   null when no conflict found
 | 
|---|
| 18 |  ;
 | 
|---|
| 19 |  ; A conflict exists if the date range (New From-New To) overlaps the
 | 
|---|
| 20 |  ; date range of a different, active (does not include cancelled)
 | 
|---|
| 21 |  ; extended absence.  If the To Date is not passed, then the software
 | 
|---|
| 22 |  ; will just check the From Date to issue that it does not conflict with
 | 
|---|
| 23 |  ; another extended absence.
 | 
|---|
| 24 |  ;
 | 
|---|
| 25 |  N EAIEN,EAY0,PRSRET,PRSY,TDT
 | 
|---|
| 26 |  S PRSRET=""
 | 
|---|
| 27 |  S NTDT=$G(NTDT,NFDT) ; if To Date not passed then set equal to From Date
 | 
|---|
| 28 |  ;
 | 
|---|
| 29 |  ; loop thru extended absences for employee by reverse To Date until
 | 
|---|
| 30 |  ; the To Date is before the New From Date or no more To Dates
 | 
|---|
| 31 |  S TDT=9999999 ; initial To Date for loop
 | 
|---|
| 32 |  F  S TDT=$O(^PRST(458.4,"AEE",PRSIEN,TDT),-1) Q:'TDT!(TDT<NFDT)  D
 | 
|---|
| 33 |  . ; loop thru extended absences with To Date
 | 
|---|
| 34 |  . S EAIEN=0
 | 
|---|
| 35 |  . S EAIEN=$O(^PRST(458.4,"AEE",PRSIEN,TDT,EAIEN)) Q:'EAIEN  D
 | 
|---|
| 36 |  . . Q:EAIEN=$G(XEAIEN)  ; skip if entry is the one being checked
 | 
|---|
| 37 |  . . S EAY0=$G(^PRST(458.4,EAIEN,0)) ; extended absense 0 node
 | 
|---|
| 38 |  . . Q:$P(EAY0,U)=""!($P(EAY0,U,2)="")  ; dates missing - invalid
 | 
|---|
| 39 |  . . Q:$P(EAY0,U)>NTDT  ; skip if From Date after New To Date
 | 
|---|
| 40 |  . . Q:$P(EAY0,U,6)'="A"  ; skip if Status not active
 | 
|---|
| 41 |  . . ;
 | 
|---|
| 42 |  . . ; extended absence overlaps the pay period
 | 
|---|
| 43 |  . . S PRSRET=PRSRET_EAIEN_U  ; conflict
 | 
|---|
| 44 |  ;
 | 
|---|
| 45 |  Q PRSRET
 | 
|---|
| 46 |  ;
 | 
|---|
| 47 | RCON(LIST,WRITE,PRSARRN) ; Report Conflicts
 | 
|---|
| 48 |  ; input
 | 
|---|
| 49 |  ;   LIST    - string of conflicting Ext Absence IENs delimited by ^
 | 
|---|
| 50 |  ;   WRITE   - (optional) true (=1) if text should be written (default)
 | 
|---|
| 51 |  ;                        false (=0) if array should be returned instead
 | 
|---|
| 52 |  ;   PRSARRN - (optional) array name, default value is "PRSARR"
 | 
|---|
| 53 |  ; output
 | 
|---|
| 54 |  ;   If WRITE is True, the input array name (or "PRSARR" if not
 | 
|---|
| 55 |  ;     specified) will be killed.
 | 
|---|
| 56 |  ;   If WRITE is False, the input array name will contain the text
 | 
|---|
| 57 |  ;
 | 
|---|
| 58 |  Q:$G(LIST)=""
 | 
|---|
| 59 |  ;
 | 
|---|
| 60 |  N EAIEN,LN,PC
 | 
|---|
| 61 |  ;
 | 
|---|
| 62 |  S PRSARRN=$G(PRSARRN,"PRSARR")
 | 
|---|
| 63 |  S WRITE=$G(WRITE,1)
 | 
|---|
| 64 |  ;
 | 
|---|
| 65 |  S @PRSARRN@(1)="The specified dates conflict with other extended absence(s)."
 | 
|---|
| 66 |  S @PRSARRN@(2)="Please specify different dates for this extended absence or"
 | 
|---|
| 67 |  S @PRSARRN@(3)="remove the conflict by first editing the other extended absence(s)."
 | 
|---|
| 68 |  S LN=3
 | 
|---|
| 69 |  F PC=1:1 S EAIEN=$P(LIST,U,PC) Q:EAIEN=""  D
 | 
|---|
| 70 |  . S LN=LN+1
 | 
|---|
| 71 |  . S @PRSARRN@(LN)="  Conflicts with Absence: "_$$GET1^DIQ(458.4,EAIEN_",",.01)_" to "_$$GET1^DIQ(458.4,EAIEN_",",1)
 | 
|---|
| 72 |  ;
 | 
|---|
| 73 |  ; if not WRITE then quit (return text in array to caller)
 | 
|---|
| 74 |  Q:'WRITE
 | 
|---|
| 75 |  ;
 | 
|---|
| 76 |  ; otherwise write text to current device and then kill array of text
 | 
|---|
| 77 |  S LN=0 F  S LN=$O(@PRSARRN@(LN)) Q:'LN  D
 | 
|---|
| 78 |  . W !,@PRSARRN@(LN)
 | 
|---|
| 79 |  K @PRSARRN
 | 
|---|
| 80 |  ;
 | 
|---|
| 81 |  Q
 | 
|---|
| 82 |  ;
 | 
|---|
| 83 | CHKRG(PRSIEN) ; Check for RG Posted to Today's ESR
 | 
|---|
| 84 |  ; Input
 | 
|---|
| 85 |  ;   PRSIEN - Employee IEN (file 450)
 | 
|---|
| 86 |  ; Returns
 | 
|---|
| 87 |  ;   boolean value, true (=1) if RG already posted on ESR for Today
 | 
|---|
| 88 |  ;
 | 
|---|
| 89 |  N D1,DAY,PP4Y,PPE,PPI,PRSRET
 | 
|---|
| 90 |  ;
 | 
|---|
| 91 |  S PRSRET=0 ; init return value
 | 
|---|
| 92 |  ;
 | 
|---|
| 93 |  I $G(PRSIEN) D
 | 
|---|
| 94 |  . S D1=DT
 | 
|---|
| 95 |  . D PP^PRSAPPU
 | 
|---|
| 96 |  . Q:'$G(PPI)
 | 
|---|
| 97 |  . Q:'$G(DAY)
 | 
|---|
| 98 |  . I $G(^PRST(458,PPI,"E",PRSIEN,"D",DAY,5))["RG" S PRSRET=1
 | 
|---|
| 99 |  ;
 | 
|---|
| 100 |  Q PRSRET
 | 
|---|
| 101 |  ;
 | 
|---|
| 102 | DISEA(EAIEN,IC) ; Display EA
 | 
|---|
| 103 |  ; input
 | 
|---|
| 104 |  ;   EAIEN - Extended Absence IEN (file 458.4)
 | 
|---|
| 105 |  ;   IC    - (optional) item count, number to be included in display
 | 
|---|
| 106 |  ; result
 | 
|---|
| 107 |  ;   Writes information to current device (2-4 lines)
 | 
|---|
| 108 |  Q:'$G(EAIEN)  ; IEN required
 | 
|---|
| 109 |  S IC=$G(IC)
 | 
|---|
| 110 |  ;
 | 
|---|
| 111 |  N PRSE,PRSIENS,PRSV
 | 
|---|
| 112 |  S PRSIENS=EAIEN_","
 | 
|---|
| 113 |  ;
 | 
|---|
| 114 |  D GETS^DIQ(458.4,PRSIENS,".01;1;3;4;5;6","","PRSV","PRSE")
 | 
|---|
| 115 |  ;
 | 
|---|
| 116 |  ; display info if no error
 | 
|---|
| 117 |  I '$D(PRSE) D
 | 
|---|
| 118 |  . W !
 | 
|---|
| 119 |  . I IC W $$RJ^XLFSTR(IC_") ",4)
 | 
|---|
| 120 |  . W PRSV(458.4,PRSIENS,.01)_" to "_PRSV(458.4,PRSIENS,1)
 | 
|---|
| 121 |  . W ?33,"Status: ",PRSV(458.4,PRSIENS,5)
 | 
|---|
| 122 |  . I PRSV(458.4,PRSIENS,6)]"" W !,?4,PRSV(458.4,PRSIENS,6) ; remarks
 | 
|---|
| 123 |  . W !,?33,"Entered: ",PRSV(458.4,PRSIENS,3)
 | 
|---|
| 124 |  . I PRSV(458.4,PRSIENS,4)]"" W !,?33,"Updated: ",PRSV(458.4,PRSIENS,4)
 | 
|---|
| 125 |  ;
 | 
|---|
| 126 |  I $D(PRSE) D MSG^DIALOG(,,,,"PRSE") ; display error
 | 
|---|
| 127 |  ;
 | 
|---|
| 128 |  Q
 | 
|---|
| 129 |  ;
 | 
|---|
| 130 | BLDLST(PRSIEN,MINTDT,OKSTAT) ; Build List of Extended Absence Entries
 | 
|---|
| 131 |  ; input
 | 
|---|
| 132 |  ;   PRSIEN - Employee IEN (file 450)
 | 
|---|
| 133 |  ;   MINTDT - Minumum To Date (FileMan Internal)
 | 
|---|
| 134 |  ;   OKSTAT - String of acceptable EA status values to place in list
 | 
|---|
| 135 |  ;            delimited by ^ (e.g. "A" or "^A^" or "A^X"...)
 | 
|---|
| 136 |  ;   ARRN   - (optional) name of an array that will contain the list
 | 
|---|
| 137 |  ;            default value is "EALIST"
 | 
|---|
| 138 |  ; output
 | 
|---|
| 139 |  ;   local array EALIST with format
 | 
|---|
| 140 |  ;   EALIST(0)=count of items in list
 | 
|---|
| 141 |  ;   EALIST(1)=1st extended absence IEN in list
 | 
|---|
| 142 |  ;   EALIST(n)=nth extended absence IEN in list
 | 
|---|
| 143 |  ;
 | 
|---|
| 144 |  ; initialize the list
 | 
|---|
| 145 |  K EALIST
 | 
|---|
| 146 |  ;
 | 
|---|
| 147 |  Q:'$G(PRSIEN)
 | 
|---|
| 148 |  Q:$G(MINTDT)'?7N
 | 
|---|
| 149 |  Q:$G(OKSTAT)=""
 | 
|---|
| 150 |  ;
 | 
|---|
| 151 |  I $E(OKSTAT)'="^" S OKSTAT="^"_OKSTAT
 | 
|---|
| 152 |  I $E(OKSTAT,$L(OKSTAT))'="^" S OKSTAT=OKSTAT_"^"
 | 
|---|
| 153 |  ;
 | 
|---|
| 154 |  ;
 | 
|---|
| 155 |  N CNT,EAIEN,PRSX,TDT
 | 
|---|
| 156 |  ;
 | 
|---|
| 157 |  ; loop thru extended absences by to date - build sorted temp list
 | 
|---|
| 158 |  S TDT=MINTDT-.01
 | 
|---|
| 159 |  F  S TDT=$O(^PRST(458.4,"AEE",PRSIEN,TDT)) Q:'TDT  D
 | 
|---|
| 160 |  . S EAIEN=0
 | 
|---|
| 161 |  . F  S EAIEN=$O(^PRST(458.4,"AEE",PRSIEN,TDT,EAIEN)) Q:'EAIEN  D
 | 
|---|
| 162 |  . . Q:OKSTAT'[(U_$P($G(^PRST(458.4,EAIEN,0)),U,6)_U)
 | 
|---|
| 163 |  . . S EALIST("T",TDT_"^"_EAIEN)=""
 | 
|---|
| 164 |  ;
 | 
|---|
| 165 |  ; build output list by number based on order in temp list 
 | 
|---|
| 166 |  S CNT=0,PRSX=""
 | 
|---|
| 167 |  F  S PRSX=$O(EALIST("T",PRSX)) Q:PRSX=""  D
 | 
|---|
| 168 |  . S CNT=CNT+1
 | 
|---|
| 169 |  . S EALIST(CNT)=$P(PRSX,U,2)
 | 
|---|
| 170 |  S EALIST(0)=CNT ; set header node with count
 | 
|---|
| 171 |  ;
 | 
|---|
| 172 |  K EALIST("T") ; delete temp list
 | 
|---|
| 173 |  ;
 | 
|---|
| 174 |  Q
 | 
|---|
| 175 |  ;
 | 
|---|
| 176 | DISLST() ; Display List of Extended Absences
 | 
|---|
| 177 |  ; input
 | 
|---|
| 178 |  ;   local array EALIST with format
 | 
|---|
| 179 |  ;   EALIST(0)=count of items in list
 | 
|---|
| 180 |  ;   EALIST(1)=1st extended absence IEN in list
 | 
|---|
| 181 |  ;   EALIST(n)=nth extended absence IEN in list
 | 
|---|
| 182 |  ; returns 1 if user entered an up-arrow or time-out
 | 
|---|
| 183 |  ;
 | 
|---|
| 184 |  N DIR,DIRUT,DIROUT,DTOUT,DUOUT,PRSI,PRSRET,X,Y
 | 
|---|
| 185 |  ;
 | 
|---|
| 186 |  S PRSRET=0
 | 
|---|
| 187 |  ;
 | 
|---|
| 188 |  I EALIST(0)=0 W !,"No extended absences were found."
 | 
|---|
| 189 |  ;
 | 
|---|
| 190 |  S PRSI=0 F  S PRSI=$O(EALIST(PRSI)) Q:'PRSI  D  Q:PRSRET
 | 
|---|
| 191 |  . I $Y+6>IOSL S DIR(0)="E" D ^DIR K DIR S:'Y PRSRET=1 Q:'Y  W @IOF
 | 
|---|
| 192 |  . S EAIEN=EALIST(PRSI)
 | 
|---|
| 193 |  . D DISEA(EAIEN,PRSI)
 | 
|---|
| 194 |  ;
 | 
|---|
| 195 |  Q PRSRET
 | 
|---|
| 196 |  ;
 | 
|---|
| 197 |  ;PRSPEAU
 | 
|---|