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

Korjataan sopimuspäivälaskurin näkyvyys #6521

Merged
merged 1 commit into from
Mar 12, 2025
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
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,9 @@ export default React.memo(function AttendanceSummaryTable({
(sn) =>
attendanceSummaryRange.overlaps(
new FiniteDateRange(sn.startDate, sn.endDate)
) && sn.contractDaysPerMonth !== null
) &&
sn.contractDaysPerMonth !== null &&
sn.reservationsEnabled
)}
attendanceSummary={attendanceSummary}
/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,9 @@ import React, { useState } from 'react'

import ResponsiveWholePageCollapsible from 'citizen-frontend/children/ResponsiveWholePageCollapsible'
import { useTranslation } from 'citizen-frontend/localization'
import { combine, Failure, Result, Success, wrapResult } from 'lib-common/api'
import { combine, Failure, Result, Success } from 'lib-common/api'
import { ChildId } from 'lib-common/generated/api-types/shared'
import { useQueryResult } from 'lib-common/query'
import { useApiState } from 'lib-common/utils/useRestApi'
import { constantQuery, useQueryResult } from 'lib-common/query'
import HorizontalLine from 'lib-components/atoms/HorizontalLine'
import ErrorSegment from 'lib-components/atoms/state/ErrorSegment'
import Spinner from 'lib-components/atoms/state/Spinner'
Expand All @@ -22,50 +21,44 @@ import { Gap } from 'lib-components/white-space'
import { featureFlags } from 'lib-customizations/citizen'

import { renderResult } from '../../../async-rendering'
import {
getChildDailyServiceTimes,
getChildServiceNeeds
} from '../../../generated/api-clients/children'
import { childrenQuery, childServiceApplicationsQuery } from '../../queries'

import AttendanceSummaryTable from './AttendanceSummaryTable'
import DailyServiceTimeTable from './DailyServiceTimeTable'
import ServiceApplications from './ServiceApplications'
import ServiceNeedTable from './ServiceNeedTable'
import { childDailyServiceTimesQuery, childServiceNeedsQuery } from './queries'

interface ServiceNeedProps {
childId: ChildId
showServiceTimes: boolean
}

const getChildServiceNeedsResult = wrapResult(getChildServiceNeeds)
const getChildDailyServiceTimesResult = wrapResult(getChildDailyServiceTimes)

export default React.memo(function ServiceNeedAndDailyServiceTimeSection({
childId,
showServiceTimes
}: ServiceNeedProps) {
const t = useTranslation()
const [open, setOpen] = useState(false)
const [serviceNeedsResponse] = useApiState(
() => getChildServiceNeedsResult({ childId }),
[childId]
const serviceNeedsResponse = useQueryResult(
childServiceNeedsQuery({ childId })
)
const [dailyServiceTimesResponse] = useApiState(
() =>
showServiceTimes
? getChildDailyServiceTimesResult({ childId })
: Promise.resolve(Success.of([])),
[childId, showServiceTimes]
const dailyServiceTimesResponse = useQueryResult(
showServiceTimes
? childDailyServiceTimesQuery({ childId })
: constantQuery([])
)

const hasContractDays = serviceNeedsResponse
.map((serviceNeeds) =>
serviceNeeds.some(
({ contractDaysPerMonth }) => contractDaysPerMonth !== null
const showAttendanceSummary =
featureFlags.citizenAttendanceSummary &&
serviceNeedsResponse
.map((serviceNeeds) =>
serviceNeeds.some(
({ contractDaysPerMonth, reservationsEnabled }) =>
contractDaysPerMonth !== null && reservationsEnabled
)
)
)
.getOrElse(false)
.getOrElse(false)

const serviceApplications = useQueryResult(
childServiceApplicationsQuery({ childId })
Expand Down Expand Up @@ -101,7 +94,7 @@ export default React.memo(function ServiceNeedAndDailyServiceTimeSection({
<ServiceNeedTable serviceNeeds={serviceNeeds} />
)
})}
{featureFlags.citizenAttendanceSummary && hasContractDays && (
{showAttendanceSummary && (
<>
<Gap size="s" />
<AttendanceSummaryTable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,14 @@

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

import { getChildAttendanceSummary } from '../../../generated/api-clients/children'
import {
getChildAttendanceSummary,
getChildDailyServiceTimes,
getChildServiceNeeds
} from '../../../generated/api-clients/children'

const q = new Queries()

export const childServiceNeedsQuery = q.query(getChildServiceNeeds)
export const attendanceSummaryQuery = q.query(getChildAttendanceSummary)
export const childDailyServiceTimesQuery = q.query(getChildDailyServiceTimes)
1 change: 1 addition & 0 deletions frontend/src/lib-common/generated/api-types/placement.ts
Original file line number Diff line number Diff line change
Expand Up @@ -267,6 +267,7 @@ export interface PlacementSummary {
childId: PersonId
endDate: LocalDate
id: PlacementId
reservationsEnabled: boolean
startDate: LocalDate
type: PlacementType
unit: Unit
Expand Down
1 change: 1 addition & 0 deletions frontend/src/lib-common/generated/api-types/serviceneed.ts
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,7 @@ export interface ServiceNeedSummary {
contractDaysPerMonth: number | null
endDate: LocalDate
option: ServiceNeedOptionPublicInfo | null
reservationsEnabled: boolean
startDate: LocalDate
unitName: string
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,7 @@ class ChildControllerCitizen(private val accessControl: AccessControl) {
defaultServiceNeedOption?.let { sno -> ServiceNeedOptionPublicInfo.of(sno) },
defaultServiceNeedOption?.contractDaysPerMonth,
placement.unit.name,
placement.reservationsEnabled,
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,5 @@ data class PlacementSummary(
@Nested("unit") val unit: Unit,
val startDate: LocalDate,
val endDate: LocalDate,
val reservationsEnabled: Boolean,
)
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ fun Database.Read.getPlacementSummary(childId: ChildId): List<PlacementSummary>
return createQuery {
sql(
"""
SELECT p.id, p.type, p.child_id, d.id AS unit_id, d.name AS unit_name, p.start_date, p.end_date
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
FROM placement p
JOIN daycare d on p.unit_id = d.id
WHERE p.child_id = ${bind(childId)}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ data class ServiceNeedSummary(
@Nested("option") val option: ServiceNeedOptionPublicInfo?,
val contractDaysPerMonth: Int?,
val unitName: String,
val reservationsEnabled: Boolean,
)

data class ServiceNeedChildRange(val childId: ChildId, val dateRange: FiniteDateRange)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,8 @@ SELECT
sno.valid_from AS option_valid_from,
sno.valid_to AS option_valid_to,
sno.contract_days_per_month,
u.name AS unit_name
u.name AS unit_name,
'RESERVATIONS' = ANY(u.enabled_pilot_features) AS reservations_enabled
FROM service_need sn
JOIN service_need_option sno ON sno.id = sn.option_id
JOIN placement p ON p.id = sn.placement_id
Expand Down