using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Web; using Dapper; using Fab2ApprovalSystem.Models; using System.Text; using Fab2ApprovalSystem.Misc; namespace Fab2ApprovalSystem.DMO { public class TrainingDMO { private IDbConnection db = new SqlConnection(GlobalVars.DB_CONNECTION_STRING); private static FabApprovalTrainingEntities FabApprovalDB = new FabApprovalTrainingEntities(); public int Create(int issueId) { var parameters = new DynamicParameters(); parameters = new DynamicParameters(); parameters.Add("@TrainingId", dbType: DbType.Int32, direction: ParameterDirection.InputOutput); parameters.Add("@ECNNumber", issueId); this.db.Execute("InsertTrainingItem", parameters, commandType: CommandType.StoredProcedure); int trainingId = parameters.Get("@TrainingId"); return trainingId; } public int CreateAssignment(int trainingId, int userId) { var parameters = new DynamicParameters(); parameters = new DynamicParameters(); //parameters.Add("@TrainingId", dbType: DbType.Int32, direction: ParameterDirection.InputOutput); parameters.Add("@TrainingID", trainingId); parameters.Add("@UserID", userId); parameters.Add("@AssignmentID", dbType: DbType.Int32, direction: ParameterDirection.InputOutput); this.db.Execute("InsertTrainingAssignment", parameters, commandType: CommandType.StoredProcedure); int assignmentId = parameters.Get("@AssignmentID"); return assignmentId; } public IEnumerable GetAllTrainings() { FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); IEnumerable allTrainings = (from a in db.Trainings select a).ToList(); return allTrainings; } public Training GetTraining(int trainingId) { FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); Training trainingRecord = new Training(); trainingRecord = (from a in db.Trainings where a.TrainingID == trainingId select a).FirstOrDefault(); return trainingRecord; } public TrainingAssignment GetAssignment(int assignmentId) { FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); TrainingAssignment assignmentRecord = (from a in db.TrainingAssignments where a.ID == assignmentId select a).FirstOrDefault(); return assignmentRecord; } public int GetTrainingId(int issueId) { FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); int ECNId = issueId; int trainingId = (from a in db.Trainings where a.ECN == ECNId select a.TrainingID).FirstOrDefault(); return trainingId; } public List GetTrainees(int groupId) { FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); var users = (from a in db.TrainingGroupMembers where a.TrainingGroupID == groupId select a.UserID).ToList(); return users; } public bool isUserTrainingMember(int groupId, int userId) { 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; } } public List GetTrainingGroups() { FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); return (from a in db.TrainingGroups select a).ToList(); } public TrainingGroup GetTrainingGroupByID(int groupId) { FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); TrainingGroup groups = (from a in db.TrainingGroups where a.TrainingGroupID == groupId select a).FirstOrDefault(); return groups; } public List GetECNAssignedTrainingGroups(int ECNNumber) { List trainingGroups = (from a in FabApprovalDB.ECNTrainingBies where a.ECNNumber == ECNNumber select a.AcknowledgementTrainingByID).ToList(); return trainingGroups; } public void AddTrainingGroupToECN(int ECNNumber, int groupId) { FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); //ECNTrainingBy ecnTraining = new ECNTrainingBy(); //ecnTraining.AcknowledgementTrainingByID = groupId; //ecnTraining.ECNNumber = ECNNumber; var parameters = new DynamicParameters(); parameters.Add("@ECNNumber", ECNNumber); parameters.Add("@TrainingByID", groupId); this.db.Execute("ECNInsertTrainingBy", parameters, commandType: CommandType.StoredProcedure); //db.ECNTrainingBies.Add(ecnTraining); } public void SetTrainingFlag(int ECNNumber) { FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); //ECNTrainingBy ecnTraining = new ECNTrainingBy(); //ecnTraining.AcknowledgementTrainingByID = groupId; //ecnTraining.ECNNumber = ECNNumber; var parameters = new DynamicParameters(); parameters.Add("@ECNNumber", ECNNumber); this.db.Execute("ECNSetTrainingFlag", parameters, commandType: CommandType.StoredProcedure); //db.ECNTrainingBies.Add(ecnTraining); } public List GetAllTrainingAssignments(int TrainingID) { FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); var TrainingData = from a in db.TrainingAssignments where a.TrainingID == TrainingID select a; return TrainingData.ToList(); } public List GetTrainingAssignments(int TrainingID) { FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); var TrainingData = from a in db.TrainingAssignments where a.TrainingID == TrainingID && a.Deleted != true select a; return TrainingData.ToList(); } public List GetTrainingAssignmentsByUser(int TrainingID, int userID) { FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); var TrainingData = from a in db.TrainingAssignments where a.TrainingID == TrainingID && a.UserID == userID select a; return TrainingData.ToList(); } public List GetAssignedDocs(int trainingAssignmentId) { FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); var docs = (from a in db.TrainingDocAcks where a.TrainingAssignmentID == trainingAssignmentId && a.Deleted != true select a).ToList(); return docs; } public void AcknowledgeDocument(int trainingDocAckID) { var parameters = new DynamicParameters(); parameters = new DynamicParameters(); parameters.Add("@TrainingDocAckID", trainingDocAckID); //parameters.Add("@AttachmentID", attachmentID); this.db.Execute("TrainingAcknowledgeDocument", parameters, commandType: CommandType.StoredProcedure); } public void UpdateAssignmentStatus(int trainingAssignmentID) { 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); } } } public int GetTrainingIdByAssignment(int trainingAssignmentID) { FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); int trainingID = (from a in db.TrainingAssignments where a.ID == trainingAssignmentID select a.TrainingID).SingleOrDefault(); return trainingID; } public void UpdateTrainingStatus(int trainingId) { 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); } } } public void reOpenTraining(int trainingId) { 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); } } } public bool CheckTrainingStatus(int trainingAssignmentID) { 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; } public bool CheckTrainingAssignmentStatus(int trainingAssignmentID) { 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; } public bool IsUserAssigned(int userId, int trainingId) { 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; } public List GetTrainings() { FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); var trainings = from a in db.Trainings select a; return trainings.ToList(); } public List GetTrainingAssignmentsByUserID(int userID) { FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); var trainingAssignments = from a in db.TrainingAssignments where a.UserID == userID && a.Deleted != true select a; return trainingAssignments.ToList(); } public void DeleteTrainingAssignment(int trainingAssignmentId) { 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); } } public void DeleteTrainingDocAck(int trainingAssignmentId) { 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); } } public void DeleteTraining(int trainingId) { 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); //db.SaveChanges(); } } public void DeleteAssignmentByUserId(int userId) { 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); } } public bool CheckValidDocAck(int docAckId) { 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; } } public List GetAllOpenTrainings() { FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); List openTrainings = (from a in db.Trainings where a.Status != true && a.Deleted != true select a).ToList(); return openTrainings; } public List GetOpenAssignmentsByTrainingID(int trainingID) { 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; } } }