public void DisableSubject(string SubjectId) { var activatedSubjec = repoForApprove.GetActivatedSubjectBySubjectId(SubjectId); var now = DateTime.Now; activatedSubjec.DisabledDateTime = now; activatedSubjec.LastUpdateDateTime = now; repoForApprove.UpsertActivatedSubject(activatedSubjec); }
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 }); }