transmission. Commit to save progress. Commit to save progress. Finished ListDirectory service with full 'mls' command functionality. Final commit for COC availability checks. Implement further changes requested by Daniel. Add notifications to critical statuses and automatic status clearing. Change Mona resource from dev to prod.
323 lines
13 KiB
Plaintext
323 lines
13 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.
|
|
|
|
***********************************************************************************************************************/
|
|
#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 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'
|
|
ColumnWidths = 30 : @FM : 20 : @FM : 50 :@FM: 50
|
|
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()
|
|
|
|
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
|
|
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
|
|
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
|
|
|
|
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, '')
|
|
If QueryResult EQ '' then
|
|
Error_Services('Add', 'Expected file for shipment ' : COCNo : ' missing.')
|
|
NewCOC<COC_FTP_EXISTS$> = False$
|
|
Gosub LogMissingFile
|
|
end else
|
|
NewCOC<COC_FTP_EXISTS$> = True$
|
|
end
|
|
Database_Services('WriteDataRow', 'COC', COCNo, NewCOC, True$, False$, False$)
|
|
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
|
|
//
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
LogMissingFile:
|
|
|
|
LogData = ''
|
|
LogData<1> = LoggingDTM
|
|
LogData<2> = COCNo
|
|
LogData<3> = RemoteDirectory
|
|
LogData<4> = CustNo
|
|
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
|
|
|