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