diff --git a/CSETWebApi/CSETWeb_Api/CSETWebCore.Business/Maturity/CpgBusiness.cs b/CSETWebApi/CSETWeb_Api/CSETWebCore.Business/Maturity/CpgBusiness.cs index 82d0d6356a..b5d5306eb1 100644 --- a/CSETWebApi/CSETWeb_Api/CSETWebCore.Business/Maturity/CpgBusiness.cs +++ b/CSETWebApi/CSETWeb_Api/CSETWebCore.Business/Maturity/CpgBusiness.cs @@ -150,6 +150,15 @@ private List InitializeSeries() } + // INFORMATION TECHNOLOGY (IT) + var itSectors = new List() { 13, 28 }; + if ((itSectors.Contains(demographics?.SectorId ?? -1)) + || itSectors.Contains(ddSector?.IntValue ?? -1)) + { + return 20; + } + + return null; } } diff --git a/CSETWebApi/CSETWeb_Api/CSETWebCore.Business/Question/QuestionDetailsBusiness.cs b/CSETWebApi/CSETWeb_Api/CSETWebCore.Business/Question/QuestionDetailsBusiness.cs index 02dfdb0f04..059f47d217 100644 --- a/CSETWebApi/CSETWeb_Api/CSETWebCore.Business/Question/QuestionDetailsBusiness.cs +++ b/CSETWebApi/CSETWeb_Api/CSETWebCore.Business/Question/QuestionDetailsBusiness.cs @@ -18,7 +18,7 @@ using System; using System.Collections.Generic; using System.Linq; -using NPOI.SS.Formula.Functions; +using Microsoft.EntityFrameworkCore; namespace CSETWebCore.Business.Question { @@ -132,7 +132,10 @@ public QuestionDetails GetQuestionDetails(int? questionId, int assessmentId, str if (questionType == "Maturity") { - var matQuestion = _context.MATURITY_QUESTIONS.Where(q => q.Mat_Question_Id == questionId).FirstOrDefault(); + var matQuestion = _context.MATURITY_QUESTIONS + .Include(x => x.MATURITY_QUESTION_PROPS) + .Where(q => q.Mat_Question_Id == questionId).FirstOrDefault(); + qp = new QuestionPoco(_context, newAnswer, matQuestion); } else diff --git a/CSETWebApi/CSETWeb_Api/CSETWebCore.Business/Question/QuestionInformationTabData.cs b/CSETWebApi/CSETWeb_Api/CSETWebCore.Business/Question/QuestionInformationTabData.cs index 6fe5fe1284..13e986f7d6 100644 --- a/CSETWebApi/CSETWeb_Api/CSETWebCore.Business/Question/QuestionInformationTabData.cs +++ b/CSETWebApi/CSETWeb_Api/CSETWebCore.Business/Question/QuestionInformationTabData.cs @@ -17,6 +17,7 @@ using CSETWebCore.Helpers; using CSETWebCore.Interfaces.Helpers; using CSETWebCore.Model.Question; +using Microsoft.EntityFrameworkCore.Query; @@ -569,6 +570,12 @@ public void BuildMaturityInfoTab(MaturityQuestionInfoData info) tabData.ExaminationApproach = info.MaturityQuestion.Examination_Approach; + //Include details stored in MATURITY_QUESTION_PROPS + tabData.Measurement = info.MaturityQuestion.MATURITY_QUESTION_PROPS.FirstOrDefault(x => x.PropertyName == "MEASUREMENT")?.PropertyValue; + tabData.Attestation = info.MaturityQuestion.MATURITY_QUESTION_PROPS.FirstOrDefault(x => x.PropertyName == "ATTESTATION")?.PropertyValue; + + + // apply an overlay if one exists var lang = _tokenManager.GetCurrentLanguage(); diff --git a/CSETWebApi/CSETWeb_Api/CSETWebCore.Helpers/CpgStructure.cs b/CSETWebApi/CSETWeb_Api/CSETWebCore.Helpers/CpgStructure.cs index 94c92cd6b9..17681cb16d 100644 --- a/CSETWebApi/CSETWeb_Api/CSETWebCore.Helpers/CpgStructure.cs +++ b/CSETWebApi/CSETWeb_Api/CSETWebCore.Helpers/CpgStructure.cs @@ -245,6 +245,10 @@ private void GetSubgroups(List domainList, question.Complexity = myQ.MATURITY_QUESTION_PROPS.FirstOrDefault(x => x.PropertyName == "COMPLEXITY")?.PropertyValue; + question.Measurement = myQ.MATURITY_QUESTION_PROPS.FirstOrDefault(x => x.PropertyName == "MEASUREMENT")?.PropertyValue; + question.Attestation = myQ.MATURITY_QUESTION_PROPS.FirstOrDefault(x => x.PropertyName == "ATTESTATION")?.PropertyValue; + + // overlay var o = _overlay.GetMaturityQuestion(question.QuestionId, _lang); if (o != null) diff --git a/CSETWebApi/CSETWeb_Api/CSETWebCore.Model/Maturity/CPG/ContentModel.cs b/CSETWebApi/CSETWeb_Api/CSETWebCore.Model/Maturity/CPG/ContentModel.cs index 70624c6fad..445e64e85b 100644 --- a/CSETWebApi/CSETWeb_Api/CSETWebCore.Model/Maturity/CPG/ContentModel.cs +++ b/CSETWebApi/CSETWeb_Api/CSETWebCore.Model/Maturity/CPG/ContentModel.cs @@ -52,6 +52,9 @@ public class Question public string Impact { get; set; } public string Complexity { get; set; } + public string Measurement { get; set; } + public string Attestation { get; set; } + public List CsfMappings { get; set; } = []; public List TTP { get; set; } = []; diff --git a/CSETWebApi/CSETWeb_Api/CSETWebCore.Model/Question/RequirementTabData.cs b/CSETWebApi/CSETWeb_Api/CSETWebCore.Model/Question/RequirementTabData.cs index 1e5ca8a1e3..7f0ac8e217 100644 --- a/CSETWebApi/CSETWeb_Api/CSETWebCore.Model/Question/RequirementTabData.cs +++ b/CSETWebApi/CSETWeb_Api/CSETWebCore.Model/Question/RequirementTabData.cs @@ -14,6 +14,9 @@ public class RequirementTabData public string SupplementalFact { get; set; } public string ExaminationApproach { get; set; } + public string Measurement { get; set; } + public string Attestation { get; set; } + public string Set_Name { get; set; } } } \ No newline at end of file diff --git a/CSETWebNg/src/app/assessment/questions/question-extras/question-extras.component.html b/CSETWebNg/src/app/assessment/questions/question-extras/question-extras.component.html index ab6300f48f..a87319374c 100644 --- a/CSETWebNg/src/app/assessment/questions/question-extras/question-extras.component.html +++ b/CSETWebNg/src/app/assessment/questions/question-extras/question-extras.component.html @@ -239,8 +239,8 @@
- +
{{t('extras.scope')}}
@@ -256,6 +256,22 @@
+
+
+ {{t('extras.attestation')}} +
+
+
+
+ +
+
+ {{t('extras.measurement')}} +
+
+
+
+
{{t('extras.implementation guidance')}} diff --git a/CSETWebNg/src/app/assessment/results/cpg/cpg-practice-table/cpg-practice-table.component.ts b/CSETWebNg/src/app/assessment/results/cpg/cpg-practice-table/cpg-practice-table.component.ts index f47e63f8b9..978b55ece9 100644 --- a/CSETWebNg/src/app/assessment/results/cpg/cpg-practice-table/cpg-practice-table.component.ts +++ b/CSETWebNg/src/app/assessment/results/cpg/cpg-practice-table/cpg-practice-table.component.ts @@ -94,6 +94,12 @@ export class CpgPracticeTableComponent implements OnInit { case 564: // recover return this.colorSvc.nistCsfFuncColor('RC'); + case 565: + // SSG - IT Software Development + return '#305496'; + case 566: + // SSG - IT Product Design + return '#548235'; default: return '#6BA443'; } diff --git a/CSETWebNg/src/app/reports/cmmc2/cmmc2-comments-marked/cmmc2-comments-marked.component.ts b/CSETWebNg/src/app/reports/cmmc2/cmmc2-comments-marked/cmmc2-comments-marked.component.ts index ec0dcbdd13..a38d79de9b 100644 --- a/CSETWebNg/src/app/reports/cmmc2/cmmc2-comments-marked/cmmc2-comments-marked.component.ts +++ b/CSETWebNg/src/app/reports/cmmc2/cmmc2-comments-marked/cmmc2-comments-marked.component.ts @@ -26,6 +26,7 @@ import { Title } from '@angular/platform-browser'; import { ConfigService } from '../../../services/config.service'; import { MaturityService } from '../../../services/maturity.service'; import { QuestionsService } from '../../../services/questions.service'; +import { TranslocoService } from '@jsverse/transloco'; @Component({ selector: 'app-cmmc2-comments-marked', @@ -45,13 +46,18 @@ export class Cmmc2CommentsMarkedComponent implements OnInit { public configSvc: ConfigService, private titleService: Title, private maturitySvc: MaturityService, - public questionsSvc: QuestionsService + public questionsSvc: QuestionsService, + public tSvc: TranslocoService ) { } ngOnInit() { + this.tSvc.selectTranslate('comments and marked for review', {}, { scope: 'reports' }) + .subscribe(title => + this.titleService.setTitle(title + ' - ' + this.configSvc.behaviors.defaultTitle)); + this.loading = true; this.keyToCategory = this.maturitySvc.keyToCategory; - this.titleService.setTitle("CMMC 2.0 Comments and Marked for Review - " + this.configSvc.behaviors.defaultTitle); + this.maturitySvc.getCmmcReportData().subscribe( (r: any) => { diff --git a/CSETWebNg/src/app/reports/cmmc2/cmmc2-scorecard-report/cmmc2-scorecard-report.component.ts b/CSETWebNg/src/app/reports/cmmc2/cmmc2-scorecard-report/cmmc2-scorecard-report.component.ts index 6a134c2647..9a0febc61a 100644 --- a/CSETWebNg/src/app/reports/cmmc2/cmmc2-scorecard-report/cmmc2-scorecard-report.component.ts +++ b/CSETWebNg/src/app/reports/cmmc2/cmmc2-scorecard-report/cmmc2-scorecard-report.component.ts @@ -1,6 +1,10 @@ import { Component, Input } from '@angular/core'; import { AssessmentService } from '../../../services/assessment.service'; import { MaturityService } from '../../../services/maturity.service'; +import { TranslocoService } from '@jsverse/transloco'; +import { TypescriptDefaultsService } from '@ngstack/code-editor'; +import { Title } from '@angular/platform-browser'; +import { ConfigService } from '../../../services/config.service'; @Component({ selector: 'app-cmmc2-scorecard-report', @@ -18,18 +22,26 @@ export class Cmmc2ScorecardReportComponent { targetLevel: number; -/** - * - */ + /** + * + */ constructor( public assessSvc: AssessmentService, - public maturitySvc: MaturityService + public maturitySvc: MaturityService, + public tSvc: TranslocoService, + public titleService: Title, + public configSvc: ConfigService ) { } /** * */ ngOnInit(): void { + this.tSvc.selectTranslate('scorecard report', {}, { scope: 'reports' }) + .subscribe(title => { + this.titleService.setTitle(title + ' - ' + this.configSvc.behaviors.defaultTitle) + }); + this.maturitySvc.getCmmcReportData().subscribe((r: any) => { const info = r.reportData.information; this.assessmentDate = info.assessment_Date; diff --git a/CSETWebNg/src/app/reports/cmmc2/executive-cmmc2/executive-cmmc2.component.ts b/CSETWebNg/src/app/reports/cmmc2/executive-cmmc2/executive-cmmc2.component.ts index f6bcda0f71..e83a897a3e 100644 --- a/CSETWebNg/src/app/reports/cmmc2/executive-cmmc2/executive-cmmc2.component.ts +++ b/CSETWebNg/src/app/reports/cmmc2/executive-cmmc2/executive-cmmc2.component.ts @@ -28,6 +28,7 @@ import Chart from 'chart.js/auto'; import { ChartService } from '../../../services/chart.service'; import { MaturityService } from '../../../services/maturity.service'; import { ConfigService } from '../../../services/config.service'; +import { TranslocoService } from '@jsverse/transloco'; @Component({ @@ -62,7 +63,8 @@ export class ExecutiveCMMC2Component implements OnInit, AfterViewInit { public chartSvc: ChartService, private maturitySvc: MaturityService, private titleService: Title, - public configSvc: ConfigService + public configSvc: ConfigService, + public tSvc: TranslocoService ) { } @@ -71,7 +73,10 @@ export class ExecutiveCMMC2Component implements OnInit, AfterViewInit { * */ ngOnInit() { - this.titleService.setTitle("Executive Summary - " + this.configSvc.behaviors.defaultTitle); + + this.tSvc.selectTranslate('executive summary', {}, { scope: 'reports' }) + .subscribe(title => + this.titleService.setTitle(title + ' - ' + this.configSvc.behaviors.defaultTitle)); this.targetLevel = 0; this.reportSvc.getReport('executivematurity').subscribe( diff --git a/CSETWebNg/src/app/reports/commentsmfr/commentsmfr.component.ts b/CSETWebNg/src/app/reports/commentsmfr/commentsmfr.component.ts index 8c277d97d6..65d0bf5882 100644 --- a/CSETWebNg/src/app/reports/commentsmfr/commentsmfr.component.ts +++ b/CSETWebNg/src/app/reports/commentsmfr/commentsmfr.component.ts @@ -37,7 +37,6 @@ import { TranslocoService } from '@jsverse/transloco'; styleUrls: ['../reports.scss', '../acet-reports.scss'] }) export class CommentsMfrComponent implements OnInit { - translationTabTitle: any; response: any = null; remarks: string; @@ -66,11 +65,11 @@ export class CommentsMfrComponent implements OnInit { */ ngOnInit(): void { this.loading = true; - - this.translationTabTitle = this.tSvc.selectTranslate('reports.core.rra.cmfr.report title') - .subscribe(value => - this.titleService.setTitle(this.tSvc.translate('reports.core.rra.cmfr.report title') + ' - ' + this.configSvc.behaviors.defaultTitle)); - + + this.tSvc.selectTranslate('comments and marked for review', {}, { scope: 'reports' }) + .subscribe(title => + this.titleService.setTitle(title + ' - ' + this.configSvc.behaviors.defaultTitle)); + this.maturitySvc.getCommentsMarked().subscribe( (r: any) => { diff --git a/CSETWebNg/src/app/reports/cpg/cpg-deficiency/cpg-deficiency.component.ts b/CSETWebNg/src/app/reports/cpg/cpg-deficiency/cpg-deficiency.component.ts index 565bb5021c..bb2998f359 100644 --- a/CSETWebNg/src/app/reports/cpg/cpg-deficiency/cpg-deficiency.component.ts +++ b/CSETWebNg/src/app/reports/cpg/cpg-deficiency/cpg-deficiency.component.ts @@ -76,7 +76,10 @@ export class CpgDeficiencyComponent implements OnInit { ngOnInit(): void { this.loading = true; - this.titleSvc.setTitle(this.tSvc.translate('reports.core.cpg.deficiency.cpg deficiency') + " - " + this.configSvc.behaviors.defaultTitle); + this.tSvc.selectTranslate('core.cpg.deficiency.cpg deficiency', {}, {scope: 'reports'}) + .subscribe(title => { + this.titleSvc.setTitle(title + ' - ' + this.configSvc.behaviors.defaultTitle) + }); // make sure that the assessSvc has the assessment loaded so that we can determine any SSG model applicable this.assessSvc.getAssessmentDetail().subscribe((assessmentDetail: any) => { diff --git a/CSETWebNg/src/app/reports/cpg/cpg-report/cpg-report.component.ts b/CSETWebNg/src/app/reports/cpg/cpg-report/cpg-report.component.ts index ae10f7b564..3e3f69914a 100644 --- a/CSETWebNg/src/app/reports/cpg/cpg-report/cpg-report.component.ts +++ b/CSETWebNg/src/app/reports/cpg/cpg-report/cpg-report.component.ts @@ -35,10 +35,8 @@ import { TranslocoService } from '@jsverse/transloco'; styleUrls: ['./cpg-report.component.scss', '../../reports.scss'] }) export class CpgReportComponent implements OnInit { - translationTabTitle: any; - loading = false; - + assessmentName: string; assessmentDate: string; assessorName: string; @@ -66,9 +64,9 @@ export class CpgReportComponent implements OnInit { * */ ngOnInit(): void { - this.translationTabTitle = this.tSvc.selectTranslate('reports.core.cpg.report.cpg report') - .subscribe(value => - this.titleSvc.setTitle(this.tSvc.translate('reports.core.cpg.report.cpg report') + ' - ' + this.configSvc.behaviors.defaultTitle)); + this.tSvc.selectTranslate('core.cpg.report.cpg report', {}, { scope: 'reports' }) + .subscribe(title => + this.titleSvc.setTitle(title + ' - ' + this.configSvc.behaviors.defaultTitle)); this.assessSvc.getAssessmentDetail().subscribe((assessmentDetail: any) => { this.assessmentName = assessmentDetail.assessmentName; diff --git a/CSETWebNg/src/app/reports/executive-summary/executive-summary.component.ts b/CSETWebNg/src/app/reports/executive-summary/executive-summary.component.ts index d458b7d682..9d781d3905 100644 --- a/CSETWebNg/src/app/reports/executive-summary/executive-summary.component.ts +++ b/CSETWebNg/src/app/reports/executive-summary/executive-summary.component.ts @@ -45,7 +45,6 @@ export class ExecutiveSummaryComponent implements OnInit { chartStandardsSummary: Chart; //canvasStandardResultsByCategory: Chart; responseResultsByCategory: any; - translationSub: any; // Charts for Components componentCount = 0; @@ -69,17 +68,16 @@ export class ExecutiveSummaryComponent implements OnInit { public acetSvc: ACETService, private assessmentSvc: AssessmentService, public configSvc: ConfigService, - public tSvc: TranslocoService, - private translocoService: TranslocoService + public tSvc: TranslocoService, ) { } ngOnInit() { this.titleService.setTitle("Executive Summary - " + this.configSvc.behaviors.defaultTitle); - this.translationSub = this.translocoService.selectTranslate('') - .subscribe(value => - this.titleService.setTitle(this.tSvc.translate('reports.core.executive summary.report title') + ' - ' + this.configSvc.behaviors.defaultTitle)); + this.tSvc.selectTranslate('core.executive summary.report title', {}, { scope: 'reports' }) + .subscribe(title => + this.titleService.setTitle(title + ' - ' + this.configSvc.behaviors.defaultTitle)); this.reportSvc.getReport('executive').subscribe( (r: any) => { @@ -121,9 +119,4 @@ export class ExecutiveSummaryComponent implements OnInit { usesRAC() { return !!this.responseResultsByCategory?.dataSets.find(e => e.label === 'RAC'); } - - ngOnDestroy() { - this.translationSub.unsubscribe() -} - } diff --git a/CSETWebNg/src/app/reports/physical-summary/physical-summary.component.ts b/CSETWebNg/src/app/reports/physical-summary/physical-summary.component.ts index cf4a1b51bd..fa502fd3e3 100644 --- a/CSETWebNg/src/app/reports/physical-summary/physical-summary.component.ts +++ b/CSETWebNg/src/app/reports/physical-summary/physical-summary.component.ts @@ -64,9 +64,9 @@ export class PhysicalSummaryComponent implements OnInit, AfterViewInit { ) { } ngOnInit() { - this.translationSub = this.tSvc.selectTranslate('reports.core.physical summary.report title') - .subscribe(value => - this.titleService.setTitle(this.tSvc.translate('reports.core.physical summary.report title') + ' - ' + this.configSvc.behaviors.defaultTitle)); + this.tSvc.selectTranslate('core.physical summary.report title', {}, { scope: 'reports' }) + .subscribe(title => + this.titleService.setTitle(title + ' - ' + this.configSvc.behaviors.defaultTitle)); this.reportSvc.getReport('physicalsummary').subscribe( (r: any) => { diff --git a/CSETWebNg/src/app/reports/rra/rra-deficiency/rra-deficiency.component.ts b/CSETWebNg/src/app/reports/rra/rra-deficiency/rra-deficiency.component.ts index eb96146d06..9753c1f0f2 100644 --- a/CSETWebNg/src/app/reports/rra/rra-deficiency/rra-deficiency.component.ts +++ b/CSETWebNg/src/app/reports/rra/rra-deficiency/rra-deficiency.component.ts @@ -37,8 +37,6 @@ import { TranslocoService } from '@jsverse/transloco'; styleUrls: ['../../reports.scss', '../../acet-reports.scss'] }) export class RraDeficiencyComponent implements OnInit { - translationTabTitle: any; - response: any; loading: boolean = false; @@ -65,9 +63,9 @@ export class RraDeficiencyComponent implements OnInit { ngOnInit() { this.loading = true; - this.translationTabTitle = this.tSvc.selectTranslate('reports.core.rra.rra deficiency report') - .subscribe(value => - this.titleService.setTitle(this.tSvc.translate('reports.core.rra.rra deficiency report') + ' - ' + this.configSvc.behaviors.defaultTitle)); + this.tSvc.selectTranslate('core.rra.rra deficiency report', {}, {scope: 'reports'}) + .subscribe(title => + this.titleService.setTitle(title + ' - ' + this.configSvc.behaviors.defaultTitle)); this.maturitySvc.getMaturityDeficiency("RRA").subscribe( diff --git a/CSETWebNg/src/app/reports/rra/rra-report/rra-report.component.ts b/CSETWebNg/src/app/reports/rra/rra-report/rra-report.component.ts index dd5413c0f8..4231a35642 100644 --- a/CSETWebNg/src/app/reports/rra/rra-report/rra-report.component.ts +++ b/CSETWebNg/src/app/reports/rra/rra-report/rra-report.component.ts @@ -38,7 +38,6 @@ import { TranslocoService } from '@jsverse/transloco'; }) export class RraReportComponent implements OnInit { response: any; - translationTabTitle: any; overallScoreDisplay: string; standardBasedScore: number; @@ -131,9 +130,9 @@ export class RraReportComponent implements OnInit { error => console.log('Main RRA report load Error: ' + (error).message) ); - this.translationTabTitle = this.tSvc.selectTranslate('reports.core.rra.tab title') - .subscribe(value => - this.titleService.setTitle(this.tSvc.translate('reports.core.rra.tab title') + ' - ' + this.configSvc.behaviors.defaultTitle)); + this.tSvc.selectTranslate('core.rra.tab title', {}, { scope: 'reports' }) + .subscribe(title => + this.titleService.setTitle(title + ' - ' + this.configSvc.behaviors.defaultTitle)); } /** diff --git a/CSETWebNg/src/app/reports/sd-owner/sd-owner-comments/sd-owner-comments-mfr.component.ts b/CSETWebNg/src/app/reports/sd-owner/sd-owner-comments/sd-owner-comments-mfr.component.ts index 51837eb3aa..92889cb764 100644 --- a/CSETWebNg/src/app/reports/sd-owner/sd-owner-comments/sd-owner-comments-mfr.component.ts +++ b/CSETWebNg/src/app/reports/sd-owner/sd-owner-comments/sd-owner-comments-mfr.component.ts @@ -38,7 +38,6 @@ import { Title } from '@angular/platform-browser'; }) export class SdOwnerCommentsMfrComponent { - translationTabTitle: any; response: any = null; remarks: string; loading: boolean = false; @@ -59,9 +58,9 @@ export class SdOwnerCommentsMfrComponent { ngOnInit(): void { this.loading = true; - this.translationTabTitle = this.tSvc.selectTranslate('reports.core.rra.cmfr.report title') - .subscribe(value => - this.titleService.setTitle(this.tSvc.translate('reports.core.rra.cmfr.report title') + ' - ' + this.configSvc.behaviors.defaultTitle)); + this.tSvc.selectTranslate('core.rra.cmfr.report title', {}, {scope: 'reports'}) + .subscribe(title => + this.titleService.setTitle(title + ' - ' + this.configSvc.behaviors.defaultTitle)); this.maturitySvc.getCommentsMarked().subscribe( diff --git a/CSETWebNg/src/app/reports/securityplan/securityplan.component.ts b/CSETWebNg/src/app/reports/securityplan/securityplan.component.ts index 6f258674a4..0b9f1262ab 100644 --- a/CSETWebNg/src/app/reports/securityplan/securityplan.component.ts +++ b/CSETWebNg/src/app/reports/securityplan/securityplan.component.ts @@ -59,17 +59,16 @@ export class SecurityplanComponent implements OnInit { private assessmentSvc: AssessmentService, private sanitizer: DomSanitizer, public tSvc: TranslocoService, - private translocoService: TranslocoService ) { } /** * */ ngOnInit() { - - this.translationSub = this.translocoService.selectTranslate('reports.core.security plan.report title') - .subscribe(value => - this.titleService.setTitle(this.tSvc.translate('reports.core.security plan.report title') + ' - ' + this.configSvc.behaviors.defaultTitle)); + this.tSvc.selectTranslate('core.security plan.report title', {}, { scope: 'reports' }) + .subscribe(title => { + this.titleService.setTitle(title + ' - ' + this.configSvc.behaviors.defaultTitle) + }); this.reportSvc.getReport('securityplan').subscribe( (r: any) => { diff --git a/CSETWebNg/src/app/reports/site-detail/site-detail.component.ts b/CSETWebNg/src/app/reports/site-detail/site-detail.component.ts index 1017ff840f..c49f134e8c 100644 --- a/CSETWebNg/src/app/reports/site-detail/site-detail.component.ts +++ b/CSETWebNg/src/app/reports/site-detail/site-detail.component.ts @@ -40,7 +40,6 @@ import { TranslocoService } from '@jsverse/transloco'; styleUrls: ['../reports.scss'] }) export class SiteDetailComponent implements OnInit { - translationSub: any; response: any = null; chartStandardsSummary: Chart; responseResultsByCategory: any; @@ -81,9 +80,9 @@ export class SiteDetailComponent implements OnInit { ) { } ngOnInit() { - this.translationSub = this.tSvc.selectTranslate('reports.core.site detail report.report title') - .subscribe(value => - this.titleService.setTitle(this.tSvc.translate('reports.core.site detail report.report title') + ' - ' + this.configSvc.behaviors.defaultTitle)); + this.tSvc.selectTranslate('core.site detail report.report title', {}, {scope: 'reports'}) + .subscribe(title => + this.titleService.setTitle(title + ' - ' + this.configSvc.behaviors.defaultTitle)); this.reportSvc.getReport('detail').subscribe( (r: any) => { @@ -223,8 +222,4 @@ export class SiteDetailComponent implements OnInit { usesRAC() { return !!this.responseResultsByCategory?.dataSets.find(e => e.label === 'RAC'); } - - ngOnDestroy() { - this.translationSub.unsubscribe() - } } diff --git a/CSETWebNg/src/app/reports/site-summary/site-summary.component.ts b/CSETWebNg/src/app/reports/site-summary/site-summary.component.ts index 1ae72dabec..55ef1bea75 100644 --- a/CSETWebNg/src/app/reports/site-summary/site-summary.component.ts +++ b/CSETWebNg/src/app/reports/site-summary/site-summary.component.ts @@ -87,9 +87,9 @@ export class SiteSummaryComponent implements OnInit, AfterViewInit { ) { } ngOnInit() { - this.translationSub = this.tSvc.selectTranslate('reports.core.site summary.report title') - .subscribe(value => - this.titleService.setTitle(this.tSvc.translate('reports.core.site summary.report title') + ' - ' + this.configSvc.behaviors.defaultTitle)); + this.tSvc.selectTranslate('core.site summary.report title', {}, {scope: 'reports'}) + .subscribe(title => + this.titleService.setTitle(title + ' - ' + this.configSvc.behaviors.defaultTitle)); this.isCmmc = this.maturitySvc.maturityModelIsCMMC(); this.reportSvc.getReport('sitesummary').subscribe( diff --git a/CSETWebNg/src/app/services/ssg.service.ts b/CSETWebNg/src/app/services/ssg.service.ts index 0e2dfbc6db..a13d17e88c 100644 --- a/CSETWebNg/src/app/services/ssg.service.ts +++ b/CSETWebNg/src/app/services/ssg.service.ts @@ -54,6 +54,10 @@ export class SsgService { return 'chemical'; } + if ([13, 28].includes(s)) { + return 'it'; + } + return 'other'; } @@ -71,6 +75,11 @@ export class SsgService { if ([1, 19].includes(s)) { return 18; // chemical } + + + if ([13, 28].includes(s)) { + return 20; // I.T. + } return null; } diff --git a/CSETWebNg/src/assets/i18n/en.json b/CSETWebNg/src/assets/i18n/en.json index 2d307a7097..d9823a9687 100644 --- a/CSETWebNg/src/assets/i18n/en.json +++ b/CSETWebNg/src/assets/i18n/en.json @@ -308,6 +308,7 @@ "answer buttons": "Answer Buttons", "ssg": { "chemical": "Chemical Sector Goals", + "it": "Information Technology Goals", "other": "Other Sector Goals" } }, @@ -746,6 +747,8 @@ "recommended action": "Recommended Action", "free services": "Free Services and References", "implementation guidance": "Implementation Guidance", + "attestation": "Attestation", + "measurement": "Measurement", "component type": "Component Type", "override component answer": "Override Component Answer", "override": "Override", diff --git a/CSETWebNg/src/assets/i18n/es.json b/CSETWebNg/src/assets/i18n/es.json index efa3b93929..02120fc518 100644 --- a/CSETWebNg/src/assets/i18n/es.json +++ b/CSETWebNg/src/assets/i18n/es.json @@ -600,6 +600,8 @@ "recommended action": "Acción recomendada", "free services": "Servicios gratuitas y referencias", "implementation guidance": "Guía de implementación", + "attestation": "Atestación", + "measurement": "Medición", "component type": "Tipo de componente", "override component answer": "Sobreescribir Respuesta", "override": "Sobreescribir", diff --git a/CSETWebNg/src/assets/i18n/reports/en.json b/CSETWebNg/src/assets/i18n/reports/en.json index 754d57ff45..6827a8fa74 100644 --- a/CSETWebNg/src/assets/i18n/reports/en.json +++ b/CSETWebNg/src/assets/i18n/reports/en.json @@ -320,9 +320,11 @@ "printing instructions": "Click the hyperlinked name of the report. To print the report, select the Print option. To create a PDF, select PDF as the desired printer.", "site information": "Site Information", "executive summary": "Executive Summary", + "scorecard report": "Scorecard Report", "network diagram": "Network Diagram", "additional notes and comments": "Additional Notes and Comments", "principal assessor name": "Principal Assessor Name", + "comments and marked for review": "Comments and Marked for Review", "marked for review": "Marked for Review", "statement": "Statement", "domain": "Domain", diff --git a/CSETWebNg/src/assets/i18n/uk.json b/CSETWebNg/src/assets/i18n/uk.json index 9af8feae53..a7219023da 100644 --- a/CSETWebNg/src/assets/i18n/uk.json +++ b/CSETWebNg/src/assets/i18n/uk.json @@ -554,6 +554,8 @@ "recommended action": "Рекомендована дія", "free services": "Безкоштовні послуги та довідкові матеріали", "implementation guidance": "Посібники із впровадження", + "attestation": "Атестація", + "measurement": "Вимірювання", "component type": "Тип компоненту", "override component answer": "Перевизначення відповіді компоненту", "override": "Перевизначення", diff --git a/CSETWebNg/src/assets/navigation/workflow-omni.xml b/CSETWebNg/src/assets/navigation/workflow-omni.xml index 41c7ea3681..6d20b63829 100644 --- a/CSETWebNg/src/assets/navigation/workflow-omni.xml +++ b/CSETWebNg/src/assets/navigation/workflow-omni.xml @@ -157,7 +157,7 @@ - + diff --git a/CSETWebNg/src/assets/settings/config.json b/CSETWebNg/src/assets/settings/config.json index 48dc5e02f4..22781cbe1f 100644 --- a/CSETWebNg/src/assets/settings/config.json +++ b/CSETWebNg/src/assets/settings/config.json @@ -261,6 +261,38 @@ } ] }, + { + "moduleName": "SSG IT", + "modelId": "20", + "autoLoadSupplemental": true, + "showMaturityLevelBadge": false, + "questionIcons": { + "showDetails": false, + "showReviewed": false + }, + "answerOptions": [ + { + "code": "Y", + "buttonLabelKey": "Imp-CPG", + "buttonCss": "btn-yes" + }, + { + "code": "I", + "buttonLabelKey": "Prog-CPG", + "buttonCss": "btn-na" + }, + { + "code": "S", + "buttonLabelKey": "Scoped-CPG", + "buttonCss": "btn-alt" + }, + { + "code": "N", + "buttonLabelKey": "Not-CPG", + "buttonCss": "btn-no" + } + ] + }, { "moduleName": "CMMC2F", "modelId": "19",