using System;
using System.Data.SqlClient;
using Dapper;
namespace DataModel.Process
{
///
/// MIS data tracking functions for LotFinderDB interface
///
public partial class LotFinderDB
{
///
/// Post-processing script to set obsoletion dates
///
private const string SQL_POSTPROCESS_MISDATA = @"
SET ANSI_WARNINGS OFF;
WITH cte AS (
SELECT md.MisNumber, md.RevID, md.Status, MIN(md.ReleaseDate) Released
FROM dbo.MisData AS md
GROUP BY md.MisNumber, md.RevID, md.Status
)
UPDATE dbo.MisData
SET ObsoleteDate = bl.Released
FROM cte bl
WHERE MisData.MisNumber = bl.MisNumber AND
MisData.RevID = bl.RevID AND
MisData.Status = 'Current' AND
bl.Status = 'BackLevel';
WITH cte AS (
SELECT md.MisNumber, md.RevID, md.Status, MIN(md.ReleaseDate) Released
FROM dbo.MisData AS md
GROUP BY md.MisNumber, md.RevID, md.Status
)
UPDATE dbo.MisData
SET ObsoleteDate = (SELECT TOP 1 nl.Released
FROM cte nl
WHERE MisData.MisNumber = nl.MisNumber AND
MisData.RevID < nl.RevID AND
MisData.Status = nl.Status
ORDER BY nl.RevID)
WHERE ObsoleteDate IS NULL;
ALTER INDEX [PK_MisData] ON [dbo].[MisData] REBUILD;";
///
/// Performs post processing on imported Mis data
///
public static void PostProcessMisData()
{
try
{
using (SqlConnection connection = GetConnection())
{
connection.Execute(SQL_POSTPROCESS_MISDATA);
}
}
catch (Exception error)
{
//Log and forward exception
logger.Error("PostProcessMisData: failed to post process MIS data: {0}.", error.Message);
throw new Exception($"Failed to post process MIS data from LotFinderDB.", error);
}
}
}
}