open-insight/LSL2/STPROC/COPY_PROD_SPEC_TO_REV_HIST.txt
Infineon\StieberD 7762b129af pre cutover push
2024-09-04 20:33:41 -07:00

106 lines
5.6 KiB
Plaintext

Compile Function Copy_Prod_Spec_To_Rev_Hist()
#pragma precomp SRP_PreCompiler
$Insert LOGICAL
$Insert PROD_SPEC_EQUATES
Declare function Database_Services, Error_Services
Declare subroutine Database_Services, Error_Services, Errmsg
TrimChars = '. 1 2 3 4 5 6 7 8 9 0'
NextPSNo = Database_Services('ReadDataRow', 'DICT.PROD_SPEC', '%SK%')
LastPSNo = NextPSNo - 1
For PSNo = 1 to LastPSNo
If RowExists('PROD_SPEC', PSNo, 0) then
PSRec = Database_Services('ReadDataRow', 'PROD_SPEC', PSNo)
If Error_Services("NoError") then
PSRevHistRec = ''
Descriptions = PSRec<PROD_SPEC_DESCRIPTION$>
Usernames = PSRec<PROD_SPEC_MOD_ID$>
Dates = PSRec<PROD_SPEC_MOD_DATE$>
If ( Descriptions NE '' ) And ( Usernames NE '' ) And ( Dates NE '' ) then
For each Line in Descriptions using @TM setting tPos
MatchFound = ''
LineLength = Len(Line)
Date = Line[1, 'F ']
DescStart = Col2() + 1
DescEnd = LineLength - Col2()
Initials = Line[-1, 'B ']
InitialsLen = Len(Initials)
DescEnd = DescEnd - InitialsLen
Desc = Line[DescStart, DescEnd]
InternalDate = IConv(Date, 'DH')
For each Character in TrimChars using ' '
Swap Character with '' in Initials
Next Character
Swap ' ' with '' in Initials
MatchFound = False$
Locate InternalDate in Dates using @VM setting vPos then
Loop
ModDate = Dates<1, vPos>
If ModDate NE InternalDate then
// No username match found. Manually search for username.
Username = ''
For each Username in Usernames using @VM setting uPos
UserInitials = Username[1,1]
UserLastInitialPos = Index(Username, ' ', 1) + 1
UserInitials := Username[UserLastInitialPos, 1]
If Initials EQ UserInitials then
MatchFound = True$
PSRevHistRec = Insert(PSRevHistRec, 1, -1, 0, Username)
PSRevHistRec = Insert(PSRevHistRec, 2, -1, 0, InternalDate)
PSRevHistRec = Insert(PSRevHistRec, 3, -1, 0, '')
PSRevHistRec = Insert(PSRevHistRec, 4, -1, 0, Desc)
end
Until MatchFound EQ True$
Next Username
end
While ModDate EQ InternalDate
ModName = Usernames<1, vPos>
ModInitials = ModName[1, 1]
LastInitialPos = Index(ModName, ' ', 1) + 1
ModInitials := ModName[LastInitialPos, 1]
If ( ModInitials EQ Initials ) then
MatchFound = True$
PSRevHistRec = Insert(PSRevHistRec, 1, -1, 0, ModName)
PSRevHistRec = Insert(PSRevHistRec, 2, -1, 0, ModDate)
PSRevHistRec = Insert(PSRevHistRec, 3, -1, 0, '')
PSRevHistRec = Insert(PSRevHistRec, 4, -1, 0, Desc)
end
Until MatchFound EQ True$
vPos = vPos + 1
Repeat
end else
// Date match not found. Use date supplied by user in description.
If InternalDate NE '' then
Username = ''
For each Username in Usernames using @VM setting uPos
UserInitials = Username[1,1]
UserLastInitialPos = Index(Username, ' ', 1) + 1
UserInitials := Username[UserLastInitialPos, 1]
If Initials EQ UserInitials then
MatchFound = True$
PSRevHistRec = Insert(PSRevHistRec, 1, -1, 0, Username)
PSRevHistRec = Insert(PSRevHistRec, 2, -1, 0, InternalDate)
PSRevHistRec = Insert(PSRevHistRec, 3, -1, 0, '')
PSRevHistRec = Insert(PSRevHistRec, 4, -1, 0, Desc)
end
Until MatchFound EQ True$
Next Username
end
end
Next Line
end
Database_Services('WriteDataRow', 'PROD_SPEC_REV_HIST', PSNo, PSRevHistRec)
If Error_Services('NoError') then
Null
end else
ErrMsg('Failed to write PROD_SPEC_REV_HIST record: ' : PSNo)
end
end else
ErrMsg('Failed to read PROD_SPEC record: ' : PSNo)
end
end
Next PSNo
Return