1 | PRSPESR ;WOIFO/JAH - part-time physicians ESR Edit ;11/16/04
|
---|
2 | ;;4.0;PAID;**93**;Sep 21, 1995;Build 7
|
---|
3 | ;;Per VHA Directive 2004-038, this routine should not be modified.
|
---|
4 | ;
|
---|
5 | ;Allow PTP employee w/ a memorandum to review memo status
|
---|
6 | ;then edit, update, and sign daily ESRs.
|
---|
7 | ;call from option-"Electronic Subsidiary Record".
|
---|
8 | Q
|
---|
9 | ;
|
---|
10 | MAIN ; main entry point called from ESR edit option
|
---|
11 | N PICKLIST,PRSIEN,OUT,PLIST,PICK
|
---|
12 | ;
|
---|
13 | ;get users PRSIEN
|
---|
14 | S PRSIEN=$$PRSIEN^PRSPUT2(1)
|
---|
15 | Q:PRSIEN'>0
|
---|
16 | ;
|
---|
17 | ;While PTP is not done continue
|
---|
18 | ;
|
---|
19 | S OUT=0
|
---|
20 | F D Q:OUT
|
---|
21 | .; BUILD OPTION PICK LIST--MEMO ACTIONS, PRIOR, CURRENT AND NEXT PP ESRs
|
---|
22 | .;
|
---|
23 | .;
|
---|
24 | . K PLIST
|
---|
25 | . D BLDPICK(.PLIST,PRSIEN)
|
---|
26 | .;
|
---|
27 | . W @IOF,!
|
---|
28 | .; get out if there's nothing in the list.
|
---|
29 | . I '$D(PLIST) D Q
|
---|
30 | .. W !,"No ESR records available.",!!!
|
---|
31 | .. S OUT=$$ASK^PRSLIB00(1)
|
---|
32 | .. S OUT=1
|
---|
33 | .; get users choice of action
|
---|
34 | . S PICK=$$CHOICE(.PLIST)
|
---|
35 | . I PICK=0 S OUT=1 Q
|
---|
36 | . I $P(PLIST(PICK),U)="M" D MEMO(PRSIEN,PLIST(PICK)) ;### CALL MEMO OPTION
|
---|
37 | . I "NCP"[$P(PLIST(PICK),U) D
|
---|
38 | .. ;Make sure we have a signature code before continuing
|
---|
39 | .. I '$$ESIGC^PRSPUT2(1) W !! S OUT=$$ASK^PRSLIB00(1) Q
|
---|
40 | .. ;
|
---|
41 | .. D ESR(PRSIEN,$P(PLIST(PICK),U,2),$P(PLIST(PICK),U,3),.OUT)
|
---|
42 | ;
|
---|
43 | Q
|
---|
44 | BLDPICK(PL,PRSIEN) ; Build option pick list with memo, prior ESR,
|
---|
45 | ; current ESR and next ESR actions in the PL array
|
---|
46 | ;PPE,I - current Pay period (E)xternal (I)nternal entry #
|
---|
47 | ;NXPPE
|
---|
48 | ;PI - picklist counter/array subscript
|
---|
49 | ;MAI - memo action counter
|
---|
50 | ;AMIEN - active memo ien for a prior pay period
|
---|
51 | ;Get any actions required for Memorandum.
|
---|
52 | N PI,PPE,NXPPE,MIEN,MAI,PPDT1,AMIEN,MTXT,RANGE,FR,TO,PRTXT
|
---|
53 | S PI=0
|
---|
54 | ; get array of memos with status reconcile started
|
---|
55 | ; this may need to be replaced with API call ###
|
---|
56 | D GETMEMOS(.MIEN,PRSIEN,3)
|
---|
57 | I $G(MIEN(0))>0 D
|
---|
58 | . S MAI=0
|
---|
59 | . F S MAI=$O(MIEN(MAI)) Q:MAI'>0 D
|
---|
60 | .. Q:$P($G(^PRST(458.7,MAI,2)),U)>0
|
---|
61 | .. S PI=PI+1,PL(PI)=$$BLDMACT(MAI,MIEN(MAI))
|
---|
62 | ;
|
---|
63 | ;Travel ESR status xref (<4) )for incomplete ESR days
|
---|
64 | ;
|
---|
65 | S PRTXT="Edit ESR for PRIOR pay period "
|
---|
66 | S PPE=""
|
---|
67 | F S PPE=$O(^PRST(458,"AEA",PRSIEN,PPE)) Q:PPE="" D
|
---|
68 | . S PPI=$O(^PRST(458,"B",PPE,0))
|
---|
69 | . Q:PPI'>0
|
---|
70 | .;### call to active memo API to determine if pp should be edited
|
---|
71 | .; Get 1st day of pp
|
---|
72 | . D NX^PRSAPPU S PPDT1=D1
|
---|
73 | . S AMIEN=+$$MIEN^PRSPUT1(PRSIEN,PPDT1)
|
---|
74 | . I AMIEN>0 D
|
---|
75 | .. S PI=PI+1
|
---|
76 | .. S RANGE=$G(^PRST(458,PPI,2))
|
---|
77 | .. S FR=$P(RANGE,U,1),TO=$P(RANGE,U,14)
|
---|
78 | .. S MTXT=PRTXT_PPE_" ["_FR_" - "_TO_"]"
|
---|
79 | .. S PL(PI)="P^"_PPI_"^"_AMIEN_U_MTXT
|
---|
80 | ;
|
---|
81 | ; current pay period to list, overwrite PI array if current
|
---|
82 | ; pay period is also a prior pay period selection already
|
---|
83 | N PPE,PPI,PP4Y,DAY,D1,PPDT1,AMIEN,OVRITE
|
---|
84 | S (PPDT1,D1)=DT D PP^PRSAPPU
|
---|
85 | I PPI'="" D
|
---|
86 | . S OVRITE=$$PPICHK(.PL,PPI)
|
---|
87 | . I OVRITE>0 S PI=OVRITE
|
---|
88 | . E S PI=PI+1
|
---|
89 | . S AMIEN=+$$MIEN^PRSPUT1(PRSIEN,PPDT1)
|
---|
90 | . I AMIEN>0 D
|
---|
91 | .. S RANGE=$G(^PRST(458,PPI,2))
|
---|
92 | .. S FR=$P(RANGE,U,1),TO=$P(RANGE,U,14)
|
---|
93 | .. S MTXT="Edit ESR for CURRENT pay period "_PPE_" ["_FR_" - "_TO_"]"
|
---|
94 | .. S PL(PI)="C^"_PPI_U_AMIEN_U_MTXT
|
---|
95 | ;
|
---|
96 | ; add next pay period to list if open and covered by memo
|
---|
97 | S PPE=$E($$NXTPP^PRSAPPU(PPE),3,7)
|
---|
98 | D NX^PRSAPPU S PPDT1=D1
|
---|
99 | I $D(^PRST(458,"B",PPE)) D
|
---|
100 | . S PPI=$O(^PRST(458,"B",PPE,0))
|
---|
101 | . S AMIEN=+$$MIEN^PRSPUT1(PRSIEN,PPDT1)
|
---|
102 | . I AMIEN>0 D
|
---|
103 | .. S OVRITE=$$PPICHK(.PL,PPI)
|
---|
104 | .. I OVRITE>0 S PI=OVRITE
|
---|
105 | .. E S PI=PI+1
|
---|
106 | .. S RANGE=$G(^PRST(458,PPI,2))
|
---|
107 | .. S FR=$P(RANGE,U,1),TO=$P(RANGE,U,14)
|
---|
108 | .. S MTXT="Edit ESR for NEXT pay period "_PPE_" ["_FR_" - "_TO_"]"
|
---|
109 | .. S PL(PI)="N^"_PPI_"^"_AMIEN_U_MTXT
|
---|
110 | ;
|
---|
111 | Q
|
---|
112 | ;
|
---|
113 | PPICHK(PRIARY,PPCH) ; Check if Current or next is already in prior array
|
---|
114 | ; RETURN PPI IF FOUND
|
---|
115 | N FOUND,PRNODE
|
---|
116 | S FOUND=0,PRNODE=99
|
---|
117 | F S PRNODE=$O(PRIARY(PRNODE),-1) Q:(PRNODE'>0)!(FOUND>0) D
|
---|
118 | . I PPCH=$P($G(PRIARY(PRNODE)),U,2) S FOUND=PRNODE
|
---|
119 | Q FOUND
|
---|
120 | ;
|
---|
121 | BLDMACT(MIEN,ZNODE) ;with zero node of memo build the item screen
|
---|
122 | ; Sample appearance for menu item
|
---|
123 | N SDT,EDT,TDT,Y,MENUTXT
|
---|
124 | S MENUTXT="M^"_MIEN_"^^Reconcile Prior Memorandum from "
|
---|
125 | ; Reconcile Prior Memorandum from JUL 2004 TO JUL 2005
|
---|
126 | S SDT=$P(ZNODE,U),EDT=$P(ZNODE,U,2),TDT=$P(ZNODE,U,3)
|
---|
127 | I $G(TDT)>0,($G(TDT)<$G(EDT)) S EDT=TDT
|
---|
128 | S Y=SDT D DD^%DT S SDT=Y
|
---|
129 | S Y=EDT D DD^%DT S EDT=Y
|
---|
130 | S MENUTXT=MENUTXT_SDT_" TO "_EDT
|
---|
131 | Q MENUTXT
|
---|
132 | CHOICE(PL,DEF) ; return users choice from array of items in PL
|
---|
133 | ; return 0 for abort
|
---|
134 | N ITEM,ICNT,DIR,DIRUT
|
---|
135 | S ICNT=0
|
---|
136 | I $G(DEF)>0,($G(PL(DEF))'="") D
|
---|
137 | . S DIR("B")=DEF
|
---|
138 | S ITEM=0
|
---|
139 | F S ITEM=$O(PL(ITEM)) Q:ITEM'>0 D
|
---|
140 | . S DIR("A",ITEM)=ITEM_". "_$P($G(PL(ITEM)),U,4)
|
---|
141 | . S ICNT=ICNT+1
|
---|
142 | S DIR(0)="NO^1:"_ICNT_":0"
|
---|
143 | S DIR("A")="Select an Item "
|
---|
144 | D ^DIR
|
---|
145 | S PICK=+$G(Y)
|
---|
146 | I $G(DIRUT) S PICK=0
|
---|
147 | Q PICK
|
---|
148 | ;
|
---|
149 | GETMEMOS(MIEN,PRSIEN,MSTAT) ; Return IEN subscripted array of
|
---|
150 | ; memorandums in a single status (MSTAT)
|
---|
151 | ; INPUT: EMPLOYEE IEN (PRSIEN)
|
---|
152 | ; STATUS OF MEMORANDUM desired (MSTAT)
|
---|
153 | ; 1:NOT STARTED; 2:ACTIVE; 3:RECONCILIATION STARTED;
|
---|
154 | ; 4:RECONCILED;
|
---|
155 | ; OUTPUT: returns MIEN array as follows:
|
---|
156 | ; MIEN(0) = 0 when no reconcile actions:
|
---|
157 | ; OR
|
---|
158 | ; MIEN(0) = integer # of memos that requires reconcile action:
|
---|
159 | ; MIEN(IEN 1)=start date^end date^termination date
|
---|
160 | ; MIEN(IEN n)=start date n ^end date n ^termination date n
|
---|
161 | N ZNODE,TDT,TMPMIEN
|
---|
162 | S MIEN(0)=0
|
---|
163 | Q:$G(MSTAT)'>0!($G(PRSIEN)'>0)
|
---|
164 | S TMPMIEN=0
|
---|
165 | F S TMPMIEN=$O(^PRST(458.7,"AST",PRSIEN,MSTAT,TMPMIEN)) Q:TMPMIEN'>0 D
|
---|
166 | . S ZNODE=$G(^PRST(458.7,TMPMIEN,0))
|
---|
167 | . S TDT=$P($G(^PRST(458.7,TMPMIEN,4)),U)
|
---|
168 | . S MIEN(TMPMIEN)=$P(ZNODE,U,2)_"^"_$P(ZNODE,U,3)_"^"_TDT
|
---|
169 | . S MIEN(0)=MIEN(0)+1
|
---|
170 | Q
|
---|
171 | ;
|
---|
172 | MEMO(PRSIEN,LIST) ; CALL OPTION TO RECONCILE A MEMO
|
---|
173 | ;INPUT : PRSIEN-user 450 ien, LIST-pick list array item for memo
|
---|
174 | N OUT,MIEN
|
---|
175 | S MIEN=$P(LIST,U,2)
|
---|
176 | D MAIN^PRSPSRC(PRSIEN,MIEN)
|
---|
177 | S OUT=$$ASK^PRSLIB00()
|
---|
178 | Q
|
---|
179 | ESR(PRSIEN,PPI,MIEN,OUT) ; DISPLAY PAY PERIOD AND ASK USER TO PICK A DAY
|
---|
180 | ; WHEN THEY PICK A DAY CALL code to start up a ScreenMan
|
---|
181 | ; form for the day record
|
---|
182 | N ESRDAY
|
---|
183 | S OUT=0
|
---|
184 | F D Q:(ESRDAY'>0)
|
---|
185 | . W @IOF
|
---|
186 | . D WSS(PRSIEN,PPI,MIEN)
|
---|
187 | . S ESRDAY=$$WHICHDAY(PPI,PRSIEN)
|
---|
188 | . I $$CANPOST(PPI,PRSIEN,ESRDAY,1) D ESRFRM^PRSPESR1(PRSIEN,PPI,ESRDAY)
|
---|
189 | I ESRDAY<0 S OUT=1
|
---|
190 | Q
|
---|
191 | CANPOST(PPI,PRSIEN,PRSD,SHMSG) ; Can this day be posted by a PTP?
|
---|
192 | ; i show message set to 1 then show message on can't post
|
---|
193 | N CANPOST
|
---|
194 | S CANPOST=0
|
---|
195 | Q:$G(PRSD)'>0 CANPOST
|
---|
196 | N TCSTAT,DUM,ESRSTAT,TCSTAT,TOUR
|
---|
197 | S CANPOST=1
|
---|
198 | ;
|
---|
199 | S TOUR=$P($G(^PRST(458,PPI,"E",PRSIEN,"D",PRSD,0)),U,2)
|
---|
200 | I TOUR'>0 S CANPOST=0 D Q CANPOST
|
---|
201 | . I 'CANPOST&($G(SHMSG)>0) D
|
---|
202 | .. W @IOF,!!!,"A Tour of Duty must be entered first. Please contact your timekeeper.",!!
|
---|
203 | .. S DUM=$$ASK^PRSLIB00(1)
|
---|
204 | ;
|
---|
205 | S ESRSTAT=$$GETSTAT^PRSPESR1(PRSIEN,PPI,PRSD)
|
---|
206 | S TCSTAT=$$TCSTAT^PRSPSAP2(PPI,PRSIEN)
|
---|
207 | I TCSTAT'="T" S CANPOST=(ESRSTAT<5) D
|
---|
208 | . I 'CANPOST&($G(SHMSG)>0) D
|
---|
209 | .. W @IOF,!!!,"Only select days with status 'Not Started, 'Pending', 'Signed', or 'Resubmit'."
|
---|
210 | .. W !,"To edit approved days or days off, contact your Time and Leave Supervisor.",!!
|
---|
211 | .. S DUM=$$ASK^PRSLIB00(1)
|
---|
212 | Q CANPOST
|
---|
213 | ;
|
---|
214 | WSS(PRSIEN,PPI,MIEN) ; WORK SUMMARY SCREEN
|
---|
215 | N SCRTTL
|
---|
216 | S SCRTTL="Work Summary Screen for Part Time VA Physician "
|
---|
217 | D HDR^PRSPUT1(PRSIEN,SCRTTL,,,PPI)
|
---|
218 | D MEM^PRSPUT1(PRSIEN,MIEN)
|
---|
219 | D AL^PRSPUT3(PRSIEN,)
|
---|
220 | D ESRSTAT^PRSPUT2(PRSIEN,PPI)
|
---|
221 | Q
|
---|
222 | WHICHDAY(PPI,PRSIEN,DEF) ; ASK USER TO SELECT A PAY PERIOD DAY
|
---|
223 | ; return 0 for abort OR -1 for double abort "^^"
|
---|
224 | N DIR,DIRUT,TCSTAT,I
|
---|
225 | S DIR(0)="NO^1:14:0"
|
---|
226 | I $G(DEF)>0 S DIR("B")=DEF
|
---|
227 | S DIR("A")="Select day "
|
---|
228 | D ^DIR
|
---|
229 | I $G(DIRUT) D
|
---|
230 | . S PICK=$S($G(Y)["^^":-1,1:0)
|
---|
231 | E D
|
---|
232 | . S PICK=$G(Y)
|
---|
233 | Q PICK
|
---|
234 | Q
|
---|