506 lines
20 KiB
C#
506 lines
20 KiB
C#
using Dapper;
|
|
|
|
using Fab2ApprovalSystem.Models;
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Data.SqlClient;
|
|
|
|
#if !NET8
|
|
using System.Data.Linq;
|
|
#endif
|
|
|
|
using System.Linq;
|
|
using System.Transactions;
|
|
|
|
using Fab2ApprovalSystem.Misc;
|
|
using Fab2ApprovalSystem.Utilities;
|
|
|
|
namespace Fab2ApprovalSystem.DMO;
|
|
|
|
public class AuditDMO {
|
|
|
|
private readonly AppSettings _AppSettings;
|
|
private readonly IDbConnection db = new SqlConnection(GlobalVars.DB_CONNECTION_STRING);
|
|
|
|
public AuditDMO(AppSettings appSettings) =>
|
|
_AppSettings = appSettings;
|
|
|
|
public Audit InsertAudit(Audit audit) {
|
|
DynamicParameters parameters = new();
|
|
parameters.Add("@AuditNo", value: audit.AuditNo, dbType: DbType.Int32, direction: ParameterDirection.InputOutput);
|
|
parameters.Add("@OriginatorID", audit.OriginatorID);
|
|
|
|
db.Execute("_8DInsertAuditItem", parameters, commandType: CommandType.StoredProcedure);
|
|
audit.AuditNo = parameters.Get<int>("@AuditNo");
|
|
|
|
return audit;
|
|
}
|
|
|
|
public Audit GetAuditItem(int auditNo, int userID) {
|
|
Audit audit = new();
|
|
|
|
// isITAR = 2;
|
|
|
|
DynamicParameters parameters = new();
|
|
parameters.Add("@AuditNo", value: auditNo);
|
|
parameters.Add("@UserID", userID);
|
|
|
|
using (var multipleResultItems = db.QueryMultiple("_8DGetAuditItem", parameters, commandType: CommandType.StoredProcedure)) {
|
|
audit = multipleResultItems.Read<Audit>().SingleOrDefault();
|
|
|
|
List<int> auditors = multipleResultItems.Read<int>().ToList();
|
|
|
|
if (audit != null && auditors != null) {
|
|
if (auditors.Count > 0)
|
|
audit.AuditorIDs.AddRange(auditors);
|
|
}
|
|
|
|
List<int> auditorTypes = multipleResultItems.Read<int>().ToList();
|
|
if (audit != null && auditorTypes != null) {
|
|
if (auditorTypes.Count > 0)
|
|
audit.AuditTypeIDs.AddRange(auditorTypes);
|
|
}
|
|
|
|
List<int> auditorAreas = multipleResultItems.Read<int>().ToList();
|
|
if (audit != null && auditorAreas != null) {
|
|
if (auditorAreas.Count > 0)
|
|
audit.AuditedAreaIDs.AddRange(auditorAreas);
|
|
}
|
|
}
|
|
return audit;
|
|
}
|
|
|
|
public Audit GetAuditItemReadOnly(int auditNo, int userID) {
|
|
Audit audit = new();
|
|
|
|
DynamicParameters parameters = new();
|
|
parameters.Add("@AuditNo", value: auditNo);
|
|
parameters.Add("@UserID", userID);
|
|
|
|
using (var multipleResultItems = db.QueryMultiple("_8DGetAuditItemReadOnly", parameters, commandType: CommandType.StoredProcedure)) {
|
|
audit = multipleResultItems.Read<Audit>().SingleOrDefault();
|
|
|
|
List<int> auditors = multipleResultItems.Read<int>().ToList();
|
|
|
|
if (audit != null && auditors != null) {
|
|
if (auditors.Count > 0)
|
|
audit.AuditorIDs.AddRange(auditors);
|
|
}
|
|
|
|
List<int> auditorTypes = multipleResultItems.Read<int>().ToList();
|
|
if (audit != null && auditorTypes != null) {
|
|
if (auditorTypes.Count > 0)
|
|
audit.AuditTypeIDs.AddRange(auditorTypes);
|
|
}
|
|
|
|
List<int> auditorAreas = multipleResultItems.Read<int>().ToList();
|
|
if (audit != null && auditorAreas != null) {
|
|
if (auditorAreas.Count > 0)
|
|
audit.AuditedAreaIDs.AddRange(auditorAreas);
|
|
}
|
|
}
|
|
|
|
return audit;
|
|
}
|
|
|
|
public IEnumerable<AuditType> GetAuditTypeList() {
|
|
DynamicParameters parameters = new();
|
|
|
|
List<AuditType> auditTypeList = db.Query<AuditType>("_8DGetAuditTypeList", parameters, commandType: CommandType.StoredProcedure).ToList();
|
|
return auditTypeList;
|
|
}
|
|
|
|
#if !NET8
|
|
public IEnumerable<C_8DAuditedStandard> GetAuditStandardList() {
|
|
FabApprovalSystemEntitiesAll db = new FabApprovalSystemEntitiesAll();
|
|
|
|
var auditStandardList = from a in db.C_8DAuditedStandard select a;
|
|
|
|
return auditStandardList;
|
|
}
|
|
#endif
|
|
public IEnumerable<Auditor> GetAuditorList() {
|
|
DynamicParameters parameters = new();
|
|
|
|
List<Auditor> auditorList = db.Query<Auditor>("_8DGetAuditorList", parameters, commandType: CommandType.StoredProcedure).ToList();
|
|
return auditorList;
|
|
}
|
|
|
|
public IEnumerable<AuditedArea> GetAuditAreaList() {
|
|
DynamicParameters parameters = new();
|
|
|
|
List<AuditedArea> auditAreaList = db.Query<AuditedArea>("_8DGetAuditAreaList", parameters, commandType: CommandType.StoredProcedure).ToList();
|
|
return auditAreaList;
|
|
}
|
|
|
|
public void UpdateAudit(Audit audit, int userID) {
|
|
int result = 0;
|
|
DynamicParameters parameters = new();
|
|
|
|
using (TransactionScope transaction = new()) {
|
|
try {
|
|
parameters.Add("AuditNo", audit.AuditNo);
|
|
parameters.Add("Title", audit.AuditTitle);
|
|
parameters.Add("AuditDate", audit.AuditDate);
|
|
parameters.Add("AuditStatus", audit.AuditStatus);
|
|
parameters.Add("AuditScore", audit.AuditScore);
|
|
parameters.Add("Auditees", audit.Auditees);
|
|
db.Execute("_8DUpdateAudit", param: parameters, commandType: CommandType.StoredProcedure);
|
|
|
|
parameters = new DynamicParameters();
|
|
parameters.Add("@AuditNo", audit.AuditNo);
|
|
db.Execute("_8DDeleteAuditors", parameters, commandType: CommandType.StoredProcedure);
|
|
List<int> auditors = audit.AuditorIDs;
|
|
if (auditors != null) {
|
|
foreach (int auditorID in auditors) {
|
|
parameters = new DynamicParameters();
|
|
parameters.Add("@AuditNo", audit.AuditNo);
|
|
parameters.Add("@AuditorID", auditorID);
|
|
db.Execute("_8DInsertAuditor", parameters, commandType: CommandType.StoredProcedure);
|
|
}
|
|
}
|
|
|
|
parameters = new DynamicParameters();
|
|
parameters.Add("@AuditNo", audit.AuditNo);
|
|
db.Execute("_8DDeleteAuditTypes", parameters, commandType: CommandType.StoredProcedure);
|
|
List<int> auditTypes = audit.AuditTypeIDs;
|
|
if (auditTypes != null) {
|
|
foreach (int auditTypeID in auditTypes) {
|
|
parameters = new DynamicParameters();
|
|
parameters.Add("@AuditNo", audit.AuditNo);
|
|
parameters.Add("@AuditTypeID", auditTypeID);
|
|
db.Execute("_8DInsertAuditType", parameters, commandType: CommandType.StoredProcedure);
|
|
}
|
|
}
|
|
|
|
parameters = new DynamicParameters();
|
|
parameters.Add("@AuditNo", audit.AuditNo);
|
|
db.Execute("_8DDeleteAuditedAreas", parameters, commandType: CommandType.StoredProcedure);
|
|
List<int> auditedAreas = audit.AuditedAreaIDs;
|
|
if (auditedAreas != null) {
|
|
foreach (int auditedAreaID in auditedAreas) {
|
|
parameters = new DynamicParameters();
|
|
parameters.Add("@AuditNo", audit.AuditNo);
|
|
parameters.Add("@AuditedAreaID", auditedAreaID);
|
|
db.Execute("_8DInsertAuditedArea", parameters, commandType: CommandType.StoredProcedure);
|
|
}
|
|
}
|
|
|
|
transaction.Complete();
|
|
|
|
} catch (Exception ex) {
|
|
transaction.Dispose();
|
|
throw new Exception(ex.Message + " " + ex.InnerException);
|
|
}
|
|
}
|
|
}
|
|
|
|
public IEnumerable<AuditReportAttachment> GetAuditReportAttachments(int auditNo) {
|
|
DynamicParameters parameters = new();
|
|
parameters.Add("@AuditNo", auditNo);
|
|
List<AuditReportAttachment> data = db.Query<AuditReportAttachment>("_8DGetAuditReportAttachments", parameters, commandType: CommandType.StoredProcedure).ToList();
|
|
return data;
|
|
}
|
|
|
|
public IEnumerable<AuditReportAttachment> GetCAFindingsItemAttachments(int caFindingsID) {
|
|
DynamicParameters parameters = new();
|
|
parameters.Add("@CAFindingsID", caFindingsID);
|
|
List<AuditReportAttachment> data = db.Query<AuditReportAttachment>("_8DGetCAFindingsItemAttachments", parameters, commandType: CommandType.StoredProcedure).ToList();
|
|
return data;
|
|
}
|
|
|
|
public IEnumerable<CAUserList> GetUserList() {
|
|
DynamicParameters parameters = new();
|
|
List<CAUserList> userList = db.Query<CAUserList>("_8DGetUserList", parameters, commandType: CommandType.StoredProcedure).ToList();
|
|
return userList;
|
|
}
|
|
|
|
public AuditFindings GetAuditFindingsByID(int auditFindingsID) {
|
|
DynamicParameters parameters = new();
|
|
parameters.Add("@AuditFindingsID", auditFindingsID);
|
|
var data = db.Query<AuditFindings>("SELECT * FROM _8DAuditFinding WHERE ID = @AuditFindingsID", parameters).SingleOrDefault();
|
|
return data;
|
|
}
|
|
|
|
public IEnumerable<int> GetAuditFindingCategoryIdsByFindingId(int auditFindingsID) {
|
|
DynamicParameters parameters = new();
|
|
parameters.Add("@AuditFindingID", auditFindingsID);
|
|
List<int> data = db.Query<int>("SELECT CategoryID FROM _8DAuditFindingCategoryByAuditFinding WHERE AuditFindingID = @AuditFindingID", parameters).ToList();
|
|
return data;
|
|
}
|
|
|
|
public IEnumerable<AuditFindings> GetAuditFindingsList(int auditNo) {
|
|
DynamicParameters parameters = new();
|
|
parameters.Add("@AuditNo", auditNo);
|
|
List<AuditFindings> data = db.Query<AuditFindings>("_8DGetAuditFindingsList", parameters, commandType: CommandType.StoredProcedure).ToList();
|
|
return data;
|
|
}
|
|
|
|
public void DeleteAuditReportAttachment(int attachmentID) {
|
|
DynamicParameters parameters = new();
|
|
parameters.Add("@AttachmentID", attachmentID);
|
|
db.Execute("_8DDeleteAuditReportAttachments", parameters, commandType: CommandType.StoredProcedure);
|
|
}
|
|
|
|
public void InsertAuditReportAttachment(AuditReportAttachment attach) {
|
|
DynamicParameters parameters = new();
|
|
parameters.Add("@AuditNo", attach.AuditNo);
|
|
parameters.Add("@CAFindingsID", attach.CAFindingsID);
|
|
parameters.Add("@UploadedByID", attach.UploadedByID);
|
|
parameters.Add("@FileName", attach.FileName);
|
|
parameters.Add("@FileGUID", attach.FileGUID);
|
|
|
|
db.Execute("_8DInsertAuditReportAttachment", parameters, commandType: CommandType.StoredProcedure);
|
|
}
|
|
|
|
internal string GetAuditReportAttachmentFileName(string fileGUID) {
|
|
DynamicParameters parameters = new();
|
|
parameters.Add("@FileGUID", fileGUID);
|
|
var fileName = db.Query<string>("_8DGetAuditReportAttachmentFileName", parameters, commandType: CommandType.StoredProcedure).Single();
|
|
return fileName;
|
|
}
|
|
|
|
internal void InsertAuditFindingsItem(AuditFindings data) {
|
|
DynamicParameters parameters = new();
|
|
parameters.Add("@AuditNo", data.AuditNo);
|
|
parameters.Add("@Findings", data.Findings);
|
|
parameters.Add("@ViolatedClause", data.ViolatedClause);
|
|
parameters.Add("@FindingType", data.FindingType);
|
|
parameters.Add("@FindingCategories", data.FindingCategories);
|
|
parameters.Add("@CANo", data.CANo);
|
|
parameters.Add("@Title", data.Title);
|
|
|
|
db.Execute("_8DInsertAuditFinding", parameters, commandType: CommandType.StoredProcedure);
|
|
}
|
|
|
|
internal void UpdateAuditFindingsItem(AuditFindings data) {
|
|
DynamicParameters parameters = new();
|
|
parameters.Add("@AuditFindingsID", data.ID);
|
|
parameters.Add("@Findings", data.Findings);
|
|
parameters.Add("@ViolatedClause", data.ViolatedClause);
|
|
parameters.Add("@FindingType", data.FindingType);
|
|
parameters.Add("@FindingCategories", data.FindingCategories);
|
|
parameters.Add("@CANo", data.CANo);
|
|
parameters.Add("@Title", data.Title);
|
|
|
|
db.Execute("_8DUpdateAuditFinding", parameters, commandType: CommandType.StoredProcedure);
|
|
}
|
|
|
|
internal void DeleteAuditFindingsItem(int auditFindingsID) {
|
|
DynamicParameters parameters = new();
|
|
parameters.Add("@AuditFindingsID", auditFindingsID);
|
|
|
|
db.Execute("_8DDeleteAuditFinding", parameters, commandType: CommandType.StoredProcedure);
|
|
}
|
|
|
|
internal List<AuditFindingCategory> GetAuditFindingCategories() {
|
|
DynamicParameters parameters = new();
|
|
return db.Query<AuditFindingCategory>("_8DGetAuditFindingCategories", commandType: CommandType.StoredProcedure).ToList();
|
|
}
|
|
|
|
public void ReleaseLockOnDocument(int userID, int issueID) {
|
|
DynamicParameters parameters = new();
|
|
parameters.Add("@AuditNo", issueID);
|
|
parameters.Add("@UserID", userID);
|
|
db.Execute("_8DReleaseLockOnAuditDocuments", parameters, commandType: CommandType.StoredProcedure);
|
|
}
|
|
|
|
public IEnumerable<CANoList> GetCorrectiveActionNoList() {
|
|
DynamicParameters parameters = new();
|
|
List<CANoList> dataList = db.Query<CANoList>("_8DGetCorrectiveActionNoList", parameters, commandType: CommandType.StoredProcedure).ToList();
|
|
return dataList;
|
|
}
|
|
|
|
public List<int> Get8DQA() {
|
|
List<int> users = new();
|
|
DynamicParameters parameters = new();
|
|
users = db.Query<int>("_8DGet8DQA", parameters, commandType: CommandType.StoredProcedure).ToList();
|
|
return users;
|
|
}
|
|
|
|
public int GetOpenCACountByAuditNo(int auditNo) {
|
|
int rowCount = 0;
|
|
DynamicParameters parameters = new();
|
|
parameters.Add("@AuditNo", auditNo);
|
|
rowCount = db.Query<int>("_8DGetOpenCACountByAuditNo", parameters, commandType: CommandType.StoredProcedure).Single();
|
|
return rowCount;
|
|
}
|
|
|
|
// CA Findings ====================================================================================================================================
|
|
|
|
public void InsertCAFindings(CAFindings model) {
|
|
DynamicParameters parameters = new();
|
|
parameters.Add("@AuditNo", model.AuditNo);
|
|
parameters.Add("@CAFinding", model.CAFinding);
|
|
parameters.Add("@CorrectiveAction", model.CorrectiveAction);
|
|
parameters.Add("@Result", model.Result);
|
|
parameters.Add("@ResponsibilityOwnerID", model.ResponsibilityOwnerID);
|
|
parameters.Add("@ECD", model.ECD);
|
|
parameters.Add("@ImplementedDate", model.ImplementedDate);
|
|
|
|
db.Execute("_8DInsertCAFindings", parameters, commandType: CommandType.StoredProcedure);
|
|
}
|
|
|
|
public void UpdateCAFindings(CAFindings model) {
|
|
DynamicParameters parameters = new();
|
|
parameters.Add("@CAFindingsID", model.ID);
|
|
parameters.Add("@CAFinding", model.CAFinding);
|
|
parameters.Add("@CorrectiveAction", model.CorrectiveAction);
|
|
parameters.Add("@Result", model.Result);
|
|
parameters.Add("@ResponsibilityOwnerID", model.ResponsibilityOwnerID);
|
|
parameters.Add("@ECD", model.ECD);
|
|
parameters.Add("@ImplementedDate", model.ImplementedDate);
|
|
|
|
db.Execute("_8DUpdateCAFindings", parameters, commandType: CommandType.StoredProcedure);
|
|
}
|
|
|
|
public void DeleteCAFindingsItem(int caFindingsID) {
|
|
DynamicParameters parameters = new();
|
|
parameters.Add("@CAFindingsID", caFindingsID);
|
|
|
|
db.Execute("_8DDeleteCAFindingsItem", parameters, commandType: CommandType.StoredProcedure);
|
|
}
|
|
|
|
public CAFindings GetCAFindingsItem(int caFindingsID) {
|
|
CAFindings model = new();
|
|
DynamicParameters parameters = new();
|
|
parameters.Add("@CAFindingsID", caFindingsID);
|
|
var data = db.Query<CAFindings>("_8DGetCAFindings", parameters, commandType: CommandType.StoredProcedure).Single();
|
|
return data;
|
|
}
|
|
|
|
public IEnumerable<CAFindings> GetCAFindingsList(int auditNo) {
|
|
DynamicParameters parameters = new();
|
|
parameters.Add("@AuditNo", auditNo);
|
|
List<CAFindings> dataList = db.Query<CAFindings>("_8DGetCAFindingsList", parameters, commandType: CommandType.StoredProcedure).ToList();
|
|
return dataList;
|
|
}
|
|
|
|
public int IsCAAssignedToAudit(int CANo, int auditNo) {
|
|
DynamicParameters parameters = new();
|
|
int returnValue = 1;
|
|
parameters.Add("@CANo", CANo);
|
|
parameters.Add("@AuditNo", auditNo);
|
|
parameters.Add("@IsCAAssignedToAudit", returnValue, direction: ParameterDirection.Output);
|
|
|
|
db.Execute("_8DIsCAAssignedtoAudit", parameters, commandType: CommandType.StoredProcedure);
|
|
|
|
returnValue = parameters.Get<int>("IsCAAssignedToAudit");
|
|
return returnValue;
|
|
}
|
|
|
|
public AuditEdit GetAuditEdit(int issueID, Audit audit, bool isAdmin, int userId) {
|
|
AuditEdit result = new();
|
|
List<int> userList = Get8DQA();
|
|
result.MesaUsers = UserUtilities.GetMesaUsers();
|
|
int QAs = userList.Find(delegate (int al) { return al == userId; });
|
|
result.Is8DQA = "false";
|
|
if (QAs != 0) {
|
|
result.Is8DQA = "true";
|
|
}
|
|
|
|
// transform audit users from string to list, delimited by a comma.
|
|
if (audit.Auditees == null) {
|
|
result.AuditeeNames = new List<string>();
|
|
} else {
|
|
string[] auditeeNames = audit.Auditees.Split(',');
|
|
result.AuditeeNames = auditeeNames.ToList();
|
|
}
|
|
|
|
result.IsSubmitter = false;
|
|
if (audit.OriginatorID == userId) {
|
|
result.IsSubmitter = true;
|
|
}
|
|
if (!isAdmin) {
|
|
result.IsAdmin = false;
|
|
} else {
|
|
result.IsAdmin = true;
|
|
}
|
|
if ((audit.RecordLockIndicator && audit.RecordLockedBy != userId)
|
|
|| audit.AuditStatus != 0) // open
|
|
{
|
|
result.RedirectToAction = true;
|
|
}
|
|
if (!result.IsAdmin && !result.IsSubmitter) {
|
|
result.RedirectToAction = true;
|
|
} else {
|
|
result.UserList = GetUserList();
|
|
result.AuditTypeList = GetAuditTypeList();
|
|
// result.AuditStandardList = GetAuditStandardList();
|
|
result.AuditorList = GetAuditorList();
|
|
result.AuditAreaList = GetAuditAreaList();
|
|
result.AuditFindingCategoryList = GetAuditFindingCategories();
|
|
result.CANoList = GetCorrectiveActionNoList();
|
|
}
|
|
return result;
|
|
}
|
|
|
|
public Audit InsertAndGetAudit(CorrectiveActionDMO caDMO, AuditFindings data, int userID) {
|
|
Audit audit = new();
|
|
InsertAuditFindingsItem(data);
|
|
audit = GetAuditItem(data.AuditNo, userID);
|
|
|
|
// Transfer Finding Details to CA
|
|
if (data.CANo != 0) {
|
|
CorrectiveAction ca = caDMO.GetCAItem(data.CANo, userID);
|
|
ca.CATitle = data.Title;
|
|
ca.CASourceID = 1; // Audit
|
|
caDMO.UpdateCorrectiveAction(ca);
|
|
}
|
|
|
|
return audit;
|
|
}
|
|
|
|
public Audit UpdateAndGetAudit(CorrectiveActionDMO caDMO, AuditFindings data, int userID) {
|
|
Audit audit = new();
|
|
UpdateAuditFindingsItem(data);
|
|
audit = GetAuditItem(data.AuditNo, userID);
|
|
|
|
// Transfer Finding Details to CA
|
|
if (data.CANo != 0) {
|
|
CorrectiveAction ca = caDMO.GetCAItem(data.CANo, userID);
|
|
ca.CATitle = data.Title;
|
|
ca.CASourceID = 1; // Audit
|
|
caDMO.UpdateCorrectiveAction(ca);
|
|
}
|
|
|
|
return audit;
|
|
}
|
|
|
|
public Audit DeleteAndGetAudit(int auditFindingsID, int userID) {
|
|
var af = GetAuditFindingsByID(auditFindingsID);
|
|
DeleteAuditFindingsItem(auditFindingsID);
|
|
var audit = GetAuditItem(af.AuditNo, userID);
|
|
return audit;
|
|
}
|
|
|
|
public string NotifyActionItemOwner(int issueID, DateTime? dueDate, int? responsibleOwnerID, string emailTemplatesPath) {
|
|
string emailSentList = "";
|
|
|
|
string email = MiscDMO.GetEmail(responsibleOwnerID);
|
|
|
|
string emailTemplate = "CorrectiveActionFindingAssigned.txt";
|
|
string userEmail = string.Empty;
|
|
string subject = "5s/CA Findings";
|
|
string senderName = "CorrectiveAction";
|
|
|
|
EmailNotification en = new(_AppSettings, subject, emailTemplatesPath);
|
|
string[] emailparams = new string[5];
|
|
emailparams[0] = Functions.ReturnAuditNoStringFormat(issueID);
|
|
if (dueDate is null)
|
|
emailparams[1] = string.Empty;
|
|
else
|
|
emailparams[1] = dueDate.Value.ToString();
|
|
emailparams[2] = Functions.DocumentTypeMapper(GlobalVars.DocumentType.Audit);
|
|
emailparams[3] = GlobalVars.hostURL;
|
|
emailparams[4] = issueID.ToString();
|
|
userEmail = email;
|
|
|
|
en.SendNotificationEmail(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, userEmail, null, subject, emailparams);
|
|
emailSentList += email + ",";
|
|
return email;
|
|
}
|
|
|
|
} |