1016 lines
48 KiB
C#
1016 lines
48 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Configuration;
|
|
using System.Data;
|
|
using System.Data.SqlClient;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Web;
|
|
using Fab2ApprovalSystem.Models;
|
|
using Dapper;
|
|
using System.Transactions;
|
|
using Fab2ApprovalSystem.ViewModels;
|
|
using System.Reflection;
|
|
using Fab2ApprovalSystem.Misc;
|
|
|
|
|
|
namespace Fab2ApprovalSystem.DMO
|
|
{
|
|
public class WorkflowDMO
|
|
{
|
|
private IDbConnection db = new SqlConnection(GlobalVars.DB_CONNECTION_STRING);
|
|
|
|
//delegate TResult MathFunction<T1, T2, TResult>(T1 var1, T2 var2);
|
|
|
|
//static void PrintResult<T1, T2, TResult>(MathFunction<T1, T2,
|
|
// TResult> mathFunction, T1 var1, T2 var2)
|
|
//{
|
|
// TResult result = mathFunction(var1, var2);
|
|
// Console.WriteLine(String.Format("Result is {0}", result));
|
|
//}
|
|
|
|
//PrintResult((x, y) => x / y, 2, 8);
|
|
//GenericDelegateNumber<int, int> e = new GenericDelegateNumber<int, int>(AddInt);
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="issueID"></param>
|
|
/// <param name="docType"></param>
|
|
/// <returns></returns>
|
|
public string GetSubRoleItems(int issueID, int docType)
|
|
{
|
|
|
|
List<string> subRoleItems = new List<string>();
|
|
StringBuilder sqlString = new StringBuilder();
|
|
string resultInClause = "";
|
|
|
|
// LOTDISPSITION
|
|
if (GlobalVars.DocumentType.LotDisposition == (GlobalVars.DocumentType)docType)
|
|
{
|
|
resultInClause = GetLotDispositionSubRoleItems(issueID);
|
|
}
|
|
// MRB
|
|
else if (GlobalVars.DocumentType.MRB == (GlobalVars.DocumentType)docType)
|
|
{
|
|
subRoleItems.Add("'MRBApprover'"); // TODO remove Hard coding
|
|
resultInClause = "(" + String.Join(", ", subRoleItems.Distinct().ToArray()) + ")";
|
|
}
|
|
else if (GlobalVars.DocumentType.MRB == (GlobalVars.DocumentType)docType)
|
|
{
|
|
subRoleItems.Add("'QA_Admin'"); // TODO remove Hard coding
|
|
resultInClause = "(" + String.Join(", ", subRoleItems.Distinct().ToArray()) + ")";
|
|
}
|
|
else if (GlobalVars.DocumentType.ECN == (GlobalVars.DocumentType)docType || GlobalVars.DocumentType.TECNCancelledExpired == (GlobalVars.DocumentType)docType)
|
|
{
|
|
// TODO remove Hard coding
|
|
resultInClause = GetECNSubRoleItems(issueID, docType);
|
|
}
|
|
else if (GlobalVars.DocumentType.EECN == (GlobalVars.DocumentType)docType)
|
|
{
|
|
|
|
resultInClause = GetECNSubRoleItems(issueID, docType);
|
|
}
|
|
|
|
else if (GlobalVars.DocumentType.LotTraveler == (GlobalVars.DocumentType)docType)
|
|
{
|
|
resultInClause = GetLotTravelerSubRoleItems(issueID);
|
|
}
|
|
else if (GlobalVars.DocumentType.CorrectiveAction == (GlobalVars.DocumentType)docType)
|
|
{
|
|
resultInClause = GetCorrectiveActionSubRoleItems(issueID);
|
|
}
|
|
else if (GlobalVars.DocumentType.CorrectiveActionSection == (GlobalVars.DocumentType)docType)
|
|
{
|
|
resultInClause = GetCorrectiveActionSectionSubRoleItems(issueID);
|
|
}
|
|
else if (GlobalVars.DocumentType.PartsRequest == (GlobalVars.DocumentType)docType)
|
|
{
|
|
resultInClause = GetSubRolesForPartsRequestNextStep(issueID);
|
|
}
|
|
|
|
return resultInClause;
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="caNo"></param>
|
|
/// <returns></returns>
|
|
string GetCorrectiveActionSubRoleItems(int caNo)
|
|
{
|
|
List<string> subRoleItems = new List<string>();
|
|
StringBuilder sqlString = new StringBuilder();
|
|
subRoleItems.Add("'Integration'");
|
|
|
|
string resultInClause = "(" + String.Join(", ", subRoleItems.Distinct().ToArray()) + ")";
|
|
return resultInClause;
|
|
}
|
|
string GetCorrectiveActionSectionSubRoleItems(int caNo)
|
|
{
|
|
List<string> subRoleItems = new List<string>();
|
|
StringBuilder sqlString = new StringBuilder();
|
|
subRoleItems.Add("'8DQA'");
|
|
|
|
string resultInClause = "(" + String.Join(", ", subRoleItems.Distinct().ToArray()) + ")";
|
|
return resultInClause;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get the Lot Disposition Document WorkFlow Sub Roles
|
|
/// </summary>
|
|
/// <param name="issueID"></param>
|
|
/// <returns></returns>
|
|
string GetLotDispositionSubRoleItems(int issueID)
|
|
{
|
|
List<string> subRoleItems = new List<string>();
|
|
int recordCount = 0;
|
|
StringBuilder sqlString = new StringBuilder();
|
|
|
|
// Check if "Disposition by OCAP" is checked
|
|
sqlString.Append("SELECT COUNT(*) FROM LotDisposition WHERE (DispositionByOCAP = 1) AND IssueID = @IssueID ");
|
|
recordCount = this.db.Query<int>(sqlString.ToString(), new { IssueID = issueID }).Single();
|
|
|
|
if (recordCount > 0)
|
|
{
|
|
// if "Disposition by OCAP" is checked only the get roles for the "Execution" level only
|
|
|
|
// For Step 3
|
|
// Get the Location Role
|
|
sqlString = new StringBuilder();
|
|
sqlString.Append("SELECT Location FROM LotDisposition LD INNER JOIN Lot L ON LD.IssueID = L.IssueID WHERE LD.IssueID = @IssueID ");
|
|
var dataRows = this.db.Query<dynamic>(sqlString.ToString(), new { IssueID = issueID }).ToList();
|
|
string tempLocation = "";
|
|
foreach (var dataRow in dataRows)
|
|
{
|
|
tempLocation = dataRow.Location.ToString();
|
|
if (tempLocation == "QDB" || tempLocation == "EDB")
|
|
subRoleItems.Add("'" + tempLocation + "'");
|
|
else if (tempLocation == "6300" || tempLocation == "6400" || tempLocation == "6600")
|
|
subRoleItems.Add("'Probe'");
|
|
else
|
|
subRoleItems.Add("'Fab'");
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
// NOT "Disposition by OCAP"
|
|
|
|
// For Step 1
|
|
// Get the "Issue"
|
|
sqlString = new StringBuilder();
|
|
sqlString.Append("SELECT Issue FROM LotDisposition LD INNER JOIN ResponsibilityIssue R ON LD.ResponsibilityIssueID = R.ResponsibilityIssueID WHERE LD.IssueID = @IssueID ");
|
|
var dataRows = this.db.Query<dynamic>(sqlString.ToString(), new { IssueID = issueID }).ToList();
|
|
foreach (var dataRow in dataRows)
|
|
{
|
|
subRoleItems.Add("'" + dataRow.Issue.ToString() + "'");
|
|
}
|
|
|
|
#region YE Role
|
|
|
|
// ==================================================================YE ROLE===============================================================================================
|
|
// For Step 1
|
|
|
|
// check if there any IG Medical products
|
|
sqlString = new StringBuilder();
|
|
sqlString.Append("SELECT COUNT(*) FROM LotDisposition LD INNER JOIN Lot L ON LD.IssueID = L.IssueID WHERE LD.IssueID = @IssueID AND (L.Description LIKE 'IG,%' AND L.Description LIKE '%MA,%')");
|
|
int recordCountForIG_MA = this.db.Query<int>(sqlString.ToString(), new { IssueID = issueID }).Single();
|
|
|
|
// Get list of the YE "Product-Generation"
|
|
sqlString = new StringBuilder();
|
|
sqlString.Append("SELECT DISTINCT SubRoleCategoryItem, LTRIM(RTRIM(L.ProductFamily)) + '-' + ISNULL(LTRIM(RTRIM(CONVERT(varchar(10), L.Gen))), 'NULL') AS LotFamilyGen, ");
|
|
sqlString.Append("CASE WHEN L.LotStatusOptionID = 2 OR (ISNULL(S.ScrapCount, 0) > 0 AND ISNULL(S.ReleaseCount, 0) = 0) THEN 1 ELSE 0 END AS LotIsFullyScrapped, ");
|
|
sqlString.Append("L.Location ");
|
|
sqlString.Append("FROM Lot L ");
|
|
sqlString.Append("LEFT OUTER JOIN vFamilyGenYESubRole ON FamilyGen = LTRIM(RTRIM(L.ProductFamily)) + @FamilySuffix + '-' + LTRIM(RTRIM(CONVERT(varchar(10), L.Gen))) ");
|
|
sqlString.Append("LEFT OUTER JOIN ScrapLot S on S.LotNo = L.LotNumber AND S.IssueID = L.IssueID ");
|
|
sqlString.Append("WHERE L.IssueID = @IssueID ");
|
|
|
|
dataRows = this.db.Query<dynamic>(sqlString.ToString(), new { IssueID = issueID, FamilySuffix = (recordCountForIG_MA > 0 ? "_MA" : "") }).ToList();
|
|
foreach (var dataRow in dataRows)
|
|
{
|
|
if (dataRow.LotIsFullyScrapped == 1)
|
|
{ // if lot is fully scrapped
|
|
int location = 0;
|
|
if (!Int32.TryParse(dataRow.Location, out location))
|
|
location = 9999;
|
|
if (location < 6300) // only add YE if location is >= 6300
|
|
continue;
|
|
}
|
|
if (dataRow.SubRoleCategoryItem == null)
|
|
throw new Exception("Missing YE for family/gen: " + dataRow.LotFamilyGen);
|
|
|
|
subRoleItems.Add("'" + dataRow.SubRoleCategoryItem.ToString() + "'");
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region PE Role
|
|
|
|
// ==================================================================PE ROLE===============================================================================================
|
|
// For Step 1
|
|
|
|
// check if all wafers with in the lots for the Dispo are "SCRAP"
|
|
sqlString = new StringBuilder();
|
|
sqlString.Append("SELECT COUNT(*) FROM [ScrapLot] S ");
|
|
sqlString.Append("INNER JOIN Lot L ON S.LotNo = L.LotNumber ");
|
|
sqlString.Append("WHERE L.IssueID = @IssueID AND (L.LotStatusOptionID <> 2 OR S.ReleaseCount > 0)");
|
|
bool allLotsAreScrap = (this.db.Query<int>(sqlString.ToString(), new { IssueID = issueID }).Single() == 0);
|
|
|
|
// If PE Required OR MRB Required (Could be combined with the MA OR RH rule)
|
|
// But not if all lots are scrap
|
|
sqlString = new StringBuilder();
|
|
sqlString.Append("SELECT COUNT(*) FROM LotDisposition LD INNER JOIN Lot L ON LD.IssueID = L.IssueID ");
|
|
sqlString.Append("WHERE (PERequired = 1 OR Location = 'QDB' OR Location = 'EDB' ) AND LD.IssueID = @IssueID ");
|
|
recordCount = this.db.Query<int>(sqlString.ToString(), new { IssueID = issueID }).Single();
|
|
if ((recordCount > 0) && (allLotsAreScrap == false))
|
|
{
|
|
// check if there any IG Medical products
|
|
if (recordCountForIG_MA > 0)
|
|
{
|
|
sqlString = new StringBuilder();
|
|
sqlString.Append("SELECT 'PE_' + LTRIM(RTRIM(L.ProductFamily)) + '_MA-' + LTRIM(RTRIM(CONVERT(NCHAR(10),L.Gen))) AS ProdGen ");
|
|
sqlString.Append("FROM LotDisposition LD INNER JOIN Lot L ON LD.IssueID = L.IssueID WHERE LD.IssueID = @IssueID ");
|
|
dataRows = this.db.Query<dynamic>(sqlString.ToString(), new { IssueID = issueID }).ToList();
|
|
foreach (var dataRow in dataRows)
|
|
{
|
|
subRoleItems.Add("'" + dataRow.ProdGen.ToString() + "'");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// Get list of the PE "Product-Generation"
|
|
sqlString = new StringBuilder();
|
|
sqlString.Append("SELECT 'PE_' + LTRIM(RTRIM(L.ProductFamily)) + '-' + LTRIM(RTRIM(CONVERT(NCHAR(10),L.Gen))) AS ProdGen ");
|
|
sqlString.Append("FROM LotDisposition LD INNER JOIN Lot L ON LD.IssueID = L.IssueID WHERE LD.IssueID = @IssueID ");
|
|
dataRows = this.db.Query<dynamic>(sqlString.ToString(), new { IssueID = issueID }).ToList();
|
|
foreach (var dataRow in dataRows)
|
|
{
|
|
subRoleItems.Add("'" + dataRow.ProdGen.ToString() + "'");
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
// For Step 1 and Step 2
|
|
// check to see if the Lot has any M_Suffix
|
|
sqlString = new StringBuilder();
|
|
sqlString.Append("SELECT COUNT(*) FROM LotDisposition LD INNER JOIN Lot L ON LD.IssueID = L.IssueID WHERE (L.LotStatusOptionID = 4) AND LD.IssueID = @IssueID ");
|
|
recordCount = this.db.Query<int>(sqlString.ToString(), new { IssueID = issueID }).Single();
|
|
if (recordCount > 0)
|
|
{
|
|
subRoleItems.Add("'M_Suffix'");
|
|
}
|
|
|
|
// get wafer scrap counts
|
|
|
|
sqlString = new StringBuilder();
|
|
sqlString.Append("SELECT ISNULL(SUM(ScrapCount), 0) AS ScrapCount FROM Lot L ");
|
|
sqlString.Append("INNER JOIN ScrapLot S ON S.IssueID = L.IssueID AND S.LotNo = L.LotNumber ");
|
|
sqlString.Append("WHERE L.IssueID = @IssueID AND L.Location < '6300'");
|
|
int scrapCountLocationBelow6300 = this.db.Query<int>(sqlString.ToString(), new { IssueID = issueID }).SingleOrDefault();
|
|
|
|
if (scrapCountLocationBelow6300 > 10)
|
|
{
|
|
// For Step 2
|
|
if (!subRoleItems.Contains("'Engineering'"))
|
|
subRoleItems.Add("'Engineering'");
|
|
}
|
|
|
|
sqlString = new StringBuilder();
|
|
sqlString.Append("SELECT ISNULL(SUM(ScrapCount), 0) AS ScrapCount FROM Lot L ");
|
|
sqlString.Append("INNER JOIN ScrapLot S ON S.IssueID = L.IssueID AND S.LotNo = L.LotNumber ");
|
|
sqlString.Append("WHERE L.IssueID = @IssueID AND L.Location >= '6300'");
|
|
int scrapCountLocation6300AndGreater = this.db.Query<int>(sqlString.ToString(), new { IssueID = issueID }).SingleOrDefault();
|
|
|
|
if (scrapCountLocation6300AndGreater > 10)
|
|
{
|
|
// For Step 2
|
|
if (!subRoleItems.Contains("'Integration / YE'"))
|
|
subRoleItems.Add("'Integration / YE'");
|
|
}
|
|
|
|
/* ===== Remove the code for Director Approval Loop - Changed per Dixie's request 08/06/2018
|
|
*/
|
|
|
|
//If Location = "QDB" OR PRRequired or MRB Required OR(Product = MA / RH AND Location = Probe) Get "Director" Role for all departments, except "Facilities"
|
|
|
|
sqlString = new StringBuilder();
|
|
//sqlString.Append("SELECT COUNT(*) FROM LotDisposition LD INNER JOIN Lot L ON LD.IssueID = L.IssueID ");
|
|
//sqlString.Append("WHERE ( ((L.ProductFamily = 'RH' OR L.ProductFamily = 'MA') ");
|
|
//sqlString.Append("AND (Location = '6300' OR Location = '6400' OR Location = '6600')) ");
|
|
//sqlString.Append("OR Location = 'QDB' OR Location = 'EDB' OR LD.PERequired = 1 OR LD.MRBRequired = 1) AND LD.IssueID = @IssueID ");
|
|
|
|
// 09/01/2020 -
|
|
// Per Hans, do not include directors if PE required is checked
|
|
//sqlString.Append("SELECT COUNT(*) FROM LotDisposition LD INNER JOIN Lot L ON LD.IssueID = L.IssueID ");
|
|
//sqlString.Append("WHERE (LD.PERequired = 1 OR Location = 'QDB' OR Location = 'EDB' ) ");
|
|
//sqlString.Append("AND LD.IssueID = @IssueID ");
|
|
|
|
// 09/01/2020
|
|
// Per Hans, do not include directors if PE required is checked
|
|
sqlString.Append("SELECT COUNT(*) FROM LotDisposition LD INNER JOIN Lot L ON LD.IssueID = L.IssueID ");
|
|
sqlString.Append("WHERE (Location = 'QDB' OR Location = 'EDB' ) ");
|
|
sqlString.Append("AND LD.IssueID = @IssueID ");
|
|
|
|
|
|
recordCount = this.db.Query<int>(sqlString.ToString(), new { IssueID = issueID }).Single();
|
|
if (recordCount > 0)
|
|
{
|
|
// For Step 2
|
|
// get all the departments, except the 'Facilities' and 'Die bank' dept
|
|
sqlString = new StringBuilder();
|
|
sqlString.Append("SELECT SubRoleCategoryItem FROM [SubRoleCategory] WHERE SubRoleCategory = 'Department' AND SubRoleCategoryItem <> 'Facilities' AND SubRoleCategoryItem <> 'Die Bank' ");
|
|
dataRows = this.db.Query<dynamic>(sqlString.ToString(), new { IssueID = issueID }).ToList();
|
|
foreach (var dataRow in dataRows)
|
|
{
|
|
subRoleItems.Add("'" + dataRow.SubRoleCategoryItem.ToString() + "'");
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// For Step 3
|
|
// Get the Location Role
|
|
sqlString = new StringBuilder();
|
|
sqlString.Append("SELECT Location FROM LotDisposition LD INNER JOIN Lot L ON LD.IssueID = L.IssueID WHERE LD.IssueID = @IssueID ");
|
|
dataRows = this.db.Query<dynamic>(sqlString.ToString(), new { IssueID = issueID }).ToList();
|
|
string tempLocation = "";
|
|
foreach (var dataRow in dataRows)
|
|
{
|
|
tempLocation = dataRow.Location.ToString();
|
|
if (tempLocation.ToUpper() == "QDB" || tempLocation.ToUpper() == "EDB")
|
|
subRoleItems.Add("'" + tempLocation + "'");
|
|
else if (tempLocation == "6300" || tempLocation == "6400" || tempLocation == "6600")
|
|
subRoleItems.Add("'Probe'");
|
|
else
|
|
subRoleItems.Add("'Fab'");
|
|
}
|
|
}
|
|
|
|
string resultInClause = "(" + String.Join(", ", subRoleItems.Distinct().ToArray()) + ")";
|
|
return resultInClause;
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="ecnNumber"></param>
|
|
/// <param name="documentType"></param>
|
|
/// <returns></returns>
|
|
string GetECNSubRoleItems(int ecnNumber, int documentType)
|
|
{
|
|
StringBuilder qryString = new StringBuilder();
|
|
List<string> subRoleItems = new List<string>();
|
|
|
|
int recordCount = 0;
|
|
// EMERGENCY TECNS ==============================================================================================
|
|
if (GlobalVars.DocumentType.EECN == (GlobalVars.DocumentType)documentType)
|
|
{
|
|
//subRoleItems.Add("'QA Pre Approver'");
|
|
qryString.Clear();
|
|
qryString.Append("SELECT DISTINCT SRC.SubRoleCategoryItem FROM DocumentType D ");
|
|
qryString.Append("INNER JOIN Workflows W ON D.DocumentTypeID = W.DocumentTypeID ");
|
|
qryString.Append("INNER JOIN WorkFlowSteps WS ON W.WorkflowID = WS.WorkflowID ");
|
|
qryString.Append("INNER JOIN Role R ON WS.RoleID = R.RoleID ");
|
|
qryString.Append("INNER JOIN SubRole SR ON R.RoleID = SR.RoleID ");
|
|
qryString.Append("INNER JOIN SubRoleCategory SRC ON SR.SubRoleCategoryID = SRC.SubRoleCategoryID ");
|
|
qryString.Append("WHERE D.DocumentTypeID = @DocumentType");
|
|
//qryString.Append("WHERE D.DocumentTypeID = 3");
|
|
//subRoleItems.Add("'QA_Admin'");
|
|
var dataRows = this.db.Query<dynamic>(qryString.ToString(), new { DocumentType = documentType }).ToList();
|
|
foreach (var dataRow in dataRows)
|
|
{
|
|
subRoleItems.Add("'" + dataRow.SubRoleCategoryItem.ToString() + "'");
|
|
}
|
|
//subRoleItems.Add("'QA Final Approver'");
|
|
} //===============================================================================================================
|
|
else
|
|
{
|
|
subRoleItems.Add("'QA Pre Approver'");
|
|
// get the affected Department: Removed by JRO per Jeanne
|
|
//qryString.Clear();
|
|
//qryString.Append("SELECT ModuleName FROM ECNModule E INNER JOIN ECNAffectedModule AM ON E.ModuleID = AM.ModuleID WHERE AM.ECNNumber= @ECNNumber");
|
|
//var dataRows = this.db.Query<dynamic>(qryString.ToString(), new { ECNNumber = ecnNumber }).ToList();
|
|
//foreach (var dataRow in dataRows)
|
|
//{
|
|
// subRoleItems.Add("'" + dataRow.ModuleName.ToString() + "'");
|
|
//}
|
|
// get the approvers
|
|
qryString.Clear();
|
|
qryString.Append("SELECT SubRoleCategoryItem FROM SubRoleCategory S INNER JOIN ECNAffectedDepartment AD ON S.SubRoleCategoryID = AD.DepartmentID WHERE AD.ECNNumber= @ECNNumber");
|
|
var dataRows = this.db.Query<dynamic>(qryString.ToString(), new { ECNNumber = ecnNumber }).ToList();
|
|
foreach (var dataRow in dataRows)
|
|
{
|
|
subRoleItems.Add("'" + dataRow.SubRoleCategoryItem.ToString() + "'");
|
|
}
|
|
|
|
// Add Directors if # of Lots Affected is > 10
|
|
|
|
qryString.Clear();
|
|
// Impact / Change Sub Roles =======================================================================================================================
|
|
|
|
// Get the "Environment" Impact SubRole
|
|
qryString.Clear();
|
|
qryString.Append("SELECT COUNT(*) FROM ECN WHERE ECNNumber= @ECNNumber AND ImpactOnEnvironment = 2 ");
|
|
recordCount = this.db.Query<int>(qryString.ToString(), new { ECNNumber = ecnNumber }).Single();
|
|
if (recordCount > 0)
|
|
{
|
|
subRoleItems.Add("'Environment'");
|
|
//qryString.Clear();
|
|
//qryString.Append("SELECT SubRoleCategoryItem FROM [SubRoleCategory] WHERE SubRoleCategoryItem = 'Environment' ");
|
|
//dataRows = this.db.Query<dynamic>(qryString.ToString()).ToList();
|
|
//foreach (var dataRow in dataRows)
|
|
//{
|
|
// subRoleItems.Add("'" + dataRow.SubRoleCategoryItem.ToString() + "'");
|
|
//}
|
|
}
|
|
|
|
|
|
// Get the "Capacity" Impact SubRole
|
|
qryString.Clear();
|
|
qryString.Append("SELECT COUNT(*) FROM ECN WHERE ECNNumber= @ECNNumber AND (ImpactOnCapacity = 1 )");
|
|
recordCount = this.db.Query<int>(qryString.ToString(), new { ECNNumber = ecnNumber }).Single();
|
|
if (recordCount > 0)
|
|
{
|
|
subRoleItems.Add("'Capacity'");
|
|
//qryString.Clear();
|
|
//qryString.Append("SELECT SubRoleCategoryItem FROM [SubRoleCategory] WHERE SubRoleCategoryItem = 'Capacity' ");
|
|
//dataRows = this.db.Query<dynamic>(qryString.ToString()).ToList();
|
|
//foreach (var dataRow in dataRows)
|
|
//{
|
|
// subRoleItems.Add("'" + dataRow.SubRoleCategoryItem.ToString() + "'");
|
|
//}
|
|
}
|
|
|
|
// Get the "MaterialConsumptionChangeRequired" Impact SubRole
|
|
qryString.Clear();
|
|
qryString.Append("SELECT COUNT(*) FROM ECN WHERE ECNNumber= @ECNNumber AND (MaterialConsumptionChangeRequired = 1 )");
|
|
recordCount = this.db.Query<int>(qryString.ToString(), new { ECNNumber = ecnNumber }).Single();
|
|
if (recordCount > 0)
|
|
{
|
|
subRoleItems.Add("'MaterialConsumption'");
|
|
//qryString.Clear();
|
|
//qryString.Append("SELECT SubRoleCategoryItem FROM [SubRoleCategory] WHERE SubRoleCategoryItem = 'MaterialConsumption' ");
|
|
//dataRows = this.db.Query<dynamic>(qryString.ToString()).ToList();
|
|
//foreach (var dataRow in dataRows)
|
|
//{
|
|
// subRoleItems.Add("'" + dataRow.SubRoleCategoryItem.ToString() + "'");
|
|
//}
|
|
}
|
|
|
|
// Get the "NewPartFlow" Impact SubRole
|
|
qryString.Clear();
|
|
qryString.Append("SELECT COUNT(*) FROM ECN WHERE ECNNumber= @ECNNumber AND (NewPartFlowRequired = 1 )");
|
|
recordCount = this.db.Query<int>(qryString.ToString(), new { ECNNumber = ecnNumber }).Single();
|
|
if (recordCount > 0)
|
|
{
|
|
subRoleItems.Add("'NewPartFlow'");
|
|
subRoleItems.Add("'SPN-Execution'");
|
|
//subRoleItems.Add("'TestProgram'");
|
|
subRoleItems.Add("'Metrology Change'");
|
|
subRoleItems.Add("'SPC'");
|
|
//qryString.Clear();
|
|
//qryString.Append("SELECT SubRoleCategoryItem FROM [SubRoleCategory] WHERE SubRoleCategoryItem = 'NewPartFlow' ");
|
|
//dataRows = this.db.Query<dynamic>(qryString.ToString()).ToList();
|
|
//foreach (var dataRow in dataRows)
|
|
//{
|
|
// subRoleItems.Add("'" + dataRow.SubRoleCategoryItem.ToString() + "'");
|
|
//}
|
|
}
|
|
|
|
|
|
|
|
subRoleItems.Add("'Document Control Admin'");
|
|
subRoleItems.Add("'Training Notification'");
|
|
//=======================================================================================================================
|
|
|
|
// Execution level========================================================================================================
|
|
// Get the "SPN" SubRole
|
|
qryString.Clear();
|
|
qryString.Append("SELECT COUNT(*) FROM ECN WHERE ECNNumber= @ECNNumber AND (SPNChangeRequired = 1) ");
|
|
recordCount = this.db.Query<int>(qryString.ToString(), new { ECNNumber = ecnNumber }).Single();
|
|
if (recordCount > 0)
|
|
{
|
|
//subRoleItems.Add("'SPN-Execution'");
|
|
|
|
//qryString.Clear();
|
|
//qryString.Append("SELECT SubRoleCategoryItem FROM [SubRoleCategory] WHERE SubRoleCategoryItem = 'SPN' ");
|
|
//dataRows = this.db.Query<dynamic>(qryString.ToString()).ToList();
|
|
//foreach (var dataRow in dataRows)
|
|
//{
|
|
// subRoleItems.Add("'" + dataRow.SubRoleCategoryItem.ToString() + "'");
|
|
//}
|
|
}
|
|
|
|
// Get the "Metrology Change" SubRole
|
|
qryString.Clear();
|
|
qryString.Append("SELECT COUNT(*) FROM ECN WHERE ECNNumber= @ECNNumber AND (MetrologyChangeRequired = 1) ");
|
|
recordCount = this.db.Query<int>(qryString.ToString(), new { ECNNumber = ecnNumber }).Single();
|
|
if (recordCount > 0)
|
|
{
|
|
subRoleItems.Add("'Metrology Change'");
|
|
}
|
|
|
|
|
|
|
|
// Get the "SPCChange" SubRole
|
|
qryString.Clear();
|
|
qryString.Append("SELECT COUNT(*) FROM ECN WHERE ECNNumber= @ECNNumber AND (SPCChangeRequired = 1) ");
|
|
recordCount = this.db.Query<int>(qryString.ToString(), new { ECNNumber = ecnNumber }).Single();
|
|
if (recordCount > 0)
|
|
{
|
|
subRoleItems.Add("'SPC'");
|
|
}
|
|
|
|
// Get the "FIChange" SubRole
|
|
qryString.Clear();
|
|
qryString.Append("SELECT COUNT(*) FROM ECN WHERE ECNNumber= @ECNNumber AND (FIChangeRequired = 1) ");
|
|
recordCount = this.db.Query<int>(qryString.ToString(), new { ECNNumber = ecnNumber }).Single();
|
|
if (recordCount > 0)
|
|
{
|
|
subRoleItems.Add("'FI-Execution'");
|
|
}
|
|
}
|
|
|
|
string resultInClause = "(" + String.Join(", ", subRoleItems.Distinct().ToArray()) + ")";
|
|
return resultInClause;
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="workRequestID"></param>
|
|
/// <returns></returns>
|
|
string GetLotTravelerSubRoleItems(int workRequestID)
|
|
{
|
|
List<string> subRoleItems = new List<string>();
|
|
StringBuilder qryString = new StringBuilder();
|
|
|
|
// get the affected Modules
|
|
qryString.Clear();
|
|
qryString.Append("SELECT ModuleName FROM Module M INNER JOIN LTAffectedModule AM ON M.ModuleID = AM.ModuleID WHERE AM.LTWorkRequestID = @WorkRequestID");
|
|
var dataRows = this.db.Query<dynamic>(qryString.ToString(), new { WorkRequestID = workRequestID }).ToList();
|
|
foreach (var dataRow in dataRows)
|
|
{
|
|
subRoleItems.Add("'" + dataRow.ModuleName.ToString() + "'");
|
|
}
|
|
|
|
|
|
|
|
// get the affected Department
|
|
qryString.Clear();
|
|
qryString.Append("SELECT SubRoleCategoryItem FROM SubRoleCategory S INNER JOIN LTAffectedDepartment AD ON S.SubRoleCategoryID = AD.DepartmentID WHERE AD.LTWorkRequestID= @WorkRequestID");
|
|
dataRows = this.db.Query<dynamic>(qryString.ToString(), new { WorkRequestID = workRequestID }).ToList();
|
|
foreach (var dataRow in dataRows)
|
|
{
|
|
subRoleItems.Add("'" + dataRow.SubRoleCategoryItem.ToString() + "'");
|
|
}
|
|
|
|
qryString.Clear();
|
|
qryString.Append("SELECT * FROM LTWorkRequest WHERE ID = @WorkRequestID");
|
|
dataRows = this.db.Query<dynamic>(qryString.ToString(), new { WorkRequestID = workRequestID }).ToList();
|
|
var engLotStartReq = -1;
|
|
var lotTypeConversion = -1;
|
|
foreach (dynamic dataRow in dataRows)
|
|
{
|
|
engLotStartReq = dataRow.EngLotStartRequired;
|
|
lotTypeConversion = dataRow.LotTypeConversion;
|
|
}
|
|
|
|
if (engLotStartReq == 1 )
|
|
{
|
|
if (!subRoleItems.Contains("Operations")) // need to remove the hard coding
|
|
{
|
|
subRoleItems.Add("'Operations'");
|
|
}
|
|
if (!subRoleItems.Contains("Engineering")) // need to remove the hard coding
|
|
{
|
|
subRoleItems.Add("'Engineering'");
|
|
}
|
|
|
|
if (!subRoleItems.Contains("Integration / YE")) // need to remove the hard coding
|
|
{
|
|
subRoleItems.Add("'Integration / YE'");
|
|
}
|
|
|
|
}
|
|
if (lotTypeConversion == 1)
|
|
{
|
|
if (!subRoleItems.Contains("Operations")) // need to remove the hard coding
|
|
{
|
|
subRoleItems.Add("'Operations'");
|
|
}
|
|
}
|
|
|
|
if (engLotStartReq == 1 || lotTypeConversion == 1)
|
|
{
|
|
// END OF DEpartments= ===========================================================
|
|
qryString.Clear();
|
|
|
|
qryString.Append("SELECT SubRoleCategoryItem FROM [SubRoleCategory] WHERE SubRoleCategory = 'FabPlanner' ");
|
|
dataRows = this.db.Query<dynamic>(qryString.ToString(), new { WorkRequestID = workRequestID }).ToList();
|
|
foreach (var dataRow in dataRows)
|
|
{
|
|
subRoleItems.Add("'" + dataRow.SubRoleCategoryItem.ToString() + "'");
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
string resultInClause = "(" + String.Join(", ", subRoleItems.Distinct().ToArray()) + ")";
|
|
return resultInClause;
|
|
|
|
}
|
|
/// <summary>
|
|
/// Returns a boolean to indicate whethere it is was the last step in the approval
|
|
/// </summary>
|
|
/// <param name="issueID"></param>
|
|
/// <param name="stepNumber"></param>
|
|
public bool Approve(int issueID, byte step, string comments, out bool lastStep, int userID, int documentType, int workFlowNumber)
|
|
{
|
|
bool lastApproverInCurrentStep = false;
|
|
try
|
|
{
|
|
string subRolesInClause = GetSubRoleItems(issueID, documentType);
|
|
|
|
lastStep = false;
|
|
|
|
|
|
var parameters = new DynamicParameters();
|
|
parameters.Add("@IssueID", issueID);
|
|
parameters.Add("@CurrentStep", step);
|
|
parameters.Add("@ItemStatus", (int)GlobalVars.ApprovalOption.Approved);
|
|
parameters.Add("@UserID", userID);
|
|
parameters.Add("@Comments", comments);
|
|
parameters.Add("@SubRoleCategoriesClause", subRolesInClause);
|
|
parameters.Add("@DocumentTypeID", documentType);
|
|
parameters.Add("@LastStep", lastStep, dbType: DbType.Boolean, direction: ParameterDirection.Output);
|
|
parameters.Add("@LastApproverInCurrentStep", lastApproverInCurrentStep, dbType: DbType.Boolean, direction: ParameterDirection.Output);
|
|
parameters.Add("@WorkFlowNumber", workFlowNumber);
|
|
|
|
this.db.Execute("UpdateApproval", parameters, commandType: CommandType.StoredProcedure);
|
|
|
|
lastStep = parameters.Get<bool>("@LastStep");
|
|
lastApproverInCurrentStep = parameters.Get<bool>("@LastApproverInCurrentStep");
|
|
}
|
|
|
|
catch (Exception e)
|
|
{
|
|
string detailedException = "";
|
|
try
|
|
{
|
|
detailedException = e.InnerException.ToString();
|
|
}
|
|
catch
|
|
{
|
|
detailedException = e.Message;
|
|
}
|
|
string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " Step:" + step + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString();
|
|
Functions.WriteEvent("User ID:" + userID + "\r\n " + "ApproveDMO\r\n" + issueID.ToString() + "\r\n" + e.InnerException, System.Diagnostics.EventLogEntryType.Error);
|
|
EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = userID.ToString(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = "ApproveDMO - " + exceptionString });
|
|
throw new Exception(e.Message);
|
|
}
|
|
|
|
|
|
return lastApproverInCurrentStep;
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="issueID"></param>
|
|
/// <param name="step"></param>
|
|
/// <param name="comments"></param>
|
|
/// <param name="userID"></param>
|
|
/// <returns></returns>
|
|
public bool Reject(int issueID, byte step, string comments, int userID, int docType)
|
|
{
|
|
bool lastStep = false;
|
|
bool lastApproverInCurrentStep = false;
|
|
|
|
var parameters = new DynamicParameters();
|
|
parameters.Add("@IssueID", issueID);
|
|
parameters.Add("@CurrentStep", step);
|
|
parameters.Add("@ItemStatus", (int)GlobalVars.ApprovalOption.Denied);
|
|
parameters.Add("@UserID", userID);
|
|
parameters.Add("@Comments", comments);
|
|
parameters.Add("@DocumentTypeID", docType);
|
|
parameters.Add("@SubRoleCategoriesClause", string.Empty);
|
|
parameters.Add("@LastStep", lastStep, dbType: DbType.Boolean, direction: ParameterDirection.Output);
|
|
parameters.Add("@LastApproverInCurrentStep", lastApproverInCurrentStep, dbType: DbType.Boolean, direction: ParameterDirection.Output);
|
|
|
|
|
|
this.db.Execute("UpdateApproval", parameters, commandType: CommandType.StoredProcedure);
|
|
|
|
lastStep = parameters.Get<bool>("@LastStep");
|
|
lastApproverInCurrentStep = parameters.Get<bool>("@LastApproverInCurrentStep");
|
|
|
|
return lastApproverInCurrentStep;
|
|
|
|
|
|
}
|
|
public bool Recall(int issueID, byte step, string comments, int userID, int docType)
|
|
{
|
|
bool lastStep = false;
|
|
bool lastApproverInCurrentStep = false;
|
|
|
|
var parameters = new DynamicParameters();
|
|
parameters.Add("@IssueID", issueID);
|
|
parameters.Add("@CurrentStep", step);
|
|
parameters.Add("@ItemStatus", (int)GlobalVars.ApprovalOption.Recalled);
|
|
parameters.Add("@UserID", userID);
|
|
parameters.Add("@Comments", comments);
|
|
parameters.Add("@DocumentTypeID", docType);
|
|
parameters.Add("@SubRoleCategoriesClause", string.Empty);
|
|
parameters.Add("@LastStep", lastStep, dbType: DbType.Boolean, direction: ParameterDirection.Output);
|
|
parameters.Add("@LastApproverInCurrentStep", lastApproverInCurrentStep, dbType: DbType.Boolean, direction: ParameterDirection.Output);
|
|
|
|
|
|
this.db.Execute("UpdateApproval", parameters, commandType: CommandType.StoredProcedure);
|
|
|
|
lastStep = parameters.Get<bool>("@LastStep");
|
|
lastApproverInCurrentStep = parameters.Get<bool>("@LastApproverInCurrentStep");
|
|
|
|
return lastApproverInCurrentStep;
|
|
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="issueID"></param>
|
|
/// <param name="step"></param>
|
|
/// <param name="comments"></param>
|
|
/// <param name="userID"></param>
|
|
/// <param name="docType"></param>
|
|
/// <returns></returns>
|
|
public void RejectTECNExtension(int ecnNumber, byte step, string comments, int userID, int docType)
|
|
{
|
|
|
|
var parameters = new DynamicParameters();
|
|
parameters.Add("@ECNNumber", ecnNumber);
|
|
parameters.Add("@CurrentStep", step);
|
|
parameters.Add("@UserID", userID);
|
|
parameters.Add("@DocumentTypeID", docType);
|
|
|
|
|
|
this.db.Execute("ECN_TECNExtensionRejection", parameters, commandType: CommandType.StoredProcedure);
|
|
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="issueID"></param>
|
|
/// <param name="userIDs"></param>
|
|
/// <param name="step"></param>
|
|
public string ReAssignApproval(int issueID, int assignedFromUser, int assignedToUser, byte step, int docType)
|
|
{
|
|
|
|
string email = "";
|
|
//string emailArray = "";
|
|
string emailIDArray = "";
|
|
|
|
|
|
var parameters = new DynamicParameters(); ;
|
|
email = "";
|
|
parameters = new DynamicParameters();
|
|
parameters.Add("@IssueID", issueID);
|
|
parameters.Add("@Step", step);
|
|
parameters.Add("@AssignedFromUser", assignedFromUser);
|
|
parameters.Add("@AssignedToUser", assignedToUser);
|
|
parameters.Add("@DocumentTypeID", docType);
|
|
parameters.Add("@Email", email, DbType.String, direction: ParameterDirection.InputOutput);
|
|
|
|
this.db.Execute("ReAssignApproval", parameters, commandType: CommandType.StoredProcedure);
|
|
emailIDArray = emailIDArray + parameters.Get<string>("@Email");
|
|
|
|
|
|
return emailIDArray;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="issueID"></param>
|
|
/// <param name="assignedFromUser"></param>
|
|
/// <param name="assignedToUser"></param>
|
|
/// <param name="docType"></param>
|
|
/// <returns></returns>
|
|
public string DelegateDocumentApproval(int issueID, int delegateFromUser, int delegateToUser)
|
|
{
|
|
|
|
string email = "";
|
|
//string emailArray = "";
|
|
string emailID = "";
|
|
|
|
|
|
var parameters = new DynamicParameters(); ;
|
|
email = "";
|
|
parameters = new DynamicParameters();
|
|
parameters.Add("@IssueID", issueID);
|
|
parameters.Add("@DelegateFromUser", delegateFromUser);
|
|
parameters.Add("@DelegateToUser", delegateToUser);
|
|
parameters.Add("@Email", email, DbType.String, direction: ParameterDirection.InputOutput);
|
|
|
|
this.db.Execute("DelegateApproval", parameters, commandType: CommandType.StoredProcedure);
|
|
emailID = parameters.Get<string>("@Email");
|
|
|
|
return emailID;
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="issueID"></param>
|
|
/// <param name="userIDs"></param>
|
|
/// <param name="step"></param>
|
|
public string AddAdditionalApproval(int issueID, string userIDs, byte step, int documentType)
|
|
{
|
|
|
|
string email = "";
|
|
//string emailArray = "";
|
|
string emailIDArray = "";
|
|
|
|
string[] arrayOfUsers = userIDs.Split(new char[] { '~' });
|
|
|
|
var parameters = new DynamicParameters(); ;
|
|
for (int i = 0; i < arrayOfUsers.Length; i++)
|
|
{
|
|
email = "";
|
|
parameters = new DynamicParameters();
|
|
parameters.Add("@IssueID", issueID);
|
|
parameters.Add("@Step", step);
|
|
parameters.Add("@UserID", arrayOfUsers[i]);
|
|
parameters.Add("@DocumentTypeID", documentType);
|
|
parameters.Add("@Email", email, DbType.String, direction: ParameterDirection.InputOutput);
|
|
|
|
this.db.Execute("InsertdAdditionalApproval", parameters, commandType: CommandType.StoredProcedure);
|
|
emailIDArray = emailIDArray + parameters.Get<string>("@Email") + "~";
|
|
}
|
|
|
|
return emailIDArray;
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="ecnNumber"></param>
|
|
/// <param name="step"></param>
|
|
/// <param name="documentType"></param>
|
|
/// <param name="engUserIDs"></param>
|
|
/// <param name="opUserIDs"></param>
|
|
/// <returns></returns>
|
|
public string AddEECNApproval(int ecnNumber, byte step, int documentType, string engUserIDs, string opUserIDs)
|
|
{
|
|
|
|
string email = "";
|
|
//string emailArray = "";
|
|
string emailIDArray = "";
|
|
|
|
string[] arrayOfUsers = engUserIDs.Split(new char[] { '~' });
|
|
|
|
//Engineering SubRole
|
|
var parameters = new DynamicParameters(); ;
|
|
for (int i = 0; i < arrayOfUsers.Length; i++)
|
|
{
|
|
email = "";
|
|
parameters = new DynamicParameters();
|
|
parameters.Add("@ECNNumber", ecnNumber);
|
|
parameters.Add("@Step", step);
|
|
parameters.Add("@UserID", arrayOfUsers[i]);
|
|
parameters.Add("@DocumentTypeID", documentType);
|
|
parameters.Add("@SubRoleCategoryName", "Engineering");
|
|
parameters.Add("@Email", email, DbType.String, direction: ParameterDirection.InputOutput);
|
|
|
|
this.db.Execute("ECNInsertEmergencyECNApprovers", parameters, commandType: CommandType.StoredProcedure);
|
|
emailIDArray = emailIDArray + parameters.Get<string>("@Email") + "~";
|
|
}
|
|
|
|
// Operations SubRole
|
|
arrayOfUsers = opUserIDs.Split(new char[] { '~' });
|
|
parameters = new DynamicParameters(); ;
|
|
for (int i = 0; i < arrayOfUsers.Length; i++)
|
|
{
|
|
email = "";
|
|
parameters = new DynamicParameters();
|
|
parameters.Add("@ECNNumber", ecnNumber);
|
|
parameters.Add("@Step", step);
|
|
parameters.Add("@UserID", arrayOfUsers[i]);
|
|
parameters.Add("@DocumentTypeID", documentType);
|
|
parameters.Add("@SubRoleCategoryName", "Operations");
|
|
parameters.Add("@Email", email, DbType.String, direction: ParameterDirection.InputOutput);
|
|
|
|
this.db.Execute("ECNInsertEmergencyECNApprovers", parameters, commandType: CommandType.StoredProcedure);
|
|
emailIDArray = emailIDArray + parameters.Get<string>("@Email") + "~";
|
|
}
|
|
|
|
return emailIDArray;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="ecnNumber"></param>
|
|
/// <returns></returns>
|
|
public string GetApproversForCancelled_ExpiredTECNDocs(int ecnNumber)
|
|
{
|
|
List<string> subRoleItems = new List<string>();
|
|
StringBuilder sqlString = new StringBuilder();
|
|
sqlString.Append(
|
|
"SELECT TestProgramChangeRequired, SPCChangeRequired, NewPartFlowRequired, SPNChangeRequired, FIChangeRequired FROM ECN WHERE ECNNumber = @ecNumber ");
|
|
|
|
var data = this.db.Query<dynamic>(sqlString.ToString(), new { ecNumber = ecnNumber }).Single();
|
|
|
|
if (data.TestProgramChangeRequired == 1)
|
|
{
|
|
sqlString.Clear();
|
|
sqlString.Append("SELECT SubRoleCategoryItem FROM [SubRoleCategory] WHERE SubRoleCategory = 'TestProgram' ");
|
|
var dataRows = this.db.Query<dynamic>(sqlString.ToString(), new { ecNumber = ecnNumber }).ToList();
|
|
foreach (var dataRow in dataRows)
|
|
{
|
|
subRoleItems.Add("'" + dataRow.SubRoleCategoryItem.ToString() + "'");
|
|
}
|
|
}
|
|
if (data.SPCChangeRequired == 1)
|
|
{
|
|
sqlString.Clear();
|
|
sqlString.Append("SELECT SubRoleCategoryItem FROM [SubRoleCategory] WHERE SubRoleCategory = 'SPC' ");
|
|
var dataRows = this.db.Query<dynamic>(sqlString.ToString(), new { ecNumber = ecnNumber }).ToList();
|
|
foreach (var dataRow in dataRows)
|
|
{
|
|
subRoleItems.Add("'" + dataRow.SubRoleCategoryItem.ToString() + "'");
|
|
}
|
|
|
|
}
|
|
if (data.NewPartFlowRequired == 1)
|
|
{
|
|
sqlString.Clear();
|
|
sqlString.Append("SELECT SubRoleCategoryItem FROM [SubRoleCategory] WHERE SubRoleCategory = 'NewPartFlow' ");
|
|
var dataRows = this.db.Query<dynamic>(sqlString.ToString(), new { ecNumber = ecnNumber }).ToList();
|
|
foreach (var dataRow in dataRows)
|
|
{
|
|
subRoleItems.Add("'" + dataRow.SubRoleCategoryItem.ToString() + "'");
|
|
}
|
|
}
|
|
if (data.SPNChangeRequired == 1)
|
|
{
|
|
sqlString.Clear();
|
|
sqlString.Append("SELECT SubRoleCategoryItem FROM [SubRoleCategory] WHERE SubRoleCategory = 'SPN-Execution' ");
|
|
var dataRows = this.db.Query<dynamic>(sqlString.ToString(), new { ecNumber = ecnNumber }).ToList();
|
|
foreach (var dataRow in dataRows)
|
|
{
|
|
subRoleItems.Add("'" + dataRow.SubRoleCategoryItem.ToString() + "'");
|
|
}
|
|
}
|
|
if (data.FIChangeRequired == 1)
|
|
{
|
|
sqlString.Clear();
|
|
sqlString.Append("SELECT SubRoleCategoryItem FROM [SubRoleCategory] WHERE SubRoleCategory = 'FI-Execution' ");
|
|
var dataRows = this.db.Query<dynamic>(sqlString.ToString(), new { ecNumber = ecnNumber }).ToList();
|
|
foreach (var dataRow in dataRows)
|
|
{
|
|
subRoleItems.Add("'" + dataRow.SubRoleCategoryItem.ToString() + "'");
|
|
}
|
|
}
|
|
|
|
string resultInClause = "(" + String.Join(", ", subRoleItems.Distinct().ToArray()) + ")";
|
|
return resultInClause;
|
|
}
|
|
|
|
public string GetSubRolesForPartsRequestNextStep(int prNumber)
|
|
{
|
|
string subRoles = this.db.Query<string>("SELECT dbo.fnPartsRequestGetSubRolesForNextStep(@PRNumber)",
|
|
new { PRNumber = prNumber },
|
|
commandType: CommandType.Text).First();
|
|
subRoles = "('" + subRoles + "')";
|
|
return subRoles;
|
|
}
|
|
|
|
public WorkflowSteps GetWorkflowStep(int docTypeID, int wfNumber, int stepNumber)
|
|
{
|
|
return this.db.Query<WorkflowSteps>(
|
|
"SELECT s.* FROM WorkflowSteps s INNER JOIN Workflows w ON w.WorkflowID = s.WorkflowID " +
|
|
"WHERE w.DocumentTypeID = @docTypeID AND w.WorkFlowNumber = @wfNumber AND s.WorkflowStepNumber = @stepNumber",
|
|
param: new { docTypeID = docTypeID, wfNumber = wfNumber, stepNumber = stepNumber },
|
|
commandType: CommandType.Text).FirstOrDefault();
|
|
}
|
|
|
|
}
|
|
}
|