PXRMLPU ; SLC/PKR/PJH - Reminder Patient List ;10/11/2007 ;;2.0;CLINICAL REMINDERS;**4,6**;Feb 04, 2005;Build 123 ; ;Main entry point for PXRM PATIENT LIST START(MODE) ; N PXRMDONE,VALMBCK,VALMSG,X,XMZ,MODE1 S X="IORESET" D ENDR^%ZISS S VALMCNT=0 D EN^VALM("PXRM PATIENT LIST USER") W IORESET D KILL^%ZISS Q ; ACCESS(IEN,NODE) ; ;Holders of the PXRM MANAGER key have full access to all lists. ;DBIA #10076 I $D(^XUSEC("PXRM MANAGER",DUZ)) Q "F" N ACCESS,TYPE I $G(NODE)="" S NODE=$G(^PXRMXP(810.5,IEN,0)) S TYPE=$P(NODE,U,8) I TYPE="" Q "F" I TYPE="PUB" Q "F" I $P(NODE,U,7)=DUZ Q "F" S ACCESS="N" I TYPE="PVT",$D(^PXRMXP(810.5,IEN,40,"B",DUZ)) D . N USIEN,STATUS . S USIEN=$O(^PXRMXP(810.5,IEN,40,"B",DUZ,"")) . S ACCESS=$S(USIEN="":"N",1:$P(^PXRMXP(810.5,IEN,40,USIEN,0),U,2)) Q ACCESS ; BLDLIST ; N PLIST K ^TMP("PXRMLPU",$J) K ^TMP("PXRMLPUH",$J) S PLIST="PXRMLPU" D LIST(MODE,PLIST) S VALMCNT=+$G(^TMP("PXRMLPU",$J,"VALMCNT")) Q ; ENTRY ;Entry code ;MODE=0 ORDER BY NAME ;MODE=1 ORDER BY TYPE I $G(MODE)'>0 S MODE=0 D BLDLIST,XQORM Q ; EXIT ;Exit code K ^TMP("PXRMLPU",$J) K ^TMP("PXRMLPUH",$J) D CLEAN^VALM10 D FULL^VALM1 S VALMBCK="R" Q ; HDR ; Header code N NAME S VALMHDR(1)="Available Patient Lists." Q ; HELP(CALL) ;General help text routine N HTEXT I CALL=1 D .S HTEXT(1)="Select CO to copy the patient list.\\" .S HTEXT(2)="Select COE to copy the patient list to an OE/RR Team.\\" .S HTEXT(3)="Select DE to delete the patient list.\\" .S HTEXT(4)="Select DCD to display creation documentation.\\" .S HTEXT(5)="Select DSP to display the patient list.\\" D HELP^PXRMEUT(.HTEXT) Q ; HLP ;Help code N ORU,ORUPRMT,SUB,XQORM S SUB="PXRMLPUH" D EN^VALM("PXRM PATIENT LIST HELP") Q ; INIT ;Init S VALMCNT=0 Q ; LIST(MODE,PLIST) ;Build a list of patient list entries. N ACCESS,COUNT,DATA,DATE,IND,FMTSTR,FNAME,OUTPUT,NAME,NL,NUM N STR,SUB,TYPE S FMTSTR=$$LMFMTSTR^PXRMTEXT(.VALMDDF,"RLLRRC") ;MODE=0 build list in alphabetical order ;MODE=1 build list by type of list. K ^TMP($J,PLIST),^TMP(PLIST,$J) S VALMCNT=0,NAME="",NUM=0,TYPE="" F S NAME=$O(^PXRMXP(810.5,"B",NAME)) Q:NAME="" D .S IND="" F S IND=$O(^PXRMXP(810.5,"B",NAME,IND)) Q:'IND D ..S DATA=$G(^PXRMXP(810.5,IND,0)) ..S ACCESS=$$ACCESS(IND,DATA) ..I ACCESS="N" Q ..S FNAME=$P($G(DATA),U),DATE=$P($G(DATA),U,4) ..S COUNT=+$P($G(^PXRMXP(810.5,IND,30,0)),U,4) ..S TYPE=$P(DATA,U,8) ..S SUB=$S(MODE=0:"NAME",1:TYPE) ..S ^TMP($J,PLIST,SUB,FNAME)=IND_U_DATE_U_COUNT_U_TYPE_U_ACCESS I '$D(^TMP($J,PLIST)) Q ;Loop through ARRAY to populate the output list ;sub is either the type of list or 'NAME'. If sort is ;by TYPE show PVT lists first. S SUB="" F S SUB=$O(^TMP($J,PLIST,SUB),-1) Q:SUB="" D . S FNAME="" . F S FNAME=$O(^TMP($J,PLIST,SUB,FNAME)) Q:FNAME="" D .. S DATA=^TMP($J,PLIST,SUB,FNAME),NUM=NUM+1 .. S ^TMP("PXRMLPU",$J,"SEL",NUM)=$P(DATA,U,1) .. S DATE=$P(DATA,U,2),DATE=$$FMTE^XLFDT(DATE,2) .. S $P(DATA,U,2)=DATE .. S STR=NUM_U_FNAME_U_$P(DATA,U,2,5) .. D COLFMT^PXRMTEXT(FMTSTR,STR," ",.NL,.OUTPUT) .. F IND=1:1:NL D ... S VALMCNT=VALMCNT+1,^TMP(PLIST,$J,VALMCNT,0)=OUTPUT(IND) ... S ^TMP("PXRMLPU",$J,"IDX",VALMCNT,NUM)="" S ^TMP(PLIST,$J,"VALMCNT")=VALMCNT K ^TMP($J,PLIST) Q ; PCOPY ;Patient list copy S SUB="PXRMLPU" D PCOPY1(SUB) D BLDLIST S VALMBCK="R" Q ; PCOPY1(SUB) ; ;Full Screen W IORESET N IND,LISTIEN,VALMY D EN^VALM2(XQORNOD(0)) ;If there is no list quit. I '$D(VALMY) Q S IND="",PXRMDONE=0 F S IND=$O(VALMY(IND)) Q:(+IND=0)!(PXRMDONE) D .;Get the patient list ien. .S LISTIEN=^TMP(SUB,$J,"SEL",IND) .D COPY^PXRMRUL1(LISTIEN) Q ; PDELETE ;Patient list delete ;Full Screen W IORESET N DELOK,IND,LISTIEN,NODE,VALMY D EN^VALM2(XQORNOD(0)) ;If there is no list quit. I '$D(VALMY) Q S IND="",PXRMDONE=0 F S IND=$O(VALMY(IND)) Q:(+IND=0)!(PXRMDONE) D .;Get the patient list ien. .S LISTIEN=^TMP("PXRMLPU",$J,"SEL",IND) .S NODE=$G(^PXRMXP(810.5,LISTIEN,0)) .S DELOK=$$LDELOK^PXRMEUT(LISTIEN) .I DELOK D DELETE^PXRMRUL1(LISTIEN) Q .E D Q ..W !,"In order to delete a list you must be the creator or a Reminder Manager!" ..S PXRMDONE=1 H 2 D BLDLIST S VALMBCK="R" Q ; PEXIT ;Protocol exit code S VALMSG="+ Next Screen - Prev Screen ?? More Actions" ;Reset after page up/down etc D XQORM Q ; POERR ;Patient list copy to OERR Team (#101.21) ;Full Screen W IORESET N ACCESS,IND,LISTIEN,NODE,USIEN,VALMY D EN^VALM2(XQORNOD(0)) ;If there is no list quit. I '$D(VALMY) Q S IND="",PXRMDONE=0 F S IND=$O(VALMY(IND)) Q:(+IND=0)!(PXRMDONE) D .;Get the patient list ien. .S LISTIEN=^TMP("PXRMLPU",$J,"SEL",IND) .S NODE=$G(^PXRMXP(810.5,LISTIEN,0)) .S ACCESS=$$ACCESS^PXRMLPU(LISTIEN,NODE) .I ACCESS="F" D OERR^PXRMLPOE(LISTIEN) .I ACCESS="N" D ..W !,"The list cannot be copied; you must have full access to copy the list to an OE/RR team!" ..S PXRMDONE=1 H 2 S VALMBCK="R" Q ; PLIST ;Patient list inquiry. N CREAT,NAME,IND,LISTIEN,USIEN,VALMY,CREAT,NODE,TRUE D EN^VALM2(XQORNOD(0)) ;If there is no list quit. I '$D(VALMY) Q ;PXRMDONE is newed in PXRMLPU S PXRMDONE=0 S IND="" F S IND=$O(VALMY(IND)) Q:(+IND=0)!(PXRMDONE) D .S LISTIEN=^TMP("PXRMLPU",$J,"SEL",IND) .D START^PXRMLPP(LISTIEN) D BLDLIST S VALMBCK="R" Q ; VIEW ; D FULL^VALM1 N DIR,DTOUT,DUOUT,DIROUT,DIROUT,Y S DIR(0)="SO^N:NAME;T:TYPE" S DIR("A")="Select View Type" D ^DIR I $D(DTOUT),$D(DUOUT),$D(DIROUT) Q I Y="N" S MODE=0 D ENTRY I Y="T" S MODE=1 D ENTRY Q ; XQORM ; S XQORM("#")=$O(^ORD(101,"B","PXRM PATIENT LIST USER SELECT ENTRY",0))_U_"1:"_VALMCNT S XQORM("A")="Select Item: " Q ; XSEL ;SELECT validation N EPIEN,LEVEL,LISTIEN,LRIEN,NODE,SEL S SEL=$P(XQORNOD(0),"=",2) ;Remove trailing , I $E(SEL,$L(SEL))="," S SEL=$E(SEL,1,$L(SEL)-1) ;Invalid selection I SEL["," D Q .W $C(7),!,"Only one item number allowed." H 2 .S VALMBCK="R" I ('SEL)!(SEL>VALMCNT)!('$D(@VALMAR@("SEL",SEL))) D Q .W $C(7),!,SEL_" is not a valid item number." H 2 .S VALMBCK="R" ; ;Get the patient list ien S LISTIEN=^TMP("PXRMLPU",$J,"SEL",SEL) ;Get extract definition ien (if present) S EPIEN=$P($G(^PXRMXP(810.5,LISTIEN,0)),U,5) ;Get list rule ien S LRIEN=$P($G(^PXRMXP(810.5,LISTIEN,0)),U,6) S NODE=$G(^PXRMXP(810.5,LISTIEN,0)) ; ;Full screen mode D FULL^VALM1 ; ;Option to Install, Delete or Install History N ACCESS,DELOK,DIR,OPTION,RIEN,X,Y K DIROUT,DIRUT,DTOUT,DUOUT S ACCESS=$$ACCESS(LISTIEN,NODE) S DELOK=$$LDELOK^PXRMEUT(LISTIEN) S DIR(0)="SBM"_U_"CO:Copy Patient List;" S DIR(0)=DIR(0)_"COE:Copy to OE/RR Team;" I DELOK S DIR(0)=DIR(0)_"DE:Delete Patient List;" S DIR(0)=DIR(0)_"DCD:Display Creation Documentation;" S DIR(0)=DIR(0)_"DSP:Display Patient List;" S DIR("A")="Select Action: " S DIR("B")="DSP" S DIR("?")="Select from the codes displayed. For detailed help type ??" S DIR("??")=U_"D HELP^PXRMLPU(1)" D ^DIR K DIR I $D(DIROUT) S DTOUT=1 I $D(DTOUT)!($D(DUOUT)) S VALMBCK="R" Q S OPTION=Y ; I $G(OPTION)="" G XSELE ; ;Copy patient list I OPTION="CO" D COPY^PXRMRUL1(LISTIEN) Q:$D(DUOUT)!$D(DTOUT) ; ;Copy to OE/RR Team I OPTION="COE" D OERR^PXRMLPOE(LISTIEN) Q:$D(DUOUT)!$D(DTOUT) ; ;Delete patient list I OPTION="DE" D PDELETE ; ;Display creation documentation I OPTION="DCD" D EN^PXRMLCD(LISTIEN) ; ;Display patient list I OPTION="DSP" D START^PXRMLPP(LISTIEN) ; XSELE ; D CLEAN^VALM10 D BLDLIST,XQORM S VALMBCK="R" Q