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 | ;
|
---|