| 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 | 
|---|