| [613] | 1 | IBCEFG7 ;ALB/TMP - OUTPUT FORMATTER GENERIC FORM PROCESSING ;06-MAR-96 | 
|---|
|  | 2 | ;;2.0;INTEGRATED BILLING;**52,84,96,51,137,191,320**;21-MAR-94 | 
|---|
|  | 3 | ; | 
|---|
|  | 4 | Q | 
|---|
|  | 5 | ; | 
|---|
|  | 6 | FORM(IBFORM,IBQUE,IBNOASK,IBQDT,ZTSK,IBABORT) ;For ien IBFORM, extract data using | 
|---|
|  | 7 | ;    output generater | 
|---|
|  | 8 | ; IBQUE = the output queue for transmitted forms or the printer queue | 
|---|
|  | 9 | ;          for printed output | 
|---|
|  | 10 | ; IBNOASK = flag that says user interaction for queuing is not needed | 
|---|
|  | 11 | ;           0 or null = ask, 1 = don't ask | 
|---|
|  | 12 | ; IBQDT = the date/time to queue the job (optional) | 
|---|
|  | 13 | ; | 
|---|
|  | 14 | ; Sets ZTSK only if job is queued | 
|---|
|  | 15 | ; | 
|---|
|  | 16 | ; IBABORT = output parameter which says user aborted forms output. | 
|---|
|  | 17 | ;           Pass by reference.  The $$QUEUE function returned false. | 
|---|
|  | 18 | ; | 
|---|
|  | 19 | N IBF2,IBTYP,POP,ZTIO,ZTRTN,ZTDESC,ZTSAVE,ZTREQ,ZTDTH,ZTREQ | 
|---|
|  | 20 | S IBTYP=$P($G(^IBE(353,IBFORM,2)),U,2),IBQUE=$G(IBQUE),IBABORT=0 | 
|---|
|  | 21 | G:$S(IBTYP'="S":$G(^IBE(353,IBFORM,"EXT"))=""&($G(^IBE(353,+$P($G(^IBE(353,IBFORM,2)),U,5),"EXT"))=""),1:'$G(IBIFN)) FORMQ | 
|---|
|  | 22 | I IBTYP="P",IBQUE="" D DEV(IBFORM) G:$G(POP) FORMQ | 
|---|
|  | 23 | I IBTYP="T" D:$G(IBNOASK)  Q:$G(IBNOASK)  I '$$QUEUE(IBFORM) S:$O(^TMP("IBRESUBMIT",$J,0)) ^TMP("IBRESUBMIT",$J)="ABORT" S IBABORT=1 Q | 
|---|
|  | 24 | . S ZTRTN="FORMOUT^IBCEFG7",ZTIO="",ZTDESC="OUTPUT FORMATTER - FORM: "_$P($G(^IBE(353,IBFORM,0)),U),ZTSAVE("IB*")="",ZTDTH=$S($G(IBQDT):IBQDT,1:$$NOW^XLFDT()) | 
|---|
|  | 25 | . S:$D(^TMP("IBRESUBMIT",$J)) ZTSAVE("^TMP(""IBRESUBMIT"",$J)")="",ZTSAVE("^TMP(""IBNOT"",$J)")="",ZTSAVE("^TMP(""IBRESUBMIT"",$J,")="",ZTSAVE("^TMP(""IBNOT"",$J,")="" | 
|---|
|  | 26 | . I $D(^TMP("IBSELX",$J)) S ZTSAVE("^TMP(""IBSELX"",$J,")="",ZTSAVE("^TMP(""IBSELX"",$J)")="" | 
|---|
|  | 27 | . S:'$G(DUZ) DUZ=.5 | 
|---|
|  | 28 | . D ^%ZTLOAD | 
|---|
|  | 29 | I '$G(ZTSK) D FORMOUT | 
|---|
|  | 30 | FORMQ Q | 
|---|
|  | 31 | ; | 
|---|
|  | 32 | FORMOUT ; Queued job entrypoint - IBFORM needs to be defined | 
|---|
|  | 33 | ; IBQUE needs to be defined if using default transmission output | 
|---|
|  | 34 | N IB2,IBTYP,IBPAR | 
|---|
|  | 35 | K ^TMP("IBXDATA",$J) | 
|---|
|  | 36 | S ZTREQ="@" | 
|---|
|  | 37 | S IB2=$G(^IBE(353,IBFORM,2)),IBPAR=+$P(IB2,U,5),IBTYP=$P(IB2,U,2) | 
|---|
|  | 38 | ; | 
|---|
|  | 39 | ; Execute PRE-PROCESSOR | 
|---|
|  | 40 | I IBTYP'="S" D FPRE(IBFORM,IBPAR,.IBXERR) | 
|---|
|  | 41 | G:$G(IBXERR)'="" FOUTQ | 
|---|
|  | 42 | ; | 
|---|
|  | 43 | ; Extract records - this should include call(s) to $$EXTRACT^IBCEFG() | 
|---|
|  | 44 | I IBTYP'="S" D | 
|---|
|  | 45 | .I $G(^IBE(353,IBFORM,"EXT"))'="" X ^("EXT") ;Form extract | 
|---|
|  | 46 | .I $G(^IBE(353,IBFORM,"EXT"))="",$G(^IBE(353,IBPAR,"EXT"))'="" X ^("EXT") ;Parent form extract | 
|---|
|  | 47 | I IBTYP="S" D  G Q1 | 
|---|
|  | 48 | .N PARAM,Z,Z0 | 
|---|
|  | 49 | .S PARAM(1)="BILL-SEARCH",Z0=$G(^DGCR(399,IBIFN,0)) | 
|---|
|  | 50 | .S Z=$P(Z0,U,21) S:Z="" Z="P" S PARAM(2)=$P($G(^DGCR(399,IBIFN,"I"_($F("PST",Z)-1))),U),PARAM(3)=$S($P(Z0,U,5)<3:"I",1:"O") | 
|---|
|  | 51 | .S Z=$$EXTRACT^IBCEFG(IBFORM,IBIFN,1,.PARAM) | 
|---|
|  | 52 | ; | 
|---|
|  | 53 | G:'$D(^TMP("IBXDATA",$J)) FOUTQ | 
|---|
|  | 54 | ; | 
|---|
|  | 55 | ; If an output routine exists, use it, otherwise use the generic ones | 
|---|
|  | 56 | I $G(^IBE(353,IBFORM,"OUT"))'="" X ^("OUT") G FOUTQ | 
|---|
|  | 57 | I $G(^IBE(353,IBFORM,"OUT"))="",$G(^IBE(353,IBPAR,"OUT"))'="" X ^("OUT") G FOUTQ | 
|---|
|  | 58 | ; | 
|---|
|  | 59 | I IBTYP="P" D PRINT(IBFORM) D:'$D(ZTQUEUED) ^%ZISC G FOUTQ | 
|---|
|  | 60 | I IBTYP="T" D:$G(IBQUE)'="" TRANSMIT(IBFORM,IBQUE) G FOUTQ | 
|---|
|  | 61 | ; | 
|---|
|  | 62 | FOUTQ D FPOST(IBFORM,IBPAR,.IBXERR) ; Execute POST-PROCESSOR, if any | 
|---|
|  | 63 | K ^TMP("IBXDATA",$J),^TMP("IBXEDIT",$J) | 
|---|
|  | 64 | Q1 Q | 
|---|
|  | 65 | ; | 
|---|
|  | 66 | PRINT(IBFORM) ; Print data from extract global for form IBFORM | 
|---|
|  | 67 | ; Extract records - this should include call(s) to $$EXTRACT^IBCEFG() | 
|---|
|  | 68 | N IB1,IB2,IB3,IBREC | 
|---|
|  | 69 | ;LOOP THROUGH RECORD/PAGE/LINE/COL | 
|---|
|  | 70 | S IBREC="" F  S IBREC=$O(^TMP("IBXDATA",$J,IBREC)) Q:IBREC=""  D  ;Rec | 
|---|
|  | 71 | . ;Page/line | 
|---|
|  | 72 | . F IB1=1:1:+$O(^TMP("IBXDATA",$J,IBREC,""),-1) W:IB1>1 @IOF W ?0 F IB2=1:1:+$O(^TMP("IBXDATA",$J,IBREC,IB1,""),-1) W:IB2>1 ! S IB3="" D | 
|---|
|  | 73 | .. ; Column | 
|---|
|  | 74 | .. F  S IB3=$O(^TMP("IBXDATA",$J,IBREC,IB1,IB2,IB3)) Q:IB3=""  W ?(IB3-1),^(IB3) | 
|---|
|  | 75 | . ;Only print form feed if more records to print - not on last record | 
|---|
|  | 76 | . I $O(^TMP("IBXDATA",$J,IBREC))'="" W @IOF | 
|---|
|  | 77 | Q | 
|---|
|  | 78 | ; | 
|---|
|  | 79 | TRANSMIT(IBFORM,IBQUE) ; Send data from extract global to queue IBQUE | 
|---|
|  | 80 | ;IBFORM = ien of the form to be transmitted (required) | 
|---|
|  | 81 | N IB1,IB2,IB3,IBREC,IBOUT,IBCT,IBSUB,Z,XMDUZ,XMSUBJ,XMBODY,XMTO | 
|---|
|  | 82 | K ^TMP("IBXTXMT",$J),^TMP("IBX",$J) | 
|---|
|  | 83 | Q:$G(IBQUE)="" | 
|---|
|  | 84 | ; | 
|---|
|  | 85 | S IBDELIM=$P($G(^IBE(353,+$S($P($G(^IBE(353,IBFORM,2)),U,5):$P(^(2),U,5),1:IBFORM),2)),U,7) | 
|---|
|  | 86 | S:IBDELIM="" IBDELIM="^" | 
|---|
|  | 87 | ;Loop through record/page/line/column | 
|---|
|  | 88 | S IBREC="",(IBSIZE,IBCT)=0,IBMSG=1 | 
|---|
|  | 89 | F  S IBREC=$O(^TMP("IBXDATA",$J,IBREC)) Q:IBREC=""  D | 
|---|
|  | 90 | .S ^TMP("IBX",$J,IBREC)=IBCT | 
|---|
|  | 91 | .S IB1="" F  S IB1=$O(^TMP("IBXDATA",$J,IBREC,IB1)) Q:IB1=""  D | 
|---|
|  | 92 | ..S (IB2,IBOUT)="" | 
|---|
|  | 93 | ..F  S IB2=$O(^TMP("IBXDATA",$J,IBREC,IB1,IB2)) D:IB2=""&$L(IBOUT) MSG(IBREC,IBOUT,.IBMSG,.IBSIZE,.IBCT) Q:IB2=""  D | 
|---|
|  | 94 | ...S IB3="" F  S IB3=$O(^TMP("IBXDATA",$J,IBREC,IB1,IB2,IB3)) Q:IB3=""  S IBP=^(IB3) S:IBP?.E1L.E IBP=$$UP^XLFSTR(IBP) S $P(IBOUT,IBDELIM,IB3)=IBP | 
|---|
|  | 95 | ; | 
|---|
|  | 96 | ;Send mail message(s) for extract | 
|---|
|  | 97 | S XMDUZ=DUZ,XMTO(IBQUE)="",IBSUB="OUTPUT FORMATTER: "_$P($G(^IBE(353,IBFORM,0)),U) | 
|---|
|  | 98 | S Z="" F  S Z=$O(^TMP("IBXTXMT",$J,Z)) Q:'Z  S XMBODY="^TMP(""IBXTXMT"","_$J_","_Z_")",XMSUBJ=IBSUB_" ("_Z_")" D SENDMSG^XMXAPI(XMDUZ,XMSUBJ,XMBODY,.XMTO,,.XMZ) | 
|---|
|  | 99 | ; | 
|---|
|  | 100 | K ^TMP("IBXTXMT",$J),^TMP("IBX",$J) | 
|---|
|  | 101 | Q | 
|---|
|  | 102 | ; | 
|---|
|  | 103 | MSG(IBREC,LINE,MSG,SIZE,CT) ; Set up global for transmission line | 
|---|
|  | 104 | ; IBREC = record number being processed | 
|---|
|  | 105 | ; LINE = actual text to be output in mail message line | 
|---|
|  | 106 | ; MSG  = the message seq # to output this record in (pass by reference) | 
|---|
|  | 107 | ; SIZE = current size of the message (pass by reference) | 
|---|
|  | 108 | ; CT   = the last line # in message for the text (pass by reference) | 
|---|
|  | 109 | N Z,Z0,LLEN | 
|---|
|  | 110 | S LLEN=$L(LINE) | 
|---|
|  | 111 | I (LLEN+SIZE)>30000 D | 
|---|
|  | 112 | .Q:'$G(^TMP("IBX",$J,IBREC))  ;Record itself is > 30000 - let it go | 
|---|
|  | 113 | .S (SIZE,CT)=0,Z=$G(^TMP("IBX",$J,IBREC)),^(IBREC)=0 | 
|---|
|  | 114 | .F  S Z=$O(^TMP("IBXTXMT",$J,MSG,Z)) Q:'Z  S CT=CT+1,Z0=^(Z),^TMP("IBXTXMT",$J,MSG+1,CT)=Z0,SIZE=SIZE+$L(Z0) K ^TMP("IBXTXMT",$J,MSG,Z) | 
|---|
|  | 115 | .S MSG=MSG+1 | 
|---|
|  | 116 | S CT=CT+1,^TMP("IBXTXMT",$J,MSG,CT)=LINE,SIZE=SIZE+LLEN | 
|---|
|  | 117 | Q | 
|---|
|  | 118 | ; | 
|---|
|  | 119 | DEV(IBFORM,NOQ) ; | 
|---|
|  | 120 | N IBFTYPE | 
|---|
|  | 121 | S:'$G(NOQ) %ZIS="Q" S %ZIS("A")="Output Device: " | 
|---|
|  | 122 | S %ZIS("B")=$P($G(^IBE(353,IBFORM,0)),"^",2) | 
|---|
|  | 123 | D ^%ZIS | 
|---|
|  | 124 | G:POP DEVQ | 
|---|
|  | 125 | I $D(IO("Q")) D  G DEVQ | 
|---|
|  | 126 | .S ZTRTN="FORMOUT^IBCEFG7",ZTDESC="PRINT FORM: "_$P($G(^IBE(353,IBFORM,0)),U),ZTSAVE("IB*")="" K ZTIO | 
|---|
|  | 127 | .I $D(^TMP("IBQONE",$J)) D | 
|---|
|  | 128 | ..S IBJ="",IBFTYPE="IBCFP"_$S($P($G(^IBE(353,IBFORM,2)),U,5):$P(^(2),U,5),1:IBFORM) | 
|---|
|  | 129 | ..S ZTSAVE("^XTMP(IBFTYPE,$J,")="" | 
|---|
|  | 130 | .D ^%ZTLOAD K IO("Q") D HOME^%ZIS | 
|---|
|  | 131 | .I $G(IBFTYPE)'="" K ^XTMP(IBFTYPE,$J) | 
|---|
|  | 132 | .I $D(ZTSK) W !!,"This job has been queued.  The task number is "_ZTSK_"." | 
|---|
|  | 133 | U IO | 
|---|
|  | 134 | DEVQ Q | 
|---|
|  | 135 | ; | 
|---|
|  | 136 | QUEUE(IBFORM) ; Ask to queue transmission | 
|---|
|  | 137 | N Y,DIR,OKAY | 
|---|
|  | 138 | S OKAY=1 | 
|---|
|  | 139 | S DIR(0)="Y",DIR("B")="YES",DIR("A")="Do you want to queue this transmission" W ! | 
|---|
|  | 140 | D ^DIR K DIR | 
|---|
|  | 141 | I $D(DTOUT)!$D(DUOUT) S OKAY=0 G QUEQ | 
|---|
|  | 142 | I 'Y D  G QUEQ | 
|---|
|  | 143 | .S DIR(0)="Y",DIR("B")="YES",DIR("A")="Do you want to run this job without queuing it now" | 
|---|
|  | 144 | .W ! D ^DIR K DIR | 
|---|
|  | 145 | .I 'Y S OKAY=0 | 
|---|
|  | 146 | ; - queue job to run | 
|---|
|  | 147 | W !!,"Please enter the date and time to execute this job...",! | 
|---|
|  | 148 | S ZTRTN="FORMOUT^IBCEFG7",ZTIO="",ZTDESC="OUTPUT FORMATTER - FORM: "_$P($G(^IBE(353,IBFORM,0)),U),ZTSAVE("IB*")="" | 
|---|
|  | 149 | S:$D(^TMP("IBRESUBMIT",$J)) ZTSAVE("^TMP(""IBRESUBMIT"",$J)")="",ZTSAVE("^TMP(""IBNOT"",$J)")="",ZTSAVE("^TMP(""IBRESUBMIT"",$J,")="",ZTSAVE("^TMP(""IBNOT"",$J,")="" | 
|---|
|  | 150 | I $D(^TMP("IBSELX",$J)) S ZTSAVE("^TMP(""IBSELX"",$J,")="",ZTSAVE("^TMP(""IBSELX"",$J)")="" | 
|---|
|  | 151 | D ^%ZTLOAD | 
|---|
|  | 152 | I $G(ZTSK) W !!,"This job has been queued.  The task number is "_ZTSK_"." | 
|---|
|  | 153 | QUEQ Q OKAY | 
|---|
|  | 154 | ; | 
|---|
|  | 155 | FPRE(IBFORM,IBPAR,IBXERR) ; Executes pre-processor | 
|---|
|  | 156 | I $G(^IBE(353,IBFORM,"FPRE"))'="" X ^("FPRE") ;Form pre-processor | 
|---|
|  | 157 | I $G(^IBE(353,IBFORM,"FPRE"))="",$G(^IBE(353,IBPAR,"FPRE"))'="" X ^("FPRE") ;Parent form pre-processor | 
|---|
|  | 158 | Q | 
|---|
|  | 159 | ; | 
|---|
|  | 160 | FPOST(IBFORM,IBPAR,IBXERR) ; Executes post-processor | 
|---|
|  | 161 | I $G(^IBE(353,IBFORM,"FPOST"))'="" X ^("FPOST") ;Form post-processor | 
|---|
|  | 162 | I $G(^IBE(353,IBFORM,"FPOST"))="",$G(^IBE(353,IBPAR,"FPOST"))'="" X ^("FPOST") ;Parent form post-processor | 
|---|
|  | 163 | Q | 
|---|
|  | 164 | ; | 
|---|
|  | 165 | FMFLD(IBDA) ;Return the file#field for fileman field referenced as a data | 
|---|
|  | 166 | ; element in file 364.7's IBDA entry. | 
|---|
|  | 167 | N Z,Z0,ND0 | 
|---|
|  | 168 | S Z0=+$P($G(^IBA(364.7,IBDA,0)),U,3),ND0=$G(^IBA(364.5,+Z0,0)) | 
|---|
|  | 169 | I $P(ND0,U,3)'="F"!($P(ND0,U,6)="") S Z="" G FLDQ | 
|---|
|  | 170 | S Z=$P(ND0,U,5),Z1=$P(ND0,U,6) | 
|---|
|  | 171 | I Z1[":" D  ;Navigation | 
|---|
|  | 172 | . S Z2=$O(^DD(+Z,"B",$P(Z1,":"),"")) Q:'Z2 | 
|---|
|  | 173 | . S Z=+$P($P($G(^DD(399,Z2,0)),U,2),"P",2) | 
|---|
|  | 174 | . I Z S Z1=$P(Z1,":",2) | 
|---|
|  | 175 | I Z S Z=Z_"#"_$O(^DD(+Z,"B",Z1,"")) | 
|---|
|  | 176 | FLDQ Q Z | 
|---|
|  | 177 | ; | 
|---|