COMPILE SUBROUTINE Print_Cass_Ship_Label( WONo,WOSteps,CassNos,RDSNos )
#pragma precomp SRP_PreCompiler

//Complete Rewrite for EpiPRO 06/11/2006 by John C. Henry, J.C. Henry & Co., Inc.

$INSERT LOGICAL
$INSERT MSG_EQUATES
$INSERT RDS_EQU

$INSERT PROD_VER_EQUATES
$INSERT OIPRINT_EQUATES
$INSERT PROD_SPEC_EQU
$INSERT PRS_LAYER_EQU
$INSERT WO_LOG_EQUATES
$INSERT WO_STEP_EQU
$INSERT WO_MAT_EQUATES
$INSERT WM_OUT_EQUATES
$INSERT ORDER_EQU
$INSERT ORDER_DET_EQU
$INSERT REACTOR_EQUATES
$INSERT REACT_RUN_EQUATES

DECLARE FUNCTION	Msg, Get_Printer, Set_Printer, obj_Prod_Spec
DECLARE FUNCTION	Get_Status, Utility, Printer_Select, obj_Install, Direct_Print, Environment_Services
DECLARE SUBROUTINE	Set_Status, Msg, errMsg, obj_Zebra105SL

EQU PI$LEFT		TO	1
EQU PI$TOP		TO  2
EQU PI$RIGHT	TO	3
EQU PI$BOTTOM	TO	4
EQU PI$WIDTH	TO 	5
EQU PI$HEIGHT	TO	6
EQU PI$SIZE		TO	7

ErrorMsg = ''

IF NOT(ASSIGNED(WONo))		THEN ErrorMsg = 'Unassigned parameter "WONo" passed to PRINT_CASS_SHIP_LABEL routine.'
IF NOT(ASSIGNED(WOSteps))	THEN ErrorMsg = 'Unassigned parameter "WOSteps" passed to PRINT_CASS_SHIP_LABEL routine.'
IF NOT(ASSIGNED(CassNos))	THEN ErrorMsg = 'Unassigned parameter "CassNos" passed to PRINT_CASS_SHIP_LABEL routine.'
IF NOT(ASSIGNED(RDSNos))	THEN ErrorMsg = 'Unassigned parameter "RDSNos" passed to PRINT_CASS_SHIP_LABEL routine.'

IF ErrorMsg NE '' THEN
	ErrMsg(ErrorMsg)
	RETURN
END	

PrinterID  = '\\mesirwfp001\MESZBRPRT003'	;* This is the 105SL - This is the production 1

* Initialize the printer
FileName 	= "Printing Label"
Title       = "Printing Label"	;* Initialize Printing

PageInfo			= ''
PageInfo<PI$LEFT>	= 0.1
PageInfo<PI$TOP>	= 0.1
PageInfo<PI$RIGHT>	= 0.1
PageInfo<PI$BOTTOM>	= 0.1

PageSetup	= '1' 							;* Landscape
PrintSetup  = '0'							;* Print to specific location
PrintPath	= Printer_Select(PrinterID)		;* Select printer - Displays popup if PrinterPort not found 

IF PrintPath = '' THEN
	Def = ""
	Def<MTYPE$> = "TA3"
	Def<MTEXT$> = 'Destination Printer not Selected..'
	Def<MCAPTION$> = ''
	Def<MICON$> = '*'
	Msg(@WINDOW, Def, '')
	RETURN
END

If Environment_Services('GetLabelPrintMethod') _EQC 'OIPI' then
    stat = Set_Printer("INIT",FileName,Title,PageInfo,PageSetup,PrintSetup,PrintPath)
end else
    stat = Direct_Print('START', PrintPath<1>, '', '')
end
IF stat < 0 THEN GOSUB OIPrint_Err			;* Bail = couldn't initialize the printer

BitMap = obj_Install('Get_Prop','ZebraGRF')			;* Substitute company logo converted to .GRF (Zebra graphics format)
OSREAD ImageData FROM BitMap ELSE
	ErrMsg('Unable to read ':BitMap:' file for BarCode Label')
END
GRFName = FIELD(BitMap,'.',1)

ReactNos	= XLATE('REACT_RUN',RDSNos,REACT_RUN_REACTOR$,'X')										;* Added 12/16/2008 - JCH - Adding Reactor Type codes to cassette labels
ReactTypes	= OCONV(XLATE('REACTOR',ReactNos,REACTOR_REACT_TYPE$,'X'),'[REACT_TYPE_CONV,OPSREF]')	;* Added 12/16/2008 - JCH - Adding Reactor Type codes to cassette labels

WORec		= XLATE('WO_LOG',WONo,'','X')

ReqShipDt	= OCONV( WORec<WO_LOG_PROMISE_SHIP_DT$>, 'D2/' )

ProdOrdNo	= WORec<WO_LOG_PROD_ORD_NO$>
ProdVerNo	= WORec<WO_LOG_PROD_VER_NO$>

IF ProdOrdNo NE '' THEN
	PONo = ProdOrdNo
	
	ProdVerRec = XLATE('PROD_VER',ProdVerNo,'','X')
	
	CustNo		= ProdVerRec<PROD_VER_CUST_NO$>
	ReactTypes	= OCONV(ProdVerRec<PROD_VER_REACT_TYPE$>,'[REACT_TYPE_CONV,OPSREF]')		;*************************************************** fix this
	
	OrderItems = ''
	VisionOrderNo = ''
	VisionLineNos = ''
END ELSE
	OrderNo		= WORec<WO_LOG_ORDER_NO$>
	OrderItems	= WORec<WO_LOG_ORDER_ITEM$>

	OrderRec	= XLATE('ORDER',OrderNo,'','X')

	PONo			= OrderRec<ORDER_PO_NO$>
	CustNo			= OrderRec<ORDER_CUST_NO$>
	VisionOrderNo	= OrderRec<ORDER_VISION_ORDER_NO$>
	VisionLineNos	= XLATE('ORDER_DET',OrderItems,ORDER_DET_VISION_LINE_NO$,'X')
END

CustName = XLATE('COMPANY',CustNo,4,'X')

CassCnt = COUNT(CassNos,@VM) + (CassNos NE '')

FOR I = 1 TO CassCnt

	WOStep			= WOSteps<1,I>
	ProdSpecID		= XLATE('WO_STEP',WONo:'*':WOStep,WO_STEP_PROD_SPEC_ID$,'X')
	RevLvl			= XLATE('PROD_SPEC',ProdSpecID,PROD_SPEC_REV_NUM$,'X')[-1,'B':@VM]	;* Take only the last revision level
	
	CassNo	= CassNos<1,I>
	RDSNo	= RDSNos<1,I>
	
	WOMatRec	= XLATE('WO_MAT',WONo:'*':CassNo,'','X')
	SAPBatchNo	= WOMatRec<WO_MAT_SAP_BATCH_NO$>
	
	IF RDSNo NE '' THEN
	
		CassIDLabel = 'RDSNo:'
		CassID		= RDSNo
		ReactType = ReactTypes<1,I>
		
		MakeupBox		= WOMatRec<WO_MAT_MAKEUP_BOX$>
		PartNo			= WOMatRec<WO_MAT_CUST_PART_NO$>
		LotNo			= WOMatRec<WO_MAT_LOT_NO$>
		SubstrPartNo	= WOMatRec<WO_MAT_SUB_PART_NO$>
		CassOrderItem	= WOMatRec<WO_MAT_ORDER_ITEM$>												;***************************************
		
		IF ProdVerNo = '' THEN
			CustPNDesc		= XLATE( 'ORDER_DET',OrderNo:'*':CassOrderItem,'CUST_PN_DESC','X')			;***************************************
		END ELSE
			CustPNDesc = XLATE('PROD_VER',ProdVerNo,PROD_VER_CUST_PART_DESC$,'X')
		END
				
		SupVerify		= XLATE( 'RDS', RDSNo, 'SUP_VER_SIG_NAME', 'X' )
		SupVerifyDt		= OCONV(XLATE('WO_MAT',WONo:'*':CassNo,'SHIP_SUP_VER_SIG_DT','X'),'D2/')
		WfrsOut			= XLATE( 'RDS', RDSNo, 'WFRS_OUT', 'X' )
		MUWfrsRemQty	= XLATE( 'RDS', RDSNo, 'MU_WFRS_REMOVED','X' )
		MUWfrsAddQty	= XLATE( 'RDS', RDSNo, 'MU_WFRS_ADDED','X' )
			
		ResultThickL1   = OCONV( XLATE( 'RDS', RDSNo, 'TTHICK_AVG', 'X' ), 'MD2' )
		ResultThickL2	= OCONV( XLATE( 'RDS', RDSNo, 'TTHICK_AVG_L2', 'X' ), 'MD2' )
		ResultThickL3	= OCONV( XLATE( 'RDS', RDSNo, 'TTHICK_AVG_L3', 'X' ), 'MD2' )
		
		TargetThickL1	= OCONV( XLATE( 'RDS', RDSNo, 'THICK_TARGET', 'X' ), 'MD2' )
		TargetThickL2	= OCONV( XLATE( 'RDS', RDSNo, 'THICK_TARGET_L2', 'X' ), 'MD2' )
		TargetThickL3	= OCONV( XLATE( 'RDS', RDSNo, 'THICK_TARGET_L3', 'X' ), 'MD2' )
		
		IF ResultThickL1 = '' THEN ResultThickL1 = TargetThickL1
		IF ResultThickL2 = '' THEN ResultThickL2 = TargetThickL2
		IF ResultThickL3 = '' THEN ResultThickL3 = TargetThickL3		
				   
		ThickUnitsL1    = XLATE( 'RDS', RDSNo, 'THICK_UNITS', 'X' )
		ThickUnitsL2    = XLATE( 'RDS', RDSNo, 'THICK_UNITS_L2', 'X' )
		ThickUnitsL3    = XLATE( 'RDS', RDSNo, 'THICK_UNITS_L3', 'X' )
		
		ResultThick = ResultThickL1
		IF ResultThickL2 NE '' THEN ResultThick := '/':ResultThickL2
		IF ResultThickL3 NE '' THEN ResultThick := '/':ResultThickL3
		
		IF ResultThick NE '' THEN ResultThick := ThickUnitsL1
		
		ResultResL1		= XLATE( 'RDS', RDSNo, 'TRES_AVG', 'X' )
		ResultResL2		= XLATE( 'RDS', RDSNo, 'TRES_AVG_L2', 'X' )
		ResultResL3		= XLATE( 'RDS', RDSNo, 'TRES_AVG_L3', 'X' )
		
		TargetResL1		= OCONV( XLATE( 'RDS', RDSNo, 'RES_TARGET', 'X' ), 'MD3' )   
		TargetResL2		= OCONV( XLATE( 'RDS', RDSNo, 'RES_TARGET_L2', 'X' ), 'MD3' )
		TargetResL3		= OCONV( XLATE( 'RDS', RDSNo, 'RES_TARGET_L3', 'X' ), 'MD3' )

		IF ResultResL1	= '' THEN ResultResL1 = TargetResL1
		IF ResultResL2	= '' THEN ResultResL2 = TargetResL2
		IF ResultResL3	= '' THEN ResultResL3 = TargetResL3
		
		ResUnitsL1		= XLATE( 'RDS', RDSNo, 'RES_UNITS', 'X' )
		ResUnitsL2		= XLATE( 'RDS', RDSNo, 'RES_UNITS_L2', 'X' )
		ResUnitsL3		= XLATE( 'RDS', RDSNo, 'RES_UNITS_L3', 'X' )
		
		ResultRes = ResultResL1
		IF ResultResL2 NE '' THEN ResultRes := '/':ResultResL2
		IF ResultResL3 NE '' THEN ResultRes := '/':ResultResL3
		IF ResultRes NE '' THEN ResultRes := ResUnitsL1

		TargetConL1		= OCONV( XLATE( 'RDS', RDSNo, 'CON_TARGET', 'X' )<1,1>, 'MS21' )
		TargetConL2		= OCONV( XLATE( 'RDS', RDSNo, 'CON_TARGET_L2', 'X' ), 'MS21' )
		TargetConL3		= OCONV( XLATE( 'RDS', RDSNo, 'CON_TARGET_L3', 'X' ), 'MS21' )

		ConUnitsL1		= XLATE( 'RDS', RDSNo, 'CON_UNITS', 'X' )
		ConUnitsL2		= XLATE( 'RDS', RDSNo, 'CON_UNITS_L2', 'X' )
		ConUnitsL3		= XLATE( 'RDS', RDSNo, 'CON_UNITS_L3', 'X' )
		
		ResultCon = TargetConL1
		IF TargetConL2 NE '' THEN ResultCon := '/':TargetConL2
		IF TargetConL3 NE '' THEN ResultCon := '/':TargetConL3
		IF ResultCon NE '' THEN ResultCon := ConUnitsL1
		
	END ELSE
		
		WMOutKey = WONo:'*':WOStep:'*':CassNo
		WMOutRec = XLATE('WM_OUT',WMOutKey,'','X')
		
		MakeupBox = WMOutRec<WM_OUT_MAKEUP_BOX$>
		
		CassIDLabel = 'WMONo:'
		CassID		= WMOutKey
		
		CONVERT '*' TO '.' IN CassID
		
		ReactType = 'EpiPro'										;* * * * 12/17/2008 Harded coded reactor type for EpiPro reactors
		
		SupVerify		= WMOutRec<WM_OUT_SUP_VER_SIG$>
		SupVerifyDt		= OCONV(XLATE('WO_MAT',WONo:'*':CassNo,'SHIP_SUP_VER_SIG_DT','X'),'D2/')
		
		InCassNo1		= ''
		InSlotNo1		= ''
		MUWoNo1			= ''
		MUCassNo1		= ''
		MUSlotNo1		= ''
		
		PartNo 			= ''
		LotNo			= ''
		SubstrPartNo	= ''
		CassOrderItem	= ''
		CustPNDesc		= ''
		
		Pointer = 1
		LOOP
			IF WMOutRec<WM_OUT_MU_WO_NO$,Pointer> = '' THEN
				InCassNo1	= WMOutRec<WM_OUT_IN_CASS_NO$,Pointer>
				InSlotNo1	= WMoutRec<WM_OUT_IN_SLOT_NO$,Pointer>
			END ELSE
				IF MUWoNo1 = '' THEN
					MUWoNo1		= WMOutRec<WM_OUT_MU_WO_NO$,Pointer>
					MUCassNo1	= WMOutRec<WM_OUT_MU_CASS_NO$,Pointer>
					MUSlotNo1	= WMOutRec<WM_OUT_MU_SLOT_NO$,Pointer>
				END
			END
			
		UNTIL InCassNo1 NE '' OR Pointer > 25
			Pointer += 1
		REPEAT
		
		IF InCassNo1 NE '' THEN
			WOMatRec = XLATE('WO_MAT',WONo:'*':InCassNo1,'','X')
			PartNo			= WOMatRec<WO_MAT_CUST_PART_NO$>
			LotNo			= WOMatRec<WO_MAT_LOT_NO$>
			SubstrPartNo	= WOMatRec<WO_MAT_SUB_PART_NO$>
			CassOrderItem	= WOMatRec<WO_MAT_ORDER_ITEM$>
			CustPNDesc		= XLATE( 'ORDER_DET',OrderNo:'*':CassOrderItem,'CUST_PN_DESC','X')
			
		END ELSE
			IF MUWoNo1 NE '' AND MUCassNo1 NE '' THEN
				MUWOMatRec = XLATE('WO_MAT',MUWoNo1:'*':MUCassNo1,'','X')
				PartNo			= MUWOMatRec<WO_MAT_CUST_PART_NO$>
				LotNo			= MUWOMatRec<WO_MAT_LOT_NO$>
				SubstrPartNo	= MUWOMatRec<WO_MAT_SUB_PART_NO$>
				CassOrderItem	= MUWOMatRec<WO_MAT_ORDER_ITEM$>
				CustPNDesc		= XLATE( 'ORDER_DET',OrderNo:'*':CassOrderItem,'CUST_PN_DESC','X')
				
			END
		END
				
		WfrsOut			= XLATE('WM_OUT',WMOutKey,'WFRS_OUT','X')
		MUWfrsRemQty	= ''
		MUWfrsAddQty	= ''
	
		Specs = obj_Prod_Spec('GetLayerProp',ProdSpecID)
		
		ResultThick = ''
		ResultRes = ''
		ResultCon = ''
		
		LayerCount = COUNT(Specs,@RM) + (Specs NE '')
		
		FOR Layer = 1 TO LayerCount
			LayerSpecs = FIELD(Specs,@RM,Layer)
			LayerSpecs = FIELD(LayerSpecs,@FM,2,99)			;* Pull of the layer set ID
			
			IF LayerSpecs<PRS_LAYER_THICK_TARGET$> NE '' THEN
				ResultThick := LayerSpecs<PRS_LAYER_THICK_TARGET$>
			END
			
			IF LayerSpecs<PRS_LAYER_RES_TARGET$> NE '' THEN
				ResultRes	:= LayerSpecs<PRS_LAYER_RES_TARGET$>
			END
			
			IF LayerSpecs<PRS_LAYER_CONC_TARGET$> NE '' THEN
				ResultCon	:= LayerSpecs<PRS_LAYER_CONC_TARGET$>
			END
			
			IF Layer < LayerCount THEN
				IF ResultThick NE ''	THEN ResultThick := '/'
				IF ResultRes NE ''		THEN ResultRes := '/'
				IF ResultCon NE ''		THEN ResultCon := '/'
			END ELSE
				IF ResultThick NE ''	THEN ResultThick := LayerSpecs<PRS_LAYER_THICK_UNITS$>
				IF ResultRes NE ''		THEN ResultRes := LayerSpecs<PRS_LAYER_RES_UNITS$>
				IF ResultCon NE ''		THEN ResultCon := LayerSpecs<PRS_LAYER_CONC_UNITS$>
			END
		NEXT Layer
		
	END
	
	IF ProdVerNo NE '' THEN
		CassIDLabel = 'CassID:'
	END

	GOSUB PrintLabel

NEXT I

* * * * * * *
OIPrint_Err:
* * * * * * *

If Environment_Services('GetLabelPrintMethod') _EQC 'OIPI' then
    stat = Set_Printer("TERM")
end else
    stat = Direct_Print('STOP')
end

RETURN

* * * * * * * *
PrintLabel:
* * * * * * * *

MULabel = ''
IF MakeupBox = 1	THEN  MULabel = '** Makeup Box **'

*IF MUWfrsRemQty > 0	THEN MULabel = '** Makeup Box **'	;* Decided to ship a makeup box 6/3/2009 JCH

IF MUWfrsAddQty > 0 THEN MULabel = 'Merged Lot'

SuppCd = SubstrPartNo[-1,'B-']			;* Added 8/17/2005 JCH - J.C. Henry & Co.

IF LEN(SuppCd) NE 2 THEN SuppCd = ''					;* Should be either IW, IS or IM

* Check bar coded data for validity for length
ErrorMsg = ''


IF LEN(PartNo) > 18		THEN ErrorMsg = 'CustPartNo parameter exceeds 18 characters.'
IF LEN(RevLvl) > 3		THEN ErrorMsg = 'RevLvl parameter exceeds 3 characters.'
IF LEN(WfrsOut) > 6		THEN ErrorMsg = 'PartQty parameter exceeds 6 characters.'
IF NOT(NUM(WfrsOut))	THEN ErrorMsg = 'PartQty parameter is not a number.'

IF ErrorMsg THEN
	ErrMsg(ErrorMsg)
END ELSE
	* Good to go on the label print
	
    If Environment_Services('GetLabelPrintMethod') _EQC 'OIPI' then
        stat = Set_Printer('TEXT',ImageData)
    end else
        stat = Direct_Print('PRINT', ImageData)
    end
	* Label is 812 x 608 dots at 8dots/mm (203 dots/inch)
	* Leave periodic spaces in Label String - OIPrint interface wraps text on spaces and will cut off 
	* the LabelString if there aren't any spaces.  Printer Width needs to be set to 132 or greater

	LabelString  = '^XA'				;* Start of label format
	LabelString := '^LH30,70'			;* Label home offset (needed to get onto the label medium)
	LabelString := '^BY3'				;* Set narrow Bar Code line width to 3 dots
	LabelString := '^PR2'				;* Print speed = 2 IPS

	LabelString := '^FO0,156^GB809,0,3,B^FS':@FM	;* 'Top' of 4x3 Label
	LabelString := '^FO0,308^GB809,0,3,B^FS':@FM	;* 1st 'horizontal' line (bottom of 1st cell)
	LabelString := '^FO0,460^GB809,0,3,B^FS':@FM	;* 2nd 'horizontal' line (bottom of 2nd cell)

	* Block 1 Left (Cust Part)
	LabelString := '^FO0,10^A0,25^FDCust Part(1P):^FS':CRLF$			;* Label Line 1
	LabelString := '^FO15,45^A0,50,40^FD':PartNo:'^FS':CRLF$			;* Readable
	LabelString := '^FO15,95^BY2^BC,60,N^FDP':PartNo:'^FS':CRLF$		;* Code 128
	LabelString := '^BY3,3.0':CRLF$

	* Block 1 Right (Rev Lvl)
	LabelString := '^FO508,0^BY2^B3,,60,N^FD2P':RevLvl:'^FS':CRLF$		;* Code 39
	LabelString := '^BY3,3.0':CRLF$
	LabelString := '^FO508,70^A0,25^FDRev.Level (2P):^FS':CRLF$			;* Label Line 1
	LabelString := '^FO680,70^A0,50,48^FD':RevLvl:'^FS':CRLF$			;* Readable

	* Block 2 Left (Quantity)
	LabelString := '^FO0,165^A0,25^FDQuantity (Q):^FS':CRLF$			;* Label Line 1
	LabelString := '^FO15,195^A0,50,40^FD':WfrsOut:'^FS':CRLF$			;* Readable
	LabelString := '^FO15,245^BY2^B3,,60,N^FDQ':WfrsOut:'^FS':CRLF$		;* Code 39
	LabelString := '^BY3,3.0':CRLF$

	* Block 3 Left (Customer Lot)
	LabelString := '^FO0,315^A0,25^FDCustomer Lot:^FS':CRLF$			;* Label Line 1
	LabelString := '^FO15,350^A0,50,40^FD':LotNo:'^FS':CRLF$			;* Readable
	LabelString := '^FO15,400^BY2^B3,,60,N^FD':LotNo:'^FS':CRLF$		;* Code 39
	LabelString := '^BY3,3.0':CRLF$

	* Block 3 Right (Supplier)
	LabelString := '^FO360,320^XGR:':GRFName:',1,1^FS'					;* Horizontal Company Logo

	* Block 4
	LabelString := '^FO0,470^A0,25^FDCustomer:^FS':CRLF$				;* Label Line
	LabelString := '^FO120,470^A0,45,25^FD':CustName:'^FS':CRLF$		;* Readable
	LabelString := '^FO0,515^A0,25^FD':CassIDLabel:'^FS':CRLF$			;* Label Line
	LabelString := '^FO100,515^A0,36,40^FD':CassID:'^FS':CRLF$			;* Readable
	LabelString := '^FO300,515^BY2^B3,,50,N^FD':CassID:'^FS':CRLF$		;* Code 39 (This is the Cass ID)
	LabelString := '^BY3,3.0':CRLF$
	
	IF SuppCd NE '' THEN
		LabelString := '^FO600,515^A0,25^FDSupp Cd:^FS':CRLF$				;* Label Line - Added 8/17/2005 JCH Supplier Code Info
		LabelString := '^FO710,515^A0,36,40^FD':SuppCd:'^FS':CRLF$			;* Readable
		
		LabelString := '^FO600,460^BY2^B3,,50,N^FD':SuppCd:'^FS':CRLF$		;* Code 39 Supplier Code
		LabelString := '^BY3,3.0':CRLF$
	END
	
	LabelString := '^FO0,570^A0,25^FDPO No:^FS':CRLF$					;* Label Line
	
	IF ProdVerNo = '' THEN
		LabelString := '^FO80,570^A0,36,20^FD':PONo:'^FS':CRLF$				;* Readable
	END ELSE
		LabelString := '^FO80,570^A0,36,40^FD':PONo:'^FS':CRLF$				;* Readable
	END

	LabelString := '^FO280,570^A0,25^FDWO No:^FS':CRLF$					;* Label Line
	LabelString := '^FO360,570^A0,36^FD':WONo:'^FS':CRLF$				;* Readable
	LabelString := '^FO500,570^A0,25^FDReq Ship Dt:^FS':CRLF$			;* Label Line
	LabelString := '^FO640,570^A0,36^FD':ReqShipDt:'^FS':CRLF$			;* Readable
	
	IF CustNo = '6775' OR CustNo = '7053' THEN
		LabelString := '^FO0,610^A0,25^FDComp Dt:^FS':CRLF$					;* Label Line
		LabelString := '^FO100,610^A0,36^FD':SupVerifyDt:'^FS':CRLF$		;* Readable
	END
	
	LabelString := '^FO280,610^A0,25^FDReact Type:^FS':CRLF$				;* Label Line		Added 12/16/2008 - JCH
	LabelString := '^FO420,610^A0,36^FD':ReactType:'^FS':CRLF$				;* Readable			Added 12/16/2008 - JCH
	
	IF MULabel NE '' THEN
		LabelString := '^FO450,470^A0,40^FD':MULabel:'^FS':CRLF$
	END
	
	IF SAPBatchNo = '' THEN
		ConcLabelString = FMT(PartNo,"L#15"):FMT(CassID,"L#12"):FMT(WfrsOut,"R#6")
	END ELSE
		ConcLabelString = FMT(PartNo,"L#15"):FMT(SAPBatchNo,"L#12"):FMT(WfrsOut,"R#6")
	END

	LabelString := '^FO20,650^BY2^BAN,90,N,N,N^FD':ConcLabelString:'^FS':CRLF$		;* Code 93
	LabelString := '^XZ'

    If Environment_Services('GetLabelPrintMethod') _EQC 'OIPI' then
        stat = Set_Printer('TEXT',LabelString)
    end else
        stat = Direct_Print('PRINT', LabelString)
    end
END	


RETURN
