Skip to content

Commit 6e08549

Browse files
authored
Merge pull request #6521 from espoon-voltti/attendance-summary-visibility-fix
Korjataan sopimuspäivälaskurin näkyvyys
2 parents 944bb47 + a556aae commit 6e08549

File tree

10 files changed

+37
-30
lines changed

10 files changed

+37
-30
lines changed

frontend/src/citizen-frontend/children/sections/service-need-and-daily-service-time/AttendanceSummaryTable.tsx

+3-1
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,9 @@ export default React.memo(function AttendanceSummaryTable({
8383
(sn) =>
8484
attendanceSummaryRange.overlaps(
8585
new FiniteDateRange(sn.startDate, sn.endDate)
86-
) && sn.contractDaysPerMonth !== null
86+
) &&
87+
sn.contractDaysPerMonth !== null &&
88+
sn.reservationsEnabled
8789
)}
8890
attendanceSummary={attendanceSummary}
8991
/>

frontend/src/citizen-frontend/children/sections/service-need-and-daily-service-time/ServiceNeedAndDailyServiceTimeSection.tsx

+19-26
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,9 @@ import React, { useState } from 'react'
66

77
import ResponsiveWholePageCollapsible from 'citizen-frontend/children/ResponsiveWholePageCollapsible'
88
import { useTranslation } from 'citizen-frontend/localization'
9-
import { combine, Failure, Result, Success, wrapResult } from 'lib-common/api'
9+
import { combine, Failure, Result, Success } from 'lib-common/api'
1010
import { ChildId } from 'lib-common/generated/api-types/shared'
11-
import { useQueryResult } from 'lib-common/query'
12-
import { useApiState } from 'lib-common/utils/useRestApi'
11+
import { constantQuery, useQueryResult } from 'lib-common/query'
1312
import HorizontalLine from 'lib-components/atoms/HorizontalLine'
1413
import ErrorSegment from 'lib-components/atoms/state/ErrorSegment'
1514
import Spinner from 'lib-components/atoms/state/Spinner'
@@ -22,50 +21,44 @@ import { Gap } from 'lib-components/white-space'
2221
import { featureFlags } from 'lib-customizations/citizen'
2322

2423
import { renderResult } from '../../../async-rendering'
25-
import {
26-
getChildDailyServiceTimes,
27-
getChildServiceNeeds
28-
} from '../../../generated/api-clients/children'
2924
import { childrenQuery, childServiceApplicationsQuery } from '../../queries'
3025

3126
import AttendanceSummaryTable from './AttendanceSummaryTable'
3227
import DailyServiceTimeTable from './DailyServiceTimeTable'
3328
import ServiceApplications from './ServiceApplications'
3429
import ServiceNeedTable from './ServiceNeedTable'
30+
import { childDailyServiceTimesQuery, childServiceNeedsQuery } from './queries'
3531

3632
interface ServiceNeedProps {
3733
childId: ChildId
3834
showServiceTimes: boolean
3935
}
4036

41-
const getChildServiceNeedsResult = wrapResult(getChildServiceNeeds)
42-
const getChildDailyServiceTimesResult = wrapResult(getChildDailyServiceTimes)
43-
4437
export default React.memo(function ServiceNeedAndDailyServiceTimeSection({
4538
childId,
4639
showServiceTimes
4740
}: ServiceNeedProps) {
4841
const t = useTranslation()
4942
const [open, setOpen] = useState(false)
50-
const [serviceNeedsResponse] = useApiState(
51-
() => getChildServiceNeedsResult({ childId }),
52-
[childId]
43+
const serviceNeedsResponse = useQueryResult(
44+
childServiceNeedsQuery({ childId })
5345
)
54-
const [dailyServiceTimesResponse] = useApiState(
55-
() =>
56-
showServiceTimes
57-
? getChildDailyServiceTimesResult({ childId })
58-
: Promise.resolve(Success.of([])),
59-
[childId, showServiceTimes]
46+
const dailyServiceTimesResponse = useQueryResult(
47+
showServiceTimes
48+
? childDailyServiceTimesQuery({ childId })
49+
: constantQuery([])
6050
)
6151

62-
const hasContractDays = serviceNeedsResponse
63-
.map((serviceNeeds) =>
64-
serviceNeeds.some(
65-
({ contractDaysPerMonth }) => contractDaysPerMonth !== null
52+
const showAttendanceSummary =
53+
featureFlags.citizenAttendanceSummary &&
54+
serviceNeedsResponse
55+
.map((serviceNeeds) =>
56+
serviceNeeds.some(
57+
({ contractDaysPerMonth, reservationsEnabled }) =>
58+
contractDaysPerMonth !== null && reservationsEnabled
59+
)
6660
)
67-
)
68-
.getOrElse(false)
61+
.getOrElse(false)
6962

7063
const serviceApplications = useQueryResult(
7164
childServiceApplicationsQuery({ childId })
@@ -101,7 +94,7 @@ export default React.memo(function ServiceNeedAndDailyServiceTimeSection({
10194
<ServiceNeedTable serviceNeeds={serviceNeeds} />
10295
)
10396
})}
104-
{featureFlags.citizenAttendanceSummary && hasContractDays && (
97+
{showAttendanceSummary && (
10598
<>
10699
<Gap size="s" />
107100
<AttendanceSummaryTable

frontend/src/citizen-frontend/children/sections/service-need-and-daily-service-time/queries.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,14 @@
44

55
import { Queries } from 'lib-common/query'
66

7-
import { getChildAttendanceSummary } from '../../../generated/api-clients/children'
7+
import {
8+
getChildAttendanceSummary,
9+
getChildDailyServiceTimes,
10+
getChildServiceNeeds
11+
} from '../../../generated/api-clients/children'
812

913
const q = new Queries()
1014

15+
export const childServiceNeedsQuery = q.query(getChildServiceNeeds)
1116
export const attendanceSummaryQuery = q.query(getChildAttendanceSummary)
17+
export const childDailyServiceTimesQuery = q.query(getChildDailyServiceTimes)

frontend/src/lib-common/generated/api-types/placement.ts

+1
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,7 @@ export interface PlacementSummary {
267267
childId: PersonId
268268
endDate: LocalDate
269269
id: PlacementId
270+
reservationsEnabled: boolean
270271
startDate: LocalDate
271272
type: PlacementType
272273
unit: Unit

frontend/src/lib-common/generated/api-types/serviceneed.ts

+1
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,7 @@ export interface ServiceNeedSummary {
215215
contractDaysPerMonth: number | null
216216
endDate: LocalDate
217217
option: ServiceNeedOptionPublicInfo | null
218+
reservationsEnabled: boolean
218219
startDate: LocalDate
219220
unitName: string
220221
}

service/src/main/kotlin/fi/espoo/evaka/children/ChildControllerCitizen.kt

+1
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ class ChildControllerCitizen(private val accessControl: AccessControl) {
124124
defaultServiceNeedOption?.let { sno -> ServiceNeedOptionPublicInfo.of(sno) },
125125
defaultServiceNeedOption?.contractDaysPerMonth,
126126
placement.unit.name,
127+
placement.reservationsEnabled,
127128
)
128129
}
129130
}

service/src/main/kotlin/fi/espoo/evaka/placement/Placement.kt

+1
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,5 @@ data class PlacementSummary(
3434
@Nested("unit") val unit: Unit,
3535
val startDate: LocalDate,
3636
val endDate: LocalDate,
37+
val reservationsEnabled: Boolean,
3738
)

service/src/main/kotlin/fi/espoo/evaka/placement/PlacementQueries.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ fun Database.Read.getPlacementSummary(childId: ChildId): List<PlacementSummary>
4242
return createQuery {
4343
sql(
4444
"""
45-
SELECT p.id, p.type, p.child_id, d.id AS unit_id, d.name AS unit_name, p.start_date, p.end_date
45+
SELECT p.id, p.type, p.child_id, d.id AS unit_id, d.name AS unit_name, p.start_date, p.end_date, 'RESERVATIONS' = ANY(d.enabled_pilot_features) AS reservations_enabled
4646
FROM placement p
4747
JOIN daycare d on p.unit_id = d.id
4848
WHERE p.child_id = ${bind(childId)}

service/src/main/kotlin/fi/espoo/evaka/serviceneed/ServiceNeed.kt

+1
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ data class ServiceNeedSummary(
6666
@Nested("option") val option: ServiceNeedOptionPublicInfo?,
6767
val contractDaysPerMonth: Int?,
6868
val unitName: String,
69+
val reservationsEnabled: Boolean,
6970
)
7071

7172
data class ServiceNeedChildRange(val childId: ChildId, val dateRange: FiniteDateRange)

service/src/main/kotlin/fi/espoo/evaka/serviceneed/ServiceNeedQueries.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,8 @@ SELECT
7676
sno.valid_from AS option_valid_from,
7777
sno.valid_to AS option_valid_to,
7878
sno.contract_days_per_month,
79-
u.name AS unit_name
79+
u.name AS unit_name,
80+
'RESERVATIONS' = ANY(u.enabled_pilot_features) AS reservations_enabled
8081
FROM service_need sn
8182
JOIN service_need_option sno ON sno.id = sn.option_id
8283
JOIN placement p ON p.id = sn.placement_id

0 commit comments

Comments
 (0)