Skip to content

Commit

Permalink
Merge pull request #244 from NREL/issue-239
Browse files Browse the repository at this point in the history
fixes to assessment report
  • Loading branch information
RLiNREL authored Sep 25, 2024
2 parents badc52d + 52dd800 commit 13515d3
Show file tree
Hide file tree
Showing 7 changed files with 129 additions and 48 deletions.
1 change: 1 addition & 0 deletions src/app/indexed-db/db-changes.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -372,6 +372,7 @@ export class DbChangesService {
await this.onSiteVisitIdbService.setOnSiteVisits();
await this.energyEquipmentIdbService.setEnergyEquipments();
await this.processEquipmentIdbService.setProcessEquipments();
await this.keyPerformanceMetricImpactsIdbService.setKeyPerformanceMetricImpacts();
this.userIdbService.user.next(user);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,83 +24,93 @@
Energy Use
</td>
<td class="text-right">
<app-single-cell-item [numValue]="assessmentReport.assessment.cost" [isCurrency]="true"></app-single-cell-item>
<app-single-cell-item [numValue]="assessmentReport.assessment.cost"
[isCurrency]="true"></app-single-cell-item>
</td>
<td class="text-right">
<app-single-cell-item [numValue]="assessmentReport.assessment.energyUse" [isCurrency]="false"></app-single-cell-item>
<app-single-cell-item [numValue]="assessmentReport.assessment.energyUse"
[isCurrency]="false"></app-single-cell-item>
</td>
</tr>
<tr class="section-border">
<td class="bold" colspan="3">
{{assessmentReport.assessment.name}}
</td>
</tr>
<tr *ngFor="let nebReport of assessmentReport.assessmentNebReports">
<td class="ps-3">
<fa-icon class="pe-1" [icon]="faWeightHanging"></fa-icon>
{{nebReport.nonEnergyBenefit.name}}
<tr>
<td class="w-50 ps-3">
<fa-icon [icon]="faScrewdriverWrench"></fa-icon> Assessment Energy Savings
</td>
<td class="text-right">
<app-single-cell-item [numValue]="nebReport.totalCostSavings"
<app-single-cell-item [numValue]="assessmentReport.assessment.costSavings"
[isCurrency]="true"></app-single-cell-item>
</td>
<td class="text-right">
&mdash;
<app-single-cell-item [numValue]="assessmentReport.assessment.energySavings"
[isCurrency]="false"></app-single-cell-item>
</td>
</tr>
<tr>
<td class="w-50 ps-3">
<tr *ngIf="assessmentReport.assessmentNebReports.length > 0">
<td colspan="3" class="ps-3">
Additional Operational Benefits
</td>
</tr>
<tr *ngFor="let nebReport of assessmentReport.assessmentNebReports">
<td class="ps-5">
<fa-icon class="pe-1" [icon]="faWeightHanging"></fa-icon>
{{nebReport.nonEnergyBenefit.name}}
</td>
<td class="text-right">
<app-single-cell-item [numValue]="assessmentReport.assessment.costSavings" [isCurrency]="true"></app-single-cell-item>
<app-single-cell-item [numValue]="nebReport.totalCostSavings"
[isCurrency]="true"></app-single-cell-item>
</td>
<td class="text-right">
<app-single-cell-item [numValue]="assessmentReport.assessment.energySavings" [isCurrency]="false"></app-single-cell-item>
&mdash;
</td>
</tr>
<tr>
<td class="w-50 bold">
Total Additional Operational Benefits
Total Assessment Level Savings
</td>
<td class="text-right bold">
<app-single-cell-item [numValue]="assessmentReport.totalNonOpportunitySavings"
[isCurrency]="true"></app-single-cell-item>
</td>
<td class="text-right bold">
<app-single-cell-item [numValue]="assessmentReport.assessment.energySavings" [isCurrency]="false"></app-single-cell-item>
<app-single-cell-item [numValue]="assessmentReport.assessment.energySavings"
[isCurrency]="false"></app-single-cell-item>
</td>
</tr>
<ng-container *ngFor="let energyOpportunityReport of assessmentReport.energyOpportunityReports">
<tr class="section-border">
<td colspan="3" class="bold ps-3">
{{energyOpportunityReport.energyOpportunity.name}}
<fa-icon class="pe-2" [icon]="faFileLines"></fa-icon>{{energyOpportunityReport.energyOpportunity.name}}
</td>
</tr>
<tr *ngFor="let nebReport of energyOpportunityReport.nebReports">
<td class="ps-5">
<fa-icon class="pe-1" [icon]="faWeightHanging"></fa-icon>
{{nebReport.nonEnergyBenefit.name}}
<tr>
<td class="ps-4">
{{energyOpportunityReport.energyOpportunity.name}} Energy Savings
</td>
<td class="text-right">
<app-single-cell-item [numValue]="nebReport.totalCostSavings"
<app-single-cell-item [numValue]="energyOpportunityReport.energyOpportunity.costSavings"
[isCurrency]="true"></app-single-cell-item>
</td>
<td class="text-right">
&mdash;
<app-single-cell-item [numValue]="energyOpportunityReport.energyOpportunity.energySavings"
[isCurrency]="false"></app-single-cell-item>
</td>
</tr>
<tr>
<td class="ps-5">
{{energyOpportunityReport.energyOpportunity.name}} Energy Savings
<tr *ngFor="let nebReport of energyOpportunityReport.nebReports">
<td class="ps-4">
<fa-icon class="pe-1" [icon]="faWeightHanging"></fa-icon>
{{nebReport.nonEnergyBenefit.name}}
</td>
<td class="text-right">
<app-single-cell-item [numValue]="energyOpportunityReport.energyOpportunity.costSavings"
<app-single-cell-item [numValue]="nebReport.totalCostSavings"
[isCurrency]="true"></app-single-cell-item>
</td>
<td class="text-right">
<app-single-cell-item [numValue]="energyOpportunityReport.energyOpportunity.energySavings"
[isCurrency]="false"></app-single-cell-item>
&mdash;
</td>
</tr>
<tr>
Expand All @@ -118,6 +128,32 @@
</tr>
</ng-container>
<tr class="section-border">
<td class="w-50 bold">
Total Energy Savings
</td>
<td class="text-right bold w-25">
<app-single-cell-item [numValue]="assessmentReport.totalEnergyCostSavings"
[isCurrency]="true"></app-single-cell-item>
</td>
<td class="text-right bold">
<app-single-cell-item [numValue]="assessmentReport.totalEnergySavings"
[isCurrency]="false"></app-single-cell-item>
</td>
</tr>
<tr>
<td class="w-50 bold">
Total Additional Operational Benefits
</td>
<td class="text-right bold w-25">
<app-single-cell-item [numValue]="assessmentReport.totalNebSavings"
[isCurrency]="true"></app-single-cell-item>
</td>
<td class="text-right bold">
<app-single-cell-item [numValue]="0"
[isCurrency]="false"></app-single-cell-item>
</td>
</tr>
<tr>
<td class="w-50 bold">
Total Savings
</td>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,15 @@ import { AssessmentSavingsTableComponent } from './assessment-savings-table.comp
import { TableEntriesModule } from 'src/app/shared/table-entries/table-entries.module';
import { IdbAssessment, getNewIdbAssessment } from 'src/app/models/assessment';
import { getAssessmentReport } from '../../calculations/assessmentReport';
import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';

describe('AssessmentSavingsTableComponent', () => {
let component: AssessmentSavingsTableComponent;
let fixture: ComponentFixture<AssessmentSavingsTableComponent>;

beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [TableEntriesModule],
imports: [TableEntriesModule, FontAwesomeModule],
declarations: [AssessmentSavingsTableComponent]
})
.compileComponents();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Component, Input } from '@angular/core';
import { IconDefinition, faWeightHanging } from '@fortawesome/free-solid-svg-icons';
import { IconDefinition, faFileLines, faScrewdriverWrench, faWeightHanging } from '@fortawesome/free-solid-svg-icons';
import { AssessmentReport } from '../../calculations/assessmentReport';

@Component({
Expand All @@ -13,4 +13,6 @@ export class AssessmentSavingsTableComponent {


faWeightHanging: IconDefinition = faWeightHanging;
faScrewdriverWrench: IconDefinition = faScrewdriverWrench;
faFileLines: IconDefinition = faFileLines;
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
</td>
<td>
<app-single-cell-item [isCurrency]="true"
[numValue]="assessmentReport.assessment.energySavings"></app-single-cell-item>
[numValue]="assessmentReport.assessment.costSavings"></app-single-cell-item>
</td>
<td>
<app-single-cell-item [isCurrency]="true"
Expand All @@ -48,7 +48,7 @@
</td>
</tr>
<tr *ngFor="let energyOpportunityReport of assessmentReport.energyOpportunityReports">
<td>
<td class="ps-4">
{{energyOpportunityReport.energyOpportunity.name}}
</td>
<td>
Expand Down Expand Up @@ -84,7 +84,7 @@
</th>
<th>
<app-single-cell-item [isCurrency]="true"
[numValue]="assessmentReport.totalEnergySavings"></app-single-cell-item>
[numValue]="assessmentReport.totalEnergyCostSavings"></app-single-cell-item>
</th>
<th>
<app-single-cell-item [isCurrency]="true"
Expand Down
65 changes: 51 additions & 14 deletions src/app/shared/reports/calculations/assessmentReport.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,15 @@ import { IdbKeyPerformanceMetricImpact } from "src/app/models/keyPerformanceMetr
///ASSESSMENT REPORT
export function getAssessmentReport(assessment: IdbAssessment, energyOpportunities: Array<IdbEnergyOpportunity>, nonEnergyBenefits: Array<IdbNonEnergyBenefit>, companyPerformanceMetrics: Array<KeyPerformanceMetric>, keyPerformanceMetricImpacts: Array<IdbKeyPerformanceMetricImpact>): AssessmentReport {

if(!assessment.energySavings){
if (!assessment.energySavings) {
assessment.energySavings = 0;
}

if(!assessment.costSavings){
if (!assessment.costSavings) {
assessment.costSavings = 0;
}

if(!assessment.implementationCost){
if (!assessment.implementationCost) {
assessment.implementationCost = 0;
}

Expand Down Expand Up @@ -53,7 +53,6 @@ export function getAssessmentReport(assessment: IdbAssessment, energyOpportuniti
if (assessment.costSavings) {
totalNonOpportunitySavings += assessment.costSavings;
}

let energyOpportunityCostSavings: number = _.sumBy(energyOpportunityReports, (report: EnergyOpportunityReport) => {
return report.totalEnergyCostSavings
});
Expand All @@ -63,30 +62,68 @@ export function getAssessmentReport(assessment: IdbAssessment, energyOpportuniti
totalEnergyCostSavings += energyOpportunityCostSavings;
};

if (assessment.costSavings) {
totalEnergyCostSavings += assessment.costSavings;
}

let totalAssessmentNebSavings: number = _.sumBy(assessmentNebReports, (report: NebReport) => {
return report.totalCostSavings
});
let energyOpportunityNebSavings: number = _.sumBy(energyOpportunityNebReports, (report: NebReport) => {
return report.totalCostSavings
});
let totalNebSavings: number = totalNonOpportunitySavings + energyOpportunityNebSavings;
let totalNebSavings: number = totalAssessmentNebSavings + energyOpportunityNebSavings;

let totalCostSavings: number = totalEnergyCostSavings + totalNebSavings;

let totalEnergySavings: number = _.sumBy(energyOpportunityReports, (report: EnergyOpportunityReport) => {
return report.energyOpportunity.energySavings
}) + assessment.energySavings;
let opportunityEnergySavings: number = _.sumBy(energyOpportunityReports, (report: EnergyOpportunityReport) => {
if (report.energyOpportunity.energySavings) {
return report.energyOpportunity.energySavings;
}
return 0;
});

let implementationCost: number = _.sumBy(energyOpportunityReports, (report: EnergyOpportunityReport) => {
return report.energyOpportunity.implementationCost
}) + assessment.implementationCost
let totalEnergySavings: number = 0;
if (assessment.energySavings) {
totalEnergySavings += assessment.energySavings;
}
if (opportunityEnergySavings) {
totalEnergySavings += opportunityEnergySavings;
};

let totalPaybackWithNebs: number = (implementationCost / totalCostSavings);
let totalPaybackWithoutNebs: number = (implementationCost / totalEnergyCostSavings);

let energyOpportunityImplementationCost: number = _.sumBy(energyOpportunityReports, (report: EnergyOpportunityReport) => {
if (report.energyOpportunity.implementationCost) {
return report.energyOpportunity.implementationCost;
}
return 0;
})

let implementationCost: number = 0;
if (energyOpportunityImplementationCost) {
implementationCost += energyOpportunityImplementationCost;
}
if (assessment.implementationCost) {
implementationCost += assessment.implementationCost;
}

let totalPaybackWithNebs: number = (implementationCost / totalCostSavings);
if (totalPaybackWithNebs == Infinity) {
totalPaybackWithNebs = 0;
}
let totalPaybackWithoutNebs: number = (implementationCost / totalNonOpportunitySavings);
if (totalPaybackWithoutNebs == Infinity) {
totalPaybackWithoutNebs = 0;
}
let nonOpportunityPaybackWithoutNebs: number = (assessment.implementationCost / assessment.costSavings);
if (nonOpportunityPaybackWithoutNebs == Infinity) {
nonOpportunityPaybackWithoutNebs = 0;
}
let nonOpportunityPaybackWithNebs: number = (assessment.implementationCost / totalNonOpportunitySavings);
let totalNonOpportunityAssessmentSavings: number = totalAssessmentNebSavings + assessment.energySavings;
if (nonOpportunityPaybackWithNebs == Infinity) {
nonOpportunityPaybackWithNebs = 0;
}
let totalNonOpportunityAssessmentSavings: number = totalAssessmentNebSavings + assessment.costSavings;
return {
assessment: assessment,
energyOpportunityReports: energyOpportunityReports,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,13 @@ export function getEnergyOpportunityReport(energyOpportunity: IdbEnergyOpportuni
});
let totalCostSavings: number = totalEnergyCostSavings + totalNebSavings;
let paybackWithNebs: number = (energyOpportunity.implementationCost / totalCostSavings);
if(paybackWithNebs == Infinity){
paybackWithNebs = 0;
}
let paybackWithoutNebs: number = (energyOpportunity.implementationCost / totalEnergyCostSavings);


if(paybackWithoutNebs == Infinity){
paybackWithoutNebs = 0;
}

return {
energyOpportunity: energyOpportunity,
Expand Down

0 comments on commit 13515d3

Please sign in to comment.