diff --git a/cypress/component/fineAccountEnquiry/accountEnquiry/AccountEnquiryHeader.cy.ts b/cypress/component/fineAccountEnquiry/accountEnquiry/AccountEnquiryHeader.cy.ts index d1954b953f..c676d4a459 100644 --- a/cypress/component/fineAccountEnquiry/accountEnquiry/AccountEnquiryHeader.cy.ts +++ b/cypress/component/fineAccountEnquiry/accountEnquiry/AccountEnquiryHeader.cy.ts @@ -364,7 +364,7 @@ describe('Account Enquiry - Minor Creditor Header', () => { interceptAuthenticatedUser(); }); - const minorCreditorAccountId = FINES_ACC_MINOR_CREDITOR_DETAILS_HEADER_MOCK.account_number; + const minorCreditorAccountId = FINES_ACC_MINOR_CREDITOR_DETAILS_HEADER_MOCK.creditor.account_number; const minorCreditorComponentProperties: IComponentProperties = { accountId: minorCreditorAccountId, routeRoot: 'minor-creditor', @@ -380,11 +380,10 @@ describe('Account Enquiry - Minor Creditor Header', () => { it('AC1, AC2a: renders the Minor Creditor Account Header Summary', { tags: ['PO-1924'] }, () => { const header = structuredClone(FINES_ACC_MINOR_CREDITOR_DETAILS_HEADER_MOCK); - header.has_associated_defendant = true; - header.awaiting_payout_amount = 100; - header.awarded_amount = 200; - header.paid_out_amount = 50; - header.outstanding_amount = 150; + header.financials.awaiting_payout = 100; + header.financials.awarded = 200; + header.financials.paid_out = 50; + header.financials.outstanding = 150; interceptUserState(USER_STATE_MOCK_PERMISSION_BU77); interceptMinorCreditorHeader(minorCreditorAccountId, header, '1'); @@ -416,8 +415,8 @@ describe('Account Enquiry - Minor Creditor Header', () => { it('AC2b: hides Awarded and Outstanding when no defendant is associated', () => { const header = structuredClone(FINES_ACC_MINOR_CREDITOR_DETAILS_HEADER_MOCK); - header.awaiting_payout_amount = 100; - header.paid_out_amount = 50; + header.financials.awaiting_payout = 100; + header.financials.paid_out = 50; interceptUserState(USER_STATE_MOCK_PERMISSION_BU77); interceptMinorCreditorHeader(minorCreditorAccountId, header, '1'); diff --git a/src/app/flows/fines/fines-acc/fines-acc-minor-creditor-details/fines-acc-minor-creditor-details.component.html b/src/app/flows/fines/fines-acc/fines-acc-minor-creditor-details/fines-acc-minor-creditor-details.component.html index aee71a78ba..78ab9594d9 100644 --- a/src/app/flows/fines/fines-acc/fines-acc-minor-creditor-details/fines-acc-minor-creditor-details.component.html +++ b/src/app/flows/fines/fines-acc/fines-acc-minor-creditor-details/fines-acc-minor-creditor-details.component.html @@ -11,15 +11,13 @@

Account type:

- {{ accountData.creditor_account_type.display_name }} + {{ accountData.creditor.account_type.display_name }}

Business Unit:

- {{ accountData.business_unit_summary.business_unit_name }} ({{ - accountData.business_unit_summary.business_unit_id - }}) + {{ accountData.business_unit.business_unit_name }} ({{ accountData.business_unit.business_unit_id }})

@@ -29,31 +27,31 @@

Business Unit:


- @if (accountData.has_associated_defendant) { + @if (accountData.creditor.has_associated_defendant) {

Awarded:

- {{ accountData.awarded_amount | monetary }} + {{ accountData.financials.awarded | monetary }}

}

Paid out:

- {{ accountData.paid_out_amount | monetary }} + {{ accountData.financials.paid_out | monetary }}

Awaiting payout:

- {{ accountData.awaiting_payout_amount | monetary }} + {{ accountData.financials.awaiting_payout | monetary }}

- @if (accountData.has_associated_defendant) { + @if (accountData.creditor.has_associated_defendant) {

Outstanding:

- {{ accountData.outstanding_amount | monetary }} + {{ accountData.financials.outstanding | monetary }}

} diff --git a/src/app/flows/fines/fines-acc/fines-acc-minor-creditor-details/interfaces/fines-acc-minor-creditor-details-header.interface.ts b/src/app/flows/fines/fines-acc/fines-acc-minor-creditor-details/interfaces/fines-acc-minor-creditor-details-header.interface.ts index 3cae5a891b..804fe81d9b 100644 --- a/src/app/flows/fines/fines-acc/fines-acc-minor-creditor-details/interfaces/fines-acc-minor-creditor-details-header.interface.ts +++ b/src/app/flows/fines/fines-acc/fines-acc-minor-creditor-details/interfaces/fines-acc-minor-creditor-details-header.interface.ts @@ -1,17 +1,15 @@ export interface IOpalFinesAccountMinorCreditorDetailsHeader { version: string | null; - creditor_account_id: number; - account_number: string; - creditor_account_type: { - type: string; - display_name: string; - }; - business_unit_summary: { - business_unit_id: string; - business_unit_name: string; - welsh_speaking: string; + creditor: { + account_id: number; + account_number: string; + account_type: { + type: string; + display_name: string; + }; + has_associated_defendant: boolean; }; - party_details: { + party: { party_id: string; organisation_flag: boolean; organisation_details?: { @@ -24,9 +22,15 @@ export interface IOpalFinesAccountMinorCreditorDetailsHeader { surname: string; }; }; - awarded_amount: number; - paid_out_amount: number; - awaiting_payout_amount: number; - outstanding_amount: number; - has_associated_defendant: boolean; + business_unit: { + business_unit_id: string; + business_unit_name: string; + welsh_speaking: string; + }; + financials: { + awarded: number; + paid_out: number; + awaiting_payout: number; + outstanding: number; + }; } diff --git a/src/app/flows/fines/fines-acc/fines-acc-minor-creditor-details/mocks/fines-acc-minor-creditor-details-header.mock.ts b/src/app/flows/fines/fines-acc/fines-acc-minor-creditor-details/mocks/fines-acc-minor-creditor-details-header.mock.ts index 63b988ccaa..72a441f7bd 100644 --- a/src/app/flows/fines/fines-acc/fines-acc-minor-creditor-details/mocks/fines-acc-minor-creditor-details-header.mock.ts +++ b/src/app/flows/fines/fines-acc/fines-acc-minor-creditor-details/mocks/fines-acc-minor-creditor-details-header.mock.ts @@ -2,18 +2,21 @@ import { IOpalFinesAccountMinorCreditorDetailsHeader } from '../interfaces/fines export const FINES_ACC_MINOR_CREDITOR_DETAILS_HEADER_MOCK: IOpalFinesAccountMinorCreditorDetailsHeader = { version: null, - creditor_account_id: 99000000000800, - account_number: '87654321', - creditor_account_type: { - type: 'MN', - display_name: 'Minor Creditor', + creditor: { + account_id: 99000000000800, + account_number: '87654321', + account_type: { + type: 'MN', + display_name: 'Minor Creditor', + }, + has_associated_defendant: false, }, - business_unit_summary: { + business_unit: { business_unit_id: '77', business_unit_name: 'Camberwell Green', welsh_speaking: 'N', }, - party_details: { + party: { party_id: '99000000000900', organisation_flag: true, organisation_details: { @@ -21,9 +24,10 @@ export const FINES_ACC_MINOR_CREDITOR_DETAILS_HEADER_MOCK: IOpalFinesAccountMino organisation_aliases: null, }, }, - awarded_amount: 0, - paid_out_amount: 0, - awaiting_payout_amount: 0, - outstanding_amount: 0, - has_associated_defendant: false, + financials: { + awarded: 0, + paid_out: 0, + awaiting_payout: 0, + outstanding: 0, + }, }; diff --git a/src/app/flows/fines/fines-acc/services/fines-acc-payload.service.spec.ts b/src/app/flows/fines/fines-acc/services/fines-acc-payload.service.spec.ts index 69988df8bf..663bf51bef 100644 --- a/src/app/flows/fines/fines-acc/services/fines-acc-payload.service.spec.ts +++ b/src/app/flows/fines/fines-acc/services/fines-acc-payload.service.spec.ts @@ -220,7 +220,7 @@ describe('FinesAccPayloadService', () => { it('should transform account header for store for a minor creditor (organisation)', () => { mockMacPayloadService.getBusinessUnitBusinessUserId.mockReturnValue( - FINES_ACC_MINOR_CREDITOR_DETAILS_HEADER_MOCK.business_unit_summary.business_unit_id, + FINES_ACC_MINOR_CREDITOR_DETAILS_HEADER_MOCK.business_unit.business_unit_id, ); const header: IOpalFinesAccountMinorCreditorDetailsHeader = structuredClone( FINES_ACC_MINOR_CREDITOR_DETAILS_HEADER_MOCK, @@ -230,20 +230,20 @@ describe('FinesAccPayloadService', () => { const result: IFinesAccountState = service.transformAccountHeaderForStore(account_id, header, 'minorCreditor'); expect(result).toEqual({ - account_number: header.account_number, + account_number: header.creditor.account_number, account_id: account_id, pg_party_id: null, - party_id: header.party_details.party_id, - party_type: header.creditor_account_type.display_name, - party_name: header.party_details.organisation_details?.organisation_name ?? null, + party_id: header.party.party_id, + party_type: header.creditor.account_type.display_name, + party_name: header.party.organisation_details?.organisation_name ?? null, base_version: header.version, - business_unit_id: header.business_unit_summary.business_unit_id, - business_unit_user_id: header.business_unit_summary.business_unit_id, - welsh_speaking: header.business_unit_summary.welsh_speaking, + business_unit_id: header.business_unit.business_unit_id, + business_unit_user_id: header.business_unit.business_unit_id, + welsh_speaking: header.business_unit.welsh_speaking, }); expect(mockMacPayloadService.getBusinessUnitBusinessUserId).toHaveBeenCalledWith( - Number(header.business_unit_summary.business_unit_id), + Number(header.business_unit.business_unit_id), OPAL_USER_STATE_MOCK, ); expect(mockGlobalStore.userState).toHaveBeenCalled(); @@ -251,42 +251,42 @@ describe('FinesAccPayloadService', () => { it('should transform account header for store for a minor creditor (individual)', () => { mockMacPayloadService.getBusinessUnitBusinessUserId.mockReturnValue( - FINES_ACC_MINOR_CREDITOR_DETAILS_HEADER_MOCK.business_unit_summary.business_unit_id, + FINES_ACC_MINOR_CREDITOR_DETAILS_HEADER_MOCK.business_unit.business_unit_id, ); const header: IOpalFinesAccountMinorCreditorDetailsHeader = structuredClone( FINES_ACC_MINOR_CREDITOR_DETAILS_HEADER_MOCK, ); const account_id = 77; - header.party_details.organisation_flag = false; - header.party_details.individual_details = { + header.party.organisation_flag = false; + header.party.individual_details = { title: 'Mr', forenames: 'John', surname: 'Doe', }; - delete header.party_details.organisation_details; + delete header.party.organisation_details; const result: IFinesAccountState = service.transformAccountHeaderForStore(account_id, header, 'minorCreditor'); expect(result).toEqual({ - account_number: header.account_number, + account_number: header.creditor.account_number, account_id: account_id, pg_party_id: null, - party_id: header.party_details.party_id, - party_type: header.creditor_account_type.display_name, + party_id: header.party.party_id, + party_type: header.creditor.account_type.display_name, party_name: - header.party_details.individual_details?.title + + header.party.individual_details?.title + ' ' + - header.party_details.individual_details?.forenames + + header.party.individual_details?.forenames + ' ' + - header.party_details.individual_details?.surname?.toUpperCase(), + header.party.individual_details?.surname?.toUpperCase(), base_version: header.version, - business_unit_id: header.business_unit_summary.business_unit_id, - business_unit_user_id: header.business_unit_summary.business_unit_id, - welsh_speaking: header.business_unit_summary.welsh_speaking, + business_unit_id: header.business_unit.business_unit_id, + business_unit_user_id: header.business_unit.business_unit_id, + welsh_speaking: header.business_unit.welsh_speaking, }); expect(mockMacPayloadService.getBusinessUnitBusinessUserId).toHaveBeenCalledWith( - Number(header.business_unit_summary.business_unit_id), + Number(header.business_unit.business_unit_id), OPAL_USER_STATE_MOCK, ); expect(mockGlobalStore.userState).toHaveBeenCalled(); diff --git a/src/app/flows/fines/fines-acc/services/fines-acc-payload.service.ts b/src/app/flows/fines/fines-acc/services/fines-acc-payload.service.ts index 5daed96efd..bed1bf5145 100644 --- a/src/app/flows/fines/fines-acc/services/fines-acc-payload.service.ts +++ b/src/app/flows/fines/fines-acc/services/fines-acc-payload.service.ts @@ -86,50 +86,71 @@ export class FinesAccPayloadService { headingData: IOpalFinesAccountDefendantDetailsHeader | IOpalFinesAccountMinorCreditorDetailsHeader, partyType: 'defendant' | 'minorCreditor', ): IFinesAccountState { - // Build party_name safely - const party_name = headingData.party_details.organisation_flag - ? (headingData.party_details.organisation_details?.organisation_name ?? '') - : [ - headingData.party_details.individual_details?.title, - headingData.party_details.individual_details?.forenames, - headingData.party_details.individual_details?.surname - ? headingData.party_details.individual_details.surname.toUpperCase() - : undefined, - ] - .filter(Boolean) - .join(' '); - - const business_unit_user_id = this.payloadService.getBusinessUnitBusinessUserId( - Number(headingData.business_unit_summary.business_unit_id), - this.globalStore.userState(), - ); - + let party_name: string; let pg_party_id: string | null = null; let party_type: string; let party_id: string; + let account_number: string; + let business_unit_user_id: string | null; + let business_unit_id: string | null; + let business_unit_welsh_speaking: string | null; if (partyType === 'defendant') { const h = headingData as IOpalFinesAccountDefendantDetailsHeader; pg_party_id = h.parent_guardian_party_id; party_type = h.debtor_type; party_id = h.defendant_account_party_id; + account_number = h.account_number; + party_name = h.party_details.organisation_flag + ? (h.party_details.organisation_details?.organisation_name ?? '') + : [ + h.party_details.individual_details?.title, + h.party_details.individual_details?.forenames, + h.party_details.individual_details?.surname + ? h.party_details.individual_details.surname.toUpperCase() + : undefined, + ] + .filter(Boolean) + .join(' '); + business_unit_user_id = this.payloadService.getBusinessUnitBusinessUserId( + Number(h.business_unit_summary.business_unit_id), + this.globalStore.userState(), + ); + business_unit_id = h.business_unit_summary.business_unit_id; + business_unit_welsh_speaking = h.business_unit_summary.welsh_speaking; } else { const h = headingData as IOpalFinesAccountMinorCreditorDetailsHeader; party_type = 'Minor Creditor'; - party_id = h.party_details.party_id; + party_id = h.party.party_id; + account_number = h.creditor.account_number; + party_name = h.party.organisation_flag + ? (h.party.organisation_details?.organisation_name ?? '') + : [ + h.party.individual_details?.title, + h.party.individual_details?.forenames, + h.party.individual_details?.surname ? h.party.individual_details.surname.toUpperCase() : undefined, + ] + .filter(Boolean) + .join(' '); + business_unit_user_id = this.payloadService.getBusinessUnitBusinessUserId( + Number(h.business_unit.business_unit_id), + this.globalStore.userState(), + ); + business_unit_id = h.business_unit.business_unit_id; + business_unit_welsh_speaking = h.business_unit.welsh_speaking; } return { - account_number: headingData.account_number, + account_number, account_id: Number(account_id), pg_party_id, party_id, party_type, party_name, base_version: headingData.version, - business_unit_id: headingData.business_unit_summary.business_unit_id, + business_unit_id: business_unit_id, business_unit_user_id, - welsh_speaking: headingData.business_unit_summary.welsh_speaking, + welsh_speaking: business_unit_welsh_speaking, }; }