| [613] | 1 | IBCNBLA2 ;DAOU/ESG - Ins Buffer, Multiple Selection ;09-SEP-2002 | 
|---|
|  | 2 | ;;2.0;INTEGRATED BILLING;**184**;21-MAR-94 | 
|---|
|  | 3 | ;;Per VHA Directive 10-93-142, this routine should not be modified. | 
|---|
|  | 4 | ; | 
|---|
|  | 5 | ; Can't be called from the top | 
|---|
|  | 6 | Q | 
|---|
|  | 7 | ; | 
|---|
|  | 8 | ; | 
|---|
|  | 9 | MULSEL(TMPARR,IBCNELST,GCNT) ; Multiple entry selection | 
|---|
|  | 10 | ; This procedure is responsible for receiving multiple buffer entries | 
|---|
|  | 11 | ; from the user.  It also validates and locks the selected buffer | 
|---|
|  | 12 | ; entries.  It also reports any buffer entries that could not be | 
|---|
|  | 13 | ; allocated and the reason why not. | 
|---|
|  | 14 | ; | 
|---|
|  | 15 | ; Parameters: | 
|---|
|  | 16 | ;   TMPARR - scratch global input parameter | 
|---|
|  | 17 | ; IBCNELST - output array of entries | 
|---|
|  | 18 | ;            IBCNELST(entry#) = (OK? 0/1)^(error reason)^(buffer ien) | 
|---|
|  | 19 | ;     GCNT - output; number of buffer entries the user got OK | 
|---|
|  | 20 | ; | 
|---|
|  | 21 | NEW OK,ERR,VALMY,IBSELN,IBBUFDA,IBY,TCNT | 
|---|
|  | 22 | NEW DIR,X,Y,DTOUT,DUOUT,DIRUT,DIROUT | 
|---|
|  | 23 | KILL IBCNELST | 
|---|
|  | 24 | S (TCNT,GCNT)=0 | 
|---|
|  | 25 | I $G(TMPARR)="" G MULSELX | 
|---|
|  | 26 | D EN^VALM2($G(XQORNOD(0)),"O")     ; ListMan generic selector | 
|---|
|  | 27 | I '$D(VALMY) G MULSELX | 
|---|
|  | 28 | S IBSELN=0 | 
|---|
|  | 29 | F  S IBSELN=$O(VALMY(IBSELN)) Q:'IBSELN  D  S IBCNELST(IBSELN)=OK_U_ERR_U_IBBUFDA | 
|---|
|  | 30 | . S TCNT=TCNT+1 | 
|---|
|  | 31 | . S OK=0,ERR="This entry is not valid or available." | 
|---|
|  | 32 | . S IBBUFDA=$P($G(^TMP(TMPARR,$J,IBSELN)),U,2,99) Q:'IBBUFDA | 
|---|
|  | 33 | . S IBY=$P($G(^IBA(355.33,IBBUFDA,0)),U,4)    ; buffer status | 
|---|
|  | 34 | . ; | 
|---|
|  | 35 | . ; make sure buffer entry is still in an entered status | 
|---|
|  | 36 | . I IBY'="E" S ERR="This entry has a status of "_$S(IBY="A":"ACCEPTED",IBY="R":"REJECTED",1:"UNKNOWN")_" and cannot be modified." Q | 
|---|
|  | 37 | . ; | 
|---|
|  | 38 | . ; attempt to lock the buffer entry | 
|---|
|  | 39 | . I '$$LOCK^IBCNBU1(IBBUFDA,0,0) S ERR="Another user is currently editing this entry." Q | 
|---|
|  | 40 | . ; | 
|---|
|  | 41 | . ; at this point this entry is OK for processing | 
|---|
|  | 42 | . S OK=1,ERR="",GCNT=GCNT+1 | 
|---|
|  | 43 | . Q | 
|---|
|  | 44 | ; | 
|---|
|  | 45 | ; Exit procedure if the user was able to get all entries | 
|---|
|  | 46 | ; total requested = total allocated | 
|---|
|  | 47 | I TCNT=GCNT G MULSELX | 
|---|
|  | 48 | ; | 
|---|
|  | 49 | ; At this point, some or all of the user selected entries are not | 
|---|
|  | 50 | ; available; build and display a message. | 
|---|
|  | 51 | W !!?3,$$MSG(TCNT,GCNT) | 
|---|
|  | 52 | W !?3,"available for editing at this time:" | 
|---|
|  | 53 | S IBSELN=0 | 
|---|
|  | 54 | F  S IBSELN=$O(IBCNELST(IBSELN)) Q:'IBSELN  I 'IBCNELST(IBSELN) D | 
|---|
|  | 55 | . W !?6,"Entry ",IBSELN,": ",$P(IBCNELST(IBSELN),U,2) | 
|---|
|  | 56 | . Q | 
|---|
|  | 57 | ; | 
|---|
|  | 58 | ; If the user was not able to get any entries, then kill the array | 
|---|
|  | 59 | ; and get out | 
|---|
|  | 60 | I 'GCNT KILL IBCNELST D PAUSE^VALM1 G MULSELX | 
|---|
|  | 61 | ; | 
|---|
|  | 62 | ; Ask the user if they want to continue | 
|---|
|  | 63 | W ! | 
|---|
|  | 64 | S DIR(0)="Y",DIR("A")="   Do you want to continue anyway",DIR("B")="NO" | 
|---|
|  | 65 | D ^DIR K DIR | 
|---|
|  | 66 | I Y G MULSELX     ; user said Yes to continue so get out | 
|---|
|  | 67 | ; | 
|---|
|  | 68 | ; At this point the user doesn't want to continue, so we need to | 
|---|
|  | 69 | ; unlock any buffer entries that may have been locked and then kill | 
|---|
|  | 70 | ; the array so no further processing happens | 
|---|
|  | 71 | S IBSELN=0 | 
|---|
|  | 72 | F  S IBSELN=$O(IBCNELST(IBSELN)) Q:'IBSELN  D | 
|---|
|  | 73 | . I 'IBCNELST(IBSELN) Q               ; user could not get this one | 
|---|
|  | 74 | . S IBBUFDA=$P(IBCNELST(IBSELN),U,3)  ; buffer ien | 
|---|
|  | 75 | . D UNLOCK^IBCNBU1(IBBUFDA)           ; unlock it | 
|---|
|  | 76 | . Q | 
|---|
|  | 77 | KILL IBCNELST                         ; remove the array | 
|---|
|  | 78 | ; | 
|---|
|  | 79 | MULSELX ; | 
|---|
|  | 80 | Q | 
|---|
|  | 81 | ; | 
|---|
|  | 82 | ; | 
|---|
|  | 83 | MSG(TCNT,GCNT) ; build test message | 
|---|
|  | 84 | ; This function builds the first line of the message when not all | 
|---|
|  | 85 | ; selected buffer entries are available. | 
|---|
|  | 86 | ; TCNT - total number selected | 
|---|
|  | 87 | ; GCNT - total number allocated to user successfully | 
|---|
|  | 88 | NEW BCNT,MSG | 
|---|
|  | 89 | S BCNT=TCNT-GCNT     ; number not available to the user | 
|---|
|  | 90 | I TCNT=1,GCNT=0 S MSG="You selected one buffer entry, but it is not" G MSGX | 
|---|
|  | 91 | I TCNT>1,GCNT=0 S MSG="You selected "_TCNT_" buffer entries, but none of them are" G MSGX | 
|---|
|  | 92 | I BCNT=1 S MSG="You selected "_TCNT_" buffer entries, but one of them is not" G MSGX | 
|---|
|  | 93 | S MSG="You selected "_TCNT_" buffer entries, but "_BCNT_" of them are not" | 
|---|
|  | 94 | MSGX ; | 
|---|
|  | 95 | Q MSG | 
|---|
|  | 96 | ; | 
|---|