PSAORDP ;BIR/JMB-Print Orders ;9/19/97
;;3.0; DRUG ACCOUNTABILITY/INVENTORY INTERFACE;**7**; 10/24/97
;This routine selects the orders, invoices, or invoice status to be
;printed from the DRUG ACCOUNTABILITY ORDERS. It calls PSAORDP1 to
;print processed invoices and ^PSAUP4 to print unprocessed invoices.
;
I '$D(^XUSEC("PSA ORDERS",DUZ)) W !,"You do not hold the key to enter the option." Q
START W !! S DIR(0)="S^O:Order Number;I:Invoice Number;S:Invoice Status",DIR("A")="Print by Order#, Invoice#, or Invoice Status",DIR("B")="O",DIR("??")="^D SELHELP^PSAORDP" D ^DIR K DIR
Q:$G(DIRUT) S PSAPRT=Y,PSAOUT=0
D:PSAPRT="O" ORDER D:PSAPRT="I" INVOICE D:PSAPRT="S" STATUS G:PSAOUT EXIT
I PSAPRT="O"!(PSAPRT="I"),$O(PSAORD(""))="" G EXIT
W ! S %ZIS="Q" D ^%ZIS G:POP EXIT
I $D(IO("Q")) D G EXIT
.S ZTDESC="Drug Acct. - Print Prime Vendor Invoices",ZTRTN="DQ^PSAORDP"
.F PSASAVE="PSAINV","PSAPRT","PSASTA" S:$D(@PSASAVE) ZTSAVE(PSASAVE)=""
.S ZTSAVE("PSAORD(")="" D ^%ZTLOAD
;
DQ S PSAOUT=0
I PSAPRT="O" D PRTORD G EXIT
I PSAPRT="I" D PRTINV G EXIT
D:PSAPRT="S" PRTSTA
;
EXIT W:$E(IOST,1,2)="C-" @IOF D ^%ZISC S:$D(ZTQUEUED) ZTREQ="@" K IO("Q")
K %,%ZIS,DA,DIC,DTOUT,DUOUT,PSA,PSAAECST,PSABY,PSACIEN,PSACNT,PSACTRL,PSACTRLH,PSADATA,PSADEC,PSADJDRG,PSADJSUP,PSADLN,PSADONE,PSADRG,PSADS
K PSAECOST,PSAEND,PSAFIN,PSAFIRST,PSAFPG,PSAICOST,PSAIECST,PSAIN,PSAINV,PSAINVB,PSAINVBH,PSAINVH,PSALINE,PSANDC,PSAORD,PSAORDB,PSAOUT,PSAPAGE,PSAPC,PSAPRT,PSARUN
K PSAS,PSASAVE,PSASLN,PSASS,PSAST,PSASTA,PSASUB,PSATOT,PSAXCNT,X,ZTDESC,ZTRTN,ZTSAVE
Q
;
INVOICE ;Prompts for order and invoice
K PSAORD S (PSACNT,PSADONE,PSAFIN,PSAXCNT)=0,PSASLN="",$P(PSASLN,"-",80)=""
F W !,PSASLN S DIR(0)="FO^1:22",DIR("A")="Select ORDER NUMBER",DIR("?")="Enter the order number of the invoice to be printed",DIR("??")="^D ORDIHELP^PSAORDP" D ^DIR K DIR D Q:PSAOUT!(PSAFIN)
.S PSAORDB=Y I $G(DTOUT)!($G(DUOUT)) S PSAOUT=1 Q
.I PSAORDB="" S PSAFIN=1 Q
.Q:PSAORDB=" "
.;In 58.811
.I $O(^PSD(58.811,"B",PSAORDB,0)) S PSAORD=+$O(^PSD(58.811,"B",PSAORDB,0)),PSAINVB="" D
..F S PSAINVB=$O(^PSD(58.811,PSAORD,1,"B",PSAINVB)) Q:PSAINVB="" S PSACNT=PSACNT+1,(PSAINV,PSAINVH)=$O(^PSD(58.811,PSAORD,1,"B",PSAINVB,0)),PSAINVBH=PSAINVB
.;In XTMP
.Q:PSAOUT S (PSACTRL,PSADONE)=0
.F S PSACTRL=$O(^XTMP("PSAPV",PSACTRL)) Q:PSACTRL=""!(PSADONE) D
..I $P($G(^XTMP("PSAPV",PSACTRL,"IN")),"^",4)=PSAORDB S PSAXCNT=PSAXCNT+1,(PSAINVH,PSAINVB)=$P(^("IN"),"^",2),PSACTRLH=PSACTRL,PSA(PSAORDB,PSAINVB,PSACTRL)=""
.Q:PSAOUT
.I PSACNT,'PSAXCNT D Q
..I PSACNT=1 W !,"Invoice# "_PSAINVBH S PSAORD(PSAORDB,PSAORD)=PSAINVH Q
..D:PSACNT>1 INV
.I 'PSACNT,PSAXCNT D Q
..I PSAXCNT=1 W !,"Invoice# "_PSAINVH S PSAORD(PSAORDB,0)=PSAINVH_"~"_PSACTRLH,PSACTRL=PSACTRLH Q
..D:PSAXCNT>1 INVXTMP
.I PSACNT,PSAXCNT D INVBOTH Q
.I '$D(PSAORD(PSAORDB)) W !,PSAORDB_" is an invalid order number."
Q
;
INV ;Select invoice from 58.811
S (PSACNT,PSADONE)=0
F S DA(1)=PSAORD,DIC="^PSD(58.811,"_DA(1)_",1,",DIC("A")="Select INVOICE NUMBER: ",DIC(0)="AEMZQ",DA(1)=PSAORD D ^DIC K DIC D Q:PSAOUT!(PSADONE)
.I $G(DTOUT)!($G(DUOUT)) S PSAOUT=1 Q
.I Y=-1 S PSADONE=1 Q
.I 'PSACNT S PSAORD(PSAORDB,PSAORD)=+Y,PSACNT=1 Q
.I PSACNT S PSAORD(PSAORDB,PSAORD)=PSAORD(PSAORDB,PSAORD)_","_+Y
Q
;
INVXTMP ;Select invoice from XTMP
S (PSAXCNT,PSADONE)=0,PSAFIRST=1
F S DIR(0)="FO^1:22",DIR("A")="Select INVOICE NUMBER" D ^DIR K DIR D Q:PSAOUT!(PSADONE)
.I $G(DTOUT)!($G(DUOUT)) S PSAOUT=1 Q
.I Y="" S PSADONE=1 Q
.Q:Y=" " S PSAINV=Y
.I 'PSAXCNT S PSAORD(PSAORDB,0)=Y_"~"_PSACTRLH,PSAXCNT=1 Q
.I PSAXCNT S PSAORD(PSAORDB,0)=PSAORD(PSAORDB,0)_","_Y Q
Q
;
INVBOTH ;Select invoice from XTMP & 58.811
S (PSADONE)=0
F S DIR(0)="FO^1:22",DIR("A")="Select INVOICE NUMBER" D ^DIR K DIR D Q:PSAOUT!(PSADONE)
.I $G(DTOUT)!($G(DUOUT)) S PSAXCNT=1 Q
.Q:Y=" "
.I Y="" S PSADONE=1 Q
.S PSAINVB=Y,PSAINV=$O(^PSD(58.811,PSAORD,1,"B",PSAINVB,0))
.I PSAINV S:$D(PSAORD(PSAORDB,PSAORD)) PSAORD(PSAORDB,PSAORD)=PSAORD(PSAORDB,PSAORD)_","_PSAINV S:'$D(PSAORD(PSAORDB,PSAORD)) PSAORD(PSAORDB,PSAORD)=PSAINV Q
.I $D(PSA(PSAORDB,PSAINVB)) S PSACTRL=$O(PSA(PSAORDB,PSAINVB,0)) I PSACTRL'="" S:$D(PSAORD(PSAORDB,0)) PSAORD(PSAORDB,0)=PSAORD(PSAORDB,0)_","_PSAINVB_"~"_PSACTRL S:'$D(PSAORD(PSAORDB,0)) PSAORD(PSAORDB,0)=PSAINVB_"~"_PSACTRL Q
.W !,PSAINVB_" is an invalid invoice number."
Q
;
PRTINV ;Loops thru orders & invoices to print invoices
S PSAORDB="" F S PSAORDB=$O(PSAORD(PSAORDB)) Q:PSAORDB=""!(PSAOUT) D
.S PSAORD="" F S PSAORD=$O(PSAORD(PSAORDB,PSAORD)) Q:PSAORD=""!(PSAOUT) D
..F PSAPC=1:1 S PSAINV=$P(PSAORD(PSAORDB,PSAORD),",",PSAPC) Q:PSAINV=""!(PSAOUT) D
...I PSAORD D ^PSAORDP1 Q
...;DAVEB (PSA*3*7)
...S PSACTRL=$P(PSAINV,"~",2),PSAINV=$P(PSAINV,"~"),IOM=80
...I $D(PSA(PSAORDB,$P(PSAINV,"~"))) S PSAINV=$P(PSAINV,"~"),PSACTRL=$O(PSA(PSAORDB,PSAINV,0))
...D NOW^%DTC S Y=% D DD^%DT S PSARUN=$E(Y,1,18),PSAPAGE=1,$P(PSASLN,"-",80)="",$P(PSADLN,"=",80)="",PSADJDRG=0,PSAFPG=1
...D START^PSAUP4
Q
;
ORDER ;Select order
K PSAORD S PSADONE=0
F W ! S DIR(0)="FO^1:22",DIR("A")="Select ORDER NUMBER",DIR("?")="Enter the number of the order to be printed",DIR("??")="^D ORDHELP^PSAORDP" D ^DIR K DIR D Q:PSAOUT!(PSADONE)
.I $G(DTOUT)!($G(DUOUT)) S PSAOUT=1 Q
.Q:X=" "
.I X="" S PSADONE=1 Q
.I $O(^PSD(58.811,"B",Y,0)) S PSAORD(Y,+$O(^PSD(58.811,"B",Y,0)))=""
.S PSACTRL=0 F S PSACTRL=$O(^XTMP("PSAPV",PSACTRL)) Q:PSACTRL=""!(PSADONE) I $P($G(^XTMP("PSAPV",PSACTRL,"IN")),"^",4)=Y S PSAORD(Y,0)="",PSADONE=1
.S PSADONE=0
.I '$D(PSAORD(X)) W !,Y_" is an invalid order number."
Q
;
PRTORD ;Loops thru invoices to print all for one order
S PSAORDB="" F S PSAORDB=$O(PSAORD(PSAORDB)) Q:PSAORDB=""!(PSAOUT) D
.S PSAORD="" F S PSAORD=$O(PSAORD(PSAORDB,PSAORD)) Q:PSAORD=""!(PSAOUT) D
..I 'PSAORD S PSACTRL=0 F S PSACTRL=$O(^XTMP("PSAPV",PSACTRL)) Q:PSACTRL=""!(PSAOUT) D
...Q:$P($G(^XTMP("PSAPV",PSACTRL,"IN")),"^",4)'=PSAORDB
...D NOW^%DTC S Y=% D DD^%DT S PSARUN=$E(Y,1,18),PSAPAGE=1,$P(PSASLN,"-",80)="",$P(PSADLN,"=",80)="",PSADJDRG=0,PSAFPG=1
...S PSAINV=$P($G(^XTMP("PSAPV",PSACTRL,"IN")),"^",2) D START^PSAUP4
..I PSAORD S PSAINVB="" F S PSAINVB=$O(^PSD(58.811,PSAORD,1,"B",PSAINVB)) Q:PSAINVB=""!(PSAOUT) S PSAINV=$O(^PSD(58.811,PSAORD,1,"B",PSAINVB,0)) D ^PSAORDP1
G EXIT
;
STATUS ;Select status
W ! S DIR(0)="SOB^U:Unprocessed;P:Processed",DIR("A")="Select Unprocessed or Processed Invoice Status",DIR("??")="^D STATHELP^PSAORDP"
D ^DIR K DIR I $G(DIRUT) S PSAOUT=1 Q
S PSASTA=Y
I PSASTA="P",'$O(^PSD(58.811,"ASTAT","P",0)) W !!,"There are no invoices with the status of Processed." G STATUS
I PSASTA="U" D G:'PSACNT STATUS
.S (PSACNT,PSACTRL)=0 F S PSACTRL=$O(^XTMP("PSAPV",PSACTRL)) Q:PSACTRL=""!(PSACNT) I $D(^XTMP("PSAPV",PSACTRL,"IN")),$P(^("IN"),"^",8)'="P" S PSACNT=1
.I 'PSACNT W !!,"There are no invoices with the status of Unprocessed."
Q
;
PRTSTA ;Sets up printing & prints Unprocessed invoices
G:PSASTA="P" PROCESS
S PSACTRL=0 F S PSACTRL=$O(^XTMP("PSAPV",PSACTRL)) Q:PSACTRL=""!(PSAOUT) D
.Q:$P($G(^XTMP("PSAPV",PSACTRL,"IN")),"^",8)="P"
.S IOM=80 D NOW^%DTC S Y=% D DD^%DT S PSARUN=$E(Y,1,18),PSAPAGE=1,$P(PSASLN,"-",80)="",$P(PSADLN,"=",80)="",PSADJDRG=0,PSAFPG=1
.D START^PSAUP4
Q
;
PROCESS ;Prints Processed invoices
;S PSAORDB="" F S PSAORDB=$O(^PSD(58.811,"AORD",PSAORDB)) Q:PSAORDB=""!(PSAOUT) D
;.S PSAINVB="" F S PSAINVB=$O(^PSD(58.811,"AORD",PSAORDB,PSAINVB)) Q:PSAINVB=""!(PSAOUT) D
;..S PSAORD=0 F S PSAORD=$O(^PSD(58.811,"AORD",PSAORDB,PSAINVB,PSAORD)) Q:'PSAORD!(PSAOUT) D
;...S PSAINV=0 F S PSAINV=$O(^PSD(58.811,"AORD",PSAORDB,PSAINVB,PSAORD,PSAINV)) Q:'PSAINV!(PSAOUT) D ^PSAORDP1
S PSAORD=0 F S PSAORD=$O(^PSD(58.811,"ASTAT","P",PSAORD)) Q:'PSAORD!(PSAOUT) D
.S PSAINV=0 F S PSAINV=$O(^PSD(58.811,"ASTAT","P",PSAORD,PSAINV)) Q:'PSAINV!(PSAOUT) D
..S PSAORDB=$P($G(^PSD(58.811,PSAORD,0)),"^"),PSAINVB=$P($G(^PSD(58.811,PSAORD,1,PSAINV,0)),"^") Q:PSAORDB=""!(PSAINVB="") D ^PSAORDP1
G EXIT
;
ORDHELP ;Extended help to Select Order
W !?5,"Enter the order number assigned to the order to be print."
Q
ORDIHELP ;Extended help to Select Invoice's Order
W !?5,"Enter the invoice's order number to be print. The invoice number ",!?5,"prompt will follow."
Q
SELHELP ;Extended help to Print by Order#, Invoice#, or Invoice Status
W !?5,"To print all invoices for a specific order, select Order Number.",!?5,"To print a specific invoice, select Invoice Number. To print all"
W !?5,"invoices with an unprocessed or processed status, select Invoice",!?5,"Status."
Q
STATHELP ;Extended help for Enter Status
W !?5,"Enter U to print all uploaded invoices that have not been processed.",!?5,"Enter P to print all processed invoices that have not been verified."
Q
PSAORDP ;BIR/JMB-Print Orders ;9/19/97
+1 ;;3.0; DRUG ACCOUNTABILITY/INVENTORY INTERFACE;**7**; 10/24/97
+2 ;This routine selects the orders, invoices, or invoice status to be
+3 ;printed from the DRUG ACCOUNTABILITY ORDERS. It calls PSAORDP1 to
+4 ;print processed invoices and ^PSAUP4 to print unprocessed invoices.
+5 ;
+6 IF '$DATA(^XUSEC("PSA ORDERS",DUZ))
WRITE !,"You do not hold the key to enter the option."
QUIT
START WRITE !!
SET DIR(0)="S^O:Order Number;I:Invoice Number;S:Invoice Status"
SET DIR("A")="Print by Order#, Invoice#, or Invoice Status"
SET DIR("B")="O"
SET DIR("??")="^D SELHELP^PSAORDP"
DO ^DIR
KILL DIR
+1 IF $GET(DIRUT)
QUIT
SET PSAPRT=Y
SET PSAOUT=0
+2 IF PSAPRT="O"
DO ORDER
IF PSAPRT="I"
DO INVOICE
IF PSAPRT="S"
DO STATUS
IF PSAOUT
GOTO EXIT
+3 IF PSAPRT="O"!(PSAPRT="I")
IF $ORDER(PSAORD(""))=""
GOTO EXIT
+4 WRITE !
SET %ZIS="Q"
DO ^%ZIS
IF POP
GOTO EXIT
+5 IF $DATA(IO("Q"))
Begin DoDot:1
+6 SET ZTDESC="Drug Acct. - Print Prime Vendor Invoices"
SET ZTRTN="DQ^PSAORDP"
+7 FOR PSASAVE="PSAINV","PSAPRT","PSASTA"
IF $DATA(@PSASAVE)
SET ZTSAVE(PSASAVE)=""
+8 SET ZTSAVE("PSAORD(")=""
DO ^%ZTLOAD
End DoDot:1
GOTO EXIT
+9 ;
DQ SET PSAOUT=0
+1 IF PSAPRT="O"
DO PRTORD
GOTO EXIT
+2 IF PSAPRT="I"
DO PRTINV
GOTO EXIT
+3 IF PSAPRT="S"
DO PRTSTA
+4 ;
EXIT IF $EXTRACT(IOST,1,2)="C-"
WRITE @IOF
DO ^%ZISC
IF $DATA(ZTQUEUED)
SET ZTREQ="@"
KILL IO("Q")
+1 KILL %,%ZIS,DA,DIC,DTOUT,DUOUT,PSA,PSAAECST,PSABY,PSACIEN,PSACNT,PSACTRL,PSACTRLH,PSADATA,PSADEC,PSADJDRG,PSADJSUP,PSADLN,PSADONE,PSADRG,PSADS
+2 KILL PSAECOST,PSAEND,PSAFIN,PSAFIRST,PSAFPG,PSAICOST,PSAIECST,PSAIN,PSAINV,PSAINVB,PSAINVBH,PSAINVH,PSALINE,PSANDC,PSAORD,PSAORDB,PSAOUT,PSAPAGE,PSAPC,PSAPRT,PSARUN
+3 KILL PSAS,PSASAVE,PSASLN,PSASS,PSAST,PSASTA,PSASUB,PSATOT,PSAXCNT,X,ZTDESC,ZTRTN,ZTSAVE
+4 QUIT
+5 ;
INVOICE ;Prompts for order and invoice
+1 KILL PSAORD
SET (PSACNT,PSADONE,PSAFIN,PSAXCNT)=0
SET PSASLN=""
SET $PIECE(PSASLN,"-",80)=""
+2 FOR
WRITE !,PSASLN
SET DIR(0)="FO^1:22"
SET DIR("A")="Select ORDER NUMBER"
SET DIR("?")="Enter the order number of the invoice to be printed"
SET DIR("??")="^D ORDIHELP^PSAORDP"
DO ^DIR
KILL DIR
Begin DoDot:1
+3 SET PSAORDB=Y
IF $GET(DTOUT)!($GET(DUOUT))
SET PSAOUT=1
QUIT
+4 IF PSAORDB=""
SET PSAFIN=1
QUIT
+5 IF PSAORDB=" "
QUIT
+6 ;In 58.811
+7 IF $ORDER(^PSD(58.811,"B",PSAORDB,0))
SET PSAORD=+$ORDER(^PSD(58.811,"B",PSAORDB,0))
SET PSAINVB=""
Begin DoDot:2
+8 FOR
SET PSAINVB=$ORDER(^PSD(58.811,PSAORD,1,"B",PSAINVB))
IF PSAINVB=""
QUIT
SET PSACNT=PSACNT+1
SET (PSAINV,PSAINVH)=$ORDER(^PSD(58.811,PSAORD,1,"B",PSAINVB,0))
SET PSAINVBH=PSAINVB
End DoDot:2
+9 ;In XTMP
+10 IF PSAOUT
QUIT
SET (PSACTRL,PSADONE)=0
+11 FOR
SET PSACTRL=$ORDER(^XTMP("PSAPV",PSACTRL))
IF PSACTRL=""!(PSADONE)
QUIT
Begin DoDot:2
+12 IF $PIECE($GET(^XTMP("PSAPV",PSACTRL,"IN")),"^",4)=PSAORDB
SET PSAXCNT=PSAXCNT+1
SET (PSAINVH,PSAINVB)=$PIECE(^("IN"),"^",2)
SET PSACTRLH=PSACTRL
SET PSA(PSAORDB,PSAINVB,PSACTRL)=""
End DoDot:2
+13 IF PSAOUT
QUIT
+14 IF PSACNT
IF 'PSAXCNT
Begin DoDot:2
+15 IF PSACNT=1
WRITE !,"Invoice# "_PSAINVBH
SET PSAORD(PSAORDB,PSAORD)=PSAINVH
QUIT
+16 IF PSACNT>1
DO INV
End DoDot:2
QUIT
+17 IF 'PSACNT
IF PSAXCNT
Begin DoDot:2
+18 IF PSAXCNT=1
WRITE !,"Invoice# "_PSAINVH
SET PSAORD(PSAORDB,0)=PSAINVH_"~"_PSACTRLH
SET PSACTRL=PSACTRLH
QUIT
+19 IF PSAXCNT>1
DO INVXTMP
End DoDot:2
QUIT
+20 IF PSACNT
IF PSAXCNT
DO INVBOTH
QUIT
+21 IF '$DATA(PSAORD(PSAORDB))
WRITE !,PSAORDB_" is an invalid order number."
End DoDot:1
IF PSAOUT!(PSAFIN)
QUIT
+22 QUIT
+23 ;
INV ;Select invoice from 58.811
+1 SET (PSACNT,PSADONE)=0
+2 FOR
SET DA(1)=PSAORD
SET DIC="^PSD(58.811,"_DA(1)_",1,"
SET DIC("A")="Select INVOICE NUMBER: "
SET DIC(0)="AEMZQ"
SET DA(1)=PSAORD
DO ^DIC
KILL DIC
Begin DoDot:1
+3 IF $GET(DTOUT)!($GET(DUOUT))
SET PSAOUT=1
QUIT
+4 IF Y=-1
SET PSADONE=1
QUIT
+5 IF 'PSACNT
SET PSAORD(PSAORDB,PSAORD)=+Y
SET PSACNT=1
QUIT
+6 IF PSACNT
SET PSAORD(PSAORDB,PSAORD)=PSAORD(PSAORDB,PSAORD)_","_+Y
End DoDot:1
IF PSAOUT!(PSADONE)
QUIT
+7 QUIT
+8 ;
INVXTMP ;Select invoice from XTMP
+1 SET (PSAXCNT,PSADONE)=0
SET PSAFIRST=1
+2 FOR
SET DIR(0)="FO^1:22"
SET DIR("A")="Select INVOICE NUMBER"
DO ^DIR
KILL DIR
Begin DoDot:1
+3 IF $GET(DTOUT)!($GET(DUOUT))
SET PSAOUT=1
QUIT
+4 IF Y=""
SET PSADONE=1
QUIT
+5 IF Y=" "
QUIT
SET PSAINV=Y
+6 IF 'PSAXCNT
SET PSAORD(PSAORDB,0)=Y_"~"_PSACTRLH
SET PSAXCNT=1
QUIT
+7 IF PSAXCNT
SET PSAORD(PSAORDB,0)=PSAORD(PSAORDB,0)_","_Y
QUIT
End DoDot:1
IF PSAOUT!(PSADONE)
QUIT
+8 QUIT
+9 ;
INVBOTH ;Select invoice from XTMP & 58.811
+1 SET (PSADONE)=0
+2 FOR
SET DIR(0)="FO^1:22"
SET DIR("A")="Select INVOICE NUMBER"
DO ^DIR
KILL DIR
Begin DoDot:1
+3 IF $GET(DTOUT)!($GET(DUOUT))
SET PSAXCNT=1
QUIT
+4 IF Y=" "
QUIT
+5 IF Y=""
SET PSADONE=1
QUIT
+6 SET PSAINVB=Y
SET PSAINV=$ORDER(^PSD(58.811,PSAORD,1,"B",PSAINVB,0))
+7 IF PSAINV
IF $DATA(PSAORD(PSAORDB,PSAORD))
SET PSAORD(PSAORDB,PSAORD)=PSAORD(PSAORDB,PSAORD)_","_PSAINV
IF '$DATA(PSAORD(PSAORDB,PSAORD))
SET PSAORD(PSAORDB,PSAORD)=PSAINV
QUIT
+8 IF $DATA(PSA(PSAORDB,PSAINVB))
SET PSACTRL=$ORDER(PSA(PSAORDB,PSAINVB,0))
IF PSACTRL'=""
IF $DATA(PSAORD(PSAORDB,0))
SET PSAORD(PSAORDB,0)=PSAORD(PSAORDB,0)_","_PSAINVB_"~"_PSACTRL
IF '$DATA(PSAORD(PSAORDB,0))
SET PSAORD(PSAORDB,0)=PSAINVB_"~"_PSACTRL
QUIT
+9 WRITE !,PSAINVB_" is an invalid invoice number."
End DoDot:1
IF PSAOUT!(PSADONE)
QUIT
+10 QUIT
+11 ;
PRTINV ;Loops thru orders & invoices to print invoices
+1 SET PSAORDB=""
FOR
SET PSAORDB=$ORDER(PSAORD(PSAORDB))
IF PSAORDB=""!(PSAOUT)
QUIT
Begin DoDot:1
+2 SET PSAORD=""
FOR
SET PSAORD=$ORDER(PSAORD(PSAORDB,PSAORD))
IF PSAORD=""!(PSAOUT)
QUIT
Begin DoDot:2
+3 FOR PSAPC=1:1
SET PSAINV=$PIECE(PSAORD(PSAORDB,PSAORD),",",PSAPC)
IF PSAINV=""!(PSAOUT)
QUIT
Begin DoDot:3
+4 IF PSAORD
DO ^PSAORDP1
QUIT
+5 ;DAVEB (PSA*3*7)
+6 SET PSACTRL=$PIECE(PSAINV,"~",2)
SET PSAINV=$PIECE(PSAINV,"~")
SET IOM=80
+7 IF $DATA(PSA(PSAORDB,$PIECE(PSAINV,"~")))
SET PSAINV=$PIECE(PSAINV,"~")
SET PSACTRL=$ORDER(PSA(PSAORDB,PSAINV,0))
+8 DO NOW^%DTC
SET Y=%
DO DD^%DT
SET PSARUN=$EXTRACT(Y,1,18)
SET PSAPAGE=1
SET $PIECE(PSASLN,"-",80)=""
SET $PIECE(PSADLN,"=",80)=""
SET PSADJDRG=0
SET PSAFPG=1
+9 DO START^PSAUP4
End DoDot:3
End DoDot:2
End DoDot:1
+10 QUIT
+11 ;
ORDER ;Select order
+1 KILL PSAORD
SET PSADONE=0
+2 FOR
WRITE !
SET DIR(0)="FO^1:22"
SET DIR("A")="Select ORDER NUMBER"
SET DIR("?")="Enter the number of the order to be printed"
SET DIR("??")="^D ORDHELP^PSAORDP"
DO ^DIR
KILL DIR
Begin DoDot:1
+3 IF $GET(DTOUT)!($GET(DUOUT))
SET PSAOUT=1
QUIT
+4 IF X=" "
QUIT
+5 IF X=""
SET PSADONE=1
QUIT
+6 IF $ORDER(^PSD(58.811,"B",Y,0))
SET PSAORD(Y,+$ORDER(^PSD(58.811,"B",Y,0)))=""
+7 SET PSACTRL=0
FOR
SET PSACTRL=$ORDER(^XTMP("PSAPV",PSACTRL))
IF PSACTRL=""!(PSADONE)
QUIT
IF $PIECE($GET(^XTMP("PSAPV",PSACTRL,"IN")),"^",4)=Y
SET PSAORD(Y,0)=""
SET PSADONE=1
+8 SET PSADONE=0
+9 IF '$DATA(PSAORD(X))
WRITE !,Y_" is an invalid order number."
End DoDot:1
IF PSAOUT!(PSADONE)
QUIT
+10 QUIT
+11 ;
PRTORD ;Loops thru invoices to print all for one order
+1 SET PSAORDB=""
FOR
SET PSAORDB=$ORDER(PSAORD(PSAORDB))
IF PSAORDB=""!(PSAOUT)
QUIT
Begin DoDot:1
+2 SET PSAORD=""
FOR
SET PSAORD=$ORDER(PSAORD(PSAORDB,PSAORD))
IF PSAORD=""!(PSAOUT)
QUIT
Begin DoDot:2
+3 IF 'PSAORD
SET PSACTRL=0
FOR
SET PSACTRL=$ORDER(^XTMP("PSAPV",PSACTRL))
IF PSACTRL=""!(PSAOUT)
QUIT
Begin DoDot:3
+4 IF $PIECE($GET(^XTMP("PSAPV",PSACTRL,"IN")),"^",4)'=PSAORDB
QUIT
+5 DO NOW^%DTC
SET Y=%
DO DD^%DT
SET PSARUN=$EXTRACT(Y,1,18)
SET PSAPAGE=1
SET $PIECE(PSASLN,"-",80)=""
SET $PIECE(PSADLN,"=",80)=""
SET PSADJDRG=0
SET PSAFPG=1
+6 SET PSAINV=$PIECE($GET(^XTMP("PSAPV",PSACTRL,"IN")),"^",2)
DO START^PSAUP4
End DoDot:3
+7 IF PSAORD
SET PSAINVB=""
FOR
SET PSAINVB=$ORDER(^PSD(58.811,PSAORD,1,"B",PSAINVB))
IF PSAINVB=""!(PSAOUT)
QUIT
SET PSAINV=$ORDER(^PSD(58.811,PSAORD,1,"B",PSAINVB,0))
DO ^PSAORDP1
End DoDot:2
End DoDot:1
+8 GOTO EXIT
+9 ;
STATUS ;Select status
+1 WRITE !
SET DIR(0)="SOB^U:Unprocessed;P:Processed"
SET DIR("A")="Select Unprocessed or Processed Invoice Status"
SET DIR("??")="^D STATHELP^PSAORDP"
+2 DO ^DIR
KILL DIR
IF $GET(DIRUT)
SET PSAOUT=1
QUIT
+3 SET PSASTA=Y
+4 IF PSASTA="P"
IF '$ORDER(^PSD(58.811,"ASTAT","P",0))
WRITE !!,"There are no invoices with the status of Processed."
GOTO STATUS
+5 IF PSASTA="U"
Begin DoDot:1
+6 SET (PSACNT,PSACTRL)=0
FOR
SET PSACTRL=$ORDER(^XTMP("PSAPV",PSACTRL))
IF PSACTRL=""!(PSACNT)
QUIT
IF $DATA(^XTMP("PSAPV",PSACTRL,"IN"))
IF $PIECE(^("IN"),"^",8)'="P"
SET PSACNT=1
+7 IF 'PSACNT
WRITE !!,"There are no invoices with the status of Unprocessed."
End DoDot:1
IF 'PSACNT
GOTO STATUS
+8 QUIT
+9 ;
PRTSTA ;Sets up printing & prints Unprocessed invoices
+1 IF PSASTA="P"
GOTO PROCESS
+2 SET PSACTRL=0
FOR
SET PSACTRL=$ORDER(^XTMP("PSAPV",PSACTRL))
IF PSACTRL=""!(PSAOUT)
QUIT
Begin DoDot:1
+3 IF $PIECE($GET(^XTMP("PSAPV",PSACTRL,"IN")),"^",8)="P"
QUIT
+4 SET IOM=80
DO NOW^%DTC
SET Y=%
DO DD^%DT
SET PSARUN=$EXTRACT(Y,1,18)
SET PSAPAGE=1
SET $PIECE(PSASLN,"-",80)=""
SET $PIECE(PSADLN,"=",80)=""
SET PSADJDRG=0
SET PSAFPG=1
+5 DO START^PSAUP4
End DoDot:1
+6 QUIT
+7 ;
PROCESS ;Prints Processed invoices
+1 ;S PSAORDB="" F S PSAORDB=$O(^PSD(58.811,"AORD",PSAORDB)) Q:PSAORDB=""!(PSAOUT) D
+2 ;.S PSAINVB="" F S PSAINVB=$O(^PSD(58.811,"AORD",PSAORDB,PSAINVB)) Q:PSAINVB=""!(PSAOUT) D
+3 ;..S PSAORD=0 F S PSAORD=$O(^PSD(58.811,"AORD",PSAORDB,PSAINVB,PSAORD)) Q:'PSAORD!(PSAOUT) D
+4 ;...S PSAINV=0 F S PSAINV=$O(^PSD(58.811,"AORD",PSAORDB,PSAINVB,PSAORD,PSAINV)) Q:'PSAINV!(PSAOUT) D ^PSAORDP1
+5 SET PSAORD=0
FOR
SET PSAORD=$ORDER(^PSD(58.811,"ASTAT","P",PSAORD))
IF 'PSAORD!(PSAOUT)
QUIT
Begin DoDot:1
+6 SET PSAINV=0
FOR
SET PSAINV=$ORDER(^PSD(58.811,"ASTAT","P",PSAORD,PSAINV))
IF 'PSAINV!(PSAOUT)
QUIT
Begin DoDot:2
+7 SET PSAORDB=$PIECE($GET(^PSD(58.811,PSAORD,0)),"^")
SET PSAINVB=$PIECE($GET(^PSD(58.811,PSAORD,1,PSAINV,0)),"^")
IF PSAORDB=""!(PSAINVB="")
QUIT
DO ^PSAORDP1
End DoDot:2
End DoDot:1
+8 GOTO EXIT
+9 ;
ORDHELP ;Extended help to Select Order
+1 WRITE !?5,"Enter the order number assigned to the order to be print."
+2 QUIT
ORDIHELP ;Extended help to Select Invoice's Order
+1 WRITE !?5,"Enter the invoice's order number to be print. The invoice number ",!?5,"prompt will follow."
+2 QUIT
SELHELP ;Extended help to Print by Order#, Invoice#, or Invoice Status
+1 WRITE !?5,"To print all invoices for a specific order, select Order Number.",!?5,"To print a specific invoice, select Invoice Number. To print all"
+2 WRITE !?5,"invoices with an unprocessed or processed status, select Invoice",!?5,"Status."
+3 QUIT
STATHELP ;Extended help for Enter Status
+1 WRITE !?5,"Enter U to print all uploaded invoices that have not been processed.",!?5,"Enter P to print all processed invoices that have not been verified."
+2 QUIT