compile function print_quote( QuoteIds ) declare function security_check, set_printer, get_printer, msg, fieldcount, entid, repository declare function ex_vm_rem, obj_Install, Printer_Select declare subroutine security_err_msg $insert security_rights_equ $insert oiprint_equates $insert msg_equates $insert company_equ $insert names_equ $insert quote_equ $insert prod_spec_equ $insert quote_spec_equ $insert lsl_users_equ EQU F_NAME$ TO 1 EQU F_POINTSIZE$ TO 2 EQU F_JUST$ TO 3 EQU F_BOLD$ TO 4 EQU F_ITALICS$ TO 5 EQU F_UNDERLINE$ TO 6 EQU F_STRIKETHRU$ TO 7 EQU F_FORECOLOR$ TO 8 EQU F_ESCAPEMENT$ TO 9 equ MaxLayers$ to 10 equ ComLastPrint$ to 9.43 * EVentually this code could be modified to not xlate all the symbollics but rather * open dict to @dict and use {field} ; not a high priority Ncnt = fieldcount( QuoteIds, @fm ) * New Style PDF printing (OI7.1) added 1/29/04 John C. Henry, J.C. Henry & Co. *FileNameParms = 'Printing Quote':@FM: '' :@FM: 6 :@FM: '' PrintSetup = '' PrintSetup<1,1> = '2' ;* Preview Normal PrintSetup<1,2> = '5' ;* Display all buttons except Printer Setup PrintSetup<1,3> = '0' ;* Display Printing Window PrintSetup<1,6> = '7' ;* Preview window - keyboard and mouse support stat = Set_Printer( 'INIT', FileNameParms, 'Quote', .5:@fm:.25:@fm:.25:@fm:.25, 0:@fm:1 , PrintSetup) *Stat = set_printer( 'INIT', '', '', .5:@fm:.25:@fm:.25:@fm:.25, 0:@fm:1,PrintPreview) Font = '' Stat = set_printer( 'FONT', Font ) for i = 1 to Ncnt ThisQuote = QuoteIds QuoteRec = xlate( 'QUOTE', ThisQuote, '', 'X' ) PSNId = QuoteRec PSNRec = xlate( 'PROD_SPEC', PSNId, '', 'X' ) PrevPSNs = QuoteRec AllPSNs = PrevPSNs:@vm:PSNId * Set all printvariables CustID = QuoteRec CustRec = xlate( 'COMPANY', CustID, '', 'X' ) CSZ = xlate( 'COMPANY', CustID, 'CSZ', 'X' ) CustAddress = CustRec CustAddress = ex_vm_rem( CustAddress ) Buyer = oconv( CustID, '[XLATE_CONV,COMPANY*CO_NAME]' ) Seller = 'Silicon Division' AcctRep = xlate( 'QUOTE', ThisQuote, 'ACCT_REP', 'X' ) AcctRepRec = xlate( 'LSL_USERS', AcctRep, '', 'X' ) AcctRepDID = oconv( AcctRepRec, '[PHONE_FORMAT]' ) AcctRepEmail = AcctRepRec AcctRepFax = oconv( AcctRepRec, '[PHONE_FORMAT]' ) AcctRep = oconv( xlate( 'QUOTE', ThisQuote, 'ACCT_REP', 'X' ), '[XLATE_CONV,LSL_USERS*FIRST_LAST]' ) FaxNumber = oconv( QuoteRec, '[PHONE_FORMAT]' ) if FaxNumber = '' then FaxNumber = QuoteRec end QuoteDetail = QuoteRec PPW = oconv( QuoteRec, 'MD2,$' ) Quantity = QuoteRec Amount = oconv( xlate( 'QUOTE', ThisQuote, 'AMOUNT', 'X' ), 'MD2,$' ) NameNo = QuoteRec Contact = xlate( 'NAMES', NameNo, 'FIRST_LAST', 'X' ) NameRec = xlate( 'NAMES', NameNo, '', 'X' ) PTypes = NameRec IPTypes = NameRec Phones = NameRec IPhones = NameRec ContactEmail = NameRec convert @lower_case to @upper_case in PTypes convert @lower_case to @upper_case in IPTypes PhoneToUse = '' locate 'OFFICE' in PTypes using @vm setting TPos then PhoneToUse = oconv( Phones<1,TPos>, '[PHONE_FORMAT]' ) end else * Basically delete all FAX numbers and then use the top one Pcnt = fieldcount( Phones, @vm ) for Pp = Pcnt to 1 step -1 if PTypes<1,Pp> = 'FAX' then Phones = delete( Phones, 1, Pp, 0 ) end next Pp PhoneToUse = oconv( Phones<1,1>, '[PHONE_FORMAT]' ) ;* SIMPLY TAKE THE FIRST ONE end if PhoneToUse = '' then locate 'OFFICE' in IPhones using @vm setting TPos then PhoneToUse = IPhones<1,TPos> end else * Basically delete all fax numbers and then use the top one Pcnt = fieldcount( IPhones, @vm ) for Pp = Pcnt to 1 step -1 if IPTypes<1,Pp> = 'FAX' then IPhones = delete( IPhones, 1, Pp, 0 ) end next Pp PhoneToUse = IPhones<1,1> end end RFQ = QuoteRec EntryDate = oconv( QuoteRec, 'D2/' ) Spec = PSNRec<1,1> Terms = QuoteRec FOBPoint = QuoteRec if FOBPoint = '' then FOBPoint = 'Mesa, Arizona U.S.A.' end Comments = QuoteRec Convert @tm to @fm in Comments SpecSub = PSNRec SubOrient = SpecSub<1,QSSubOrientation$> SubDiam = SpecSub<1,QSSubWafersize$> SubDopant = SpecSub<1,QSSubDopant$> SubRest = SpecSub<1,QSSubResistivity$> SubBL1 = SpecSub<1,QSSubBl1Dopant$> SubBl2 = SpecSub<1,QSSubBl2Dopant$> SubBl3 = SpecSub<1,QSSubBl3Dopant$> SubPolish = SpecSub<1,QSSubPolish$> SubResUnits = SpecSub<1,QSSubResUnits$> if SubBL1 = '' then SubBL1 = 'None' end if SubBL2 = '' then SubBL2 = 'None' end if SubBL3 = '' then SubBL3 = 'None' end * Print the Company Logo and Information location = 0.06:@fm:0.0:@fm:1.57:@fm:1 BitMapPath = obj_Install('Get_Prop','ColorBMP') stat = Set_Printer('BMP',BitMapPath,location, 0,1) Font = 'Arial' Font = 17 Font = 1 Void = set_printer( 'FONT', Font ) * TableColInfo = '~^+10800' TableInfo = '' TableInfo:= 'Quotation' Void = set_printer( 'ADDTABLE', TableColInfo, '', TableInfo, '', '', 0, TB_NONE ) Void = set_printer( 'TEXT', '' ) Void = set_printer( 'TEXT', '' ) Font = 6 Void = set_printer( 'FONT', Font ) Void = set_printer( 'TEXT', '' ) Font = 11 Font = 1 Void = set_printer( 'FONT', Font ) TableColInfo = '~>+10800' TableInfo = oconv( ThisQuote, 'D2/' ) Void = set_printer( 'ADDTABLE', TableColInfo, '', TableInfo, '', '', 0, TB_NONE ) Void = set_printer( 'TEXT', '' ) * BUYER AND SELLER INFORMATION Void = set_printer( 'LINESTYLE', PS_SOLID:@fm:1 ) Void = set_printer( 'LINE',0:@fm:1.0:@fm:7.56:@fm:1.0, 0 ) Font = 'Arial' Font = 14 Font = 1 Void = set_printer( 'FONT', Font ) TableColInfo = '^~5400':@vm:'^~5400' TableInfo = 'Seller':@vm:'Buyer' Void = set_printer( 'ADDTABLE', TableColInfo, '', TableInfo, '', '', 0, TB_NONE ) Void = set_printer( 'FONT', '' ) *Void = set_printer( 'TEXT', '' ) Font = 11 Font = 0 Void = set_printer( 'FONT', Font ) CompName = obj_Install('Get_Prop','Company') Division = obj_Install('Get_Prop','Division') TableInfo = CompName:@vm:'':@fm IF Division NE '' THEN TableInfo:= Division:@vm:'':@fm END TableInfo:= obj_Install('Get_Prop','Address'):@vm:Buyer:@fm TableInfo:= obj_Install('Get_Prop','CSZ'):@vm:Contact:@fm TableInfo:= 'Phone:':obj_Install('Get_Prop','Phone'):@vm:CustAddress<1,1>:@fm TableInfo:= 'Fax:':obj_Install('Get_Prop','FAX'):@vm:CustAddress<1,2>:@fm TableInfo:= obj_Install('Get_Prop','EMail'):@vm:CustAddress<1,3>:@fm TableInfo:= '':@vm:CSZ:@fm TableInfo:= 'ACCT Rep: ':AcctRep:@vm:'Phone#: ':PhoneToUse:@fm TableInfo:= 'E-Mail: ':AcctRepEmail:@vm:'Fax#: ':FaxNumber:@fm TableInfo:= 'Phone: ':AcctRepDID:@vm:'E-Mail: ':ContactEmail:@fm TableInfo:= 'Fax: ':AcctRepFax:@vm:'Fob Point: ':FOBPoint:@fm TableInfo:= '':@vm:'':@vm:'' TableColInfo = '<~5400':@vm:'<~5400' Void = set_printer( 'ADDTABLE', TableColInfo, '', TableInfo, '', '', 0, TB_NONE ) CurPos = get_printer( 'POS' ) CurYPos = CurPos<2>-.03 Void = set_printer( 'LINE', 3.5:@fm:1.0:@fm:3.5:@fm:CurYPos, 0 ) Void = set_printer( 'LINE', 0:@fm:CurYPos:@fm:7.5:@fm:CurYPos, 0 ) * GENERAL INFORMATION AREA Font = 12 Font = 1 Font = 1 ;* ITALIC Void = set_printer( 'FONT', Font ) TableColInfo = '~^+10800' TableInfo = '' TableInfo:= 'General Information' Void = set_printer( 'ADDTABLE', TableColInfo, '', TableInfo, '', '', 0, TB_NONE ) Void = set_printer( 'TEXT', '' ) Font = 11 Font = 0 Font = 0 Void = set_printer( 'FONT', Font ) PartNumbers = xlate( 'PROD_SPEC', PSNId, prod_spec_part_nums$, 'X' ) if index( PartNumbers, @vm, 1 ) then * MULTIPLE PART NUMBERS SO JUST PRINT SEE SPEC PartNumbers = 'See Spec' end TableColInfo = '~<+3600':@vm:'~<+3600':@vm:'~<+3600' TableInfo = '' TableInfo:= 'Customer#: ':CustId:@vm:'Quote#: ':ThisQuote:@vm:'PSN#: ':PSNId:@fm TableInfo:= 'Customer RFQ: ':RFQ:@vm:'Spec#: ':Spec:@vm:'Part#: ':PartNumbers:@fm TableInfo:= 'Payment Terms: ':Terms:@vm:@vm:@fm TableInfo:= '':@vm:'':@vm:'' Void = set_printer( 'ADDTABLE', TableColInfo, '', TableInfo, '', '', 0, TB_NONE ) CurPos = get_printer( 'POS' ) CurYPos = CurPos<2>-.03 Void = set_printer( 'LINE', 0:@fm:CurYPos:@fm:7.5:@fm:CurYPos, 0 ) Font = 12 Font = 1 Font = 1 Void = set_printer( 'FONT', Font ) TableColInfo = '~^+10800' TableInfo = '' TableInfo:= 'Substrate Specifications' Void = set_printer( 'ADDTABLE', TableColInfo, '', TableInfo, '', '', 0, TB_NONE ) Void = set_printer( 'TEXT', '' ) Font = 11 Font = 0 Font = 0 Void = set_printer( 'FONT', Font ) TableColInfo = '~<+3600':@vm:'~<+3600':@vm:'~<+3600' TableInfo = '' TableInfo = 'Diameter: ':SubDiam:@vm:'Dopant: ':SubDopant:@vm:'Polish: ':SubPolish Void = set_printer( 'ADDTABLE', TableColInfo, '', TableInfo, '', '', 0, TB_NONE ) Font = 'MS LineDraw' *Font = 'Arial' Void = set_printer( 'FONT', Font ) CurPos = get_printer( 'POS' ) CurYPos = CurPos<2> Void = set_printer( 'TEXTXY',SubRest:SubResUnits, 3.29:@fm:CurYPos, '', 0 ) Font = 'Arial' Void = set_printer( 'FONT', Font ) TableInfo = 'Orientation: ':SubOrient:@vm:'Resistivity: ':@vm:'' Void = set_printer( 'ADDTABLE', TableColInfo, '', TableInfo, '', '', 0, TB_NONE ) TableInfo = 'BL#1: ':SubBL1:@vm:'BL#2: ':SubBL2:@vm:'BL#3: ':SubBL3:@fm:'':@vm:'':@vm:'' Void = set_printer( 'ADDTABLE', TableColInfo, '', TableInfo, '', '', 0, TB_NONE ) CurPos = get_printer( 'POS' ) CurYPos = CurPos<2>-.03 Void = set_printer( 'LINE', 0:@fm:CurYPos:@fm:7.5:@fm:CurYPos, 0 ) * HAVE TO DO A TEXT XY FOR THE SUBSTRATE RESISTIVITY CAUSE OF THE FONT * DID NOT WANT TO USE LINEDRAW FOR EVERYTHING * THIS WILL WORK CAUSE ALL PRINTING ABOVE SPECIFIES NO WRAPPING SO I AM * GUARANTEED THIS XY POS * EPITAXIAL SPECIFICATION LABELS Font = 'Arial' Font = 12 Font = 1 Font = 1 ;* ITALIC Font<6> = 0 Void = set_printer( 'FONT', Font ) TableColInfo = '~^+10800' TableInfo = '' TableInfo:= 'Epitaxial Specifications':@fm:'':@fm Void = set_printer( 'ADDTABLE', TableColInfo, '', TableInfo, '', '', 0, TB_NONE ) TableInfo = '' TableInfo = 'Layer' TableInfo:= '~Thickness~Measured By~Resistivity~Measured By~Dopant' convert '~' to @vm in TableInfo TableColInfo = '^~806':@vm:'^~2247':@vm:'^~1836':@vm:'^~2247':@vm:'^~1836':@vm:'^~1828' Void = set_printer( 'ADDTABLE', TableColInfo, '', TableInfo, '', '', 0, TB_ALL ) TableInfo = '' * EPITAXIAL SPECIFICATION DATA Font = 'MS LineDraw' Font = 0 Font = 9 Font = 0 Void = set_printer( 'FONT', Font ) AllPSNs = ex_vm_rem( AllPSNs ) APCnt = fieldcount( AllPSNs, @vm ) CurLay = 0 * if APCnt > MaxLayers$ then Void = set_printer( 'TERM' ) MsgInfo = '' MsgInfo = 'There are more than ':MaxLayers$:'. Please notify the MIS Department.' MsgInfo = '!' Void = msg( '', MsgInfo ) return 0 end TTableInfo = '' TotLayCnt = 0 for Lay = 1 to APCnt ThisPSN = AllPSNs<1,Lay> PSNLayRec = xlate( 'PROD_SPEC', ThisPSN, '', 'X' ) SpecEpiLay = PSNLayRec convert char(247) to @fm in SpecEpiLay ;* SEP LAY NOT USED ANYMORE convert char(248) to @fm in SpecEpiLay SLayCnt = fieldcount( SpecEpiLay, @fm ) for SLay = 1 to SLayCnt CurLay += 1 TotLayCnt += 1 if SLay > 3 then * WE HAVE MORE THAN A 3RD LAYER DEFINED AS A SAME REACTOR LAYER * AND WE ONLY HAVE UP TO L3 FOR THE BELOW FIELDS SO GIVE AN ERR * MESSAGE CAUSE WE COULD ALWAYS CREATE 4-XXX * BUT THEY SAID THEY WILL NEVER GO OVER THREE LAYERS - ( UNTIL I CODE IT THAT WAY * BIG WIDE CHEEKY GRIN Void = set_printer( 'TERM' ) MsgInfo = '' MsgInfo = 'PSN# ':ThisPSN:' has more than three layers in the same reactor...Please notify the MIS Department.' MsgInfo = '!' Void = msg( '', MsgInfo ) return 0 end TMin = 'THICK_MIN_L':SLay TMax = 'THICK_MAX_L':SLay TTarg = 'THICK_TARGET_L':SLay TMeas = 'THICK_MEASURE_L':SLay TUnit = 'THICK_UNITS_L':SLay RMin = 'RES_MIN_L':SLay RMax = 'RES_MAX_L':SLay RTarg = 'RES_TARGET_L':SLay RMeas = 'RES_MEASURE_L':SLay RUnit = 'RES_UNITS_L':SLay CMin = 'CON_MIN_L':SLay CMax = 'CON_MAX_L':SLay CTarg = 'CON_TARGET_L':SLay CMeas = 'CON_MEASURE_L':SLay CUnit = 'CON_UNITS_L':SLay Dop = 'DOPANT_L':SLay TMinData = oconv( xlate( 'PROD_SPEC', ThisPSN, TMin, 'X' ), 'MD2' ) TMaxData = oconv( xlate( 'PROD_SPEC', ThisPSN, TMax, 'X' ), 'MD2' ) TTargData = oconv( xlate( 'PROD_SPEC', ThisPSN, TTArg, 'X' ), 'MD2' ) TMeasData = field( xlate( 'PROD_SPEC', ThisPSN, TMeas, 'X' ), '~', 1 ) TUnitData = xlate( 'PROD_SPEC', ThisPSN, TUnit, 'X' ) RTargData = oconv( xlate( 'PROD_SPEC', ThisPSN, RTarg, 'X' ), 'MD3' ) RMinData = oconv( xlate( 'PROD_SPEC', ThisPSN, RMin, 'X' ), 'MD3' ) RMaxData = oconv( xlate( 'PROD_SPEC', ThisPSN, RMax, 'X' ), 'MD3' ) RMeasData = field( xlate( 'PROD_SPEC', ThisPSN, RMeas, 'X' ), '~', 1 ) RUnitData = xlate( 'PROD_SPEC', ThisPSN, RUnit, 'X' ) CMinData = oconv( xlate( 'PROD_SPEC', ThisPSN, CMin, 'X' ), 'MS21' ) CMaxData = oconv( xlate( 'PROD_SPEC', ThisPSN, CMax, 'X' ), 'MS21' ) CTargData = oconv( xlate( 'PROD_SPEC', ThisPSN, CTarg, 'X' ), 'MS21' ) CMeasData = field( xlate( 'PROD_SPEC', ThisPSN, CMeas, 'X' ), '~', 1 ) CUnitData = xlate( 'PROD_SPEC', ThisPSN, CUnit, 'X' ) DopData = xlate( 'PROD_SPEC', ThisPSN, Dop, 'X' ) * THE NEXT 2 IF STMTS WILL TRIM OFF THE GAS FLOW DETAIL * I.E. 1000 PPM, 1%, if index( DopData, 'Boron', 1 ) then if index( DopData, 'Germanium', 1 ) then * LEAVE ALONE IT IS BORON/GERMANIUM end else * TRIM OFF THE % DopData = 'Boron' end end if index( DopData, 'Arsenic', 1 ) then DopData = 'Arsenic' end TTableInfo = TotLayCnt:@vm:TMinData:'-':TMaxData:TUnitData:@vm:TMeasData:@vm if RTargData then TTableInfo:= RMinData:'-':RMaxData:RUnitData:@vm end else TTableInfo:= CMinData:'-':CMaxData:CUnitData:@vm end * WE COULD HAVE IT SPECD BY CONCENTRATION * AND HAVE THE MEASURE BY SRP UNDER RESISTIVITY * IN OTHER WORDS WE SPEC BY CONCENTRATION BUT WE * SRP FOR RESISTIVITY if RMeasData <> '' then TTableInfo:= RMeasData:@vm end else TTableInfo:= CMeasData:@vm end TTAbleInfo:= DopData TableInfo<-1> = TTableInfo next SLay next Lay Void = set_printer( 'ADDTABLE', TableColInfo, '', TableInfo, '', '', 0, TB_ALL ) Void = set_printer( 'TEXT', '' ) QDCnt = fieldcount( QuoteDetail, @vm ) Font = 'Arial' Font = 12 Font = 1 Font = 1 Void = set_printer( 'FONT', Font ) TableColInfo = '~^+10800' TableInfo = '' TableInfo:= 'Pricing Information':@fm:'':@fm Void = set_printer( 'ADDTABLE', TableColInfo, '', TableInfo, '', '', 0, TB_NONE ) TableInfo = 'Line':@vm:'Detail Description':@vm:'Per Unit':@vm:'Qty':@vm:'Total' TableColInfo = '^~806':@vm:'<~6294':@vm:'>~1080':@vm:'>~907':@vm:'>~1714' Void = set_printer( 'ADDTABLE', TableColInfo, '', TableInfo, '', '', 0, TB_COLUMNS_TOP_BOTTOM ) Font = 11 Font = 0 Font = 0 Void = set_printer( 'FONT', Font ) TableColInfo = '^~806':@vm:'<~6294':@vm:'>~1080':@vm:'>~907':@vm:'>~1714' for Li = 1 to QDCnt TableInfo = Li:@vm:QuoteDetail<1,Li>:@vm:PPW<1,Li>:@vm:Quantity<1,Li>:@vm:Amount<1,Li> Void = set_printer( 'ADDTABLE', TableColInfo, '', TableInfo, '', '', 0, TB_COLUMNS_TOP_BOTTOM ) next Li * COMMENTS Void = set_printer( 'TEXT', '' ) Font = 12 Font = 1 Font = 1 Void = set_printer( 'FONT', Font ) Void = set_printer( 'TEXT', 'COMMENTS:' ) Font = 10 Font = 0 Font = 0 Void = set_printer( 'FONT', Font ) TableColInfo = '<-10080' if ( TotLayCnt > 1 ) then Comments = 'Layer one is closest to the substrate.':@fm:Comments end CLCnt = fieldcount( Comments, @fm ) for CL = 1 to CLCnt CurPos = get_printer( 'POS' )<2> if CurPos < ComLastPrint$ then ;* OTHERWISE WILL HAVE TO TRUNCATE Void = set_printer( 'ADDTABLE', TableColInfo, '', Comments, '', '', 0, TB_NONE ) end next CL * BUYERS ACCEPTANCE: Font = 12 Font = 1 Font = 1 Void = set_printer( 'FONT', Font ) Void = set_printer( 'TEXTXY', 'Buyers Acceptance:', 0:@fm:9.54, '', 0 ) Font = 10 Font = 0 Font = 0 Void = set_printer( 'FONT', Font ) Void = set_printer( 'TEXTXY', 'Signature', 0:@fm:9.87, '', 0 ) Void = set_printer( 'TEXTXY', 'Print Name', 2.75:@fm:9.87, '', 0 ) Void = set_printer( 'TEXTXY', 'Date', 5.5:@fm:9.87, '', 0 ) Void = set_printer( 'LINE', .56:@fm:9.99:@fm:2.73:@fm:9.99, 0 ) Void = set_printer( 'LINE', 3.41:@fm:9.99:@fm:5.47:@fm:9.99, 0 ) Void = set_printer( 'LINE', 5.75:@fm:9.99:@fm:7.44:@fm:9.99, 0 ) Tout = 'Prices Quoted are valid for Sixty (60) days. Prices subject to change without notice.' Void = set_printer( 'TEXTXY', Tout, 0:@fm:10.06, '', 0 ) next i * termination stat = set_printer( 'TERM' ) RETURN 0 *===========================================================================*