using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq; using Dapper; using Fab2ApprovalSystem.Misc; using Fab2ApprovalSystem.Models; namespace Fab2ApprovalSystem.DMO; public class TrainingDMO { private readonly IDbConnection db = new SqlConnection(GlobalVars.DB_CONNECTION_STRING); #if !NET8 private static FabApprovalTrainingEntities FabApprovalDB = new FabApprovalTrainingEntities(); #endif public int Create(int issueId) { DynamicParameters parameters = new(); parameters.Add("@TrainingId", dbType: DbType.Int32, direction: ParameterDirection.InputOutput); parameters.Add("@ECNNumber", issueId); db.Execute("InsertTrainingItem", parameters, commandType: CommandType.StoredProcedure); int trainingId = parameters.Get("@TrainingId"); return trainingId; } public int CreateAssignment(int trainingId, int userId) { DynamicParameters parameters = new(); parameters.Add("@TrainingID", trainingId); parameters.Add("@UserID", userId); parameters.Add("@AssignmentID", dbType: DbType.Int32, direction: ParameterDirection.InputOutput); db.Execute("InsertTrainingAssignment", parameters, commandType: CommandType.StoredProcedure); int assignmentId = parameters.Get("@AssignmentID"); return assignmentId; } public IEnumerable GetAllTrainings() { #if !NET8 FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); IEnumerable allTrainings = (from a in db.Trainings select a).ToList(); return allTrainings; #endif #if NET8 throw new NotImplementedException(); #endif } public Training GetTraining(int trainingId) { #if !NET8 FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); Training trainingRecord = new Training(); trainingRecord = (from a in db.Trainings where a.TrainingID == trainingId select a).FirstOrDefault(); return trainingRecord; #endif #if NET8 throw new NotImplementedException(); #endif } public TrainingAssignment GetAssignment(int assignmentId) { #if !NET8 FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); TrainingAssignment assignmentRecord = (from a in db.TrainingAssignments where a.ID == assignmentId select a).FirstOrDefault(); return assignmentRecord; #endif #if NET8 throw new NotImplementedException(); #endif } public int GetTrainingId(int issueId) { #if !NET8 FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); int ECNId = issueId; int trainingId = (from a in db.Trainings where a.ECN == ECNId select a.TrainingID).FirstOrDefault(); return trainingId; #endif #if NET8 throw new NotImplementedException(); #endif } public List GetTrainees(int groupId) { #if !NET8 FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); var users = (from a in db.TrainingGroupMembers where a.TrainingGroupID == groupId select a.UserID).ToList(); return users; #endif #if NET8 throw new NotImplementedException(); #endif } public bool isUserTrainingMember(int groupId, int userId) { #if !NET8 FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); var users = (from a in db.TrainingGroupMembers where a.TrainingGroupID == groupId && a.UserID == userId select a).FirstOrDefault(); if (users == null) { return false; } else { return true; } #endif #if NET8 throw new NotImplementedException(); #endif } public List GetTrainingGroups() { #if !NET8 FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); return (from a in db.TrainingGroups select a).ToList(); #endif #if NET8 System.Text.StringBuilder query = new("SELECT TrainingGroupID, TrainingGroupName FROM TrainingGroups ORDER BY TrainingGroupID"); return db.Query(query.ToString()).ToList(); #endif } public TrainingGroup GetTrainingGroupByID(int groupId) { #if !NET8 FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); TrainingGroup groups = (from a in db.TrainingGroups where a.TrainingGroupID == groupId select a).FirstOrDefault(); return groups; #endif #if NET8 throw new NotImplementedException(); #endif } public List GetECNAssignedTrainingGroups(int ECNNumber) { #if !NET8 List trainingGroups = (from a in FabApprovalDB.ECNTrainingBies where a.ECNNumber == ECNNumber select a.AcknowledgementTrainingByID).ToList(); return trainingGroups; #endif #if NET8 throw new NotImplementedException(); #endif } public void AddTrainingGroupToECN(int ECNNumber, int groupId) { #if !NET8 FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); var parameters = new DynamicParameters(); parameters.Add("@ECNNumber", ECNNumber); parameters.Add("@TrainingByID", groupId); this.db.Execute("ECNInsertTrainingBy", parameters, commandType: CommandType.StoredProcedure); #endif #if NET8 throw new NotImplementedException(); #endif } public void SetTrainingFlag(int ECNNumber) { #if !NET8 FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); var parameters = new DynamicParameters(); parameters.Add("@ECNNumber", ECNNumber); this.db.Execute("ECNSetTrainingFlag", parameters, commandType: CommandType.StoredProcedure); #endif #if NET8 throw new NotImplementedException(); #endif } public List GetAllTrainingAssignments(int TrainingID) { #if !NET8 FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); var TrainingData = from a in db.TrainingAssignments where a.TrainingID == TrainingID select a; RefreshTrainingData(TrainingID, TrainingData); TrainingData = from a in db.TrainingAssignments where a.TrainingID == TrainingID select a; return TrainingData.ToList(); #endif #if NET8 throw new NotImplementedException(); #endif } public List GetTrainingAssignments(int TrainingID) { #if !NET8 FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); var TrainingData = from a in db.TrainingAssignments where a.TrainingID == TrainingID && a.Deleted != true select a; RefreshTrainingData(TrainingID, TrainingData); TrainingData = from a in db.TrainingAssignments where a.TrainingID == TrainingID select a; return TrainingData.ToList(); #endif #if NET8 throw new NotImplementedException(); #endif } public List GetTrainingAssignmentsByUser(int TrainingID, int userID) { #if !NET8 FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); var TrainingData = from a in db.TrainingAssignments where a.TrainingID == TrainingID && a.UserID == userID select a; return TrainingData.ToList(); #endif #if NET8 throw new NotImplementedException(); #endif } public List GetAssignedDocs(int trainingAssignmentId) { #if !NET8 FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); var docs = (from a in db.TrainingDocAcks where a.TrainingAssignmentID == trainingAssignmentId && a.Deleted != true select a).ToList(); return docs; #endif #if NET8 throw new NotImplementedException(); #endif } public void AcknowledgeDocument(int trainingDocAckID) { DynamicParameters parameters = new(); parameters.Add("@TrainingDocAckID", trainingDocAckID); db.Execute("TrainingAcknowledgeDocument", parameters, commandType: CommandType.StoredProcedure); } public void UpdateAssignmentStatus(int trainingAssignmentID) { #if !NET8 FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); var RecordToUpdate = (from a in db.TrainingAssignments where a.ID == trainingAssignmentID select a).SingleOrDefault(); if (RecordToUpdate.status != true) { RecordToUpdate.DateCompleted = DateTime.Now; RecordToUpdate.status = true; try { db.SaveChanges(); } catch (InvalidOperationException e) { string exception = e.ToString(); Console.WriteLine(e); } } #endif #if NET8 throw new NotImplementedException(); #endif } public int GetTrainingIdByAssignment(int trainingAssignmentID) { #if !NET8 FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); int trainingID = (from a in db.TrainingAssignments where a.ID == trainingAssignmentID select a.TrainingID).SingleOrDefault(); return trainingID; #endif #if NET8 throw new NotImplementedException(); #endif } public void UpdateTrainingStatus(int trainingId) { #if !NET8 FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); Training training = (from a in db.Trainings where a.TrainingID == trainingId select a).SingleOrDefault(); if (training != null) { training.CompletedDate = DateTime.Now; training.Status = true; try { db.SaveChanges(); } catch (InvalidOperationException e) { string exception = e.ToString(); Console.WriteLine(e); } } #endif #if NET8 throw new NotImplementedException(); #endif } public void reOpenTraining(int trainingId) { #if !NET8 FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); Training training = (from a in db.Trainings where a.TrainingID == trainingId select a).SingleOrDefault(); if (training != null) { training.CompletedDate = null; training.Status = false; try { db.SaveChanges(); } catch (InvalidOperationException e) { string exception = e.ToString(); Console.WriteLine(e); } } #endif #if NET8 throw new NotImplementedException(); #endif } public bool CheckTrainingStatus(int trainingAssignmentID) { #if !NET8 FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); bool isFinished = true; int trainingID = (from a in db.TrainingAssignments where a.ID == trainingAssignmentID select a.TrainingID).SingleOrDefault(); var trainingAssignments = from a in db.TrainingAssignments where a.TrainingID == trainingID && a.Deleted != true select a; foreach (var training in trainingAssignments) { if (training.status == false) { isFinished = false; } } return isFinished; #endif #if NET8 throw new NotImplementedException(); #endif } public bool CheckTrainingAssignmentStatus(int trainingAssignmentID) { #if !NET8 FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); bool isFinished = true; // TrainingDocAck docsAssigned = null; var docsAssigned = from a in db.TrainingDocAcks where a.TrainingAssignmentID == trainingAssignmentID && a.Deleted != true select a; foreach (var doc in docsAssigned) { if (doc.Reviewed == false) { isFinished = false; } } return isFinished; #endif #if NET8 throw new NotImplementedException(); #endif } public bool IsUserAssigned(int userId, int trainingId) { #if !NET8 FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); bool userHasAssignment = false; var assignments = (from a in db.TrainingAssignments where a.TrainingID == trainingId && a.UserID == userId && a.Deleted != true select a).ToList(); if (assignments.Count() > 0) { userHasAssignment = true; } return userHasAssignment; #endif #if NET8 throw new NotImplementedException(); #endif } public List GetTrainings() { #if !NET8 FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); var trainings = from a in db.Trainings select a; return trainings.ToList(); #endif #if NET8 throw new NotImplementedException(); #endif } public List GetTrainingAssignmentsByUserID(int userID) { #if !NET8 FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); var trainingAssignments = from a in db.TrainingAssignments where a.UserID == userID && a.Deleted != true select a; return trainingAssignments.ToList(); #endif #if NET8 throw new NotImplementedException(); #endif } public void DeleteTrainingAssignment(int trainingAssignmentId) { #if !NET8 FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); var trainingAssignments = from a in db.TrainingAssignments where a.ID == trainingAssignmentId select a; foreach (var item in trainingAssignments) { item.Deleted = true; item.DeletedDate = DateTime.Now; } try { db.SaveChanges(); } catch (InvalidOperationException e) { string exception = e.ToString(); Console.WriteLine(e); } #endif #if NET8 throw new NotImplementedException(); #endif } public void DeleteTrainingDocAck(int trainingAssignmentId) { #if !NET8 FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); var trainingDocAcks = from a in db.TrainingDocAcks where a.TrainingAssignmentID == trainingAssignmentId select a; foreach (var item in trainingDocAcks) { item.Deleted = true; item.DeletedDate = DateTime.Now; } try { db.SaveChanges(); } catch (InvalidOperationException e) { string exception = e.ToString(); Console.WriteLine(e); } #endif #if NET8 throw new NotImplementedException(); #endif } public void DeleteTraining(int trainingId) { #if !NET8 FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); Training training = (from a in db.Trainings where a.TrainingID == trainingId select a).FirstOrDefault(); if (training != null) { training.Deleted = true; training.DeletedDate = DateTime.Now; } List trainingAssignments = (from a in db.TrainingAssignments where a.TrainingID == trainingId select a).ToList(); db.SaveChanges(); foreach (TrainingAssignment trainingAssignment in trainingAssignments) { DeleteTrainingAssignment(trainingAssignment.ID); DeleteTrainingDocAck(trainingAssignment.ID); } #endif #if NET8 throw new NotImplementedException(); #endif } public void DeleteAssignmentByUserId(int userId) { #if !NET8 FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); var userAssignments = (from a in db.TrainingAssignments where a.UserID == userId select a).ToList(); foreach (var item in userAssignments) { // get document assignments var docAssignments = (from a in db.TrainingDocAcks where a.TrainingAssignmentID == item.TrainingID select a).ToList(); // delete each docAssignment foreach (var docAssignment in docAssignments) { DeleteTrainingDocAck(docAssignment.ID); } DeleteTrainingAssignment(item.ID); } #endif #if NET8 throw new NotImplementedException(); #endif } public bool CheckValidDocAck(int docAckId) { #if !NET8 FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); TrainingDocAck ack = (from a in db.TrainingDocAcks where a.ID == docAckId select a).FirstOrDefault(); // TODO Check the user is valid // Check that the assignment exists if (ack != null) { // Check that the assignment isn't deleted if (ack.Deleted == true) { return false; } // Check that the assignment isn't completed else if (ack.Reviewed == true) { return false; } else { return true; } } else { return false; } #endif #if NET8 throw new NotImplementedException(); #endif } public List GetAllOpenTrainings() { #if !NET8 FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); List openTrainings = (from a in db.Trainings where a.Status != true && a.Deleted != true select a).ToList(); return openTrainings; #endif #if NET8 throw new NotImplementedException(); #endif } public List GetOpenAssignmentsByTrainingID(int trainingID) { #if !NET8 FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); List openAssignments = (from a in FabApprovalDB.TrainingAssignments where a.TrainingID == trainingID && a.status != true && a.Deleted != true select a).ToList(); return openAssignments; #endif #if NET8 throw new NotImplementedException(); #endif } private void RefreshTrainingData(int TrainingID, IQueryable TrainingData) { bool assignmentIsIncomplete = false; UserAccountDMO userAccountDMO = new(); foreach (TrainingAssignment assignment in TrainingData) { LoginModel userModel = userAccountDMO.GetUserByID(assignment.UserID); if (!userModel.IsActive) UpdateAssignmentStatus(assignment.ID); if (assignment.Deleted != true && (assignment.DateCompleted is null || assignment.DateCompleted > DateTime.Now)) assignmentIsIncomplete = true; } if (!assignmentIsIncomplete) UpdateTrainingStatus(TrainingID); } }