311 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			311 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| Compile function Calibration_Services(@Service, @Params)
 | |
| /***********************************************************************************************************************
 | |
| 
 | |
|     This program is proprietary and is not to be used by or disclosed to others, nor is it to be copied without written
 | |
|     permission from Infineon Technologies.
 | |
| 
 | |
|     Name        :   Calibration_Services
 | |
| 
 | |
|     Description :   Handler program for all Scan services.
 | |
| 
 | |
|     Notes       :   
 | |
| 
 | |
|     Parameters  :
 | |
|         Service         [in] -- Name of the service being requested
 | |
|         Param1-10   [in/out] -- Additional request parameter holders
 | |
|         Response       [out] -- Response to be sent back to the Controller (MCP) or requesting procedure
 | |
| 
 | |
|     Metadata    :
 | |
| 
 | |
|     History     :   (Date, Initials, Notes)
 | |
|         12/03/2024    djs     Added SendReminders service
 | |
| 
 | |
| ***********************************************************************************************************************/
 | |
| #pragma precomp SRP_PreCompiler
 | |
| 
 | |
| $Insert APP_INSERTS
 | |
| $Insert SERVICE_SETUP
 | |
| $Insert CALIB_LIST_EQUATES
 | |
| $Insert POPUP_EQUATES
 | |
| $Insert RLIST_EQUATES
 | |
| $Insert NOTIFICATION_EQUATES
 | |
| 
 | |
| EQU COL$CL_NO			TO 1
 | |
| EQU COL$DEPT			TO 2
 | |
| EQU COL$EQ_INSTRUMENT	TO 3
 | |
| EQU COL$EQ_SN			TO 4
 | |
| EQU COL$EQ_LOC			TO 5
 | |
| EQU COL$EQ_CAL_INT		TO 6
 | |
| EQU COL$EQ_INT_EXT		TO 7
 | |
| EQU COL$EQ_LAST_CAL		TO 8
 | |
| EQU COL$EQ_NEXT_CAL		TO 9
 | |
| 
 | |
| EQU COL$NIST_STANDARD	TO 3
 | |
| EQU COL$NIST_TSN		TO 4
 | |
| EQU COL$NIST_LOC		TO 5
 | |
| EQU COL$NIST_CAL_INT	TO 6
 | |
| EQU COL$NIST_INT_EXT	TO 7
 | |
| EQU COL$NIST_LAST_CAL	TO 8
 | |
| EQU COL$NIST_NEXT_CAL	TO 9
 | |
| 
 | |
| Declare subroutine obj_Notes
 | |
| Declare function   SRP_Array, Database_Services
 | |
| 
 | |
| GoToService
 | |
| 
 | |
| Return Response or ""
 | |
| 
 | |
| ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | |
| // Service Parameter Options
 | |
| ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | |
| Options BOOLEAN     = True$, False$
 | |
| Options CALIB_TYPES = 'Equipment', 'NIST'
 | |
| 
 | |
| ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | |
| // SERVICES
 | |
| ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| Service GetCalibListData(CalibType=CALIB_TYPES, SelectActive=BOOLEAN)
 | |
|     
 | |
|     If SelectActive EQ '' then SelectActive = False$
 | |
|     CalibListData = ''
 | |
|     ErrorMsg      = ''
 | |
|     Begin Case
 | |
|         Case CalibType EQ 'Equipment'
 | |
|             
 | |
|             Open 'CALIB_LIST' TO TableIn then
 | |
|                  
 | |
|                 If SelectActive EQ False$ then Select TableIn
 | |
|                     
 | |
|                 If ErrorMsg EQ '' then 
 | |
| 
 | |
|                     EquipList  = ''
 | |
|                     EquipDescs = ''
 | |
|                     Done       = False$
 | |
|                     Today      = Date() 
 | |
| 
 | |
|                     LOOP 
 | |
| 
 | |
|                     READNEXT CLNo ELSE Done = True$
 | |
| 
 | |
|                     UNTIL Done
 | |
|                         READ CalRec FROM TableIn,CLNo THEN
 | |
|                         
 | |
|                             NextCalDt = XLATE('CALIB_LIST',CLNo,'NEXT_CAL_DT','X')
 | |
|                             
 | |
|                             IF CalRec<CALIB_LIST_CL_TYPE$> = 'E' THEN
 | |
|                         
 | |
|                                 EquipDesc	= CalRec<CALIB_LIST_EQ_DESC$>
 | |
|                                 Dept		= CalRec<CALIB_LIST_DEPT$>
 | |
|                                 
 | |
|                                 IF EquipDesc NE '' THEN
 | |
|                                 
 | |
|                                     SortKey = Dept:'*':EquipDesc:'*':CLNo
 | |
|                                     
 | |
|                                     LOCATE SortKey IN EquipDescs BY 'AL' SETTING Pos ELSE
 | |
|                                     
 | |
|                                         EquipDescs = INSERT(EquipDescs,1,Pos,0,SortKey)
 | |
|                                         
 | |
|                                         EquipLine = CLNo
 | |
|                                         EquipLine<1,COL$DEPT>			= Dept
 | |
|                                         EquipLine<1,COL$EQ_INSTRUMENT>	= CalRec<CALIB_LIST_EQ_DESC$>
 | |
|                                         EquipLine<1,COL$EQ_SN>			= CalRec<CALIB_LIST_EQ_SN$>
 | |
|                                         EquipLine<1,COL$EQ_LOC>			= CalRec<CALIB_LIST_EQ_LOC$>
 | |
|                                         EquipLine<1,COL$EQ_CAL_INT>		= CalRec<CALIB_LIST_CAL_INTERVAL$> 
 | |
|                                         EquipLine<1,COL$EQ_INT_EXT>		= CalRec<CALIB_LIST_CAL_LOC$> 
 | |
|                                         EquipLine<1,COL$EQ_LAST_CAL>	= OCONV(XLATE('CALIB_LIST',CLNo,'LAST_CAL_DT','X'),'D4/')
 | |
|                                         EquipLine<1,COL$EQ_NEXT_CAL>	= OCONV(NextCalDt,'D4/')
 | |
|                                         
 | |
|                                         EquipList	= INSERT(EquipList,Pos,0,0,EquipLine)
 | |
|                                         
 | |
|                                     END	;* End of LOCATE SortKey
 | |
|                                     
 | |
|                                 END	;* End of check for Null EquipDesc
 | |
|                                 
 | |
|                             END;* End of check for CL_TYPE = 'E'
 | |
|                             
 | |
|                         END	;* End of CalRec read
 | |
|                     REPEAT
 | |
|                     CalibListData = EquipList
 | |
|                 end
 | |
|             end else
 | |
|                 ErrorMsg = 'Error in ':Service:' service. Unable to open "CALIB_LIST" table.'
 | |
|             end
 | |
|                 
 | |
|         Case CalibType EQ 'NIST'
 | |
|             
 | |
|             OPEN 'CALIB_LIST' TO TableIn then
 | |
|                  
 | |
|                 If SelectActive EQ False$ then Select TableIn
 | |
|                     
 | |
|                 If ErrorMsg EQ '' then 
 | |
| 
 | |
|                     NISTList = ''
 | |
|                     StdDescs = ''
 | |
|                     Done     = False$
 | |
|                     Today    = Date() 
 | |
| 
 | |
|                     LOOP 
 | |
| 
 | |
|                     READNEXT CLNo ELSE Done = True$
 | |
| 
 | |
|                     UNTIL Done
 | |
|                         READ CalRec FROM TableIn,CLNo THEN
 | |
|                         
 | |
|                             NextCalDt = XLATE('CALIB_LIST',CLNo,'NEXT_CAL_DT','X')
 | |
|                                                
 | |
|                             IF CalRec<CALIB_LIST_CL_TYPE$> = 'S' THEN
 | |
|                                 StdDesc = CalRec<CALIB_LIST_STD_DESC$>
 | |
|                                 Dept	= CalRec<CALIB_LIST_DEPT$>
 | |
|                                 
 | |
|                                 IF StdDesc NE '' THEN
 | |
|                             
 | |
|                                     SortKey = Dept:'*':StdDesc:'*':CLNo
 | |
|                                     
 | |
|                                     LOCATE SortKey IN StdDescs BY 'AL' SETTING Pos ELSE
 | |
|                                     
 | |
|                                         StdDescs = INSERT(StdDescs,1,Pos,0,SortKey)
 | |
|                                         
 | |
|                                         NISTLine = CLNo
 | |
|                                         NISTLine<1,COL$DEPT>			= CalRec<CALIB_LIST_DEPT$>
 | |
|                                         NISTLine<1,COL$NIST_STANDARD>	= CalRec<CALIB_LIST_STD_DESC$>
 | |
|                                         NISTLine<1,COL$NIST_TSN>		= CalRec<CALIB_LIST_STD_SN$>
 | |
|                                         NISTLine<1,COL$NIST_LOC>		= CalRec<CALIB_LIST_STD_LOC$>
 | |
|                                         NISTLine<1,COL$NIST_CAL_INT>	= CalRec<CALIB_LIST_CAL_INTERVAL$>
 | |
|                                         NISTLine<1,COL$NIST_INT_EXT>	= CalRec<CALIB_LIST_CAL_LOC$>
 | |
|                                         NISTLine<1,COL$NIST_LAST_CAL>	= OCONV(XLATE('CALIB_LIST',CLNo,'LAST_CAL_DT','X'),'D4/') 
 | |
|                                         NISTLine<1,COL$NIST_NEXT_CAL>	= OCONV(NextCalDt,'D4/') 
 | |
|                                         
 | |
|                                         NISTList = INSERT(NISTList,Pos,0,0,NISTLine)
 | |
|                                         
 | |
|                                     END	;* End of LOCATE SortKey
 | |
|                                     
 | |
|                                 END	;* End of check for Null StdDesc
 | |
|                             
 | |
|                             END	;* End of check for CL_TYPE = 'S'
 | |
|                         END	;* End of CalRec read
 | |
|                     REPEAT
 | |
|                     CalibListData = NistList
 | |
|                 end 
 | |
|             end else
 | |
|                 ErrorMsg = 'Error in ':Service:' service. Unable to open "CALIB_LIST" table.'
 | |
|             end
 | |
| 
 | |
|         Case Otherwise$
 | |
|             ErrorMsg = 'Error in ':Service:' service. Null CalibType passed into service'
 | |
|     End Case
 | |
|     
 | |
|     If ErrorMsg NE '' then Error_Services('Add', ErrorMsg)
 | |
|     Response = CalibListData
 | |
|     
 | |
| End Service
 | |
| 
 | |
| 
 | |
| Service SendReminders()
 | |
| 	
 | |
| 	hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
 | |
| 	Lock hSysLists, ServiceKeyID then	
 | |
| 		ErrorMsg  = ''
 | |
| 		OPEN 'CALIB_LIST' TO FileIn then
 | |
| 			
 | |
| 			CalDueRecipients = Xlate('NOTIFICATION', 'CALIB_DUE_NOTIFY', NOTIFICATION_USER_ID$, 'X')
 | |
| 			
 | |
| 			CheckDt    = OConv(Date() + 15, 'D4/')
 | |
| 			SelectSent = 'SELECT CALIB_LIST WITH NEXT_CAL_DT < ':QUOTE(CheckDt):' BY NEXT_CAL_DT'
 | |
| 			RList(SelectSent,TARGET_ACTIVELIST$,'','','')
 | |
| 
 | |
| 			NoteText = ''
 | |
| 			Depts = ''
 | |
| 
 | |
| 			Done = 0
 | |
| 			LOOP
 | |
| 				READNEXT CLNo ELSE Done = 1
 | |
| 			UNTIL Done
 | |
| 				READ CLRec FROM FileIn,CLNo THEN
 | |
| 				
 | |
| 					NextCalDt = OCONV(XLATE('CALIB_LIST',CLNo,'NEXT_CAL_DT','X'),'D4/')
 | |
| 					
 | |
| 					IF NextCalDt NE '' THEN
 | |
| 					
 | |
| 						NewLine = ''
 | |
| 						CLType	= CLRec<CALIB_LIST_CL_TYPE$>
 | |
| 						Dept	= CLRec<CALIB_LIST_DEPT$>
 | |
| 						IF Dept = '' THEN Dept = 'MET'
 | |
| 						
 | |
| 						IF CLType = 'E' THEN
 | |
| 							Desc	= CLRec<CALIB_LIST_EQ_DESC$>
 | |
| 							SN		= CLRec<CALIB_LIST_EQ_SN$>
 | |
| 							Loc		= CLRec<CALIB_LIST_EQ_LOC$>
 | |
| 							NewLine = Desc:' (S/N: ':SN:') located in the ':Loc:' is due for calibration on ':NextCalDt:CRLF$
 | |
| 						END 
 | |
| 						IF CLType = 'S' THEN
 | |
| 							Desc	= CLRec<CALIB_LIST_STD_DESC$>
 | |
| 							SN		= CLRec<CALIB_LIST_STD_SN$>
 | |
| 							Loc		= CLRec<CALIB_LIST_STD_LOC$>
 | |
| 							NewLine	= 'The NIST Standard ':Desc:' (S/N: ':SN:') located in the ':Loc:' is due for calibration on ':NextCalDt:CRLF$
 | |
| 						END
 | |
| 						
 | |
| 						LOCATE Dept IN Depts USING @FM SETTING Pos ELSE
 | |
| 							Depts = INSERT(Depts,Pos,0,0,Dept)
 | |
| 						END
 | |
| 						NoteText<Pos> = NoteText<Pos>:NewLine
 | |
| 						
 | |
| 					END	;* End of check for NextCalDt
 | |
| 				END	;* End of CLRec read
 | |
| 			REPEAT
 | |
| 
 | |
| 			DeptUsers = ''
 | |
| 			DeptDescs =''
 | |
| 			 
 | |
| 			PopupLiteral = XLATE('SYSREPOSPOPUPS',@APPID<1>:'**DEPT',PDISPLAY$,'X')
 | |
| 
 | |
| 			CONVERT @VM:@SVM TO @FM:@VM IN PopupLiteral
 | |
| 
 | |
| 			LiteralCnt = COUNT(PopupLiteral,@FM) + (PopupLiteral NE '')
 | |
| 
 | |
| 			FOR I = 1 TO LiteralCnt
 | |
| 				Dept = PopupLiteral<I,1>
 | |
| 				DeptDesc = PopupLiteral<I,2>
 | |
| 				UserNames = PopupLiteral<I,3>
 | |
| 				LOCATE Dept IN Depts USING @FM SETTING Pos THEN
 | |
| 					CONVERT ' ' TO '' IN UserNames
 | |
| 					CONVERT ',' TO @VM IN UserNames
 | |
| 					DeptUsers<Pos> = UserNames
 | |
| 					DeptDescs<Pos> = DeptDesc
 | |
| 				END
 | |
| 			NEXT I
 | |
| 
 | |
| 			NoteSubject = "Equipment Calibration Reminder"
 | |
| 
 | |
| 			DeptCnt = DCount(Depts,@FM)
 | |
| 
 | |
| 			FOR I = 1 TO DeptCnt
 | |
| 
 | |
| 				IF NoteText<I> NE '' THEN
 | |
| 					
 | |
| 					Recipients   = SRP_Array('Join', CalDueRecipients, DeptUsers<I>, 'AND', @VM)
 | |
| 					SentFrom     = 'System'
 | |
| 					Subject      = DeptDescs<I>:" Department - Equipment Calibration Reminder"
 | |
| 					Message      = NoteText<I>
 | |
| 					AttachWindow = 'MASTER_CALIB_LIST'
 | |
| 					AttachKeys   = ''
 | |
| 					SendToGroup  = ''
 | |
| 						
 | |
| 					Obj_Notes('Create',Recipients:@RM:'System':@RM:NoteSubject:@RM:NoteText<I>:@RM:'MASTER_CALIB_LIST')
 | |
| 					
 | |
| 				END
 | |
| 
 | |
| 			NEXT I	
 | |
| 		end else
 | |
| 			ErrorMsg = 'Unable to open "CALIB_LIST" table.'
 | |
| 		end
 | |
| 		
 | |
| 		If ErrorMsg NE '' then
 | |
| 			Error_Services('Add', ErrorMsg)
 | |
| 		end
 | |
| 		Unlock hSysLists, ServiceKeyID else Null
 | |
| 	end
 | |
| 	
 | |
| end service
 | |
| 
 |