Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Talouden muistiinpano aikuisen tietoihin #6316

Merged
merged 14 commits into from
Feb 6, 2025
24 changes: 24 additions & 0 deletions frontend/src/e2e-test/generated/api-clients.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ import { DevDocumentTemplate } from './api-types'
import { DevEmployee } from './api-types'
import { DevEmployeePin } from './api-types'
import { DevFamilyContact } from './api-types'
import { DevFinanceNote } from './api-types'
import { DevFosterParent } from './api-types'
import { DevFridgeChild } from './api-types'
import { DevFridgePartner } from './api-types'
Expand Down Expand Up @@ -1091,6 +1092,29 @@ export async function createFeeThresholds(
}


/**
* Generated from fi.espoo.evaka.shared.dev.DevApi.createFinanceNotes
*/
export async function createFinanceNotes(
request: {
body: DevFinanceNote[]
},
options?: { mockedTime?: HelsinkiDateTime }
): Promise<void> {
try {
const { data: json } = await devClient.request<JsonOf<void>>({
url: uri`/finance-notes`.toString(),
method: 'POST',
headers: { EvakaMockedTime: options?.mockedTime?.formatIso() },
data: request.body satisfies JsonCompatible<DevFinanceNote[]>
})
return json
} catch (e) {
throw new DevApiError(e)
}
}


/**
* Generated from fi.espoo.evaka.shared.dev.DevApi.createFosterParent
*/
Expand Down
8 changes: 8 additions & 0 deletions frontend/src/e2e-test/generated/api-types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -614,6 +614,14 @@ export interface DevFamilyContact {
priority: number
}

/**
* Generated from fi.espoo.evaka.shared.dev.DevApi.DevFinanceNote
*/
export interface DevFinanceNote {
content: string
personId: PersonId
}

/**
* Generated from fi.espoo.evaka.shared.dev.DevFosterParent
*/
Expand Down
15 changes: 15 additions & 0 deletions frontend/src/e2e-test/pages/employee/guardian-information.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
//
// SPDX-License-Identifier: LGPL-2.1-or-later

import HelsinkiDateTime from 'lib-common/helsinki-date-time'
import LocalDate from 'lib-common/local-date'
import { formatCents } from 'lib-common/money'
import { UUID } from 'lib-common/types'
Expand Down Expand Up @@ -655,6 +656,16 @@ class InvoiceCorrectionNoteModal extends Modal {
note = new TextInput(this.findByDataQa('note-textarea'))
}

class FinanceNotesAndMessagesSection extends Section {
#noteCreatedAt = this.findAll(`[data-qa="finance-note-created-at"]`)

async checkNoteCreatedAt(nth: number, expectedCreatedAt: HelsinkiDateTime) {
await this.#noteCreatedAt
.nth(nth)
.assertTextEquals(expectedCreatedAt.format())
}
}

const collapsibles = {
personInfo: {
selector: '[data-qa="person-info-collapsible"]',
Expand Down Expand Up @@ -707,6 +718,10 @@ const collapsibles = {
invoiceCorrections: {
selector: '[data-qa="person-invoice-corrections-collapsible"]',
section: InvoiceCorrectionsSection
},
financeNotesAndMessages: {
selector: '[data-qa="person-finance-notes-and-messages-collapsible"]',
section: FinanceNotesAndMessagesSection
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
// SPDX-FileCopyrightText: 2017-2025 City of Espoo
//
// SPDX-License-Identifier: LGPL-2.1-or-later

import HelsinkiDateTime from 'lib-common/helsinki-date-time'

import config from '../../config'
import { Fixture, testAdult } from '../../dev-api/fixtures'
import {
createFinanceNotes,
resetServiceState
} from '../../generated/api-clients'
import GuardianInformationPage from '../../pages/employee/guardian-information'
import { Page } from '../../utils/page'
import { employeeLogin } from '../../utils/user'

let page: Page
let guardianPage: GuardianInformationPage

beforeEach(async () => {
await resetServiceState()
await Fixture.person(testAdult).saveAdult()
const financeAdmin = await Fixture.employee().financeAdmin().save()

page = await Page.open({})
await employeeLogin(page, financeAdmin)

await page.goto(config.employeeUrl)
guardianPage = new GuardianInformationPage(page)
})

describe('person finance notes', () => {
test('Notes are sorted by created date', async () => {
const createdAtFirst = HelsinkiDateTime.now().subHours(3 * 24)
const createdAtSecond = createdAtFirst.addHours(24)
const createdAtThird = createdAtSecond.addHours(24)

const createFinanceNoteFixture = async (createdAt: HelsinkiDateTime) => {
await createFinanceNotes(
{
body: [{ personId: testAdult.id, content: 'foobar' }]
},
{
mockedTime: createdAt
}
)
}

await createFinanceNoteFixture(createdAtFirst)
await createFinanceNoteFixture(createdAtSecond)
await createFinanceNoteFixture(createdAtThird)

await guardianPage.navigateToGuardian(testAdult.id)
const notes = await guardianPage.openCollapsible('financeNotesAndMessages')

await notes.checkNoteCreatedAt(0, createdAtThird)
await notes.checkNoteCreatedAt(1, createdAtSecond)
await notes.checkNoteCreatedAt(2, createdAtFirst)
})
})
10 changes: 9 additions & 1 deletion frontend/src/employee-frontend/components/PersonProfile.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ import { UserContext } from '../state/user'
import { getLayout, Layouts } from './layouts'
import FosterChildren from './person-profile/FosterChildren'
import FamilyOverview from './person-profile/PersonFamilyOverview'
import PersonFinanceNotesAndMessages from './person-profile/PersonFinanceNotesAndMessages'
import PersonInvoiceCorrections from './person-profile/PersonInvoiceCorrections'
import PersonVoucherValueDecisions from './person-profile/PersonVoucherValueDecisions'

Expand Down Expand Up @@ -135,11 +136,16 @@ const components = {
PersonApplications,
'READ_APPLICATIONS'
),
decisions: requireOneOfPermittedActions(PersonDecisions, 'READ_DECISIONS')
decisions: requireOneOfPermittedActions(PersonDecisions, 'READ_DECISIONS'),
'notes-and-messages': requireOneOfPermittedActions(
PersonFinanceNotesAndMessages,
'READ_FINANCE_NOTES'
)
}

const layouts: Layouts<typeof components> = {
['ADMIN']: [
{ component: 'notes-and-messages', open: true },
{ component: 'family-overview', open: true },
{ component: 'partners', open: false },
{ component: 'fridge-children', open: false },
Expand Down Expand Up @@ -168,6 +174,7 @@ const layouts: Layouts<typeof components> = {
{ component: 'voucherValueDecisions', open: false }
],
['FINANCE_ADMIN']: [
{ component: 'notes-and-messages', open: true },
{ component: 'family-overview', open: true },
{ component: 'income', open: true },
{ component: 'fee-decisions', open: false },
Expand All @@ -180,6 +187,7 @@ const layouts: Layouts<typeof components> = {
{ component: 'fosterChildren', open: false }
],
['FINANCE_STAFF']: [
{ component: 'notes-and-messages', open: true },
{ component: 'family-overview', open: true },
{ component: 'fee-decisions', open: false },
{ component: 'invoices', open: false },
Expand Down
Loading