public InactiveApiResponse ActivateSubject(string SubjectId, string ActivateOption) { // ActivateOption : New ExamSuite Mode: , New or replace ExamSuite Mode , Replace Subject Mode: //InActive.SubjectId IS InActive.SubjectCode var siteId = HomeController._centerdata.SiteId; var _inActiveSubject = repoForApprove.GetInActiveSubject(SubjectId); string SubjectCode = _inActiveSubject.SubjectCode; var now = DateTime.Now; if (_inActiveSubject == null) { return(new InactiveApiResponse { Message = "ไม่มีวิชานี้", Code = InactiveApiResponse.ResponseCode.noinactivesubject }); } //get ActivedSubject var _activatedSubject = repoForApprove.GetActivatedSubjectBySubjectCode(SubjectCode, _inActiveSubject.ContentLanguage); if (_activatedSubject == null) { _activatedSubject = new ViewModels.ExamBankModelsBack.ShareData.ActivatedSubject { _id = repoForApprove.GetNewGuid("").ToString(), SubjectCode = SubjectCode, SiteId = siteId, CreateDateTime = now, LastUpdateDateTime = now, IsEReadiness = false, DisabledDateTime = null, SubjectId = "",//จะถูกใส่ตอน Upsert ContentLanguage = _inActiveSubject.ContentLanguage, }; } //Get InActive for Convert var _inActiveExamSuite = repoQ.GetAllQuestionSuiteBySubjectId(SubjectId); //get old Subject var _oldSubject = repoForApprove.GetSubject(_activatedSubject.SubjectId); //var inActCtrl = new InActiveController(repoForApprove, null, null); foreach (var es in _inActiveExamSuite) { if (repoForApprove.GetConsiderationStatus(es) == "Wait") { return(new InactiveApiResponse { Message = "ยังตรวจข้อสอบไม่ครบ", Code = InactiveApiResponse.ResponseCode.notacceptallquestion }); } else if (repoForApprove.GetConsiderationStatus(es) == "Rejected") { return(new InactiveApiResponse { Message = "มีข้อสอบที่ถูกปฏิเสธ", Code = InactiveApiResponse.ResponseCode.notacceptallquestion }); } } // New ExamSuite Mode if (ActivateOption == "INS") { // Check ต้องเป็น suite ใหม่ทั้งหมด ถ้ามี return false var _allNewTitleCode = _inActiveExamSuite.Select(x => x.Code)?.ToList(); //if has exist var isExistExamSuite = _oldSubject?.ExamSuites?.Any(es => _allNewTitleCode?.Any(code => code == es.TitleCode) ?? true) ?? false; if (isExistExamSuite) { return(new InactiveApiResponse { Message = "ไม่สามารถเริ่มใช้รายวิชาได้ เนื่องจากมีหมวดข้อสอบซ้ำกันในรายวิชาที่เริ่มใช้งานอยู่แล้ว", Code = InactiveApiResponse.ResponseCode.existingexamsuite }); } } var _newQuestion = new List <Activated.Question>(); var _newSubject = this.ConvertToActivatedSubject(_inActiveSubject, _inActiveExamSuite, now, out _newQuestion); var _lastestSubjectVersion = repoForApprove.ListSubjectBySubjectCode(_activatedSubject.SubjectCode, _newSubject.ContentLanguage) ?.OrderByDescending(sub => sub.CreateDateTime) ?.FirstOrDefault()?.Version ?? this.ManageVersion(string.Empty, VersionModifyOption.InitialVersion); //Update ActivedSubject _activatedSubject.SubjectId = _newSubject._id; if (_oldSubject == null) { //Update Version _newSubject.Version = this.ManageVersion(string.Empty, VersionModifyOption.InitialVersion); //Create ActivedSubject repoForApprove.CreateActivatedSubject(_activatedSubject); } // New ExamSuite Mode // New or replace ExamSuite Mode (upsert) else if (ActivateOption == "INS" || ActivateOption == "UPS") { // Add Old suite var _newSuite = _newSubject.ExamSuites.Where(x => _oldSubject.ExamSuites.All(y => y.TitleCode != x.TitleCode))?.ToList(); var _oldAndDupSuite = _oldSubject.ExamSuites.Except(_newSuite)?.ToList(); var _oldSuite = _oldAndDupSuite.Where(x => _newSubject.ExamSuites.All(y => y.TitleCode != x.TitleCode))?.ToList(); //_newSubject.ExamSuites = _oldAndDupSuite.Concat(_newSuite).ToList(); _newSubject.ExamSuites.AddRange(_oldSuite); //add old group var _oldGroup = _oldSubject.ExamSuiteGroups.Where(x => _newSubject.ExamSuiteGroups.All(y => y._id != x._id))?.ToList(); var _dupGroupFromNew = _newSubject.ExamSuiteGroups.Where(og => _oldSubject.ExamSuiteGroups.Any(ng => ng._id == og._id))?.ToList(); //var _newGroup = _newSubject.ExamSuiteGroups.Except(_oldSubject.ExamSuiteGroups); //var _newAndDupGroup = _newSubject.ExamSuiteGroups.Except(_oldGroup); var _newGroup = _newSubject.ExamSuiteGroups.Where(x => _oldSubject.ExamSuiteGroups.All(y => y._id != x._id))?.ToList(); //add new map to _oldGroup foreach (var group in _oldGroup) { group.ExamSuiteGroupMaps.AddRange(_newSuite.Select(es => new Activated.ExamSuiteGroupMap() { _id = Guid.NewGuid().ToString(), ExamSuiteId = es._id, RandomCount = 0, }).ToList()); } //add old map to _dupGroupFromNew foreach (var group in _dupGroupFromNew) { group.ExamSuiteGroupMaps.AddRange(_oldSuite.Select(es => new Activated.ExamSuiteGroupMap() { _id = Guid.NewGuid().ToString(), ExamSuiteId = es._id, RandomCount = _oldSubject.ExamSuiteGroups?.Select(g => g.ExamSuiteGroupMaps?.FirstOrDefault(m => m.ExamSuiteId == es._id))?.FirstOrDefault()?.RandomCount ?? 0, }).ToList()); } //add old map to _newGroup foreach (var group in _newGroup) { group.ExamSuiteGroupMaps.AddRange(_oldSuite.Select(es => new Activated.ExamSuiteGroupMap() { _id = Guid.NewGuid().ToString(), ExamSuiteId = es._id, RandomCount = 0, }).ToList()); } _newSubject.ExamSuiteGroups = _oldGroup.Concat(_dupGroupFromNew).Concat(_newGroup).ToList(); //Update Version _newSubject.Version = this.ManageVersion(_lastestSubjectVersion, VersionModifyOption.IncreaseMinor); //Update ActivedSubject repoForApprove.UpsertActivatedSubject(_activatedSubject); } //Replace Subject Mode else if (ActivateOption == "REP") { //Update Version _newSubject.Version = ManageVersion(_lastestSubjectVersion, VersionModifyOption.IncreaseMajor); //Update ActivedSubject repoForApprove.UpdateActivatedSubject(_activatedSubject); } else { return(new InactiveApiResponse { Message = "กรุณาเลือกวิธีการ Activate", Code = InactiveApiResponse.ResponseCode.nooption }); } //All option must create newSubject and newQuestion repoForApprove.CreateSubject(_newSubject); repoForApprove.CreateQuestion(_newQuestion); //All option must delete InActiveSubject and Considerratio repoForApprove.DeleteAllInSubject(SubjectId); repoForApprove.DeleteAllConsiderration(_newSubject.ExamSuites.Select(es => es._id).ToList()); return(new InactiveApiResponse { Message = "เริ่มใช้รายวิชาสำเร็จ", Code = InactiveApiResponse.ResponseCode.success }); }
public Subject GetSubject(string SubjectId) { int i = 0; var siteId = HomeController._centerdata.SiteId; var _subject = repoForApprove.GetSubject(SubjectId); var _subjects = repoForApprove.ListSubjectBySubjectCode(_subject?.SubjectCode ?? string.Empty, _subject.ContentLanguage); var _activated = repoForApprove.GetActivatedSubjectBySubjectCode(_subject.SubjectCode, _subject.ContentLanguage); var _qid = _subject?.ExamSuites?.SelectMany(es => es?.QuestionIds)?.ToList(); string conString = "User Id=c##dsd;Password=1q2w3e4r;" + "Data Source=localhost:1521/db;"; DataTable dt_subject = new DataTable(); DataTable dt_subjects = new DataTable(); DataTable dt_activated = new DataTable(); DataSet ds_subject = new DataSet(); DataSet ds_subjects = new DataSet(); DataSet ds_activated = new DataSet(); using (OracleConnection objConn = new OracleConnection(conString)) { OracleCommand cmd = new OracleCommand(); OracleDataAdapter da = new OracleDataAdapter(); cmd.Connection = objConn; cmd.InitialLONGFetchSize = 1000; cmd.CommandText = "spGetSubject"; cmd.CommandType = CommandType.StoredProcedure; OracleParameter oraP = new OracleParameter(); oraP.OracleDbType = OracleDbType.RefCursor; oraP.Direction = System.Data.ParameterDirection.Output; cmd.Parameters.Add("SubjectId", OracleDbType.NVarchar2).Value = "14"; cmd.Parameters.Add(oraP); da.SelectCommand = cmd; da.Fill(ds_subject); dt_subject = ds_subject.Tables[0]; } using (OracleConnection objConn = new OracleConnection(conString)) { OracleCommand cmd = new OracleCommand(); OracleDataAdapter da = new OracleDataAdapter(); cmd.Connection = objConn; cmd.InitialLONGFetchSize = 1000; cmd.CommandText = "spGetSubjectList"; cmd.CommandType = CommandType.StoredProcedure; OracleParameter oraP = new OracleParameter(); oraP.OracleDbType = OracleDbType.RefCursor; oraP.Direction = System.Data.ParameterDirection.Output; cmd.Parameters.Add(oraP); da.SelectCommand = cmd; da.Fill(ds_subjects); dt_subjects = ds_subjects.Tables[0]; } using (OracleConnection objConn = new OracleConnection(conString)) { OracleCommand cmd = new OracleCommand(); OracleDataAdapter da = new OracleDataAdapter(); cmd.Connection = objConn; cmd.InitialLONGFetchSize = 1000; cmd.CommandText = "spGetSubject"; cmd.CommandType = CommandType.StoredProcedure; OracleParameter oraP = new OracleParameter(); oraP.OracleDbType = OracleDbType.RefCursor; oraP.Direction = System.Data.ParameterDirection.Output; cmd.Parameters.Add("SubjectId", OracleDbType.NVarchar2).Value = "14"; cmd.Parameters.Add(oraP); da.SelectCommand = cmd; da.Fill(ds_subject); dt_subject = ds_subject.Tables[0]; } //listAllQuestion //var _questions = repoForApprove.ListAllQuestionByQID(_qid ?? new List<string>(),); //ListActivedSubject var _activateds = repoForApprove.ListActivatedSubject(siteId); i++; var subject = new Subject { id = _subject?._id, SubjectCode = _subject?.SubjectCode, SubjectName = _subject?.SubjectName, ContentLanguage = _subject?.ContentLanguage, Version = _subject?.Version, IsDisabled = _activated?.DisabledDateTime.HasValue ?? false, ExamSuites = _subject?.ExamSuites?.Select(es => new ExamSuiteDetail { id = es._id, TitleCode = es.TitleCode, TitleName = es.TitleName, QuestionCount = es.QuestionIds?.Count() ?? 0, ConsiderationStatus = string.Empty, }), ExamSuiteGroups = _subject?.ExamSuiteGroups?.Select(esg => new ExamSuiteGroup { id = esg._id, SubjectId = _subject?._id, ExamSuiteGroupName = esg.ExamSuiteGroupName, IsUsed = esg.IsUsed, PassScore = esg.PassScore ?? 0, ExamDuration = esg.ExamDuration ?? 0, QuestionCount = 0, ExamSuiteGroupMaps = esg.ExamSuiteGroupMaps?.Select(esgm => new ExamSuiteGroupMap { id = esgm._id, ExamSuiteId = esgm.ExamSuiteId, RandomCount = esgm.RandomCount, ExamSuiteGroupId = esg._id, }), }), VersionList = _subjects?.Select(sub => new SubjectVersion { id = sub._id, CreateDateTime = sub.CreateDateTime, IsUsed = _activateds?.Any(aSub => aSub._id == sub._id) ?? false, SubjectId = sub._id, VersionText = sub.Version, }), VoiceLanguageList = _subject?.VoiceLanguages.Select(vl => new VoiceLanguage { id = vl._id, IsUsed = vl.IsUsed, Language = vl.Language, LanguageCode = vl.LanguageCode }), }; return(subject); }