contentUpdaters.ts
// eslint-disable-next-line eslint-comments/disable-enable-pair
/* eslint-disable import/no-named-as-default-member */
import {
accumulationBehaviours,
authorizationErrors,
authorizationStatuses,
commodities,
currencies,
currentStatuses,
customerKinds,
dataCustodianApplicationStatuses,
dataQualifiers,
enrollmentStatuses,
flowDirections,
grantTypes,
measuringPeriods,
meterMultiplierKinds,
notificationMethodKinds,
phaseCodes,
powerOfTenMultipliers,
readingQualities,
readingTypeKinds,
responseTypes,
serviceSupplierKinds,
thirdPartyApplicationStatuses,
thirdPartyApplicationTypes,
thirdPartyApplicationUses,
timeAttributes,
unitsOfMeasurement
} from './lookups.js'
import {
parseAuthorizationScope,
updateCostAdditionalDetail,
updateSummaryMeasurement,
updateTariffRider,
updateUsagePoint
} from './objectUpdaters.js'
import type {
ApplicationInformationContent,
AuthorizationContent,
BatchListContent,
CustomerAccountContent,
CustomerAgreementContent,
CustomerContent,
GreenButtonEntryContent,
IntervalBlockContent,
MeterContent,
ReadingTypeContent,
ServiceLocationContent,
ServiceStatusContent,
ServiceSupplierContent,
UsagePointContent,
UsageSummaryContent
} from './types/entryTypes.js'
import { ensureArray } from './utilities.js'
function updateApplicationInformationContent(
content?: ApplicationInformationContent
): void {
if (content === undefined) {
return
}
content.dataCustodianApplicationStatusValue =
dataCustodianApplicationStatuses[content.dataCustodianApplicationStatus]
if (content.thirdPartyApplicationStatus !== undefined) {
content.thirdPartyApplicationStatus_value =
thirdPartyApplicationStatuses[content.thirdPartyApplicationStatus]
}
if (content.thirdPartyApplicationType !== undefined) {
content.thirdPartyApplicationType_value =
thirdPartyApplicationTypes[content.thirdPartyApplicationType]
}
if (content.thirdPartyApplicationUse !== undefined) {
content.thirdPartyApplicationUse_value =
thirdPartyApplicationUses[content.thirdPartyApplicationUse]
}
ensureArray(content, 'contacts')
ensureArray(content, 'scope')
if (content.grant_types !== undefined) {
ensureArray(content, 'grant_types')
content.grant_types_values = []
for (const grantType of content.grant_types) {
content.grant_types_values.push(grantTypes[grantType])
}
}
content.response_types_value = responseTypes[content.response_types]
}
function updateAuthorizationContent(content?: AuthorizationContent): void {
if (content === undefined) {
return
}
content.status_value = authorizationStatuses[content.status]
if (content.grant_type !== undefined) {
content.grant_type_value = grantTypes[content.grant_type]
}
content.token_type_value = grantTypes[content.token_type]
if (content.error !== undefined) {
content.error_value = authorizationErrors[content.error]
}
content.scope_functionBlock = parseAuthorizationScope(content.scope)
}
function updateBatchListContent(content?: BatchListContent): void {
if (content === undefined) {
return
}
ensureArray(content, 'resources')
}
function updateCustomerContent(content?: CustomerContent): void {
if (content === undefined) {
return
}
if (content.kind !== undefined) {
content.kind_value = customerKinds[content.kind]
}
}
function updateCustomerAccountContent(content?: CustomerAccountContent): void {
if (content === undefined) {
return
}
if (content.notifications !== undefined) {
ensureArray(content, 'notifications')
for (const notification of content.notifications) {
notification.methodKind_value =
notificationMethodKinds[notification.methodKind]
}
}
}
function updateCustomerAgreementContent(
content?: CustomerAgreementContent
): void {
if (content === undefined) {
return
}
if (content.DemandResponseProgram !== undefined) {
ensureArray(content, 'DemandResponseProgram')
for (const program of content.DemandResponseProgram) {
if (program.enrollmentStatus !== undefined) {
program.enrollmentStatus_value =
enrollmentStatuses[program.enrollmentStatus]
}
updateSummaryMeasurement(program.capacityReservationLevel)
updateSummaryMeasurement(program.DRProgramNomination)
}
}
ensureArray(content, 'PricingStructures')
if (content.currency !== undefined) {
content.currency_value = currencies[content.currency]
}
}
function updateIntervalBlockContent(content?: IntervalBlockContent): void {
if (content === undefined) {
return
}
ensureArray(content, 'IntervalReading')
for (const reading of content.IntervalReading ?? []) {
if (reading.ReadingQuality !== undefined) {
ensureArray(reading, 'ReadingQuality')
reading.ReadingQuality_values = []
for (const quality of reading.ReadingQuality) {
reading.ReadingQuality_values.push(readingQualities[quality])
}
}
}
}
function updateMeterContent(content?: MeterContent): void {
if (content === undefined) {
return
}
if (content.MeterMultipliers !== undefined) {
ensureArray(content, 'MeterMultipliers')
for (const multiplier of content.MeterMultipliers) {
if (multiplier.kind !== undefined) {
multiplier.kind_value = meterMultiplierKinds[multiplier.kind]
}
}
}
}
function updateReadingTypeContent(content?: ReadingTypeContent): void {
if (content === undefined) {
return
}
if (content.accumulationBehaviour !== undefined) {
content.accumulationBehaviour_value =
accumulationBehaviours[content.accumulationBehaviour]
}
if (content.commodity !== undefined) {
content.commodity_value = commodities[content.commodity]
}
if (content.currency !== undefined) {
content.currency_value = currencies[content.currency]
}
if (content.dataQualifier !== undefined) {
content.dataQualifier_value = dataQualifiers[content.dataQualifier]
}
if (content.defaultQuality !== undefined) {
content.defaultQuality_value = readingQualities[content.defaultQuality]
}
if (content.flowDirection !== undefined) {
content.flowDirection_value = flowDirections[content.flowDirection]
}
if (content.kind !== undefined) {
content.kind_value = readingTypeKinds[content.kind]
}
if (content.phase !== undefined) {
content.phase_value = phaseCodes[content.phase]
}
if (content.powerOfTenMultiplier !== undefined) {
content.powerOfTenMultiplier_value =
powerOfTenMultipliers[content.powerOfTenMultiplier]
}
if (content.timeAttribute !== undefined) {
content.timeAttribute_value = timeAttributes[content.timeAttribute]
}
if (content.uom !== undefined) {
content.uom_value = unitsOfMeasurement[content.uom]
}
if (content.measuringPeriod !== undefined) {
content.measuringPeriod_value = measuringPeriods[content.measuringPeriod]
}
}
function updateServiceLocationContent(content?: ServiceLocationContent): void {
if (content === undefined) {
return
}
ensureArray(content, 'positionPoints')
if (content.UsagePoints !== undefined) {
ensureArray(content, 'UsagePoints')
for (const usagePoint of content.UsagePoints) {
updateUsagePoint(usagePoint)
}
}
}
function updateServiceStatusContent(content?: ServiceStatusContent): void {
if (content === undefined) {
return
}
content.currentStatus_value = currentStatuses[content.currentStatus]
}
function updateServiceSupplierContent(content?: ServiceSupplierContent): void {
if (content === undefined) {
return
}
if (content.kind !== undefined) {
content.kind_value = serviceSupplierKinds[content.kind]
}
}
function updateUsagePointContent(content?: UsagePointContent): void {
if (content === undefined) {
return
}
updateUsagePoint(content)
}
function updateUsageSummaryContent(content?: UsageSummaryContent): void {
if (content === undefined) {
return
}
if (content.costAdditionalDetailsLastPeriod !== undefined) {
ensureArray(content, 'costAdditionalDetailsLastPeriod')
for (const additionalDetail of content.costAdditionalDetailsLastPeriod) {
updateCostAdditionalDetail(additionalDetail)
}
}
if (content.currency !== undefined) {
content.currency_value = currencies[content.currency]
}
updateSummaryMeasurement(content.overallConsumptionLastPeriod)
updateSummaryMeasurement(content.currentBillingPeriodOverAllConsumption)
updateSummaryMeasurement(content.currentDayLastYearNetConsumption)
updateSummaryMeasurement(content.currentDayNetConsumption)
updateSummaryMeasurement(content.currentDayOverallConsumption)
updateSummaryMeasurement(content.peakDemand)
updateSummaryMeasurement(content.previousDayLastYearOverallConsumption)
updateSummaryMeasurement(content.previousDayNetConsumption)
updateSummaryMeasurement(content.previousDayOverallConsumption)
if (content.qualityOfReading !== undefined) {
content.qualityOfReading_value = readingQualities[content.qualityOfReading]
}
updateSummaryMeasurement(content.ratchetDemand)
if (content.commodity !== undefined) {
content.commodity_value = commodities[content.commodity]
}
if (content.tariffRiderRefs?.tariffRiderRef !== undefined) {
ensureArray(content.tariffRiderRefs, 'tariffRiderRef')
for (const tariffRider of content.tariffRiderRefs.tariffRiderRef) {
updateTariffRider(tariffRider)
}
}
}
export function updateGreenButtonContent(
entryContent: GreenButtonEntryContent
): void {
/* eslint-disable @typescript-eslint/no-explicit-any */
// Fix renamed EnergyUsageSummary
if ((entryContent as any).EnergyUsageSummary !== undefined) {
entryContent.UsageSummary = (entryContent as any).EnergyUsageSummary
delete (entryContent as any).EnergyUsageSummary
}
// Fix renamed ElectricPowerUsageSummary
if ((entryContent as any).ElectricPowerUsageSummary !== undefined) {
entryContent.UsageSummary = (entryContent as any).ElectricPowerUsageSummary
delete (entryContent as any).ElectricPowerUsageSummary
}
/* eslint-enable @typescript-eslint/no-explicit-any */
updateApplicationInformationContent(entryContent.ApplicationInformation)
updateAuthorizationContent(entryContent.Authorization)
updateBatchListContent(entryContent.BatchList)
updateCustomerContent(entryContent.Customer)
updateCustomerAccountContent(entryContent.CustomerAccount)
updateCustomerAgreementContent(entryContent.CustomerAgreement)
for (const block of entryContent.IntervalBlock ?? []) {
updateIntervalBlockContent(block)
}
updateMeterContent(entryContent.Meter)
updateReadingTypeContent(entryContent.ReadingType)
updateServiceLocationContent(entryContent.ServiceLocation)
updateServiceStatusContent(entryContent.ServiceStatus)
updateServiceSupplierContent(entryContent.ServiceSupplier)
updateUsagePointContent(entryContent.UsagePoint)
updateUsageSummaryContent(entryContent.UsageSummary)
}