From 30d60db42f64e54be53c6d8d59053ad4806fa64d Mon Sep 17 00:00:00 2001 From: Joonatan Kuosa Date: Wed, 5 Feb 2025 09:41:59 +0200 Subject: [PATCH] fix: add reservation to series mutation - change to use new mutation to add to series - fix: buffer toggles and rename the form keys --- apps/admin-ui/gql/gql-types.ts | 150 ++++++++++++++++-- apps/admin-ui/src/component/BufferToggles.tsx | 14 +- apps/admin-ui/src/component/EditTimeModal.tsx | 98 ++++-------- .../src/component/ReservationsList.tsx | 3 + .../src/schemas/recurringReservation.ts | 4 +- .../my-units/[id]/CreateReservationModal.tsx | 26 +-- .../recurring/RecurringReservationForm.tsx | 14 +- apps/ui/gql/gql-types.ts | 92 +++++++++-- packages/common/gql/gql-types.ts | 92 +++++++++-- tilavaraus.graphql | 96 ++++++++--- 10 files changed, 429 insertions(+), 160 deletions(-) diff --git a/apps/admin-ui/gql/gql-types.ts b/apps/admin-ui/gql/gql-types.ts index d91e3c5a2a..7bb622d6b7 100644 --- a/apps/admin-ui/gql/gql-types.ts +++ b/apps/admin-ui/gql/gql-types.ts @@ -1178,6 +1178,7 @@ export enum LoginMethod { } export type Mutation = { + addReservationToSeries?: Maybe; adjustReservationTime?: Maybe; approveReservation?: Maybe; cancelAllApplicationSectionReservations?: Maybe; @@ -1224,6 +1225,8 @@ export type Mutation = { setApplicationRoundHandled?: Maybe; setApplicationRoundResultsSent?: Maybe; staffAdjustReservationTime?: Maybe; + staffChangeReservationAccessCode?: Maybe; + staffRepairReservationAccessCode?: Maybe; staffReservationModify?: Maybe; updateApplication?: Maybe; updateApplicationSection?: Maybe; @@ -1244,6 +1247,10 @@ export type Mutation = { updateUnit?: Maybe; }; +export type MutationAddReservationToSeriesArgs = { + input: ReservationSeriesAddMutationInput; +}; + export type MutationAdjustReservationTimeArgs = { input: ReservationAdjustTimeMutationInput; }; @@ -1420,6 +1427,14 @@ export type MutationStaffAdjustReservationTimeArgs = { input: ReservationStaffAdjustTimeMutationInput; }; +export type MutationStaffChangeReservationAccessCodeArgs = { + input: ReservationStaffChangeAccessCodeMutationInput; +}; + +export type MutationStaffRepairReservationAccessCodeArgs = { + input: ReservationStaffRepairAccessCodeMutationInput; +}; + export type MutationStaffReservationModifyArgs = { input: ReservationStaffModifyMutationInput; }; @@ -1642,6 +1657,18 @@ export type PersonSerializerInput = { pk?: InputMaybe; }; +export type PindoraInfoType = { + accessCode: Scalars["String"]["output"]; + accessCodeBeginsAt: Scalars["DateTime"]["output"]; + accessCodeEndsAt: Scalars["DateTime"]["output"]; + accessCodeGeneratedAt: Scalars["DateTime"]["output"]; + accessCodeIsActive: Scalars["Boolean"]["output"]; + accessCodeKeypadUrl: Scalars["String"]["output"]; + accessCodePhoneNumber: Scalars["String"]["output"]; + accessCodeSmsMessage: Scalars["String"]["output"]; + accessCodeSmsNumber: Scalars["String"]["output"]; +}; + /** An enumeration. */ export enum PreferredLanguage { /** Englanti */ @@ -2853,6 +2880,10 @@ export type ReservationMetadataSetNodeEdge = { }; export type ReservationNode = Node & { + accessCodeGeneratedAt?: Maybe; + accessCodeIsActive: Scalars["Boolean"]["output"]; + accessCodeShouldBeActive?: Maybe; + accessType: AccessType; /** Which reservation units' reserveability is affected by this reservation? */ affectedReservationUnits?: Maybe>>; ageGroup?: Maybe; @@ -2888,6 +2919,8 @@ export type ReservationNode = Node & { /** @deprecated Please use to 'paymentOrder' instead. */ order?: Maybe; paymentOrder: Array; + /** Info fetched from Pindora API. Cached per reservation for 30s. Please don't use this when filtering multiple reservations, queries to Pindora are not optimized. */ + pindoraInfo?: Maybe; pk?: Maybe; price?: Maybe; priceNet?: Maybe; @@ -3092,6 +3125,18 @@ export type ReservationRequiresHandlingMutationPayload = { state?: Maybe; }; +export type ReservationSeriesAddMutationInput = { + begin: Scalars["DateTime"]["input"]; + bufferTimeAfter?: InputMaybe; + bufferTimeBefore?: InputMaybe; + end: Scalars["DateTime"]["input"]; + pk: Scalars["Int"]["input"]; +}; + +export type ReservationSeriesAddMutationPayload = { + pk?: Maybe; +}; + export type ReservationSeriesCreateMutationInput = { abilityGroup?: InputMaybe; ageGroup?: InputMaybe; @@ -3184,7 +3229,6 @@ export type ReservationSeriesReservationCreateSerializerInput = { reserveeFirstName?: InputMaybe; reserveeId?: InputMaybe; reserveeIsUnregisteredAssociation?: InputMaybe; - reserveeLanguage?: InputMaybe; reserveeLastName?: InputMaybe; reserveeOrganisationName?: InputMaybe; reserveePhone?: InputMaybe; @@ -3228,6 +3272,16 @@ export type ReservationStaffAdjustTimeMutationPayload = { state?: Maybe; }; +export type ReservationStaffChangeAccessCodeMutationInput = { + pk: Scalars["Int"]["input"]; +}; + +export type ReservationStaffChangeAccessCodeMutationPayload = { + accessCodeGeneratedAt?: Maybe; + accessCodeIsActive?: Maybe; + pk?: Maybe; +}; + export type ReservationStaffCreateMutationInput = { ageGroup?: InputMaybe; applyingForFreeOfCharge?: InputMaybe; @@ -3328,7 +3382,6 @@ export type ReservationStaffModifyMutationInput = { reserveeFirstName?: InputMaybe; reserveeId?: InputMaybe; reserveeIsUnregisteredAssociation?: InputMaybe; - reserveeLanguage?: InputMaybe; reserveeLastName?: InputMaybe; reserveeOrganisationName?: InputMaybe; reserveePhone?: InputMaybe; @@ -3369,7 +3422,6 @@ export type ReservationStaffModifyMutationPayload = { reserveeFirstName?: Maybe; reserveeId?: Maybe; reserveeIsUnregisteredAssociation?: Maybe; - reserveeLanguage?: Maybe; reserveeLastName?: Maybe; reserveeOrganisationName?: Maybe; reserveePhone?: Maybe; @@ -3380,6 +3432,16 @@ export type ReservationStaffModifyMutationPayload = { unitPrice?: Maybe; }; +export type ReservationStaffRepairAccessCodeMutationInput = { + pk: Scalars["Int"]["input"]; +}; + +export type ReservationStaffRepairAccessCodeMutationPayload = { + accessCodeGeneratedAt?: Maybe; + accessCodeIsActive?: Maybe; + pk?: Maybe; +}; + /** An enumeration. */ export enum ReservationStartInterval { /** 15 minuuttia */ @@ -3478,6 +3540,9 @@ export enum ReservationUnitCancellationRuleOrderingChoices { } export type ReservationUnitCreateMutationInput = { + accessType?: InputMaybe; + accessTypeEndDate?: InputMaybe; + accessTypeStartDate?: InputMaybe; allowReservationsWithoutOpeningHours?: InputMaybe< Scalars["Boolean"]["input"] >; @@ -3557,6 +3622,9 @@ export type ReservationUnitCreateMutationInput = { }; export type ReservationUnitCreateMutationPayload = { + accessType?: Maybe; + accessTypeEndDate?: Maybe; + accessTypeStartDate?: Maybe; allowReservationsWithoutOpeningHours?: Maybe; applicationRoundTimeSlots?: Maybe>>; authentication?: Maybe; @@ -4068,6 +4136,9 @@ export enum ReservationUnitTypeOrderingChoices { } export type ReservationUnitUpdateMutationInput = { + accessType?: InputMaybe; + accessTypeEndDate?: InputMaybe; + accessTypeStartDate?: InputMaybe; allowReservationsWithoutOpeningHours?: InputMaybe< Scalars["Boolean"]["input"] >; @@ -4147,6 +4218,9 @@ export type ReservationUnitUpdateMutationInput = { }; export type ReservationUnitUpdateMutationPayload = { + accessType?: Maybe; + accessTypeEndDate?: Maybe; + accessTypeStartDate?: Maybe; allowReservationsWithoutOpeningHours?: Maybe; applicationRoundTimeSlots?: Maybe>>; authentication?: Maybe; @@ -4290,17 +4364,6 @@ export type ReservationWorkingMemoMutationPayload = { workingMemo?: Maybe; }; -/** An enumeration. */ -export enum ReserveeLanguage { - A = "A_", - /** Englanti */ - En = "EN", - /** Suomi */ - Fi = "FI", - /** Ruotsi */ - Sv = "SV", -} - /** An enumeration. */ export enum ReserveeType { /** Yritys */ @@ -5055,7 +5118,6 @@ export type UpdateReservationSeriesReservationUpdateSerializerInput = { reserveeFirstName?: InputMaybe; reserveeId?: InputMaybe; reserveeIsUnregisteredAssociation?: InputMaybe; - reserveeLanguage?: InputMaybe; reserveeLastName?: InputMaybe; reserveeOrganisationName?: InputMaybe; reserveePhone?: InputMaybe; @@ -6094,6 +6156,14 @@ export type StaffAdjustReservationTimeMutation = { } | null; }; +export type AddReservationToSeriesMutationVariables = Exact<{ + input: ReservationSeriesAddMutationInput; +}>; + +export type AddReservationToSeriesMutation = { + addReservationToSeries?: { pk?: number | null } | null; +}; + export type ChangeReservationTimeFragment = { id: string; pk?: number | null; @@ -10292,6 +10362,56 @@ export type StaffAdjustReservationTimeMutationOptions = StaffAdjustReservationTimeMutation, StaffAdjustReservationTimeMutationVariables >; +export const AddReservationToSeriesDocument = gql` + mutation AddReservationToSeries($input: ReservationSeriesAddMutationInput!) { + addReservationToSeries(input: $input) { + pk + } + } +`; +export type AddReservationToSeriesMutationFn = Apollo.MutationFunction< + AddReservationToSeriesMutation, + AddReservationToSeriesMutationVariables +>; + +/** + * __useAddReservationToSeriesMutation__ + * + * To run a mutation, you first call `useAddReservationToSeriesMutation` within a React component and pass it any options that fit your needs. + * When your component renders, `useAddReservationToSeriesMutation` returns a tuple that includes: + * - A mutate function that you can call at any time to execute the mutation + * - An object with fields that represent the current status of the mutation's execution + * + * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; + * + * @example + * const [addReservationToSeriesMutation, { data, loading, error }] = useAddReservationToSeriesMutation({ + * variables: { + * input: // value for 'input' + * }, + * }); + */ +export function useAddReservationToSeriesMutation( + baseOptions?: Apollo.MutationHookOptions< + AddReservationToSeriesMutation, + AddReservationToSeriesMutationVariables + > +) { + const options = { ...defaultOptions, ...baseOptions }; + return Apollo.useMutation< + AddReservationToSeriesMutation, + AddReservationToSeriesMutationVariables + >(AddReservationToSeriesDocument, options); +} +export type AddReservationToSeriesMutationHookResult = ReturnType< + typeof useAddReservationToSeriesMutation +>; +export type AddReservationToSeriesMutationResult = + Apollo.MutationResult; +export type AddReservationToSeriesMutationOptions = Apollo.BaseMutationOptions< + AddReservationToSeriesMutation, + AddReservationToSeriesMutationVariables +>; export const UpdateReservationWorkingMemoDocument = gql` mutation UpdateReservationWorkingMemo($pk: Int!, $workingMemo: String!) { updateReservationWorkingMemo( diff --git a/apps/admin-ui/src/component/BufferToggles.tsx b/apps/admin-ui/src/component/BufferToggles.tsx index 99f4a0825e..90e767a3ac 100644 --- a/apps/admin-ui/src/component/BufferToggles.tsx +++ b/apps/admin-ui/src/component/BufferToggles.tsx @@ -5,7 +5,7 @@ import { useTranslation } from "react-i18next"; import { Flex } from "common/styles/util"; type BufferControllerProps = { - name: "bufferTimeBefore" | "bufferTimeAfter"; + name: "enableBufferTimeBefore" | "enableBufferTimeAfter"; seconds: number; control: ReturnType["control"]; }; @@ -13,6 +13,10 @@ type BufferControllerProps = { function BufferController({ name, seconds, control }: BufferControllerProps) { const { t } = useTranslation(); + const trKeyName = name.replace("enableB", "b"); + const label = t(`reservationApplication:buffers.${trKeyName}`, { + minutes: seconds / 60, + }); return ( { onChange(!value); @@ -57,14 +59,14 @@ export function BufferToggles({ {before !== 0 && ( )} {after !== 0 && ( diff --git a/apps/admin-ui/src/component/EditTimeModal.tsx b/apps/admin-ui/src/component/EditTimeModal.tsx index 7f7e9f9d2a..7f9db4835c 100644 --- a/apps/admin-ui/src/component/EditTimeModal.tsx +++ b/apps/admin-ui/src/component/EditTimeModal.tsx @@ -14,10 +14,10 @@ import { type TFunction } from "i18next"; import { type ChangeReservationTimeFragment, ReservationTypeChoice, - useCreateStaffReservationMutation, useStaffAdjustReservationTimeMutation, type ReservationQuery, - type ReservationStaffCreateMutationInput, + type ReservationSeriesAddMutationInput, + useAddReservationToSeriesMutation, } from "@gql/gql-types"; import { FormProvider, UseFormReturn, useForm } from "react-hook-form"; import { differenceInMinutes, format } from "date-fns"; @@ -30,10 +30,14 @@ import { ControlledTimeInput } from "@/component/ControlledTimeInput"; import { ControlledDateInput } from "common/src/components/form"; import { BufferToggles } from "@/component/BufferToggles"; import { useCheckCollisions } from "@/hooks"; -import { getNormalizedInterval, parseDateTimeSafe } from "@/helpers"; +import { + getBufferTime, + getNormalizedInterval, + parseDateTimeSafe, +} from "@/helpers"; import { formatDateTimeRange } from "@/common/util"; import { gql } from "@apollo/client"; -import { filterNonNullable, pick } from "common/src/helpers"; +import { filterNonNullable } from "common/src/helpers"; import { errorToast, successToast } from "common/src/common/toast"; const StyledForm = styled.form` @@ -110,6 +114,14 @@ export const CHANGE_RESERVATION_TIME = gql` } `; +export const ADD_RESERVATION_TO_SERIES = gql` + mutation AddReservationToSeries($input: ReservationSeriesAddMutationInput!) { + addReservationToSeries(input: $input) { + pk + } + } +`; + export const CHANGE_RESERVATION_TIME_QUERY_FRAGMENT = gql` fragment ChangeReservationTime on ReservationNode { id @@ -196,14 +208,8 @@ function DialogContent({ start, end, buffers: { - before: - formType !== ReservationTypeChoice.Blocked && bufferTimeBefore - ? bufferTimeBefore - : 0, - after: - formType !== ReservationTypeChoice.Blocked && bufferTimeAfter - ? bufferTimeAfter - : 0, + before: getBufferTime(bufferTimeBefore, formType), + after: getBufferTime(bufferTimeAfter, formType), }, reservationType: formType, }); @@ -305,8 +311,12 @@ function DialogContent({ ); } +type ReservationToCopyT = Pick< + NonNullable, + "type" | "reservationUnits" | "recurringReservation" +>; export type NewReservationModalProps = CommonProps & { - reservationToCopy: ReservationQuery["reservation"]; + reservationToCopy: ReservationToCopyT; onAccept: () => void; }; @@ -318,7 +328,6 @@ export function NewReservationModal({ const { t } = useTranslation(); const { isOpen } = useModal(); - const { type } = reservationToCopy ?? {}; const reservationUnit = reservationToCopy?.reservationUnits?.[0]; // NOTE 0 => buffer disabled for this reservation, undefined => no buffers selected @@ -335,74 +344,29 @@ export function NewReservationModal({ defaultValues: { enableBufferTimeAfter: true, enableBufferTimeBefore: true, - // FIXME this is incorrect (they are created as part of a series) - // so we need to use the type from other reservations in that series - // TODO we can remove the type completely? correct? + // NOTE type is required because it overrides buffer times type: reservationToCopy?.type ?? ReservationTypeChoice.Staff, }, }); - // TODO for the create mutation we need to pass in at least the recurringReservationPk (from another reservation in the same series) - // but do we need to pass in also the metadata? i.e. copy all the fields from another reservation? - const [create] = useCreateStaffReservationMutation(); + const [create] = useAddReservationToSeriesMutation(); function createInput({ begin, end, buffers, - }: MutationValues): ReservationStaffCreateMutationInput { - if (reservationToCopy == null) { - throw new Error("reservationToCopy missing"); - } - const keys = [ - "name", - "description", - "applyingForFreeOfCharge", - "billingAddressCity", - "billingAddressStreet", - "billingAddressZip", - "billingEmail", - "billingFirstName", - "billingLastName", - "billingPhone", - "freeOfChargeReason", - "numPersons", - "reserveeAddressCity", - "reserveeAddressStreet", - "reserveeAddressZip", - "reserveeEmail", - "reserveeFirstName", - "reserveeId", - "reserveeIsUnregisteredAssociation", - "reserveeLastName", - "reserveeOrganisationName", - "reserveePhone", - ] as const; - const homeCity = reservationToCopy.homeCity?.pk; - const purpose = reservationToCopy.purpose?.pk; - const ageGroup = reservationToCopy.ageGroup?.pk; - const metadata = pick(reservationToCopy, keys); - if (!reservationUnit?.pk) { - throw new Error("reservation unit pk missing"); - } - if (type == null) { - throw new Error("type missing"); + }: MutationValues): ReservationSeriesAddMutationInput { + if (reservationToCopy?.recurringReservation?.pk == null) { + throw new Error("recurring reservation pk missing"); } return { - ...metadata, + pk: reservationToCopy?.recurringReservation?.pk, ...convertToApiFormat(begin, end), - homeCity, - purpose, - ageGroup, - bufferTimeAfter: buffers.after, - bufferTimeBefore: buffers.before, - reservationUnit: reservationUnit.pk, - type, + bufferTimeAfter: buffers.after?.toString(), + bufferTimeBefore: buffers.before?.toString(), }; } - // TODO pass the type as a prop? it's available in the form - // but it doesn't need to be? const mutate = async (values: MutationValues) => { await create({ variables: { diff --git a/apps/admin-ui/src/component/ReservationsList.tsx b/apps/admin-ui/src/component/ReservationsList.tsx index 8327087b31..1fd0d6fef0 100644 --- a/apps/admin-ui/src/component/ReservationsList.tsx +++ b/apps/admin-ui/src/component/ReservationsList.tsx @@ -173,6 +173,9 @@ function AddNewReservationButton({ }; const handleClick = () => { + if (reservationToCopy == null) { + return; + } setModalContent( { + const onSubmit = async ({ + enableBufferTimeBefore, + enableBufferTimeAfter, + ...data + }: FormValues) => { setLocalError(null); const skipDates = removedReservations @@ -220,10 +224,10 @@ function RecurringReservationForm({ } const buffers = { - before: data.bufferTimeBefore + before: enableBufferTimeBefore ? getBufferTime(reservationUnit.bufferTimeBefore, data.type) : 0, - after: data.bufferTimeAfter + after: enableBufferTimeAfter ? getBufferTime(reservationUnit.bufferTimeAfter, data.type) : 0, }; diff --git a/apps/ui/gql/gql-types.ts b/apps/ui/gql/gql-types.ts index c78da7a490..46320467ac 100644 --- a/apps/ui/gql/gql-types.ts +++ b/apps/ui/gql/gql-types.ts @@ -1178,6 +1178,7 @@ export enum LoginMethod { } export type Mutation = { + addReservationToSeries?: Maybe; adjustReservationTime?: Maybe; approveReservation?: Maybe; cancelAllApplicationSectionReservations?: Maybe; @@ -1224,6 +1225,8 @@ export type Mutation = { setApplicationRoundHandled?: Maybe; setApplicationRoundResultsSent?: Maybe; staffAdjustReservationTime?: Maybe; + staffChangeReservationAccessCode?: Maybe; + staffRepairReservationAccessCode?: Maybe; staffReservationModify?: Maybe; updateApplication?: Maybe; updateApplicationSection?: Maybe; @@ -1244,6 +1247,10 @@ export type Mutation = { updateUnit?: Maybe; }; +export type MutationAddReservationToSeriesArgs = { + input: ReservationSeriesAddMutationInput; +}; + export type MutationAdjustReservationTimeArgs = { input: ReservationAdjustTimeMutationInput; }; @@ -1420,6 +1427,14 @@ export type MutationStaffAdjustReservationTimeArgs = { input: ReservationStaffAdjustTimeMutationInput; }; +export type MutationStaffChangeReservationAccessCodeArgs = { + input: ReservationStaffChangeAccessCodeMutationInput; +}; + +export type MutationStaffRepairReservationAccessCodeArgs = { + input: ReservationStaffRepairAccessCodeMutationInput; +}; + export type MutationStaffReservationModifyArgs = { input: ReservationStaffModifyMutationInput; }; @@ -1642,6 +1657,18 @@ export type PersonSerializerInput = { pk?: InputMaybe; }; +export type PindoraInfoType = { + accessCode: Scalars["String"]["output"]; + accessCodeBeginsAt: Scalars["DateTime"]["output"]; + accessCodeEndsAt: Scalars["DateTime"]["output"]; + accessCodeGeneratedAt: Scalars["DateTime"]["output"]; + accessCodeIsActive: Scalars["Boolean"]["output"]; + accessCodeKeypadUrl: Scalars["String"]["output"]; + accessCodePhoneNumber: Scalars["String"]["output"]; + accessCodeSmsMessage: Scalars["String"]["output"]; + accessCodeSmsNumber: Scalars["String"]["output"]; +}; + /** An enumeration. */ export enum PreferredLanguage { /** Englanti */ @@ -2853,6 +2880,10 @@ export type ReservationMetadataSetNodeEdge = { }; export type ReservationNode = Node & { + accessCodeGeneratedAt?: Maybe; + accessCodeIsActive: Scalars["Boolean"]["output"]; + accessCodeShouldBeActive?: Maybe; + accessType: AccessType; /** Which reservation units' reserveability is affected by this reservation? */ affectedReservationUnits?: Maybe>>; ageGroup?: Maybe; @@ -2888,6 +2919,8 @@ export type ReservationNode = Node & { /** @deprecated Please use to 'paymentOrder' instead. */ order?: Maybe; paymentOrder: Array; + /** Info fetched from Pindora API. Cached per reservation for 30s. Please don't use this when filtering multiple reservations, queries to Pindora are not optimized. */ + pindoraInfo?: Maybe; pk?: Maybe; price?: Maybe; priceNet?: Maybe; @@ -3092,6 +3125,18 @@ export type ReservationRequiresHandlingMutationPayload = { state?: Maybe; }; +export type ReservationSeriesAddMutationInput = { + begin: Scalars["DateTime"]["input"]; + bufferTimeAfter?: InputMaybe; + bufferTimeBefore?: InputMaybe; + end: Scalars["DateTime"]["input"]; + pk: Scalars["Int"]["input"]; +}; + +export type ReservationSeriesAddMutationPayload = { + pk?: Maybe; +}; + export type ReservationSeriesCreateMutationInput = { abilityGroup?: InputMaybe; ageGroup?: InputMaybe; @@ -3184,7 +3229,6 @@ export type ReservationSeriesReservationCreateSerializerInput = { reserveeFirstName?: InputMaybe; reserveeId?: InputMaybe; reserveeIsUnregisteredAssociation?: InputMaybe; - reserveeLanguage?: InputMaybe; reserveeLastName?: InputMaybe; reserveeOrganisationName?: InputMaybe; reserveePhone?: InputMaybe; @@ -3228,6 +3272,16 @@ export type ReservationStaffAdjustTimeMutationPayload = { state?: Maybe; }; +export type ReservationStaffChangeAccessCodeMutationInput = { + pk: Scalars["Int"]["input"]; +}; + +export type ReservationStaffChangeAccessCodeMutationPayload = { + accessCodeGeneratedAt?: Maybe; + accessCodeIsActive?: Maybe; + pk?: Maybe; +}; + export type ReservationStaffCreateMutationInput = { ageGroup?: InputMaybe; applyingForFreeOfCharge?: InputMaybe; @@ -3328,7 +3382,6 @@ export type ReservationStaffModifyMutationInput = { reserveeFirstName?: InputMaybe; reserveeId?: InputMaybe; reserveeIsUnregisteredAssociation?: InputMaybe; - reserveeLanguage?: InputMaybe; reserveeLastName?: InputMaybe; reserveeOrganisationName?: InputMaybe; reserveePhone?: InputMaybe; @@ -3369,7 +3422,6 @@ export type ReservationStaffModifyMutationPayload = { reserveeFirstName?: Maybe; reserveeId?: Maybe; reserveeIsUnregisteredAssociation?: Maybe; - reserveeLanguage?: Maybe; reserveeLastName?: Maybe; reserveeOrganisationName?: Maybe; reserveePhone?: Maybe; @@ -3380,6 +3432,16 @@ export type ReservationStaffModifyMutationPayload = { unitPrice?: Maybe; }; +export type ReservationStaffRepairAccessCodeMutationInput = { + pk: Scalars["Int"]["input"]; +}; + +export type ReservationStaffRepairAccessCodeMutationPayload = { + accessCodeGeneratedAt?: Maybe; + accessCodeIsActive?: Maybe; + pk?: Maybe; +}; + /** An enumeration. */ export enum ReservationStartInterval { /** 15 minuuttia */ @@ -3478,6 +3540,9 @@ export enum ReservationUnitCancellationRuleOrderingChoices { } export type ReservationUnitCreateMutationInput = { + accessType?: InputMaybe; + accessTypeEndDate?: InputMaybe; + accessTypeStartDate?: InputMaybe; allowReservationsWithoutOpeningHours?: InputMaybe< Scalars["Boolean"]["input"] >; @@ -3557,6 +3622,9 @@ export type ReservationUnitCreateMutationInput = { }; export type ReservationUnitCreateMutationPayload = { + accessType?: Maybe; + accessTypeEndDate?: Maybe; + accessTypeStartDate?: Maybe; allowReservationsWithoutOpeningHours?: Maybe; applicationRoundTimeSlots?: Maybe>>; authentication?: Maybe; @@ -4068,6 +4136,9 @@ export enum ReservationUnitTypeOrderingChoices { } export type ReservationUnitUpdateMutationInput = { + accessType?: InputMaybe; + accessTypeEndDate?: InputMaybe; + accessTypeStartDate?: InputMaybe; allowReservationsWithoutOpeningHours?: InputMaybe< Scalars["Boolean"]["input"] >; @@ -4147,6 +4218,9 @@ export type ReservationUnitUpdateMutationInput = { }; export type ReservationUnitUpdateMutationPayload = { + accessType?: Maybe; + accessTypeEndDate?: Maybe; + accessTypeStartDate?: Maybe; allowReservationsWithoutOpeningHours?: Maybe; applicationRoundTimeSlots?: Maybe>>; authentication?: Maybe; @@ -4290,17 +4364,6 @@ export type ReservationWorkingMemoMutationPayload = { workingMemo?: Maybe; }; -/** An enumeration. */ -export enum ReserveeLanguage { - A = "A_", - /** Englanti */ - En = "EN", - /** Suomi */ - Fi = "FI", - /** Ruotsi */ - Sv = "SV", -} - /** An enumeration. */ export enum ReserveeType { /** Yritys */ @@ -5055,7 +5118,6 @@ export type UpdateReservationSeriesReservationUpdateSerializerInput = { reserveeFirstName?: InputMaybe; reserveeId?: InputMaybe; reserveeIsUnregisteredAssociation?: InputMaybe; - reserveeLanguage?: InputMaybe; reserveeLastName?: InputMaybe; reserveeOrganisationName?: InputMaybe; reserveePhone?: InputMaybe; diff --git a/packages/common/gql/gql-types.ts b/packages/common/gql/gql-types.ts index 359ee23da4..95298d9cc8 100644 --- a/packages/common/gql/gql-types.ts +++ b/packages/common/gql/gql-types.ts @@ -1178,6 +1178,7 @@ export enum LoginMethod { } export type Mutation = { + addReservationToSeries?: Maybe; adjustReservationTime?: Maybe; approveReservation?: Maybe; cancelAllApplicationSectionReservations?: Maybe; @@ -1224,6 +1225,8 @@ export type Mutation = { setApplicationRoundHandled?: Maybe; setApplicationRoundResultsSent?: Maybe; staffAdjustReservationTime?: Maybe; + staffChangeReservationAccessCode?: Maybe; + staffRepairReservationAccessCode?: Maybe; staffReservationModify?: Maybe; updateApplication?: Maybe; updateApplicationSection?: Maybe; @@ -1244,6 +1247,10 @@ export type Mutation = { updateUnit?: Maybe; }; +export type MutationAddReservationToSeriesArgs = { + input: ReservationSeriesAddMutationInput; +}; + export type MutationAdjustReservationTimeArgs = { input: ReservationAdjustTimeMutationInput; }; @@ -1420,6 +1427,14 @@ export type MutationStaffAdjustReservationTimeArgs = { input: ReservationStaffAdjustTimeMutationInput; }; +export type MutationStaffChangeReservationAccessCodeArgs = { + input: ReservationStaffChangeAccessCodeMutationInput; +}; + +export type MutationStaffRepairReservationAccessCodeArgs = { + input: ReservationStaffRepairAccessCodeMutationInput; +}; + export type MutationStaffReservationModifyArgs = { input: ReservationStaffModifyMutationInput; }; @@ -1642,6 +1657,18 @@ export type PersonSerializerInput = { pk?: InputMaybe; }; +export type PindoraInfoType = { + accessCode: Scalars["String"]["output"]; + accessCodeBeginsAt: Scalars["DateTime"]["output"]; + accessCodeEndsAt: Scalars["DateTime"]["output"]; + accessCodeGeneratedAt: Scalars["DateTime"]["output"]; + accessCodeIsActive: Scalars["Boolean"]["output"]; + accessCodeKeypadUrl: Scalars["String"]["output"]; + accessCodePhoneNumber: Scalars["String"]["output"]; + accessCodeSmsMessage: Scalars["String"]["output"]; + accessCodeSmsNumber: Scalars["String"]["output"]; +}; + /** An enumeration. */ export enum PreferredLanguage { /** Englanti */ @@ -2853,6 +2880,10 @@ export type ReservationMetadataSetNodeEdge = { }; export type ReservationNode = Node & { + accessCodeGeneratedAt?: Maybe; + accessCodeIsActive: Scalars["Boolean"]["output"]; + accessCodeShouldBeActive?: Maybe; + accessType: AccessType; /** Which reservation units' reserveability is affected by this reservation? */ affectedReservationUnits?: Maybe>>; ageGroup?: Maybe; @@ -2888,6 +2919,8 @@ export type ReservationNode = Node & { /** @deprecated Please use to 'paymentOrder' instead. */ order?: Maybe; paymentOrder: Array; + /** Info fetched from Pindora API. Cached per reservation for 30s. Please don't use this when filtering multiple reservations, queries to Pindora are not optimized. */ + pindoraInfo?: Maybe; pk?: Maybe; price?: Maybe; priceNet?: Maybe; @@ -3092,6 +3125,18 @@ export type ReservationRequiresHandlingMutationPayload = { state?: Maybe; }; +export type ReservationSeriesAddMutationInput = { + begin: Scalars["DateTime"]["input"]; + bufferTimeAfter?: InputMaybe; + bufferTimeBefore?: InputMaybe; + end: Scalars["DateTime"]["input"]; + pk: Scalars["Int"]["input"]; +}; + +export type ReservationSeriesAddMutationPayload = { + pk?: Maybe; +}; + export type ReservationSeriesCreateMutationInput = { abilityGroup?: InputMaybe; ageGroup?: InputMaybe; @@ -3184,7 +3229,6 @@ export type ReservationSeriesReservationCreateSerializerInput = { reserveeFirstName?: InputMaybe; reserveeId?: InputMaybe; reserveeIsUnregisteredAssociation?: InputMaybe; - reserveeLanguage?: InputMaybe; reserveeLastName?: InputMaybe; reserveeOrganisationName?: InputMaybe; reserveePhone?: InputMaybe; @@ -3228,6 +3272,16 @@ export type ReservationStaffAdjustTimeMutationPayload = { state?: Maybe; }; +export type ReservationStaffChangeAccessCodeMutationInput = { + pk: Scalars["Int"]["input"]; +}; + +export type ReservationStaffChangeAccessCodeMutationPayload = { + accessCodeGeneratedAt?: Maybe; + accessCodeIsActive?: Maybe; + pk?: Maybe; +}; + export type ReservationStaffCreateMutationInput = { ageGroup?: InputMaybe; applyingForFreeOfCharge?: InputMaybe; @@ -3328,7 +3382,6 @@ export type ReservationStaffModifyMutationInput = { reserveeFirstName?: InputMaybe; reserveeId?: InputMaybe; reserveeIsUnregisteredAssociation?: InputMaybe; - reserveeLanguage?: InputMaybe; reserveeLastName?: InputMaybe; reserveeOrganisationName?: InputMaybe; reserveePhone?: InputMaybe; @@ -3369,7 +3422,6 @@ export type ReservationStaffModifyMutationPayload = { reserveeFirstName?: Maybe; reserveeId?: Maybe; reserveeIsUnregisteredAssociation?: Maybe; - reserveeLanguage?: Maybe; reserveeLastName?: Maybe; reserveeOrganisationName?: Maybe; reserveePhone?: Maybe; @@ -3380,6 +3432,16 @@ export type ReservationStaffModifyMutationPayload = { unitPrice?: Maybe; }; +export type ReservationStaffRepairAccessCodeMutationInput = { + pk: Scalars["Int"]["input"]; +}; + +export type ReservationStaffRepairAccessCodeMutationPayload = { + accessCodeGeneratedAt?: Maybe; + accessCodeIsActive?: Maybe; + pk?: Maybe; +}; + /** An enumeration. */ export enum ReservationStartInterval { /** 15 minuuttia */ @@ -3478,6 +3540,9 @@ export enum ReservationUnitCancellationRuleOrderingChoices { } export type ReservationUnitCreateMutationInput = { + accessType?: InputMaybe; + accessTypeEndDate?: InputMaybe; + accessTypeStartDate?: InputMaybe; allowReservationsWithoutOpeningHours?: InputMaybe< Scalars["Boolean"]["input"] >; @@ -3557,6 +3622,9 @@ export type ReservationUnitCreateMutationInput = { }; export type ReservationUnitCreateMutationPayload = { + accessType?: Maybe; + accessTypeEndDate?: Maybe; + accessTypeStartDate?: Maybe; allowReservationsWithoutOpeningHours?: Maybe; applicationRoundTimeSlots?: Maybe>>; authentication?: Maybe; @@ -4068,6 +4136,9 @@ export enum ReservationUnitTypeOrderingChoices { } export type ReservationUnitUpdateMutationInput = { + accessType?: InputMaybe; + accessTypeEndDate?: InputMaybe; + accessTypeStartDate?: InputMaybe; allowReservationsWithoutOpeningHours?: InputMaybe< Scalars["Boolean"]["input"] >; @@ -4147,6 +4218,9 @@ export type ReservationUnitUpdateMutationInput = { }; export type ReservationUnitUpdateMutationPayload = { + accessType?: Maybe; + accessTypeEndDate?: Maybe; + accessTypeStartDate?: Maybe; allowReservationsWithoutOpeningHours?: Maybe; applicationRoundTimeSlots?: Maybe>>; authentication?: Maybe; @@ -4290,17 +4364,6 @@ export type ReservationWorkingMemoMutationPayload = { workingMemo?: Maybe; }; -/** An enumeration. */ -export enum ReserveeLanguage { - A = "A_", - /** Englanti */ - En = "EN", - /** Suomi */ - Fi = "FI", - /** Ruotsi */ - Sv = "SV", -} - /** An enumeration. */ export enum ReserveeType { /** Yritys */ @@ -5055,7 +5118,6 @@ export type UpdateReservationSeriesReservationUpdateSerializerInput = { reserveeFirstName?: InputMaybe; reserveeId?: InputMaybe; reserveeIsUnregisteredAssociation?: InputMaybe; - reserveeLanguage?: InputMaybe; reserveeLastName?: InputMaybe; reserveeOrganisationName?: InputMaybe; reserveePhone?: InputMaybe; diff --git a/tilavaraus.graphql b/tilavaraus.graphql index f0ca236b72..388039aa45 100644 --- a/tilavaraus.graphql +++ b/tilavaraus.graphql @@ -1355,6 +1355,9 @@ enum LoginMethod { } type Mutation { + addReservationToSeries( + input: ReservationSeriesAddMutationInput! + ): ReservationSeriesAddMutationPayload adjustReservationTime( input: ReservationAdjustTimeMutationInput! ): ReservationAdjustTimeMutationPayload @@ -1485,6 +1488,12 @@ type Mutation { staffAdjustReservationTime( input: ReservationStaffAdjustTimeMutationInput! ): ReservationStaffAdjustTimeMutationPayload + staffChangeReservationAccessCode( + input: ReservationStaffChangeAccessCodeMutationInput! + ): ReservationStaffChangeAccessCodeMutationPayload + staffRepairReservationAccessCode( + input: ReservationStaffRepairAccessCodeMutationInput! + ): ReservationStaffRepairAccessCodeMutationPayload staffReservationModify( input: ReservationStaffModifyMutationInput! ): ReservationStaffModifyMutationPayload @@ -1731,6 +1740,18 @@ input PersonSerializerInput { pk: Int } +type PindoraInfoType { + accessCode: String! + accessCodeBeginsAt: DateTime! + accessCodeEndsAt: DateTime! + accessCodeGeneratedAt: DateTime! + accessCodeIsActive: Boolean! + accessCodeKeypadUrl: String! + accessCodePhoneNumber: String! + accessCodeSmsMessage: String! + accessCodeSmsNumber: String! +} + """ An enumeration. """ @@ -3115,6 +3136,10 @@ type ReservationMetadataSetNodeEdge { } type ReservationNode implements Node { + accessCodeGeneratedAt: DateTime + accessCodeIsActive: Boolean! + accessCodeShouldBeActive: Boolean + accessType: AccessType! """ Which reservation units' reserveability is affected by this reservation? """ @@ -3154,6 +3179,10 @@ type ReservationNode implements Node { order: PaymentOrderNode @deprecated(reason: "Please use to 'paymentOrder' instead.") paymentOrder: [PaymentOrderNode!]! + """ + Info fetched from Pindora API. Cached per reservation for 30s. Please don't use this when filtering multiple reservations, queries to Pindora are not optimized. + """ + pindoraInfo: PindoraInfoType pk: Int price: Decimal priceNet: Decimal @@ -3388,6 +3417,18 @@ type ReservationRequiresHandlingMutationPayload { state: ReservationStateChoice } +input ReservationSeriesAddMutationInput { + begin: DateTime! + bufferTimeAfter: String + bufferTimeBefore: String + end: DateTime! + pk: Int! +} + +type ReservationSeriesAddMutationPayload { + pk: Int +} + input ReservationSeriesCreateMutationInput { abilityGroup: Int ageGroup: Int @@ -3480,7 +3521,6 @@ input ReservationSeriesReservationCreateSerializerInput { reserveeFirstName: String reserveeId: String reserveeIsUnregisteredAssociation: Boolean - reserveeLanguage: ReserveeLanguage reserveeLastName: String reserveeOrganisationName: String reserveePhone: String @@ -3524,6 +3564,16 @@ type ReservationStaffAdjustTimeMutationPayload { state: ReservationStateChoice } +input ReservationStaffChangeAccessCodeMutationInput { + pk: Int! +} + +type ReservationStaffChangeAccessCodeMutationPayload { + accessCodeGeneratedAt: DateTime + accessCodeIsActive: Boolean + pk: Int +} + input ReservationStaffCreateMutationInput { ageGroup: Int applyingForFreeOfCharge: Boolean @@ -3624,7 +3674,6 @@ input ReservationStaffModifyMutationInput { reserveeFirstName: String reserveeId: String reserveeIsUnregisteredAssociation: Boolean - reserveeLanguage: ReserveeLanguage reserveeLastName: String reserveeOrganisationName: String reserveePhone: String @@ -3665,7 +3714,6 @@ type ReservationStaffModifyMutationPayload { reserveeFirstName: String reserveeId: String reserveeIsUnregisteredAssociation: Boolean - reserveeLanguage: ReserveeLanguage reserveeLastName: String reserveeOrganisationName: String reserveePhone: String @@ -3676,6 +3724,16 @@ type ReservationStaffModifyMutationPayload { unitPrice: Decimal } +input ReservationStaffRepairAccessCodeMutationInput { + pk: Int! +} + +type ReservationStaffRepairAccessCodeMutationPayload { + accessCodeGeneratedAt: DateTime + accessCodeIsActive: Boolean + pk: Int +} + """ An enumeration. """ @@ -3826,6 +3884,9 @@ enum ReservationUnitCancellationRuleOrderingChoices { } input ReservationUnitCreateMutationInput { + accessType: AccessType + accessTypeEndDate: Date + accessTypeStartDate: Date allowReservationsWithoutOpeningHours: Boolean applicationRoundTimeSlots: [ApplicationRoundTimeSlotSerializerInput] authentication: Authentication @@ -3897,6 +3958,9 @@ input ReservationUnitCreateMutationInput { } type ReservationUnitCreateMutationPayload { + accessType: AccessType + accessTypeEndDate: Date + accessTypeStartDate: Date allowReservationsWithoutOpeningHours: Boolean applicationRoundTimeSlots: [ApplicationRoundTimeSlotNode] authentication: Authentication @@ -4452,6 +4516,9 @@ enum ReservationUnitTypeOrderingChoices { } input ReservationUnitUpdateMutationInput { + accessType: AccessType + accessTypeEndDate: Date + accessTypeStartDate: Date allowReservationsWithoutOpeningHours: Boolean applicationRoundTimeSlots: [UpdateApplicationRoundTimeSlotSerializerInput] authentication: Authentication @@ -4523,6 +4590,9 @@ input ReservationUnitUpdateMutationInput { } type ReservationUnitUpdateMutationPayload { + accessType: AccessType + accessTypeEndDate: Date + accessTypeStartDate: Date allowReservationsWithoutOpeningHours: Boolean applicationRoundTimeSlots: [ApplicationRoundTimeSlotNode] authentication: Authentication @@ -4666,25 +4736,6 @@ type ReservationWorkingMemoMutationPayload { workingMemo: String } -""" -An enumeration. -""" -enum ReserveeLanguage { - A_ - """ - Englanti - """ - EN - """ - Suomi - """ - FI - """ - Ruotsi - """ - SV -} - """ An enumeration. """ @@ -5580,7 +5631,6 @@ input UpdateReservationSeriesReservationUpdateSerializerInput { reserveeFirstName: String reserveeId: String reserveeIsUnregisteredAssociation: Boolean - reserveeLanguage: ReserveeLanguage reserveeLastName: String reserveeOrganisationName: String reserveePhone: String