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

Tuen päätöksen tukipalveluiden voimassaoloaika valinnaiseksi #5693

Merged
merged 1 commit into from
Oct 1, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions frontend/src/e2e-test/dev-api/fixtures.ts
Original file line number Diff line number Diff line change
Expand Up @@ -596,6 +596,7 @@ export class Fixture {
},
servicesMotivation: null,
validityPeriod: new DateRange(LocalDate.of(2019, 1, 2), null),
endDateNotKnown: false,
status: 'DRAFT',
structuralMotivationDescription: null,
structuralMotivationOptions: {
Expand Down Expand Up @@ -659,6 +660,7 @@ export class Fixture {
},
servicesMotivation: 'Services motivation text',
validityPeriod: new DateRange(LocalDate.of(2019, 1, 2), null),
endDateNotKnown: false,
status: 'DRAFT',
structuralMotivationDescription: 'Structural motivation description text',
structuralMotivationOptions: {
Expand Down
1 change: 1 addition & 0 deletions frontend/src/e2e-test/generated/api-types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,7 @@ export interface DevAssistanceNeedDecision {
decisionMade: LocalDate | null
decisionMaker: AssistanceNeedDecisionEmployee | null
decisionNumber: number | null
endDateNotKnown: boolean
expertResponsibilities: string | null
guardianInfo: AssistanceNeedDecisionGuardian[]
guardiansHeardOn: LocalDate | null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,20 @@
// SPDX-License-Identifier: LGPL-2.1-or-later

import { waitUntilEqual } from '../../../utils'
import { Page, TextInput, Combobox, Element } from '../../../utils/page'
import {
Page,
TextInput,
Combobox,
Element,
Checkbox
} from '../../../utils/page'

export default class AssistanceNeedDecisionEditPage {
#decisionMakerSelect: Element
pedagogicalMotivationInput: TextInput
guardiansHeardOnInput: TextInput
validityEndDateInput: TextInput
validityEndDateNotKnownCheckbox: Checkbox
constructor(private readonly page: Page) {
this.#decisionMakerSelect = page.findByDataQa('decision-maker-select')
this.pedagogicalMotivationInput = new TextInput(
Expand All @@ -17,6 +25,12 @@ export default class AssistanceNeedDecisionEditPage {
this.guardiansHeardOnInput = new TextInput(
page.findByDataQa('guardians-heard-on')
)
this.validityEndDateInput = new TextInput(
page.findByDataQa('validity-end-date')
)
this.validityEndDateNotKnownCheckbox = new Checkbox(
page.findByDataQa('end-date-not-known-checkbox')
)
}

async assertDeciderSelectVisible() {
Expand Down Expand Up @@ -75,6 +89,26 @@ export default class AssistanceNeedDecisionEditPage {
await this.fillEmployee('prepared-by-1', name, title)
}

async toggleAssistanceServicesForTime(): Promise<void> {
await new Checkbox(
this.page.findByDataQa('assistance-services-for-time')
).toggle()
}

async assertValidationMessageShown(
messageId: string,
visible: boolean
): Promise<void> {
if (visible)
await this.page
.findByDataQa(`validation-message-${messageId}`)
.waitUntilVisible()
else
await this.page
.findByDataQa(`validation-message-${messageId}`)
.waitUntilHidden()
}

private async fillEmployee(
selector: string,
name: string,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,22 @@ describe('Assistance Need Decisions - Edit page', () => {
await assistanceNeedDecisionEditPage.assertDeciderSelectVisible()
})

test('Shows info that validity period end date is not mandatory for assistance services for time being', async () => {
await assistanceNeedDecisionEditPage.validityEndDateInput.waitUntilHidden()
await assistanceNeedDecisionEditPage.toggleAssistanceServicesForTime()
await assistanceNeedDecisionEditPage.validityEndDateInput.waitUntilVisible()
await assistanceNeedDecisionEditPage.clickPreviewButton()
await assistanceNeedDecisionEditPage.assertValidationMessageShown(
'endDate',
true
)
await assistanceNeedDecisionEditPage.validityEndDateNotKnownCheckbox.click()
await assistanceNeedDecisionEditPage.assertValidationMessageShown(
'endDate',
false
)
})

test('Info header shows correct information', async () => {
await assistanceNeedDecisionEditPage.assertDecisionStatus('Luonnos')
await assistanceNeedDecisionEditPage.assertDecisionNumber(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,7 @@ export default React.memo(function AssistanceNeedDecisionSection({
LocalDate.todayInHelsinkiTz(),
null
),
endDateNotKnown: false,
viewOfGuardians: null
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -164,9 +164,10 @@ export default React.memo(function AssistanceNeedDecisionEditPage() {
formState?.preparedBy2 &&
!formState.preparedBy2.title &&
'preparator2Title',
// there must be an end date if ASSISTANCE_SERVICES_FOR_TIME is selected
// there must be an end date or end_date_not_known = TRUE if ASSISTANCE_SERVICES_FOR_TIME is selected
formState?.assistanceLevels.includes('ASSISTANCE_SERVICES_FOR_TIME') &&
formState?.validityPeriod.end === null &&
!formState.endDateNotKnown &&
'endDate',
// at least one assistance level must be selected
formState?.assistanceLevels.length === 0 && 'futureLevelOfAssistance'
Expand Down Expand Up @@ -310,7 +311,7 @@ export default React.memo(function AssistanceNeedDecisionEditPage() {
InputInfo
][]
).map(([field, value]) => (
<li key={field}>
<li key={field} data-qa={`validation-message-${field}`}>
{getFieldTranslation(
i18n.childInformation.assistanceNeedDecision,
field
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,7 @@ export default React.memo(function AssistanceNeedDecisionForm({
)

const renderAssistanceLevelMultiCheckbox = useCallback(
(level: AssistanceLevel, label: string) => (
(level: AssistanceLevel, label: string, dataQa: string) => (
<Checkbox
checked={formState.assistanceLevels.includes(level)}
label={label}
Expand All @@ -243,6 +243,7 @@ export default React.memo(function AssistanceNeedDecisionForm({
: formState.assistanceLevels.filter((level2) => level !== level2)
})
}
data-qa={dataQa}
/>
),
[formState, setFieldVal]
Expand Down Expand Up @@ -511,19 +512,23 @@ export default React.memo(function AssistanceNeedDecisionForm({
<Label>{t.futureLevelOfAssistance}</Label>
{renderAssistanceLevelMultiCheckbox(
'SPECIAL_ASSISTANCE',
t.assistanceLevel.specialAssistance
t.assistanceLevel.specialAssistance,
'special-assistance'
)}
{renderAssistanceLevelMultiCheckbox(
'ENHANCED_ASSISTANCE',
t.assistanceLevel.enhancedAssistance
t.assistanceLevel.enhancedAssistance,
'enchanced-assistance'
)}
{renderAssistanceLevelMultiCheckbox(
'ASSISTANCE_SERVICES_FOR_TIME',
t.assistanceLevel.assistanceServicesForTime
t.assistanceLevel.assistanceServicesForTime,
'assistance-services-for-time'
)}
{renderAssistanceLevelMultiCheckbox(
'ASSISTANCE_ENDS',
t.assistanceLevel.assistanceEnds
t.assistanceLevel.assistanceEnds,
'assistance-ends'
)}
{fieldInfos.assistanceLevels &&
fieldInfos.assistanceLevels.status === 'warning' && (
Expand Down Expand Up @@ -556,6 +561,7 @@ export default React.memo(function AssistanceNeedDecisionForm({
info={fieldInfos.startDate}
maxDate={formState.validityPeriod.end ?? undefined}
required
data-qa="validity-start-date"
/>
</FieldWithInfo>

Expand All @@ -573,6 +579,14 @@ export default React.memo(function AssistanceNeedDecisionForm({
hideErrorsBeforeTouched={!fieldInfos.endDate}
info={fieldInfos.endDate}
minDate={formState.validityPeriod.start}
data-qa="validity-end-date"
/>
<Gap size="xs" />
<Checkbox
label={t.endDateNotKnown}
checked={formState.endDateNotKnown}
onChange={(checked) => setFieldVal({ endDateNotKnown: checked })}
data-qa="end-date-not-known-checkbox"
/>
</FixedSpaceColumn>
)}
Expand Down
2 changes: 2 additions & 0 deletions frontend/src/lib-common/generated/api-types/assistanceneed.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ export interface AssistanceNeedDecision {
decisionMade: LocalDate | null
decisionMaker: AssistanceNeedDecisionMaker | null
decisionNumber: number | null
endDateNotKnown: boolean
expertResponsibilities: string | null
guardianInfo: AssistanceNeedDecisionGuardian[]
guardiansHeardOn: LocalDate | null
Expand Down Expand Up @@ -143,6 +144,7 @@ export interface AssistanceNeedDecisionForm {
decisionMade: LocalDate | null
decisionMaker: AssistanceNeedDecisionMakerForm | null
decisionNumber: number | null
endDateNotKnown: boolean
expertResponsibilities: string | null
guardianInfo: AssistanceNeedDecisionGuardian[]
guardiansHeardOn: LocalDate | null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1194,6 +1194,7 @@ export const fi = {
disclaimer:
'Varhaiskasvatuslain 15 e §:n mukaan tämä päätös voidaan panna täytäntöön muutoksenhausta huolimatta.',
decisionNumber: 'Päätösnumero',
endDateNotKnown: 'Tukipalvelun päättymisajankohta ei tiedossa',
statuses: {
DRAFT: 'Luonnos',
NEEDS_WORK: 'Korjattava',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,7 @@ class AssistanceNeedDecisionIntegrationTest : FullApplicationTest(resetDbBeforeE
otherRepresentativeDetails = null,
assistanceLevels = setOf(AssistanceLevel.ENHANCED_ASSISTANCE),
motivationForDecision = "Motivation for decision",
endDateNotKnown = false,
)

@BeforeEach
Expand Down Expand Up @@ -843,6 +844,7 @@ class AssistanceNeedDecisionIntegrationTest : FullApplicationTest(resetDbBeforeE
dateOfBirth = LocalDate.of(2012, 1, 4),
),
annulmentReason = "",
endDateNotKnown = false,
),
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -328,6 +328,7 @@ class EspooBiTest : PureJdbiTest(resetDbBeforeEach = true) {
motivationForDecision = null,
unreadGuardianIds = null,
annulmentReason = "",
endDateNotKnown = false,
),
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -452,6 +452,7 @@ class InactivePeopleCleanupIntegrationTest : PureJdbiTest(resetDbBeforeEach = tr
motivationForDecision = null,
unreadGuardianIds = null,
annulmentReason = "",
endDateNotKnown = false,
),
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ class AssistanceNeedDecisionsReportTest : FullApplicationTest(resetDbBeforeEach
otherRepresentativeDetails = null,
assistanceLevels = setOf(AssistanceLevel.ENHANCED_ASSISTANCE),
motivationForDecision = "Motivation for decision",
endDateNotKnown = false,
)

@BeforeEach
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ class AssistanceNeedDecisionAccessControlTest : AccessControlTest() {
motivationForDecision = null,
unreadGuardianIds = null,
annulmentReason = "",
endDateNotKnown = false,
),
)
}
Expand Down Expand Up @@ -144,6 +145,7 @@ class AssistanceNeedDecisionAccessControlTest : AccessControlTest() {
motivationForDecision = null,
unreadGuardianIds = null,
annulmentReason = "",
endDateNotKnown = false,
),
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ data class AssistanceNeedDecision(
val decisionNumber: Long? = null,
@Nested("child") val child: AssistanceNeedDecisionChild?,
val validityPeriod: DateRange,
val endDateNotKnown: Boolean,
val status: AssistanceNeedDecisionStatus,
val language: OfficialLanguage,
val decisionMade: LocalDate?,
Expand Down Expand Up @@ -54,6 +55,7 @@ data class AssistanceNeedDecision(
AssistanceNeedDecisionForm(
decisionNumber,
validityPeriod,
endDateNotKnown,
status,
language,
decisionMade,
Expand Down Expand Up @@ -84,6 +86,7 @@ data class AssistanceNeedDecision(
data class AssistanceNeedDecisionForm(
val decisionNumber: Long? = null,
val validityPeriod: DateRange,
val endDateNotKnown: Boolean,
val status: AssistanceNeedDecisionStatus,
val language: OfficialLanguage,
val decisionMade: LocalDate?,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ fun Database.Transaction.insertAssistanceNeedDecision(
sql(
"""
INSERT INTO assistance_need_decision (
child_id, process_id, created_by, validity_period, status, language, decision_made, sent_for_decision,
child_id, process_id, created_by, validity_period, end_date_not_known, status, language, decision_made, sent_for_decision,
selected_unit, pedagogical_motivation, structural_motivation_opt_smaller_group,
structural_motivation_opt_special_group, structural_motivation_opt_small_group,
structural_motivation_opt_group_assistant, structural_motivation_opt_child_assistant,
Expand All @@ -43,6 +43,7 @@ VALUES (
${bind(processId)},
${bind(user.id)},
${bind(data.validityPeriod)},
${bind(data.endDateNotKnown)},
${bind(data.status)},
${bind(data.language)},
${bind(data.decisionMade)},
Expand Down Expand Up @@ -112,7 +113,7 @@ fun Database.Read.getAssistanceNeedDecisionById(
createQuery {
sql(
"""
SELECT ad.id, decision_number, child_id, concat(child.first_name, ' ', child.last_name) child_name, validity_period, status,
SELECT ad.id, decision_number, child_id, concat(child.first_name, ' ', child.last_name) child_name, validity_period, end_date_not_known, status,
ad.language, decision_made, sent_for_decision, pedagogical_motivation, structural_motivation_opt_smaller_group,
structural_motivation_opt_special_group, structural_motivation_opt_small_group,
structural_motivation_opt_group_assistant, structural_motivation_opt_child_assistant,
Expand Down Expand Up @@ -161,6 +162,7 @@ fun Database.Transaction.updateAssistanceNeedDecision(
UPDATE assistance_need_decision
SET
validity_period = ${bind(data.validityPeriod)},
end_date_not_known = ${bind(data.endDateNotKnown)},
status = ${bind(data.status)},
language = ${bind(data.language)},
decision_made = ${bind(data.decisionMade)},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -758,7 +758,7 @@ fun Database.Transaction.insertTestAssistanceNeedDecision(
sql(
"""
INSERT INTO assistance_need_decision (
id, decision_number, child_id, validity_period, status, language, decision_made, sent_for_decision,
id, decision_number, child_id, validity_period, end_date_not_known, status, language, decision_made, sent_for_decision,
selected_unit, pedagogical_motivation, structural_motivation_opt_smaller_group,
structural_motivation_opt_special_group, structural_motivation_opt_small_group,
structural_motivation_opt_group_assistant, structural_motivation_opt_child_assistant,
Expand All @@ -771,7 +771,7 @@ INSERT INTO assistance_need_decision (
preparer_1_phone_number, preparer_2_phone_number, unread_guardian_ids, annulment_reason
)
VALUES (
${bind(data.id)}, ${bind(data.decisionNumber)}, ${bind(childId)}, ${bind(data.validityPeriod)}, ${bind(data.status)},
${bind(data.id)}, ${bind(data.decisionNumber)}, ${bind(childId)}, ${bind(data.validityPeriod)}, ${bind(data.endDateNotKnown)}, ${bind(data.status)},
${bind(data.language)}, ${bind(data.decisionMade)}, ${bind(data.sentForDecision)}, ${bind(data.selectedUnit)}, ${bind(data.pedagogicalMotivation)},
${bind(data.structuralMotivationOptions.smallerGroup)}, ${bind(data.structuralMotivationOptions.specialGroup)}, ${bind(data.structuralMotivationOptions.smallGroup)},
${bind(data.structuralMotivationOptions.groupAssistant)}, ${bind(data.structuralMotivationOptions.childAssistant)}, ${bind(data.structuralMotivationOptions.additionalStaff)},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1933,6 +1933,7 @@ data class DevAssistanceNeedDecision(
val decisionNumber: Long?,
val childId: ChildId,
val validityPeriod: DateRange,
val endDateNotKnown: Boolean,
val status: AssistanceNeedDecisionStatus,
val language: OfficialLanguage,
val decisionMade: LocalDate?,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
ALTER TABLE assistance_need_decision
ADD COLUMN end_date_not_known BOOLEAN DEFAULT FALSE NOT NULL;

ALTER TABLE assistance_need_decision
ALTER COLUMN end_date_not_known DROP DEFAULT;
1 change: 1 addition & 0 deletions service/src/main/resources/migrations.txt
Original file line number Diff line number Diff line change
Expand Up @@ -437,3 +437,4 @@ V438__service_applications_unit_feature.sql
V439__income_statement_and_income_indexes.sql
V440__rename_curriculum_tables_to_backup.sql
V441__placement_modification_user_and_timestamp.sql
V442__assistance_need_decision_no_end_date.sql