diff --git a/CSETWebApi/CSETWeb_Api/CSETWebCore.Business/Assessment/AssessmentBusiness.cs b/CSETWebApi/CSETWeb_Api/CSETWebCore.Business/Assessment/AssessmentBusiness.cs index b792b664a..a5d9561ff 100644 --- a/CSETWebApi/CSETWeb_Api/CSETWebCore.Business/Assessment/AssessmentBusiness.cs +++ b/CSETWebApi/CSETWeb_Api/CSETWebCore.Business/Assessment/AssessmentBusiness.cs @@ -1135,6 +1135,7 @@ public void ConvertAssessment(int assessment_id, int original_id, string targetA { try { + ConvertContacts(assessment_id, original_id); JArray questionIds = null; var rh = new ResourceHelper(); @@ -1176,18 +1177,25 @@ public void ConvertAssessment(int assessment_id, int original_id, string targetA ComponentGuid = original_record.Component_Guid, Reviewed = original_record.Reviewed, QuestionType = original_record.Question_Type, - Is_Maturity = original_record.Is_Maturity ?? true + Is_Maturity = original_record.Is_Maturity ?? true, + Comment = original_record.Comment }; + var adminTabBusiness = new AdminTabBusiness(_context); var mb = new MaturityBusiness(_context, _assessmentUtil, adminTabBusiness); mb.StoreAnswer(assessment_id, answer); + + var newAnswer = _context.ANSWER + .Where(x => x.Assessment_Id == assessment_id && + x.Question_Or_Requirement_Id == newQuestionId) + .FirstOrDefault(); + + ConvertFindings(original_record.Answer_Id, newAnswer.Answer_Id, assessment_id); + ConvertDocuments(original_record.Answer_Id, newAnswer.Answer_Id); + } - // Hide draft assessment - var draft = _context.ASSESSMENT_CONTACTS - .Where(x => x.Assessment_Id == original_id) - .FirstOrDefault(); - draft.UserId = null; + _context.SaveChanges(); } catch (Exception exc) @@ -1195,5 +1203,105 @@ public void ConvertAssessment(int assessment_id, int original_id, string targetA NLog.LogManager.GetCurrentClassLogger().Error($"... {exc}"); } } + + public void ConvertFindings(int originalAnswerId, int answerId, int assessmentId) + { + var originalObservationList = _context.FINDING.Where(x => x.Answer_Id == originalAnswerId).ToList(); + + foreach (var finding in originalObservationList) + { + var newFinding = new FINDING() + { + Answer_Id = answerId, + Summary = finding.Summary, + Impact = finding.Impact, + Issue = finding.Issue, + Recommendations = finding.Recommendations, + Vulnerabilities = finding.Vulnerabilities, + Resolution_Date = finding.Resolution_Date, + Title = finding.Title, + Type = finding.Type, + Risk_Area = finding.Risk_Area, + Sub_Risk = finding.Sub_Risk, + Description = finding.Description, + Citations = finding.Citations, + ActionItems = finding.ActionItems, + Supp_Guidance = finding.Supp_Guidance + }; + _context.FINDING.Add(newFinding); + _context.SaveChanges(); + + var findingId = newFinding.Finding_Id; + ConvertFindingContacts(finding.Finding_Id, findingId, assessmentId); + } + } + + public void ConvertFindingContacts(int originalFindingId, int newFindingId, int assessmentId) + { + var originalObservationContacts = _context.FINDING_CONTACT.Where(x => x.Finding_Id == originalFindingId).ToList(); + + if (originalObservationContacts.Any()) + { + foreach (var findingContact in originalObservationContacts) + { + var assessmentContact = _context.ASSESSMENT_CONTACTS.Where(x => x.Assessment_Contact_Id == findingContact.Assessment_Contact_Id).FirstOrDefault(); + var newAssessmentContact = _context.ASSESSMENT_CONTACTS.Where(x => x.UserId == assessmentContact.UserId && x.Assessment_Id == assessmentId).FirstOrDefault(); + _context.FINDING_CONTACT.Add(new FINDING_CONTACT() + { + Finding_Id = newFindingId, + Assessment_Contact_Id = newAssessmentContact.Assessment_Contact_Id + }); + } + } + } + + public void ConvertDocuments(int originalAnswerId, int answerId) + { + var documentRecord = _context.DOCUMENT_ANSWERS.Where(x => x.Answer_Id == originalAnswerId).ToList(); + foreach (var document in documentRecord) + { + _context.DOCUMENT_ANSWERS.Add(new DOCUMENT_ANSWERS() + { + Document_Id = document.Document_Id, + Answer_Id = answerId + }); + _context.SaveChanges(); + } + } + + public void ConvertContacts(int assessmentId, int originalId) + { + //Grab contact record from auto generated new assessment contact + var contactRecord = _context.ASSESSMENT_CONTACTS.Where(x => x.Assessment_Id == assessmentId).FirstOrDefault(); + //Grab original contacts for assessment + var originalContactRecord = _context.ASSESSMENT_CONTACTS.Where(x => x.Assessment_Id == originalId).ToList(); + foreach (var contact in originalContactRecord) + { + if (contact.UserId != contactRecord.UserId) + { + _context.ASSESSMENT_CONTACTS.Add(new ASSESSMENT_CONTACTS() + { + FirstName = contact.FirstName, + LastName = contact.LastName, + PrimaryEmail = contact.PrimaryEmail, + Assessment_Id = assessmentId, + AssessmentRoleId = contact.AssessmentRoleId, + Title = contact.Title, + Phone = contact.Phone, + Cell_Phone = contact.Cell_Phone, + Reports_To = contact.Reports_To, + Organization_Name = contact.Organization_Name, + Site_Name = contact.Site_Name, + Emergency_Communications_Protocol = contact.Emergency_Communications_Protocol, + Is_Site_Participant = contact.Is_Site_Participant, + Is_Primary_POC = contact.Is_Primary_POC, + Last_Q_Answered = contact.Last_Q_Answered, + UserId = contact.UserId, + Invited = contact.Invited + }); + _context.SaveChanges(); + } + } + } } } \ No newline at end of file diff --git a/CSETWebNg/src/assets/i18n/en.json b/CSETWebNg/src/assets/i18n/en.json index f43316e40..1acd0ba23 100644 --- a/CSETWebNg/src/assets/i18n/en.json +++ b/CSETWebNg/src/assets/i18n/en.json @@ -1027,7 +1027,7 @@ "upgrade": "Upgrade", "final": "to final version", "convert": "Converting your assessment, this may take a few moments.", - "p1": "The final version of this assessment is now available. All your answered questions, along with assessment information and demographics, will be transferred. Please note that this process is irreversible." + "p1": "The final version of this assessment is now available. Questions present in both the draft and final versions will be transferred, along with their observations, attached documents, feedback, and comments. Additionally, all demographic information and contacts will be transferred. The original draft version will remain accessible, and this upgrade will generate a new assessment." }, "modules": { "cpg": { diff --git a/CSETWebNg/src/assets/i18n/es.json b/CSETWebNg/src/assets/i18n/es.json index d4771d8d2..916616848 100644 --- a/CSETWebNg/src/assets/i18n/es.json +++ b/CSETWebNg/src/assets/i18n/es.json @@ -890,7 +890,7 @@ "upgrade": "Actualizar", "final": "a la versión final", "convert": "Convirtiendo su evaluación, esto puede tardar unos momentos.", - "p1": "La versión final de esta evaluación ya está disponible. Todas sus preguntas respondidas, junto con la información de la evaluación y la demografía, serán transferidas. Tenga en cuenta que este proceso es irreversible." + "p1": "La versión final de esta evaluación ya está disponible. Las preguntas presentes tanto en la versión preliminar como en la versión final se transferirán, junto con sus observaciones, documentos adjuntos, comentarios y retroalimentación. Además, se transferirá toda la información demográfica y los contactos. La versión preliminar original seguirá siendo accesible y esta actualización generará una nueva evaluación." }, "modules": { "cpg": { diff --git a/CSETWebNg/src/assets/i18n/jp.json b/CSETWebNg/src/assets/i18n/jp.json index fa4a1c41f..1544a1c5b 100644 --- a/CSETWebNg/src/assets/i18n/jp.json +++ b/CSETWebNg/src/assets/i18n/jp.json @@ -482,6 +482,6 @@ "upgrade": "アップグレード", "final": "最終バージョンへ", "convert": "評価を変換しています。しばらくお待ちください。", - "p1": "この評価の最終バージョンが利用可能になりました。回答したすべての質問、評価情報、および人口統計が転送されます。このプロセスは元に戻せないことに注意してください。" + "p1": "この評価の最終版が利用可能になりました。下書き版と最終版の両方に含まれる質問は、観察、添付文書、フィードバック、およびコメントとともに転送されます。さらに、すべての人口統計情報と連絡先も転送されます。元の下書きバージョンは引き続きアクセス可能で、このアップグレードにより新しい評価が生成されます。" } } \ No newline at end of file diff --git a/CSETWebNg/src/assets/i18n/uk.json b/CSETWebNg/src/assets/i18n/uk.json index fa47a592e..cc58e1353 100644 --- a/CSETWebNg/src/assets/i18n/uk.json +++ b/CSETWebNg/src/assets/i18n/uk.json @@ -819,7 +819,7 @@ "upgrade": "Оновити", "final": "до фінальної версії", "convert": "Конвертування вашої оцінки, це може зайняти кілька хвилин.", - "p1": "Фінальна версія цієї оцінки тепер доступна. Всі ваші відповіді на питання, разом з інформацією про оцінку та демографічні дані, будуть передані. Зверніть увагу, що цей процес є незворотним." + "p1": "Остаточна версія цієї оцінки вже доступна. Питання, що присутні як у чернетці, так і в остаточній версії, будуть перенесені разом із їхніми спостереженнями, прикріпленими документами, відгуками та коментарями. Крім того, буде перенесена вся демографічна інформація та контакти. Оригінальна чернетка залишатиметься доступною, і це оновлення створить нову оцінку." }, "modules": { "cpg": {