| 1 | PSAORDP ;BIR/JMB-Print Orders ;9/19/97 | 
|---|
| 2 | ;;3.0; DRUG ACCOUNTABILITY/INVENTORY INTERFACE;**7**; 10/24/97 | 
|---|
| 3 | ;This routine selects the orders, invoices, or invoice status to be | 
|---|
| 4 | ;printed from the DRUG ACCOUNTABILITY ORDERS. It calls PSAORDP1 to | 
|---|
| 5 | ;print processed invoices and ^PSAUP4 to print unprocessed invoices. | 
|---|
| 6 | ; | 
|---|
| 7 | I '$D(^XUSEC("PSA ORDERS",DUZ)) W !,"You do not hold the key to enter the option." Q | 
|---|
| 8 | 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 | 
|---|
| 9 | Q:$G(DIRUT)  S PSAPRT=Y,PSAOUT=0 | 
|---|
| 10 | D:PSAPRT="O" ORDER D:PSAPRT="I" INVOICE D:PSAPRT="S" STATUS G:PSAOUT EXIT | 
|---|
| 11 | I PSAPRT="O"!(PSAPRT="I"),$O(PSAORD(""))="" G EXIT | 
|---|
| 12 | W ! S %ZIS="Q" D ^%ZIS G:POP EXIT | 
|---|
| 13 | I $D(IO("Q")) D  G EXIT | 
|---|
| 14 | .S ZTDESC="Drug Acct. - Print Prime Vendor Invoices",ZTRTN="DQ^PSAORDP" | 
|---|
| 15 | .F PSASAVE="PSAINV","PSAPRT","PSASTA" S:$D(@PSASAVE) ZTSAVE(PSASAVE)="" | 
|---|
| 16 | .S ZTSAVE("PSAORD(")="" D ^%ZTLOAD | 
|---|
| 17 | ; | 
|---|
| 18 | DQ S PSAOUT=0 | 
|---|
| 19 | I PSAPRT="O" D PRTORD G EXIT | 
|---|
| 20 | I PSAPRT="I" D PRTINV G EXIT | 
|---|
| 21 | D:PSAPRT="S" PRTSTA | 
|---|
| 22 | ; | 
|---|
| 23 | EXIT W:$E(IOST,1,2)="C-" @IOF D ^%ZISC S:$D(ZTQUEUED) ZTREQ="@" K IO("Q") | 
|---|
| 24 | K %,%ZIS,DA,DIC,DTOUT,DUOUT,PSA,PSAAECST,PSABY,PSACIEN,PSACNT,PSACTRL,PSACTRLH,PSADATA,PSADEC,PSADJDRG,PSADJSUP,PSADLN,PSADONE,PSADRG,PSADS | 
|---|
| 25 | K PSAECOST,PSAEND,PSAFIN,PSAFIRST,PSAFPG,PSAICOST,PSAIECST,PSAIN,PSAINV,PSAINVB,PSAINVBH,PSAINVH,PSALINE,PSANDC,PSAORD,PSAORDB,PSAOUT,PSAPAGE,PSAPC,PSAPRT,PSARUN | 
|---|
| 26 | K PSAS,PSASAVE,PSASLN,PSASS,PSAST,PSASTA,PSASUB,PSATOT,PSAXCNT,X,ZTDESC,ZTRTN,ZTSAVE | 
|---|
| 27 | Q | 
|---|
| 28 | ; | 
|---|
| 29 | INVOICE ;Prompts for order and invoice | 
|---|
| 30 | K PSAORD S (PSACNT,PSADONE,PSAFIN,PSAXCNT)=0,PSASLN="",$P(PSASLN,"-",80)="" | 
|---|
| 31 | 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) | 
|---|
| 32 | .S PSAORDB=Y I $G(DTOUT)!($G(DUOUT)) S PSAOUT=1 Q | 
|---|
| 33 | .I PSAORDB="" S PSAFIN=1 Q | 
|---|
| 34 | .Q:PSAORDB=" " | 
|---|
| 35 | .;In 58.811 | 
|---|
| 36 | .I $O(^PSD(58.811,"B",PSAORDB,0)) S PSAORD=+$O(^PSD(58.811,"B",PSAORDB,0)),PSAINVB="" D | 
|---|
| 37 | ..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 | 
|---|
| 38 | .;In XTMP | 
|---|
| 39 | .Q:PSAOUT  S (PSACTRL,PSADONE)=0 | 
|---|
| 40 | .F  S PSACTRL=$O(^XTMP("PSAPV",PSACTRL)) Q:PSACTRL=""!(PSADONE)  D | 
|---|
| 41 | ..I $P($G(^XTMP("PSAPV",PSACTRL,"IN")),"^",4)=PSAORDB S PSAXCNT=PSAXCNT+1,(PSAINVH,PSAINVB)=$P(^("IN"),"^",2),PSACTRLH=PSACTRL,PSA(PSAORDB,PSAINVB,PSACTRL)="" | 
|---|
| 42 | .Q:PSAOUT | 
|---|
| 43 | .I PSACNT,'PSAXCNT D  Q | 
|---|
| 44 | ..I PSACNT=1 W !,"Invoice# "_PSAINVBH S PSAORD(PSAORDB,PSAORD)=PSAINVH Q | 
|---|
| 45 | ..D:PSACNT>1 INV | 
|---|
| 46 | .I 'PSACNT,PSAXCNT D  Q | 
|---|
| 47 | ..I PSAXCNT=1 W !,"Invoice# "_PSAINVH S PSAORD(PSAORDB,0)=PSAINVH_"~"_PSACTRLH,PSACTRL=PSACTRLH Q | 
|---|
| 48 | ..D:PSAXCNT>1 INVXTMP | 
|---|
| 49 | .I PSACNT,PSAXCNT D INVBOTH Q | 
|---|
| 50 | .I '$D(PSAORD(PSAORDB)) W !,PSAORDB_" is an invalid order number." | 
|---|
| 51 | Q | 
|---|
| 52 | ; | 
|---|
| 53 | INV ;Select invoice from 58.811 | 
|---|
| 54 | S (PSACNT,PSADONE)=0 | 
|---|
| 55 | 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) | 
|---|
| 56 | .I $G(DTOUT)!($G(DUOUT)) S PSAOUT=1 Q | 
|---|
| 57 | .I Y=-1 S PSADONE=1 Q | 
|---|
| 58 | .I 'PSACNT S PSAORD(PSAORDB,PSAORD)=+Y,PSACNT=1 Q | 
|---|
| 59 | .I PSACNT S PSAORD(PSAORDB,PSAORD)=PSAORD(PSAORDB,PSAORD)_","_+Y | 
|---|
| 60 | Q | 
|---|
| 61 | ; | 
|---|
| 62 | INVXTMP ;Select invoice from XTMP | 
|---|
| 63 | S (PSAXCNT,PSADONE)=0,PSAFIRST=1 | 
|---|
| 64 | F  S DIR(0)="FO^1:22",DIR("A")="Select INVOICE NUMBER" D ^DIR K DIR D  Q:PSAOUT!(PSADONE) | 
|---|
| 65 | .I $G(DTOUT)!($G(DUOUT)) S PSAOUT=1 Q | 
|---|
| 66 | .I Y="" S PSADONE=1 Q | 
|---|
| 67 | .Q:Y=" "  S PSAINV=Y | 
|---|
| 68 | .I 'PSAXCNT S PSAORD(PSAORDB,0)=Y_"~"_PSACTRLH,PSAXCNT=1 Q | 
|---|
| 69 | .I PSAXCNT S PSAORD(PSAORDB,0)=PSAORD(PSAORDB,0)_","_Y Q | 
|---|
| 70 | Q | 
|---|
| 71 | ; | 
|---|
| 72 | INVBOTH ;Select invoice from XTMP & 58.811 | 
|---|
| 73 | S (PSADONE)=0 | 
|---|
| 74 | F  S DIR(0)="FO^1:22",DIR("A")="Select INVOICE NUMBER" D ^DIR K DIR D  Q:PSAOUT!(PSADONE) | 
|---|
| 75 | .I $G(DTOUT)!($G(DUOUT)) S PSAXCNT=1 Q | 
|---|
| 76 | .Q:Y=" " | 
|---|
| 77 | .I Y="" S PSADONE=1 Q | 
|---|
| 78 | .S PSAINVB=Y,PSAINV=$O(^PSD(58.811,PSAORD,1,"B",PSAINVB,0)) | 
|---|
| 79 | .I PSAINV S:$D(PSAORD(PSAORDB,PSAORD)) PSAORD(PSAORDB,PSAORD)=PSAORD(PSAORDB,PSAORD)_","_PSAINV S:'$D(PSAORD(PSAORDB,PSAORD)) PSAORD(PSAORDB,PSAORD)=PSAINV Q | 
|---|
| 80 | .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 | 
|---|
| 81 | .W !,PSAINVB_" is an invalid invoice number." | 
|---|
| 82 | Q | 
|---|
| 83 | ; | 
|---|
| 84 | PRTINV ;Loops thru orders & invoices to print invoices | 
|---|
| 85 | S PSAORDB="" F  S PSAORDB=$O(PSAORD(PSAORDB)) Q:PSAORDB=""!(PSAOUT)  D | 
|---|
| 86 | .S PSAORD="" F  S PSAORD=$O(PSAORD(PSAORDB,PSAORD)) Q:PSAORD=""!(PSAOUT)  D | 
|---|
| 87 | ..F PSAPC=1:1 S PSAINV=$P(PSAORD(PSAORDB,PSAORD),",",PSAPC) Q:PSAINV=""!(PSAOUT)  D | 
|---|
| 88 | ...I PSAORD D ^PSAORDP1 Q | 
|---|
| 89 | ...;DAVEB (PSA*3*7) | 
|---|
| 90 | ...S PSACTRL=$P(PSAINV,"~",2),PSAINV=$P(PSAINV,"~"),IOM=80 | 
|---|
| 91 | ...I $D(PSA(PSAORDB,$P(PSAINV,"~"))) S PSAINV=$P(PSAINV,"~"),PSACTRL=$O(PSA(PSAORDB,PSAINV,0)) | 
|---|
| 92 | ...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 | 
|---|
| 93 | ...D START^PSAUP4 | 
|---|
| 94 | Q | 
|---|
| 95 | ; | 
|---|
| 96 | ORDER ;Select order | 
|---|
| 97 | K PSAORD S PSADONE=0 | 
|---|
| 98 | 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) | 
|---|
| 99 | .I $G(DTOUT)!($G(DUOUT)) S PSAOUT=1 Q | 
|---|
| 100 | .Q:X=" " | 
|---|
| 101 | .I X="" S PSADONE=1 Q | 
|---|
| 102 | .I $O(^PSD(58.811,"B",Y,0)) S PSAORD(Y,+$O(^PSD(58.811,"B",Y,0)))="" | 
|---|
| 103 | .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 | 
|---|
| 104 | .S PSADONE=0 | 
|---|
| 105 | .I '$D(PSAORD(X)) W !,Y_" is an invalid order number." | 
|---|
| 106 | Q | 
|---|
| 107 | ; | 
|---|
| 108 | PRTORD ;Loops thru invoices to print all for one order | 
|---|
| 109 | S PSAORDB="" F  S PSAORDB=$O(PSAORD(PSAORDB)) Q:PSAORDB=""!(PSAOUT)  D | 
|---|
| 110 | .S PSAORD="" F  S PSAORD=$O(PSAORD(PSAORDB,PSAORD)) Q:PSAORD=""!(PSAOUT)  D | 
|---|
| 111 | ..I 'PSAORD S PSACTRL=0 F  S PSACTRL=$O(^XTMP("PSAPV",PSACTRL)) Q:PSACTRL=""!(PSAOUT)  D | 
|---|
| 112 | ...Q:$P($G(^XTMP("PSAPV",PSACTRL,"IN")),"^",4)'=PSAORDB | 
|---|
| 113 | ...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 | 
|---|
| 114 | ...S PSAINV=$P($G(^XTMP("PSAPV",PSACTRL,"IN")),"^",2) D START^PSAUP4 | 
|---|
| 115 | ..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 | 
|---|
| 116 | G EXIT | 
|---|
| 117 | ; | 
|---|
| 118 | STATUS ;Select status | 
|---|
| 119 | W ! S DIR(0)="SOB^U:Unprocessed;P:Processed",DIR("A")="Select Unprocessed or Processed Invoice Status",DIR("??")="^D STATHELP^PSAORDP" | 
|---|
| 120 | D ^DIR K DIR I $G(DIRUT) S PSAOUT=1 Q | 
|---|
| 121 | S PSASTA=Y | 
|---|
| 122 | I PSASTA="P",'$O(^PSD(58.811,"ASTAT","P",0)) W !!,"There are no invoices with the status of Processed." G STATUS | 
|---|
| 123 | I PSASTA="U" D  G:'PSACNT STATUS | 
|---|
| 124 | .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 | 
|---|
| 125 | .I 'PSACNT W !!,"There are no invoices with the status of Unprocessed." | 
|---|
| 126 | Q | 
|---|
| 127 | ; | 
|---|
| 128 | PRTSTA ;Sets up printing & prints Unprocessed invoices | 
|---|
| 129 | G:PSASTA="P" PROCESS | 
|---|
| 130 | S PSACTRL=0 F  S PSACTRL=$O(^XTMP("PSAPV",PSACTRL)) Q:PSACTRL=""!(PSAOUT)  D | 
|---|
| 131 | .Q:$P($G(^XTMP("PSAPV",PSACTRL,"IN")),"^",8)="P" | 
|---|
| 132 | .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 | 
|---|
| 133 | .D START^PSAUP4 | 
|---|
| 134 | Q | 
|---|
| 135 | ; | 
|---|
| 136 | PROCESS ;Prints Processed invoices | 
|---|
| 137 | ;S PSAORDB="" F  S PSAORDB=$O(^PSD(58.811,"AORD",PSAORDB)) Q:PSAORDB=""!(PSAOUT)  D | 
|---|
| 138 | ;.S PSAINVB="" F  S PSAINVB=$O(^PSD(58.811,"AORD",PSAORDB,PSAINVB)) Q:PSAINVB=""!(PSAOUT)  D | 
|---|
| 139 | ;..S PSAORD=0 F  S PSAORD=$O(^PSD(58.811,"AORD",PSAORDB,PSAINVB,PSAORD)) Q:'PSAORD!(PSAOUT)  D | 
|---|
| 140 | ;...S PSAINV=0 F  S PSAINV=$O(^PSD(58.811,"AORD",PSAORDB,PSAINVB,PSAORD,PSAINV))  Q:'PSAINV!(PSAOUT)  D ^PSAORDP1 | 
|---|
| 141 | S PSAORD=0 F  S PSAORD=$O(^PSD(58.811,"ASTAT","P",PSAORD)) Q:'PSAORD!(PSAOUT)  D | 
|---|
| 142 | .S PSAINV=0 F  S PSAINV=$O(^PSD(58.811,"ASTAT","P",PSAORD,PSAINV)) Q:'PSAINV!(PSAOUT)  D | 
|---|
| 143 | ..S PSAORDB=$P($G(^PSD(58.811,PSAORD,0)),"^"),PSAINVB=$P($G(^PSD(58.811,PSAORD,1,PSAINV,0)),"^") Q:PSAORDB=""!(PSAINVB="")  D ^PSAORDP1 | 
|---|
| 144 | G EXIT | 
|---|
| 145 | ; | 
|---|
| 146 | ORDHELP ;Extended help to Select Order | 
|---|
| 147 | W !?5,"Enter the order number assigned to the order to be print." | 
|---|
| 148 | Q | 
|---|
| 149 | ORDIHELP ;Extended help to Select Invoice's Order | 
|---|
| 150 | W !?5,"Enter the invoice's order number to be print. The invoice number ",!?5,"prompt will follow." | 
|---|
| 151 | Q | 
|---|
| 152 | SELHELP ;Extended help to Print by Order#, Invoice#, or Invoice Status | 
|---|
| 153 | 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" | 
|---|
| 154 | W !?5,"invoices with an unprocessed or processed status, select Invoice",!?5,"Status." | 
|---|
| 155 | Q | 
|---|
| 156 | STATHELP ;Extended help for Enter Status | 
|---|
| 157 | 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." | 
|---|
| 158 | Q | 
|---|