345 lines
14 KiB
Plaintext
345 lines
14 KiB
Plaintext
Compile function Shipment_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 SRP Computer Solutions, Inc.
|
|
|
|
Name : Shipment_Services
|
|
|
|
Description : Handler program for all Shipment services.
|
|
|
|
|
|
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)
|
|
11/13/24 djm Original programmer.
|
|
1/8/2025 djm Added parsing for connection errors and logging for loop resets. Removed emails for COC_AVAILABILITY.
|
|
|
|
***********************************************************************************************************************/
|
|
#pragma precomp SRP_PreCompiler
|
|
$insert LOGICAL
|
|
$Insert SERVICE_SETUP
|
|
$Insert COC_EQUATES
|
|
$Insert COMPANY_EQUATES
|
|
|
|
Declare function Error_Services, Company_Services, FTP_Services, Environment_Services, Logging_Services, Shipment_Services
|
|
Declare function Database_Services
|
|
Declare subroutine Error_Services, Mona_Services, Rlist, SRP_Stopwatch, Logging_Services, Database_Services
|
|
Declare subroutine Shipment_Services, OBJ_Notes
|
|
|
|
Equ CRLF$ to \0D0A\
|
|
|
|
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\COC_Availability'
|
|
LogDate = Oconv(Date(), 'D4/')
|
|
LogTime = Oconv(Time(), 'MTS')
|
|
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : '_Error' '.log'
|
|
Headers = 'Logging DTM' : @FM : 'Shipment ID' : @FM : 'Expected Remote Directory' :@FM: 'Customer/COMPANY Number' :@FM: 'Error Output'
|
|
ColumnWidths = 30 : @FM : 20 : @FM : 50 :@FM: 50 :@FM: 300
|
|
objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ' ', Headers, ColumnWidths, False$, False$)
|
|
LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM
|
|
|
|
GoToService
|
|
|
|
Return Response or ""
|
|
|
|
Options MonaResources = 'FILE_GENERATION', 'FILE_TRANSMISSION', 'FILE_AVAILABILITY'
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// SERVICES
|
|
//-----------------------------------------------------------------------------
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
// CycleRetentionDates
|
|
//
|
|
//
|
|
// Cycles the APP_INFO*COC_AVAILABILITY record dates to check a portion of the retention period at a time.
|
|
// Intended to be run by the Service Manager.
|
|
//
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
Service CycleRetentionDates()
|
|
|
|
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
|
|
Lock hSysLists, ServiceKeyID then
|
|
CycleRec = Xlate('APP_INFO', 'COC_AVAILABILITY', '', 'X')
|
|
TodayDate = Date()
|
|
EarliestDate = Shipment_Services('GetEarliestDate')
|
|
If CycleRec<1> EQ TodayDate then
|
|
CurrStartDate = CycleRec<2>
|
|
CurrEndDate = CycleRec<3>
|
|
PotentialStartDate = CurrStartDate - 10
|
|
PotentialEndDate = CurrEndDate - 10
|
|
Begin Case
|
|
Case CurrStartDate EQ EarliestDate
|
|
gosub LogLoopReset
|
|
StartDate = TodayDate - 10
|
|
EndDate = TodayDate
|
|
Case PotentialStartDate LT EarliestDate
|
|
StartDate = EarliestDate
|
|
EndDate = EarliestDate + 10
|
|
Case Otherwise$
|
|
StartDate = PotentialStartDate
|
|
EndDate = PotentialEndDate
|
|
End Case
|
|
|
|
NewRec = CycleRec
|
|
NewRec<2> = StartDate
|
|
NewRec<3> = EndDate
|
|
Database_Services('WriteDataRow', 'APP_INFO', 'COC_AVAILABILITY', NewRec, True$, False$, False$)
|
|
StartDate = Oconv(StartDate, 'D4-')
|
|
EndDate = Oconv(EndDate, 'D4-')
|
|
Shipment_Services('CheckFileAvailability', StartDate, EndDate)
|
|
end else
|
|
gosub LogLoopReset
|
|
StartDate = TodayDate - 10
|
|
EndDate = TodayDate
|
|
NewRec = ''
|
|
NewRec<1> = TodayDate
|
|
NewRec<2> = StartDate
|
|
NewRec<3> = EndDate
|
|
Database_Services('WriteDataRow', 'APP_INFO', 'COC_AVAILABILITY', NewRec, True$, False$, False$)
|
|
|
|
StartDate = Oconv(StartDate, 'D4-')
|
|
EndDate = Oconv(EndDate, 'D4-')
|
|
Shipment_Services('CheckFileAvailability', StartDate, EndDate)
|
|
end
|
|
Unlock hSysLists, ServiceKeyID else null
|
|
end
|
|
|
|
end service
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
// CheckFileAvailability
|
|
//
|
|
//
|
|
// Confirms the availabiliy of generated files on the FTP serve, otherwise sets a MONA critical status for COC
|
|
// FILE_AVAILABILITY. Intended to be run by the Service Manager.
|
|
//
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
|
|
Service CheckFileAvailability(StartDate, EndDate)
|
|
|
|
Error_Services('Clear')
|
|
OPEN 'COC' TO COCTable ELSE
|
|
Error_Services('Add', 'Unable to open COC Table')
|
|
Return
|
|
END
|
|
|
|
Statement1 = 'SELECT COC BY ENTRY_DATE WITH ENTRY_DATE GE ' : Quote(StartDate)
|
|
Statement2 = 'SELECT COC WITH ENTRY_DATE LE ' : Quote(EndDate)
|
|
Clearselect
|
|
RList(Statement1, 5, '', '', '')
|
|
RList(Statement2, 5, '', '', '')
|
|
|
|
If @List_Active EQ 3 AND @RecCount NE 0 then
|
|
Done = 0
|
|
LOOP
|
|
READNEXT COCNo ELSE Done = 1
|
|
UNTIL Done
|
|
READ COCRec FROM COCTable, COCNo THEN
|
|
WONo = COCRec<COC_WO_NO$>
|
|
CustNo = XLATE('COC', COCNo, 'WO_CUST_NO_EX', 'X')
|
|
If CustNo EQ '' then CustNo = XLATE('WO_LOG',WONo,'CUST_NO','X')
|
|
AutoDataFlag = XLATE('COMPANY',CustNo,COMPANY_AUTO_FTP_FLAG$,'X')
|
|
If AutoDataFlag then
|
|
NewCOC = COCRec
|
|
NewCOC<COC_FTP_SHOULD_EXIST$> = True$
|
|
Gosub CompanyExceptionCheck
|
|
DeleteScript = True$
|
|
Query = '*' : COCNo : '*'
|
|
QueryResult = FTP_Services('ListDirectory', FTPHost, Username, Password, RemoteDirectory, Query, '', DeleteScript, SSH, '')
|
|
ErrTest = Error_Services('GetMessage')
|
|
If ErrTest EQ '' then
|
|
If QueryResult NE '' then
|
|
NewCOC<COC_FTP_EXISTS$> = True$
|
|
Database_Services('WriteDataRow', 'COC', COCNo, NewCOC, True$, False$, False$)
|
|
end
|
|
end else
|
|
// Ignore ssh_init and network errors
|
|
If ( (IndexC(ErrTest, 'ssh_init', 1) EQ 0) and (IndexC(ErrTest, 'Network error', 1) EQ 0 ) ) then
|
|
Error_Services('Add', 'Expected file for shipment ' : COCNo : ' missing.')
|
|
NewCOC<COC_FTP_EXISTS$> = False$
|
|
Database_Services('WriteDataRow', 'COC', COCNo, NewCOC, True$, False$, False$)
|
|
Gosub LogMissingFile
|
|
End
|
|
end
|
|
end
|
|
END
|
|
REPEAT
|
|
end
|
|
// Code to run COC SELECT and change MONA Status
|
|
EarliestDate = Shipment_Services('GetEarliestDate')
|
|
EarliestDate = OConv(EarliestDate, 'D4-')
|
|
Statement1 = 'SELECT COC BY ENTRY_DATE WITH ENTRY_DATE GE ' : Quote(EarliestDate)
|
|
Statement2 = 'SELECT COC WITH FTP_SHOULD_EXIST EQ 1 AND WITH FTP_EXISTS EQ 0'
|
|
Clearselect
|
|
RList(Statement1, 5, '', '', '')
|
|
RList(Statement2, 5, '', '', '')
|
|
|
|
If @List_Active EQ 3 AND @RecCount NE 0 then
|
|
Shipment_Services('SetMONACritical', 'FILE_AVAILABILITY', 'Error locating expected COC file(s). Please review the logs and correct.')
|
|
end else
|
|
Shipment_Services('ClearMONACritical', 'FILE_AVAILABILITY')
|
|
end
|
|
|
|
|
|
end service
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
// GetEarliestDate
|
|
//
|
|
//
|
|
// Returns the earliest date that the service should check for.
|
|
//
|
|
//
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
Service GetEarliestDate()
|
|
|
|
TodayDate = Date()
|
|
/////// Earliest Date where all documents to date are accounted for. To be used until 3-2-25, after which the earliest date should always just be 1 year before the current date.////////////////////////////////////
|
|
TempEarliestDate = '3-2-24'
|
|
TempEarliestDate = Iconv(TempEarliestDate, 'D')
|
|
LastYearDate = TodayDate - 365
|
|
If LastYearDate LT TempEarliestDate then
|
|
EarliestDate = TempEarliestDate
|
|
end else
|
|
EarliestDate = LastYearDate
|
|
end
|
|
|
|
Response = EarliestDate
|
|
|
|
End Service
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
// SetMONACritical
|
|
//
|
|
//
|
|
// Sets a MONA Critical Status for the specified COC monitoring resource.
|
|
// Sends a notification to the FI_SUPPORT notification group with the specified message.
|
|
//
|
|
//
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
Service SetMONACritical(MONAResource=MONAResources, ErrorMessage)
|
|
|
|
IF MONAResource = 'FILE_GENERATION' OR MONAResource = 'FILE_TRANSMISSION' OR MONAResource = 'FILE_AVAILABILITY' then
|
|
Mona_Services('SendBufferedStatus', 'GRP_OPENINSIGHT_MES_OP_FE_COC', MONAResource, 'CRITICAL')
|
|
* If ErrorMessage NE '' then
|
|
* // Send an internal OI message to FI Support
|
|
* Recipients = Xlate('NOTIFICATION', 'FI_SUPPORT', 'USER_ID', 'X')
|
|
* SentFrom = 'SYSTEM'
|
|
* Subject = 'COC ' : MONAResource : ' Error!'
|
|
* Message = ErrorMessage
|
|
* AttachWindow = ''
|
|
* AttachKey = ''
|
|
* SendToGroup = ''
|
|
* Parms = Recipients:@RM:SentFrom:@RM:Subject:@RM:Message:@RM:AttachWindow:@RM:AttachKey:@RM:SendToGroup
|
|
* obj_Notes('Create',Parms)
|
|
* End
|
|
end else
|
|
Error_Services('Add', 'Invalid COC MONA resource.')
|
|
end
|
|
|
|
End Service
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
// ClearMONACritical
|
|
//
|
|
//
|
|
// Sets a MONA OK Status for the specified COC monitoring resource.
|
|
//
|
|
//
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
Service ClearMONACritical(MONAResource=MONAResources)
|
|
|
|
IF MONAResource = 'FILE_GENERATION' OR MONAResource = 'FILE_TRANSMISSION' OR MONAResource = 'FILE_AVAILABILITY' then
|
|
Mona_Services('SendBufferedStatus', 'GRP_OPENINSIGHT_MES_OP_FE_COC', MONAResource, 'OK')
|
|
end else
|
|
Error_Services('Add', 'Invalid COC MONA resource.')
|
|
end
|
|
|
|
End Service
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
// ResetAllCOCMonaStatus
|
|
//
|
|
//
|
|
// Resets MONA critical status for COC FILE_GENERATION, FILE_TRANSMISSION, and FILE_AVAILABILITY.
|
|
//
|
|
//
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
Service ResetAllCOCMonaStatus()
|
|
|
|
Mona_Services('SendBufferedStatus', 'GRP_OPENINSIGHT_MES_OP_FE_COC', 'FILE_GENERATION', 'OK')
|
|
Mona_Services('SendBufferedStatus', 'GRP_OPENINSIGHT_MES_OP_FE_COC', 'FILE_TRANSMISSION', 'OK')
|
|
Mona_Services('SendBufferedStatus', 'GRP_OPENINSIGHT_MES_OP_FE_COC', 'FILE_AVAILABILITY', 'OK')
|
|
|
|
End Service
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Internal GoSubs
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
LogMissingFile:
|
|
|
|
LogData = ''
|
|
LogData<1> = LoggingDTM
|
|
LogData<2> = COCNo
|
|
LogData<3> = RemoteDirectory
|
|
LogData<4> = CustNo
|
|
LogData<5> = ErrTest
|
|
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
|
|
|
|
return
|
|
|
|
LogLoopReset:
|
|
|
|
LogData = ''
|
|
LogData<1> = LoggingDTM
|
|
LogData<2> = ''
|
|
LogData<3> = 'Loop Restart'
|
|
LogData<4> = ''
|
|
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
|
|
|
|
return
|
|
|
|
|
|
CompanyExceptionCheck:
|
|
|
|
Begin Case
|
|
Case CustNo EQ '6593' OR CustNo EQ '408' OR CustNo EQ '7076'
|
|
FTPHost = '10.72.176.48'
|
|
Username = 'Infineon\TEMFTPEPIMesa'
|
|
Password = 'fW&EHJhKWg!skUKV4_34'
|
|
RemoteDirectory = '\TEMFTP_EPIMesa\Archive'
|
|
SSH = False$
|
|
Case CustNo EQ '6775'
|
|
FTPHost = 'sFTPNA.extra.infineon.com'
|
|
Username = 'DNAMesaFI-FTP'
|
|
Password = 'OpenInsight2018....!'
|
|
RemoteDirectory = '/Tower'
|
|
SSH = True$
|
|
Case CustNo EQ '7053' OR CustNo EQ '7092'
|
|
FTPHost = 'sFTPNA.extra.infineon.com'
|
|
Username = 'DNAMesaFI-FTP'
|
|
Password = 'OpenInsight2018....!'
|
|
RemoteDirectory = '/Tower'
|
|
SSH = True$
|
|
Case Otherwise$
|
|
FTPSettings = Company_Services('GetFTPServer', CustNo)
|
|
FTPHost = FTPSettings<1>;//this is new
|
|
Username = FTPSettings<2>;//this is new
|
|
Password = FTPSettings<3>;//this is new
|
|
RemoteDirectory = '/' : FTPSettings<5>;//this is new
|
|
SSH = FTPSettings<6>;//this is new
|
|
End Case
|
|
|
|
return
|
|
|