Skip to content

Commit

Permalink
Merge pull request #4477 from cisagov/feat/CSET-3029
Browse files Browse the repository at this point in the history
Assessment upgrade now including feedback, comments, documents, observations and contacts
  • Loading branch information
jekuipers authored Mar 5, 2025
2 parents 2975452 + 48fa4b9 commit 0fe288f
Show file tree
Hide file tree
Showing 5 changed files with 118 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down Expand Up @@ -1176,24 +1177,131 @@ 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)
{
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();
}
}
}
}
}
2 changes: 1 addition & 1 deletion CSETWebNg/src/assets/i18n/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -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": {
Expand Down
2 changes: 1 addition & 1 deletion CSETWebNg/src/assets/i18n/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -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": {
Expand Down
2 changes: 1 addition & 1 deletion CSETWebNg/src/assets/i18n/jp.json
Original file line number Diff line number Diff line change
Expand Up @@ -482,6 +482,6 @@
"upgrade": "アップグレード",
"final": "最終バージョンへ",
"convert": "評価を変換しています。しばらくお待ちください。",
"p1": "この評価の最終バージョンが利用可能になりました。回答したすべての質問、評価情報、および人口統計が転送されます。このプロセスは元に戻せないことに注意してください"
"p1": "この評価の最終版が利用可能になりました。下書き版と最終版の両方に含まれる質問は、観察、添付文書、フィードバック、およびコメントとともに転送されます。さらに、すべての人口統計情報と連絡先も転送されます。元の下書きバージョンは引き続きアクセス可能で、このアップグレードにより新しい評価が生成されます"
}
}
2 changes: 1 addition & 1 deletion CSETWebNg/src/assets/i18n/uk.json
Original file line number Diff line number Diff line change
Expand Up @@ -819,7 +819,7 @@
"upgrade": "Оновити",
"final": "до фінальної версії",
"convert": "Конвертування вашої оцінки, це може зайняти кілька хвилин.",
"p1": "Фінальна версія цієї оцінки тепер доступна. Всі ваші відповіді на питання, разом з інформацією про оцінку та демографічні дані, будуть передані. Зверніть увагу, що цей процес є незворотним."
"p1": "Остаточна версія цієї оцінки вже доступна. Питання, що присутні як у чернетці, так і в остаточній версії, будуть перенесені разом із їхніми спостереженнями, прикріпленими документами, відгуками та коментарями. Крім того, буде перенесена вся демографічна інформація та контакти. Оригінальна чернетка залишатиметься доступною, і це оновлення створить нову оцінку."
},
"modules": {
"cpg": {
Expand Down

0 comments on commit 0fe288f

Please sign in to comment.