diff --git a/src/app/indexed-db/non-energy-benefits-idb.service.ts b/src/app/indexed-db/non-energy-benefits-idb.service.ts index 01c9bcf3..3b088c6c 100644 --- a/src/app/indexed-db/non-energy-benefits-idb.service.ts +++ b/src/app/indexed-db/non-energy-benefits-idb.service.ts @@ -68,10 +68,14 @@ export class NonEnergyBenefitsIdbService { }); } - getAssessmentNonEnergyBenefits(assessmentId: string): Array { + getAssessmentNonEnergyBenefits(assessmentId: string, filterEnergyOppBenefits: boolean): Array { let nonEnergyBenefits: Array = this.nonEnergyBenefits.getValue(); return nonEnergyBenefits.filter(neb => { - return neb.assessmentId == assessmentId && neb.energyOpportunityId == undefined; + if (filterEnergyOppBenefits) { + return neb.assessmentId == assessmentId && neb.energyOpportunityId == undefined; + } else { + return neb.assessmentId == assessmentId; + } }); } } diff --git a/src/app/nebs-database/nebs-database-table/nebs-database-table.component.ts b/src/app/nebs-database/nebs-database-table/nebs-database-table.component.ts index b9c93f5c..601355be 100644 --- a/src/app/nebs-database/nebs-database-table/nebs-database-table.component.ts +++ b/src/app/nebs-database/nebs-database-table/nebs-database-table.component.ts @@ -108,7 +108,7 @@ export class NebsDatabaseTableComponent { if (modalData.energyOpportunityId) { selectedNebs = this.nonEnergyBenefitIdbService.getEnergyOpportunityNonEnergyBenefits(modalData.energyOpportunityId); } else { - selectedNebs = this.nonEnergyBenefitIdbService.getAssessmentNonEnergyBenefits(assessment.guid); + selectedNebs = this.nonEnergyBenefitIdbService.getAssessmentNonEnergyBenefits(assessment.guid, true); } let selectedOptionValues = selectedNebs.map(option => { return option.nebOptionValue; diff --git a/src/app/setup-wizard/data-collection/on-site-assessment/assessment-energy-opportunities-form/assessment-energy-opportunities-form.component.html b/src/app/setup-wizard/data-collection/on-site-assessment/assessment-energy-opportunities-form/assessment-energy-opportunities-form.component.html index 6bc0c7f8..fa0d6ce4 100644 --- a/src/app/setup-wizard/data-collection/on-site-assessment/assessment-energy-opportunities-form/assessment-energy-opportunities-form.component.html +++ b/src/app/setup-wizard/data-collection/on-site-assessment/assessment-energy-opportunities-form/assessment-energy-opportunities-form.component.html @@ -1,8 +1,18 @@ -
-

Energy Efficiency Opportunities

- -
+
+
+
+ Energy Efficiency Opportunities +
+ +
+
+ +

+ Use the " Add Opportunity" button to add Energy Efficiency Opportunities to this + assessment. +

+
-
diff --git a/src/app/setup-wizard/data-collection/on-site-assessment/assessment-nebs-form/assessment-nebs-form.component.html b/src/app/setup-wizard/data-collection/on-site-assessment/assessment-nebs-form/assessment-nebs-form.component.html index 0e4e78a3..1408056e 100644 --- a/src/app/setup-wizard/data-collection/on-site-assessment/assessment-nebs-form/assessment-nebs-form.component.html +++ b/src/app/setup-wizard/data-collection/on-site-assessment/assessment-nebs-form/assessment-nebs-form.component.html @@ -1,7 +1,7 @@
- Assessment Non-Energy Benefits + Non-Energy Benefits

Use the " Add NEB" dropdown to add Non-Energy Benefits - () that - are not associated with any specific energy efficiency opportunity to this assessment. + () to this assessment.

-
- - - \ No newline at end of file +
\ No newline at end of file diff --git a/src/app/setup-wizard/data-collection/on-site-assessment/on-site-assessment-results/on-site-assessment-results.component.html b/src/app/setup-wizard/data-collection/on-site-assessment/on-site-assessment-results/on-site-assessment-results.component.html index b364d511..ae7d929d 100644 --- a/src/app/setup-wizard/data-collection/on-site-assessment/on-site-assessment-results/on-site-assessment-results.component.html +++ b/src/app/setup-wizard/data-collection/on-site-assessment/on-site-assessment-results/on-site-assessment-results.component.html @@ -1,5 +1,8 @@
+ +
+
A printable version of this report can be found in the "Data Evaluation" section of the wizard. diff --git a/src/app/setup-wizard/data-collection/on-site-assessment/on-site-assessment-results/on-site-assessment-results.component.spec.ts b/src/app/setup-wizard/data-collection/on-site-assessment/on-site-assessment-results/on-site-assessment-results.component.spec.ts index cad4f320..c75be35f 100644 --- a/src/app/setup-wizard/data-collection/on-site-assessment/on-site-assessment-results/on-site-assessment-results.component.spec.ts +++ b/src/app/setup-wizard/data-collection/on-site-assessment/on-site-assessment-results/on-site-assessment-results.component.spec.ts @@ -2,80 +2,23 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { OnSiteAssessmentResultsComponent } from './on-site-assessment-results.component'; import { FontAwesomeModule } from '@fortawesome/angular-fontawesome'; -import { OnSiteVisitIdbService } from 'src/app/indexed-db/on-site-visit-idb.service'; -import { BehaviorSubject } from 'rxjs'; -import { IdbOnSiteVisit, getNewIdbOnSiteVisit } from 'src/app/models/onSiteVisit'; -import { AssessmentIdbService } from 'src/app/indexed-db/assessment-idb.service'; -import { IdbAssessment, getNewIdbAssessment } from 'src/app/models/assessment'; import { RouterTestingModule } from '@angular/router/testing'; -import { FacilityIdbService } from 'src/app/indexed-db/facility-idb.service'; -import { CompanyIdbService } from 'src/app/indexed-db/company-idb.service'; -import { ContactIdbService } from 'src/app/indexed-db/contact-idb.service'; -import { EnergyOpportunityIdbService } from 'src/app/indexed-db/energy-opportunity-idb.service'; -import { NonEnergyBenefitsIdbService } from 'src/app/indexed-db/non-energy-benefits-idb.service'; -import { KeyPerformanceIndicatorsIdbService } from 'src/app/indexed-db/key-performance-indicators-idb.service'; -import { IdbCompany, getNewIdbCompany } from 'src/app/models/company'; -import { IdbFacility, getNewIdbFacility } from 'src/app/models/facility'; -import { IdbNonEnergyBenefit } from 'src/app/models/nonEnergyBenefit'; -import { IdbEnergyOpportunity } from 'src/app/models/energyOpportunity'; -import { IdbKeyPerformanceIndicator } from 'src/app/models/keyPerformanceIndicator'; import { TableEntriesModule } from 'src/app/shared/table-entries/table-entries.module'; import { HelperPipesModule } from 'src/app/shared/helper-pipes/_helper-pipes.module'; import { ReportsModule } from 'src/app/shared/reports/reports.module'; -import { KeyPerformanceMetricImpactsIdbService } from 'src/app/indexed-db/key-performance-metric-impacts-idb.service'; -import { IdbKeyPerformanceMetricImpact } from 'src/app/models/keyPerformanceMetricImpact'; -import { getDefaultUnitSettings } from 'src/app/models/unitSettings'; +import { SharedAssessmentFormsModule } from 'src/app/shared/shared-assessment-forms/shared-assessment-forms.module'; +import { stubServiceProviders } from 'src/app/spec-helpers/spec-test-service-stub'; describe('OnSiteAssessmentResultsComponent', () => { let component: OnSiteAssessmentResultsComponent; let fixture: ComponentFixture; - let onSiteVisitIdbService: Partial = { - selectedVisit: new BehaviorSubject(getNewIdbOnSiteVisit('', '', '')) - }; - - let assessmentIdbService: Partial = { - selectedAssessment: new BehaviorSubject(getNewIdbAssessment('', '', '', getDefaultUnitSettings())) - } - - let companyIdbService: Partial = { - selectedCompany: new BehaviorSubject(getNewIdbCompany('')), - getByGUID: () => { return getNewIdbCompany('') } - }; - let facilityIdbService: Partial = { - selectedFacility: new BehaviorSubject(getNewIdbFacility('', '')), - getByGUID: () => { return getNewIdbFacility('', '') } - }; - let contactIdbService: Partial = {}; - let energyOpportunityIdbService: Partial = { - energyOpportunities: new BehaviorSubject>([]) - }; - let nonEnergyBenefitsIdbService: Partial = { - nonEnergyBenefits: new BehaviorSubject>([]) - }; - let keyPerformanceIndicatorService: Partial = { - keyPerformanceIndicators: new BehaviorSubject>([]), - getCompanyKeyPerformanceMetrics: () => { return [] } - }; - let keyPerformanceMetricImpactsIdbService: Partial = { - keyPerformanceMetricImpacts: new BehaviorSubject>([]) - }; beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [FontAwesomeModule, RouterTestingModule, TableEntriesModule, HelperPipesModule, ReportsModule], + imports: [FontAwesomeModule, RouterTestingModule, TableEntriesModule, HelperPipesModule, ReportsModule, SharedAssessmentFormsModule], declarations: [OnSiteAssessmentResultsComponent], - providers: [ - { provide: OnSiteVisitIdbService, useValue: onSiteVisitIdbService }, - { provide: AssessmentIdbService, useValue: assessmentIdbService }, - { provide: FacilityIdbService, useValue: facilityIdbService }, - { provide: ContactIdbService, useValue: contactIdbService }, - { provide: EnergyOpportunityIdbService, useValue: energyOpportunityIdbService }, - { provide: NonEnergyBenefitsIdbService, useValue: nonEnergyBenefitsIdbService }, - { provide: KeyPerformanceIndicatorsIdbService, useValue: keyPerformanceIndicatorService }, - { provide: CompanyIdbService, useValue: companyIdbService }, - { provide: KeyPerformanceMetricImpactsIdbService, useValue: keyPerformanceMetricImpactsIdbService }, - ] + providers: stubServiceProviders }) .compileComponents(); diff --git a/src/app/setup-wizard/data-collection/on-site-assessment/on-site-assessment-results/on-site-assessment-results.component.ts b/src/app/setup-wizard/data-collection/on-site-assessment/on-site-assessment-results/on-site-assessment-results.component.ts index e3bc361e..3d6f06b7 100644 --- a/src/app/setup-wizard/data-collection/on-site-assessment/on-site-assessment-results/on-site-assessment-results.component.ts +++ b/src/app/setup-wizard/data-collection/on-site-assessment/on-site-assessment-results/on-site-assessment-results.component.ts @@ -23,6 +23,7 @@ export class OnSiteAssessmentResultsComponent { assessment: IdbAssessment; assessmentReport: AssessmentReport; + nonEnergyBenefits: Array; constructor(private assessmentIdbService: AssessmentIdbService, private energyOpportunityIdbService: EnergyOpportunityIdbService, private nonEnergyBenefitIdbService: NonEnergyBenefitsIdbService, @@ -36,6 +37,7 @@ export class OnSiteAssessmentResultsComponent { ngOnInit() { this.assessmentSub = this.assessmentIdbService.selectedAssessment.subscribe(_assessment => { this.assessment = _assessment; + this.nonEnergyBenefits = this.nonEnergyBenefitIdbService.getAssessmentNonEnergyBenefits(this.assessment.guid, false); this.setAssessmentReport(); }); } @@ -44,7 +46,7 @@ export class OnSiteAssessmentResultsComponent { this.assessmentSub.unsubscribe(); } - setAssessmentReport(){ + setAssessmentReport() { let allEnergyOpportunities: Array = this.energyOpportunityIdbService.energyOpportunities.getValue(); let allNonEnergyBenefits: Array = this.nonEnergyBenefitIdbService.nonEnergyBenefits.getValue(); let companyPerformanceMetrics: Array = this.keyPerformanceIndicatorIdbService.getCompanyKeyPerformanceMetrics(this.assessment.companyId); diff --git a/src/app/shared/helper-pipes/_helper-pipes.module.ts b/src/app/shared/helper-pipes/_helper-pipes.module.ts index ce4ae4f3..d044f67b 100644 --- a/src/app/shared/helper-pipes/_helper-pipes.module.ts +++ b/src/app/shared/helper-pipes/_helper-pipes.module.ts @@ -12,7 +12,7 @@ import { EquipmentTypeIconPipe } from './equipment-type-icon.pipe'; import { IncludesContactPipe } from './includes-contact.pipe'; import { AssessmentNameDisplayPipe } from './assessment-name-display.pipe'; import { ProcessEquipmentDisplayPipe } from './process-equipment-display.pipe'; -import { NebDisplayPipe } from './neb-display.pipe'; +import { NebItemPipe } from './neb-item.pipe'; import { OnSiteVisitListPipe } from './on-site-visit-list.pipe'; import { AssessmentListOnSitePipe } from './assessment-list-on-site.pipe'; import { NebListPipe } from './neb-list.pipe'; @@ -55,7 +55,7 @@ import { AssessmentItemPipe } from './assessment-item.pipe'; IncludesContactPipe, AssessmentNameDisplayPipe, ProcessEquipmentDisplayPipe, - NebDisplayPipe, + NebItemPipe, OnSiteVisitListPipe, AssessmentListOnSitePipe, NebListPipe, @@ -99,7 +99,7 @@ import { AssessmentItemPipe } from './assessment-item.pipe'; IncludesContactPipe, AssessmentNameDisplayPipe, ProcessEquipmentDisplayPipe, - NebDisplayPipe, + NebItemPipe, OnSiteVisitListPipe, AssessmentListOnSitePipe, NebListPipe, diff --git a/src/app/shared/helper-pipes/neb-display.pipe.spec.ts b/src/app/shared/helper-pipes/neb-item.pipe.spec.ts similarity index 54% rename from src/app/shared/helper-pipes/neb-display.pipe.spec.ts rename to src/app/shared/helper-pipes/neb-item.pipe.spec.ts index 21feaabe..4690613a 100644 --- a/src/app/shared/helper-pipes/neb-display.pipe.spec.ts +++ b/src/app/shared/helper-pipes/neb-item.pipe.spec.ts @@ -1,8 +1,8 @@ -import { NebDisplayPipe } from './neb-display.pipe'; +import { NebItemPipe } from './neb-item.pipe'; describe('NebDisplayPipe', () => { it('create an instance', () => { - const pipe = new NebDisplayPipe(); + const pipe = new NebItemPipe(); expect(pipe).toBeTruthy(); }); }); diff --git a/src/app/shared/helper-pipes/neb-display.pipe.ts b/src/app/shared/helper-pipes/neb-item.pipe.ts similarity index 74% rename from src/app/shared/helper-pipes/neb-display.pipe.ts rename to src/app/shared/helper-pipes/neb-item.pipe.ts index 41fe9c41..66ff8c50 100644 --- a/src/app/shared/helper-pipes/neb-display.pipe.ts +++ b/src/app/shared/helper-pipes/neb-item.pipe.ts @@ -2,17 +2,17 @@ import { Pipe, PipeTransform } from '@angular/core'; import { IdbNonEnergyBenefit } from 'src/app/models/nonEnergyBenefit'; @Pipe({ - name: 'nebDisplay', + name: 'nebItem', pure: false }) -export class NebDisplayPipe implements PipeTransform { +export class NebItemPipe implements PipeTransform { - transform(guid: string, nonEnergyBenefits: Array): string { + transform(guid: string, nonEnergyBenefits: Array): IdbNonEnergyBenefit { let neb: IdbNonEnergyBenefit = nonEnergyBenefits.find(neb =>{ return neb.guid == guid }); if(neb){ - return neb.name; + return neb; } return null; } diff --git a/src/app/shared/label-with-tooltip/LabelTooltips.ts b/src/app/shared/label-with-tooltip/LabelTooltips.ts index 4adcb16b..0624abb3 100644 --- a/src/app/shared/label-with-tooltip/LabelTooltips.ts +++ b/src/app/shared/label-with-tooltip/LabelTooltips.ts @@ -10,5 +10,8 @@ export const LabelTooltips = { }, "calculationMethod": { "tooltip": "The method used to calculate impacts on the metric." + }, + "associatedEEM": { + "tooltip": "Is this NEB realized because of the implementation of a specific energy efficiency opportunity?" } } \ No newline at end of file diff --git a/src/app/shared/reports/assessment-report/assessment-savings-table/assessment-savings-table.component.html b/src/app/shared/reports/assessment-report/assessment-savings-table/assessment-savings-table.component.html index 60a0b01f..0a441c6b 100644 --- a/src/app/shared/reports/assessment-report/assessment-savings-table/assessment-savings-table.component.html +++ b/src/app/shared/reports/assessment-report/assessment-savings-table/assessment-savings-table.component.html @@ -1,4 +1,4 @@ - +
diff --git a/src/app/shared/shared-assessment-forms/energy-opportunity-nebs-table/energy-opportunity-nebs-table.component.html b/src/app/shared/shared-assessment-forms/energy-opportunity-nebs-table/energy-opportunity-nebs-table.component.html index 5c8f6259..3f5d28d8 100644 --- a/src/app/shared/shared-assessment-forms/energy-opportunity-nebs-table/energy-opportunity-nebs-table.component.html +++ b/src/app/shared/shared-assessment-forms/energy-opportunity-nebs-table/energy-opportunity-nebs-table.component.html @@ -1,10 +1,3 @@ -
Energy Opportunity Non-Energy Benefits
-

- The below are Non-Energy Benefits () that - are associated with a specific energy efficiency opportunity within this - assessment. - To modify these NEBs navigate to the "Energy Efficiency Opportunities" tab. -

@@ -30,7 +23,9 @@
Energy Opportunity Non-Energy Benefits
- {{nonEnergyBenefit.name}} + + {{nonEnergyBenefit.name}} + @let kpmImpacts = nonEnergyBenefit.guid | associatedPerformanceMetricImpacts: @@ -58,9 +53,14 @@
Energy Opportunity Non-Energy Benefits
- - {{nonEnergyBenefit.energyOpportunityId | energyOpportunityDisplay: energyOpportunities}} - + + + {{nonEnergyBenefit.energyOpportunityId | energyOpportunityDisplay: energyOpportunities}} + + + + — + { + return neb.energyOpportunityId; + }, 'desc') this.keyPerformanceMetricImpactsSub = this.keyPerformanceMetricImpactsIdbService.keyPerformanceMetricImpacts.subscribe(kpmImpacts => { this.keyPerformanceMetricImpacts = kpmImpacts; }); @@ -86,4 +90,14 @@ export class EnergyOpportunityNebsTableComponent { this.router.navigateByUrl('setup-wizard/data-collection/' + onSiteVisit.guid + '/assessment/' + nonEnergyBenefit.assessmentId + '/energy-opportunities') } } + + goToNeb(nonEnergyBenefit: IdbNonEnergyBenefit) { + if (this.router.url.includes('portfolio')) { + this.router.navigateByUrl('/portfolio/assessment/' + nonEnergyBenefit.assessmentId + '/nebs/' + nonEnergyBenefit.guid) + } else if (this.router.url.includes('setup-wizard')) { + let onSiteVisit: IdbOnSiteVisit = this.onSiteVisitIdbService.getByAssessmentGUID(nonEnergyBenefit.assessmentId); + this.localStorageDataService.setNebAccordionGuid(nonEnergyBenefit.guid); + this.router.navigateByUrl('setup-wizard/data-collection/' + onSiteVisit.guid + '/assessment/' + nonEnergyBenefit.assessmentId + '/nebs') + } + } } diff --git a/src/app/shared/shared-assessment-forms/energy-opportunity-setup-form/energy-opportunity-setup-form.component.html b/src/app/shared/shared-assessment-forms/energy-opportunity-setup-form/energy-opportunity-setup-form.component.html index 9b51be19..70800fa6 100644 --- a/src/app/shared/shared-assessment-forms/energy-opportunity-setup-form/energy-opportunity-setup-form.component.html +++ b/src/app/shared/shared-assessment-forms/energy-opportunity-setup-form/energy-opportunity-setup-form.component.html @@ -111,40 +111,6 @@
id="opportunityNotes"> - - -
-
-
- Non-Energy Benefits -
- -
-
-

- Use the " Add NEB" dropdown to add Non-Energy Benefits - () that are directly - associated with this energy efficiency opportunity. -

- -
diff --git a/src/app/shared/shared-assessment-forms/neb-forms-accordion/neb-forms-accordion.component.html b/src/app/shared/shared-assessment-forms/neb-forms-accordion/neb-forms-accordion.component.html index ca5d62c1..dfec3679 100644 --- a/src/app/shared/shared-assessment-forms/neb-forms-accordion/neb-forms-accordion.component.html +++ b/src/app/shared/shared-assessment-forms/neb-forms-accordion/neb-forms-accordion.component.html @@ -1,15 +1,25 @@ -
+

+ @let neb = (nebGuid |nebItem:nonEnergyBenefits);

-
+
diff --git a/src/app/shared/shared-assessment-forms/neb-forms-accordion/neb-forms-accordion.component.spec.ts b/src/app/shared/shared-assessment-forms/neb-forms-accordion/neb-forms-accordion.component.spec.ts index fa6e22ee..6f75a9f3 100644 --- a/src/app/shared/shared-assessment-forms/neb-forms-accordion/neb-forms-accordion.component.spec.ts +++ b/src/app/shared/shared-assessment-forms/neb-forms-accordion/neb-forms-accordion.component.spec.ts @@ -1,35 +1,18 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { NebFormsAccordionComponent } from './neb-forms-accordion.component'; -import { NonEnergyBenefitsIdbService } from 'src/app/indexed-db/non-energy-benefits-idb.service'; -import { IdbNonEnergyBenefit } from 'src/app/models/nonEnergyBenefit'; -import { BehaviorSubject } from 'rxjs'; import { FontAwesomeModule } from '@fortawesome/angular-fontawesome'; -import { LocalStorageDataService } from 'src/app/shared/shared-services/local-storage-data.service'; -import { ChangeDetectorRef } from '@angular/core'; -import { BootstrapService } from 'src/app/shared/shared-services/bootstrap.service'; +import { stubServiceProviders } from 'src/app/spec-helpers/spec-test-service-stub'; describe('NebFormsAccordionComponent', () => { let component: NebFormsAccordionComponent; let fixture: ComponentFixture; - let nonEnergyBenefitsIdbService: Partial = { - nonEnergyBenefits: new BehaviorSubject>([]) - }; - - let localStorageDataService: Partial = {}; - let cd: Partial = {}; - let bootstrapService: Partial = {}; beforeEach(async () => { await TestBed.configureTestingModule({ imports: [FontAwesomeModule], declarations: [NebFormsAccordionComponent], - providers: [ - { provide: NonEnergyBenefitsIdbService, useValue: nonEnergyBenefitsIdbService }, - { provide: LocalStorageDataService, useValue: localStorageDataService }, - { provide: ChangeDetectorRef, useValue: cd }, - { provide: BootstrapService, useValue: bootstrapService } - ] + providers: stubServiceProviders }) .compileComponents(); diff --git a/src/app/shared/shared-assessment-forms/neb-forms-accordion/neb-forms-accordion.component.ts b/src/app/shared/shared-assessment-forms/neb-forms-accordion/neb-forms-accordion.component.ts index d0d0b1e2..6ad93b51 100644 --- a/src/app/shared/shared-assessment-forms/neb-forms-accordion/neb-forms-accordion.component.ts +++ b/src/app/shared/shared-assessment-forms/neb-forms-accordion/neb-forms-accordion.component.ts @@ -8,6 +8,7 @@ import * as _ from 'lodash'; import { IconDefinition, faWeightHanging } from '@fortawesome/free-solid-svg-icons'; import { BootstrapService } from 'src/app/shared/shared-services/bootstrap.service'; import { LocalStorageDataService } from 'src/app/shared/shared-services/local-storage-data.service'; +import { EnergyOpportunityIdbService } from 'src/app/indexed-db/energy-opportunity-idb.service'; @Component({ selector: 'app-neb-forms-accordion', @@ -15,9 +16,7 @@ import { LocalStorageDataService } from 'src/app/shared/shared-services/local-st styleUrl: './neb-forms-accordion.component.css' }) export class NebFormsAccordionComponent { - @Input() - energyOpportunity: IdbEnergyOpportunity; - @Input() + @Input({required: true}) assessment: IdbAssessment; faWeightHanging: IconDefinition = faWeightHanging; @@ -28,10 +27,13 @@ export class NebFormsAccordionComponent { accordionGuid: string; isAddNew: boolean = false; isOnInit: boolean = true; + energyOpportunities: Array; + energyOpportunitiesSub: Subscription constructor(private nonEnergyBenefitsIdbService: NonEnergyBenefitsIdbService, private bootstrapService: BootstrapService, private cd: ChangeDetectorRef, - private localStorageDataService: LocalStorageDataService + private localStorageDataService: LocalStorageDataService, + private energyOpportuinitesIdbService: EnergyOpportunityIdbService ) { } @@ -39,17 +41,17 @@ export class NebFormsAccordionComponent { ngOnInit() { this.nonEnergyBenefitsSub = this.nonEnergyBenefitsIdbService.nonEnergyBenefits.subscribe(_nonEnergyBenefits => { this.nonEnergyBenefits = _nonEnergyBenefits; - if (this.energyOpportunity) { - this.setEnergyOpportunityNebGuids(); - } else if (this.assessment) { - this.setAssessmentNebGuids(); - } + this.setNebGuids(); }); this.isOnInit = false; + this.energyOpportunitiesSub = this.energyOpportuinitesIdbService.energyOpportunities.subscribe(opps => { + this.energyOpportunities = opps; + }) } ngOnDestroy() { this.nonEnergyBenefitsSub.unsubscribe(); + this.energyOpportunitiesSub.unsubscribe(); } ngAfterViewInit() { @@ -62,46 +64,17 @@ export class NebFormsAccordionComponent { } ngOnChanges(changes: SimpleChanges) { - if (changes['energyOpportunity'] && !changes['energyOpportunity'].firstChange) { - this.setEnergyOpportunityNebGuids(); - } else if (changes['assessment'] && !changes['assessment'].firstChange) { - this.setAssessmentNebGuids(); - } - } - - - setEnergyOpportunityNebGuids() { - // only want to update neb list if changes made - // otherwise forms get re-init when the list updates - if (this.energyOpportunity && this.nonEnergyBenefits) { - let energyOpportunityNebs: Array = this.nonEnergyBenefits.filter(neb => { - return neb.energyOpportunityId == this.energyOpportunity.guid - }); - let tmpOpportunityNebs: Array = energyOpportunityNebs.map(neb => { - return neb.guid - }); - if (tmpOpportunityNebs.length != this.nebGuids.length) { - if (this.isOnInit == false && tmpOpportunityNebs.length > this.nebGuids.length) { - this.isAddNew = true; - } - this.nebGuids = tmpOpportunityNebs; - } else { - let xor: Array = _.xor(this.nebGuids, tmpOpportunityNebs) - if (xor.length != 0) { - this.nebGuids = tmpOpportunityNebs; - } - } - } else { - this.nebGuids = []; + if (changes['assessment'] && !changes['assessment'].firstChange) { + this.setNebGuids(); } } - setAssessmentNebGuids() { + setNebGuids() { // only want to update neb list if changes made // otherwise forms get re-init when the list updates if (this.assessment && this.nonEnergyBenefits) { let assessmentNebs: Array = this.nonEnergyBenefits.filter(neb => { - return neb.assessmentId == this.assessment.guid && neb.energyOpportunityId == undefined + return neb.assessmentId == this.assessment.guid }); let tmpAssessmentNebs: Array = assessmentNebs.map(neb => { return neb.guid diff --git a/src/app/shared/shared-assessment-forms/neb-forms-accordion/neb-setup-form/neb-setup-form.component.html b/src/app/shared/shared-assessment-forms/neb-forms-accordion/neb-setup-form/neb-setup-form.component.html index 8c550b1a..03c92def 100644 --- a/src/app/shared/shared-assessment-forms/neb-forms-accordion/neb-setup-form/neb-setup-form.component.html +++ b/src/app/shared/shared-assessment-forms/neb-forms-accordion/neb-setup-form/neb-setup-form.component.html @@ -30,6 +30,36 @@
+ +
+ + +
+ +
+
+
+
+ +
+ +
+
+
+
@@ -76,8 +106,10 @@

- Fill out the impacts on company key performance metrics () that - can be associated with this Non-energy Benefit. Click the "Search Key Performance Metrics" button and a modal will + Fill out the impacts on company key performance metrics () + that + can be associated with this Non-energy Benefit. Click the "Search Key Performance Metrics" button and a modal + will appear to find and add key performance metrics that are typically associated with this NEB.

diff --git a/src/app/shared/shared-assessment-forms/neb-forms-accordion/neb-setup-form/neb-setup-form.component.spec.ts b/src/app/shared/shared-assessment-forms/neb-forms-accordion/neb-setup-form/neb-setup-form.component.spec.ts index 786c2bb9..04f23df1 100644 --- a/src/app/shared/shared-assessment-forms/neb-forms-accordion/neb-setup-form/neb-setup-form.component.spec.ts +++ b/src/app/shared/shared-assessment-forms/neb-forms-accordion/neb-setup-form/neb-setup-form.component.spec.ts @@ -8,6 +8,7 @@ import { HelperPipesModule } from 'src/app/shared/helper-pipes/_helper-pipes.mod import { PerformanceMetricsModalComponent } from './performance-metrics-modal/performance-metrics-modal.component'; import { PerformanceMetricImpactFormComponent } from './performance-metric-impact-form/performance-metric-impact-form.component'; import { stubServiceProviders } from 'src/app/spec-helpers/spec-test-service-stub'; +import { LabelWithTooltipModule } from 'src/app/shared/label-with-tooltip/label-with-tooltip.module'; describe('NebSetupFormComponent', () => { let component: NebSetupFormComponent; @@ -15,7 +16,7 @@ describe('NebSetupFormComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [FontAwesomeModule, FormsModule, HelperPipesModule], + imports: [FontAwesomeModule, FormsModule, HelperPipesModule, LabelWithTooltipModule], declarations: [NebSetupFormComponent, PerformanceMetricsModalComponent, PerformanceMetricImpactFormComponent ], providers: stubServiceProviders }) diff --git a/src/app/shared/shared-assessment-forms/neb-forms-accordion/neb-setup-form/neb-setup-form.component.ts b/src/app/shared/shared-assessment-forms/neb-forms-accordion/neb-setup-form/neb-setup-form.component.ts index 4b583f60..3ea4658c 100644 --- a/src/app/shared/shared-assessment-forms/neb-forms-accordion/neb-setup-form/neb-setup-form.component.ts +++ b/src/app/shared/shared-assessment-forms/neb-forms-accordion/neb-setup-form/neb-setup-form.component.ts @@ -1,6 +1,6 @@ import { Component, EventEmitter, Input, Output } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; -import { IconDefinition, faChevronDown, faChevronRight, faContactBook, faPlus, faScaleUnbalancedFlip, faSearchPlus, faTrash, faUser, faWeightHanging } from '@fortawesome/free-solid-svg-icons'; +import { IconDefinition, faChevronDown, faChevronRight, faContactBook, faPlus, faScaleUnbalancedFlip, faSearchPlus, faTrash, faUpRightFromSquare, faUser, faWeightHanging } from '@fortawesome/free-solid-svg-icons'; import { Subscription } from 'rxjs'; import { ContactIdbService } from 'src/app/indexed-db/contact-idb.service'; import { DbChangesService } from 'src/app/indexed-db/db-changes.service'; @@ -14,6 +14,11 @@ import { KeyPerformanceMetric } from 'src/app/shared/constants/keyPerformanceMet import * as _ from 'lodash'; import { SharedDataService } from 'src/app/shared/shared-services/shared-data.service'; import { ToastNotificationsService } from 'src/app/core-components/toast-notifications/toast-notifications.service'; +import { EnergyOpportunityIdbService } from 'src/app/indexed-db/energy-opportunity-idb.service'; +import { IdbEnergyOpportunity } from 'src/app/models/energyOpportunity'; +import { LocalStorageDataService } from 'src/app/shared/shared-services/local-storage-data.service'; +import { IdbOnSiteVisit } from 'src/app/models/onSiteVisit'; +import { OnSiteVisitIdbService } from 'src/app/indexed-db/on-site-visit-idb.service'; @Component({ selector: 'app-neb-setup-form', templateUrl: './neb-setup-form.component.html', @@ -37,6 +42,7 @@ export class NebSetupFormComponent { faChevronRight: IconDefinition = faChevronRight; faChevronDown: IconDefinition = faChevronDown; faPlus: IconDefinition = faPlus; + faUpRightFromSquare: IconDefinition = faUpRightFromSquare; displayDeleteModal: boolean = false; keyPerformanceIndicators: Array; @@ -53,6 +59,9 @@ export class NebSetupFormComponent { performanceMetricImpactGuids: Array = []; keyPerformanceMetricImpacts: Array kpmImpactsSub: Subscription; + + energyOpportunities: Array; + energyOpportunitiesSub: Subscription; constructor( private nonEnergyBenefitsIdbService: NonEnergyBenefitsIdbService, private dbChangesService: DbChangesService, @@ -61,7 +70,10 @@ export class NebSetupFormComponent { private keyPerformanceMetricImpactsIdbService: KeyPerformanceMetricImpactsIdbService, private activatedRoute: ActivatedRoute, private router: Router, - private toastNotificationService: ToastNotificationsService) { + private toastNotificationService: ToastNotificationsService, + private energyOpportunityIdbService: EnergyOpportunityIdbService, + private localStorageDataService: LocalStorageDataService, + private onSiteVisitIdbService: OnSiteVisitIdbService) { } ngOnInit() { @@ -83,11 +95,16 @@ export class NebSetupFormComponent { this.keyPerformanceMetricImpacts = _keyPerformanceMetricImpacts; this.setMetricGuids(); }); + + this.energyOpportunitiesSub = this.energyOpportunityIdbService.energyOpportunities.subscribe(opps => { + this.energyOpportunities = opps.filter(opp => { return opp.assessmentId == this.nonEnergyBenefit.assessmentId }); + }); } ngOnDestroy() { this.contactsSub.unsubscribe(); this.kpmImpactsSub.unsubscribe(); + this.energyOpportunitiesSub.unsubscribe(); } ngAfterViewInit() { @@ -147,8 +164,6 @@ export class NebSetupFormComponent { } else { this.performanceMetricImpactGuids = []; } - - } openContactModal(viewContact: IdbContact) { @@ -166,10 +181,19 @@ export class NebSetupFormComponent { closeAddMetricModal() { this.displayAddPerformanceMetricModal = false; this.performanceMetricToAdd = undefined; - } showUntrackedMetricsModal() { this.displayAddPerformanceMetricModal = true; } + + goToEnergyOpportunity(energyOpportunityId: string) { + if (this.router.url.includes('portfolio')) { + this.router.navigateByUrl('/portfolio/assessment/' + this.nonEnergyBenefit.assessmentId + '/energy-opportunities/' + energyOpportunityId) + } else if (this.router.url.includes('setup-wizard')) { + let onSiteVisit: IdbOnSiteVisit = this.onSiteVisitIdbService.getByAssessmentGUID(this.nonEnergyBenefit.assessmentId); + this.localStorageDataService.setEnergyOppAccordionGuid(energyOpportunityId); + this.router.navigateByUrl('setup-wizard/data-collection/' + onSiteVisit.guid + '/assessment/' + this.nonEnergyBenefit.assessmentId + '/energy-opportunities') + } + } } diff --git a/src/app/shared/shared-assessment-forms/neb-forms-accordion/neb-setup-form/performance-metric-impact-form/performance-metric-impact-form.component.html b/src/app/shared/shared-assessment-forms/neb-forms-accordion/neb-setup-form/performance-metric-impact-form/performance-metric-impact-form.component.html index 1bba920b..d7bf74e9 100644 --- a/src/app/shared/shared-assessment-forms/neb-forms-accordion/neb-setup-form/performance-metric-impact-form/performance-metric-impact-form.component.html +++ b/src/app/shared/shared-assessment-forms/neb-forms-accordion/neb-setup-form/performance-metric-impact-form/performance-metric-impact-form.component.html @@ -125,7 +125,7 @@
- {{kpmImpact.nebId | nebDisplay: nonEnergyBenefits}} + {{(kpmImpact.nebId | nebItem: nonEnergyBenefits).name}} — diff --git a/src/app/spec-helpers/spec-test-service-stub.ts b/src/app/spec-helpers/spec-test-service-stub.ts index cce710a5..d8654cd1 100644 --- a/src/app/spec-helpers/spec-test-service-stub.ts +++ b/src/app/spec-helpers/spec-test-service-stub.ts @@ -88,7 +88,8 @@ let stubNeb: IdbNonEnergyBenefit = getNewIdbNonEnergyBenefit('123', '123', '123' stubNeb.guid = '123'; let nonEnergyBenefitsIdbService: Partial = { nonEnergyBenefits: new BehaviorSubject>([stubNeb]), - getEnergyOpportunityNonEnergyBenefits: () => { return [stubNeb] } + getEnergyOpportunityNonEnergyBenefits: () => { return [stubNeb] }, + getByGuid: () => { return stubNeb } }; let stubOnSiteVisit: IdbOnSiteVisit = getNewIdbOnSiteVisit('123', '123', '123'); diff --git a/src/app/user-portfolio/assessment-dashboard/assessment-nebs/assessment-nebs-home/assessment-nebs-home.component.html b/src/app/user-portfolio/assessment-dashboard/assessment-nebs/assessment-nebs-home/assessment-nebs-home.component.html index 2698afe5..558f0118 100644 --- a/src/app/user-portfolio/assessment-dashboard/assessment-nebs/assessment-nebs-home/assessment-nebs-home.component.html +++ b/src/app/user-portfolio/assessment-dashboard/assessment-nebs/assessment-nebs-home/assessment-nebs-home.component.html @@ -1,6 +1,6 @@
-
Assessment Non-Energy Benefits
+
Non-Energy Benefits

- - -

- Use the " Add NEB" dropdown to add Non-Energy Benefits - () that - are not associated with any specific energy efficiency opportunity to this - assessment. -

- - - - - - - - - - - - - - - - - -
- Non-Energy Benefit - - Key Performance
Metric Impacts -
- Stakeholders - - Total Savings
- - ($/yr) - -
- - {{nonEnergyBenefit.name}} - - @let kpmImpacts = nonEnergyBenefit.guid | associatedPerformanceMetricImpacts: - keyPerformanceMetricImpacts; - - - -
-
-
- - — - -
- @let associatedContacts = nonEnergyBenefit.guid | associatedContacts:'nonEnergyBenefit': - contacts; - - - {{contact | contactNameDisplay}}
-
-
- - — - -
- -
-
- -
- No non energy benefits found for this assessment. Use the " - Add NEB" dropdown to either add a custom NEB or search our NEBs database for new NEBs to be added to this - assessment. -
-
- - -
- -
- - - - + + +
No non energy benefits found for this assessment. Use the " diff --git a/src/app/user-portfolio/assessment-dashboard/assessment-nebs/assessment-nebs-home/assessment-nebs-home.component.ts b/src/app/user-portfolio/assessment-dashboard/assessment-nebs/assessment-nebs-home/assessment-nebs-home.component.ts index df205e7a..080601e4 100644 --- a/src/app/user-portfolio/assessment-dashboard/assessment-nebs/assessment-nebs-home/assessment-nebs-home.component.ts +++ b/src/app/user-portfolio/assessment-dashboard/assessment-nebs/assessment-nebs-home/assessment-nebs-home.component.ts @@ -1,8 +1,6 @@ import { Component } from '@angular/core'; -import { Router } from '@angular/router'; import { faPlus, faSearchPlus, faWeightHanging, IconDefinition } from '@fortawesome/free-solid-svg-icons'; import { firstValueFrom, Subscription } from 'rxjs'; -import { ToastNotificationsService } from 'src/app/core-components/toast-notifications/toast-notifications.service'; import { AssessmentIdbService } from 'src/app/indexed-db/assessment-idb.service'; import { ContactIdbService } from 'src/app/indexed-db/contact-idb.service'; import { EnergyOpportunityIdbService } from 'src/app/indexed-db/energy-opportunity-idb.service'; @@ -31,8 +29,7 @@ export class AssessmentNebsHomeComponent { assessment: IdbAssessment; assessmentSub: Subscription; - energyOppNonEnergyBenefits: Array; - assessmentNonEnergyBenefits: Array; + nonEnergyBenefits: Array; keyPerformanceMetricImpacts: Array; keyPerformanceMetricImpactsSub: Subscription; @@ -49,8 +46,6 @@ export class AssessmentNebsHomeComponent { energyOpportunitiesSub: Subscription; constructor(private assessmentIdbService: AssessmentIdbService, private nonEnergyBenefitsIdbService: NonEnergyBenefitsIdbService, - private router: Router, - private toastNotificationsService: ToastNotificationsService, private sharedDataService: SharedDataService, private keyPerformanceMetricImpactsIdbService: KeyPerformanceMetricImpactsIdbService, private contactIdbService: ContactIdbService, @@ -65,11 +60,8 @@ export class AssessmentNebsHomeComponent { }); this.nonEnergyBenefitsSub = this.nonEnergyBenefitsIdbService.nonEnergyBenefits.subscribe(nebs => { - this.assessmentNonEnergyBenefits = nebs.filter(neb => { - return neb.assessmentId == this.assessment.guid && neb.energyOpportunityId == undefined; - }); - this.energyOppNonEnergyBenefits = nebs.filter(neb => { - return neb.assessmentId == this.assessment.guid && neb.energyOpportunityId; + this.nonEnergyBenefits = nebs.filter(neb => { + return neb.assessmentId == this.assessment.guid; }); }); diff --git a/src/app/user-portfolio/assessment-dashboard/assessment-nebs/assessment-nebs.component.ts b/src/app/user-portfolio/assessment-dashboard/assessment-nebs/assessment-nebs.component.ts index 0a101fa6..f60cde8b 100644 --- a/src/app/user-portfolio/assessment-dashboard/assessment-nebs/assessment-nebs.component.ts +++ b/src/app/user-portfolio/assessment-dashboard/assessment-nebs/assessment-nebs.component.ts @@ -32,7 +32,7 @@ export class AssessmentNebsComponent { this.nonEnergyBenefitsSub = this.nonEnergyBenefitsIdbService.nonEnergyBenefits.subscribe(nonEnergyBenefits => { this.nonEnergyBenefits = nonEnergyBenefits.filter(neb => { - return neb.assessmentId == this.assessment.guid && neb.energyOpportunityId == undefined; + return neb.assessmentId == this.assessment.guid; }); }) }