Implemented ReceiveRelease_API.
Added OI Wizard Webview form to launch into OI Wizard from OI and auto-login the user. Added menu items to NDW_MAIN to launch the OI Wizard webview form and navigated to the appropriate page.
This commit is contained in:
@ -49,7 +49,7 @@ Compile function WM_Out_Services(@Service, @Params)
|
||||
#pragma precomp SRP_PreCompiler
|
||||
|
||||
$Insert SERVICE_SETUP
|
||||
$Insert LOGICAL
|
||||
$Insert APP_INSERTS
|
||||
$Insert MSG_EQUATES
|
||||
$Insert DICT_EQUATES
|
||||
$Insert WM_OUT_EQUATES
|
||||
@ -57,6 +57,12 @@ $Insert WO_MAT_EQUATES
|
||||
$Insert WO_LOG_EQUATES
|
||||
$Insert COMPANY_EQUATES
|
||||
$Insert RETURN_TO_FAB_LOTS_EQUATES
|
||||
$INSERT PROD_SPEC_EQUATES
|
||||
$INSERT WO_STEP_EQUATES
|
||||
$INSERT EPI_PART_EQUATES
|
||||
$INSERT CUST_EPI_PART_EQUATES
|
||||
$INSERT PRS_STAGE_EQUATES
|
||||
$insert UNIT_EQUATES
|
||||
|
||||
Declare function Database_Services, SRP_JSON, Error_Services, Clean_Insp_Services, WO_Mat_QA_Services
|
||||
Declare function PSN_Services, SRP_Rotate_Array, Datetime, Return_To_Fab_Services, Environment_Services
|
||||
@ -64,13 +70,15 @@ Declare function Logging_Services
|
||||
Declare subroutine Database_Services, SRP_JSON, Error_Services, Extract_Si_Keys, Set_Status, obj_wo_mat_log
|
||||
Declare subroutine Logging_Services, Btree.Extract
|
||||
|
||||
GoToService
|
||||
GoToService else
|
||||
Error_Services('Set', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.')
|
||||
end
|
||||
|
||||
Return Response or ""
|
||||
Return Response else ''
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// SERVICES
|
||||
//-----------------------------------------------------------------------------
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Services
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
@ -671,3 +679,273 @@ Service GetWMOutKeys(WOLogId)
|
||||
end service
|
||||
|
||||
|
||||
Service GetWmOutZpl(WmOutKey)
|
||||
|
||||
ZPL = ''
|
||||
ErrorMsg = ''
|
||||
If WmOutKey NE '' then
|
||||
Swap '-' with '*' in WmOutKey
|
||||
Swap '.' with '*' in WmOutKey
|
||||
If RowExists('WM_OUT', WmOutKey) then
|
||||
WONo = Field(WmOutKey, '*', 1, 1)
|
||||
WOStep = Field(WmOutKey, '*', 2, 1)
|
||||
WOStepKeys = XLATE('WO_LOG', WONo, WO_LOG_WO_STEP_KEY$, 'X')
|
||||
IF INDEX(WOStepKeys,@VM,1) THEN
|
||||
PrintWONo = WONo:'.':WOStep
|
||||
END ELSE
|
||||
PrintWONo = WONo
|
||||
END
|
||||
WORec = XLATE('WO_LOG',WONo,'','X')
|
||||
ReqShipDate = OCONV(WORec<WO_LOG_PROMISE_SHIP_DT$>,'D2/')
|
||||
CustNo = WORec<WO_LOG_CUST_NO$>
|
||||
CustName = XLATE('COMPANY',CustNo,'ABBREV_OR_CO_NAME','X')
|
||||
Captive = XLATE('COMPANY',CustNo,'CAPTIVE','X')
|
||||
PONo = WORec<WO_LOG_CUST_PO_NO$>
|
||||
PSNo = XLATE('WO_STEP',WONo:'*':WOStep,WO_STEP_PROD_SPEC_ID$,'X')
|
||||
PSRec = XLATE('PROD_SPEC',PSNo,'','X')
|
||||
|
||||
CustSpecNo = ''
|
||||
IF Captive THEN
|
||||
CustSpecNos = PSRec<PROD_SPEC_SPEC_NUM$>
|
||||
CustSpecDescs = PSRec<PROD_SPEC_SPEC_DESC$>
|
||||
CustSpecRevNos = PSRec<PROD_SPEC_REV_NUM$>
|
||||
CustSpecRevDts = PSRec<PROD_SPEC_REV_DATE$>
|
||||
SpecCnt = COUNT(CustSpecNos,@VM) + (CustSpecNos NE '')
|
||||
FOR I = 1 TO SpecCnt
|
||||
IF CustSpecDescs<1,I> _EQC 'GENERAL' THEN
|
||||
CustSpecNo = CustSpecNos<1,I>
|
||||
CustSpecDesc = CustSpecDescS<1,I>
|
||||
CustSpecRevNo = CustSpecRevNos<1,I>
|
||||
CustSpecRevDt = OCONV(CustSpecRevDts<1,I>,'D4/')
|
||||
END
|
||||
UNTIL CustSpecNo NE ''
|
||||
NEXT I
|
||||
END
|
||||
|
||||
EpiPartNo = WORec<WO_LOG_EPI_PART_NO$>
|
||||
CustEpiPartRec = XLATE('CUST_EPI_PART',CustNo:'*':EpiPartNo,'','X')
|
||||
ShipBagReq = CustEpiPartRec<CUST_EPI_PART_SHIP_BAG_REQ$>
|
||||
PreSurfscan = XLATE('PRS_STAGE',PSNo:'*PRE',PRS_STAGE_SURFSCAN_SIG_REQ$,'X')
|
||||
FirstSurfscan = XLATE('PRS_STAGE',PSNo:'*WFR',PRS_STAGE_SURFSCAN_SIG_REQ$,'X')
|
||||
PostCleanSurfScan = XLATE('PRS_STAGE',PSNo:'*POST',PRS_STAGE_SURFSCAN_SIG_REQ$,'X')
|
||||
PostCleanSSSampleQty = XLATE('PRS_STAGE',PSNo:'*POST',PRS_STAGE_SS_SAMP_QTY$, 'X' )
|
||||
PostCleanSurfscanRecipe = XLATE('PRS_STAGE',PSNo:'*POST',PRS_STAGE_SURFSCAN_RECIPE$,'X')
|
||||
PostCleanSurfDefects = XLATE('PRS_STAGE',PSNo:'*POST',PRS_STAGE_SURF_DEFECTS$,'X')
|
||||
PostCleanSurfHaze = OCONV(XLATE('PRS_STAGE',PSNo:'*POST',PRS_STAGE_SURF_HAZE$,'X'),'MD2')
|
||||
SubPreClean = XLATE('PRS_STAGE',PSNo:'*PRE','TOOL_DISPLAY','X')
|
||||
SubPostClean = XLATE('PRS_STAGE',PSNo:'*POST','TOOL_DISPLAY','X')
|
||||
PreCleanTool = XLATE('PRS_STAGE',PSNo:'*PRE','TOOL_DISPLAY','X')
|
||||
PostCleanTool = XLATE('PRS_STAGE',PSNo:'*POST','TOOL_DISPLAY','X')
|
||||
PreAkrionRecipe = XLATE('PRS_STAGE',PSNo:'*PRE',PRS_STAGE_CLEAN_RECIPE$,'X')
|
||||
PostAkrionRecipe = XLATE('PRS_STAGE',PSNo:'*POST',PRS_STAGE_CLEAN_RECIPE$,'X')
|
||||
* * * * * * * * Following needs update to point to the PRS_LAYER & PRS_STAGE tables as required.
|
||||
* * * * * * * * It's the required part that needs sorted out JCH 1/28/2014
|
||||
RecipeNo = XLATE( 'PROD_SPEC', PSNo, 'RECIPE_NO_L1', 'X' )
|
||||
RecipeName = XLATE( 'PROD_SPEC', PSNo, 'RECIPE_NAME_L1', 'X' )
|
||||
SpecType = OCONV( XLATE( 'PROD_SPEC', PSNo, 'SPEC_TYPE', 'X' ), '[SPEC_TYPE_CONV]' )
|
||||
SubOxide = OCONV( XLATE( 'PROD_SPEC', PSNo, 'SUB_OXIDE_STRIP', 'X' ), 'B' )
|
||||
ThickTarget = OCONV( XLATE( 'PROD_SPEC', PSNo, 'THICK_TARGET_ALL', 'X' ), 'MD3' )
|
||||
ResTarget = OCONV( XLATE( 'PROD_SPEC', PSNo, 'RES_TARGET_ALL', 'X' ), 'MD3' )
|
||||
ThickUnit = XLATE( 'PROD_SPEC', PSNo, 'THICK_UNITS_ALL', 'X' )
|
||||
ResUnit = XLATE( 'PROD_SPEC', PSNo , 'RES_UNITS_ALL', 'X' )
|
||||
Dopant = XLATE( 'PROD_SPEC', PSNo, 'DOPANT_L1', 'X' )
|
||||
RecipeNo = XLATE( 'PROD_SPEC', PSNo, 'RECIPE_NO', 'X' )
|
||||
RecipeInfo = XLATE( 'RECIPE', RecipeNo, 'RECIPE_NAME_NO', 'X' )
|
||||
CleaningReqs = ''
|
||||
|
||||
ThickCnt = FIELDCOUNT( ThickTarget<1>, @VM )
|
||||
PrintThickTargets = ''
|
||||
FOR J = 1 TO ThickCnt
|
||||
PrintThickTargets<1,J> = ThickTarget<1,J>:ThickUnit<1,J>
|
||||
NEXT J
|
||||
|
||||
ResCnt = FIELDCOUNT( ResTarget<1>, @VM )
|
||||
PrintResTargets = ''
|
||||
FOR J = 1 TO ResCnt
|
||||
IF ResTarget<1,J>[1,1] = '.' THEN
|
||||
TargetVal = '0':ResTarget<1,J>
|
||||
END ELSE
|
||||
TargetVal = ResTarget<1,J>
|
||||
END
|
||||
PrintResTargets<1,J> = TargetVal:ResUnit<1,J>
|
||||
NEXT J
|
||||
|
||||
APreRec = ''
|
||||
APostRec = ''
|
||||
IF ( PreAkrionRecipe<1> <> '' ) THEN
|
||||
APreRec = ' ':PreAkrionRecipe:' '
|
||||
SubOxide = 'No' ;* If Akrion then no oxide strip
|
||||
END
|
||||
|
||||
IF ( PostAkrionRecipe<1> <> '' ) THEN
|
||||
APostRec = ' ':PostAkrionRecipe
|
||||
END
|
||||
|
||||
PrintCleaningReqs = TRIM( 'Strip:':SubOxide:' Pre:':SubPreClean:APreRec:' Post:':SubPostClean:APostRec )
|
||||
|
||||
swap UNIT_MICROMETER$ with 'um' in PrintThickTargets
|
||||
swap UNIT_OHM_CM$ with 'ohm.cm' in PrintThickTargets
|
||||
swap UNIT_OHM_PER_SQ$ with 'ohm/sq' in PrintThickTargets
|
||||
swap UNIT_A$ with 'A' in PrintThickTargets
|
||||
|
||||
swap UNIT_MICROMETER$ with 'um' in PrintResTargets
|
||||
swap UNIT_OHM_CM$ with 'ohm.cm' in PrintResTargets
|
||||
swap UNIT_OHM_PER_SQ$ with 'ohm/sq' in PrintResTargets
|
||||
swap UNIT_A$ with 'A' in PrintResTargets
|
||||
|
||||
MakeupBox = XLATE('WM_OUT',WMOutKey,WM_OUT_MAKEUP_BOX$ ,'X')
|
||||
|
||||
PrintWMOutKey = WMOutKey
|
||||
CONVERT '*' TO '.' IN PrintWMOutKey
|
||||
|
||||
CassNo = FIELD(WMOutKey,'*',3)
|
||||
LotNo = 'Multiple'
|
||||
WfrQty = XLATE('WM_OUT',WMOutKey,'WFRS_SCHED','X')
|
||||
SubPartNo = WORec<WO_LOG_ORD_SUB_PART_NO$>
|
||||
CustPartNo = WORec<WO_LOG_CUST_PART_NO$>
|
||||
EpiPartNo = WORec<WO_LOG_EPI_PART_NO$>
|
||||
CustPartDesc = XLATE('EPI_PART',EpiPartNo,EPI_PART_EPI_PART_DESC$,'X')
|
||||
PartNo = CustPartNo ;* Temporary for 4x2 to 4x4 conversion
|
||||
PartDesc = CustPartDesc ;* Temporary for 4x2 to 4x4 conversion
|
||||
SubVendCode = WORec<WO_LOG_EXP_VEND_CD$>
|
||||
Vendor = XLATE('SEMI_VEND_CODE', SubVendCode, 'EPI_VEND_CD', 'X')
|
||||
|
||||
SuppCd = TRIM(SubPartNo[-1,'B-'])
|
||||
IF LEN(SuppCd) NE '2' THEN SuppCd =''
|
||||
|
||||
For cnt = 1 to 2
|
||||
***** Start of label ZPL
|
||||
ZPL := '^XA'
|
||||
***** Label setup
|
||||
ZPL := '^LH0,0'
|
||||
ZPL := '^PR2' ;* Print speed 2 inches per second
|
||||
ZPL := '^LL406' ;* Label length 203 dpi
|
||||
ZPL := '^PW900' ;* Print width 900 dpi
|
||||
ZPL := '^MD2' ;* Media darkness
|
||||
ZPL := '^MMT':CRLF$ ;* Media mode t=tear off mode
|
||||
***** Border
|
||||
ZPL := '^FO10,5^GB795,398,3,B^FS':CRLF$
|
||||
****** First Line
|
||||
Company = 'IFX Epi Services'
|
||||
ZPL := '^FO30,20^A0,45,36^FD':Company:'^FS':CRLF$
|
||||
ZPL := '^FO290,25^AC,18^FDWO No:^FS':CRLF$
|
||||
ZPL := '^FO370,20^A045,36^FD':PrintWONo:'^FS':CRLF$
|
||||
IF CassNo = 1 THEN
|
||||
ZPL := '^FO535,15^GB120,40,40,,3^FS':CRLF$
|
||||
ZPL := '^FO540,25^AC,18^FR^FDCass:^FS':CRLF$
|
||||
ZPL := '^FO600,20^A045,36^FR^FD':CassNo:'^FS':CRLF$
|
||||
END ELSE
|
||||
ZPL := '^FO540,25^AC,18^FDCass:^FS':CRLF$
|
||||
ZPL := '^FO600,20^A045,36^FD':CassNo:'^FS':CRLF$
|
||||
END
|
||||
ZPL:= '^FO665,20^A045,36^FDWM Out^FS':CRLF$
|
||||
****** Second Line
|
||||
ZPL:= '^FO30,70^AC,18^FDWM Out:^FS':CRLF$
|
||||
ZPL:= '^FO120,65^A050,30^FD':PrintWMOutKey:'^FS':CRLF$
|
||||
ZPL := '^BY2,2.0':CRLF$
|
||||
ZPL := '^FO300,58^B3,,37,N^FD':'O':PrintWMOutKey:'^FS':CRLF$
|
||||
ZPL := '^BY2,3.0':CRLF$
|
||||
ZPL:= '^FO700,60^AC,18^FDQty:^FS':CRLF$
|
||||
ZPL:= '^FO760,60^A045,25^FD':WfrQty:'^FS':CRLF$
|
||||
****** Third Line
|
||||
ZPL:= '^FO30,100^AC,18^FDShip Dt:^FS':CRLF$
|
||||
ZPL:= '^FO140,100^A0,,25^FD':ReqShipDate:'^FS':CRLF$
|
||||
ZPL:= '^FO250,100^AC,18^FDCust:^FS':CRLF$
|
||||
ZPL:= '^FO320,100^A045,25^FD':CustName:'^FS':CRLF$
|
||||
ZPL:= '^FO560,100^AC,18^FDPO:^FS':CRLF$
|
||||
ZPL:= '^FO600,100^A045,25^FD':PONo:'^FS':CRLF$
|
||||
****** Separator bar
|
||||
ZPL:= '^FO15,125^GB790,1^FS':CRLF$
|
||||
****** Fourth Line
|
||||
ZPL := '^FO30,130^AC,18^FDLot No:^FS':CRLF$
|
||||
ZPL := '^FO120,130^A0,20^FD':LotNo:'^FS':CRLF$
|
||||
ZPL := '^FO410,130^AC,18^FDPart No:^FS':CRLF$
|
||||
ZPL := '^FO510,130^A0,20^FD':PartNo:'^FS':CRLF$
|
||||
****** Fifth Line
|
||||
ZPL := '^FO30,155^AC,18^FDSub PN:^FS':CRLF$
|
||||
ZPL := '^FO120,155^A0,20^FD':SubPartNo:'^FS':CRLF$
|
||||
IF SuppCd NE '' THEN
|
||||
ZPL := '^FO410,155^AC,18^FDSupp Cd:^FS':CRLF$
|
||||
ZPL := '^FO510,155^A0,20^FD':SuppCd:'^FS':CRLF$
|
||||
ZPL := '^BY2,2.0':CRLF$
|
||||
ZPL := '^FO610,155^A040,20^B3,,23,N^FD':SuppCd:'^FS':CRLF$
|
||||
ZPL := '^BY2,3.0':CRLF$
|
||||
END
|
||||
****** Separator bar
|
||||
ZPL := '^FO15,180^GB790,1^FS':CRLF$
|
||||
IF MakeupBox THEN
|
||||
ZPL := '^FO410,190^A050,30^FD* * * M a k e u p B o x * * *^FS':CRLF$
|
||||
END ELSE
|
||||
ZPL := '^FO410,190^AC,18^FDReact Type:^FS':CRLF$
|
||||
ZPL := '^FO560,190^A0,20^FDEpiPro^FS':CRLF$
|
||||
END
|
||||
****** Seventh Line
|
||||
ZPL := '^FO30,190^AC,18^FDPre:^FS':CRLF$
|
||||
ZPL := '^FO90,190^A0,20^FD':SubPreClean:'^FS':CRLF$
|
||||
IF PreAkrionRecipe NE '' THEN
|
||||
ZPL := '^FO210,190^AC,18^FDAkrion:^FS':CRLF$
|
||||
ZPL := '^FO300,190^A0,20^FD':PreAkrionRecipe:'^FS':CRLF$
|
||||
ZPL := '^BY2,2.0':CRLF$
|
||||
ZPL := '^FO450,190^A040,20^B3,,23,N^FD':PreAkrionRecipe:'^FS':CRLF$
|
||||
ZPL := '^BY2,3.0':CRLF$
|
||||
END
|
||||
****** Eighth Line
|
||||
ZPL := '^FO30,225^AC,18^FDRecipe:^FS':CRLF$
|
||||
ZPL := '^FO120,225^A0,20^FD':RecipeInfo:'^FS':CRLF$
|
||||
ZPL := '^FO410,225^AC,18^FDEpi Dopant:^FS':CRLF$
|
||||
ZPL := '^FO560,225^A040,20^FD':Dopant:'^FS':CRLF$
|
||||
****** Ninth, Tenth and Eleventh Lines
|
||||
ZPL := '^FO30,260^AC,18^FDThk Spec:^FS':CRLF$
|
||||
FOR M = 1 TO COUNT(PrintThickTargets,@VM) + (PrintThickTargets NE '')
|
||||
BaseLine = 260 + (M-1)*20
|
||||
ZPL := '^FO140,':BaseLine:'^A040,20^FD':PrintThickTargets<1,M>:'^FS':CRLF$
|
||||
NEXT M
|
||||
ZPL := '^FO410,260^AC,18^FDRes Spec:^FS':CRLF$
|
||||
FOR M = 1 TO COUNT(PrintResTargets,@VM) + (PrintResTargets NE '')
|
||||
BaseLine = 260 + (M-1)*20
|
||||
ZPL := '^FO520,':BaseLine:'^A040,20^FD':PrintResTargets<1,M>:'^FS':CRLF$
|
||||
NEXT M
|
||||
IF PostAkrionRecipe NE '' THEN
|
||||
ZPL := '^FO30,335^AC,18^FDPost:^FS':CRLF$
|
||||
ZPL := '^FO90,335^A0,20^FD':SubPostClean:'^FS':CRLF$
|
||||
ZPL := '^FO210,335^AC,18^FDAkrion:^FS':CRLF$
|
||||
ZPL := '^FO300,335^A0,20^FD':PostAkrionRecipe:'^FS':CRLF$
|
||||
ZPL := '^BY2,2.0':CRLF$
|
||||
ZPL := '^FO450,335^A040,20^B3,,23,N^FD':PostAkrionRecipe:'^FS':CRLF$
|
||||
ZPL := '^BY2,3.0':CRLF$
|
||||
END ELSE
|
||||
ZPL := '^FO30,335^AC,18^FDPost:^FS':CRLF$
|
||||
ZPL := '^FO120,335^A0,20^FD':SubPostClean:'^FS':CRLF$
|
||||
END
|
||||
****** Separator bar
|
||||
ZPL := '^FO15,365^GB790,1^FS':CRLF$
|
||||
****** Data Matrix barcode
|
||||
ZPL := '^FO720,280^CI28':CRLF$
|
||||
ZPL := '^BXN,2,200^FDP':PartNo:'|S':SubPartNo:'|1T':PrintWMOutKey:'|2T':LotNo:'|':PSNo:'|Q':WfrQty:'|1V':Vendor:'|SEQ':Cnt:'^FS':CRLF$
|
||||
****** Fourteenth Line
|
||||
ZPL := '^FO30,375^AC,18^FDProd Spec No:^FS':CRLF$
|
||||
ZPL := '^FO190,375^A0,25^FD':PSNo:'^FS':CRLF$
|
||||
IF SpecType = 'Production' THEN SpecType = 'Prod'
|
||||
IF SpecType = 'Pre-Production' THEN SpecType = 'Pre'
|
||||
ZPL := '^FO275,375^AC,18^FDSpec Type:^FS':CRLF$
|
||||
ZPL := '^FO400,375^A0,25^FD':SpecType:'^FS':CRLF$
|
||||
ZPL := '^FO480,375^AC,18^FDBag:^FS':CRLF$
|
||||
ZPL := '^FO530,375^A0,20^FD':ShipBagReq:'^FS':CRLF$
|
||||
***** End of Label
|
||||
ZPL := '^XZ'
|
||||
Next
|
||||
end else
|
||||
ErrorMsg = 'Error in ':Service:' service. WM_OUT ':WmOutKey:' does not exist.'
|
||||
end
|
||||
end else
|
||||
ErrorMsg = 'Error in ':Service:' service. Null WmOutKey passed in.'
|
||||
end
|
||||
|
||||
If ErrorMsg EQ '' then
|
||||
Response = ZPL
|
||||
end else
|
||||
Error_Services('Add', ErrorMsg)
|
||||
end
|
||||
|
||||
end service
|
||||
|
||||
|
||||
Reference in New Issue
Block a user