{"version":3,"sources":["components/login/external-login.jpg","components/login/login-icon.svg","components/layout/logo.svg","components/layout/img/CoursesLogo.svg","components/layout/img/ModulesLogo.svg","fonts/BuenosAiresWeb-Regular.woff","fonts/BuenosAiresWeb-Regular.woff2","fonts/BuenosAiresWeb-RegularItalic.woff","fonts/BuenosAiresWeb-RegularItalic.woff2","fonts/BuenosAiresWeb-Bold.woff","fonts/BuenosAiresWeb-Bold.woff2","fonts/BuenosAiresWeb-BoldItalic.woff","fonts/BuenosAiresWeb-BoldItalic.woff2","fonts/BuenosAiresWeb-Light.woff","fonts/BuenosAiresWeb-Light.woff2","fonts/BuenosAiresWeb-LightItalic.woff","fonts/BuenosAiresWeb-LightItalic.woff2","fonts/BuenosAiresWeb-Thin.woff","fonts/BuenosAiresWeb-Thin.woff2","fonts/BuenosAiresWeb-ThinItalic.woff","fonts/BuenosAiresWeb-ThinItalic.woff2","data/constants.ts","translations/en.ts","components/common/language/LanguageProvider.tsx","translations/de.ts","translations/fr.ts","translations/it.ts","store/notifications/NotificationStore.ts","api/ErrorHandler.ts","api/CustomFetch.ts","api/rtk/BaseApi.ts","api/rtk/MeApi.ts","model/PersonType.ts","model/Course.ts","PrivateRoute.tsx","api/rtk/CandidateApi.ts","api/rtk/ExamApi.ts","translations/GetTranslation.ts","translations/TranslationKey.ts","utils/Dates.ts","api/rtk/CountryApi.ts","components/common/customAutocomplete/CustomAutocomplete.tsx","components/common/customAutocomplete/MultiLanguageSelect.tsx","components/common/customAutocomplete/CountrySelect.tsx","components/common/customGrid/GridTextField.tsx","utils/ZipCodeUtils.ts","components/common/AddressFields.tsx","components/common/CustomSwitch.tsx","components/common/FormGridCell.tsx","components/common/LastModificationInfo.tsx","components/common/buttons/CustomButton.tsx","components/common/buttons/RightButtonArea.tsx","api/rtk/CompanyApi.ts","components/common/customAutocomplete/CompanySelect.tsx","components/common/customAutocomplete/GenderSelect.tsx","components/common/customAutocomplete/PlaceOfOriginSelect.tsx","components/common/customCheckBox/CheckboxListItem.tsx","components/common/customCheckBox/CheckboxList.tsx","components/common/customCheckBox/LanguageCheckboxList.tsx","components/common/customDialog/CustomDraggableDialog.tsx","components/common/datePicker/DatePicker.tsx","components/common/textField/RegexTextField.tsx","components/common/textField/AhvNoTextField.tsx","components/common/textField/CiceroNoTextField.tsx","components/common/textField/EmailTextField.tsx","components/common/textField/PhoneNoTextField.tsx","components/expert/ExpertConstants.ts","components/translations/TranslatedMessage.tsx","utils/Navigation.ts","model/Shared/TranslatedValue.ts","components/common/customSelect/CustomSelect.tsx","model/courses/CandidateCourseViewModel.ts","components/expert/ExpertExamsSelect.tsx","components/course/CourseTypeSelect.tsx","components/expert/ExpertRoleExamAssignment/ExpertRoleExamsRow.tsx","components/common/customSearchBox/CustomSearchBox.tsx","components/expert/ExpertRoleExamAssignment/RoleSelectionDialog.tsx","components/expert/ExpertRoleExamAssignment/ExpertRolesExamsTable.tsx","components/candidate/CandidateConstants.ts","api/CandidateCourseCertificateApi.ts","components/candidateCourses/CandidateCourseTableRow.tsx","components/candidateCourses/CandidateCourseTable.tsx","components/candidate/CandidateCoursesInternal.tsx","components/candidate/CandidateForm.tsx","components/common/customGrid/CustomHeaderCell.tsx","components/common/customGrid/CustomTableFooter.tsx","components/common/customGrid/GridActions.tsx","components/common/customGrid/CustomGrid.tsx","components/candidate/CandidateGrid.tsx","api/CandidateApi.ts","components/common/UploadDropZone.tsx","components/candidate/ImportEdiIdsDialog.tsx","components/candidate/CandidateList.tsx","components/candidate/myProfile/CandidateAddressFields.tsx","components/candidate/myProfile/CandidateBusinessFields.tsx","components/candidate/myProfile/CandidateFields.tsx","components/candidate/myProfile/ExpertFields.tsx","components/candidate/myProfile/MyProfile.tsx","api/rtk/CourseApi.ts","components/common/buttons/DefaultButtons.tsx","components/common/buttons/DefaultPublishArchiveButtons.tsx","model/Module.ts","components/course/CourseConstants.ts","model/Exam.ts","components/common/customGrid/GridNumberField.tsx","components/course/CourseFormFields.tsx","api/ModuleApi.ts","components/course/ModuleSelectionDialog.tsx","components/course/CourseFormModules.tsx","components/course/CourseForm.tsx","components/course/CourseGrid.tsx","components/course/CourseList.tsx","model/ExamDayType.ts","components/exam/ExamConstants.ts","components/common/customGrid/GridCurrencyField.tsx","components/exam/ExamFormFields.tsx","components/exam/ExamForm.tsx","api/ExamApi.ts","components/exam/ExamGrid.tsx","components/exam/ExamList.tsx","api/rtk/ExamSessionApi.ts","model/TimeSlotStructure.ts","model/ExamSessionViewModel.ts","components/common/TitleWithIcon.tsx","components/common/CustomCard.tsx","components/common/language/LanguageList.tsx","components/exam/ExamChips.tsx","components/roomAssignment/RoomAssignmentCard.tsx","components/roomAssignment/RoomAssignmentList.tsx","components/examDay/TimeSlotStructureSelect.tsx","components/examDay/ExamDayFields.tsx","components/examDay/ExamDayForm.tsx","api/rtk/ExamSessionCandidateApi.ts","api/rtk/LocationApi.ts","components/common/buttons/CustomSplitButton.tsx","components/examSession/ConfirmPublishResultsDialog.tsx","components/examSession/PublishedExamSelectionDialog.tsx","components/examSession/EditExamSessionExamCourseTypesDialog.tsx","components/examSession/ExamSessionExams.tsx","components/examSession/ExamSessionFields.tsx","components/common/dates/LocaleFormatDate.tsx","components/common/dates/LocaleFormatDateRange.tsx","components/examSession/ExamSessionFieldsReadonly.tsx","components/location/LocationCard.tsx","components/examSession/LocationSelectionDialog.tsx","components/examSession/ExamSessionLocationList.tsx","components/examSession/ImportExamScoresAndGradesDialog.tsx","components/examSession/InvitationDialog.tsx","components/examSession/assets/calculator-svgrepo-com.svg","model/examSessionCandidate/CandidateModuleState.ts","api/rtk/SignUpApi.ts","components/payment/PaymentConstants.ts","components/common/payment/PaymentStatus.tsx","components/common/LoadingIndicator.tsx","components/examSession/examSessionCandidate/ExamSessionCandidateAddDialog.tsx","components/examSession/examSessionCandidate/ExamSessionCandidateListHeader.tsx","components/examSession/examSessionCandidate/ExamSessionCandidateList.tsx","components/layout/TitleBar.tsx","components/examSession/ExamSessionForm.tsx","components/examSession/ExamSessionGrid.tsx","components/examSession/ImportPevDialog.tsx","components/examSession/ExamSessionList.tsx","components/common/buttons/LinkButton.tsx","components/examDay/ExamDayCard.tsx","components/examDay/ExamDayList.tsx","components/examsScheduler/SchedulerOpenButton.tsx","components/location/LocationConstants.ts","components/examSession/ExamSessionLocationFields.tsx","model/examSessionCandidate/ExamSessionCandidateExamViewModel.ts","components/examSession/ExamSessionLocationForm.tsx","api/rtk/TrainingProviderApi.ts","model/OralExamOption.ts","api/FileApi.ts","components/taskCompletion/TaskCompletionUtilities.ts","components/common/DocumentList.tsx","components/examSession/examSessionCandidate/ExamSessionCandidateAttachmentList.tsx","components/examSession/examSessionCandidate/ExamSessionCandidateConstants.ts","api/rtk/TimeSlotStructureApi.ts","utils/TimeSlotUtils.ts","components/examSession/examSessionCandidate/ExamSessionCandidateExamActions.tsx","components/examSession/examSessionCandidate/ExamSessionCandidateExamBookDialog.tsx","components/examSession/examSessionCandidate/ExamSessionCandidateExamGrade.tsx","components/examSession/examSessionCandidate/ExamSessionCandidateExamRow.tsx","components/examSession/examSessionCandidate/ExamSessionCandidateExamScore.tsx","components/examSession/examSessionCandidate/ExamSessionCandidateExam.tsx","components/examSession/examSessionCandidate/ExamSessionCandidateModule.tsx","components/examSession/examSessionCandidate/ExamSessionCandidateModules.tsx","components/examSession/examSessionCandidate/ExamSessionCandidateInfo.tsx","components/examSession/examSessionCandidate/ExamSessionCandidateForm.tsx","components/examsScheduler/context/SchedulerCandidateContext.tsx","components/examsScheduler/context/SchedulerCaseNameContext.ts","components/examsScheduler/context/SchedulerExpertContext.tsx","components/examsScheduler/context/SchedulerContext.ts","components/examsScheduler/context/SchedulerContextUtils.ts","components/examsScheduler/context/SchedulerContextProvider.tsx","components/examsScheduler/SchedulerDayStepLabel.tsx","components/examsScheduler/SchedulerExamDaySteps.tsx","api/rtk/ExpertApi.ts","components/examSession/ExamSelect.tsx","components/examsScheduler/SchedulerExamSelectDialog.tsx","components/examsScheduler/SchedulerInfoRow.tsx","components/examsScheduler/SchedulerLanguagesRow.tsx","components/userRoomAssignmentBoard/UserSelect.tsx","components/userRoomAssignmentBoard/RoomAssignmentExpertSelect.tsx","components/examsScheduler/SchedulerProctorRow.tsx","components/examsScheduler/SchedulerCandidateSelect.tsx","components/examsScheduler/SchedulerCaseNameTextField.tsx","components/examsScheduler/SchedulerCell.tsx","components/examsScheduler/SchedulerTimeSlotRow.tsx","components/examsScheduler/SchedulerTable.tsx","components/examsScheduler/SchedulerButtons.tsx","components/examsScheduler/Scheduler.tsx","components/examsScheduler/correctionExams/CorrectionExamsScheduler.tsx","components/examsScheduler/expertExams/ExpertSchedulerCell.tsx","components/examsScheduler/context/ExpertSchedulerContextProvider.tsx","components/examsScheduler/expertExams/ExpertScheduler.tsx","components/examsScheduler/expertExams/ExpertExamsScheduler.tsx","components/examsScheduler/oralExams/OralExamsScheduler.tsx","components/examsScheduler/writtenExams/WrittenExamsScheduler.tsx","api/rtk/ExpertAvailabilityApi.ts","components/expert/ExpertAvailabilityRow.tsx","model/TaskState.ts","components/expert/ExpertAvailabilitySetup.tsx","model/ExamDayViewModel.ts","components/expert/ExpertCorrectionAvailabilitySetup.tsx","components/expert/ExpertExaminationAvailabilitySetup.tsx","components/expert/MyExpertProfile/ExpertPersonalFields.tsx","components/expert/MyExpertProfile/MyExpertProfile.tsx","components/common/AvatarHeader.tsx","components/home/HomeSection.tsx","components/home/MandatoryFieldsAlert.tsx","components/home/MyCourses.tsx","api/rtk/ExamCaseApi.ts","components/home/MyExamCases.tsx","api/ExamCaseApi.ts","api/rtk/ExamResultApi.ts","components/home/MyExamResults.tsx","api/ExamResultApi.ts","components/home/MyExamSessions.tsx","model/TaskType.ts","components/home/MyTasks.tsx","components/candidate/CandidateInformationList.tsx","components/home/UserReadOnlyView.tsx","components/home/MyUser.tsx","components/home/myExams/MyExamsTableExamRow.tsx","components/home/myExams/MyExamsTableModuleRow.tsx","components/home/myExams/MyExamsTable.tsx","components/home/myExams/SelfCancelDialog.tsx","components/home/myExams/MyExams.tsx","api/CartApi.ts","components/home/Home.tsx","components/home/CandidateHome.tsx","components/home/ExpertHome.tsx","api/rtk/InternalTaskApi.ts","components/internalTask/Cancellation/CandidateFields.tsx","components/internalTask/Cancellation/ModuleFields.tsx","components/internalTask/Cancellation/CancellationForm.tsx","components/room/RoomCard.tsx","components/room/RoomList.tsx","components/common/customAutocomplete/CantonSelect.tsx","components/location/LocationFields.tsx","components/location/LocationForm.tsx","components/location/LocationGrid.tsx","components/location/LocationList.tsx","api/UserApi.ts","store/session/SessionState.ts","store/session/SessionLanguage.ts","api/SettingsApi.ts","utils/UrlHelpler.ts","auth.ts","store/session/SessionStore.ts","components/login/Login.tsx","components/startCertificationWizard_new/CertificationDataWizardContext/StartCertificationSteps.tsx","utils/useNotification.ts","components/module/ModuleConstants.ts","components/module/ExamSelectionDialog.tsx","components/module/ModuleFormExams.tsx","components/module/ModuleFormFields.tsx","components/module/ModuleForm.tsx","components/module/ModuleGrid.tsx","components/module/ModuleList.tsx","components/personTask/uploadDocuments/CompleteTaskButton.tsx","components/personTask/uploadDocuments/DocumentsManager.tsx","components/personTask/uploadDocuments/TaskDetails.tsx","utils/UseQuery.ts","components/personTask/uploadDocuments/UploadDocumentsForm.tsx","components/room/RoomFields.tsx","components/room/RoomForm.tsx","components/roomAssignment/RoomAssignmentFields.tsx","components/roomAssignment/RoomAssignmentForm.tsx","model/Cart/TransactionStatus.ts","components/startCertificationWizard_new/CertificationDataWizardContext/CertificationDataWizardContext.tsx","components/startCertificationWizard_new/components/EmailConfirmationSent.tsx","components/startCertificationWizard_new/components/shared/ControlButtons.tsx","components/startCertificationWizard_new/components/shared/Form.tsx","components/startCertificationWizard_new/components/shared/Fields.tsx","components/startCertificationWizard_new/components/Step1_PersonalData/CandidateAddressFields.tsx","components/startCertificationWizard_new/components/Step1_PersonalData/CandidateFields.tsx","components/startCertificationWizard_new/components/Step1_PersonalData/PersonalDataStepSchema.ts","components/startCertificationWizard_new/components/Step1_PersonalData/PrivacyPolicyDialog.tsx","components/startCertificationWizard_new/components/Step1_PersonalData/PersonalDataStep.tsx","components/startCertificationWizard_new/components/Step2_ModuleSelection/ModuleExamList.tsx","components/startCertificationWizard_new/components/Step2_ModuleSelection/ModuleSelectorRow.tsx","components/startCertificationWizard_new/components/Step2_ModuleSelection/ModuleSelector.tsx","components/startCertificationWizard_new/components/Step2_ModuleSelection/UserSelectionRow.tsx","components/startCertificationWizard_new/components/Step2_ModuleSelection/UserSelection.tsx","components/startCertificationWizard_new/components/Step2_ModuleSelection/ModuleSelectionStep.tsx","components/startCertificationWizard_new/components/Step3_ExamDetails/SelectionCells/ExamFullSelectionCells.tsx","components/startCertificationWizard_new/components/Step3_ExamDetails/SelectionCells/NormalSelectionCells.tsx","components/startCertificationWizard_new/components/Step3_ExamDetails/SelectionCells/TermPaperSelectionCells.tsx","components/startCertificationWizard_new/components/Step3_ExamDetails/ExamLocationAndDateStepRowExam.tsx","components/startCertificationWizard_new/components/Step3_ExamDetails/ExamLocationAndDateStepRow.tsx","components/startCertificationWizard_new/components/Step3_ExamDetails/ExamLocationAndDateStep.tsx","components/startCertificationWizard_new/components/Step4_ModulesDetails/ModuleAttachments.tsx","components/startCertificationWizard_new/components/Step4_ModulesDetails/ModuleDetailsDialog.tsx","components/startCertificationWizard_new/components/Step4_ModulesDetails/ModulesDetailsStep.tsx","utils/ErrorHelper.ts","components/common/LoadingSpinner.tsx","components/startCertificationWizard_new/components/Step5_PaymentAndCompletion/FaqLink.tsx","store/ApplicationStore.ts","components/payment/PaymentMethodItem.tsx","components/payment/InvoicePaymentForm.tsx","components/payment/PaymentMethodSelectorDialog.tsx","components/startCertificationWizard_new/components/Step5_PaymentAndCompletion/SummaryExamRow.tsx","components/startCertificationWizard_new/components/Step5_PaymentAndCompletion/SummaryModuleRow.tsx","components/startCertificationWizard_new/components/Step5_PaymentAndCompletion/SelectionSummary.tsx","components/startCertificationWizard_new/components/Step5_PaymentAndCompletion/PaymentAndCompletionStep.tsx","components/startCertificationWizard_new/StartCertificationWizard.tsx","components/userRoomAssignmentBoard/RoomAssignmentRow.tsx","components/userRoomAssignmentBoard/RoomAssignmentBoard.tsx","components/userRoomAssignmentBoard/ExpertsCorrectionExamAssignmentBoard.tsx","components/userRoomAssignmentBoard/ExpertsOralExamAssignmentBoard.tsx","components/userRoomAssignmentBoard/ProctorsOralPreparationAssignmentBoard.tsx","components/userRoomAssignmentBoard/ProctorsWrittenExamAssignmentBoard.tsx","Routes.tsx","components/common/language/LanguageSelect.tsx","components/login/Logout.tsx","components/layout/ListItemLink.tsx","components/layout/NavigationList.tsx","components/layout/NavContainer.tsx","components/layout/Notifications.tsx","fonts/BuenosAiresWeb-Regular.ts","fonts/BuenosAiresWeb-RegularItalic.ts","fonts/BuenosAiresWeb-Bold.ts","fonts/BuenosAiresWeb-BoldItalic.ts","fonts/BuenosAiresWeb-Light.ts","fonts/BuenosAiresWeb-LightItalic.ts","fonts/BuenosAiresWeb-Thin.ts","fonts/BuenosAiresWeb-ThinItalic.ts","theme.tsx","Root.tsx","index.tsx"],"names":["module","exports","PropertyNames","Language","SwissTimeZone","UserGender","LanguageLocale","DE","EN","FR","IT","LanguageLabels","LanguageTranslationKeys","UserRoomAssignmentType","ExpertRole","UserGenderLabels","key","Male","Female","LocalStorageKey","ExpertMinumimFixedUsers","Object","values","getExpertRoleTranslationKey","role","NewEntityId","en","localizedMessages","connect","state","sessionState","children","language","locale","messages","actionCreators","addNotifications","errors","data","dispatch","type","map","error","removeNotifications","unloadedState","reducer","incomingAction","action","concat","filter","errorMessage","_","includes","notificationErrors","undefined","length","store","getState","globalApiErrorHandler","api","next","isRejectedWithValue","payload","globalErrorHandler","response","status","originalResponse","clone","contentType","headers","get","json","then","success","catch","customFetch","url","init","useToken","sessionsState","fetchUrl","getApiUrl","accounts","authClient","getAllAccounts","request","scopes","appRegistration","account","fetchTask","acquireTokenSilent","accessToken","console","Authorization","window","fetch","err","log","acquireTokenRedirect","prepareHeaders","a","getToken","token","set","getBaseUrl","host","location","protocol","getCurrentHost","createApi","reducerPath","baseQuery","fetchBaseQuery","baseUrl","endpoints","transformApiResponse","apiResponse","PersonType","meAsExpertUrl","meApi","enhanceEndpoints","addTagTypes","injectEndpoints","builder","getMe","query","transformResponse","providesTags","getMeAsExpert","getMyModulesAndExamsForCandidate","getMyExamSessions","getMyTasks","updateMe","mutation","candidate","body","method","invalidatesTags","updateMeAsExpert","expert","getUploadDocumentsTaskDetails","taskId","examSessionId","moduleId","completeUploadDocumentsTask","listMyModuleDocuments","_result","_error","id","addMyModuleDocument","file","formData","FormData","append","deleteMyModuleDocument","fileName","getCandidateCourses","useGetMeQuery","useGetMeAsExpertQuery","useUpdateMeMutation","useUpdateMeAsExpertMutation","useGetMyModulesAndExamsForCandidateQuery","useGetMyExamSessionsQuery","useGetMyTasksQuery","useGetUploadDocumentsTaskDetailsQuery","useCompleteUploadDocumentsTaskMutation","useListMyModuleDocumentsQuery","useAddMyModuleDocumentMutation","useDeleteMyModuleDocumentMutation","useGetCandidateCoursesQuery","CourseStatus","CourseCertificateValidity","CourseType","pure","component","personTypesAllowed","isUserAuthenticated","isLoadingAuth","rest","useState","skipToken","skipTokenState","setSkipTokenState","me","path","pathState","setPathState","firstRender","React","useRef","isAuthenticated","useIsAuthenticated","inProgress","useMsal","useEffect","current","render","Component","props","isInAllowedUserTypes","Undefined","LinearProgress","variant","redirectProps","to","pathname","from","search","renderFn","getCandidateUrl","candidatesApi","getCandidates","orderBy","lastName","toLowerCase","result","getCandidate","arg","deleteCandidate","createCandidate","updateCandidate","exportDebtorNumber","getCandidateCoursesInternal","getCandidatesValid","useGetCandidateQuery","useGetCandidatesQuery","useDeleteCandidateMutation","useCreateCandidateMutation","useUpdateCandidateMutation","useExportDebtorNumberMutation","useGetCandidateCoursesInternalQuery","useGetCandidatesValidQuery","examsApi","getPublishedExams","keepUnusedDataFor","useGetPublishedExamsQuery","CourseTypeEnumValues","ct","None","CourseStateTranslationKey","Draft","Published","Archived","CourseCertificateValidityTranslationKey","Unlimited","FiveYears","CourseTypeTranslationKey","Mindeststandard","Intermediary","Hve","ProfessionalOrCicero","CourseTypeGroupTranslationKey","GetTranslation","intl","warn","indexOf","formatMessage","keysToTranslate","match","translatedText","forEach","keyWithoutBraces","replace","isTranslationKey","getMinimumValidDate","minimumDate","Date","setFullYear","getFullYear","areDatesEqual","date1","date2","firstDate","setHours","secondDate","getTime","isDateInArray","date","datesArray","i","getValidDate","countriesApi","getCountries","useGetCountriesQuery","CustomAutocomplete","xs","sm","md","lg","xl","label","name","required","helperText","onBlur","autoCompleteProps","Grid","item","Autocomplete","renderInput","params","TextField","MultiLanguageSelect","options","defaultValue","value","onChange","_value","inputOptions","setInputOptions","localStorage","getItem","LastSelectedLanguageKey","sortedOptions","option","labelDE","labelEN","labelFR","labelIT","sort","b","localeCompare","defaultOption","find","selectedOption","getOptionLabel","_event","CountrySelect","Array","countries","setCountries","fetchedCountries","GridTextField","readOnly","maxLength","fullWidth","InputProps","inputProps","isInvalidZipCode","zipCode","country","test","AddressFields","fieldValues","fieldsValidation","handleChange","useIntl","isStreetEmpty","event","street","target","isStreetNumberEmpty","streetNumber","isZipCodeEmpty","ZipCodesAndCities","pair","city","isCityEmpty","isCountryEmpty","useStyles","makeStyles","marginLeft","height","CustomSwitch","customCssClass","disabled","classes","FormControlLabel","className","control","Switch","color","checked","labelPlacement","defaultProps","FormGridCell","size","grid","Hidden","only","LastModificationInfo","lastModifiedBy","lastModifiedOnUtc","modifiedOn","toLocaleString","modifiedBy","style","fontStyle","theme","createStyles","root","boxShadow","CustomButton","internalButtonClassName","onClick","tooltip","cssClasses","Typography","Tooltip","title","Button","display","justifyContent","alignItems","flexWrap","RightButtonArea","Box","companiesApi","getCompanies","useGetCompaniesQuery","CompanySelect","companies","setCompanies","fetchedCompanies","GenderSelect","setOptions","genderOptions","gender","Places","place","canton","PlaceOfOriginSelect","withStyles","listItem","paddingTop","paddingBottom","checkbox","zIndex","isChecked","onCheckItem","ListItem","padding","button","Checkbox","edge","ListItemText","CheckboxList","handleCheck","checkedItems","changedItems","x","setState","this","availableItems","List","FormLabel","languages","LanguageCheckboxList","availableLanguages","onSelectedLanguagesChanged","checkedLanguages","overflowYVisible","overflowY","titleWrapper","flex","paddingRight","cursor","closeButton","margin","PaperComponent","cancel","Paper","CustomDraggableDialog","onClose","hideActions","content","isOpen","cancelText","acceptText","onCancel","onAccept","acceptDisabled","Dialog","open","aria-labelledby","DialogTitle","IconButton","aria-label","DialogContent","DialogActions","DatePicker","disablePast","shouldDisableDate","moment","tz","setDefault","DateFnsUtils","toString","utils","MomentUitls","format","KeyboardButtonProps","RegexTextField","onChangeIsValid","validationRegex","placeholder","isValid","regexp","RegExp","AhvNoTextField","CiceroNoTextField","EmailTextField","PhoneNoTextField","initialValidationFields","isAhvValid","isCiceroValid","isEmailValid","isMobileValid","isPhoneValid","initialExpertMe","birthdate","correspondenceLanguage","emailAddress","bankAccount","mobileNumber","firstName","phoneNumber","rolesWithExamsAndCourseTypes","rolesWithRequiredExamOrCourseTypeAssignements","Aufsichtsexperten","Prüfungsexperten","rolesAssignedToCourseTypes","injectIntl","navigateBack","defaultBackRoute","history","internal","goBack","push","navigateTo","route","GetTranslatedValue","translatedValue","de","GetTranslatedValueIntl","flexGrow","minWidth","input","valueContainer","overflow","chip","spacing","maxWidth","chipFocused","backgroundColor","emphasize","palette","grey","noOptionsMessage","singleValue","fontSize","position","left","bottom","paper","marginTop","right","divider","select","inputComponent","inputRef","ref","components","Control","innerProps","innerRef","selectProps","TextFieldProps","Menu","square","MultiValue","flagged","flaggedTooltip","Chip","tabIndex","clsx","isFocused","onDelete","removeProps","deleteIcon","Cancel","NoOptionsMessage","Option","MenuItem","selected","fontWeight","isSelected","Placeholder","SingleValue","ValueContainer","CustomSelect","mainElement","document","querySelector","useTheme","selectStyles","base","text","primary","font","isClearable","styles","inputId","menuPlacement","InputLabelProps","htmlFor","shrink","isMulti","isDisabled","menuPortalTarget","useDocumentBodyAsPortalTarget","closeMenuOnScroll","e","CandidateCourseStatus","width","ExpertExamsSelect","expertExams","selectedExpertExams","onExpertExamsSelectChange","mandatory","container","CourseTypeSelect","selectedCourseTypes","onCourseTypeSelectChange","courseTypesWithTranslation","courseType","translation","getCourseTypesWithTranslations","courseTypes","useExamColumnStyles","noPaddingColumn","bold","deleteButton","secondary","main","border","ExpertRoleExamsRow","selectedExamIds","publishedExams","onExamsChange","onCourseTypeChange","onRoleDelete","examSelectError","publishedExamsObject","exam","examOptions","publishedExamIds","pe","selectedExamsOptions","se","examId","Fragment","TableRow","TableCell","align","textAlign","borderStyle","borderWidth","borderColor","iconButton","background","searchToken","tag","elevation","InputBase","Divider","orientation","light","listContainer","emptyMessage","RoleSelectionDialog","isOpened","handleAccept","handleCancel","selectableRoles","selection","setSelection","setSearchToken","filteredRoles","setFilteredRoles","toggleRoleSelection","selectedRole","isListEmpty","nonSelectedFilteredRoles","onSearchTokenChanged","ListItemSecondaryAction","selectedRoles","getSelectableRoles","selectedRoleExams","currentRoles","roleExam","rol","ExpertRolesTable","currentRolesWithExamsAndCourseTypes","getExamChangeHandler","getCourseTypeChangeHandler","onRoleCreation","examSelectErrorsArray","isAddRoleDialogVisible","setIsAddRoleDialogVisible","TableContainer","Table","TableHead","Add","TableBody","roleExamsCourseTypes","index","examIds","colSpan","initialCandidate","blocked","nationality","preferredContact","ahvNumber","ciceroNumber","employer","employerCity","employerCountry","employerStreet","employerZipCode","nationalityIsSwiss","placeOfOrigin","privateIsPreferredContact","disablePersonalFields","Candidate","hasEmptyPersonalFields","internalComment","getCandidateCourseUrl","candidateCourseId","getInternalCandidateCourseUrl","candidateId","handleDownloadResponse","fallbackFileName","contentDispositionHeader","split","ok","blob","download","downloadCandidateCourseCertificate","downloadCandidateCoursePerformanceRecord","downloadInternalCandidateCourseCertificate","downloadInternalCandidateCoursePerformanceRecord","CandidateCourseStatusTranslationKey","Open","Passed","isCertificateAvailable","candidateCourse","CandidateCourseTableRow","handleDownloadCertificate","handleDownloadPerformanceRecord","isLoadingCertificate","setIsLoadingCertificate","isLoadingPerformanceRecord","setIsLoadingPerformanceRecord","onDownloadCertificate","onDownloadPerformanceRecord","courseName","closingDateUtc","toLocaleDateString","timeZone","direction","justify","textTransform","tableHeaders","CandidateCourseTable","candidateCourses","marginBottom","course","courseIndex","CandidateCoursesInternal","skip","isFetching","certificateFileNamePrefix","certificateFileName","performanceRecordFileNamePrefix","performanceRecordFileName","formControl","expertsRolesTable","CandidateForm","useParams","useHistory","enqueueSnackbar","useSnackbar","isNewCandidate","isCreateCandidateLoading","isLoading","isUpdateCandidateLoading","isDeleteCandidateLoading","isDeleteSuccess","isSuccess","isExportingDebtorNumber","fetchedCandidate","isCandidateFetching","exams","isExamsFetching","setCandidate","isFirstnameEmpty","isLastnameEmpty","isGenderEmpty","isBirthDateEmpty","isEmailEmpty","isLanguageEmpty","isAhvNoEmpty","isNationalityEmpty","isPlaceOfOriginEmpty","isCantonEmpty","isEmployerInformationEmpty","isBankAccountEmpty","hasEmptyRoleArray","hasEmptyRole","isRequired","setIsRequired","setIsValid","isDeleteDialogOpen","setIsDeleteDialogOpen","isEmailChangeDialogOpened","setIsEmailChangeDialogOpened","emailChangeNeedsConfirmation","setEmailChangeNeedsConfirmation","renderCandidateForm","renderPersonForm","renderBusinessDataForm","renderAddressForm","renderInvoiceForm","renderBusinessForm","multiline","getChangeHandler","renderActiveExpertProfileToggle","renderExpertProfile","rolesWithErrorArray","Expert","getLanguageChangeHandler","onRolesCreation","close","routesPaths","candidates","renderCreationForm","handleCreate","Save","renderUpdateForm","handleExport","ImportExport","handleUpdate","handleDelete","closeDeleteDialog","handleConfirmEmailChange","handleAhvIsValid","handleEmailIsValid","handlePhoneIsValid","handleMobileIsValid","handleCiceroIsValid","handleNationalityChanged","handlePlaceOfOriginChange","getCantonDisplayValue","employerInformation","renderLanguageCheckboxList","FormControl","RadioGroup","handlePreferredContactChange","renderRadioButtons","employerStreetNumber","getZipCodeChangeHandler","Radio","propertyName","zipCodeProperty","cityProperty","newZipCode","zipCodeMatch","ZipCodes","selectedElements","actionMeta","modifiedRoles","rec","selectedElement","roles","newRoles","newRole","every","currentRole","prevState","handleRequired","handleCandidateExpertRequired","handleValidation","unwrap","newStatus","some","hasMissingFields","handleIsValid","prevIsValid","CustomHeaderCell","onClickSortHandler","columnKey","isSortingDisabled","sortDirection","TableSortLabel","active","hideSortIcon","footer","TableFooter","GridActions","renderSwitchFilters","switchFilters","filters","switchFilter","isActive","onFilterChange","handleSearchToken","hideAddButton","hideSearchBar","addButtonTooltip","onAddClick","additionalButtons","marginRight","CustomGrid","changeGridParametersFromHash","hash","getParametersFromQueryString","handleSearchTokenChanged","page","setParametersInQueryString","renderHeadRows","columnDefinitions","columnDefinition","columnLabel","additionalHeaderRows","row","renderAdditionalHeaderTableRow","renderBodyRows","rows","renderTableRow","renderHeader","headerRows","bodyRows","boxRowHeader","tableProps","visibility","renderBody","hasRows","boxContent","renderFooter","totalRows","rowsPerPage","boxFooter","TablePagination","labelRowsPerPage","count","onChangePage","handleOnChangePage","rowsPerPageOptions","onChangeRowsPerPage","handleChangeRowsPerPage","parseInt","getOnClickFunction","onRowClick","newDirection","onChangedSort","filteredRows","getFilteredRows","getSortedRows","getPagedRows","offset","slice","rowKey","hover","rowsProps","cellProps","cellValue","initialSorting","filteredItems","pagedItems","boxContainer","addEventListener","removeEventListener","JSON","parse","atob","btoa","stringify","valueOrderGetter","orderValue","filterFunction","keys","column","join","flexFlow","maxHeight","overflowX","CandidateGrid","columnsDefinitions","Person","School","GetApp","onUploadEdiIdsButtonClick","CloudUpload","getHandlerByFilterIndex","newFilters","onCandidateClick","paperRoot","mixins","gutters","paperRootRejecting","paperRootAccepting","uploadIcon","UploadDropZone","isInTransfer","setIsInTransfer","uploadURL","onFileUploaded","onDrop","accept","tags","allowMultiple","onUploadError","postFileFn","postFile","Error","Accept","multiple","accepted","rejected","fileToUpload","jsonResponse","childProps","paperStyle","isDragReject","isDragAccept","dropZoneDiv","ImportEdiIdsDialog","mapDispatchToProps","initiate","connector","candidatesState","CandidateList","handleUploadEdiIdsDialogClose","isUploadEdiIdsDialogOpen","handleUploadEdiIdsButtonClick","handleUploadEdiIdsError","handleUploadEdiIdsSuccess","updatedCandidatesCount","totalCandidatesCount","recordsCount","navigateToCandidate","renderCandidates","withSnackbar","icon","CandidateAddressFields","onPropertyValueChanges","contactType","CandidateBusinessFields","zipCodeKey","cityKey","handlers","handleTextChange","part","isEmployerEmpty","isEmployerStreetEmpty","isEmployerStreetNumberEmpty","isEmployerZipCodeEmpty","isEmployerCityEmpty","isEmployerCountryEmpty","header","CandidateFields","places","onChangeAhvIsValid","onChangeEmailIsValid","onChangePhoneIsValid","onChangeMobileIsValid","onChangeCiceroIsValid","initialIsRequired","MyProfile","fetchedMe","isMeFetching","isUpdateMeLoading","setMe","setIsEmailValid","setIsAhvValid","setIsCiceroValid","setIsPhoneValid","setIsMobileValid","showConfirmationDialog","setShowConfirmationDialog","isUserExpert","handleCandidateChange","partialCandidate","prevCandidate","handleSave","handleEmpty","field","isEmpty","prevIsRequired","resultList","fieldStatus","courseApi","getCourses","getCourse","courseId","createCourse","courseViewModel","updateCourse","publishCourse","archiveCourse","deleteCourse","useGetCoursesQuery","useGetCourseQuery","useCreateCourseMutation","useUpdateCourseMutation","usePublishCourseMutation","useArchiveCourseMutation","useDeleteCourseMutation","DefaultButtons","showDeleteDialog","isDeleteButtonVisible","isDeleteButtonEnabled","Delete","saveButton","isSaveButtonVisible","onSave","isSaveButtonEnabled","isCloseButtonVisible","isCloseButtonEnabled","DefaultPublishArchiveButtons","isPublishDialogOpen","showPublishDialogOpen","isArchiveDialogOpen","showArchiveDialogOpen","archiveButton","isArchiveButtonVisible","Restore","publishButton","isPublishButtonVisible","Publish","onArchive","onPublish","isPublishButtonEnabled","isArchiveButtonEnabled","ModuleGradingRules","initialCourse","nameDE","nameEN","nameFR","nameIT","numberOfMandatoryModules","numberOfProcessModules","numberOfSelectionModules","modulesValidity","certificateValidity","modules","modulesRelevantForGrade","ModuleStatus","ModuleCertificateValidity","ModuleGradingRulesTranslationKey","AverageGrade","AllExams","ModuleType","ModuleStateTranslationKey","ModuleCertificateValidityTranslationKey","OneYear","ExamStatus","ExamType","ModuleTypeTranslationKey","Mandatory","ProcessModule","OptionalModule","GetLocalizedName","GridNumberField","min","max","innerValue","setInnerValue","hasError","parsed","is","NaN","form","CourseFormFields","isCreation","handleFieldChange","isReadOnly","requiredFieldStatus","selectedCoursesAsOptionTypes","moduleSelected","modulesOptions","availableCourseTypes","isNameDEEmpty","isNameENEmpty","isNameFREmpty","isNameITEmpty","isModuleNumbersZero","wrap","InputLabel","Select","selectedElementsArray","isTypeEmpty","typeIndex","getModule","ModuleSelectionDialog","selectableModules","filteredModules","setFilteredModules","toggleModuleSelection","nonSelectedFilteredModules","selectedModules","CourseFormModules","courseModules","handleAddModules","handleRemoveModule","selectionDialogOpened","setSelectionDialogOpened","allModules","setAllModules","unmounted","moduleType","stopPropagation","isModuleListEmpty","cm","CourseForm","isUpdating","isCreating","isPublishing","isArchiving","isDeleting","fetchedCourse","setCourse","setRequiredFieldStatus","isReadonly","courses","handlePublish","validateForm","handleArchive","forPublish","currentStatus","isInvalid","reduce","prev","curr","change","m","CourseGrid","CourseList","ExamDayType","ExamStateTranslationKey","ExamTypeTranslationKey","Written","Oral","TermPaper","initialExam","examExpenses","correctionExpenses","expertExpenses","GridCurrencyField","onFieldChange","gridProps","outputFormat","currencySymbol","decimalCharacter","digitGroupSeparator","minimumValue","ExamFormFields","ExamForm","setIsLoading","setExam","getExam","Exam","updateExam","formHasEmptyFields","isFieldEmpty","publishExam","archiveExam","deleteExam","ExamGrid","ExamList","setExams","navigateToExam","getExamSessionUrl","getExamDayUrl","examDayId","getRoomAssignmentUrl","roomAssignmentId","examSessionApi","getExamSessions","getExamSession","getAvailableDays","deleteExamSession","createExamSession","examSession","updateExamSession","examSessionViewModel","updateAndPublishExamSession","queryFn","_queryApi","_extraOptions","fetchWithBaseQuery","updateResponse","publishResponse","unPublishExamSession","deleteExamDay","createExamDay","updateExamDay","createRoomAssignment","deleteRoomAssignment","updateExamAndExpertAssignments","updateExpertAssignments","publishExamResults","addExamSessionLocations","locationIds","deleteExamSessionLocation","locationId","startSurvey","surveyDeadline","sendInvitation","invitationType","personType","sendResultNotifications","exportOrders","importPevUrl","getWrittenExamScoreImportUrl","useGetExamSessionQuery","useGetExamSessionsQuery","useGetAvailableDaysQuery","useDeleteExamSessionMutation","useCreateExamSessionMutation","useUpdateExamSessionMutation","useUpdateAndPublishExamSessionMutation","useUnPublishExamSessionMutation","useDeleteExamDayMutation","useCreateExamDayMutation","useUpdateExamDayMutation","useCreateRoomAssignmentMutation","useDeleteRoomAssignmentMutation","useUpdateExamAndExpertAssignmentsMutation","useUpdateExpertAssignmentsMutation","usePublishExamResultsMutation","useAddExamSessionLocationsMutation","useDeleteExamSessionLocationMutation","useStartSurveyMutation","useSendInvitationMutation","useSendResultNotificationsMutation","useExportOrdersMutation","TimeSlotStructureType","TimeSlotType","ExamFormatLabels","Correction","initialExamSession","locations","published","signupEndDate","signupStartDate","examDays","confirmationMailHistory","examResultDate","objectionDate","gradingConferenceDate","freeCancellationEndDate","resultsArePublished","examsStartDate","examsEndDate","correctionStartDate","correctionEndDate","inspectionStartDate","inspectionEndDate","sessionKeyDE","sessionKeyEN","sessionKeyFR","sessionKeyIT","TimeSlotStructureLabels","OralHBB_ProcessModule","OralIntermediary","ElectiveWritten","WrittenHBB_ProcessModule","WrittenIntermediary","MandatoryWritten","gap","TitleWithIcon","card","minHeight","pos","restLine","CustomCard","deleteConfirmationHeader","deleteConfirmationContent","isOpenButtonVisible","headerClass","cardHeader","CardHeader","Launch","cardContent","CardContent","gutterBottom","line1","line2","line3","line4","restLines","line","Card","isCardClickDisabled","CardActionArea","LanguageList","languageRegions","languageRegion","ExamChips","examElements","RoomAssignmentCard","isUserRoomAssignment","roomAssignment","onDeleteRoomAssignment","examAssignments","assignment","getExams","room","rooms","roomId","roomAssignmentIcon","isPreparationRoom","isPcRoom","floor","numberOfSeats","languagesElement","examsElement","RoomAssignmentList","roomAssignments","onStartAddingRoomAssignment","cardProps","roomCards","TimeSlotStructureSelect","structureOptions","structureValue","selectedValue","structure","disableClearable","ExamDayFields","examDay","minDate","maxDate","hasRoomAssignments","handleDateChange","timeSlotStructureType","ExamDayForm","isExamSessionFetching","isDeleteRoomAssignmentLoading","isDeleteExamDayLoading","isCreateExamDayLoading","isUpdateExamDayLoading","availableUsers","availableCorrectionExperts","setExamDay","now","utcToday","UTC","getMonth","getDate","utcFrom","utcTo","examDayDate","examSessionLocation","requestData","handleDeleteRoomAssignment","assignProctorsToWrittenExamsButton","userRoomAssignment","WrittenExam","assignProctorsToOralPreparationButton","OralPreparation","assignExpertsToOralExamButton","OralExam","assignExpertsToCorrectionExamsButton","partialExamDay","prevExamDay","apiUrl","getExamSessionCandidateUrl","examSessionCandidateApi","getExamSessionCandidates","getExamSessionCandidateById","cancelCandidateModule","examSessionCandidateId","candidateWillGetRefund","comments","reBookCandidateExam","assignCandidatesAndExperts","candidateTags","examSessionCandidates","updateCandidateModule","approveCandidateModule","rejectCandidateModule","listModuleDocuments","rebookCandidateModule","calculateExamResults","useGetExamSessionCandidatesQuery","useGetExamSessionCandidateByIdQuery","useReBookCandidateExamMutation","useAssignCandidatesAndExpertsMutation","useUpdateCandidateModuleMutation","useApproveCandidateModuleMutation","useRejectCandidateModuleMutation","useListModuleDocumentsQuery","useCalculateExamResultsMutation","useCancelCandidateModuleMutation","useRebookCandidateModuleMutation","getLocationUrl","getRoomUrl","locationsApi","getLocations","getLocation","deleteLocation","createLocation","updateLocation","deleteRoom","createRoom","updateRoom","useGetLocationsQuery","useGetLocationQuery","useDeleteLocationMutation","useCreateLocationMutation","useUpdateLocationMutation","useDeleteRoomMutation","useCreateRoomMutation","useUpdateRoomMutation","verticalAlign","CustomSplitButton","onMenuItemClick","setOpen","anchorRef","selectedIndex","setSelectedIndex","handleClose","contains","ButtonGroup","aria-controls","aria-expanded","aria-haspopup","prevOpen","Popper","anchorEl","transition","disablePortal","TransitionProps","placement","Grow","transformOrigin","ClickAwayListener","onClickAway","MenuList","handleMenuItemClick","ConfirmPublishResultsDialog","PublishedExamSelectionDialog","selectableExams","filteredExams","setFilteredExams","toggleExamSelection","getExamSecondaryText","includedInCourses","includedInModules","nonSelectedFilteredExams","selectedExams","EditExamSessionExamCourseTypesDialog","selectableCourseTypes","filteredCourseTypes","setFilteredCourseTypes","toggleCourseTypeSelection","selectedCourseType","ExamSessionFormExams","addExamItems","handleAddExams","handleEditExam","handleRemoveExam","allExams","setAllExams","selectedExam","setSelectedExam","newExams","y","ExamSessionFields","LocaleFormatDate","d","LocaleFormatDateRange","dateFrom","dateTo","separator","ExamSessionFieldsReadonly","isSurveyDialogOpen","isSurveyDealineEmpty","isSurveyDeadlineEmpty","onAcceptSurvey","onCancelSurvey","LocationCard","onDeleteClick","contactName","contactEmailAddress","contactPhoneNo","LocationSelectionDialog","filteredLocations","setFilteredLocations","toggleSelection","nonSelectedFilteredLocations","searchText","selectedLocations","ExamSessionLocationList","examSessionLocations","allLocations","eventHandlers","selectableLocations","assignedLocations","locationCards","onLocationCardSelected","onRemovingLocation","Room","selectedLocationIds","onAssigningLocations","_locationIds","_locationId","ImportScoresAndGradesExamDialog","onRadioButtonChange","onSwitchChange","onLocationChange","isAllSelected","isInvitationDialogOpen","selectionValue","_extends","assign","arguments","source","prototype","hasOwnProperty","call","apply","_objectWithoutProperties","excluded","sourceKeys","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","CandidateModuleState","createElement","_ref","svgRef","viewBox","enableBackground","xmlSpace","ForwardRef","forwardRef","signUpApi","getExamSessionsAvailableForSignUp","getExamSessionAvailableForSignUp","getModuleExamDetails","moduleSelection","getAllModulesAttachments","getModuleAttachments","getModuleAttachmentUrl","addModuleAttachment","deleteModuleAttachment","signup","useGetExamSessionsAvailableForSignUpQuery","useGetExamSessionAvailableForSignUpQuery","useGetModuleExamDetailsQuery","useGetAllModulesAttachmentsQuery","useAddModuleAttachmentMutation","useGetModuleAttachmentsQuery","useDeleteModuleAttachmentMutation","useSignupMutation","PaymentMethodType","PaymentState","CandidateModuleStateTranslationKey","ApplicationAccepted","VerificationRequired","Failed","Cancelled","Expired","Equivalence","PaymentStatus","refunded","messageId","EPayment","Abacus","LoadingIndicator","show","Backdrop","CircularProgress","formDefaultValues","bookingWithInvoice","formSchema","yup","shape","default","defined","candidateSelect","languageCell","ExamSessionCandidateAddDialog","add","useForm","mode","defaultValues","resolver","yupResolver","handleSubmit","reset","resetField","watch","selectedCandidate","selectedLanguage","setSelectedLanguage","availableExamSession","refetch","isFetchingExams","candidateOptions","selectedCandidateOption","isCourseDisabled","courseOptions","selectedCourseOption","isModuleDisabled","moduleOptions","selectedModuleOption","submit","invalid","fieldState","languageKey","lang","ExamSessionCandidateListHeader","ExamSessionCandidateList","isAddDialogOpen","setIsAddDialogOpen","signUp","isSingUpLoading","addExamSessionCandidate","isRepeating","trainingProvider","willProvideDocumentsLater","needsDocuments","examSessionCandidate","allRoomsAssigned","candidateLastName","candidateFirstName","candidateEmail","email","moduleName","documentsUploaded","moduleState","paymentState","refundStatus","getRows","translationKey","rowGap","TitleBar","QuestionAnswer","locationsSelect","ExamSessionForm","setExamSession","setIsSurveyDialogOpen","setIsSurveyDeadlineEmpty","setLocationIds","setIsInvitationDialogOpen","setSelectionValue","setPersonType","setIsAllSelected","selectedLocationsOptions","setSelectedLocationsOptions","setSelectedLocationIds","mailingOptions","mailButtonTooltip","setMailButtonTooltip","isExamScoresAndGradesImportDialogOpen","setExamScoresAndGradesImportDialogOpen","isConfirmPublishResultsDialogOpen","setIsConfirmPublishResultsDialogOpen","isPublishExamResultsLoading","isExportingOrders","isCalculateExamResultsLoading","isDeleteExamSessionLoading","isCreateExamSessionLoading","isUpdateExamSessionLoading","isUpdateAndPublishExamSessionLoading","isUnPublishExamSessionLoading","isAddExamSessionLocationsLoading","isDeleteExamSessionLocationLoading","isStartSurveyLoading","isSendInvitationLoading","isSendResultNotificationsLoading","fetchedExamSession","isLocationsFetching","loc","navigateToExamSessionsList","examSessions","partialExamSession","prevExamSession","handleInvitationAccept","invitationLocationIds","candidatesNotified","assignedExpertsNotified","resetInvitationStates","handleMailButton","handleConfirmationMailHistory","confirmation","sessionHasRooms","unpublishButton","mailButton","Mail","exportButton","calculateExamResultsButton","SvgIcon","CalculatorIcon","publishExamResultsButton","InsertDriveFile","importScoresAndGradesByExamsButton","locationsOptions","ExamSessionExams","changedExam","updatedExamsCount","l","ExamSessionGrid","onImportPevButtonClick","today","filterIndex","newFilterLabel","updateFilterLabel","onExamSessionClick","ImportPevDialog","examSessionsState","ExamSessionList","navigateToExamSession","handleImportPevButtonClick","isImportPevDialogOpen","handleImportPevSuccess","handleImportPevDialogClose","renderExamSessions","LinkButton","href","ExamDayCard","ExamDayList","showAddButton","examDayCards","onExamDaySelected","onStartAddingExamDay","onScheduleOralExams","scheduleOralExamsAvailable","onScheduleWrittenExams","scheduleWrittenExamsAvailable","onScheduleCorrectionExams","scheduleCorrectionExamsAvailable","scheduleOptions","handler","selectedMenuIndex","setSelectedMenuIndex","buttonTooltip","setButtonTooltip","handleButtonClick","initialLocation","linkToMap","ExamSessionLocationFields","Link","underline","ExamSessionCandidateExamState","ExamSessionLocationForm","getLocationFromArray","locationHasExamType","examDayType","hasOralExams","hasWrittenExams","hasCorrectionExams","Map","employeeOralExamsSchedule","employeeWrittenExamsSchedule","employeeCorrectionExamsSchedule","useGetAllTrainingProvidersQuery","getAllTrainingProviders","fr","it","OralExamOption","ExamSessionCandidateExamStateTranslationKey","Booked","downloadFile","fileReference","containerId","getFileAvatarImg","filename","ext","substr","lastIndexOf","DocumentList","Avatar","src","getToolColumn","getDownloadIcon","getDeleteIcon","deletingFileId","deleteProgressBar","onDownloadFile","handleDownloadClick","onDeleteFile","handleDeleteClick","documents","ExamSessionCandidateAttachmentList","AttachFile","manualStates","termPaperManualStates","useGetTimeSlotStructureQuery","getTimeSlotStructure","setExamTimeSlotIndexes","timeSlotStructure","timeSlot","getExamTimeSlots","getTimeSlotLabel","startTime","endTime","getExamTimeSlotByIndex","examTimeSlotIndex","ExamSessionCandidateExamActions","examState","hideRebookButton","hideEditStateButton","hideResetStateButton","rebook","toggleExamManualState","isTermPaper","Autorenew","ExamSessionCandidateExamBookDialog","opened","examType","decline","selectedLocation","setSelectedLocation","selectedDay","setSelectedDay","locationViewModels","locationViewModel","dayViewModel","day","handleUpdateAvailableExamDay","examTypeLabel","locationAndDate","selectedLocationId","selectedDayId","ExamSessionCandidateExamGrade","grade","gradeChange","step","examGrade","parseFloat","isNaN","labelContainer","ExamSessionCandidateExamRow","labelTranslationKey","ExamSessionCandidateExamScore","score","scoreChange","examScore","conainer","editExamStateButtonContainer","stateSelect","stateLabel","ExamSessionCandidateExam","candidateExam","manualExamStateChange","examScoreChange","examGradeChange","rebookCandidateExam","isReBookCandidateExamLoading","isLocationDateDialogOpen","setIsLocationDateDialogOpen","isBookedExam","examName","locationName","roomName","preparationRoomAssignment","preparationRoom","preparationRoomName","timeSlotLabel","getExamTimeSlotLabelByIndex","timeSlotIndex","isCancelled","roomLanguages","handleRebook","rebookExam","handleAcceptRebook","isManualState","stateRow","manualState","locationRow","examDateRow","roomRow","preparationRoomRow","timeSlotRow","gradeRow","pointsRow","subheader","moduleContainer","flexDirection","moduleTitle","moduleCancel","radio","ExamSessionCandidateModule","onCancelModule","onRebookModule","callbacks","showCancelDialog","setShowCancelDialog","setComments","setCandidateWillGetRefund","Book","EventBusy","moduleToCancel","ExamSessionCandidateModules","OralExamOptionTranslationKey","KMU","Privathaushalte","verificationButtons","ExamSessionCandidateInfo","trainingProviders","refundStatusChange","optionChange","trainingProviderChange","isRepeatingChange","publishResultsToEmployerChange","validateModule","FormGridRow","titleId","AssignmentInd","abacusDebtorNumber","String","isRejected","averageGrade","getAverageGrade","getIsRepeatingValue","publishResultsToEmployer","Block","infoRow","ExamSessionCandidateForm","isUpdateModuleLoading","isApproveModuleLoading","isRejectModuleLoading","originalExamSessionCandidate","isExamSessionCandidateFetching","isTrainingProvidersFetching","cancelModuleForCandidate","isCancellingModule","rebookModuleForCandidate","isRebookingModule","setExamSessionCandidate","changeExamProperties","prevExamSessionCandidate","produce","draftExamSessionCandidate","changeModule","currentModule","handleCancelModule","trainingProviderKey","approved","initialSchedulerCandidateContextValue","schedulerCandidates","schedulerExamCandidates","addCandidate","removeCandidate","clearCandidates","SchedulerCandidateContextValue","createContext","initialSchedulerCaseNameContextValue","examCandidateCaseNames","updateCaseName","caseName","SchedulerCaseNameContextValue","initialSchedulerExpertContextValue","schedulerExperts","changeExpert","areFixed","selectedExperts","SchedulerExpertContextValue","initialSchedulerContextValue","examTypes","readonly","examSessionLabel","selectedLocationName","isSessionPublished","selectedExamDayId","addTimeSlotExam","removeTimeSlotExam","clearTimeSlotExams","setAllTimeSlotsExams","changeSelectedExamDay","save","navigateToSession","SchedulerContextValue","getExamDay","allExamDays","getRoomAssignmentFromExamDay","getRoomAssignment","getRoomExamAssignments","getCandidatesContextData","examDayIds","moduleOption","getExamTypes","isOralDay","getAssignCandidatesAndExpertsRequestModel","candidateAssignments","schedulerExamCandidate","candidateAssignment","examCandidateCaseName","examCandidate","examSessionExperts","getExamAndExpertsAssignmentRequestModels","roomExamDayAssignmentId","examSessionExams","updateRoomExperts","expertAssignment","assignedExperts","assignedUsers","assignedExpert","isFixed","SchedulerContextProvider","refetchOnMountOrArgChange","areExamSessionCandidatesFetching","isTimeSlotStructureFetching","isUpdateExamAndExpertAssignmentsLoading","isAssignCandidatesAndExpertsLoading","setSelectedExamDayId","setExamDays","setSchedulerCandidates","setSchedulerExperts","setSchedulerExamCandidates","setExamCandidateCaseNames","selectedExamDay","useMemo","preparationRooms","examRooms","updateCaseNames","useCallback","prevCaseNames","draftCaseNames","schedulerCaseNameContext","updateSchedulerExamCandidate","schedulerExamCandidatesFilter","updateData","prevCandidates","caseNamesToReset","newContext","draftCandidates","examCandidates","scheduleExam","prevSchedulerExperts","schedulerExpert","expertAssignments","updateExamDayExperts","examSessionCandidatesContext","examSessionExpertsContext","handleAddTimeSlotExam","prevExamDays","draftExamDays","handleRemoveTimeSlotExam","examAssignment","splice","handleClearTimeSlotExams","handleSetAllTimeSlotsExams","timeSlotIndexes","saveCandidateAndExpertsAssignments","requestModel","saveExamAndExpertsAssignments","examAndExpertAssignmentsRequestModel","schedulerContext","valid","uniqueSlots","locationRoomIds","existingSlot","slot","candidatesCount","areRoomsNotOverloaded","day1","day2","getExamDays","ed","ra","user","userId","Provider","useStepStyles","textDecoration","SchedulerStepIcon","SchedulerDayStepLabel","isLocationVisible","isStepActive","StepLabel","StepIconComponent","SchedulerExamDaySteps","showLocation","sortedExamDays","activeStep","Stepper","Step","getExpertUrl","expertsApi","getExperts","getExpert","deleteExpert","createExpert","updateExpert","useGetExpertsQuery","useGetExpertQuery","useDeleteExpertMutation","useCreateExpertMutation","useUpdateExpertMutation","examChip","ExamSelect","remove","clear","examComponents","valueType","removedValue","SchedulerExamSelectDialog","setSelectedExamIds","prevSelectedExamIds","SchedulerInfoRow","cellsCount","cellContent","rowLabel","tableCells","SchedulerLanguagesRow","useContext","r","getLanguagesForDayAndRoom","getOptions","users","withCity","re","UserSelect","minimumSelectedUsers","selectedUsers","onUserSelectChange","RoomAssignmentExpertSelect","allExperts","expertRole","isFixedExpert","minimumUsers","showAllExperts","getAllAssignedExpertsForDay","dateString","toDateString","flat","getExpertsProps","availableExperts","assignedUser","experts","selectedUser","expertProps","userRole","roomAssignmentLanguages","assignedExamIds","allAssignedUsers","Set","dayRoomAssignment","getRequiredExamIds","requiredCourseTypes","getRequiredCourseTypes","ea","getExpertSelectsProps","nameIdentifyier","SchedulerProctorRow","expertSelectors","roomAssignedWithUpdatedExperts","u","expertName","proctorWrittenExam","proctorOralPreparation","expertOralExam","getMinFixedExperts","expertSelectProps","expertSelect","translationId","SchedulerCandidateSelect","selectedCandidates","handleAddCandidate","handleRemoveCandidate","handleClearCandidates","getCandidateLabel","trim","optionLabel","mapToOption","selectedCandidateOptions","availableCandidateOptions","isFull","isOverloaded","SchedulerCaseNameTextField","setValue","SchedulerCell","isCorrectionDay","SchedulerTimeSlotRow","renderCell","renderTimeSlotLabel","getRoomExamIds","table","tableLayout","headerCell","top","expertsTableBody","borderRight","borderLeft","borderTop","boxSizing","roomColumn","secondaryRow","separationRow","assignExamButton","expertsSwitch","SchedulerTable","examSelectDialogRoomId","setExamSelectDialogRoomId","timeSlots","setShowAllExperts","closeExamSelectDialog","getExamSelectDialogButton","openExamSelectDialog","Queue","Briefing","Break","SchedulerButtons","mainContainer","tableContainer","Scheduler","CorrectionExamsScheduler","ExpertSchedulerCell","ExpertSchedulerContextProvider","currentExpert","isExpertFetching","allRooms","arrivalTime","expertSchedulerContext","ExpertScheduler","ExpertExamsScheduler","OralExamsScheduler","WrittenExamsScheduler","expertAvailabilityApi","getExpertAvailability","availabilityType","getExpertAvailabilityUrl","updateAvailability","expertAvailability","useGetExpertAvailabilityQuery","useUpdateAvailabilityMutation","TaskState","FullCellData","EmptyCellData","ExpertAvailabilityRow","availableExamDays","cells","selectedExamDayIds","allSessionExams","changedExamDay","newSelectedExamDay","isDateAlreadySelected","scope","cellData","getExamName","ExpertAvailabilitySetup","isFetchingExpert","initialExpertAvailability","isFetchingAvailbability","isUpdateAvailabilityLoading","setSelectedExamDayIds","getCellDataForExamDay","uniqueIds","getExamIdsOfExamDay","locationsCount","columns","dates","uniqueDates","getAllAvailableDays","columnCells","currentExamDay","cell","stickyHeader","col","horizontalIndex","verticalCellIndex","ExpertCorrectionAvailabilitySetup","ExpertExaminationAvailabilitySetup","requiredFields","isMobileNoEmpty","MyExpertProfile","emailChanged","setEmailChanged","validationStatus","setValidationStatus","profile","setProfile","isCurrenExpertFetching","isUpdateMeAsExpertLoading","saveChanges","allFieldsValid","validateRequiredFields","prevProfile","handleFieldValidation","fieldName","avatar","subTitle","homeSection","editButton","HomeSection","MandatoryFieldsAlert","userProfile","MyCourses","myCandidateCourses","examCasesApi","getExamCases","useGetExamCasesQuery","MyExamCases","examCases","examResultsApi","getExamResults","useGetExamResultsQuery","MyExamResults","examResults","Attachment","MyExamSessions","c","gridContent","expertExamsSchedule","TaskType","TaskStateTranslationKey","ToDo","InProgress","Done","TaskTypeTranslationKey","CheckAvailability","CheckCorrectionAvailability","Cancellation","UploadDocuments","MyTasks","tasks","t","deadline","task","relativeUrl","hasValidValues","items","Boolean","CandidateInformationList","disablePadding","Info","disableGutters","element","j","UserReadOnlyView","renderEditProfileButton","handleProfileClick","expertProfile","infoList","PhoneIphone","Cake","withRouter","MyUser","MyExamsTableExamRow","rel","moduleRow","freeCancellationDate","cancelButton","actions","MyExamsTableModuleRow","isFreeCancellationPossible","skipRow","MyExamsTable","moduleIndex","examIndex","SelfCancelDialog","onDecline","isCancelDialogOpen","MyExams","myModules","isModulesFetching","cancelDialogContext","setCancelDialogContext","startCertification","getCart","setCart","cart","cartMessageWrapper","alertMessage","cartMessage","Home","viewType","showResumeCartMessage","setShowResumeCartMessage","Internal","expertHome","severity","message","candidateHome","CandidateHome","ExpertHome","getInternalTaskUrl","internalTasksApi","getInternalTasks","getInternalTask","updateInternalTask","internalTask","useGetInternalTaskQuery","useGetInternalTasksQuery","useUpdateInternalTaskMutation","Row","candidateEmailAddress","orderId","transactionId","ModuleFields","examSessionKey","examDate","examLocation","examRoom","examTimeSlot","section","CancellationForm","internalTaskId","setInternalTask","isValidEmail","setIsValidEmail","fetchedInternalTask","isInternalTaskFetching","isUpdateInternalTaskLoading","setModule","handleComplete","creationDateDisplay","creationDate","completeTaskButton","RouterLink","approvedBy","RoomList","onRoomSelected","onStartAddingRoom","CantonSelect","cantonOptions","Cantons","LocationFields","handleValueChange","LocationForm","setLocation","setEmailValid","isDeleteLocationLoading","isCreateLocationLoading","isUpdateLocationLoading","fetchedLocation","partialLocation","prevLocation","LocationGrid","onLocationClick","locationsState","LocationList","navigateToLocation","renderLocations","setUpUser","userAuthenticator","sessionId","uuidv4","setLanguage","setItem","ActionCreators","changeLanguage","getAndSetLanguage","detectLanguageIfPossible","lastSelectedLanguage","isLanguage","toUpperCase","suggestedLanguage","navigator","startsWith","fetchUiAppRegistration","typeOfUser","UrlHelper","login","UserAuthenticator","clientId","authority","silentRequest","redirectUri","loginUrl","Promise","resolve","Msal","reject","GetToken","setLoginStatusAndEnsureUserExists","isLoggedIn","languageActions","getLastUserType","checkLoginStatus","lastUserType","config","IsAuthenticated","setAuthenticationClient","client","setAppRegistration","reduceReducers","StartCertificationSteps","footerButton","footerLinksContainer","media","card_content","card_title","card_button","bindActionCreators","LangActionCreators","destination","impressumLink","msg","warning","info","useNotification","handleLogin","sessionStorage","configuration","auth","knownAuthorities","cache","cacheLocation","clientApp","PublicClientApplication","initialize","loginRedirect","CardMedia","image","loginImage","loginButtonIcon","alt","initialModule","allowOptions","allowDocumentUpload","verificationRequired","price","abacusNumber","gradingRule","allowRegistrationOnlyOnce","ExamSelectionDialog","ModuleFormExams","moduleDetails","documentUploadCheckbox","breakpoints","down","order","allowOptionsCheckbox","validationRequiredCheckbox","ModuleFormFields","isPriceEmpty","isGradingRuleEmpty","ModuleForm","useLocation","Module","updateModule","publishModule","archiveModule","deleteModule","ModuleGrid","ModuleList","setModules","CompleteTaskButton","DocumentsManager","addModuleDocument","deleteModuleDocument","borderBottom","TaskDetails","taskDetails","examSessionName","useQuery","URLSearchParams","UploadDocumentsForm","isQueryLoading","completeTask","isCompletingTask","isCompleteDisabled","isTaskCompleted","isTaskPastDeadline","RoomFields","partialRoom","initialRoom","RoomForm","setRoom","isLocationFetching","isDeleteRoomLoading","isCreateRoomLoading","isUpdateRoomLoading","prevRoom","RoomAssignmentFields","showPreparationRoomSwitch","disablePreparationRoomSwitch","selectedRoom","RoomAssignmentForm","addRoomAssignment","isAddRoomAssignmentLoading","setRoomAssignment","setErrors","initialRoomAssignment","examDayNeedsPreparationRoom","examDayHasPreparationRoom","examDayRoomsIds","examDayNeedsPcRoom","unassignedRooms","selectedLanguages","prevRoomAssignment","partialRoomAssignment","TransactionStatus","initialContextData","availableExamSessions","referenceCourses","referenceModules","setValues","PersonalDataStep","handleNextStep","handlePrevStep","setActiveStep","initialFormData","modulesSelection","initialCourses","initialModules","CertificationDataWizardContext","CertificationDataWizardProvider","setData","setReferenceCourses","setReferenceModules","isAvailableExamSessionsLoading","currentCart","setCurrentCart","areInitialValuesUpdated","homeCountry","availableModules","rm","rc","PaymentAndCompletionStep","prevData","prevActiveStep","useSignUpContext","instructions","EmailConfirmationSent","creationErrors","stepper","buttonContainer","ControlButtons","onNextClick","onPreviousClick","backDisabled","nextDisabled","steps","getSteps","Form","schema","onSubmit","methods","noValidate","TextInput","withErrorMessage","useFormContext","register","formState","PlaceOfOriginSelectField","GenderSelectField","CountrySelectField","CompanySelectField","DateInput","RadioInput","address","businessData","cantonObj","getSchema","matches","excludeEmptyString","when","PrivacyPolicyDialog","acceptChecked","setAcceptChecked","highlighCheckbox","setHighlightCheckbox","disableBackdropClick","isUpdatingMe","showPrivacyDialog","setShowPrivacyDialog","validatedData","setValidatedData","handleAcceptPrivacyPolicy","Container","list","paddingInlineStart","marginBlockStart","marginBlockEnd","ModuleExamList","whiteSpace","ModuleSelectorRow","rowButtonAction","minimumFractionDigits","examDetails","ModuleSelector","allAvailableCourses","onModuleSelected","selectedCourseId","setSelectedCourseId","selectedExamSessionId","setSelectedExamSessionId","filteredExamSessions","s","getSelectionExamSessionExams","refModule","isAllowedWithFilters","isNotAlreadySelected","hasNoExamSessionModuleOverlap","hasNoExamSessionExamOverlap","currentExamSelection","moduleRowProps","sessionKey","currentExamsSelection","createFilteredModuleRow","rowProps","noPadding","UserSelectionRow","Collapse","in","timeout","unmountOnExit","UserModuleSelection","onModuleRemoved","totalPrice","mappedRows","paid","ModuleSelectionStep","initialModulesSelection","setModuleSelection","isCartSubmitting","setIsCartSubmitting","currentExamSession","hasPaidModules","finally","ExamFullSelectionCells","locationCell","dayCell","NormalSelectionCells","onDayChange","availableLocations","locationOptions","selectedLocationDetails","examDayOptions","TermPaperSelectionCells","ExamLocationAndDateStepRowExam","referenceExam","examPossibleDetails","updateExamDetails","setLocationId","noLocationRequired","isExamFull","isOk","newLocationId","ExamLocationAndDateStepRow","updateModuleSelection","allExamPossibleDetails","referenceModule","details","description","ExamLocationAndDateStep","setModulesSelection","update","findIndex","examsLocationDays","allExamsLocationsDays","examsLocations","locationDay","examsHaveSameLocation","expectedSelection","currentValidSelection","isSelectionComplete","ModuleAttachments","attachments","setWillProvideDocumentsLater","ModuleDetailsDialog","moduleData","handleOk","setTrainingProvider","setOption","isRepeater","setIsRepeater","reference","p","needsOption","ModulesDetailsStep","dialogModuleindex","setDialogModuleIndex","allModulesAttachments","getCourseName","getExamSessionName","moduleItems","moduleReference","ma","moduleItem","hasCompleteData","isInputComplete","startIcon","currentSelection","newModulesSelection","ErrorHelper","allErrors","GetModuleErrors","backdrop","LoadingSpinner","FaqLink","link","linkText","textWrap","PaymentMethodItem","onSelect","CembraPay","InvoicePaymentForm","birthDate","setBirthDate","phone","setPhone","phoneValid","setPhoneValid","buttons","selector","singleIcon","PaymentMethodSelectorDialog","onPay","selectedMethod","setSelectedMethod","isSavingMe","handleSelect","CreditCardAndOthers","handleInvoicePaymentSubmit","SummaryExamRow","examReference","displayDate","pointer","payButton","SummaryModuleRow","onRemoveModule","onPayModule","confirmRemoveDialog","setConfirmRemoveDialog","showPaymentSelector","setShowPaymentSelector","deviceFingerprint","busy","setBusy","moduleHasErrors","buttonLabel","startModulePayment","paymentMethod","paymentInfo","paymentUrl","Paid","onPayButtonClick","titleAccess","SelectionSummary","sum","confirmMessage","backDrop","datatransTrxId","waitingForOrderPaymentConfirmation","setWaitingForOrderPaymentConfirmation","confirmationError","setConfirmationError","checkStatusTimeout","setCheckStatusTimeout","moduleErrors","setModuleErrors","scheduleNextTransactionUpdate","setTimeout","getTransactionStatus","prevTimeout","updateCartWithModulesSelection","transaction","Initialized","getElementById","innerHTML","submitRegistration","allModulesPaid","paidModule","AlertTitle","StartCertificationWizard","labelProps","getStepContent","StartCertificationWizardContainer","RoomAssignmentRow","fixedExpertsLabel","fixedExpertsPlaceholder","reserveExpertsLabel","reserveExpertsPlaceholder","minimumFixedUsers","inline","RoomAssignmentBoard","assignPreparationRooms","labelsAndPlaceholders","isUpdateExpertAssignmentsLoading","prevDay","draftDay","updateAssignedExperts","filterRoomAssignments","ExpertsCorrectionExamAssignmentBoard","expertCorrectionExam","ExpertsOralExamAssignmentBoard","ProctorsOralPreparationAssignmentBoard","ProctorsWrittenExamAssignmentBoard","internalLogin","externalLogin","candidateWizard","expertId","expertCorrectionAvailability","userRoomAssignmentType","cancellationInternalTask","uploadDocumentsPersonTask","Routes","Login","exact","contrastText","selectIcon","languageIcon","LanguageSelect","onChangeLanguage","disableUnderline","Logout","logout","ListItemIcon","Lock","ListItemLink","up","paddingLeft","instance","Star","Dashboard","CoursesLogo","ModulesLogo","logoutRedirect","getActiveAccount","postLogoutRedirectUri","getConfiguration","loginBackground","toolbar","toolbarLogo","toolbarIcon","appBar","drawer","transitions","create","easing","sharp","duration","leavingScreen","appBarShift","enteringScreen","menuButton","menuButtonHidden","drawerPaper","drawerPaperClose","isLogin","showMenu","CssBaseline","AppBar","Toolbar","logo","noWrap","Drawer","ChevronLeft","defaultAnchorOrigin","horizontal","vertical","Notifications","componentDidUpdate","displayNewErrors","anchorOrigin","autoHideDuration","preventDuplicate","notificationsWithSnackbar","notificationsState","fontFamily","Woff2","Woff","unicodeRange","createMuiTheme","red","A400","typography","overrides","MuiCssBaseline","BuenosAiresWeb_Regular","BuenosAiresWeb_RegularItalic","BuenosAiresWeb_Bold","BuenosAiresWeb_BoldItalic","BuenosAiresWeb_Light","BuenosAiresWeb_LightItalic","BuenosAiresWeb_Thin","BuenosAiresWeb_ThinItalic","Root","setClientApp","registering","activeAccount","allAccounts","addEventCallback","eventType","EventType","LOGIN_SUCCESS","ThemeProvider","getElementsByTagName","getAttribute","createBrowserHistory","basename","configureStore","router","connectRouter","NotificationReducer","SessionReducer","middleware","getDefaultMiddleware","immutableCheck","ignoredPaths","serializableCheck","ignoredActionPaths","warnAfter","routerMiddleware","ReactDOM"],"mappings":"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","file":"static/js/main.834f54c7.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/external-login.f68782a3.jpg\";","module.exports = __webpack_public_path__ + \"static/media/login-icon.39540db8.svg\";","module.exports = __webpack_public_path__ + \"static/media/logo.40679b84.svg\";","module.exports = __webpack_public_path__ + \"static/media/CoursesLogo.eaedfb0f.svg\";","module.exports = __webpack_public_path__ + \"static/media/ModulesLogo.373a67ab.svg\";","module.exports = __webpack_public_path__ + \"static/media/BuenosAiresWeb-Regular.c71e9bbf.woff\";","module.exports = __webpack_public_path__ + \"static/media/BuenosAiresWeb-Regular.ebe27ba5.woff2\";","module.exports = __webpack_public_path__ + \"static/media/BuenosAiresWeb-RegularItalic.463d2837.woff\";","module.exports = __webpack_public_path__ + \"static/media/BuenosAiresWeb-RegularItalic.27e27b9a.woff2\";","module.exports = __webpack_public_path__ + \"static/media/BuenosAiresWeb-Bold.df6bdda5.woff\";","module.exports = __webpack_public_path__ + \"static/media/BuenosAiresWeb-Bold.671d9dbb.woff2\";","module.exports = __webpack_public_path__ + \"static/media/BuenosAiresWeb-BoldItalic.520750fc.woff\";","module.exports = __webpack_public_path__ + \"static/media/BuenosAiresWeb-BoldItalic.604898bb.woff2\";","module.exports = __webpack_public_path__ + \"static/media/BuenosAiresWeb-Light.e43e57c0.woff\";","module.exports = __webpack_public_path__ + \"static/media/BuenosAiresWeb-Light.d61b4821.woff2\";","module.exports = __webpack_public_path__ + \"static/media/BuenosAiresWeb-LightItalic.b3e8544b.woff\";","module.exports = __webpack_public_path__ + \"static/media/BuenosAiresWeb-LightItalic.b61c7946.woff2\";","module.exports = __webpack_public_path__ + \"static/media/BuenosAiresWeb-Thin.811e9eb4.woff\";","module.exports = __webpack_public_path__ + \"static/media/BuenosAiresWeb-Thin.9495d142.woff2\";","module.exports = __webpack_public_path__ + \"static/media/BuenosAiresWeb-ThinItalic.3b082db8.woff\";","module.exports = __webpack_public_path__ + \"static/media/BuenosAiresWeb-ThinItalic.26181bac.woff2\";","import { CourseType } from \"../model/Course\";\nimport { TranslationKey } from \"../translations/TranslationKey\";\n\nexport enum PropertyNames {\n id = \"id\",\n roleExams = \"roleExams\",\n firstName = \"firstName\",\n lastName = \"lastName\",\n emailAddress = \"emailAddress\",\n employer = \"employer\",\n employerInformation = \"employerInformation\",\n birthday = \"birthday\",\n blocked = \"blocked\",\n gender = \"gender\",\n ahvNumber = \"ahvNumber\",\n street = \"street\",\n streetNumber = \"streetNumber\",\n zipCode = \"zipCode\",\n city = \"city\",\n country = \"country\",\n phoneNumber = \"phoneNumber\",\n mobileNumber = \"mobileNumber\",\n ciceroNumber = \"ciceroNumber\",\n bankAccount = \"bankAccount\",\n correspondenceLanguage = \"correspondenceLanguage\",\n languages = \"languages\",\n birthdate = \"birthdate\",\n canton = \"canton\",\n employerCity = \"employerCity\",\n employerCountry = \"employerCountry\",\n employerStreet = \"employerStreet\",\n employerStreetNumber = \"employerStreetNumber\",\n employerZipCode = \"employerZipCode\",\n nationalityIsSwiss = \"nationalityIsSwiss\",\n placeOfOrigin = \"placeOfOrigin\",\n privateIsPreferredContact = \"privateIsPreferredContact\",\n numberOfFailedWrittenExams = \"numberOfFailedWrittenExams\",\n numberOfFailedOralExams = \"numberOfFailedOralExams\",\n nameDE = \"nameDE\",\n nameFR = \"nameFR\",\n nameIT = \"nameIT\",\n nameEN = \"nameEN\",\n examId = \"examId\",\n abacusNumber = \"abacusNumber\",\n price = \"price\",\n expensesOralExam = \"expensesOralExam\",\n expensesWrittenExam = \"expensesWrittenExam\",\n moduleDetails = \"moduleDetails\",\n moduleType = \"moduleType\",\n certificateValidity = \"certificateValidity\",\n internalComment = \"internalComment\",\n}\n\nexport const Switzerland = \"Schweiz\";\nexport const SwissGermanLocale = \"de-CH\";\nexport const SwissTimeZone = \"Europe/Zurich\";\n\nexport enum Language {\n DE = \"DE\",\n EN = \"EN\",\n FR = \"FR\",\n IT = \"IT\",\n}\n\nexport type LanguageKeys = \"DE\" | \"EN\" | \"FR\" | \"IT\";\n\nexport const LanguageLocale: { [id in Language]: string } = {\n [Language.DE]: \"de-de\",\n [Language.EN]: \"en-en\",\n [Language.FR]: \"fr-fr\",\n [Language.IT]: \"it-it\",\n};\n\nexport const LanguageLabels: { [id in Language]: string } = {\n [Language.DE]: \"Deutsch\",\n [Language.EN]: \"English\",\n [Language.FR]: \"Français\",\n [Language.IT]: \"Italiano\",\n};\n\nexport const LanguageTranslationKeys: { [id in Language]: TranslationKey } = {\n [Language.DE]: \"common.language.de\",\n [Language.EN]: \"common.language.en\",\n [Language.FR]: \"common.language.fr\",\n [Language.IT]: \"common.language.it\",\n};\n\nexport interface SelectOption {\n value: string;\n label: string;\n}\n\nexport interface ContactReference {\n id: string;\n displayName: string;\n}\n\nexport enum UserGender {\n Male = \"Male\",\n Female = \"Female\",\n}\n\nexport const UserGenderLabels = (key: UserGender): TranslationKey => {\n switch (key) {\n case UserGender.Male: {\n return \"common.genders.male\";\n }\n case UserGender.Female: {\n return \"common.genders.female\";\n }\n }\n};\n\nexport const DateTimeFormat = \"DD.MM.YYYY HH:mm\";\nexport const DateFormat = \"DD.MM.YYYY\";\nexport const TimeFormat = \"HH:mm\";\n\nexport interface RequiredCandidate {\n isFirstnameEmpty: boolean;\n isLastnameEmpty: boolean;\n isGenderEmpty: boolean;\n isBirthDateEmpty: boolean;\n isEmailEmpty: boolean;\n isStreetEmpty: boolean;\n isStreetNumberEmpty: boolean;\n isZipCodeEmpty: boolean;\n isCityEmpty: boolean;\n isCountryEmpty: boolean;\n isLanguageEmpty: boolean;\n isAhvNoEmpty: boolean;\n isNationalityEmpty: boolean;\n isPlaceOfOriginEmpty: boolean;\n isCantonEmpty: boolean;\n isEmployerInformationEmpty: boolean;\n}\n\nexport interface RequiredCandidateExpert {\n isBankAccountEmpty: boolean;\n hasEmptyRoleArray: ExpertRole[];\n hasEmptyRole: boolean;\n}\n\nexport interface RequiredModule {\n isNameDEEmpty: boolean;\n isNameENEmpty: boolean;\n isNameITEmpty: boolean;\n isNameFREmpty: boolean;\n}\n\nexport interface RequiredCandidateMyProfile {\n isFirstnameEmpty: boolean;\n isLastnameEmpty: boolean;\n isGenderEmpty: boolean;\n isBirthDateEmpty: boolean;\n isStreetEmpty: boolean;\n isStreetNumberEmpty: boolean;\n isZipCodeEmpty: boolean;\n isCityEmpty: boolean;\n isCountryEmpty: boolean;\n isLanguageEmpty: boolean;\n isAhvNoEmpty: boolean;\n isNationalityEmpty: boolean;\n isPlaceOfOriginEmpty: boolean;\n isCantonEmpty: boolean;\n isEmployerInformationEmpty: boolean;\n isEmployerEmpty: boolean;\n isEmployerStreetEmpty: boolean;\n isEmployerStreetNumberEmpty: boolean;\n isEmployerZipCodeEmpty: boolean;\n isEmployerCityEmpty: boolean;\n isEmployerCountryEmpty: boolean;\n isEmailEmpty: boolean;\n isBankAccountEmpty: boolean;\n}\n\nexport interface ValidationFields {\n isEmailValid: boolean;\n isAhvValid: boolean;\n isCiceroValid: boolean;\n isPhoneValid: boolean;\n isMobileValid: boolean;\n}\n\nexport interface ContactReference {\n id: string;\n displayName: string;\n}\n\nexport enum UserRoomAssignmentType {\n OralExam = \"OralExam\",\n WrittenExam = \"WrittenExam\",\n OralPreparation = \"OralPreparation\",\n Correction = \"Correction\",\n}\n\nexport enum ExpertRole {\n Prüfungsexperten = \"Prüfungsexperten\",\n Expertenschulung = \"Expertenschulung\",\n Hauptexperten = \"Hauptexperten\",\n Leiterprüfungszentrum = \"Leiterprüfungszentrum\",\n EinspracheKomission = \"EinspracheKomission\",\n Prüfungskomission = \"Prüfungskomission\",\n Aufsichtsexperten = \"Aufsichtsexperten\",\n QSK = \"QSK\",\n}\n\nexport type RoleWithExamsAndCourseTypes = {\n role: ExpertRole;\n examIds: string[];\n courseTypes: CourseType[];\n};\n\nexport const AllExpertRoles: ExpertRole[] = Object.values(ExpertRole);\n\nexport function getExpertRoleTranslationKey(role: ExpertRole): TranslationKey {\n return (\"expert.field.role.\" + role) as TranslationKey;\n}\n\nexport enum LocalStorageKey {\n LastSelectedLanguageKey = \"LastSelectedLangKey\",\n}\n\nexport enum ExpertMinumimFixedUsers {\n \"proctorWrittenExam\" = 2,\n \"proctorOralPreparation\" = 1,\n \"expertOralExam\" = 2,\n \"expertCorrectionExam\" = 0,\n}\n\nexport const NewEntityId = \"0000000000\";\n","export const en = {\r\n \"application.examLocationAndDate.dateColumn\": \"Date\",\r\n \"application.examLocationAndDate.examColumn\": \"Exam\",\r\n \"application.examLocationAndDate.examFull\": \"There are no more seats available for this exam in the selected exam session. Please go back and change your selection.\",\r\n \"application.examLocationAndDate.examTypeColumn\": \"Exam type\",\r\n \"application.examLocationAndDate.locationColumn\": \"Location\",\r\n \"application.examLocationAndDate.moduleColumn\": \"Module\",\r\n \"application.examLocationAndDate.statusColumn\": \"Status\",\r\n \"application.examLocationAndDate.validattion.examsHaveDifferentLocations\": \"It is not possible to book exams at different locations on the same day. Please adjust your selection.\",\r\n \"application.examLocationAndDateExplanationText\": \"Please select location and date for the selected exams.\",\r\n \"application.moduleSelector.examsColumn\": \"Exams\",\r\n \"application.moduleSelector.noAvaiableModules\": \"No available modules\",\r\n \"application.moduleSelector.typeColumn\": \"Type\",\r\n \"application.selectedExamsTitle\": \"Selected modules and exams\",\r\n \"application.uploadVerificationFilesMessage\": \"Please, upload your files for verification\",\r\n \"application.userSelector.course\": \"Course\",\r\n \"application.userSelector.examSession\": \"Exam session\",\r\n \"application.userSelector.noSelectedModules\": \"No selected modules\",\r\n \"cancellationTaskForm.candidateRefund\": \"Candidate will get a refund\",\r\n \"cancellationTaskForm.candidateSubHeader\": \"Candidate\",\r\n \"cancellationTaskForm.certificationTypeLabel\": \"Certification Type\",\r\n \"cancellationTaskForm.commentsLabel\": \"Comments\",\r\n \"cancellationTaskForm.completeTask\": \"Save and complete the task\",\r\n \"cancellationTaskForm.createdOn\": \"Created on\",\r\n \"cancellationTaskForm.dateLabel\": \"Date\",\r\n \"cancellationTaskForm.emailLabel\": \"Email\",\r\n \"cancellationTaskForm.examTypeLabel\": \"Exam Type\",\r\n \"cancellationTaskForm.firstNameLabel\": \"First Name\",\r\n \"cancellationTaskForm.header\": \"Cancellation Task\",\r\n \"cancellationTaskForm.lastNameLabel\": \"Last Name\",\r\n \"cancellationTaskForm.locationLabel\": \"Location\",\r\n \"cancellationTaskForm.moduleSubHeader\": \"Module\",\r\n \"cancellationTaskForm.navigateToCandidateSession\": \"Go to candidate's certification page\",\r\n \"cancellationTaskForm.orderId\": \"Order Id\",\r\n \"cancellationTaskForm.refundApprovedBy\": \"Refund approved by\",\r\n \"cancellationTaskForm.roomLabel\": \"Room\",\r\n \"cancellationTaskForm.sessionLabel\": \"Session\",\r\n \"cancellationTaskForm.timeSlotLabel\": \"Time Slot\",\r\n \"cancellationTaskForm.transactionId\": \"Transaction Id\",\r\n \"candidate.button.exportAll\": \"Export all candidates\",\r\n \"candidate.button.new\": \"Add new Candidate\",\r\n \"candidate.button.uploadEdiIds\": \"Upload EDI Ids\",\r\n \"candidate.disableConfirmationDialog.message\": \"Please make sure your personal details are correct, as they cannot be changed afterwards.\",\r\n \"candidate.ediIdsDialog.title\": \"Upload the file that contains the EDI Ids\",\r\n \"candidate.ediIdsDialog.uploadSuccess\": \"Upload success. Number of updated candidates:\",\r\n \"candidate.field.canton\": \"Canton\",\r\n \"candidate.field.correspondenceLanguage\": \"Correspondence Language\",\r\n \"candidate.field.invoiceRecipient\": \"Invoice Recipient\",\r\n \"candidate.field.nationality\": \"Nationality\",\r\n \"candidate.field.numberOfFailedOralExams\": \"Failed oral exams\",\r\n \"candidate.field.numberOfFailedWrittenExams\": \"Failed written exams\",\r\n \"candidate.field.placeOfOrigin\": \"Place of Origin\",\r\n \"candidate.header\": \"Candidates\",\r\n \"candidate.section.invoice\": \"Invoice\",\r\n \"candidate.snackbar.successfulCreate\": \"The Candidate was added successfully.\",\r\n \"candidate.snackbar.successfulDelete\": \"The Candidate was deleted successfully.\",\r\n \"candidate.snackbar.successfulExport\": \"The abacus debtor number has been scheduled to export.\",\r\n \"candidate.snackbar.successfulUpdate\": \"The Candidate was updated successfully.\",\r\n \"candidate.validation.disabledFields\": \"Fields can not be updated after confirmation\",\r\n \"candidate.validation.idNotEmpty\": \"The candidate ID can not be empty.\",\r\n \"candidateAssignment.validation.preparationRoomNotAllowed.\": \"A candidate can't be assigned to a preparation room.\",\r\n \"candidateCourse.certificate.fileNamePrefix\": \"Certificate\",\r\n \"candidateCourse.performanceRecord.fileNamePrefix\": \"Performance Record\",\r\n \"candidateCourseStatus.open\": \"Open\",\r\n \"candidateCourseStatus.passed\": \"Passed\",\r\n \"candidateWizard.error\": \"The registration for the certification failed.\",\r\n \"candidateWizard.success\": \"Success! You should have received one email for each booking and your exams will appear on the Candidate view.\",\r\n \"canton.ag\": \"Aargau\",\r\n \"canton.ai\": \"Appenzell Inner-Rhodes\",\r\n \"canton.ar\": \"Appenzell Outer-Rhodes\",\r\n \"canton.be\": \"Bern\",\r\n \"canton.bl\": \"Basel District\",\r\n \"canton.bs\": \"Basel\",\r\n \"canton.fr\": \"Fribourg\",\r\n \"canton.ge\": \"Geneva\",\r\n \"canton.gl\": \"Glarus\",\r\n \"canton.gr\": \"Grisons\",\r\n \"canton.ju\": \"Jura\",\r\n \"canton.lu\": \"Lucerne\",\r\n \"canton.ne\": \"Neuenburg\",\r\n \"canton.nw\": \"Nidwalden\",\r\n \"canton.ow\": \"Obwalden\",\r\n \"canton.sg\": \"St. Gallen\",\r\n \"canton.sh\": \"Schaffhausen\",\r\n \"canton.so\": \"Solothurn\",\r\n \"canton.sz\": \"Schwyz\",\r\n \"canton.tg\": \"Thurgau\",\r\n \"canton.ti\": \"Ticino\",\r\n \"canton.ur\": \"Uri\",\r\n \"canton.vd\": \"Vaud\",\r\n \"canton.vs\": \"Valais\",\r\n \"canton.zg\": \"Zug\",\r\n \"canton.zh\": \"Zurich\",\r\n \"cart.validation.candidateIdNotEmpty\": \"Candidate Id cannot be empty.\",\r\n \"cart.validation.cartEmpty\": \"Cart is empty.\",\r\n \"cart.validation.examNotFound\": \"Exam not found.\",\r\n \"cart.validation.missingCourseId\": \"Missing Course ID\",\r\n \"cart.validation.missingExamDayIdOnExam\": \"Missing exam day ID on exam.\",\r\n \"cart.validation.missingExamSessionId\": \"Missing exam session ID\",\r\n \"cart.validation.missingInformationInModule\": \"Missing information in module.\",\r\n \"cart.validation.missingModuleId\": \"Missing Module ID\",\r\n \"cart.validation.moduleAlreadyBooked\": \"Module already booked.\",\r\n \"cart.validation.moduleAlreadyPaid\": \"Module already paid.\",\r\n \"cart.validation.moduleNotFound\": \"Module not found in cart.\",\r\n \"certification.button.new\": \"Exam Registration\",\r\n \"certification.examDate\": \"Exam Date\",\r\n \"certification.examType\": \"Exam Type\",\r\n \"certification.fachrichtung\": \"Oral exam option\",\r\n \"certification.state\": \"State\",\r\n \"certifications.noInfo\": \"No certifications found\",\r\n \"common.accept\": \"Accept\",\r\n \"common.archive\": \"Archive\",\r\n \"common.attention\": \"Attention\",\r\n \"common.business\": \"business\",\r\n \"common.cancel\": \"Cancel\",\r\n \"common.certificationsGenerated\": \"Certifications generated\",\r\n \"common.close\": \"Close\",\r\n \"common.comment\": \"Comment\",\r\n \"common.confirmArchiveDescription\": \"Do you really want to archive the entity?\",\r\n \"common.confirmDeleteDescription\": \"Do you really want to delete the entity?\",\r\n \"common.confirmPublishDescription\": \"Are you sure you want to publish this entity?\",\r\n \"common.debtorNumber\": \"Debtor number\",\r\n \"common.delete\": \"Delete\",\r\n \"common.dragAndDrop.description\": \"Drag & Drop the document here\",\r\n \"common.errorMessage\": \"Something went wrong\",\r\n \"common.exam\": \"Exam\",\r\n \"common.export\": \"Export\",\r\n \"common.field.status\": \"Status\",\r\n \"common.genders.female\": \"Female\",\r\n \"common.genders.male\": \"Male\",\r\n \"common.generateCertifications.confirmation\": \"Are you sure you want to generate certifications?\",\r\n \"common.generateCertifications\": \"Generate Certifications\",\r\n \"common.language.de\": \"German\",\r\n \"common.language.en\": \"English\",\r\n \"common.language.fr\": \"French\",\r\n \"common.language.it\": \"Italian\",\r\n \"common.language\": \"Language\",\r\n \"common.languages\": \"Languages\",\r\n \"common.lastModification.by\": \"by\",\r\n \"common.lastModification.on\": \"on\",\r\n \"common.lastModification\": \"Last modified\",\r\n \"common.module\": \"Module\",\r\n \"common.no\": \"no\",\r\n \"common.noLanguagesAssigned\": \"No languages assigned\",\r\n \"common.ok\": \"Ok\",\r\n \"common.pleaseSelect\": \"Please select\",\r\n \"common.private\": \"private\",\r\n \"common.publish\": \"Publish\",\r\n \"common.reject\": \"Reject\",\r\n \"common.rejected\": \"Rejected\",\r\n \"common.rowsPerPage\": \"Rows per page:\",\r\n \"common.save\": \"Save\",\r\n \"common.scheduleCorrectionExams\": \"Correction planning\",\r\n \"common.scheduleOralExams\": \"Schedule oral exams\",\r\n \"common.scheduleWrittenExams\": \"Schedule written exams\",\r\n \"common.search\": \"Search\",\r\n \"common.selectElement\": \"Select a\",\r\n \"common.selectElements\": \"Select\",\r\n \"common.signOut\": \"Sign Out\",\r\n \"common.status.archived\": \"Archived\",\r\n \"common.status.cancelled\": \"Cancelled\",\r\n \"common.status.deleted\": \"Deleted\",\r\n \"common.status.draft\": \"Draft\",\r\n \"common.status.published\": \"Published\",\r\n \"common.survey\": \"Survey\",\r\n \"common.total\": \"Total\",\r\n \"common.unexpectedError\": \"Unexpected error. Please, try again later.\",\r\n \"common.Unknown\": \"Unknown\",\r\n \"common.unpublish\": \"Unpublish\",\r\n \"common.uploadError\": \"Upload error. The format of the file is not valid.\",\r\n \"common.validation.entityWithIdNotExistsAndCanNotBeAssigned\": \"The Entity with the given ID was not found and can't be assigned.\",\r\n \"common.validation.entityWithIdNotExistsAndCanNotBeDeleted\": \"The Entity with the given ID was not found and can't be deleted.\",\r\n \"common.validation.idNotEmpty\": \"The ID can't be empty.\",\r\n \"common.validation.name.empty\": \"The name can't be empty.\",\r\n \"common.validation.status.empty\": \"Status should not be empty.\",\r\n \"common.validation.status.invalidTransition\": \"This status transition is invalid.\",\r\n \"common.validation.status.invalidValue\": \"Incorrect status value.\",\r\n \"common.yes\": \"yes\",\r\n \"countries.switzerland.name\": \"Schweiz\",\r\n \"course.button.addModules\": \"Add modules\",\r\n \"course.dialog.confirmPublishDescription\": \"Are you sure you want to publish this Course?\",\r\n \"course.dialog.noAvailableModules\": \"No modules available.\",\r\n \"course.dialog.selectModules\": \"Select modules\",\r\n \"course.field.certificateValidity.FiveYears\": \"5 years\",\r\n \"course.field.certificateValidity.Unlimited\": \"Unlimited\",\r\n \"course.field.certificateValidity\": \"Validity of the certification\",\r\n \"course.field.moduleRelevantForGrade\": \"Relevant for course grade\",\r\n \"course.field.modulesValidity.days\": \"days\",\r\n \"course.field.modulesValidity.unlimited\": \"Unlimited\",\r\n \"course.field.modulesValidity\": \"Modules validity\",\r\n \"course.field.name\": \"Course name\",\r\n \"course.field.nameDE\": \"Course name - DE\",\r\n \"course.field.nameEN\": \"Course name - EN\",\r\n \"course.field.nameFR\": \"Course name - FR\",\r\n \"course.field.nameIT\": \"Course name - IT\",\r\n \"course.field.numberOfMandatoryModules\": \"Number of mandatory modules\",\r\n \"course.field.numberOfProcessModules\": \"Number of process modules\",\r\n \"course.field.numberOfSelectionModules\": \"Number of selection modules\",\r\n \"course.header\": \"Course\",\r\n \"course.list.header\": \"Courses\",\r\n \"course.section.modules\": \"Modules\",\r\n \"course.snackbar.successfulArchive\": \"The Course was archived successfully.\",\r\n \"course.snackbar.successfulDelete\": \"The Course was deleted successfully.\",\r\n \"course.snackbar.successfulPublish\": \"The Course was published successfully.\",\r\n \"course.type.cicero\": \"Professional certificate/Cicero\",\r\n \"course.type.ciceroGroup\": \"Professional certificate/Cicero group\",\r\n \"course.type.hve\": \"HVE\",\r\n \"course.type.hveGroup\": \"HVE group\",\r\n \"course.type.intermediary\": \"Intermediary\",\r\n \"course.type.intermediaryGroup\": \"Intermediary group\",\r\n \"course.type.mindeststandard\": \"Minimum standards\",\r\n \"course.type.mindeststandardGroup\": \"Minimum standards group\",\r\n \"course.type\": \" Course type\",\r\n \"course.validation.idNotEmpty\": \"The Course ID can't be empty.\",\r\n \"course.validation.modules.empty\": \"Please select at least one module.\",\r\n \"course.validation.numberOfAnyModulesIsZero\": \"Total number of modules must be at least 1.\",\r\n \"course.validation.typeIsInvalid\": \"The course type is invalid.\",\r\n \"course.validation.typeNotEmpty\": \"Please select the course type\",\r\n \"courseManagement.header\": \"Courses\",\r\n \"dragAndDrop.uploadFiles\": \"Upload the files by dropping them here\",\r\n \"exam.button.new\": \"Add new exam\",\r\n \"exam.field.correctionExpenses\": \"Correction expenses\",\r\n \"exam.field.courseType\": \"Course Type\",\r\n \"exam.field.examExpenses\": \"Exam expenses\",\r\n \"exam.field.examId\": \"Exam ID\",\r\n \"exam.field.examName\": \"Exam name\",\r\n \"exam.field.examNameDE\": \"Exam name DE\",\r\n \"exam.field.examNameEN\": \"Exam name EN\",\r\n \"exam.field.examNameFR\": \"Exam name FR\",\r\n \"exam.field.examNameIT\": \"Exam name IT\",\r\n \"exam.field.expertExpenses\": \"Expenses for experts\",\r\n \"exam.field.type\": \"Exam type\",\r\n \"exam.header\": \"Exams\",\r\n \"exam.section.specifics\": \"Exam specifics\",\r\n \"exam.snackbar.successfulArchive\": \"The Exam was archived successfully.\",\r\n \"exam.snackbar.successfulDelete\": \"The Exam was deleted successfully.\",\r\n \"exam.snackbar.successfulPublish\": \"The Exam was published successfully.\",\r\n \"exam.type.oral\": \"Oral exam\",\r\n \"exam.type.termPaper\": \"Term paper\",\r\n \"exam.type.written\": \"Written exam\",\r\n \"exam.validation.idNotEmpty\": \"The Exam ID can't be empty\",\r\n \"examApplication.field.candidates\": \"Candidates\",\r\n \"examApplication.field.case\": \"Case\",\r\n \"examApplication.validation.timeslotIsOverbooked\": \"At least one exam is overbooked. This can happen if new applications are added while changes are being made in the planning view.\",\r\n \"examAssignment.validation.preparationRoomNotAllowed\": \"An exam can't be assigned to a preparation room.\",\r\n \"examDay.button.assignExpertsToCorrectionExams\": \"Assign correction expert\",\r\n \"examDay.button.assignExpertsToOralExams\": \"Assign experts to oral exams\",\r\n \"examDay.button.assignProctorsToOralPreparations\": \"Assign proctors to oral preparations\",\r\n \"examDay.button.assignProctorsToWrittenExams\": \"Assign proctors to written exams\",\r\n \"examDay.button.new\": \"Add new Exam Day\",\r\n \"examDay.field.date\": \"Date\",\r\n \"examDay.field.header\": \"Exam Day\",\r\n \"examDay.field.numberOfRoomsAssigned\": \"Rooms assigned\",\r\n \"examDay.field.preparationRoom\": \"Preparation Room\",\r\n \"examDay.field.timeSlotStructure.correction\": \"Correction\",\r\n \"examDay.field.timeSlotStructure.electiveWritten\": \"Elective written\",\r\n \"examDay.field.timeSlotStructure.mandatoryWritten\": \"Mandatory written\",\r\n \"examDay.field.timeSlotStructure.oralHBB_ProcessModule\": \"Oral HBB process modul\",\r\n \"examDay.field.timeSlotStructure.oralIntermediary\": \"Oral intermediary\",\r\n \"examDay.field.timeSlotStructure.placeholder\": \"Time slot structure\",\r\n \"examDay.field.timeSlotStructure.writtenHBB_ProcessModule\": \"Written HBB process modul\",\r\n \"examDay.field.timeSlotStructure.writtenIntermediary\": \"Written intermediary\",\r\n \"examDay.field.timeSlotStructure\": \"Time slot structure\",\r\n \"examDay.field.type.correction\": \"Correction\",\r\n \"examDay.field.type.oral\": \"Oral\",\r\n \"examDay.field.type.written\": \"Written\",\r\n \"examDay.field.type\": \"Type\",\r\n \"examDay.validation.alreadyExistsForLocationOnSameDate\": \"Another Exam Day with the same date and location already exists.\",\r\n \"examDay.validation.examTypeUnknown\": \"The Exam Type is unknown. Please choose an existing type.\",\r\n \"examDay.validation.idNotEmpty\": \"The Exam Day ID can't be empty.\",\r\n \"examDay.validation.notFound\": \"Exam day not found.\",\r\n \"examDay.validation.onlyOnePreparationRoomAllowed\": \"Only one preparation room can be added to the day.\",\r\n \"examDay.validation.roomCanNotBeAssignedToSelectedExamType\": \"The Room can't be assigned because it's not applicable to the Exam Type of this Exam Day.\",\r\n \"examDay.validation.selectedRoomAlreadyAssigned\": \"The Room is already assigned.\",\r\n \"examDay.validation.selectedRoomIsPcRoomAndCanNotBeUsed\": \"The Room is a computer room and can't be assigned.\",\r\n \"examManagement.header\": \"Exams\",\r\n \"examScore.grade\": \"Grade\",\r\n \"examScore.points\": \"Points\",\r\n \"examSession.button.calculateExamResults\": \"Calculate exam results\",\r\n \"examSession.button.exportCandidates\": \"Export Candidates by exam type and time slot\",\r\n \"examSession.button.exportOrders\": \"Export missing orders XML\",\r\n \"examSession.button.importExamScoresAndGrades\": \"Import Scores and Grades\",\r\n \"examSession.button.importPev\": \"Import PEV\",\r\n \"examSession.button.new\": \"Add a new Exam Session\",\r\n \"examSession.button.publishExamResults\": \"Publish exam results\",\r\n \"examSession.candidateExportDialog.examDay.label\": \"Date\",\r\n \"examSession.candidateExportDialog.examDay.placeholder\": \"Select a date\",\r\n \"examSession.candidateExportDialog.timeSlot.label\": \"Time Slot\",\r\n \"examSession.candidateExportDialog.timeSlot.placeholder\": \"Select a time slot\",\r\n \"examSession.candidateExportDialog.title\": \"Select an exam type and, optionally, a date and time slot\",\r\n \"examSession.confirmPublishResultsDialog.text\": \"Are you sure you want to publish the exam results of this session?\",\r\n \"examSession.dialog.noAvailableCourses\": \"This exam is not assigned to any course\",\r\n \"examSession.dialog.selectCourseTypes\": \"Select Course Types\",\r\n \"examSession.field.correctionPeriod\": \"Correction period\",\r\n \"examSession.field.date\": \"Date\",\r\n \"examSession.field.examResultDate\": \"Exam result date\",\r\n \"examSession.field.examSession\": \"Examination period\",\r\n \"examSession.field.examSessionDate\": \"Exam session date\",\r\n \"examSession.field.freeCancellationEndDate\": \"Free of charge cancellation until\",\r\n \"examSession.field.from\": \"From\",\r\n \"examSession.field.gradingConferenceDate\": \"Date of grading conference\",\r\n \"examSession.field.hidePastSessions\": \"Hide past sessions\",\r\n \"examSession.field.inspectionPeriod\": \"Inspection\",\r\n \"examSession.field.inspectionSignupEndDate\": \"Inspection signup end date\",\r\n \"examSession.field.published\": \"Published\",\r\n \"examSession.field.sessionKey\": \"Session Key\",\r\n \"examSession.field.sessionKeyDE\": \"Exam session DE\",\r\n \"examSession.field.sessionKeyEN\": \"Exam session EN\",\r\n \"examSession.field.sessionKeyFR\": \"Exam session FR\",\r\n \"examSession.field.sessionKeyIT\": \"Exam session IT\",\r\n \"examSession.field.signup\": \"Signup date\",\r\n \"examSession.field.signupDate\": \"Signup Date\",\r\n \"examSession.field.signupEndDate\": \"Sign up End Date\",\r\n \"examSession.field.signupStartDate\": \"Sign up Start Date\",\r\n \"examSession.field.surveyDeadline\": \"Survey deadline\",\r\n \"examSession.field.to\": \"To\",\r\n \"examSession.header\": \"Exam Sessions\",\r\n \"examSession.importPevDialog.title\": \"Upload the file that contains PEV data\",\r\n \"examSession.invitation.allLocations\": \"All locations\",\r\n \"examSession.invitation.flagged\": \"Email/s has already been sent for this location\",\r\n \"examSession.invitation.selectLocations\": \"Select locations\",\r\n \"examSession.invitation.snackbar.candidates\": \"Invitations sent to {count} candidates.\",\r\n \"examSession.invitation.snackbar.experts\": \"Invitations sent to {count} experts.\",\r\n \"examSession.invitation\": \"Invite Experts/Candidates\",\r\n \"examSession.mail.invitation\": \"Send Invitation\",\r\n \"examSession.mail.notifyCandidates\": \"Notify Candidates\",\r\n \"examSession.mail.survey\": \"Start Survey\",\r\n \"examSession.result.NotGenerated\": \"Exam results have not been generated yet.\",\r\n \"examSession.select.assignNewLocation\": \"Assign a new location\",\r\n \"examSession.validation.betweenFromAndTo\": \"Sign up timespan must be between the From and To dates.\",\r\n \"examSession.validation.canNotBeDeletedBecauseLocationsInside\": \"The Exam Session cannot be deleted because of one or more assigned locations.\",\r\n \"examSession.validation.canNotBeUnpublishedBecauseExistingApplication\": \"Exam Session cannot be unpublished because already existing Exam Applications.\",\r\n \"examSession.validation.canNotReapplyForDifferentLanguage\": \"You cannot re-apply for the same Exam Session with a different language.\",\r\n \"examSession.validation.correctionEndDateLaterThanCorrectionStartDate\": \"The Correction End Date must be later than the Correction Start Date.\",\r\n \"examSession.validation.examsEndDateLaterThanExamsStartDate\": \"The Exams End Date must be later than the Exams Start Date.\",\r\n \"examSession.validation.examSessionFull\": \"The selected exam in this exam session is unfortunately fully booked in the meantime. Please select another module or another examination session.\",\r\n \"examSession.validation.examsNoCourseTypes\": \"Some written or oral exams do not have any course type assigned. Please assign at least one course type.\",\r\n \"examSession.validation.examWithNotAllowedCourseTypes\": \"Some exams have not valid course types assigned. Please ensure all assignments are correct or reload the page.\",\r\n \"examSession.validation.freeCancellationNotPossible\": \"Free cancellation is no longer available.\",\r\n \"examSession.validation.idNotEmpty\": \"The Exam Session ID can't be empty.\",\r\n \"examSession.validation.inspectionEndDateLaterThanInspectionStartDate\": \"The Inspection End Date must be later than the Inspection Start Date.\",\r\n \"examSession.validation.locationAlreadyExists\": \"The Location already exists in Exam Session.\",\r\n \"examSession.validation.locationDoesNotExist\": \"The Location was not found.\",\r\n \"examSession.validation.notPublishedNoSurveyPossible\": \"Survey can only be started if exam session is published\",\r\n \"examSession.validation.notPublishedResultsPublishingNotPossible\": \"Exams results publishing is not possible because exam session is not published.\",\r\n \"examSession.validation.publishedNoUpdatePossible\": \"The Exam Session is published and can't be updated.\",\r\n \"examSession.validation.signupEndDateLaterThanSignupStartDate\": \"The Sign up End Date must be later than the Sign up Start Date.\",\r\n \"examSession.validation.signupStartDateLaterThanOrEqualFrom\": \"The Sign up Start Date must be equal or later than the From Date.\",\r\n \"examSession.validation.someErrorsOccurred\": \"Some modules have errors\",\r\n \"examSession.validation.toLaterThanFrom\": \"The exam end date must be later than the exam start date.\",\r\n \"examSession.validation.toLaterThanSignupEndDate\": \"The exam end date must be later than the sign up end date.\",\r\n \"examSession.validation.toLaterThanSignupStartDate\": \"The exam end date must be later than the sign up start date.\",\r\n \"examSession.validation.withSameNameAlreadyExists\": \"Another Exam Session with the same name exists already.\",\r\n \"examSession.writtenExamScoresImportDialog.title\": \"Upload the file that contains the Written Exams scores\",\r\n \"examSession.writtenExamScoresImportDialog.uploadSuccess\": \"Upload success. Number of updated scores:\",\r\n \"examSessionCandidate.addCandidate\": \"Add candidate\",\r\n \"examSessionCandidate.addDialog.bookingWithInvoice\": \"Booking with invoice\",\r\n \"examSessionCandidate.addDialog.candidate\": \"Candidate\",\r\n \"examSessionCandidate.addDialog.course\": \"Course\",\r\n \"examSessionCandidate.addDialog.module\": \"Module\",\r\n \"examSessionCandidate.addDialog.title\": \"Select candidate, course and module\",\r\n \"examSessionCandidate.attachments\": \"Attachments\",\r\n \"examSessionCandidate.averageGrade\": \"Average grade\",\r\n \"examSessionCandidate.book\": \"Book\",\r\n \"examSessionCandidate.booking.error\": \"Your selection is no longer available. Please try again.\",\r\n \"examSessionCandidate.bookingDialog.selectDate\": \"Select a date\",\r\n \"examSessionCandidate.bookingDialog.selectLanguage\": \"Select a language\",\r\n \"examSessionCandidate.bookingDialog.selectLocation\": \"Select a location\",\r\n \"examSessionCandidate.bookingDialog.title\": \"Location and exam date\",\r\n \"examSessionCandidate.cancel\": \"Cancel\",\r\n \"examSessionCandidate.cancelModuleMessage\": \"Are you sure to cancel this module?\",\r\n \"examSessionCandidate.cancelModuleRefundInformation\": \"If inside the free cancellation period then the module will be refunded, else a cancellation task will be created.\",\r\n \"examSessionCandidate.certification\": \"Certification\",\r\n \"examSessionCandidate.exam\": \"Exam\",\r\n \"examSessionCandidate.examDate\": \"Exam Date\",\r\n \"examSessionCandidate.examType\": \"Exam Type\",\r\n \"examSessionCandidate.isRepeater\": \"Repeater\",\r\n \"examSessionCandidate.locationAndDateEdit\": \"Edit location and exam date\",\r\n \"examSessionCandidate.module\": \"Module\",\r\n \"examSessionCandidate.option\": \"Option\",\r\n \"examSessionCandidate.paymentState\": \"Payment State\",\r\n \"examSessionCandidate.publishResultsToEmployer\": \"Pass on exam result\",\r\n \"examSessionCandidate.rebook\": \"Re-book\",\r\n \"examSessionCandidate.resetManualState\": \"Set state automatically\",\r\n \"examSessionCandidate.setManualState\": \"Set state manually\",\r\n \"examSessionCandidate.state\": \"State\",\r\n \"examSessionCandidate.validation.examAlreadyBookedForAnotherModule\": \"The exam is already booked for another module.\",\r\n \"examSessionCandidate.validation.examNotFound\": \"The Exam was not found.\",\r\n \"examSessionCandidate.validation.idNotEmpty\": \"The ExamSessionCandidate ID can't be empty.\",\r\n \"examSessionCandidate.validation.invalidGrade\": \"The grade is invalid.\",\r\n \"examSessionCandidate.validation.invalidScore\": \"The score is invalid.\",\r\n \"examSessionCandidate.verificationRequired\": \"Verification required\",\r\n \"examSessionCandidateExamState.booked\": \"Booked\",\r\n \"examSessionCandidateExamState.cancelled\": \"Cancelled\",\r\n \"examSessionCandidateExamState.equivalence\": \"Equivalence\",\r\n \"examSessionCandidateExamState.failed\": \"Exam failed\",\r\n \"examSessionCandidateExamState.passed\": \"Exam passed\",\r\n \"examSessionCandidateModuleState.applicationAccepted\": \"Application accepted\",\r\n \"examSessionCandidateModuleState.cancelled\": \"Cancelled\",\r\n \"examSessionCandidateModuleState.Cancelled\": \"Module cancelled. A system task has been created\",\r\n \"examSessionCandidateModuleState.equivalence\": \"Equivalence\",\r\n \"examSessionCandidateModuleState.expired\": \"Expired\",\r\n \"examSessionCandidateModuleState.failed\": \"Module failed\",\r\n \"examSessionCandidateModuleState.passed\": \"Module passed\",\r\n \"examSessionCandidateModuleState.Refunded\": \"Module refunded\",\r\n \"examSessionCandidateModuleState.verificationRequired\": \"Verification required\",\r\n \"examSessions.noInfo\": \"No exam sessions found\",\r\n \"examState.booked\": \"Booked\",\r\n \"examState.cancelled\": \"Cancelled\",\r\n \"examState.none\": \"---\",\r\n \"expert.button.new\": \"Add new Expert\",\r\n \"expert.field.courseType.placeholder\": \"Select course types for the role\",\r\n \"expert.field.exam.placeholder\": \"Select exams for the Role\",\r\n \"expert.field.exam\": \"Examen EN\",\r\n \"expert.field.languages\": \"Languages\",\r\n \"expert.field.role.add\": \"Add new role\",\r\n \"expert.field.role.Aufsichtsexperten\": \"Supervisory Experts\",\r\n \"expert.field.role.delete\": \"Delete role\",\r\n \"expert.field.role.EinspracheKomission\": \"Objection Commission\",\r\n \"expert.field.role.Expertenschulung\": \"Expert Training\",\r\n \"expert.field.role.Hauptexperten\": \"Key Experts\",\r\n \"expert.field.role.Leiterprüfungszentrum\": \"Ladder Testing Center\",\r\n \"expert.field.role.placeholder\": \"Select roles for the Expert\",\r\n \"expert.field.role.Prüfungsexperten\": \"Board of examiners\",\r\n \"expert.field.role.Prüfungskomission\": \"Review Commission\",\r\n \"expert.field.role.QSK\": \"Quality Guarantee Commission\",\r\n \"expert.field.role\": \"Roles\",\r\n \"expert.header\": \"Experts\",\r\n \"expert.snackbar.successfulCreate\": \"The Expert was added successfully.\",\r\n \"expert.snackbar.successfulDelete\": \"The created Expert was deleted.\",\r\n \"expert.snackbar.successfulUpdate\": \"The Expert was updated successfully.\",\r\n \"expert.validation.idNotEmpty\": \"The expert ID can not be empty.\",\r\n \"expertAssignment.validation.examNotAssignedToRoom\": \"Exam not assigned to room\",\r\n \"expertAssignment.validation.expertAssignedToMultipleRoomsOnSameDay\": \"Expert is assigned to multiple rooms on same day.\",\r\n \"expertAssignment.validation.expertNotRequiredRole\": \"Expert has not the required role.\",\r\n \"expertAssignment.validation.expertNotSpeakingAnySupportedLanguage\": \"Expert doesn't speak one of the supported languages.\",\r\n \"expertAssignment.validation.roomNotAssignedToExamDay\": \"Room not assigned to exam day.\",\r\n \"expertAvailability.header\": \"Availability\",\r\n \"expertAvailability.noDatesAvailable\": \"At the moment, there are no available dates\",\r\n \"expertCorrectionAvailability.header\": \"Availability for Exam Correction\",\r\n \"file.name\": \"File Name\",\r\n \"home.candidate\": \"Candidate view\",\r\n \"home.expert\": \"Expert view\",\r\n \"home.header\": \"Start Page\",\r\n \"home.me.edit\": \"Manage account\",\r\n \"home.me\": \"Me and my settings\",\r\n \"home.myAlertFields.link\": \"Please manage your account.\",\r\n \"home.myAlertFields\": \"Some mandatory account data is required.\",\r\n \"home.myCertifications\": \"My Certifications\",\r\n \"home.myCourses.downloadCertificate\": \"Certificate\",\r\n \"home.myCourses.downloadPerformanceRecord\": \"Performance record\",\r\n \"home.myCourses.table.ClosingDate\": \"Closing Date\",\r\n \"home.myCourses.table.downloads\": \"Downloads\",\r\n \"home.myCourses\": \"My Courses\",\r\n \"home.myExamCases\": \"My Exam Cases\",\r\n \"home.myExamResults\": \"My Exam Results\",\r\n \"home.myExams.newApplication\": \"Exam Registration\",\r\n \"home.myExams.noExams\": \"No exam found\",\r\n \"home.myExams.table.actionsColumn\": \"Actions\",\r\n \"home.myExams.table.dateColumn\": \"Date\",\r\n \"home.myExams.table.examColumn\": \"Exam\",\r\n \"home.myExams.table.examTypeColumn\": \"Exam Type\",\r\n \"home.myExams.table.gradeColumn\": \"Grade\",\r\n \"home.myExams.table.locationColumn\": \"Location\",\r\n \"home.myExams.table.moduleColumn\": \"Module\",\r\n \"home.myExams.table.roomColumn\": \"Room\",\r\n \"home.myExams.table.statusColumn\": \"State\",\r\n \"home.myExams.table.timeColumn\": \"Time\",\r\n \"home.myExams\": \"My Exams\",\r\n \"home.myExamSessions\": \"My Exam Sessions\",\r\n \"home.myFiles\": \"My Files\",\r\n \"home.myTasks\": \"My Tasks\",\r\n \"home.pendingItemsInCartMessage\": \"You still have unpaid modules. Would you like to continue the booking now? Please note that the place in a module is not reserved until payment has been made.\",\r\n \"home.switch.candidate\": \"Switch to candidate view\",\r\n \"home.switch.expert\": \"Switch to expert view\",\r\n \"import.pev.bookingFailed\": \"Can't book all candidates.\",\r\n \"import.pev.failedImportCandidates\": \"Failed to import candidates.\",\r\n \"import.pev.failedImportScoresAndGrades\": \"Failed to import scores and grades.\",\r\n \"import.pev.invalidCsv\": \"Invalid CSV file.\",\r\n \"import.pev.missingEntities\": \"Some entities were not found. Candidates IDs: {candidateIds}. Exam sessions IDs: {examSessionsIds}. Courses IDs: {courseIds}. Modules IDs: {moduleIds}. Exams IDs: {examIds}.\",\r\n \"import.pev.noExam\": \"Exam cannot be found. Exam ID: {examId}.\",\r\n \"import.pev.noExamDayForExam\": \"Can't find available exam day for the exam. Exam session ID: {examSessionId}. Exam ID: {examId}. Language: {language}.\",\r\n \"import.pev.success\": \"PEV data was successfully imported.\",\r\n \"import.pev.wrongCourseModules\": \"Modules are not linked to the course. Course ID: {courseId}. Modules IDs: {moduleIds}.\",\r\n \"import.pev.wrongExamSessionExams\": \"Exams are not linked to the exam session. Exam session ID: {examSessionid}. Exams IDs: {examIds}.\",\r\n \"import.pev.wrongModuleExams\": \"Exams are not linked to the module. Module ID: {moduleId}. Exams IDs: {examIds}.\",\r\n \"location.button.new\": \"Add new location\",\r\n \"location.field.canton.placeholder\": \"Select a Canton\",\r\n \"location.field.canton\": \"Canton\",\r\n \"location.field.city\": \"City\",\r\n \"location.field.contactEmailAddress\": \"Contact Email\",\r\n \"location.field.contactName\": \"Contact Name\",\r\n \"location.field.contactPhoneNo\": \"Contact Phone No.\",\r\n \"location.field.languageRegions\": \"Language Regions\",\r\n \"location.field.linkToMap\": \"Location map\",\r\n \"location.field.name\": \"Name\",\r\n \"location.field.street\": \"Street\",\r\n \"location.field.zipCode\": \"Zip Code\",\r\n \"location.header\": \"Locations\",\r\n \"location.validation.idNotEmpty\": \"The Location ID can't be empty.\",\r\n \"location.validation.languageUnknown\": \"The Language is unknown. Please choose an existing language.\",\r\n \"location.validation.nameAlreadyExists\": \"Another Location with the same name already exists.\",\r\n \"location\": \"Location\",\r\n \"login.button.adminLogin\": \"Login VBV-Admin\",\r\n \"login.button.impressum\": \"Impressum\",\r\n \"login.button.impressumLink\": \"https://www.vbv.ch/de/impressum\",\r\n \"login.button.login\": \"Login\",\r\n \"login.error.errorLoadingAppRegistration\": \"Error retrieving configuration.\",\r\n \"login.text.external1\": \"Sign in to access the application.\",\r\n \"login.text.external2\": \"Please use a modern browser such as Chrome or Edge. This platform works exclusively with a notebook or desktop. It does not work with a tablet or mobile phone.\",\r\n \"login.text.externalWarn\": \"Important\",\r\n \"login.title.external\": \"Sign in as Candidate/Expert\",\r\n \"module.button.new\": \"Add new module\",\r\n \"module.dialog.confirmPublishDescription\": \"Are you sure you want to publish this module?\",\r\n \"module.dialog.noAvailableExams\": \"No exams available.\",\r\n \"module.dialog.noAvailableLocations\": \"No locations available.\",\r\n \"module.dialog.selectExams\": \"Select exams\",\r\n \"module.dialog.selectLocations\": \"Select locations\",\r\n \"module.field.abacusNumber\": \"Abacus number\",\r\n \"module.field.allowDocumentUpload\": \"Allow document upload\",\r\n \"module.field.allowOptions\": \"Allow options\",\r\n \"module.field.allowRegistrationOnlyOnce\": \"Available once\",\r\n \"module.field.allRoomsAssigned\": \"Room Assigned\",\r\n \"module.field.certificateValidity.FiveYears\": \"5 years\",\r\n \"module.field.certificateValidity.OneYear\": \"1 year\",\r\n \"module.field.certificateValidity.Unlimited\": \"Unlimited\",\r\n \"module.field.certificateValidity\": \"Certificate validity\",\r\n \"module.field.documentsUploaded\": \"Documents uploaded\",\r\n \"module.field.gradingRules.allExams\": \"All exams must be passed\",\r\n \"module.field.gradingRules.averageGrade\": \"Average grade\",\r\n \"module.field.gradingRules\": \"Grading rules\",\r\n \"module.field.moduleId\": \"Module ID\",\r\n \"module.field.moduleName\": \"Module name\",\r\n \"module.field.moduleNameDE\": \"Module name DE\",\r\n \"module.field.moduleNameEN\": \"Module name EN\",\r\n \"module.field.moduleNameFR\": \"Module name FR\",\r\n \"module.field.moduleNameIT\": \"Module name IT\",\r\n \"module.field.moduleType.mandatory\": \"Mandatory\",\r\n \"module.field.moduleType.optionalModule\": \"Optional module\",\r\n \"module.field.moduleType.processModule\": \"Process module\",\r\n \"module.field.moduleType\": \"Module type\",\r\n \"module.field.needsApproval\": \"Needs approval\",\r\n \"module.field.paymentState\": \"Payment status\",\r\n \"module.field.price\": \"Price in CHF\",\r\n \"module.field.verificationRequired\": \"Verification required\",\r\n \"module.header\": \"Modules\",\r\n \"module.moduleDetails\": \"Module details\",\r\n \"module.section.specifics\": \"Module specifics\",\r\n \"module.snackbar.successfulArchive\": \"The Module was archived successfully.\",\r\n \"module.snackbar.successfulDelete\": \"The Module was deleted successfully.\",\r\n \"module.snackbar.successfulPublish\": \"The Module was published successfully.\",\r\n \"module.validation.gradingRule.invalidValue\": \"Incorrect grading rule value.\",\r\n \"module.validation.idNotEmpty\": \"The Module ID can't be empty.\",\r\n \"module.validation.invalidStatusTransition\": \"This status transition is invalid.\",\r\n \"module.validation.invalidStatusValue\": \"Incorrect status value.\",\r\n \"module.validation.statusNotEmpty\": \"Status should not be empty.\",\r\n \"oralExamOption.kmu\": \"Small and medium-sized enterprises\",\r\n \"oralExamOption.none\": \"None\",\r\n \"oralExamOption.privathaushalte\": \"Private household\",\r\n \"paymentMethodSelector.form.button\": \"Pay using invoice\",\r\n \"paymentMethodSelector.item.creditCard\": \"Credit card / Twint\",\r\n \"paymentMethodSelector.item.invoice\": \"Invoice\",\r\n \"paymentMethodSelector.item.invoiceMessage\": \"Private address (CH)\",\r\n \"paymentMethodSelector.title\": \"Choose the payment method\",\r\n \"paymentStatus.paid.abacus\": \"Invoiced (Abacus)\",\r\n \"paymentStatus.paid.ePayment\": \"Paid (E-Payment)\",\r\n \"paymentStatus.refunded.abacus\": \"Refunded (Abacus)\",\r\n \"paymentStatus.refunded.ePayment\": \"Refunded (E-Payment)\",\r\n \"person.field.activateSpecificProfile\": \"Activate expert profile\",\r\n \"person.field.ahvNumber\": \"AHV Number\",\r\n \"person.field.bankAccount\": \"Bank Account\",\r\n \"person.field.birthDate\": \"Date of Birth\",\r\n \"person.field.ciceroNumber\": \"Cicero Number\",\r\n \"person.field.city\": \"Place of residence\",\r\n \"person.field.country\": \"Country\",\r\n \"person.field.displayName\": \"Name\",\r\n \"person.field.email\": \"Email\",\r\n \"person.field.employer\": \"Employer\",\r\n \"person.field.employerCity\": \"Employer City\",\r\n \"person.field.employerCountry\": \"Select the Employer's Country\",\r\n \"person.field.employerStreet\": \"Employer Street\",\r\n \"person.field.employerStreetNumber\": \"Employer Street Number\",\r\n \"person.field.employerZipCode\": \"Employer Zip Code\",\r\n \"person.field.firstName\": \"First Name\",\r\n \"person.field.gender.placeholder\": \"Select a Gender\",\r\n \"person.field.gender\": \"Gender\",\r\n \"person.field.homeCountry\": \"Home Country\",\r\n \"person.field.icon\": \"Actor symbol\",\r\n \"person.field.internalComment\": \"Internal comment\",\r\n \"person.field.lastName\": \"Last Name\",\r\n \"person.field.mobileNumber\": \"Mobile Number\",\r\n \"person.field.phoneNumber.placeholder\": \"Format: +41123456789\",\r\n \"person.field.phoneNumber\": \"Phone Number\",\r\n \"person.field.showOnlyExperts\": \"Show only experts\",\r\n \"person.field.street\": \"Street\",\r\n \"person.field.streetNumber\": \"Number\",\r\n \"person.field.zipCode\": \"Zip code of the place of residence\",\r\n \"person.section.address\": \"Private Address\",\r\n \"person.section.businessData\": \"Business Data\",\r\n \"person.section.expertDetails\": \"Expert specific details\",\r\n \"person.section.personalDetails\": \"Personal Details\",\r\n \"person.validation.ahvNumberAlreadyExists\": \"Another user with the same AHV number already exists.\",\r\n \"person.validation.ahvNumberNotValid\": \"The AHV number is invalid.\",\r\n \"person.validation.bankAccountNotEmpty\": \"The bank account can't be empty\",\r\n \"person.validation.ciceroNumberAlreadyExists\": \"Another user with the same Cicero number already exists.\",\r\n \"person.validation.ciceroNumberNotValid\": \"The Cicero number is invalid.\",\r\n \"person.validation.confirmEmailChange\": \"The email address was modified. This will also change the login email. Are you sure you want to continue?\",\r\n \"person.validation.emailAlreadyExists\": \"Another User with the same email already exists.\",\r\n \"person.validation.genderUnknown\": \"The Gender is unknown. Please choose an existing gender.\",\r\n \"person.validation.invalidEmployerZipCode\": \"Employer Zip Code is invalid.\",\r\n \"person.validation.invalidZipCode\": \"Zip code of the place of residence is invalid.\",\r\n \"person.validation.mandatoryExamRolesWithNoExams\": \"There are mandatory exam roles that doesn't have exams assigned. Please assign the missing exams.\",\r\n \"person.validation.personEdiIdNotEmpty\": \"The EDI Id can't be empty\",\r\n \"person.validation.personEmailAddressNotEmpty\": \"The email address can't be empty\",\r\n \"person.validation.repeatedRoles\": \"There are repeated roles. Please ensure there are not repeated roles.\",\r\n \"person.validation.typeUnknown\": \"The Person Type is unknown. Please choose an existing type.\",\r\n \"role.validation.roleUnknown\": \"Unknown role\",\r\n \"room.button.new\": \"New room assignment\",\r\n \"room.field.floor\": \"Floor\",\r\n \"room.field.isPcRoom\": \"Computer room\",\r\n \"room.field.name\": \"Name\",\r\n \"room.field.numberOfSeats\": \"Capacity\",\r\n \"room.header\": \"Room\",\r\n \"room.text.seats\": \" seats\",\r\n \"room.validation.idNotEmpty\": \"The Room ID can't be empty.\",\r\n \"room.validation.nameAlreadyExists\": \"Another room with the same name already exists.\",\r\n \"roomAssignment.button.new\": \"Assign a room\",\r\n \"roomAssignment.deleteConfirmation.title\": \"You are about to remove a preparation room. Please make sure that there is one preparation room assigned to this exam date.\",\r\n \"roomAssignment.field.isPreparationRoom\": \"Preparation room\",\r\n \"roomAssignment.field.room.placeholder\": \"Select a room\",\r\n \"roomAssignment.field.room\": \"Room\",\r\n \"roomAssignment.header\": \"Room assignment\",\r\n \"roomAssignment.validation.idNotEmpty\": \"The Room Assignment Id can't be empty\",\r\n \"scheduler.examSelectDialog.title\": \"Choose exam for the room\",\r\n \"scheduler.examSelectDialog.tooltip\": \"Set exam for all time slots\",\r\n \"scheduler.message.briefing\": \"Expert's briefing\",\r\n \"scheduler.message.exam\": \"Exam\",\r\n \"scheduler.message.noExperts\": \"No experts assigned\",\r\n \"scheduler.message.pause\": \"Pause\",\r\n \"scheduler.timeSlot.arrivalTime\": \"Arrival time\",\r\n \"selfcancellation.header\": \"Cancel module\",\r\n \"selfcancellation.text\": \"Attention: Please confirm that you wish to cancel your registration for the examination.\",\r\n \"startCertification.button.back\": \"BACK\",\r\n \"startCertification.button.finish\": \"FINISH\",\r\n \"startCertification.button.next\": \"NEXT\",\r\n \"startCertification.courseModuleExamsStep.header\": \"Select course, module and exams\",\r\n \"startCertification.examDataStep.header\": \"Select exam type, location and date\",\r\n \"startCertification.examDataStep.selectCompany\": \"Select your company\",\r\n \"startCertification.examDataStep.selectExamSession\": \"Select exam session\",\r\n \"startCertification.examDataStep.selectFachrichtung\": \"Select the main subject\",\r\n \"startCertification.examDataStep.selectLocationOralPart\": \"Select a location for the oral part of your exam\",\r\n \"startCertification.examDataStep.selectLocationWrittenPart\": \"Select a location for the written part of your exam\",\r\n \"startCertification.examDataStep.selectOralExamDate\": \"Select a date for the oral exam\",\r\n \"startCertification.examDataStep.selectWrittenExamDate\": \"Select a date for the written exam\",\r\n \"startCertification.locationDateStep.header\": \"Choose exam location and date\",\r\n \"startCertification.modulesDetailsStep.dialogHelperText\": \"Please complete the missing information and upload the required documents if necessary.\",\r\n \"startCertification.modulesDetailsStep.docsText1\": \"Please upload all documents that are required for this module.\",\r\n \"startCertification.modulesDetailsStep.docsText2\": \"If you are unable to upload the documents at this time, mark this below. We will assign you an appropriate task.\",\r\n \"startCertification.modulesDetailsStep.fillDetails\": \"Complete details\",\r\n \"startCertification.modulesDetailsStep.header\": \"Provide information and documents\",\r\n \"startCertification.modulesDetailsStep.helperText\": \"Please complete the missing information and upload the required documents for the selected modules.\",\r\n \"startCertification.modulesDetailsStep.isRepeater\": \"I am repeater\",\r\n \"startCertification.modulesDetailsStep.option.kmu\": \"SME\",\r\n \"startCertification.modulesDetailsStep.option.privathaushalte\": \"Private\",\r\n \"startCertification.modulesDetailsStep.option\": \"Option\",\r\n \"startCertification.modulesDetailsStep.tableTitle\": \"Selected modules\",\r\n \"startCertification.modulesDetailsStep.trainingProvider\": \"Training provider\",\r\n \"startCertification.modulesDetailsStep.willUploadDocsLater\": \"Upload documents later\",\r\n \"startCertification.moduleSelectionStep.header\": \"Select course, module and exams\",\r\n \"startCertification.moduleSelectionStep.helperText\": \"Please select a course and exam session to select the modules and exams you wish to register for.\",\r\n \"startCertification.moduleSelectionStep.priceColumn\": \"Price in CHF\",\r\n \"startCertification.moduleSelectionStep.removeButton\": \"Remove\",\r\n \"startCertification.moduleSelectionStep.selectButton\": \"Select\",\r\n \"startCertification.moduleSelectionStep.selectedModules\": \"Your selected modules\",\r\n \"startCertification.paymentAndCompletionStep.actionColumn\": \"Action\",\r\n \"startCertification.paymentAndCompletionStep.button.confirm\": \"Confirm booking\",\r\n \"startCertification.paymentAndCompletionStep.button.confirmed\": \"Confirmed\",\r\n \"startCertification.paymentAndCompletionStep.button.paid\": \"Paid\",\r\n \"startCertification.paymentAndCompletionStep.button.pay\": \"Pay\",\r\n \"startCertification.paymentAndCompletionStep.freeCancelDate\": \"free cancellation until \",\r\n \"startCertification.paymentAndCompletionStep.generalInfo.cost1\": \"After that, if \",\r\n \"startCertification.paymentAndCompletionStep.generalInfo.cost2bold\": \"you cancel your registration without good reason,\",\r\n \"startCertification.paymentAndCompletionStep.generalInfo.cost3\": \" you will be charged the full examination fee.\",\r\n \"startCertification.paymentAndCompletionStep.generalInfo.freeCancellation\": \"Registration is binding. You can cancel your registration without incurring any costs until the dates indicated above.\",\r\n \"startCertification.paymentAndCompletionStep.generalInfo.hveFAQLink\": \"https://www.vbv.ch/fileadmin/vbv/Dokumente/Bildungsabschluesse/Versicherungsfach/72047_PO_Versicherungsfachleute_D_2022.pdf\",\r\n \"startCertification.paymentAndCompletionStep.generalInfo.hveFAQLinkText\": \"FAQ federal professional certificate\",\r\n \"startCertification.paymentAndCompletionStep.generalInfo.intermediaryFAQLink\": \"https://www.vbv.ch/fileadmin/vbv/Dokumente/Bildungsabschluesse/Versicherungsvermittlung/FAQ_Vermi_Pruefungen_de.pdf\",\r\n \"startCertification.paymentAndCompletionStep.generalInfo.intermediaryFAQLinkText\": \"FAQ insurance intermediary\",\r\n \"startCertification.paymentAndCompletionStep.generalInfo.moreInformation1\": \"See the \",\r\n \"startCertification.paymentAndCompletionStep.generalInfo.moreInformation2\": \" for more information.\",\r\n \"startCertification.paymentAndCompletionStep.header\": \"Payment and completion\",\r\n \"startCertification.paymentAndCompletionStep.hint\": \"Please note that your place in a module is not reserved until payment is made.\",\r\n \"startCertification.paymentAndCompletionStep.messages.transactionCancelled\": \"Transaction {id} cancelled\",\r\n \"startCertification.paymentAndCompletionStep.messages.transactionConfirmed\": \"Transaction {id} has been confirmed\",\r\n \"startCertification.paymentAndCompletionStep.messages.transactionFailed\": \"Transaction {id} failed\",\r\n \"startCertification.paymentAndCompletionStep.messages.transactionPaid\": \"Transaction {id} has been paid\",\r\n \"startCertification.paymentAndCompletionStep.messages.wrongTransactionId\": \"Invalid transaction ID {id}\",\r\n \"startCertification.paymentAndCompletionStep.paymentConfirmationMessagePart1\": \"This can take up to a minute. This message will be auto dismissed when the payment has been confirmed.\",\r\n \"startCertification.paymentAndCompletionStep.paymentConfirmationMessagePart2\": \"If not, please contact VBV with the transaction ID: {datatransTrxId}\",\r\n \"startCertification.paymentAndCompletionStep.paymentConfirmationTitle\": \"Waiting for payment confirmation, please wait\",\r\n \"startCertification.paymentAndCompletionStep.removeModule\": \"Remove module\",\r\n \"startCertification.paymentAndCompletionStep.removeModuleConfirmation\": \"Do you want to remove the module?\",\r\n \"startCertification.paymentAndCompletionStep.summary\": \"Summary\",\r\n \"startCertification.personalDataStep.header\": \"Verify your data\",\r\n \"startCertification.policyDialog.accept.link\": \"privacy policy/GTC\",\r\n \"startCertification.policyDialog.accept.linkUrl\": \"https://www.vbv.ch/de/datenschutzbestimmungen\",\r\n \"startCertification.policyDialog.accept\": \"I hereby accept the \",\r\n \"startCertification.policyDialog.text1\": \"I hereby acknowledge and consent to the following information being disclosed to my employer: Successful registration for an examination session, including the date of the examination session, the examination results, including grades/points and whether the examination was passed or failed, registration in the Cicero register \",\r\n \"startCertification.policyDialog.text2\": \"This consent can be revoked at any time and freely vis-à-vis the Insurance Industry Vocational Training Association VBV in writing or by e-mail to vermittler@vbv-afa.ch.\",\r\n \"startCertification.uploadFilesStep.header\": \"Upload verification files\",\r\n \"table.noRecords\": \"No records found\",\r\n \"task.creationDate\": \"Creation Date\",\r\n \"task.deadline\": \"Deadline\",\r\n \"task.noInfo\": \"No pending tasks\",\r\n \"task.state\": \"Status\",\r\n \"task.type\": \"Type\",\r\n \"task.validation.deadlineMustBeLaterThanToday\": \"The Deadline must be later than today.\",\r\n \"task.validation.typeUnknown\": \"Task type unknown\",\r\n \"taskState.done\": \"Done\",\r\n \"taskState.inProgress\": \"In Progress\",\r\n \"taskState.toDo\": \"To Do\",\r\n \"taskType.cancellation\": \"Cancellation\",\r\n \"taskType.checkAvailability\": \"Hand in Availability\",\r\n \"taskType.checkCorrectionAvailability\": \"Enter availability for exam correction\",\r\n \"taskType.none\": \"None\",\r\n \"taskType.uploadDocuments\": \"Upload documents\",\r\n \"uploadDocumentsTask.header\": \"Upload documents task\",\r\n \"uploadDocumentsTask.instructions\": \"Please upload all documents required for this module and complete the task when you are done.\",\r\n \"user.noInfo\": \"No user info\",\r\n \"user.settings\": \"Settings\",\r\n \"userRoomAssignment.assignment\": \"Assignment\",\r\n \"userRoomAssignment.label.allExpertsSwitch\": \"Show all experts\",\r\n \"userRoomAssignment.label.fixed\": \"Fixed\",\r\n \"userRoomAssignment.label.fixedCorrectionExperts\": \"Fixed correction experts\",\r\n \"userRoomAssignment.label.fixedExperts\": \"Fixed experts (2x)\",\r\n \"userRoomAssignment.label.fixedProctors\": \"Fixed proctors (2x)\",\r\n \"userRoomAssignment.label.reserve\": \"Reserve\",\r\n \"userRoomAssignment.label.reserveCorrectionExperts\": \"Reserve correction experts\",\r\n \"userRoomAssignment.label.reserveExperts\": \"Reserve experts\",\r\n \"userRoomAssignment.label.reserveProctors\": \"Reserve proctors\",\r\n \"userRoomAssignment.label.roomFull\": \"Room is full\",\r\n \"userRoomAssignment.label.roomOverload\": \"Room is overloaded\",\r\n \"userRoomAssignment.placeholder.selectFixedExperts\": \"Select fixed experts\",\r\n \"userRoomAssignment.placeholder.selectFixedProctors\": \"Select fixed proctors\",\r\n \"userRoomAssignment.placeholder.selectReserveExperts\": \"Select reserve experts\",\r\n \"userRoomAssignment.placeholder.selectReserveProctors\": \"Select reserve proctors\",\r\n};\r\n","import * as React from \"react\";\nimport { IntlProvider } from \"react-intl\";\nimport { connect } from \"react-redux\";\nimport { ApplicationState } from \"../../..\";\nimport { Language } from \"../../../data/constants\";\nimport { SessionState } from \"../../../store/session/SessionState\";\nimport { de } from \"../../../translations/de\";\nimport { en } from \"../../../translations/en\";\nimport { fr } from \"../../../translations/fr\";\nimport { it } from \"../../../translations/it\";\n\ntype LanguageProviderProps = SessionState;\n\nconst localizedMessages = {\n [Language.DE]: de,\n [Language.EN]: en,\n [Language.FR]: fr,\n [Language.IT]: it,\n};\n\nconst LanguageProvider: React.FC = ({ children, language }) => {\n return (\n \n {children}\n \n );\n};\n\nexport default connect((state: ApplicationState) => state.sessionState)(LanguageProvider);\n","import { TranslationKeys } from \"./TranslationKey\";\r\n\r\nexport const de: TranslationKeys = {\r\n \"application.examLocationAndDate.dateColumn\": \"Datum\",\r\n \"application.examLocationAndDate.examColumn\": \"Prüfung\",\r\n \"application.examLocationAndDate.examFull\": \"Für diese Prüfung sind in der gewählten Prüfungssession keine Plätze mehr frei. Bitte gehen Sie zurück und ändern Sie Ihre Auswahl.\",\r\n \"application.examLocationAndDate.examTypeColumn\": \"Prüfungstyp\",\r\n \"application.examLocationAndDate.locationColumn\": \"Standort\",\r\n \"application.examLocationAndDate.moduleColumn\": \"Modul\",\r\n \"application.examLocationAndDate.statusColumn\": \"Status\",\r\n \"application.examLocationAndDate.validattion.examsHaveDifferentLocations\": \"Es ist nicht möglich am gleichen Tag Prüfungen an unterschiedlichen Standorten zu buchen. Bitte passen Sie ihre Auswahl an.\",\r\n \"application.examLocationAndDateExplanationText\": \"Bitte wählen Sie Ort und Datum für die ausgewählten Prüfungen.\",\r\n \"application.moduleSelector.examsColumn\": \"Prüfungen\",\r\n \"application.moduleSelector.noAvaiableModules\": \"Keine Module verfügbar\",\r\n \"application.moduleSelector.typeColumn\": \"Typ\",\r\n \"application.selectedExamsTitle\": \"Ausgewählte Module und Prüfungen\",\r\n \"application.uploadVerificationFilesMessage\": \"Laden Sie bitte alle Dokumente zur Validierung der Teiläquivalenz hoch.\",\r\n \"application.userSelector.course\": \"Lehrgang\",\r\n \"application.userSelector.examSession\": \"Prüfungssession\",\r\n \"application.userSelector.noSelectedModules\": \"Keine ausgewählten Module\",\r\n \"cancellationTaskForm.candidateRefund\": \"Der Kandidat erhält eine Rückerstattung\",\r\n \"cancellationTaskForm.candidateSubHeader\": \"Kandidat\",\r\n \"cancellationTaskForm.certificationTypeLabel\": \"Zertifizierung\",\r\n \"cancellationTaskForm.commentsLabel\": \"Kommentar\",\r\n \"cancellationTaskForm.completeTask\": \"Aufgabe speichern und abschliessen\",\r\n \"cancellationTaskForm.createdOn\": \"Erstellt am:\",\r\n \"cancellationTaskForm.dateLabel\": \"Datum\",\r\n \"cancellationTaskForm.emailLabel\": \"E-Mail\",\r\n \"cancellationTaskForm.examTypeLabel\": \"Prüfungstyp\",\r\n \"cancellationTaskForm.firstNameLabel\": \"Vorname\",\r\n \"cancellationTaskForm.header\": \"Stornierungs-Aufgabe\",\r\n \"cancellationTaskForm.lastNameLabel\": \"Nachname\",\r\n \"cancellationTaskForm.locationLabel\": \"Standort\",\r\n \"cancellationTaskForm.moduleSubHeader\": \"Modul\",\r\n \"cancellationTaskForm.navigateToCandidateSession\": \"Anmeldungen des Kandidaten öffnen\",\r\n \"cancellationTaskForm.orderId\": \"Bestellnummer\",\r\n \"cancellationTaskForm.refundApprovedBy\": \"Rückerstattung genehmigt von\",\r\n \"cancellationTaskForm.roomLabel\": \"Raum\",\r\n \"cancellationTaskForm.sessionLabel\": \"Session\",\r\n \"cancellationTaskForm.timeSlotLabel\": \"Zeit\",\r\n \"cancellationTaskForm.transactionId\": \"Transaktions-ID\",\r\n \"candidate.button.exportAll\": \"Alle Kandidaten exportieren\",\r\n \"candidate.button.new\": \"Neuen Kandidat hinzufügen\",\r\n \"candidate.button.uploadEdiIds\": \"EDI-IDs hochladen\",\r\n \"candidate.disableConfirmationDialog.message\": \"Bitte vergewissern Sie sich, dass Ihre Personalien korrekt sind, da sie anschliessend nicht mehr geändert werden können.\",\r\n \"candidate.ediIdsDialog.title\": \"Wählen Sie die Datei, welche die EDI-IDs enthält.\",\r\n \"candidate.ediIdsDialog.uploadSuccess\": \"Upload erfolgreich: Anzahl aktualisierte Kandidaten:\",\r\n \"candidate.field.canton\": \"Kanton\",\r\n \"candidate.field.correspondenceLanguage\": \"Korrespondenz-Sprache \",\r\n \"candidate.field.invoiceRecipient\": \"Rechnungsempfänger\",\r\n \"candidate.field.nationality\": \"Nationalität\",\r\n \"candidate.field.numberOfFailedOralExams\": \"Fehlgeschlagene mündliche Prüfungen\",\r\n \"candidate.field.numberOfFailedWrittenExams\": \"Fehlgeschlagene schriftliche Prüfungen\",\r\n \"candidate.field.placeOfOrigin\": \"Heimatort\",\r\n \"candidate.header\": \"Kandidaten\",\r\n \"candidate.section.invoice\": \"Rechnung\",\r\n \"candidate.snackbar.successfulCreate\": \"Kandidat wurde hinzugefügt.\",\r\n \"candidate.snackbar.successfulDelete\": \"Der gewählte Kandidat wurde gelöscht.\",\r\n \"candidate.snackbar.successfulExport\": \"Der Export der Abacus-Debitorennummer wurde der Warteschlange hinzugefügt\",\r\n \"candidate.snackbar.successfulUpdate\": \"Änderungen wurden gespeichert.\",\r\n \"candidate.validation.disabledFields\": \"Felder können nach der Bestätigung nicht mehr aktualisiert werden\",\r\n \"candidate.validation.idNotEmpty\": \"Die Kandidaten-ID darf nicht leer sein.\",\r\n \"candidateAssignment.validation.preparationRoomNotAllowed.\": \"Ein Kandidat kann nicht einem Vorbereitungsraum zugewiesen werden.\",\r\n \"candidateCourse.certificate.fileNamePrefix\": \"Zertifikat\",\r\n \"candidateCourse.performanceRecord.fileNamePrefix\": \"Leistungsnachweis\",\r\n \"candidateCourseStatus.open\": \"Offen\",\r\n \"candidateCourseStatus.passed\": \"Bestanden\",\r\n \"candidateWizard.error\": \"Die Anmeldung ist fehlgeschlagen. Versuchen Sie es erneut oder melden Sie sich beim VBV.\",\r\n \"candidateWizard.success\": \"Gratulation! Sie sollten für jede Buchung eine E-Mail erhalten haben und Ihre Prüfungen werden in der Kandidatenansicht angezeigt.\",\r\n \"canton.ag\": \"Aargau\",\r\n \"canton.ai\": \"Appenzell Innerrhoden\",\r\n \"canton.ar\": \"Appenzell Ausserrhoden\",\r\n \"canton.be\": \"Bern\",\r\n \"canton.bl\": \"Basel-Landschaft\",\r\n \"canton.bs\": \"Basel-Stadt\",\r\n \"canton.fr\": \"Freiburg\",\r\n \"canton.ge\": \"Genf\",\r\n \"canton.gl\": \"Glarus\",\r\n \"canton.gr\": \"Graubünden\",\r\n \"canton.ju\": \"Jura\",\r\n \"canton.lu\": \"Luzern\",\r\n \"canton.ne\": \"Neuenburg\",\r\n \"canton.nw\": \"Nidwalden\",\r\n \"canton.ow\": \"Obwalden\",\r\n \"canton.sg\": \"St. Gallen\",\r\n \"canton.sh\": \"Schaffhausen\",\r\n \"canton.so\": \"Solothurn\",\r\n \"canton.sz\": \"Schwyz\",\r\n \"canton.tg\": \"Thurgau\",\r\n \"canton.ti\": \"Tessin\",\r\n \"canton.ur\": \"Uri\",\r\n \"canton.vd\": \"Waadt\",\r\n \"canton.vs\": \"Wallis\",\r\n \"canton.zg\": \"Zug\",\r\n \"canton.zh\": \"Zürich\",\r\n \"cart.validation.candidateIdNotEmpty\": \"Kandidaten-ID darf nicht leer sein.\",\r\n \"cart.validation.cartEmpty\": \"Der Warenkorb ist leer.\",\r\n \"cart.validation.examNotFound\": \"Prüfung nicht gefunden.\",\r\n \"cart.validation.missingCourseId\": \"Fehlende Kurs-ID\",\r\n \"cart.validation.missingExamDayIdOnExam\": \"Fehlende Prüfungstag-Id bei der Prüfung.\",\r\n \"cart.validation.missingExamSessionId\": \"Fehlende Prüfungssessions-Id\",\r\n \"cart.validation.missingInformationInModule\": \"Fehlende Informationen zum Modul.\",\r\n \"cart.validation.missingModuleId\": \"Fehlende Modul-ID\",\r\n \"cart.validation.moduleAlreadyBooked\": \"Modul bereits gebucht.\",\r\n \"cart.validation.moduleAlreadyPaid\": \"Modul bereits bezahlt.\",\r\n \"cart.validation.moduleNotFound\": \"Modul nicht im Warenkorb gefunden.\",\r\n \"certification.button.new\": \"Prüfungsanmeldung\",\r\n \"certification.examDate\": \"Prüfungsdatum\",\r\n \"certification.examType\": \"Prüfungstyp\",\r\n \"certification.fachrichtung\": \"Option mündlicher Prüfungsfall\",\r\n \"certification.state\": \"Status\",\r\n \"certifications.noInfo\": \"Keine Zertifizierungen vorhanden\",\r\n \"common.accept\": \"Bestätigen\",\r\n \"common.archive\": \"Archivieren\",\r\n \"common.attention\": \"Achtung\",\r\n \"common.business\": \"Geschäft\",\r\n \"common.cancel\": \"Abbrechen\",\r\n \"common.certificationsGenerated\": \"Zertifikate generiert\",\r\n \"common.close\": \"Schliessen\",\r\n \"common.comment\": \"Kommentar\",\r\n \"common.confirmArchiveDescription\": \"Möchten Sie die Entität wirklich archivieren?\",\r\n \"common.confirmDeleteDescription\": \"Möchten Sie die Entität wirklich löschen?\",\r\n \"common.confirmPublishDescription\": \"Möchten Sie die Entität wirklich veröffentlichen?\",\r\n \"common.debtorNumber\": \"Debitorennummer\",\r\n \"common.delete\": \"Löschen\",\r\n \"common.dragAndDrop.description\": \"Das Dokument hier per Drag&Drop ablegen\",\r\n \"common.errorMessage\": \"Etwas ist schief gelaufen\",\r\n \"common.exam\": \"Prüfung\",\r\n \"common.export\": \"Exportieren\",\r\n \"common.field.status\": \"Status\",\r\n \"common.genders.female\": \"Weiblich\",\r\n \"common.genders.male\": \"Männlich\",\r\n \"common.generateCertifications.confirmation\": \"Möchten Sie wirklich Zertifikate generieren?\",\r\n \"common.generateCertifications\": \"Zertifikate generieren\",\r\n \"common.language.de\": \"Deutsch\",\r\n \"common.language.en\": \"Englisch\",\r\n \"common.language.fr\": \"Französisch\",\r\n \"common.language.it\": \"Italienisch\",\r\n \"common.language\": \"Sprache\",\r\n \"common.languages\": \"Sprachen\",\r\n \"common.lastModification.by\": \"von\",\r\n \"common.lastModification.on\": \"am\",\r\n \"common.lastModification\": \"Zuletzt geändert\",\r\n \"common.module\": \"Modul\",\r\n \"common.no\": \"Nein\",\r\n \"common.noLanguagesAssigned\": \"Keine zugewiesenen Sprachen\",\r\n \"common.ok\": \"Ok\",\r\n \"common.pleaseSelect\": \"Bitte Wählen\",\r\n \"common.private\": \"Privat\",\r\n \"common.publish\": \"Veröffentlichen\",\r\n \"common.reject\": \"Ablehnen\",\r\n \"common.rejected\": \"Abgelehnt\",\r\n \"common.rowsPerPage\": \"Zeilen pro Seite:\",\r\n \"common.save\": \"Speichern\",\r\n \"common.scheduleCorrectionExams\": \"Korrekturplanung\",\r\n \"common.scheduleOralExams\": \"Prüfungsplanung mündlich\",\r\n \"common.scheduleWrittenExams\": \"Prüfungsplanung schriftlich\",\r\n \"common.search\": \"Suche\",\r\n \"common.selectElement\": \"Wähle ein\",\r\n \"common.selectElements\": \"Wähle eines\",\r\n \"common.signOut\": \"Abmelden\",\r\n \"common.status.archived\": \"Archiviert\",\r\n \"common.status.cancelled\": \"Storniert\",\r\n \"common.status.deleted\": \"Gelöscht\",\r\n \"common.status.draft\": \"Entwurf\",\r\n \"common.status.published\": \"Veröffentlicht\",\r\n \"common.survey\": \"Umfrage\",\r\n \"common.total\": \"Total\",\r\n \"common.unexpectedError\": \"Unerwarteter Fehler. Bitte, versuchen Sie es später noch einmal.\",\r\n \"common.Unknown\": \"Unbekannte\",\r\n \"common.unpublish\": \"Unveröffentlichen\",\r\n \"common.uploadError\": \"Fehler beim Upload: Das Format ist ungültig.\",\r\n \"common.validation.entityWithIdNotExistsAndCanNotBeAssigned\": \"Die Entität mit der angegebenen ID wurde nicht gefunden und kann nicht zugeordnet werden.\",\r\n \"common.validation.entityWithIdNotExistsAndCanNotBeDeleted\": \"Die Entität mit der angegebenen ID wurde nicht gefunden und kann nicht gelöscht werden.\",\r\n \"common.validation.idNotEmpty\": \"Die ID darf nicht leer sein.\",\r\n \"common.validation.name.empty\": \"Der Name darf nicht leer sein.\",\r\n \"common.validation.status.empty\": \"Das Status darf nicht leer sein.\",\r\n \"common.validation.status.invalidTransition\": \"Dieser Statusübergang ist nicht gültig.\",\r\n \"common.validation.status.invalidValue\": \"Ungültiger Statuswert.\",\r\n \"common.yes\": \"Ja\",\r\n \"countries.switzerland.name\": \"Schweiz\",\r\n \"course.button.addModules\": \"Module hinzufügen\",\r\n \"course.dialog.confirmPublishDescription\": \"Möchten Sie die Lehrgänge wirklich veröffentlichen?\",\r\n \"course.dialog.noAvailableModules\": \"Keine Module verfügbar.\",\r\n \"course.dialog.selectModules\": \"Module auswählen\",\r\n \"course.field.certificateValidity.FiveYears\": \"5 Jahre\",\r\n \"course.field.certificateValidity.Unlimited\": \"Unbeschränkt\",\r\n \"course.field.certificateValidity\": \"Gültigkeit der Zertifizierung\",\r\n \"course.field.moduleRelevantForGrade\": \"Relevant für Lehrgangsnote\",\r\n \"course.field.modulesValidity.days\": \"Tage\",\r\n \"course.field.modulesValidity.unlimited\": \"Unbegrenzt\",\r\n \"course.field.modulesValidity\": \"Modulgültigkeit\",\r\n \"course.field.name\": \"Lehrgangsname\",\r\n \"course.field.nameDE\": \"Lehrgangsname - DE\",\r\n \"course.field.nameEN\": \"Lehrgangsname - EN\",\r\n \"course.field.nameFR\": \"Lehrgangsname - FR\",\r\n \"course.field.nameIT\": \"Lehrgangsname - IT\",\r\n \"course.field.numberOfMandatoryModules\": \"Anzahl obligatorische Module\",\r\n \"course.field.numberOfProcessModules\": \"Anzahl Prozessmodule\",\r\n \"course.field.numberOfSelectionModules\": \"Anzahl Wahlmodule\",\r\n \"course.header\": \"Lehrgang\",\r\n \"course.list.header\": \"Lehrgänge\",\r\n \"course.section.modules\": \"Modules\",\r\n \"course.snackbar.successfulArchive\": \"Der gewählte Lehrgang wurde archiviert.\",\r\n \"course.snackbar.successfulDelete\": \"Der gewählte Lehrgang wurde gelöscht.\",\r\n \"course.snackbar.successfulPublish\": \"Der gewählte Lehrgang wurde veröffentlichen.\",\r\n \"course.type.cicero\": \"Fachausweis/Cicero\",\r\n \"course.type.ciceroGroup\": \"Fachausweis/Cicero Gruppe\",\r\n \"course.type.hve\": \"HBB\",\r\n \"course.type.hveGroup\": \"HBB Gruppe\",\r\n \"course.type.intermediary\": \"Vermittler\",\r\n \"course.type.intermediaryGroup\": \"Vermittler Gruppe\",\r\n \"course.type.mindeststandard\": \"Mindeststandards\",\r\n \"course.type.mindeststandardGroup\": \"Mindeststandards Gruppe\",\r\n \"course.type\": \"Lehrgangstyp\",\r\n \"course.validation.idNotEmpty\": \"Die ID der Lehrgang darf nicht leer sein.\",\r\n \"course.validation.modules.empty\": \"Bitte wählen Sie mindestens ein Modul aus.\",\r\n \"course.validation.numberOfAnyModulesIsZero\": \"Die Gesamtzahl der Module muss mindestens 1 betragen.\",\r\n \"course.validation.typeIsInvalid\": \"Der Kurstyp ist ungültig.\",\r\n \"course.validation.typeNotEmpty\": \"Bitte selektieren sie den Lehrgangstyp\",\r\n \"courseManagement.header\": \"Lehrgänge\",\r\n \"dragAndDrop.uploadFiles\": \"Laden Sie die Dateien hoch, indem Sie sie hier ablegen\",\r\n \"exam.button.new\": \"Neue Prüfung hinzufügen\",\r\n \"exam.field.correctionExpenses\": \"Korrekturspesen\",\r\n \"exam.field.courseType\": \"Kurstyp\",\r\n \"exam.field.examExpenses\": \"Prüfungsspesen\",\r\n \"exam.field.examId\": \"Prüfungs-ID\",\r\n \"exam.field.examName\": \"Prüfungsname\",\r\n \"exam.field.examNameDE\": \"Prüfungsname DE\",\r\n \"exam.field.examNameEN\": \"Prüfungsname EN\",\r\n \"exam.field.examNameFR\": \"Prüfungsname FR\",\r\n \"exam.field.examNameIT\": \"Prüfungsname IT\",\r\n \"exam.field.expertExpenses\": \"Expertenspesen\",\r\n \"exam.field.type\": \"Prüfungstyp\",\r\n \"exam.header\": \"Prüfungen\",\r\n \"exam.section.specifics\": \"Prüfungs spezifisch\",\r\n \"exam.snackbar.successfulArchive\": \"Der gewählte Prüfung wurde archiviert.\",\r\n \"exam.snackbar.successfulDelete\": \"Der gewählte Prüfung wurde gelöscht.\",\r\n \"exam.snackbar.successfulPublish\": \"Der gewählte Prüfung wurde veröffentlichen.\",\r\n \"exam.type.oral\": \"Mündliche Prüfung\",\r\n \"exam.type.termPaper\": \"Schriftliche Arbeit\",\r\n \"exam.type.written\": \"Schriftliche Prüfung\",\r\n \"exam.validation.idNotEmpty\": \"Der Prüfungsname darf nicht leer sein\",\r\n \"examApplication.field.candidates\": \"Kandidaten\",\r\n \"examApplication.field.case\": \"Prüfungsaufgabe\",\r\n \"examApplication.validation.timeslotIsOverbooked\": \"Mindestens eine Prüfung ist überbucht. Dies kann passieren, wenn neue Anmeldungen hinzugefügt werden, während Änderungen in der Planungsansicht vorgenommen werden.\",\r\n \"examAssignment.validation.preparationRoomNotAllowed\": \"Eine Prüfung kann nicht einem Vorbereitungsraum zugewiesen werden.\",\r\n \"examDay.button.assignExpertsToCorrectionExams\": \"Korrekturexperte zuweisen\",\r\n \"examDay.button.assignExpertsToOralExams\": \"Prüfungsexperten für mündliche Prüfung zuweisen\",\r\n \"examDay.button.assignProctorsToOralPreparations\": \"Aufsichtsexperten für Vorbereitungsraum zuweisen\",\r\n \"examDay.button.assignProctorsToWrittenExams\": \"Aufsichtsexperten für schriftliche Prüfung zuweisen\",\r\n \"examDay.button.new\": \"Neuen Prüfungstag hinzufügen\",\r\n \"examDay.field.date\": \"Datum\",\r\n \"examDay.field.header\": \"Prüfungstag\",\r\n \"examDay.field.numberOfRoomsAssigned\": \"Zugewiesene Räume\",\r\n \"examDay.field.preparationRoom\": \"Vorbereitungsraum\",\r\n \"examDay.field.timeSlotStructure.correction\": \"Korrektur\",\r\n \"examDay.field.timeSlotStructure.electiveWritten\": \"Wahl schriftlich\",\r\n \"examDay.field.timeSlotStructure.mandatoryWritten\": \"Obligatorisch schriftlich\",\r\n \"examDay.field.timeSlotStructure.oralHBB_ProcessModule\": \"Mündlich HBB Prozessmodul\",\r\n \"examDay.field.timeSlotStructure.oralIntermediary\": \"Mündlich Vermittler\",\r\n \"examDay.field.timeSlotStructure.placeholder\": \"Zeitfenster\",\r\n \"examDay.field.timeSlotStructure.writtenHBB_ProcessModule\": \"Schriftlich HBB Prozessmodul\",\r\n \"examDay.field.timeSlotStructure.writtenIntermediary\": \"Schriftlich Vermittler\",\r\n \"examDay.field.timeSlotStructure\": \"Zeitfenster\",\r\n \"examDay.field.type.correction\": \"Korrektur\",\r\n \"examDay.field.type.oral\": \"Mündlich\",\r\n \"examDay.field.type.written\": \"Schriftlich\",\r\n \"examDay.field.type\": \"Typ\",\r\n \"examDay.validation.alreadyExistsForLocationOnSameDate\": \"Ein weiterer Prüfungstag mit dem gleichen Datum und Standort existiert bereits.\",\r\n \"examDay.validation.examTypeUnknown\": \"Die Prüfungsart ist unbekannt. Bitte wählen Sie eine existierende Prüfungsart aus.\",\r\n \"examDay.validation.idNotEmpty\": \"Die Prüfungstag-ID darf nicht leer sein.\",\r\n \"examDay.validation.notFound\": \"Prüfungstag nicht gefunden.\",\r\n \"examDay.validation.onlyOnePreparationRoomAllowed\": \"Der Tag kann nur um einen Vorbereitungsraum erweitert werden.\",\r\n \"examDay.validation.roomCanNotBeAssignedToSelectedExamType\": \"Der Raum kann nicht zugewiesen werden, da er für die Prüfungsart dieses Prüfungstages nicht anwendbar ist.\",\r\n \"examDay.validation.selectedRoomAlreadyAssigned\": \"Der Raum ist bereits zugeordnet.\",\r\n \"examDay.validation.selectedRoomIsPcRoomAndCanNotBeUsed\": \"Der Raum ist ein PC-Raum und kann nicht zugewiesen werden.\",\r\n \"examManagement.header\": \"Prüfungen\",\r\n \"examScore.grade\": \"Note\",\r\n \"examScore.points\": \"Punkte\",\r\n \"examSession.button.calculateExamResults\": \"Prüfungsergebnisse berechnen\",\r\n \"examSession.button.exportCandidates\": \"Kandidaten für Prüfungstyp und/oder Zeit exportieren\",\r\n \"examSession.button.exportOrders\": \"Fehlende/pendente Bestellungs-XML exportieren\",\r\n \"examSession.button.importExamScoresAndGrades\": \"Punkte und Noten importieren\",\r\n \"examSession.button.importPev\": \"PEV importieren\",\r\n \"examSession.button.new\": \"Eine neue Prüfungssession hinzufügen\",\r\n \"examSession.button.publishExamResults\": \"Prüfungsergebnisse veröffentlichen\",\r\n \"examSession.candidateExportDialog.examDay.label\": \"Datum\",\r\n \"examSession.candidateExportDialog.examDay.placeholder\": \"Datum auswählen\",\r\n \"examSession.candidateExportDialog.timeSlot.label\": \"Zeit\",\r\n \"examSession.candidateExportDialog.timeSlot.placeholder\": \"Zeit auswählen\",\r\n \"examSession.candidateExportDialog.title\": \"Wählen Sie den Prüfungstyp und eine Zeit (optional)\",\r\n \"examSession.confirmPublishResultsDialog.text\": \"Sind Sie sicher, dass Sie die Prüfungsergebnisse zu dieser Session veröffentlichen wollen?\",\r\n \"examSession.dialog.noAvailableCourses\": \"Diese Prüfung ist keinem Kurs zugeordnet.\",\r\n \"examSession.dialog.selectCourseTypes\": \"Kursarten auswählen\",\r\n \"examSession.field.correctionPeriod\": \"Korrekturzeitraum\",\r\n \"examSession.field.date\": \"Verabredung\",\r\n \"examSession.field.examResultDate\": \"Zeitpunkt Prüfungsresultat\",\r\n \"examSession.field.examSession\": \"Prüfungszeitraum\",\r\n \"examSession.field.examSessionDate\": \"Datum der Prüfungssession\",\r\n \"examSession.field.freeCancellationEndDate\": \"Kostenfrei stornierbar bis\",\r\n \"examSession.field.from\": \"Von\",\r\n \"examSession.field.gradingConferenceDate\": \"Erwahrungssitzungsdatum\",\r\n \"examSession.field.hidePastSessions\": \"Vergangene Sitzungen ausblenden\",\r\n \"examSession.field.inspectionPeriod\": \"Einsichtnahme\",\r\n \"examSession.field.inspectionSignupEndDate\": \"Anmeldeschluss für Einsichtnahme\",\r\n \"examSession.field.published\": \"Veröffentlicht\",\r\n \"examSession.field.sessionKey\": \"Prüfungssession\",\r\n \"examSession.field.sessionKeyDE\": \"Prüfungssession DE\",\r\n \"examSession.field.sessionKeyEN\": \"Prüfungssession EN\",\r\n \"examSession.field.sessionKeyFR\": \"Prüfungssession FR\",\r\n \"examSession.field.sessionKeyIT\": \"Prüfungssession IT\",\r\n \"examSession.field.signup\": \"Registrierung\",\r\n \"examSession.field.signupDate\": \"Anmeldedatum\",\r\n \"examSession.field.signupEndDate\": \"Enddatum der Registrierung\",\r\n \"examSession.field.signupStartDate\": \"Startdatum für die Registrierung\",\r\n \"examSession.field.surveyDeadline\": \"Deadline der Umfrage\",\r\n \"examSession.field.to\": \"Bis\",\r\n \"examSession.header\": \"Prüfungssessionen\",\r\n \"examSession.importPevDialog.title\": \"Laden Sie die Datei mit den PEV-Daten hoch\",\r\n \"examSession.invitation.allLocations\": \"Alle Standorte\",\r\n \"examSession.invitation.flagged\": \"Für diesen Standort wurden die E-Mails bereits versendet\",\r\n \"examSession.invitation.selectLocations\": \"Standort auswählen\",\r\n \"examSession.invitation.snackbar.candidates\": \"Die Prüfungseinladungen wurde an {count} Kandidaten versendet.\",\r\n \"examSession.invitation.snackbar.experts\": \"Die Prüfungseinladungen wurde an {count} Experten versendet.\",\r\n \"examSession.invitation\": \"Experten/Kandidaten einladen\",\r\n \"examSession.mail.invitation\": \"Prüfungseinladungen versenden\",\r\n \"examSession.mail.notifyCandidates\": \"Kandidaten über Prüfungsergebnisse informieren\",\r\n \"examSession.mail.survey\": \"Verfügbarkeitsumfrage für Experten starten\",\r\n \"examSession.result.NotGenerated\": \"Prüfungsergebnisse wurden noch nicht generiert.\",\r\n \"examSession.select.assignNewLocation\": \"Neuen Standort zuweisen\",\r\n \"examSession.validation.betweenFromAndTo\": \"Die Zeitspanne für die Registrierung muss zwischen dem Von- und Bis-Datum liegen.\",\r\n \"examSession.validation.canNotBeDeletedBecauseLocationsInside\": \"Die Prüfungssession kann nicht gelöscht werden, da sie einen oder mehrere Standorte zugewiesen hat.\",\r\n \"examSession.validation.canNotBeUnpublishedBecauseExistingApplication\": \"Veröffentlichung der Prüfungssession kann nicht aufgehoben werden, weil es bereits existierende Registrierungen zu Prüfungen gibt.\",\r\n \"examSession.validation.canNotReapplyForDifferentLanguage\": \"Sie können sich nicht erneut für dieselbe Prüfungssitzung mit einer anderen Sprache anmelden.\",\r\n \"examSession.validation.correctionEndDateLaterThanCorrectionStartDate\": \"Das Enddatum der Korrektur muss nach dem Startdatum der Korrektur liegen.\",\r\n \"examSession.validation.examsEndDateLaterThanExamsStartDate\": \"Das Enddatum der Prüfung muss nach dem Startdatum der Prüfung liegen. \",\r\n \"examSession.validation.examSessionFull\": \"Die ausgewählte Prüfung in dieser Prüfungssession ist in der Zwischenzeit leider ausgebucht. Bitte wählen Sie ein anderes Modul oder eine andere Prüfungssession\",\r\n \"examSession.validation.examsNoCourseTypes\": \"Einigen schriftlichen oder mündlichen Prüfungen ist kein Kurstyp zugeordnet. Bitte ordnen Sie mindestens einen Kurstyp zu.\",\r\n \"examSession.validation.examWithNotAllowedCourseTypes\": \"Einigen Prüfungen sind keine gültigen Kurstypen zugeordnet. Bitte stellen Sie sicher, dass alle Zuweisungen korrekt sind oder laden Sie die Seite neu.\",\r\n \"examSession.validation.freeCancellationNotPossible\": \"Kostenfreie Stornierung nicht mehr möglich\",\r\n \"examSession.validation.idNotEmpty\": \"Die Prüfungs-ID darf nicht leer sein.\",\r\n \"examSession.validation.inspectionEndDateLaterThanInspectionStartDate\": \"Das Enddatum der Inspektion muss nach dem Startdatum der Inspektion liegen.\",\r\n \"examSession.validation.locationAlreadyExists\": \"Der Standort ist bereits in der Prüfungssession vorhanden.\",\r\n \"examSession.validation.locationDoesNotExist\": \"Der Standort wurde nicht gefunden.\",\r\n \"examSession.validation.notPublishedNoSurveyPossible\": \"Umfrage kann nur gestartet werden, wenn die Prüfungssession veröffentlicht ist.\",\r\n \"examSession.validation.notPublishedResultsPublishingNotPossible\": \"Die Veröffentlichung der Prüfungsergebnisse ist nicht möglich, da die Prüfungssession nicht veröffentlicht wird.\",\r\n \"examSession.validation.publishedNoUpdatePossible\": \"Die Prüfungssession ist veröffentlicht und kann nicht aktualisiert werden.\",\r\n \"examSession.validation.signupEndDateLaterThanSignupStartDate\": \"Das Enddatum der Registrierung muss nach dem Startdatum der Registrierung liegen.\",\r\n \"examSession.validation.signupStartDateLaterThanOrEqualFrom\": \"Das Startdatum der Registrierung muss gleich oder später sein als das Von-Datum.\",\r\n \"examSession.validation.someErrorsOccurred\": \"Einige Module sind fehlerhaft\",\r\n \"examSession.validation.toLaterThanFrom\": \"Das Enddatum der Prüfung muss nach dem Startdatum der Prüfung liegen.\",\r\n \"examSession.validation.toLaterThanSignupEndDate\": \"Das Enddatum der Prüfung muss nach dem Enddatum der Einschreibung liegen.\",\r\n \"examSession.validation.toLaterThanSignupStartDate\": \"Das Enddatum der Prüfung muss nach dem Startdatum der Anmeldung liegen.\",\r\n \"examSession.validation.withSameNameAlreadyExists\": \"Eine andere Prüfungssession mit dem gleichen Namen existiert bereits.\",\r\n \"examSession.writtenExamScoresImportDialog.title\": \"Laden Sie die Datei hoch, welche die Prüfungsergebnisse enthält\",\r\n \"examSession.writtenExamScoresImportDialog.uploadSuccess\": \"Upload erfolgreich. Aktualisierte Resultate:\",\r\n \"examSessionCandidate.addCandidate\": \"Kandidat hinzufügen\",\r\n \"examSessionCandidate.addDialog.bookingWithInvoice\": \"Buchung mit Rechnung\",\r\n \"examSessionCandidate.addDialog.candidate\": \"Kandidat\",\r\n \"examSessionCandidate.addDialog.course\": \"Lehrgang\",\r\n \"examSessionCandidate.addDialog.module\": \"Modul\",\r\n \"examSessionCandidate.addDialog.title\": \"Kandidat, Lehrgang und Modul auswählen\",\r\n \"examSessionCandidate.attachments\": \"Anhänge\",\r\n \"examSessionCandidate.averageGrade\": \"Durchschnittsnote\",\r\n \"examSessionCandidate.book\": \"Buchen\",\r\n \"examSessionCandidate.booking.error\": \"Ihre Auswahl ist nicht mehr verfügbar. Bitte versuchen Sie es erneut.\",\r\n \"examSessionCandidate.bookingDialog.selectDate\": \"Datum wählen\",\r\n \"examSessionCandidate.bookingDialog.selectLanguage\": \"Wählen Sie eine Sprache\",\r\n \"examSessionCandidate.bookingDialog.selectLocation\": \"Standort wählen\",\r\n \"examSessionCandidate.bookingDialog.title\": \"Standort und Prüfungsdatum\",\r\n \"examSessionCandidate.cancel\": \"Stornieren\",\r\n \"examSessionCandidate.cancelModuleMessage\": \"Sind Sie sicher, dass Sie dieses Modul stornieren wollen?\",\r\n \"examSessionCandidate.cancelModuleRefundInformation\": \"Innerhalb der kostenlosen Stornierungsfrist wird das Modul erstattet, andernfalls wird eine Stornierungsaufgabe erstellt.\",\r\n \"examSessionCandidate.certification\": \"Zertifizierung\",\r\n \"examSessionCandidate.exam\": \"Prüfung\",\r\n \"examSessionCandidate.examDate\": \"Prüfungsdatum\",\r\n \"examSessionCandidate.examType\": \"Prüfungstyp\",\r\n \"examSessionCandidate.isRepeater\": \"Repetent\",\r\n \"examSessionCandidate.locationAndDateEdit\": \"Standort und Prüfungsdatum bearbeiten\",\r\n \"examSessionCandidate.module\": \"Modul\",\r\n \"examSessionCandidate.option\": \"Option\",\r\n \"examSessionCandidate.paymentState\": \"Bezahlstatus\",\r\n \"examSessionCandidate.publishResultsToEmployer\": \"Prüfungsresultat weitergeben\",\r\n \"examSessionCandidate.rebook\": \"Erneut buchen\",\r\n \"examSessionCandidate.resetManualState\": \"Status automatisch festlegen\",\r\n \"examSessionCandidate.setManualState\": \"Status manuell festlegen\",\r\n \"examSessionCandidate.state\": \"Status\",\r\n \"examSessionCandidate.validation.examAlreadyBookedForAnotherModule\": \"Die Prüfung ist bereits für ein anderes Modul gebucht.\",\r\n \"examSessionCandidate.validation.examNotFound\": \"Die Prüfung wurde nicht gefunden.\",\r\n \"examSessionCandidate.validation.idNotEmpty\": \"Die ExamSessionCandidate ID darf nicht leer sein.\",\r\n \"examSessionCandidate.validation.invalidGrade\": \"Die Note ist ungültig.\",\r\n \"examSessionCandidate.validation.invalidScore\": \"Die Punktzahl ist ungültig.\",\r\n \"examSessionCandidate.verificationRequired\": \"Verifizierung erforderlich\",\r\n \"examSessionCandidateExamState.booked\": \"Gebucht\",\r\n \"examSessionCandidateExamState.cancelled\": \"Storniert\",\r\n \"examSessionCandidateExamState.equivalence\": \"Äquivalenz\",\r\n \"examSessionCandidateExamState.failed\": \"Prüfung nicht bestanden\",\r\n \"examSessionCandidateExamState.passed\": \"Prüfung bestanden\",\r\n \"examSessionCandidateModuleState.applicationAccepted\": \"Anmeldung akzeptiert\",\r\n \"examSessionCandidateModuleState.cancelled\": \"Storniert\",\r\n \"examSessionCandidateModuleState.equivalence\": \"Äquivalenz\",\r\n \"examSessionCandidateModuleState.expired\": \"Abgelaufen\",\r\n \"examSessionCandidateModuleState.failed\": \"Modul nicht bestanden\",\r\n \"examSessionCandidateModuleState.passed\": \"Modul bestanden\",\r\n \"examSessionCandidateModuleState.Refunded\": \"Modul zurückerstattet\",\r\n \"examSessionCandidateModuleState.verificationRequired\": \"Verifizierung erforderlich\",\r\n \"examSessions.noInfo\": \"Keine Prüfungssessionen verfügbar\",\r\n \"examState.booked\": \"Gebucht\",\r\n \"examState.cancelled\": \"Storniert\",\r\n \"examState.none\": \"---\",\r\n \"expert.button.new\": \"Neuen Experten hinzufügen\",\r\n \"expert.field.courseType.placeholder\": \"Trainingstypen für die Rolle auswählen\",\r\n \"expert.field.exam.placeholder\": \"Prüfungen für die Rolle auswählen\",\r\n \"expert.field.exam\": \"Examen\",\r\n \"expert.field.languages\": \"Sprachen\",\r\n \"expert.field.role.add\": \"Neue rolle hinzufügen\",\r\n \"expert.field.role.Aufsichtsexperten\": \"Aufsichtsexpert*in\",\r\n \"expert.field.role.delete\": \"Rolle löschen\",\r\n \"expert.field.role.EinspracheKomission\": \"Einsprachekomission\",\r\n \"expert.field.role.Expertenschulung\": \"Expertenschulung\",\r\n \"expert.field.role.Hauptexperten\": \"Hauptexpert*in\",\r\n \"expert.field.role.Leiterprüfungszentrum\": \"Leiter*in Prüfungszentrum\",\r\n \"expert.field.role.placeholder\": \"Rollen für Experten wählen\",\r\n \"expert.field.role.Prüfungsexperten\": \"Prüfungsexpert*in\",\r\n \"expert.field.role.Prüfungskomission\": \"Prüfungskomission\",\r\n \"expert.field.role.QSK\": \"Qualitätssicherungskomission\",\r\n \"expert.field.role\": \"Rollen\",\r\n \"expert.header\": \"Experten\",\r\n \"expert.snackbar.successfulCreate\": \"Experte wurde hinzugefügt.\",\r\n \"expert.snackbar.successfulDelete\": \"Der gewählte Prüfung wurde gelöscht.\",\r\n \"expert.snackbar.successfulUpdate\": \"Änderungen wurden gespeichert.\",\r\n \"expert.validation.idNotEmpty\": \"Die Experten-ID darf nicht leer sein.\",\r\n \"expertAssignment.validation.examNotAssignedToRoom\": \"Prüfung ohne Raumzuweisung\",\r\n \"expertAssignment.validation.expertAssignedToMultipleRoomsOnSameDay\": \"Experte ist verschiedenen Räumen am selben Tag zugeordnet.\",\r\n \"expertAssignment.validation.expertNotRequiredRole\": \"Experte hat nicht die benötigte Rolle.\",\r\n \"expertAssignment.validation.expertNotSpeakingAnySupportedLanguage\": \"Der Experte spricht keine der benötigten Sprachen.\",\r\n \"expertAssignment.validation.roomNotAssignedToExamDay\": \"Der Raum ist nicht dem Prüfungstag zugeordnet.\",\r\n \"expertAvailability.header\": \"Verfügbarkeit\",\r\n \"expertAvailability.noDatesAvailable\": \"Aktuell sind keine Termine verfügbar.\",\r\n \"expertCorrectionAvailability.header\": \"Verfügbarkeit für Prüfungskorrektur\",\r\n \"file.name\": \"Dateiname\",\r\n \"home.candidate\": \"Ansicht der Kandidaten\",\r\n \"home.expert\": \"Ansicht eines Experten\",\r\n \"home.header\": \"Startseite\",\r\n \"home.me.edit\": \"Konto verwalten\",\r\n \"home.me\": \"Ich und meine Einstellungen\",\r\n \"home.myAlertFields.link\": \"Bitte verwalten Sie Ihr Konto.\",\r\n \"home.myAlertFields\": \"Es sind einige Pflichtangaben notwendig.\",\r\n \"home.myCertifications\": \"Meine Zertifizierungen\",\r\n \"home.myCourses.downloadCertificate\": \"Zertifikat\",\r\n \"home.myCourses.downloadPerformanceRecord\": \"Leistungsnachweis\",\r\n \"home.myCourses.table.ClosingDate\": \"Abschlussdatum\",\r\n \"home.myCourses.table.downloads\": \"Downloads\",\r\n \"home.myCourses\": \"Meine Lehrgänge\",\r\n \"home.myExamCases\": \"Prüfungsaufgaben\",\r\n \"home.myExamResults\": \"Prüfungsergebnisse\",\r\n \"home.myExams.newApplication\": \"Prüfungsanmeldung\",\r\n \"home.myExams.noExams\": \"Keine Prüfungen verfügbar\",\r\n \"home.myExams.table.actionsColumn\": \"Aktionen\",\r\n \"home.myExams.table.dateColumn\": \"Datum\",\r\n \"home.myExams.table.examColumn\": \"Prüfung\",\r\n \"home.myExams.table.examTypeColumn\": \"Prüfungtyp\",\r\n \"home.myExams.table.gradeColumn\": \"Note\",\r\n \"home.myExams.table.locationColumn\": \"Standort\",\r\n \"home.myExams.table.moduleColumn\": \"Modul\",\r\n \"home.myExams.table.roomColumn\": \"Raum\",\r\n \"home.myExams.table.statusColumn\": \"Status\",\r\n \"home.myExams.table.timeColumn\": \"Zeit\",\r\n \"home.myExams\": \"Meine Prüfungen\",\r\n \"home.myExamSessions\": \"Meine Prüfungssessionen\",\r\n \"home.myFiles\": \"Meine Dokumente\",\r\n \"home.myTasks\": \"Meine Aufgaben\",\r\n \"home.pendingItemsInCartMessage\": \"Sie haben noch nicht bezahlte Module. Möchten Sie die Buchung nun fortsetzen? Bitte beachten Sie, dass der Platz in einem Modul bis zur Bezahlung nicht reserviert wird.\",\r\n \"home.switch.candidate\": \"Zur Kandidatenansicht wechseln\",\r\n \"home.switch.expert\": \"Zur Expertenansicht wechseln\",\r\n \"import.pev.bookingFailed\": \"Es können nicht alle Kandidaten gebucht werden.\",\r\n \"import.pev.failedImportCandidates\": \"Importieren von Kandidaten fehlgeschlagen.\",\r\n \"import.pev.failedImportScoresAndGrades\": \"Importieren von Ergebnissen und Noten fehlgeschlagen.\",\r\n \"import.pev.invalidCsv\": \"Ungültige CSV-Datei.\",\r\n \"import.pev.missingEntities\": \"Einige Entitäten wurden nicht gefunden. Kandidaten IDs: {KandidatenIds}. Prüfungssitzungen IDs: {examSessionsIds}. Kurse IDs: {courseIds}. Module IDs: {moduleIds}. Prüfungen IDs: {examIds}.\",\r\n \"import.pev.noExam\": \"Prüfung kann nicht gefunden werden. Prüfungs-ID: {examId}.\",\r\n \"import.pev.noExamDayForExam\": \"Kann keinen verfügbaren Prüfungstag für die Prüfung finden. ID der Prüfungssitzung: {examSessionId}. Prüfungs-ID: {examId}. Sprache: {language}.\",\r\n \"import.pev.success\": \"Die PEV-Daten wurden erfolgreich importiert.\",\r\n \"import.pev.wrongCourseModules\": \"Module sind nicht mit dem Kurs verknüpft. Kurs-ID: {courseId}. Module IDs: {moduleIds}.\",\r\n \"import.pev.wrongExamSessionExams\": \"Prüfungen sind nicht mit der Prüfungssitzung verknüpft. ID der Prüfungssitzung: {examSessionId}. Prüfungs-IDs: {examIds}.\",\r\n \"import.pev.wrongModuleExams\": \"Die Prüfungen sind nicht mit dem Modul verknüpft. Modul-ID: {moduleId}. Prüfungen IDs: {examIds}.\",\r\n \"location.button.new\": \"Neuen Ort hinzufügen\",\r\n \"location.field.canton.placeholder\": \"Wählen Sie einen Kanton\",\r\n \"location.field.canton\": \"Kanton\",\r\n \"location.field.city\": \"Ort\",\r\n \"location.field.contactEmailAddress\": \"Kontaktperson Email\",\r\n \"location.field.contactName\": \"Kontaktperson Name\",\r\n \"location.field.contactPhoneNo\": \"Kontaktperson Tel.-Nr\",\r\n \"location.field.languageRegions\": \"Sprachregionen\",\r\n \"location.field.linkToMap\": \"Lageplan\",\r\n \"location.field.name\": \"Name\",\r\n \"location.field.street\": \"Strasse\",\r\n \"location.field.zipCode\": \"PLZ\",\r\n \"location.header\": \"Standorte\",\r\n \"location.validation.idNotEmpty\": \"Die Standort-ID darf nicht leer sein.\",\r\n \"location.validation.languageUnknown\": \"Die Sprache ist unbekannt. Bitte wählen Sie eine existierende Sprache aus.\",\r\n \"location.validation.nameAlreadyExists\": \"Ein weiterer Standort mit dem gleichen Namen existiert bereits.\",\r\n \"location\": \"Standort\",\r\n \"login.button.adminLogin\": \"Login VBV-Admin\",\r\n \"login.button.impressum\": \"Impressum\",\r\n \"login.button.impressumLink\": \"https://www.vbv.ch/de/impressum\",\r\n \"login.button.login\": \"Login\",\r\n \"login.error.errorLoadingAppRegistration\": \"Fehler beim Abrufen der Konfiguration.\",\r\n \"login.text.external1\": \"Melden Sie sich an, um auf die Anwendung zuzugreifen.\",\r\n \"login.text.external2\": \"Bitte verwenden Sie einen modernen Browser wie Chrome oder Edge. Diese Plattform funktioniert ausschliesslich mit Notebook oder Desktop. Mit Tablet oder Handy funktioniert sie nicht.\",\r\n \"login.text.externalWarn\": \"Wichtig\",\r\n \"login.title.external\": \"Anmeldung als Kandidat/Experte\",\r\n \"module.button.new\": \"Neues Modul hinzufüngen\",\r\n \"module.dialog.confirmPublishDescription\": \"Möchten Sie die Prüfung wirklich veröffentlichen?\",\r\n \"module.dialog.noAvailableExams\": \"Keine Prüfungen verfügbar.\",\r\n \"module.dialog.noAvailableLocations\": \"Keine Standorte verfügbar.\",\r\n \"module.dialog.selectExams\": \"Prüfungen auswählen\",\r\n \"module.dialog.selectLocations\": \"Standorte auswählen\",\r\n \"module.field.abacusNumber\": \"Abacus Nummer\",\r\n \"module.field.allowDocumentUpload\": \"Dokumentupload erlauben\",\r\n \"module.field.allowOptions\": \"Optionen erlauben\",\r\n \"module.field.allowRegistrationOnlyOnce\": \"Einmalig verfügbar\",\r\n \"module.field.allRoomsAssigned\": \"Zugewiesener Raum\",\r\n \"module.field.certificateValidity.FiveYears\": \"5 Jahre\",\r\n \"module.field.certificateValidity.OneYear\": \"1 Jahr\",\r\n \"module.field.certificateValidity.Unlimited\": \"Unbeschränkt\",\r\n \"module.field.certificateValidity\": \"Zertifikat gültig für\",\r\n \"module.field.documentsUploaded\": \"Dokumente hochgeladen\",\r\n \"module.field.gradingRules.allExams\": \"Alle Prüfungen müssen bestanden werden\",\r\n \"module.field.gradingRules.averageGrade\": \"Durchschnittsnote\",\r\n \"module.field.gradingRules\": \"Benotungsregeln\",\r\n \"module.field.moduleId\": \"Modul ID\",\r\n \"module.field.moduleName\": \"Modulname\",\r\n \"module.field.moduleNameDE\": \"Modulname DE\",\r\n \"module.field.moduleNameEN\": \"Modulname EN\",\r\n \"module.field.moduleNameFR\": \"Modulname FR\",\r\n \"module.field.moduleNameIT\": \"Modulname IT\",\r\n \"module.field.moduleType.mandatory\": \"Obligatorisch\",\r\n \"module.field.moduleType.optionalModule\": \"Wahlmodul\",\r\n \"module.field.moduleType.processModule\": \"Prozessmodul\",\r\n \"module.field.moduleType\": \"Modultyp\",\r\n \"module.field.needsApproval\": \"Braucht zulassung\",\r\n \"module.field.paymentState\": \"Bezahlstatus\",\r\n \"module.field.price\": \"Preis in CHF\",\r\n \"module.field.verificationRequired\": \"Verifizierung erforderlich\",\r\n \"module.header\": \"Module\",\r\n \"module.moduleDetails\": \"Moduldetails\",\r\n \"module.section.specifics\": \"Modul spezifisch\",\r\n \"module.snackbar.successfulArchive\": \"Der gewählte Modul wurde archiviert.\",\r\n \"module.snackbar.successfulDelete\": \"Der gewählte Modul wurde gelöscht.\",\r\n \"module.snackbar.successfulPublish\": \"Der gewählte Modul wurde veröffentlichen.\",\r\n \"module.validation.gradingRule.invalidValue\": \"Ungültiger Wert für Benotungsregeln.\",\r\n \"module.validation.idNotEmpty\": \"Die Module ID darf nicht leer sein.\",\r\n \"module.validation.invalidStatusTransition\": \"Dieser Statusübergang ist nicht gültig.\",\r\n \"module.validation.invalidStatusValue\": \"Ungültiger Statuswert.\",\r\n \"module.validation.statusNotEmpty\": \"Das Status darf nicht leer sein.\",\r\n \"oralExamOption.kmu\": \"Kleine und mittlere Unternehmen\",\r\n \"oralExamOption.none\": \"Keine\",\r\n \"oralExamOption.privathaushalte\": \"Privathaushalte\",\r\n \"paymentMethodSelector.form.button\": \"Bezahlen per Rechnung\",\r\n \"paymentMethodSelector.item.creditCard\": \"Kreditkarte / Twint\",\r\n \"paymentMethodSelector.item.invoice\": \"Rechnung\",\r\n \"paymentMethodSelector.item.invoiceMessage\": \"Privatadresse (CH)\",\r\n \"paymentMethodSelector.title\": \"Wählen Sie die Zahlungsmethode\",\r\n \"paymentStatus.paid.abacus\": \"Fakturiert (Abacus)\",\r\n \"paymentStatus.paid.ePayment\": \"Bezahlt (E-Payment)\",\r\n \"paymentStatus.refunded.abacus\": \"Rückerstattet (Abacus)\",\r\n \"paymentStatus.refunded.ePayment\": \"Rückerstattet (E-Payment)\",\r\n \"person.field.activateSpecificProfile\": \"Expertenprofil aktivieren\",\r\n \"person.field.ahvNumber\": \"AHV-Nummer\",\r\n \"person.field.bankAccount\": \"Bankkonto\",\r\n \"person.field.birthDate\": \"Geb. Datum\",\r\n \"person.field.ciceroNumber\": \"Cicero-Nummer\",\r\n \"person.field.city\": \"Wohnort\",\r\n \"person.field.country\": \"Land\",\r\n \"person.field.displayName\": \"Name\",\r\n \"person.field.email\": \"E-Mail\",\r\n \"person.field.employer\": \"Arbeitgeber\",\r\n \"person.field.employerCity\": \"Ort\",\r\n \"person.field.employerCountry\": \"Wählen Sie ein Land\",\r\n \"person.field.employerStreet\": \"Strasse\",\r\n \"person.field.employerStreetNumber\": \"Nummer\",\r\n \"person.field.employerZipCode\": \"PLZ\",\r\n \"person.field.firstName\": \"Vorname\",\r\n \"person.field.gender.placeholder\": \"Wählen Sie ein Geschlecht aus\",\r\n \"person.field.gender\": \"Geschlecht\",\r\n \"person.field.homeCountry\": \"Heimatland\",\r\n \"person.field.icon\": \"Akteurensymbol\",\r\n \"person.field.internalComment\": \"Interner Kommentar\",\r\n \"person.field.lastName\": \"Nachname\",\r\n \"person.field.mobileNumber\": \"Mobile\",\r\n \"person.field.phoneNumber.placeholder\": \"Format: +41123456789\",\r\n \"person.field.phoneNumber\": \"Telefon\",\r\n \"person.field.showOnlyExperts\": \"Nur Experten anzeigen\",\r\n \"person.field.street\": \"Strasse\",\r\n \"person.field.streetNumber\": \"Nummer\",\r\n \"person.field.zipCode\": \"PLZ Wohnort\",\r\n \"person.section.address\": \"Privatadresse\",\r\n \"person.section.businessData\": \"Geschäftsdaten\",\r\n \"person.section.expertDetails\": \"Fachspezifische Details\",\r\n \"person.section.personalDetails\": \"Personalien\",\r\n \"person.validation.ahvNumberAlreadyExists\": \"Ein anderer Benutzer mit derselben AHV-Nummer existiert bereits.\",\r\n \"person.validation.ahvNumberNotValid\": \"Die AHV-Nummer ist ungültig.\",\r\n \"person.validation.bankAccountNotEmpty\": \"Das Bankkonto kann nicht leer sein\",\r\n \"person.validation.ciceroNumberAlreadyExists\": \"Ein anderer Benutzer mit derselben Cicero-Nummer existiert bereits.\",\r\n \"person.validation.ciceroNumberNotValid\": \"Die Cicero-Nummer ist ungültig.\",\r\n \"person.validation.confirmEmailChange\": \"Die E-Mail-Adresse wurde geändert. Dadurch wird die E-Mail-Adresse, welche für die Anmeldung benötigt wird, ebenfalls geändert. Sind Sie sicher, dass Sie fortfahren möchten?\",\r\n \"person.validation.emailAlreadyExists\": \"Ein anderer Benutzer mit der gleichen E-Mail existiert bereits.\",\r\n \"person.validation.genderUnknown\": \"Das Geschlecht ist unbekannt. Bitte wählen Sie ein existierendes Geschlecht aus.\",\r\n \"person.validation.invalidEmployerZipCode\": \"PLZ ist ungültig.\",\r\n \"person.validation.invalidZipCode\": \"PLZ Wohnort ist ungültig.\",\r\n \"person.validation.mandatoryExamRolesWithNoExams\": \"Es gibt obligatorische Prüfungsrollen, denen keine Prüfungen zugewiesen sind. Bitte weisen Sie die fehlenden Prüfungen zu.\",\r\n \"person.validation.personEdiIdNotEmpty\": \"Die EDI-ID darf nicht leer sein\",\r\n \"person.validation.personEmailAddressNotEmpty\": \"Die E-Mail-Adresse darf nicht leer sein\",\r\n \"person.validation.repeatedRoles\": \"Es gibt mehrere Rollen. Bitte achten Sie darauf, dass sich die Rollen nicht wiederholen.\",\r\n \"person.validation.typeUnknown\": \"Der Personentyp ist unbekannt. Bitte wählen Sie einen vorhandenen Typ aus.\",\r\n \"role.validation.roleUnknown\": \"Unbekannte Rolle\",\r\n \"room.button.new\": \"Neue Räume\",\r\n \"room.field.floor\": \"Stockwerk\",\r\n \"room.field.isPcRoom\": \"Computerraum\",\r\n \"room.field.name\": \"Name\",\r\n \"room.field.numberOfSeats\": \"Kapazität\",\r\n \"room.header\": \"Raum\",\r\n \"room.text.seats\": \"Plätze\",\r\n \"room.validation.idNotEmpty\": \"Die Raum-ID darf nicht leer sein.\",\r\n \"room.validation.nameAlreadyExists\": \"Ein anderer Raum mit dem gleichen Namen existiert bereits.\",\r\n \"roomAssignment.button.new\": \"Neue Raumzuweisung\",\r\n \"roomAssignment.deleteConfirmation.title\": \"Sie sind dabei, einen Vorbereitungsraum zu entfernen. Bitte stellen Sie sicher, dass diesem Prüfungstermin ein Vorbereitungsraum zugewiesen ist.\",\r\n \"roomAssignment.field.isPreparationRoom\": \"Vorbereitungsraum\",\r\n \"roomAssignment.field.room.placeholder\": \"Wählen Sie einen Raum aus\",\r\n \"roomAssignment.field.room\": \"Raum\",\r\n \"roomAssignment.header\": \"Raumzuweisung\",\r\n \"roomAssignment.validation.idNotEmpty\": \"Die Raumzuweisung kann nicht leer sein\",\r\n \"scheduler.examSelectDialog.title\": \"Prüfung für den Raum wählen\",\r\n \"scheduler.examSelectDialog.tooltip\": \"Prüfung für alle Zeitfenster wählen\",\r\n \"scheduler.message.briefing\": \"Experteninformation\",\r\n \"scheduler.message.exam\": \"Prüfung\",\r\n \"scheduler.message.noExperts\": \"Keine Experten zugewiesen\",\r\n \"scheduler.message.pause\": \"Pause\",\r\n \"scheduler.timeSlot.arrivalTime\": \"Ankunftszeit\",\r\n \"selfcancellation.header\": \"Modul stornieren\",\r\n \"selfcancellation.text\": \"Achtung! Bitte bestätigen Sie, dass Sie Ihre Anmeldung zur Prüfung stornieren wollen.\",\r\n \"startCertification.button.back\": \"Zurück\",\r\n \"startCertification.button.finish\": \"Fertig stellen\",\r\n \"startCertification.button.next\": \"Weiter\",\r\n \"startCertification.courseModuleExamsStep.header\": \"Lehrgang, Modul und Prüfungen wählen\",\r\n \"startCertification.examDataStep.header\": \"Prüfungstermin wählen\",\r\n \"startCertification.examDataStep.selectCompany\": \"Arbeitgeber auswählen\",\r\n \"startCertification.examDataStep.selectExamSession\": \"Prüfungssession auswählen\",\r\n \"startCertification.examDataStep.selectFachrichtung\": \"Fachrichtung auswählen\",\r\n \"startCertification.examDataStep.selectLocationOralPart\": \"Standort für mündliche Prüfung wählen\",\r\n \"startCertification.examDataStep.selectLocationWrittenPart\": \"Standort für schrifliche Prüfung wählen\",\r\n \"startCertification.examDataStep.selectOralExamDate\": \"Datum für mündliche Prüfung wählen\",\r\n \"startCertification.examDataStep.selectWrittenExamDate\": \"Datum für schriftliche Prüfung wählen\",\r\n \"startCertification.locationDateStep.header\": \"Prüfungsort und Termin wählen\",\r\n \"startCertification.modulesDetailsStep.dialogHelperText\": \"Bitte ergänzen Sie die fehlenden Informationen und laden Sie bitte gegebenfalls die erforderlichen Dokumente hoch.\",\r\n \"startCertification.modulesDetailsStep.docsText1\": \"Laden Sie bitte alle Dokumente hoch, die für dieses Modul erforderlich sind.\",\r\n \"startCertification.modulesDetailsStep.docsText2\": \"Falls Sie die Dokumente zu diesem Zeitpunkt noch nicht hochladen können, markieren Sie dies untenstehend. Wir werden Ihnen eine entsprechende Aufgabe zuweisen.\",\r\n \"startCertification.modulesDetailsStep.fillDetails\": \"Vollständige Details\",\r\n \"startCertification.modulesDetailsStep.header\": \"Informationen und Dokumente bereitstellen\",\r\n \"startCertification.modulesDetailsStep.helperText\": \"Bitte ergänzen Sie die fehlenden Informationen und laden Sie bitte die erforderlichen Dokumente für die ausgewählten Module hoch.\",\r\n \"startCertification.modulesDetailsStep.isRepeater\": \"Ich bin Repetent\",\r\n \"startCertification.modulesDetailsStep.option.kmu\": \"KMU\",\r\n \"startCertification.modulesDetailsStep.option.privathaushalte\": \"Privat\",\r\n \"startCertification.modulesDetailsStep.option\": \"Option\",\r\n \"startCertification.modulesDetailsStep.tableTitle\": \"Ausgewählte Module\",\r\n \"startCertification.modulesDetailsStep.trainingProvider\": \"Ausbildungsanbieter\",\r\n \"startCertification.modulesDetailsStep.willUploadDocsLater\": \"Dokumente später hochladen\",\r\n \"startCertification.moduleSelectionStep.header\": \"Lehrgang, Modul und Prüfungen wählen\",\r\n \"startCertification.moduleSelectionStep.helperText\": \"Bitte wählen einen Lehrgang und eine Prüfungssession aus, um die Module und Prüfungen zu selektieren, für die Sie sich anmelden wollen.\",\r\n \"startCertification.moduleSelectionStep.priceColumn\": \"Preis in CHF\",\r\n \"startCertification.moduleSelectionStep.removeButton\": \"Entfernen\",\r\n \"startCertification.moduleSelectionStep.selectButton\": \"Auswählen\",\r\n \"startCertification.moduleSelectionStep.selectedModules\": \"Ihre ausgewählten Module\",\r\n \"startCertification.paymentAndCompletionStep.actionColumn\": \"Aktion\",\r\n \"startCertification.paymentAndCompletionStep.button.confirm\": \"Jetzt verbindlich buchen\",\r\n \"startCertification.paymentAndCompletionStep.button.confirmed\": \"Bestätigt\",\r\n \"startCertification.paymentAndCompletionStep.button.paid\": \"Bezahlt\",\r\n \"startCertification.paymentAndCompletionStep.button.pay\": \"Bezahlen\",\r\n \"startCertification.paymentAndCompletionStep.freeCancelDate\": \"kostenlose Stornierung bis \",\r\n \"startCertification.paymentAndCompletionStep.generalInfo.cost1\": \"Danach ist bei \",\r\n \"startCertification.paymentAndCompletionStep.generalInfo.cost2bold\": \"unbegründeter Abmeldung die volle Prüfungsgebühr\",\r\n \"startCertification.paymentAndCompletionStep.generalInfo.cost3\": \" zu begleichen.\",\r\n \"startCertification.paymentAndCompletionStep.generalInfo.freeCancellation\": \"Die Anmeldung ist verbindlich. Sie können sich bis zu den oben angegebenen Daten ohne Kostenfolge abmelden.\",\r\n \"startCertification.paymentAndCompletionStep.generalInfo.hveFAQLink\": \"https://www.vbv.ch/fileadmin/vbv/Dokumente/Bildungsabschluesse/Versicherungsfach/72047_PO_Versicherungsfachleute_D_2022.pdf\",\r\n \"startCertification.paymentAndCompletionStep.generalInfo.hveFAQLinkText\": \"FAQ eidg. Fachausweis\",\r\n \"startCertification.paymentAndCompletionStep.generalInfo.intermediaryFAQLink\": \"https://www.vbv.ch/fileadmin/vbv/Dokumente/Bildungsabschluesse/Versicherungsvermittlung/FAQ_Vermi_Pruefungen_de.pdf\",\r\n \"startCertification.paymentAndCompletionStep.generalInfo.intermediaryFAQLinkText\": \"FAQ Versicherungsvermittler\",\r\n \"startCertification.paymentAndCompletionStep.generalInfo.moreInformation1\": \"Weitere Informationen finden Sie in der \",\r\n \"startCertification.paymentAndCompletionStep.generalInfo.moreInformation2\": \".\",\r\n \"startCertification.paymentAndCompletionStep.header\": \"Bezahlung und Abschluss\",\r\n \"startCertification.paymentAndCompletionStep.hint\": \"Bitte beachten Sie, dass Ihr Platz in einem Modul bis zur Bezahlung nicht reserviert wird.\",\r\n \"startCertification.paymentAndCompletionStep.messages.transactionCancelled\": \"Transaktion {id} storniert\",\r\n \"startCertification.paymentAndCompletionStep.messages.transactionConfirmed\": \"Transaktion {id} wurde bestätigt\",\r\n \"startCertification.paymentAndCompletionStep.messages.transactionFailed\": \"Transaktion {id} fehlgeschlagen\",\r\n \"startCertification.paymentAndCompletionStep.messages.transactionPaid\": \"Transaktion {id} ist bezahlt worden\",\r\n \"startCertification.paymentAndCompletionStep.messages.wrongTransactionId\": \"Ungültige Transaktions-ID {id}\",\r\n \"startCertification.paymentAndCompletionStep.paymentConfirmationMessagePart1\": \"Dies kann bis zu einer Minute dauern. Diese Nachricht wird automatisch geschlossen, wenn die Zahlung bestätigt wurde.\",\r\n \"startCertification.paymentAndCompletionStep.paymentConfirmationMessagePart2\": \"Wenn nicht, kontaktieren Sie bitte VBV mit der Transaktions-ID: {datatransTrxId}\",\r\n \"startCertification.paymentAndCompletionStep.paymentConfirmationTitle\": \"Warten auf Zahlungsbestätigung, bitte warten\",\r\n \"startCertification.paymentAndCompletionStep.removeModule\": \"Modul entfernen\",\r\n \"startCertification.paymentAndCompletionStep.removeModuleConfirmation\": \"Möchten Sie das Modul entfernen?\",\r\n \"startCertification.paymentAndCompletionStep.summary\": \"Zusammenfassung\",\r\n \"startCertification.personalDataStep.header\": \"Verifizieren der Personalien\",\r\n \"startCertification.policyDialog.accept.link\": \"Datenschutzerklärung/AGB\",\r\n \"startCertification.policyDialog.accept.linkUrl\": \"https://www.vbv.ch/de/datenschutzbestimmungen\",\r\n \"startCertification.policyDialog.accept\": \"Hiermit akzeptiere ich die \",\r\n \"startCertification.policyDialog.text1\": \"Hiermit nehme ich zur Kenntnis und willige hiermit ein, dass die folgenden Informationen an meinen Arbeitgeber bekanntgegeben werden: Erfolgte Anmeldung zu einer Prüfungssession, einschliesslich Datum der Prüfungssession, die Prüfresultate, einschliesslich Noten/Punkte und ob die Prüfung bestanden oder nicht bestanden wurde, die Registrierung im Register Cicero \",\r\n \"startCertification.policyDialog.text2\": \"Diese Einwilligung kann jederzeit und frei gegenüber dem Berufsbildungsverband der Versicherungswirtschaft VBV schriftlich oder mit E-Mail an vermittler@vbv-afa.ch widerrufen werden.\",\r\n \"startCertification.uploadFilesStep.header\": \"Dokumente hochladen\",\r\n \"table.noRecords\": \"Keine Datensätze gefunden\",\r\n \"task.creationDate\": \"Erstellungsdatum\",\r\n \"task.deadline\": \"Termin\",\r\n \"task.noInfo\": \"Keine Aufgaben vorhanden\",\r\n \"task.state\": \"Status\",\r\n \"task.type\": \"Aufgabentyp\",\r\n \"task.validation.deadlineMustBeLaterThanToday\": \"Die Deadline muss später sein als heute.\",\r\n \"task.validation.typeUnknown\": \"Aufgaben Typ unbekannt\",\r\n \"taskState.done\": \"Erledigt\",\r\n \"taskState.inProgress\": \"In Bearbeitung\",\r\n \"taskState.toDo\": \"Offen\",\r\n \"taskType.cancellation\": \"Stornierung\",\r\n \"taskType.checkAvailability\": \"Verfügbarkeit mitteilen\",\r\n \"taskType.checkCorrectionAvailability\": \"Verfügbarkeit für Prüfungskorrektur mitteilen\",\r\n \"taskType.none\": \"Keine\",\r\n \"taskType.uploadDocuments\": \"Dokumente hochladen\",\r\n \"uploadDocumentsTask.header\": \"Aufgabe Dokumente hochladen\",\r\n \"uploadDocumentsTask.instructions\": \"Bitte laden Sie alle für dieses Modul erforderlichen Dokumente hoch und schließen Sie die Aufgabe ab, wenn Sie fertig sind.\",\r\n \"user.noInfo\": \"Keine Benutzerinformationen\",\r\n \"user.settings\": \"Einstellungen\",\r\n \"userRoomAssignment.assignment\": \"Rollenzuweisung\",\r\n \"userRoomAssignment.label.allExpertsSwitch\": \"Zeige alle Experten\",\r\n \"userRoomAssignment.label.fixed\": \"Fix\",\r\n \"userRoomAssignment.label.fixedCorrectionExperts\": \"Fixe Korrekturexperten\",\r\n \"userRoomAssignment.label.fixedExperts\": \"Fixe Prüfungsexperten (2x)\",\r\n \"userRoomAssignment.label.fixedProctors\": \"Fixe Aufsichtsexperten (2x)\",\r\n \"userRoomAssignment.label.reserve\": \"Provisorisch\",\r\n \"userRoomAssignment.label.reserveCorrectionExperts\": \"Provisorische Korrekturexperten\",\r\n \"userRoomAssignment.label.reserveExperts\": \"Provisorische Prüfungsexperten\",\r\n \"userRoomAssignment.label.reserveProctors\": \"Provisorische Aufsichtsexperten\",\r\n \"userRoomAssignment.label.roomFull\": \"Raum ist ausgebucht\",\r\n \"userRoomAssignment.label.roomOverload\": \"Raum ist überbucht\",\r\n \"userRoomAssignment.placeholder.selectFixedExperts\": \"Prüfungsexperten zuweisen\",\r\n \"userRoomAssignment.placeholder.selectFixedProctors\": \"Aufsichtsexperten zuweisen\",\r\n \"userRoomAssignment.placeholder.selectReserveExperts\": \"Provisorische Prüfungsexperten zuweisen\",\r\n \"userRoomAssignment.placeholder.selectReserveProctors\": \"Provisorische Aufsichtsexperten zuweisen\",\r\n\"examSessionCandidateModuleState.Cancelled\": \"Modul abgebrochen. Eine Systemaufgabe wurde erstellt\",\r\n};\r\n","import { TranslationKeys } from \"./TranslationKey\";\r\n\r\nexport const fr: TranslationKeys = {\r\n \"application.examLocationAndDate.dateColumn\": \"Date\",\r\n \"application.examLocationAndDate.examColumn\": \"Examen\",\r\n \"application.examLocationAndDate.examFull\": \"Il n'y a plus de places disponibles pour cet examen dans la session d'examen sélectionnée. Veuillez revenir en arrière et modifier votre sélection.\",\r\n \"application.examLocationAndDate.examTypeColumn\": \"Type d'examen\",\r\n \"application.examLocationAndDate.locationColumn\": \"Localisation\",\r\n \"application.examLocationAndDate.moduleColumn\": \"Module\",\r\n \"application.examLocationAndDate.statusColumn\": \"Statut\",\r\n \"application.examLocationAndDate.validattion.examsHaveDifferentLocations\": \"Il n'est pas possible de réserver le même jour des examens dans des lieux différents. Veuillez adapter votre choix.\",\r\n \"application.examLocationAndDateExplanationText\": \"Veuillez choisir le lieu et la date des examens sélectionnés.\",\r\n \"application.moduleSelector.examsColumn\": \"Examens\",\r\n \"application.moduleSelector.noAvaiableModules\": \"Aucun module disponible\",\r\n \"application.moduleSelector.typeColumn\": \"Type\",\r\n \"application.selectedExamsTitle\": \"Modules et examens sélectionnés\",\r\n \"application.uploadVerificationFilesMessage\": \"Si vous avez des fichiers supplémentaires, veuillez les télécharger maintenant.\",\r\n \"application.userSelector.course\": \"Cours\",\r\n \"application.userSelector.examSession\": \"Session d'examen\",\r\n \"application.userSelector.noSelectedModules\": \"Aucun module sélectionné\",\r\n \"cancellationTaskForm.candidateRefund\": \"Le candidat recevra un remboursement\",\r\n \"cancellationTaskForm.candidateSubHeader\": \"Candidat\",\r\n \"cancellationTaskForm.certificationTypeLabel\": \"Type de certification\",\r\n \"cancellationTaskForm.commentsLabel\": \"Commentaires\",\r\n \"cancellationTaskForm.completeTask\": \"Sauvegarder et compléter la tâche\",\r\n \"cancellationTaskForm.createdOn\": \"Créée le \",\r\n \"cancellationTaskForm.dateLabel\": \"Date\",\r\n \"cancellationTaskForm.emailLabel\": \"Email\",\r\n \"cancellationTaskForm.examTypeLabel\": \"Type d'examen\",\r\n \"cancellationTaskForm.firstNameLabel\": \"Prénom\",\r\n \"cancellationTaskForm.header\": \"Tâche d'annulation\",\r\n \"cancellationTaskForm.lastNameLabel\": \"Nom\",\r\n \"cancellationTaskForm.locationLabel\": \"Location\",\r\n \"cancellationTaskForm.moduleSubHeader\": \"Dates\",\r\n \"cancellationTaskForm.navigateToCandidateSession\": \"Aller à la page de certification du candidat\",\r\n \"cancellationTaskForm.orderId\": \"Identifiant de commande\",\r\n \"cancellationTaskForm.refundApprovedBy\": \"Remboursement approuvé par\",\r\n \"cancellationTaskForm.roomLabel\": \"Salle\",\r\n \"cancellationTaskForm.sessionLabel\": \"Session\",\r\n \"cancellationTaskForm.timeSlotLabel\": \"Créneau horaire\",\r\n \"cancellationTaskForm.transactionId\": \"Identifiant de transaction\",\r\n \"candidate.button.exportAll\": \"exporter tous les candidats\",\r\n \"candidate.button.new\": \"Ajouter un nouveau candidat\",\r\n \"candidate.button.uploadEdiIds\": \"télécharger EDI Ids\",\r\n \"candidate.disableConfirmationDialog.message\": \"Veuillez vous assurer que vos détails personnelles sont correctes, car elles ne pourront plus être modifiées par la suite.\",\r\n \"candidate.ediIdsDialog.title\": \"Sélectionner le fichier contenant le EDI Ids\",\r\n \"candidate.ediIdsDialog.uploadSuccess\": \"Succès du téléchargement. Nombre de candidats mis à jour\",\r\n \"candidate.field.canton\": \"Canton\",\r\n \"candidate.field.correspondenceLanguage\": \"Langue de correspondance\",\r\n \"candidate.field.invoiceRecipient\": \"Contact pour les factures\",\r\n \"candidate.field.nationality\": \"Nationalité\",\r\n \"candidate.field.numberOfFailedOralExams\": \"Examens oraux échoués\",\r\n \"candidate.field.numberOfFailedWrittenExams\": \"Examens écrits échoués\",\r\n \"candidate.field.placeOfOrigin\": \"Lieu d'origine\",\r\n \"candidate.header\": \"Candidats\",\r\n \"candidate.section.invoice\": \"Facture\",\r\n \"candidate.snackbar.successfulCreate\": \"le candidat a été ajouté\",\r\n \"candidate.snackbar.successfulDelete\": \"Le candidat sélectionné a été supprimé\",\r\n \"candidate.snackbar.successfulExport\": \"Le numéro de débiteur de l'abaque a été programmé pour l'exportation\",\r\n \"candidate.snackbar.successfulUpdate\": \"Les modifications ont été enregistrées\",\r\n \"candidate.validation.disabledFields\": \"Les champs ne peuvent pas être mis à jour après la confirmation\",\r\n \"candidate.validation.idNotEmpty\": \"L’ID du candidat ne doit pas être vide\",\r\n \"candidateAssignment.validation.preparationRoomNotAllowed.\": \"Un candidat ne peut pas être affecté à une salle de préparation.\",\r\n \"candidateCourse.certificate.fileNamePrefix\": \"Certificat\",\r\n \"candidateCourse.performanceRecord.fileNamePrefix\": \"Preuve de Performance\",\r\n \"candidateCourseStatus.open\": \"Ouvert\",\r\n \"candidateCourseStatus.passed\": \"Réussi\",\r\n \"candidateWizard.error\": \"L’inscription pour la certification a échoué\",\r\n \"candidateWizard.success\": \"Vous avez réussi! Vous devriez avoir reçu un courriel pour chaque inscription et vos examens apparaîtront dans la vue Candidat.\",\r\n \"canton.ag\": \"Argovie\",\r\n \"canton.ai\": \"Appenzell Rhodes-Intérieures\",\r\n \"canton.ar\": \"Appenzell Rhodes-Extérieures\",\r\n \"canton.be\": \"Berne\",\r\n \"canton.bl\": \"Bâle-Campagne\",\r\n \"canton.bs\": \"Bâle-Ville\",\r\n \"canton.fr\": \"Fribourg\",\r\n \"canton.ge\": \"Genève\",\r\n \"canton.gl\": \"Glaris\",\r\n \"canton.gr\": \"Grisons\",\r\n \"canton.ju\": \"Jura\",\r\n \"canton.lu\": \"Lucerne\",\r\n \"canton.ne\": \"Neuchâtel\",\r\n \"canton.nw\": \"Nidwald\",\r\n \"canton.ow\": \"Obwald\",\r\n \"canton.sg\": \"Saint-Gall\",\r\n \"canton.sh\": \"Schaffhouse\",\r\n \"canton.so\": \"Soleure\",\r\n \"canton.sz\": \"Schwyz\",\r\n \"canton.tg\": \"Thurgovie\",\r\n \"canton.ti\": \"Tessin\",\r\n \"canton.ur\": \"Uri\",\r\n \"canton.vd\": \"Vaud\",\r\n \"canton.vs\": \"Valais\",\r\n \"canton.zg\": \"Zoug\",\r\n \"canton.zh\": \"Zurich\",\r\n \"cart.validation.candidateIdNotEmpty\": \"L'ID du candidat doit être défini\",\r\n \"cart.validation.cartEmpty\": \"Le panier est vide.\",\r\n \"cart.validation.examNotFound\": \"Examen non trouvé.\",\r\n \"cart.validation.missingCourseId\": \"ID de cours manquant\",\r\n \"cart.validation.missingExamDayIdOnExam\": \"Absence de l'identifiant du jour de l'examen sur l'examen.\",\r\n \"cart.validation.missingExamSessionId\": \"ID de session d'examen manquant\",\r\n \"cart.validation.missingInformationInModule\": \"Informations manquantes dans le module.\",\r\n \"cart.validation.missingModuleId\": \"ID de module manquant\",\r\n \"cart.validation.moduleAlreadyBooked\": \"Module déjà réservé.\",\r\n \"cart.validation.moduleAlreadyPaid\": \"Module déjà payé.\",\r\n \"cart.validation.moduleNotFound\": \"Module non trouvé dans le panier.\",\r\n \"certification.button.new\": \"Inscription À L'examen\",\r\n \"certification.examDate\": \"date d’examen\",\r\n \"certification.examType\": \"type d’examen\",\r\n \"certification.fachrichtung\": \"Option pour le cas de l’examen oral\",\r\n \"certification.state\": \"État\",\r\n \"certifications.noInfo\": \"pas de certifications disponibles\",\r\n \"common.accept\": \"Accepter\",\r\n \"common.archive\": \"Archiver\",\r\n \"common.attention\": \"Attention\",\r\n \"common.business\": \"Affaires\",\r\n \"common.cancel\": \"Annuler\",\r\n \"common.certificationsGenerated\": \"Certificats générés\",\r\n \"common.close\": \"Fermer\",\r\n \"common.comment\": \"Commentaire\",\r\n \"common.confirmArchiveDescription\": \"Voulez-vous vraiment archiver l'entité?\",\r\n \"common.confirmDeleteDescription\": \"Voulez-vous vraiment supprimer l'entité?\",\r\n \"common.confirmPublishDescription\": \"Êtes-vous sûr de vouloir publier cette entité ?\",\r\n \"common.debtorNumber\": \"Numéro du débiteur\",\r\n \"common.delete\": \"Supprimer\",\r\n \"common.dragAndDrop.description\": \"Glissez et déposez le document ici\",\r\n \"common.errorMessage\": \"Une erreur est survenue\",\r\n \"common.exam\": \"Examen\",\r\n \"common.export\": \"Exportation\",\r\n \"common.field.status\": \"Statut\",\r\n \"common.genders.female\": \"Femme\",\r\n \"common.genders.male\": \"Homme\",\r\n \"common.generateCertifications.confirmation\": \"êtes-vous sûr de vouloir générer des certifications?\",\r\n \"common.generateCertifications\": \"générer des certifications\",\r\n \"common.language.de\": \"Allemand\",\r\n \"common.language.en\": \"Anglais\",\r\n \"common.language.fr\": \"Français\",\r\n \"common.language.it\": \"Italien\",\r\n \"common.language\": \"Langue\",\r\n \"common.languages\": \"Langues\",\r\n \"common.lastModification.by\": \"par\",\r\n \"common.lastModification.on\": \"le\",\r\n \"common.lastModification\": \"Dernière modification\",\r\n \"common.module\": \"Module\",\r\n \"common.no\": \"Non\",\r\n \"common.noLanguagesAssigned\": \"Aucune langue attribuée\",\r\n \"common.ok\": \"Ok\",\r\n \"common.pleaseSelect\": \"S'il vous plaît choisir\",\r\n \"common.private\": \"Privé\",\r\n \"common.publish\": \"Publier\",\r\n \"common.reject\": \"Refusée\",\r\n \"common.rejected\": \"Rejeté\",\r\n \"common.rowsPerPage\": \"colonnes par page\",\r\n \"common.save\": \"Sauvegarder\",\r\n \"common.scheduleCorrectionExams\": \"Planification de correction\",\r\n \"common.scheduleOralExams\": \"Planification des examens oraux\",\r\n \"common.scheduleWrittenExams\": \"Planification des examens écrits\",\r\n \"common.search\": \"Rechercher\",\r\n \"common.selectElement\": \"Sélectionner\",\r\n \"common.selectElements\": \"Sélectionner\",\r\n \"common.signOut\": \"Désinscrire\",\r\n \"common.status.archived\": \"Archivé\",\r\n \"common.status.cancelled\": \"Annulé\",\r\n \"common.status.deleted\": \"Supprimé \",\r\n \"common.status.draft\": \"Brouillon\",\r\n \"common.status.published\": \"Publié\",\r\n \"common.survey\": \"Etude\",\r\n \"common.total\": \"Total\",\r\n \"common.unexpectedError\": \"Erreur inattendue. Veuillez réessayer plus tard.\",\r\n \"common.Unknown\": \"Inconnu\",\r\n \"common.unpublish\": \"Dépublier \",\r\n \"common.uploadError\": \"Erreur dans le téléchargement. Le format n'est pas valalbe.\",\r\n \"common.validation.entityWithIdNotExistsAndCanNotBeAssigned\": \"L'Entité avec l'ID donné n'a pas été trouvée et ne peut pas être assignée.\",\r\n \"common.validation.entityWithIdNotExistsAndCanNotBeDeleted\": \"L'Entité avec l'ID donné n'a pas été trouvée et ne peut pas être supprimée.\",\r\n \"common.validation.idNotEmpty\": \"L'ID ne peut pas être vide.\",\r\n \"common.validation.name.empty\": \"Le nom ne peut pas être vide.\",\r\n \"common.validation.status.empty\": \"Le statut ne peut pas être vide.\",\r\n \"common.validation.status.invalidTransition\": \"Cette transition de statut est invalide.\",\r\n \"common.validation.status.invalidValue\": \"La valeur du statut est incorrecte.\",\r\n \"common.yes\": \"Oui\",\r\n \"countries.switzerland.name\": \"Suisse\",\r\n \"course.button.addModules\": \"Ajout de modules\",\r\n \"course.dialog.confirmPublishDescription\": \"Êtes-vous sûr de vouloir publier ce cours ?\",\r\n \"course.dialog.noAvailableModules\": \"Aucun module disponible.\",\r\n \"course.dialog.selectModules\": \"Sélection de modules\",\r\n \"course.field.certificateValidity.FiveYears\": \"5 ans\",\r\n \"course.field.certificateValidity.Unlimited\": \"Illimité\",\r\n \"course.field.certificateValidity\": \"Validité de la certification\",\r\n \"course.field.moduleRelevantForGrade\": \"Pertinent pour la note du cours\",\r\n \"course.field.modulesValidity.days\": \"jours\",\r\n \"course.field.modulesValidity.unlimited\": \"Illimitée\",\r\n \"course.field.modulesValidity\": \"Validité des modules\",\r\n \"course.field.name\": \"Nom du cours\",\r\n \"course.field.nameDE\": \"Nom du cours - DE\",\r\n \"course.field.nameEN\": \"Nom du cours - EN\",\r\n \"course.field.nameFR\": \"Nom du cours - FR\",\r\n \"course.field.nameIT\": \"Nom du cours - IT\",\r\n \"course.field.numberOfMandatoryModules\": \"Nombre de modules obligatoires\",\r\n \"course.field.numberOfProcessModules\": \"Nombre de modules de processus\",\r\n \"course.field.numberOfSelectionModules\": \"Nombre de modules en sélection\",\r\n \"course.header\": \"Cours\",\r\n \"course.list.header\": \"Cours\",\r\n \"course.section.modules\": \"Modules\",\r\n \"course.snackbar.successfulArchive\": \"Le cours a été archivé avec succès.\",\r\n \"course.snackbar.successfulDelete\": \"Le cours a été supprimé avec succès.\",\r\n \"course.snackbar.successfulPublish\": \"Le cours a été publié avec succès.\",\r\n \"course.type.cicero\": \"Brevet fédéral/Cicero\",\r\n \"course.type.ciceroGroup\": \"Groupe de Brevet fédéral/Cicero\",\r\n \"course.type.hve\": \"FPS\",\r\n \"course.type.hveGroup\": \"Groupe de FPS\",\r\n \"course.type.intermediary\": \"Intermédiaire\",\r\n \"course.type.intermediaryGroup\": \"Groupe de Intermédiaire\",\r\n \"course.type.mindeststandard\": \"Normes minimales\",\r\n \"course.type.mindeststandardGroup\": \"Groupe de normes minimales\",\r\n \"course.type\": \"Type de cours\",\r\n \"course.validation.idNotEmpty\": \"L'ID du cours ne peut pas être vide.\",\r\n \"course.validation.modules.empty\": \"Veuillez choisir au moins un module.\",\r\n \"course.validation.numberOfAnyModulesIsZero\": \"Le nombre total de modules doit être au moins égal à 1.\",\r\n \"course.validation.typeIsInvalid\": \"Le type de cours est invalide.\",\r\n \"course.validation.typeNotEmpty\": \"Veuillez sélectionner le type de cours\",\r\n \"courseManagement.header\": \"Cours\",\r\n \"dragAndDrop.uploadFiles\": \"Télécharger les fichiers en les déposant ici\",\r\n \"exam.button.new\": \"Ajouter un nouveau examen\",\r\n \"exam.field.correctionExpenses\": \"Frais de correction\",\r\n \"exam.field.courseType\": \"Type de cours\",\r\n \"exam.field.examExpenses\": \"Frais d'examens\",\r\n \"exam.field.examId\": \"Identifiant d'examen\",\r\n \"exam.field.examName\": \"Nom de l'examen\",\r\n \"exam.field.examNameDE\": \"Nom de l'examen DE\",\r\n \"exam.field.examNameEN\": \"Nom de l'examen EN\",\r\n \"exam.field.examNameFR\": \"Nom de l'examen FR\",\r\n \"exam.field.examNameIT\": \"Nom de l'examen IT\",\r\n \"exam.field.expertExpenses\": \"Frais d'experts\",\r\n \"exam.field.type\": \"Type d'examen\",\r\n \"exam.header\": \"Examens\",\r\n \"exam.section.specifics\": \"Détails de l'examen\",\r\n \"exam.snackbar.successfulArchive\": \"L'examen sélectionné a été archivé\",\r\n \"exam.snackbar.successfulDelete\": \"L'examen sélectionné a été supprimé\",\r\n \"exam.snackbar.successfulPublish\": \"L'examen sélectionné a été publié\",\r\n \"exam.type.oral\": \"Examen oral\",\r\n \"exam.type.termPaper\": \"Travail écrit\",\r\n \"exam.type.written\": \"Examen écrit\",\r\n \"exam.validation.idNotEmpty\": \"Le nom de l'examen ne peut être videy\",\r\n \"examApplication.field.candidates\": \"candidats\",\r\n \"examApplication.field.case\": \"cas\",\r\n \"examApplication.validation.timeslotIsOverbooked\": \"Au moins un examen est surbooké. Cela peut se produire si de nouvelles applications sont ajoutées alors que des modifications sont apportées dans la vue de planification.\",\r\n \"examAssignment.validation.preparationRoomNotAllowed\": \"Un examen ne peut pas être attribué à une salle de préparation.\",\r\n \"examDay.button.assignExpertsToCorrectionExams\": \"Attribuer un expert en correction\",\r\n \"examDay.button.assignExpertsToOralExams\": \"Attribuer des experts pour les examens\",\r\n \"examDay.button.assignProctorsToOralPreparations\": \"Attribuer des surveillants à des examens oraux\",\r\n \"examDay.button.assignProctorsToWrittenExams\": \"Attribuer des surveillants à des examens écrits\",\r\n \"examDay.button.new\": \"Ajouter une nouvelle journée d'examen\",\r\n \"examDay.field.date\": \"Date\",\r\n \"examDay.field.header\": \"Jour de l'examen\",\r\n \"examDay.field.numberOfRoomsAssigned\": \"salles attribuées\",\r\n \"examDay.field.preparationRoom\": \"Salle de préparation\",\r\n \"examDay.field.timeSlotStructure.correction\": \"Correction\",\r\n \"examDay.field.timeSlotStructure.electiveWritten\": \"Vote par écrit\",\r\n \"examDay.field.timeSlotStructure.mandatoryWritten\": \"Obligatoire par écrit\",\r\n \"examDay.field.timeSlotStructure.oralHBB_ProcessModule\": \"Oral HBB module de procédure\",\r\n \"examDay.field.timeSlotStructure.oralIntermediary\": \"Oral médiateur\",\r\n \"examDay.field.timeSlotStructure.placeholder\": \"Créneaux horaires\",\r\n \"examDay.field.timeSlotStructure.writtenHBB_ProcessModule\": \"Écrit HBB module de procédure\",\r\n \"examDay.field.timeSlotStructure.writtenIntermediary\": \"Écrit médiateur\",\r\n \"examDay.field.timeSlotStructure\": \"Créneaux horaires\",\r\n \"examDay.field.type.correction\": \"Correction\",\r\n \"examDay.field.type.oral\": \"Oral\",\r\n \"examDay.field.type.written\": \"Écrit\",\r\n \"examDay.field.type\": \"Type\",\r\n \"examDay.validation.alreadyExistsForLocationOnSameDate\": \"Un jour d'examen avec la même date et le même lieu existe déjà.\",\r\n \"examDay.validation.examTypeUnknown\": \"Le type d'examen est inconnu. Veuillez choisir un type existant.\",\r\n \"examDay.validation.idNotEmpty\": \"L'ID du jour de l'examen ne peut pas être vide.\",\r\n \"examDay.validation.notFound\": \"Journée de l'examen non trouvée.\",\r\n \"examDay.validation.onlyOnePreparationRoomAllowed\": \"Une seule salle de préparation peut être ajoutée à la journée.\",\r\n \"examDay.validation.roomCanNotBeAssignedToSelectedExamType\": \"La salle ne peut pas être attribuée parce qu'elle ne s'applique pas au type d'examen de cette journée d'examen.\",\r\n \"examDay.validation.selectedRoomAlreadyAssigned\": \"La salle est déjà attribuée.\",\r\n \"examDay.validation.selectedRoomIsPcRoomAndCanNotBeUsed\": \"La salle est une salle informatique et ne peut pas être attribuée.\",\r\n \"examManagement.header\": \"Examens\",\r\n \"examScore.grade\": \"Classe\",\r\n \"examScore.points\": \"Points\",\r\n \"examSession.button.calculateExamResults\": \"Calculer les résultats d'examen\",\r\n \"examSession.button.exportCandidates\": \"Exporter les candidats par tranche horaire ou type d'examen\",\r\n \"examSession.button.exportOrders\": \"Exporter les commandes manquantes en XML\",\r\n \"examSession.button.importExamScoresAndGrades\": \"Importer des points et des notes\",\r\n \"examSession.button.importPev\": \"Importer le PEV\",\r\n \"examSession.button.new\": \"Ajouter une nouvelle session d'examen\",\r\n \"examSession.button.publishExamResults\": \"Publier les résultats d'examen\",\r\n \"examSession.candidateExportDialog.examDay.label\": \"Date\",\r\n \"examSession.candidateExportDialog.examDay.placeholder\": \"Sélectionner une date\",\r\n \"examSession.candidateExportDialog.timeSlot.label\": \"Créneau horaire\",\r\n \"examSession.candidateExportDialog.timeSlot.placeholder\": \"Sélectionner un créneau horaire\",\r\n \"examSession.candidateExportDialog.title\": \"Sélectionner un type d'examen ou éventuellement un créneau horaire\",\r\n \"examSession.confirmPublishResultsDialog.text\": \"Êtes-vous sûr de vouloir publier les résultats des examens de cette session ?\",\r\n \"examSession.dialog.noAvailableCourses\": \"Cet examen n'est assigné à aucun cours.\",\r\n \"examSession.dialog.selectCourseTypes\": \"Sélectionnez Types de cours\",\r\n \"examSession.field.correctionPeriod\": \"Période de correction\",\r\n \"examSession.field.date\": \"Date\",\r\n \"examSession.field.examResultDate\": \"Heure du résultat de l'examen\",\r\n \"examSession.field.examSession\": \"Période d'examen\",\r\n \"examSession.field.examSessionDate\": \"Date de la session d'examen\",\r\n \"examSession.field.freeCancellationEndDate\": \"Annulation gratuite jusqu'au\",\r\n \"examSession.field.from\": \"De\",\r\n \"examSession.field.gradingConferenceDate\": \"Date de la commission d'examen\",\r\n \"examSession.field.hidePastSessions\": \"Masquer les sessions passées\",\r\n \"examSession.field.inspectionPeriod\": \"Inspection\",\r\n \"examSession.field.inspectionSignupEndDate\": \"Date de la fin de la phase d'inscription\",\r\n \"examSession.field.published\": \"Publié\",\r\n \"examSession.field.sessionKey\": \"Clé de session\",\r\n \"examSession.field.sessionKeyDE\": \"Session d'examen DE\",\r\n \"examSession.field.sessionKeyEN\": \"Session d'examen EN\",\r\n \"examSession.field.sessionKeyFR\": \"Session d'examen FR\",\r\n \"examSession.field.sessionKeyIT\": \"Session d'examen IT\",\r\n \"examSession.field.signup\": \"Inscription\",\r\n \"examSession.field.signupDate\": \"Date d'inscription\",\r\n \"examSession.field.signupEndDate\": \"Date de la fin d'inscription\",\r\n \"examSession.field.signupStartDate\": \"Date du début de l'inscription\",\r\n \"examSession.field.surveyDeadline\": \"date limite de la demande\",\r\n \"examSession.field.to\": \"À\",\r\n \"examSession.header\": \"Sessions d'examen\",\r\n \"examSession.importPevDialog.title\": \"Télécharger le fichier contenant les données PEV\",\r\n \"examSession.invitation.allLocations\": \"tous les lieux\",\r\n \"examSession.invitation.flagged\": \"Les emails ont été envoyés pour ce lieu\",\r\n \"examSession.invitation.selectLocations\": \"Sélectionner des lieux\",\r\n \"examSession.invitation.snackbar.candidates\": \"Les invitations ont été envoyées à {count} candidats.\",\r\n \"examSession.invitation.snackbar.experts\": \"Les invitations ont été envoyées à {count} experts.\",\r\n \"examSession.invitation\": \"Inviter des experts/candidates\",\r\n \"examSession.mail.invitation\": \"envoyer l'invitation\",\r\n \"examSession.mail.notifyCandidates\": \"informer les candidats\",\r\n \"examSession.mail.survey\": \"commencer l'enquête\",\r\n \"examSession.result.NotGenerated\": \"les résultats des examens n'ont pas encore été générés\",\r\n \"examSession.select.assignNewLocation\": \"Attribuer un nouveau lieu\",\r\n \"examSession.validation.betweenFromAndTo\": \"La période d'inscription doit se situer entre les dates De et À.\",\r\n \"examSession.validation.canNotBeDeletedBecauseLocationsInside\": \"La session d'examen ne peut pas être supprimée parce qu'elle a attribué un ou plusieurs lieux.\",\r\n \"examSession.validation.canNotBeUnpublishedBecauseExistingApplication\": \"La session d’examen ne peut pas être publiée car des applications d’examen existent déjà\",\r\n \"examSession.validation.canNotReapplyForDifferentLanguage\": \"Vous ne pouvez pas vous réinscrire à la même session d'examen avec une langue différente.\",\r\n \"examSession.validation.correctionEndDateLaterThanCorrectionStartDate\": \"La date de fin de correction doit être postérieure à la date de début de correction.\",\r\n \"examSession.validation.examsEndDateLaterThanExamsStartDate\": \"La date de fin des examens doit être postérieure à la date de début des examens.\",\r\n \"examSession.validation.examSessionFull\": \"L'examen sélectionné pour cette session d'examen est malheureusement complet entre-temps. Veuillez choisir un autre module ou une autre session d'examen.\",\r\n \"examSession.validation.examsNoCourseTypes\": \"Pour certains examens écrits ou oraux, aucun type de cours n'est attribué. Veuillez attribuer au moins un type de cours.\",\r\n \"examSession.validation.examWithNotAllowedCourseTypes\": \"Certains examens n'ont pas de types de cours valides assignés. Veuillez vous assurer que toutes les affectations sont correctes ou recharger la page.\",\r\n \"examSession.validation.freeCancellationNotPossible\": \"L'annulation gratuite n'est plus disponible.\",\r\n \"examSession.validation.idNotEmpty\": \"L'ID de la session d'examen ne peut pas être vide.\",\r\n \"examSession.validation.inspectionEndDateLaterThanInspectionStartDate\": \"La date de fin de l'inspection doit être postérieure à la date de début de l'inspection. \",\r\n \"examSession.validation.locationAlreadyExists\": \"Le lieu existe déjà en session d'examen.\",\r\n \"examSession.validation.locationDoesNotExist\": \"Le lieu n'a pas été trouvé.\",\r\n \"examSession.validation.notPublishedNoSurveyPossible\": \"Le questionnaire ne peut être lancé que si la session d’examen est publiée\",\r\n \"examSession.validation.notPublishedResultsPublishingNotPossible\": \"La publication des résultats des examens n'est pas possible car la session d'examen n'est pas publiée.\",\r\n \"examSession.validation.publishedNoUpdatePossible\": \"La session d'examen est publiée et ne peut pas être mise à jour.\",\r\n \"examSession.validation.signupEndDateLaterThanSignupStartDate\": \"La date de la fin de l'inscription doit être postérieure à la date du début de l'inscription.\",\r\n \"examSession.validation.signupStartDateLaterThanOrEqualFrom\": \"La date du début de l'inscription doit être égale ou postérieure à la date de De.\",\r\n \"examSession.validation.someErrorsOccurred\": \"Certains modules présentent des erreurs\",\r\n \"examSession.validation.toLaterThanFrom\": \"La date de fin de l'examen doit être postérieure à la date de début de l'examen.\",\r\n \"examSession.validation.toLaterThanSignupEndDate\": \"La date de fin de l'examen doit être postérieure à la date de fin d'inscription.\",\r\n \"examSession.validation.toLaterThanSignupStartDate\": \"La date de fin de l'examen doit être postérieure à la date de début de l'inscription.\",\r\n \"examSession.validation.withSameNameAlreadyExists\": \"Une autre session d'examen portant le même nom existe déjà.\",\r\n \"examSession.writtenExamScoresImportDialog.title\": \"Télécharger le fichier contenant le résultat des examens écrits\",\r\n \"examSession.writtenExamScoresImportDialog.uploadSuccess\": \"succès du téléchargement. Nombre de scores mis à jour\",\r\n \"examSessionCandidate.addCandidate\": \"Ajouter un candidat\",\r\n \"examSessionCandidate.addDialog.bookingWithInvoice\": \"Réservation avec facture\",\r\n \"examSessionCandidate.addDialog.candidate\": \"Candidat\",\r\n \"examSessionCandidate.addDialog.course\": \"Cours\",\r\n \"examSessionCandidate.addDialog.module\": \"Module\",\r\n \"examSessionCandidate.addDialog.title\": \"Sélectionnez le candidat, le cours et le module\",\r\n \"examSessionCandidate.attachments\": \"Pièces jointes\",\r\n \"examSessionCandidate.averageGrade\": \"Score moyen\",\r\n \"examSessionCandidate.book\": \"Réserver\",\r\n \"examSessionCandidate.booking.error\": \"Votre sélection n'est plus disponible. Veuillez réessayer.\",\r\n \"examSessionCandidate.bookingDialog.selectDate\": \"Sélectionner une date\",\r\n \"examSessionCandidate.bookingDialog.selectLanguage\": \"Sélectionner une langue\",\r\n \"examSessionCandidate.bookingDialog.selectLocation\": \"Sélectionner un lieu\",\r\n \"examSessionCandidate.bookingDialog.title\": \"Lieu et date d’examen\",\r\n \"examSessionCandidate.cancel\": \"Annuler\",\r\n \"examSessionCandidate.cancelModuleMessage\": \"Êtes-vous sûr d'annuler ce module?\",\r\n \"examSessionCandidate.cancelModuleRefundInformation\": \"Si dans la période d'annulation gratuite, le module sera remboursé, sinon une tâche d'annulation sera créée.\",\r\n \"examSessionCandidate.certification\": \"Date de certification\",\r\n \"examSessionCandidate.exam\": \"Examen\",\r\n \"examSessionCandidate.examDate\": \"Date d’examen\",\r\n \"examSessionCandidate.examType\": \"Type d’examen\",\r\n \"examSessionCandidate.isRepeater\": \"Répétiteur\",\r\n \"examSessionCandidate.locationAndDateEdit\": \"Modifier le lieu et la date d'examen\",\r\n \"examSessionCandidate.module\": \"Module\",\r\n \"examSessionCandidate.option\": \"Option\",\r\n \"examSessionCandidate.paymentState\": \"Statut de paiement\",\r\n \"examSessionCandidate.publishResultsToEmployer\": \"Transmettre le résultat de l'examen\",\r\n \"examSessionCandidate.rebook\": \"Réserver de nouveau\",\r\n \"examSessionCandidate.resetManualState\": \"Définir le statut automatiquement\",\r\n \"examSessionCandidate.setManualState\": \"Définir le statut manuellement\",\r\n \"examSessionCandidate.state\": \"Statut\",\r\n \"examSessionCandidate.validation.examAlreadyBookedForAnotherModule\": \"L'examen est déjà réservé pour un autre module.\",\r\n \"examSessionCandidate.validation.examNotFound\": \"L'examen n'a pas été trouvé.\",\r\n \"examSessionCandidate.validation.idNotEmpty\": \"L'ExamSessionCandidate ID ne doit pas être vide.\",\r\n \"examSessionCandidate.validation.invalidGrade\": \"La note n'est pas valable.\",\r\n \"examSessionCandidate.validation.invalidScore\": \"Le résultat est invalide.\",\r\n \"examSessionCandidate.verificationRequired\": \"Vérification requise\",\r\n \"examSessionCandidateExamState.booked\": \"Réservé\",\r\n \"examSessionCandidateExamState.cancelled\": \"Annulé\",\r\n \"examSessionCandidateExamState.equivalence\": \"Équivalence\",\r\n \"examSessionCandidateExamState.failed\": \"Examen non réussi\",\r\n \"examSessionCandidateExamState.passed\": \"Examen réussi\",\r\n \"examSessionCandidateModuleState.applicationAccepted\": \"Demande acceptée\",\r\n \"examSessionCandidateModuleState.cancelled\": \"Annulé\",\r\n \"examSessionCandidateModuleState.Cancelled\": \"Module annulé. Une tâche système a été créée\",\r\n \"examSessionCandidateModuleState.equivalence\": \"Équivalence\",\r\n \"examSessionCandidateModuleState.expired\": \"Expiré\",\r\n \"examSessionCandidateModuleState.failed\": \"Module non réussi\",\r\n \"examSessionCandidateModuleState.passed\": \"Module réussi\",\r\n \"examSessionCandidateModuleState.Refunded\": \"Module remboursé\",\r\n \"examSessionCandidateModuleState.verificationRequired\": \"Vérification requise\",\r\n \"examSessions.noInfo\": \"pas de session d'examen\",\r\n \"examState.booked\": \"Réservé\",\r\n \"examState.cancelled\": \"Annulé\",\r\n \"examState.none\": \"---\",\r\n \"expert.button.new\": \"ajouter de nouveaux experts\",\r\n \"expert.field.courseType.placeholder\": \"Sélectionner les types de cours pour le rôle\",\r\n \"expert.field.exam.placeholder\": \"Sélectionner les examens pour le rôle\",\r\n \"expert.field.exam\": \"Examen FR\",\r\n \"expert.field.languages\": \"Langues\",\r\n \"expert.field.role.add\": \"Ajouter un nouveau rôle\",\r\n \"expert.field.role.Aufsichtsexperten\": \"Surveillant-expert\",\r\n \"expert.field.role.delete\": \"Supprimer le rôle\",\r\n \"expert.field.role.EinspracheKomission\": \"Commission des recours\",\r\n \"expert.field.role.Expertenschulung\": \"Seminaire des experts\",\r\n \"expert.field.role.Hauptexperten\": \"Experts principaux\",\r\n \"expert.field.role.Leiterprüfungszentrum\": \"Responsable du centre d'examen\",\r\n \"expert.field.role.placeholder\": \"Sélectionner de nouveaux rôles\",\r\n \"expert.field.role.Prüfungsexperten\": \"Experts d'examen\",\r\n \"expert.field.role.Prüfungskomission\": \"Commission d’examen\",\r\n \"expert.field.role.QSK\": \"Commission de la garantie de la qualité\",\r\n \"expert.field.role\": \"Rôles\",\r\n \"expert.header\": \"Experts\",\r\n \"expert.snackbar.successfulCreate\": \"L’expert a été ajouté\",\r\n \"expert.snackbar.successfulDelete\": \"L’expert selectionné a été supprimé\",\r\n \"expert.snackbar.successfulUpdate\": \"Les modifications ont été sauvegardées\",\r\n \"expert.validation.idNotEmpty\": \"L’ID de l’expert ne doit pas être vide\",\r\n \"expertAssignment.validation.examNotAssignedToRoom\": \"Examen sans attribution de salle\",\r\n \"expertAssignment.validation.expertAssignedToMultipleRoomsOnSameDay\": \"L'Expert est affecté dans différentes salles le même jour\",\r\n \"expertAssignment.validation.expertNotRequiredRole\": \"L'expert n'a pas le rôle requis\",\r\n \"expertAssignment.validation.expertNotSpeakingAnySupportedLanguage\": \"L'expert ne parle aucune des langues requises\",\r\n \"expertAssignment.validation.roomNotAssignedToExamDay\": \"La salle n'est pas affectée le jour de l'examen\",\r\n \"expertAvailability.header\": \"Disponibilité\",\r\n \"expertAvailability.noDatesAvailable\": \"il n’y a pas de dates disponibles pour le moment\",\r\n \"expertCorrectionAvailability.header\": \"Disponibilité pour la correction de l'examen\",\r\n \"file.name\": \"Nom du fichier\",\r\n \"home.candidate\": \"Point de vue du candidat\",\r\n \"home.expert\": \"Point de vue d'expert\",\r\n \"home.header\": \"page d’accueil\",\r\n \"home.me.edit\": \"Gérer le compte\",\r\n \"home.me\": \"Mes réglages\",\r\n \"home.myAlertFields.link\": \"Veuillez gérer votre compte.\",\r\n \"home.myAlertFields\": \"Certaines informations obligatoires sont nécessaires.\",\r\n \"home.myCertifications\": \"Mes certifications\",\r\n \"home.myCourses.downloadCertificate\": \"Certificat\",\r\n \"home.myCourses.downloadPerformanceRecord\": \"Preuve de performance\",\r\n \"home.myCourses.table.ClosingDate\": \"Date de clôture\",\r\n \"home.myCourses.table.downloads\": \"Téléchargements\",\r\n \"home.myCourses\": \"Mes Cours\",\r\n \"home.myExamCases\": \"Mon cas d'examen\",\r\n \"home.myExamResults\": \"Mes résultats d'examen\",\r\n \"home.myExams.newApplication\": \"Inscription à l'examen\",\r\n \"home.myExams.noExams\": \"Aucun examen disponible\",\r\n \"home.myExams.table.actionsColumn\": \"Actions\",\r\n \"home.myExams.table.dateColumn\": \"Date\",\r\n \"home.myExams.table.examColumn\": \"Examen\",\r\n \"home.myExams.table.examTypeColumn\": \"Type d'examen\",\r\n \"home.myExams.table.gradeColumn\": \"Classe\",\r\n \"home.myExams.table.locationColumn\": \"Location\",\r\n \"home.myExams.table.moduleColumn\": \"Module\",\r\n \"home.myExams.table.roomColumn\": \"Salle\",\r\n \"home.myExams.table.statusColumn\": \"Statut\",\r\n \"home.myExams.table.timeColumn\": \"Heure\",\r\n \"home.myExams\": \"Mes examens\",\r\n \"home.myExamSessions\": \"Ma session d'examen\",\r\n \"home.myFiles\": \"Mesdevoirs\",\r\n \"home.myTasks\": \"Mes devoirs\",\r\n \"home.pendingItemsInCartMessage\": \"Vous n'avez pas encore payé les modules. Souhaitez-vous maintenant poursuivre la réservation ? Veuillez noter que la place dans un module n'est pas réservée tant que vous n'avez pas payé.\",\r\n \"home.switch.candidate\": \"Passer à la vue candidat\",\r\n \"home.switch.expert\": \"Passer en vue expert\",\r\n \"import.pev.bookingFailed\": \"Il n'est pas possible d'inscrire tous les candidats.\",\r\n \"import.pev.failedImportCandidates\": \"Échec de l'importation des candidats.\",\r\n \"import.pev.failedImportScoresAndGrades\": \"Échec de l'importation des résultats et des notes.\",\r\n \"import.pev.invalidCsv\": \"Fichier CSV non valide.\",\r\n \"import.pev.missingEntities\": \"Certaines entités n'ont pas été trouvées. ID des candidats : {candidateIds}. Sessions d'examen IDs : {examSessionsIds}. Cours IDs : {courseIds}. Modules IDs : {moduleIds}. Examens IDs : {examIds}.\",\r\n \"import.pev.noExam\": \"Impossible de trouver l'examen. ID de l'examen : {examId}.\",\r\n \"import.pev.noExamDayForExam\": \"Impossible de trouver un jour d'examen disponible pour l'examen. ID de la session d'examen : {examSessionId}. ID de l'examen : {examId}. Langue : {language}.\",\r\n \"import.pev.success\": \"Les données PEV ont été importées avec succès.\",\r\n \"import.pev.wrongCourseModules\": \"Les modules ne sont pas liés au cours. ID du cours : {courseId}. Modules IDs : {moduleIds}.\",\r\n \"import.pev.wrongExamSessionExams\": \"Les examens ne sont pas liés à la session d'examen. ID de la session d'examen : {examSessionId}. ID des examens : {examIds}.\",\r\n \"import.pev.wrongModuleExams\": \"Les examens ne sont pas liés au module. ID du module : {moduleId}. Examens IDs : {examIds}.\",\r\n \"location.button.new\": \"Ajouter un nouveau lieu\",\r\n \"location.field.canton.placeholder\": \"Choisir un canton\",\r\n \"location.field.canton\": \"Canton\",\r\n \"location.field.city\": \"Ville\",\r\n \"location.field.contactEmailAddress\": \"Email de contact\",\r\n \"location.field.contactName\": \"Nom du contact\",\r\n \"location.field.contactPhoneNo\": \"Téléphone du contact\",\r\n \"location.field.languageRegions\": \"Régions linguistiques\",\r\n \"location.field.linkToMap\": \"Plan de situation\",\r\n \"location.field.name\": \"Nom\",\r\n \"location.field.street\": \"Rue\",\r\n \"location.field.zipCode\": \"Code Postal\",\r\n \"location.header\": \"Emplacements\",\r\n \"location.validation.idNotEmpty\": \"L'ID d'emplacement ne peut pas être vide\",\r\n \"location.validation.languageUnknown\": \"La langue est inconnue. Veuillez choisir une langue existante\",\r\n \"location.validation.nameAlreadyExists\": \"Un autre emplacement portant le même nom existe déjà.\",\r\n \"location\": \"Lieu\",\r\n \"login.button.adminLogin\": \"Login VBV-Admin\",\r\n \"login.button.impressum\": \"Impressum\",\r\n \"login.button.impressumLink\": \"https://www.vbv.ch/fr/impressum\",\r\n \"login.button.login\": \"Login\",\r\n \"login.error.errorLoadingAppRegistration\": \"Erreur lors de la récupération de la configuration.\",\r\n \"login.text.external1\": \"Connectez-vous pour accéder à l'application.\",\r\n \"login.text.external2\": \"Veuillez utiliser un navigateur moderne tel que Chrome ou Edge. Cette plateforme fonctionne exclusivement avec un ordinateur portable ou de bureau. Elle ne fonctionne pas avec une tablette ou un téléphone mobile.\",\r\n \"login.text.externalWarn\": \"Important\",\r\n \"login.title.external\": \"Inscription en tant que candidat/expert\",\r\n \"module.button.new\": \"Ajouter un nouveau module\",\r\n \"module.dialog.confirmPublishDescription\": \"Êtes-vous sûr de vouloir publier ce module?\",\r\n \"module.dialog.noAvailableExams\": \"Aucun examen disponible.\",\r\n \"module.dialog.noAvailableLocations\": \"Aucun lieu n'est disponible.\",\r\n \"module.dialog.selectExams\": \"Sélection d'examens\",\r\n \"module.dialog.selectLocations\": \"Sélectionner les lieux\",\r\n \"module.field.abacusNumber\": \"Nombre Abacus\",\r\n \"module.field.allowDocumentUpload\": \"Autoriser le téléchargement de documents\",\r\n \"module.field.allowOptions\": \"Autoriser les options\",\r\n \"module.field.allowRegistrationOnlyOnce\": \"Disponible une fois\",\r\n \"module.field.allRoomsAssigned\": \"Pièce assignée\",\r\n \"module.field.certificateValidity.FiveYears\": \"5 ans\",\r\n \"module.field.certificateValidity.OneYear\": \"1 an\",\r\n \"module.field.certificateValidity.Unlimited\": \"Illimité\",\r\n \"module.field.certificateValidity\": \"Validité de la certification\",\r\n \"module.field.documentsUploaded\": \"Documents téléchargés\",\r\n \"module.field.gradingRules.allExams\": \"Tous les examens doivent être réussis\",\r\n \"module.field.gradingRules.averageGrade\": \"Score moyen\",\r\n \"module.field.gradingRules\": \"Règles de notation\",\r\n \"module.field.moduleId\": \"ID du module\",\r\n \"module.field.moduleName\": \"Nom du module\",\r\n \"module.field.moduleNameDE\": \"Nom du module DE\",\r\n \"module.field.moduleNameEN\": \"Nom du module EN\",\r\n \"module.field.moduleNameFR\": \"Nom du module FR\",\r\n \"module.field.moduleNameIT\": \"Nom du module IT\",\r\n \"module.field.moduleType.mandatory\": \"Obligatoire\",\r\n \"module.field.moduleType.optionalModule\": \"Module au choix\",\r\n \"module.field.moduleType.processModule\": \"Module de processus\",\r\n \"module.field.moduleType\": \"Type de module\",\r\n \"module.field.needsApproval\": \"Doit être approuvé\",\r\n \"module.field.paymentState\": \"Statut de paiement\",\r\n \"module.field.price\": \"Prix en CHF\",\r\n \"module.field.verificationRequired\": \"Vérification requise\",\r\n \"module.header\": \"Modules\",\r\n \"module.moduleDetails\": \"Détails du module\",\r\n \"module.section.specifics\": \"Spécifique au module\",\r\n \"module.snackbar.successfulArchive\": \"Le module a été archivé avec succès.\",\r\n \"module.snackbar.successfulDelete\": \"Le module a été supprimé avec succès.\",\r\n \"module.snackbar.successfulPublish\": \"Le module a été publié avec succès.\",\r\n \"module.validation.gradingRule.invalidValue\": \"La règle de notation est invalide.\",\r\n \"module.validation.idNotEmpty\": \"L'ID du module ne peut pas être vide.\",\r\n \"module.validation.invalidStatusTransition\": \"La transition de statut est invalide.\",\r\n \"module.validation.invalidStatusValue\": \"La valeur du statut est incorrecte.\",\r\n \"module.validation.statusNotEmpty\": \"Le statut ne doit pas être vide.\",\r\n \"oralExamOption.kmu\": \"Petites entreprises\",\r\n \"oralExamOption.none\": \"Aucune\",\r\n \"oralExamOption.privathaushalte\": \"Ménage privé\",\r\n \"paymentMethodSelector.form.button\": \"Payer par facture\",\r\n \"paymentMethodSelector.item.creditCard\": \"Carte de crédit / Twint\",\r\n \"paymentMethodSelector.item.invoice\": \"Facture\",\r\n \"paymentMethodSelector.item.invoiceMessage\": \"Adresse privée (CH)\",\r\n \"paymentMethodSelector.title\": \"Choisir le mode de paiement\",\r\n \"paymentStatus.paid.abacus\": \"Facturé (Abacus)\",\r\n \"paymentStatus.paid.ePayment\": \"Payé (E-Payment)\",\r\n \"paymentStatus.refunded.abacus\": \"Remboursé (Abacus)\",\r\n \"paymentStatus.refunded.ePayment\": \"Remboursé (E-Payment)\",\r\n \"person.field.activateSpecificProfile\": \"Activer le profil d'expert\",\r\n \"person.field.ahvNumber\": \"Numéro AVS\",\r\n \"person.field.bankAccount\": \"Compte bancaire\",\r\n \"person.field.birthDate\": \"Date de naissance\",\r\n \"person.field.ciceroNumber\": \"Numéro Cicero\",\r\n \"person.field.city\": \"Lieu de résidence\",\r\n \"person.field.country\": \"Pays\",\r\n \"person.field.displayName\": \"Nom\",\r\n \"person.field.email\": \"Email\",\r\n \"person.field.employer\": \"Employeur\",\r\n \"person.field.employerCity\": \"Ville de l'employeur\",\r\n \"person.field.employerCountry\": \"Sélectionner le Pays de l'employeur\",\r\n \"person.field.employerStreet\": \"Rue de l'employeur\",\r\n \"person.field.employerStreetNumber\": \"Numéro de rue de l'employeur\",\r\n \"person.field.employerZipCode\": \"Code postal de l'employeur\",\r\n \"person.field.firstName\": \"Prénom\",\r\n \"person.field.gender.placeholder\": \"Choisir un genre\",\r\n \"person.field.gender\": \"genre\",\r\n \"person.field.homeCountry\": \"Pays d'origine\",\r\n \"person.field.icon\": \"Symbole de l'acteur\",\r\n \"person.field.internalComment\": \"Commentaire interne\",\r\n \"person.field.lastName\": \"Nom de famille\",\r\n \"person.field.mobileNumber\": \"Numéro de mobile\",\r\n \"person.field.phoneNumber.placeholder\": \"Format: +41123456789\",\r\n \"person.field.phoneNumber\": \"Numéro de téléphone\",\r\n \"person.field.showOnlyExperts\": \"N'afficher que les experts\",\r\n \"person.field.street\": \"Rue\",\r\n \"person.field.streetNumber\": \"Numéro\",\r\n \"person.field.zipCode\": \"Code postal du lieu de résidence\",\r\n \"person.section.address\": \"Adresse privée\",\r\n \"person.section.businessData\": \"Informations professionnelles\",\r\n \"person.section.expertDetails\": \"Détails spécifiques à l'expert\",\r\n \"person.section.personalDetails\": \"Détails personnels\",\r\n \"person.validation.ahvNumberAlreadyExists\": \"Un autre utilisateur avec le même numéro AVS existe déjà\",\r\n \"person.validation.ahvNumberNotValid\": \"Le numéro AVS n'est pas valable\",\r\n \"person.validation.bankAccountNotEmpty\": \"Le compte en banque ne peut pas être vide\",\r\n \"person.validation.ciceroNumberAlreadyExists\": \"Un autre utilisateur avec le même numéro Cicero existe déjà\",\r\n \"person.validation.ciceroNumberNotValid\": \"Le numéro Cicero n'est pas valable\",\r\n \"person.validation.confirmEmailChange\": \"L'adresse email a été modifiée. Cela changera également le nom d'utilisateur de connexion. Êtes-vous sûr de vouloir continuer ?\",\r\n \"person.validation.emailAlreadyExists\": \"Un autre utilisateur avec le même email existe déjà\",\r\n \"person.validation.genderUnknown\": \"Le genre est inconnu. Veuillez choisir un genre existant\",\r\n \"person.validation.invalidEmployerZipCode\": \"Le code postal de l'employeur est invalide.\",\r\n \"person.validation.invalidZipCode\": \"Le code postal du lieu de résidence est invalide.\",\r\n \"person.validation.mandatoryExamRolesWithNoExams\": \"Il y a des rôles d'examen obligatoires qui n'ont pas d'examens assignés. Veuillez attribuer les examens manquants.\",\r\n \"person.validation.personEdiIdNotEmpty\": \"L'EDI Id ne peut pas être vide\",\r\n \"person.validation.personEmailAddressNotEmpty\": \"l'adresse e-mail ne peut pas être vide\",\r\n \"person.validation.repeatedRoles\": \"Les rôles sont répétés. Veuillez vous assurer qu'il n'y a pas de rôles répétés.\",\r\n \"person.validation.typeUnknown\": \"Le type de personne est inconnu. Veuillez choisir un type existant.\",\r\n \"role.validation.roleUnknown\": \"rôle inconnu\",\r\n \"room.button.new\": \"Nouvelle attribution de salle\",\r\n \"room.field.floor\": \"Emplacement\",\r\n \"room.field.isPcRoom\": \"Salle informatique\",\r\n \"room.field.name\": \"Nom\",\r\n \"room.field.numberOfSeats\": \"Capacité\",\r\n \"room.header\": \"Salle\",\r\n \"room.text.seats\": \"sièges\",\r\n \"room.validation.idNotEmpty\": \"L'ID de la salle ne peut pas être vide.\",\r\n \"room.validation.nameAlreadyExists\": \"Une autre salle portant le même nom existe déjà.\",\r\n \"roomAssignment.button.new\": \"Attribuer une salle\",\r\n \"roomAssignment.deleteConfirmation.title\": \"Vous êtes sur le point de retirer une salle de préparation. Veuillez vous assurer qu'il y a une salle de préparation affectée à cette date d'examen.\",\r\n \"roomAssignment.field.isPreparationRoom\": \"Salle de préparation\",\r\n \"roomAssignment.field.room.placeholder\": \"Choisir une salle\",\r\n \"roomAssignment.field.room\": \"Salle\",\r\n \"roomAssignment.header\": \"Attribution des salles\",\r\n \"roomAssignment.validation.idNotEmpty\": \"L'affectation de la chambre ne peut pas être vide\",\r\n \"scheduler.examSelectDialog.title\": \"Sélectionnez l'examen pour la salle\",\r\n \"scheduler.examSelectDialog.tooltip\": \"Fixer l'examen pour tous les créneaux horaires\",\r\n \"scheduler.message.briefing\": \"Briefing des experts\",\r\n \"scheduler.message.exam\": \"Examen\",\r\n \"scheduler.message.noExperts\": \"pas d'expert assigné\",\r\n \"scheduler.message.pause\": \"Pause\",\r\n \"scheduler.timeSlot.arrivalTime\": \"Heure d'arrivée\",\r\n \"selfcancellation.header\": \"Annuler le module\",\r\n \"selfcancellation.text\": \"Attention : Veuillez confirmer que vous souhaitez annuler votre inscription à l'examen.\",\r\n \"startCertification.button.back\": \"retour\",\r\n \"startCertification.button.finish\": \"terminé\",\r\n \"startCertification.button.next\": \"Suivant\",\r\n \"startCertification.courseModuleExamsStep.header\": \"Choisir le cours, le module et les examens\",\r\n \"startCertification.examDataStep.header\": \"Sélectionner le type d’examen, la salle et la date\",\r\n \"startCertification.examDataStep.selectCompany\": \"Sélectionner votre entreprise\",\r\n \"startCertification.examDataStep.selectExamSession\": \"Sélectionner une session d'examen\",\r\n \"startCertification.examDataStep.selectFachrichtung\": \"Sélectionner l’option\",\r\n \"startCertification.examDataStep.selectLocationOralPart\": \"Sélectionner un lieu pour la partie orale de votre examen\",\r\n \"startCertification.examDataStep.selectLocationWrittenPart\": \"Sélectionner un lieu pour votre examen écrit\",\r\n \"startCertification.examDataStep.selectOralExamDate\": \"Sélectionner une date pour l’examen oral\",\r\n \"startCertification.examDataStep.selectWrittenExamDate\": \"Sélectionner une date pour l’examen écrit\",\r\n \"startCertification.locationDateStep.header\": \"Choisir le lieu et la date de l'examen\",\r\n \"startCertification.modulesDetailsStep.dialogHelperText\": \"Veuillez compléter les informations manquantes et télécharger les documents requis si nécessaire.\",\r\n \"startCertification.modulesDetailsStep.docsText1\": \"Veuillez télécharger tous les documents requis pour ce module.\",\r\n \"startCertification.modulesDetailsStep.docsText2\": \"Si vous n'êtes pas en mesure de télécharger les documents pour le moment, veuillez l'indiquer ci-dessous. Nous vous attribuerons une tâche appropriée.\",\r\n \"startCertification.modulesDetailsStep.fillDetails\": \"Compléter les détails\",\r\n \"startCertification.modulesDetailsStep.header\": \"Fournir des informations et des documents\",\r\n \"startCertification.modulesDetailsStep.helperText\": \"Veuillez compléter les informations manquantes et télécharger les documents requis pour les modules sélectionnés.\",\r\n \"startCertification.modulesDetailsStep.isRepeater\": \"Je suis répétiteur\",\r\n \"startCertification.modulesDetailsStep.option.kmu\": \"PME\",\r\n \"startCertification.modulesDetailsStep.option.privathaushalte\": \"Privé\",\r\n \"startCertification.modulesDetailsStep.option\": \"Option\",\r\n \"startCertification.modulesDetailsStep.tableTitle\": \"Modules sélectionnés\",\r\n \"startCertification.modulesDetailsStep.trainingProvider\": \"Fournisseur de formation\",\r\n \"startCertification.modulesDetailsStep.willUploadDocsLater\": \"Télécharger les documents plus tard\",\r\n \"startCertification.moduleSelectionStep.header\": \"Choisir le cours, le module et les examens\",\r\n \"startCertification.moduleSelectionStep.helperText\": \"Veuillez sélectionner un cours et une session d'examen pour choisir les modules et les examens auxquels vous souhaitez vous inscrire.\",\r\n \"startCertification.moduleSelectionStep.priceColumn\": \"Prix en CHF\",\r\n \"startCertification.moduleSelectionStep.removeButton\": \"Retirer\",\r\n \"startCertification.moduleSelectionStep.selectButton\": \"Sélectionner\",\r\n \"startCertification.moduleSelectionStep.selectedModules\": \"Vos modules sélectionnés\",\r\n \"startCertification.paymentAndCompletionStep.actionColumn\": \"Action\",\r\n \"startCertification.paymentAndCompletionStep.button.confirm\": \"Réserver maintenant de manière ferme\",\r\n \"startCertification.paymentAndCompletionStep.button.confirmed\": \"Confirmé\",\r\n \"startCertification.paymentAndCompletionStep.button.paid\": \"Payé\",\r\n \"startCertification.paymentAndCompletionStep.button.pay\": \"Payer\",\r\n \"startCertification.paymentAndCompletionStep.freeCancelDate\": \"annulation gratuite jusqu'au \",\r\n \"startCertification.paymentAndCompletionStep.generalInfo.cost1\": \"Passé ce délai, \",\r\n \"startCertification.paymentAndCompletionStep.generalInfo.cost2bold\": \"la totalité des frais d’examen est due\",\r\n \"startCertification.paymentAndCompletionStep.generalInfo.cost3\": \" en cas de désinscription non justifiée.\",\r\n \"startCertification.paymentAndCompletionStep.generalInfo.freeCancellation\": \"L'inscription est obligatoire. Vous pouvez vous désinscrire sans frais jusqu'aux dates indiquées ci-dessus.\",\r\n \"startCertification.paymentAndCompletionStep.generalInfo.hveFAQLink\": \"https://www.vbv.ch/fileadmin/vbv/Dokumente/Bildungsabschluesse/Versicherungsfach/72047_PO_Versicherungsfachleut_F_2022__1_.pdf\",\r\n \"startCertification.paymentAndCompletionStep.generalInfo.hveFAQLinkText\": \"FAQ brevet fédéral\",\r\n \"startCertification.paymentAndCompletionStep.generalInfo.intermediaryFAQLink\": \"https://www.vbv.ch/fileadmin/vbv/Dokumente/Bildungsabschluesse/Versicherungsvermittlung/FAQ_Vermi_Pruefungen_fr.pdf\",\r\n \"startCertification.paymentAndCompletionStep.generalInfo.intermediaryFAQLinkText\": \"FAQ intermédiaire d’assurance\",\r\n \"startCertification.paymentAndCompletionStep.generalInfo.moreInformation1\": \"Vous trouverez de plus amples informations dans la \",\r\n \"startCertification.paymentAndCompletionStep.generalInfo.moreInformation2\": \".\",\r\n \"startCertification.paymentAndCompletionStep.header\": \"Paiement et conclusion\",\r\n \"startCertification.paymentAndCompletionStep.hint\": \"Veuillez noter que votre place dans un module n'est pas réservée jusqu'au paiement.\",\r\n \"startCertification.paymentAndCompletionStep.messages.transactionCancelled\": \"Transaction {id} annulée\",\r\n \"startCertification.paymentAndCompletionStep.messages.transactionConfirmed\": \"La transaction {id} a été confirmée\",\r\n \"startCertification.paymentAndCompletionStep.messages.transactionFailed\": \"Échec de la transaction {id}\",\r\n \"startCertification.paymentAndCompletionStep.messages.transactionPaid\": \"La transaction {id} a été payée\",\r\n \"startCertification.paymentAndCompletionStep.messages.wrongTransactionId\": \"ID de transaction invalide {id}\",\r\n \"startCertification.paymentAndCompletionStep.paymentConfirmationMessagePart1\": \"Cela peut prendre jusqu'à une minute. Ce message sera automatiquement fermé lorsque le paiement aura été confirmé.\",\r\n \"startCertification.paymentAndCompletionStep.paymentConfirmationMessagePart2\": \"Sinon, veuillez contacter VBV avec l'ID de transaction : {datatransTrxId}\",\r\n \"startCertification.paymentAndCompletionStep.paymentConfirmationTitle\": \"En attente de la confirmation de paiement, veuillez patienter\",\r\n \"startCertification.paymentAndCompletionStep.removeModule\": \"Supprimer le module\",\r\n \"startCertification.paymentAndCompletionStep.removeModuleConfirmation\": \"Voulez-vous supprimer le module?\",\r\n \"startCertification.paymentAndCompletionStep.summary\": \"Résumé\",\r\n \"startCertification.personalDataStep.header\": \"Vérifiez vos données\",\r\n \"startCertification.policyDialog.accept.link\": \"la politique de confidentialité/CGV\",\r\n \"startCertification.policyDialog.accept.linkUrl\": \"https://www.vbv.ch/fr/politique-de-confidentialite\",\r\n \"startCertification.policyDialog.accept\": \"J'accepte par la présente \",\r\n \"startCertification.policyDialog.text1\": \"Par la présente, je prends connaissance et j'accepte que les informations suivantes soient communiquées à mon employeur : inscription à une session d'examen, y compris la date de la session, les résultats de l'examen, y compris les notes/points et si l'examen a été réussi ou non, inscription au registre Cicero \",\r\n \"startCertification.policyDialog.text2\": \"Le présent consentement peut être révoqué à tout moment et librement vis-à-vis de l'Association pour la formation professionnelle en assurance AFA par lettre ou e-mail à vermittler@vbv-afa.ch.\",\r\n \"startCertification.uploadFilesStep.header\": \"télécharger les fichiers pour vérification\",\r\n \"table.noRecords\": \"aucun enregistrement trouvé\",\r\n \"task.creationDate\": \"Date de création\",\r\n \"task.deadline\": \"date limite\",\r\n \"task.noInfo\": \"pas de tâches en attente\",\r\n \"task.state\": \"Statut\",\r\n \"task.type\": \"Type\",\r\n \"task.validation.deadlineMustBeLaterThanToday\": \"Le délai doit être postérieur à aujourd’hui\",\r\n \"task.validation.typeUnknown\": \"Type des tâches inconnu\",\r\n \"taskState.done\": \"effectué\",\r\n \"taskState.inProgress\": \"en cours\",\r\n \"taskState.toDo\": \"à faire\",\r\n \"taskType.cancellation\": \"Annulation\",\r\n \"taskType.checkAvailability\": \"contrôler la disponibilité\",\r\n \"taskType.checkCorrectionAvailability\": \"Entrez la disponibilité pour la correction de l'examen\",\r\n \"taskType.none\": \"aucun\",\r\n \"taskType.uploadDocuments\": \"Téléchargement de documents\",\r\n \"uploadDocumentsTask.header\": \"Tâche de téléchargement de documents\",\r\n \"uploadDocumentsTask.instructions\": \"Veuillez télécharger tous les documents requis pour ce module et compléter la tâche lorsque terminé.\",\r\n \"user.noInfo\": \"aucune information sur l’utilisateur\",\r\n \"user.settings\": \"Paramètre\",\r\n \"userRoomAssignment.assignment\": \"Attribution\",\r\n \"userRoomAssignment.label.allExpertsSwitch\": \"Afficher tous les experts\",\r\n \"userRoomAssignment.label.fixed\": \"Fixes\",\r\n \"userRoomAssignment.label.fixedCorrectionExperts\": \"Experts corrections fixés\",\r\n \"userRoomAssignment.label.fixedExperts\": \"Experts fixes(2x)\",\r\n \"userRoomAssignment.label.fixedProctors\": \"Surveillants fixes (2x)\",\r\n \"userRoomAssignment.label.reserve\": \"En réserve\",\r\n \"userRoomAssignment.label.reserveCorrectionExperts\": \"Experts en correction en réserve\",\r\n \"userRoomAssignment.label.reserveExperts\": \"Experts en réserve\",\r\n \"userRoomAssignment.label.reserveProctors\": \"Suveillants en réserve \",\r\n \"userRoomAssignment.label.roomFull\": \"La salle est complète\",\r\n \"userRoomAssignment.label.roomOverload\": \"La salle est surchargée\",\r\n \"userRoomAssignment.placeholder.selectFixedExperts\": \"Sélectionner des experts fixes\",\r\n \"userRoomAssignment.placeholder.selectFixedProctors\": \"Sélectionner des surveillants fixes\",\r\n \"userRoomAssignment.placeholder.selectReserveExperts\": \"Sélectionner des experts en réserve\",\r\n \"userRoomAssignment.placeholder.selectReserveProctors\": \"Sélectionner des surveillants en réserve\",\r\n};\r\n","import { TranslationKeys } from \"./TranslationKey\";\r\n\r\nexport const it: TranslationKeys = {\r\n \"application.examLocationAndDate.dateColumn\": \"Date\",\r\n \"application.examLocationAndDate.examColumn\": \"Esame\",\r\n \"application.examLocationAndDate.examFull\": \"Non ci sono più posti disponibili per questo esame nella sessione selezionata. Per favore torna indietro e cambia la tua selezione.\",\r\n \"application.examLocationAndDate.examTypeColumn\": \"Tipo di esame\",\r\n \"application.examLocationAndDate.locationColumn\": \"Luogo\",\r\n \"application.examLocationAndDate.moduleColumn\": \"Modulo\",\r\n \"application.examLocationAndDate.statusColumn\": \"Stato\",\r\n \"application.examLocationAndDate.validattion.examsHaveDifferentLocations\": \"Non è possibile prenotare esami in luoghi diversi nello stesso giorno. Si prega di regolare la selezione.\",\r\n \"application.examLocationAndDateExplanationText\": \"Si prega di selezionare luogo e data per gli esami selezionati.\",\r\n \"application.moduleSelector.examsColumn\": \"Esami\",\r\n \"application.moduleSelector.noAvaiableModules\": \"Nessun modulo disponibile\",\r\n \"application.moduleSelector.typeColumn\": \"Tipo\",\r\n \"application.selectedExamsTitle\": \"Moduli ed esami selezionati\",\r\n \"application.uploadVerificationFilesMessage\": \"Se possiede un file addizionale lo carichi adesso\",\r\n \"application.userSelector.course\": \"Corso\",\r\n \"application.userSelector.examSession\": \"Sessione d'esame\",\r\n \"application.userSelector.noSelectedModules\": \"Nessun modulo selezionato\",\r\n \"cancellationTaskForm.candidateRefund\": \"il candidato riceverà un rimborso\",\r\n \"cancellationTaskForm.candidateSubHeader\": \"candidato\",\r\n \"cancellationTaskForm.certificationTypeLabel\": \"tipo di certificazione\",\r\n \"cancellationTaskForm.commentsLabel\": \"commenti\",\r\n \"cancellationTaskForm.completeTask\": \"salvare e completare il compito\",\r\n \"cancellationTaskForm.createdOn\": \"creato su\",\r\n \"cancellationTaskForm.dateLabel\": \"data\",\r\n \"cancellationTaskForm.emailLabel\": \"email\",\r\n \"cancellationTaskForm.examTypeLabel\": \"tipo di esame\",\r\n \"cancellationTaskForm.firstNameLabel\": \"nome\",\r\n \"cancellationTaskForm.header\": \"Compito di cancellazione\",\r\n \"cancellationTaskForm.lastNameLabel\": \"Cognome\",\r\n \"cancellationTaskForm.locationLabel\": \"luogo\",\r\n \"cancellationTaskForm.moduleSubHeader\": \"Modulo\",\r\n \"cancellationTaskForm.navigateToCandidateSession\": \"Vai alla pagina della sessione del candidato\",\r\n \"cancellationTaskForm.orderId\": \"ID ordine\",\r\n \"cancellationTaskForm.refundApprovedBy\": \"Rimborso approvato da\",\r\n \"cancellationTaskForm.roomLabel\": \"camera\",\r\n \"cancellationTaskForm.sessionLabel\": \"sessione\",\r\n \"cancellationTaskForm.timeSlotLabel\": \"fascia oraria\",\r\n \"cancellationTaskForm.transactionId\": \"ID della transazione\",\r\n \"candidate.button.exportAll\": \"esportare tutti i candidati\",\r\n \"candidate.button.new\": \"Aggiungi nuovo candidato\",\r\n \"candidate.button.uploadEdiIds\": \"caricare Ids EDI\",\r\n \"candidate.disableConfirmationDialog.message\": \"Assicuratevi che i vostri dettagli personali siano corretti, poiché non possono essere modificati in seguito.\",\r\n \"candidate.ediIdsDialog.title\": \"Selezionare il file che contiene gli Ids EDI\",\r\n \"candidate.ediIdsDialog.uploadSuccess\": \"Carica il successo. Numero di candidati aggiornati:\",\r\n \"candidate.field.canton\": \"Cantone\",\r\n \"candidate.field.correspondenceLanguage\": \"Lingua di corrispondenza\",\r\n \"candidate.field.invoiceRecipient\": \"Destinatario della fattura\",\r\n \"candidate.field.nationality\": \"Nazionalità\",\r\n \"candidate.field.numberOfFailedOralExams\": \"Esami orali non riusciti\",\r\n \"candidate.field.numberOfFailedWrittenExams\": \"Esami scritti non riusciti\",\r\n \"candidate.field.placeOfOrigin\": \"Luogo d'origine\",\r\n \"candidate.header\": \"Candidati\",\r\n \"candidate.section.invoice\": \"Fattura\",\r\n \"candidate.snackbar.successfulCreate\": \"Candidato è stato aggiunto.\",\r\n \"candidate.snackbar.successfulDelete\": \"Cadidato scelto è stato cancellato.\",\r\n \"candidate.snackbar.successfulExport\": \"Il numero di debitore dell'abaco è stato programmato per l'esportazione\",\r\n \"candidate.snackbar.successfulUpdate\": \"La modifiche sono state salvate.\",\r\n \"candidate.validation.disabledFields\": \"I campi non possono essere aggiornati dopo la conferma\",\r\n \"candidate.validation.idNotEmpty\": \"L’ID del candidato non può essere vuota.\",\r\n \"candidateAssignment.validation.preparationRoomNotAllowed.\": \"Un candidato non può essere assegnato a una stanza di preparazione.\",\r\n \"candidateCourse.certificate.fileNamePrefix\": \"Certificato\",\r\n \"candidateCourse.performanceRecord.fileNamePrefix\": \"Record di Prestazioni\",\r\n \"candidateCourseStatus.open\": \"Aperto\",\r\n \"candidateCourseStatus.passed\": \"Superato\",\r\n \"candidateWizard.error\": \"La registrazione per la certificazione non ha funzionato.\",\r\n \"candidateWizard.success\": \"Successo! Dovreste aver ricevuto un'e-mail per ogni prenotazione e i vostri esami appariranno nella vista Candidati.\",\r\n \"canton.ag\": \"Argovia\",\r\n \"canton.ai\": \"Appenzello Interno\",\r\n \"canton.ar\": \"Appenzello Esterno\",\r\n \"canton.be\": \"Berna\",\r\n \"canton.bl\": \"Basilea Campagna\",\r\n \"canton.bs\": \"Basilea Città\",\r\n \"canton.fr\": \"Friburgo\",\r\n \"canton.ge\": \"Ginevra\",\r\n \"canton.gl\": \"Glarona\",\r\n \"canton.gr\": \"Grigioni\",\r\n \"canton.ju\": \"Giura\",\r\n \"canton.lu\": \"Lucerna\",\r\n \"canton.ne\": \"Neuchâtel\",\r\n \"canton.nw\": \"Nidvaldo\",\r\n \"canton.ow\": \"Obvaldo\",\r\n \"canton.sg\": \"San Gallo\",\r\n \"canton.sh\": \"Sciaffusa\",\r\n \"canton.so\": \"Soletta\",\r\n \"canton.sz\": \"Svitto\",\r\n \"canton.tg\": \"Turgovia\",\r\n \"canton.ti\": \"Ticino\",\r\n \"canton.ur\": \"Uri\",\r\n \"canton.vd\": \"Vaud\",\r\n \"canton.vs\": \"Vallese\",\r\n \"canton.zg\": \"Zugo\",\r\n \"canton.zh\": \"Zurigo\",\r\n \"cart.validation.candidateIdNotEmpty\": \"L'ID del candidato deve essere fissato.\",\r\n \"cart.validation.cartEmpty\": \"Il carrello è vuoto.\",\r\n \"cart.validation.examNotFound\": \"Esame non trovato.\",\r\n \"cart.validation.missingCourseId\": \"ID corso mancante\",\r\n \"cart.validation.missingExamDayIdOnExam\": \"Manca l'ID del giorno dell'esame.\",\r\n \"cart.validation.missingExamSessionId\": \"ID sessione esame mancante\",\r\n \"cart.validation.missingInformationInModule\": \"Informazioni mancanti nel modulo.\",\r\n \"cart.validation.missingModuleId\": \"ID modulo mancante\",\r\n \"cart.validation.moduleAlreadyBooked\": \"Modulo già prenotato.\",\r\n \"cart.validation.moduleAlreadyPaid\": \"Modulo già pagato.\",\r\n \"cart.validation.moduleNotFound\": \"Modulo non trovato nel carrello.\",\r\n \"certification.button.new\": \"Registrazione All'esame\",\r\n \"certification.examDate\": \"Date di esame\",\r\n \"certification.examType\": \"Tipo d’esame\",\r\n \"certification.fachrichtung\": \"Opzione caso d’esame orale\",\r\n \"certification.state\": \"Stato\",\r\n \"certifications.noInfo\": \"Nessuna certificazione é disponibile\",\r\n \"common.accept\": \"Accettare\",\r\n \"common.archive\": \"Archiviare\",\r\n \"common.attention\": \"Attenzione\",\r\n \"common.business\": \"Affare\",\r\n \"common.cancel\": \"Annulla\",\r\n \"common.certificationsGenerated\": \"Certificati generati\",\r\n \"common.close\": \"Ravvicinata\",\r\n \"common.comment\": \"Commento\",\r\n \"common.confirmArchiveDescription\": \"Vuoi davvero archiviare l'entità?\",\r\n \"common.confirmDeleteDescription\": \"Vuoi davvero cancellare l'entità?\",\r\n \"common.confirmPublishDescription\": \"Sei sicuro di voler pubblicare questa entità?\",\r\n \"common.debtorNumber\": \"Numero del debitore\",\r\n \"common.delete\": \"Eliminare\",\r\n \"common.dragAndDrop.description\": \"Trascinare e rilasciare il documento qui\",\r\n \"common.errorMessage\": \"Qualcosa è andato storto\",\r\n \"common.exam\": \"Esame\",\r\n \"common.export\": \"Esportazione\",\r\n \"common.field.status\": \"Stato\",\r\n \"common.genders.female\": \"Femminile\",\r\n \"common.genders.male\": \"Maschio\",\r\n \"common.generateCertifications.confirmation\": \"Siete sicuri di voler generare delle certificazioni?\",\r\n \"common.generateCertifications\": \"Generare certificazioni\",\r\n \"common.language.de\": \"Tedesco\",\r\n \"common.language.en\": \"Inglese\",\r\n \"common.language.fr\": \"Francese\",\r\n \"common.language.it\": \"Italiano\",\r\n \"common.language\": \"Lingua\",\r\n \"common.languages\": \"Lingue\",\r\n \"common.lastModification.by\": \"da\",\r\n \"common.lastModification.on\": \"il\",\r\n \"common.lastModification\": \"Ultima modifica\",\r\n \"common.module\": \"Modulo\",\r\n \"common.no\": \"No\",\r\n \"common.noLanguagesAssigned\": \"Nessuna lingua assegnata\",\r\n \"common.ok\": \"Ok\",\r\n \"common.pleaseSelect\": \"Si prega di scegliere\",\r\n \"common.private\": \"Privato\",\r\n \"common.publish\": \"Pubblicare\",\r\n \"common.reject\": \"Rifiuto\",\r\n \"common.rejected\": \"Respinto\",\r\n \"common.rowsPerPage\": \"Rows per page:\",\r\n \"common.save\": \"Salva\",\r\n \"common.scheduleCorrectionExams\": \"Pianificazione di correzione\",\r\n \"common.scheduleOralExams\": \"Prommagazione esami orali\",\r\n \"common.scheduleWrittenExams\": \"Programmare gli esami scritti\",\r\n \"common.search\": \"Ricerca\",\r\n \"common.selectElement\": \"Seleziona un\",\r\n \"common.selectElements\": \"Seleziona\",\r\n \"common.signOut\": \"Disdire\",\r\n \"common.status.archived\": \"Archiviato\",\r\n \"common.status.cancelled\": \"Annullato\",\r\n \"common.status.deleted\": \"Cancellato\",\r\n \"common.status.draft\": \"Bozza\",\r\n \"common.status.published\": \"Pubblicato\",\r\n \"common.survey\": \"sondaggio\",\r\n \"common.total\": \"Totale\",\r\n \"common.unexpectedError\": \"Errore inatteso. Per favore, riprova più tardi.\",\r\n \"common.Unknown\": \"Sconosciuto\",\r\n \"common.unpublish\": \"Non pubblicare \",\r\n \"common.uploadError\": \"errore di caricamento. Il formato del file non è valido.\",\r\n \"common.validation.entityWithIdNotExistsAndCanNotBeAssigned\": \"L'entità con l'ID dato non è stata trovata e non può essere assegnata.\",\r\n \"common.validation.entityWithIdNotExistsAndCanNotBeDeleted\": \"L'entità con l'ID dato non è stata trovata e non può essere cancellata.\",\r\n \"common.validation.idNotEmpty\": \"L'ID non può essere vuoto.\",\r\n \"common.validation.name.empty\": \"Il nome non può essere vuoto.\",\r\n \"common.validation.status.empty\": \"Lo stato non può essere vuoto.\",\r\n \"common.validation.status.invalidTransition\": \"Questa transizione di stato non è valida.\",\r\n \"common.validation.status.invalidValue\": \"Il valore di stato non è corretto.\",\r\n \"common.yes\": \"Sì\",\r\n \"countries.switzerland.name\": \"Svizzera\",\r\n \"course.button.addModules\": \"Aggiungere i moduli\",\r\n \"course.dialog.confirmPublishDescription\": \"Sei sicuro di voler pubblicare questo corso?\",\r\n \"course.dialog.noAvailableModules\": \"Nessun modulo disponibile.\",\r\n \"course.dialog.selectModules\": \"Selezione di moduli\",\r\n \"course.field.certificateValidity.FiveYears\": \"5 anni\",\r\n \"course.field.certificateValidity.Unlimited\": \"Illimitato\",\r\n \"course.field.certificateValidity\": \"Validità della certificazione\",\r\n \"course.field.moduleRelevantForGrade\": \"Rilevante per il voto del corso\",\r\n \"course.field.modulesValidity.days\": \"giorni\",\r\n \"course.field.modulesValidity.unlimited\": \"Illimitata\",\r\n \"course.field.modulesValidity\": \"Validità dei moduli\",\r\n \"course.field.name\": \"Nome del corso\",\r\n \"course.field.nameDE\": \"Nome del corso - DE\",\r\n \"course.field.nameEN\": \"Nome del corso - EN\",\r\n \"course.field.nameFR\": \"Nome del corso - FR\",\r\n \"course.field.nameIT\": \"Nome del corso - IT\",\r\n \"course.field.numberOfMandatoryModules\": \"Numero di moduli obbligatori\",\r\n \"course.field.numberOfProcessModules\": \"Numero di moduli di processo\",\r\n \"course.field.numberOfSelectionModules\": \"Numero di moduli di selezione\",\r\n \"course.header\": \"Corso\",\r\n \"course.list.header\": \"Corsi\",\r\n \"course.section.modules\": \"Moduli\",\r\n \"course.snackbar.successfulArchive\": \"Il corso è stato archiviato con successo.\",\r\n \"course.snackbar.successfulDelete\": \"Il corso è stato cancellato con successo.\",\r\n \"course.snackbar.successfulPublish\": \"Il corso è stato pubblicato con successo.\",\r\n \"course.type.cicero\": \"Attestato professionale federale/Cicero\",\r\n \"course.type.ciceroGroup\": \"Gruppo Attestato professionale federale/Cicero\",\r\n \"course.type.hve\": \"FPS\",\r\n \"course.type.hveGroup\": \"Gruppo FPS\",\r\n \"course.type.intermediary\": \"Intermediario\",\r\n \"course.type.intermediaryGroup\": \"Gruppo Intermedidario\",\r\n \"course.type.mindeststandard\": \"Standard minimi\",\r\n \"course.type.mindeststandardGroup\": \"Gruppo standard minimi\",\r\n \"course.type\": \"Tipo di corso\",\r\n \"course.validation.idNotEmpty\": \"L'ID del corso non può essere vuoto.\",\r\n \"course.validation.modules.empty\": \"Si prega di selezionare almeno un modulo.\",\r\n \"course.validation.numberOfAnyModulesIsZero\": \"Il numero totale di moduli deve essere almeno 1.\",\r\n \"course.validation.typeIsInvalid\": \"Il tipo di corso non è valido.\",\r\n \"course.validation.typeNotEmpty\": \"Seleziona il tipo di corso\",\r\n \"courseManagement.header\": \"Corsi\",\r\n \"dragAndDrop.uploadFiles\": \"Caricare i file introducendoli quì\",\r\n \"exam.button.new\": \"Aggiungere un nuovo esame\",\r\n \"exam.field.correctionExpenses\": \"Spese di correzione\",\r\n \"exam.field.courseType\": \"Tipo di corso\",\r\n \"exam.field.examExpenses\": \"Spese d'esame\",\r\n \"exam.field.examId\": \"ID esame\",\r\n \"exam.field.examName\": \"Nome dell'esame \",\r\n \"exam.field.examNameDE\": \"Nome dell'esame DE\",\r\n \"exam.field.examNameEN\": \"Nome dell'esame EN\",\r\n \"exam.field.examNameFR\": \"Nome dell'esame FR\",\r\n \"exam.field.examNameIT\": \"Nome dell'esame IT\",\r\n \"exam.field.expertExpenses\": \"Spese di esperti\",\r\n \"exam.field.type\": \"Tipo di esame\",\r\n \"exam.header\": \"Esami\",\r\n \"exam.section.specifics\": \"Specifiche dell'esame\",\r\n \"exam.snackbar.successfulArchive\": \"Esame scelto è stato archiviato.\",\r\n \"exam.snackbar.successfulDelete\": \"Esame scelto è stato cancellato.\",\r\n \"exam.snackbar.successfulPublish\": \"Esame scelto è stato pubblicato.\",\r\n \"exam.type.oral\": \"Esame orale\",\r\n \"exam.type.termPaper\": \"Carta a termine\",\r\n \"exam.type.written\": \"Esame scritto\",\r\n \"exam.validation.idNotEmpty\": \"Il nome dell'esame non deve essere vuoto\",\r\n \"examApplication.field.candidates\": \"Candidati\",\r\n \"examApplication.field.case\": \"Caso\",\r\n \"examApplication.validation.timeslotIsOverbooked\": \"Almeno un esame è in overbooking. Questo può accadere se si aggiungono nuove applicazioni mentre si apportano modifiche nella vista di pianificazione.\",\r\n \"examAssignment.validation.preparationRoomNotAllowed\": \"Errore durante il recupero della configurazione.\",\r\n \"examDay.button.assignExpertsToCorrectionExams\": \"Assegnare l'esperto di correzione\",\r\n \"examDay.button.assignExpertsToOralExams\": \"Assegni esperti al esame orale\",\r\n \"examDay.button.assignProctorsToOralPreparations\": \"Assegni esperti di sorveglianza per la preparazione esami orali\",\r\n \"examDay.button.assignProctorsToWrittenExams\": \"Assegni esperti di sorveglianza per la preparazione esami scritti \",\r\n \"examDay.button.new\": \"Aggiungi nuovo giorno d'esame\",\r\n \"examDay.field.date\": \"Data\",\r\n \"examDay.field.header\": \"Giorno dell'esame\",\r\n \"examDay.field.numberOfRoomsAssigned\": \"Sale sono state assegnate\",\r\n \"examDay.field.preparationRoom\": \"Sala di preparazione\",\r\n \"examDay.field.timeSlotStructure.correction\": \"Correzione\",\r\n \"examDay.field.timeSlotStructure.electiveWritten\": \"Voto per iscritto\",\r\n \"examDay.field.timeSlotStructure.mandatoryWritten\": \"Obbligatorio per iscritto\",\r\n \"examDay.field.timeSlotStructure.oralHBB_ProcessModule\": \"Orale HBB modulo del processo\",\r\n \"examDay.field.timeSlotStructure.oralIntermediary\": \"Orale mediatore\",\r\n \"examDay.field.timeSlotStructure.placeholder\": \"Fasce orarie\",\r\n \"examDay.field.timeSlotStructure.writtenHBB_ProcessModule\": \"Scritto HBB modulo del processo\",\r\n \"examDay.field.timeSlotStructure.writtenIntermediary\": \"Scritto mediatore\",\r\n \"examDay.field.timeSlotStructure\": \"Fasce orarie\",\r\n \"examDay.field.type.correction\": \"Correzione\",\r\n \"examDay.field.type.oral\": \"Orale\",\r\n \"examDay.field.type.written\": \"Scritto\",\r\n \"examDay.field.type\": \"Tipo\",\r\n \"examDay.validation.alreadyExistsForLocationOnSameDate\": \"Esiste già un altro giorno d'esame con la stessa data e lo stesso luogo.\",\r\n \"examDay.validation.examTypeUnknown\": \"Il tipo di esame è sconosciuto. Scegliere un tipo di esame esistente.\",\r\n \"examDay.validation.idNotEmpty\": \"L'ID del giorno d'esame non puo' essere vuoto.\",\r\n \"examDay.validation.notFound\": \"Giorno d'esame non trovato.\",\r\n \"examDay.validation.onlyOnePreparationRoomAllowed\": \"Solo una sala di preparazione può essere aggiunta al giorno.\",\r\n \"examDay.validation.roomCanNotBeAssignedToSelectedExamType\": \"La sala non può essere assegnata perché non è applicabile al tipo di esame di questa giornata d'esame.\",\r\n \"examDay.validation.selectedRoomAlreadyAssigned\": \"La sala è già stata assegnata.\",\r\n \"examDay.validation.selectedRoomIsPcRoomAndCanNotBeUsed\": \"La sala è una sala informatica e non può essere assegnata.\",\r\n \"examManagement.header\": \"Esami\",\r\n \"examScore.grade\": \"Grado\",\r\n \"examScore.points\": \"Punti\",\r\n \"examSession.button.calculateExamResults\": \"Calcolo dei risultati degli esami\",\r\n \"examSession.button.exportCandidates\": \"Esportare i candidati per fascia oraria e/o tipo di esame\",\r\n \"examSession.button.exportOrders\": \"Esportazione degli ordini mancanti XML\",\r\n \"examSession.button.importExamScoresAndGrades\": \"Importazione di punti e punteggi\",\r\n \"examSession.button.importPev\": \"Importare il PEV\",\r\n \"examSession.button.new\": \"Aggiungere una nuova sessione d'esame\",\r\n \"examSession.button.publishExamResults\": \"Pubblicare i risultati degli esami\",\r\n \"examSession.candidateExportDialog.examDay.label\": \"Data\",\r\n \"examSession.candidateExportDialog.examDay.placeholder\": \"Seleziona una data\",\r\n \"examSession.candidateExportDialog.timeSlot.label\": \"Fascia oraria\",\r\n \"examSession.candidateExportDialog.timeSlot.placeholder\": \"Selezionare una fascia oraria\",\r\n \"examSession.candidateExportDialog.title\": \"Selezionare un tipo di esame e, opzionalmente, una fascia oraria\",\r\n \"examSession.confirmPublishResultsDialog.text\": \"È sicuro di voler pubblicare i risultati degli esami di questa sessione?\",\r\n \"examSession.dialog.noAvailableCourses\": \"Questo esame non è assegnato a nessun corso.\",\r\n \"examSession.dialog.selectCourseTypes\": \"Selezionare i tipi di corso\",\r\n \"examSession.field.correctionPeriod\": \"Periodo di correzione\",\r\n \"examSession.field.date\": \"Data\",\r\n \"examSession.field.examResultDate\": \"Tempo Risultato del test\",\r\n \"examSession.field.examSession\": \"Periodo d'esame\",\r\n \"examSession.field.examSessionDate\": \"Data della sessione d'esame\",\r\n \"examSession.field.freeCancellationEndDate\": \"Cancellazione gratuita fino a quando\",\r\n \"examSession.field.from\": \"Dal\",\r\n \"examSession.field.gradingConferenceDate\": \"Data della conferenza di classificazione\",\r\n \"examSession.field.hidePastSessions\": \"Nascondere le sessioni precedenti\",\r\n \"examSession.field.inspectionPeriod\": \"Ispezione\",\r\n \"examSession.field.inspectionSignupEndDate\": \"Data di fine ispezione\",\r\n \"examSession.field.published\": \"Pubblicato\",\r\n \"examSession.field.sessionKey\": \"Chiave di sessione\",\r\n \"examSession.field.sessionKeyDE\": \"Sessione d'esame DE\",\r\n \"examSession.field.sessionKeyEN\": \"Sessione d'esame EN\",\r\n \"examSession.field.sessionKeyFR\": \"Sessione d'esame FR\",\r\n \"examSession.field.sessionKeyIT\": \"Sessione d'esame IT\",\r\n \"examSession.field.signup\": \"Iscrizione\",\r\n \"examSession.field.signupDate\": \"Data di iscrizione\",\r\n \"examSession.field.signupEndDate\": \"Data finale di iscrizione\",\r\n \"examSession.field.signupStartDate\": \"Data di inizio iscrizione\",\r\n \"examSession.field.surveyDeadline\": \"termine limite rilevamento\",\r\n \"examSession.field.to\": \"Al\",\r\n \"examSession.header\": \"Sessioni d'esame\",\r\n \"examSession.importPevDialog.title\": \"Caricare il file contenente i dati PEV\",\r\n \"examSession.invitation.allLocations\": \"Tutti i luoghi\",\r\n \"examSession.invitation.flagged\": \"è già stata inviata un'e-mail per questa luogo\",\r\n \"examSession.invitation.selectLocations\": \"seleziona i luoghi\",\r\n \"examSession.invitation.snackbar.candidates\": \"Inviti inviati a {count} candidati.\",\r\n \"examSession.invitation.snackbar.experts\": \"Inviti inviati a {count} esperti.\",\r\n \"examSession.invitation\": \"Invitare esperti/candidati\",\r\n \"examSession.mail.invitation\": \"invia invito\",\r\n \"examSession.mail.notifyCandidates\": \"informare i candidati\",\r\n \"examSession.mail.survey\": \"iniziare il sondaggio\",\r\n \"examSession.result.NotGenerated\": \"I risultati degli esami non sono ancora stati generati.\",\r\n \"examSession.select.assignNewLocation\": \"Assegnare una nuova posizione\",\r\n \"examSession.validation.betweenFromAndTo\": \"L'orario di iscrizione deve essere compreso tra le date dal a al\",\r\n \"examSession.validation.canNotBeDeletedBecauseLocationsInside\": \"La sessione d'esame non può essere cancellata perché ha assegnato una o più sedi.\",\r\n \"examSession.validation.canNotBeUnpublishedBecauseExistingApplication\": \"Sessione esame non può essere cancellata dato che esistono già delle iscrizioni.\",\r\n \"examSession.validation.canNotReapplyForDifferentLanguage\": \"Non è possibile ripresentare la domanda per la stessa sessione d'esame con una lingua diversa.\",\r\n \"examSession.validation.correctionEndDateLaterThanCorrectionStartDate\": \"La data finale della correzione deve essere successiva alla data di inizio della correzione. \",\r\n \"examSession.validation.examsEndDateLaterThanExamsStartDate\": \"La data di fine degli esami deve essere successiva alla data di inizio degli esami. \",\r\n \"examSession.validation.examSessionFull\": \"L'esame selezionato in questa sessione d'esame è purtroppo al completo. Si prega di selezionare un altro modulo o un'altra sessione d'esame.\",\r\n \"examSession.validation.examsNoCourseTypes\": \"Ad alcuni esami scritti o orali non è stato assegnato alcun tipo di corso. Si prega di assegnare almeno un tipo di corso.\",\r\n \"examSession.validation.examWithNotAllowedCourseTypes\": \"Ad alcuni esami non sono stati assegnati tipi di corso validi. Assicurarsi che tutte le assegnazioni siano corrette o ricaricare la pagina.\",\r\n \"examSession.validation.freeCancellationNotPossible\": \"La cancellazione gratuita non è più disponibile.\",\r\n \"examSession.validation.idNotEmpty\": \"L'ID sessione d'esame non può essere vuoto.\",\r\n \"examSession.validation.inspectionEndDateLaterThanInspectionStartDate\": \"La data di fine dell'ispezione deve essere successiva alla data di inizio dell'ispezione.\",\r\n \"examSession.validation.locationAlreadyExists\": \"La sede esiste già nella sessione d'esame.\",\r\n \"examSession.validation.locationDoesNotExist\": \"La sede non è stata trovata.\",\r\n \"examSession.validation.notPublishedNoSurveyPossible\": \"Il rilevamento può essere inizilizzato solamente se la sessione d’esame é stata pubblicata.\",\r\n \"examSession.validation.notPublishedResultsPublishingNotPossible\": \"La pubblicazione dei risultati degli esami non è possibile perché la sessione d'esame non viene pubblicata.\",\r\n \"examSession.validation.publishedNoUpdatePossible\": \"La sessione d'esame viene pubblicata e non può essere aggiornata.\",\r\n \"examSession.validation.signupEndDateLaterThanSignupStartDate\": \"La data finale di iscrizione deve essere successiva alla data di inizio iscrizione.\",\r\n \"examSession.validation.signupStartDateLaterThanOrEqualFrom\": \"La data di inizio delle iscrizioni deve essere uguale o successiva alla data di Da.\",\r\n \"examSession.validation.someErrorsOccurred\": \"Alcuni moduli hanno errori\",\r\n \"examSession.validation.toLaterThanFrom\": \"La data di fine dell'esame deve essere successiva alla data di inizio dell'esame.\",\r\n \"examSession.validation.toLaterThanSignupEndDate\": \"La data di fine dell'esame deve essere successiva alla data di fine dell'iscrizione.\",\r\n \"examSession.validation.toLaterThanSignupStartDate\": \"La data di fine dell'esame deve essere successiva alla data di inizio dell'iscrizione.\",\r\n \"examSession.validation.withSameNameAlreadyExists\": \"Esiste già un'altra sessione d'esame con lo stesso nome.\",\r\n \"examSession.writtenExamScoresImportDialog.title\": \"Caricare il file che contiene i punteggi degli Esami scritti\",\r\n \"examSession.writtenExamScoresImportDialog.uploadSuccess\": \"Carica il successo. Numero di punteggi aggiornati:\",\r\n \"examSessionCandidate.addCandidate\": \"Aggiungi un candidato\",\r\n \"examSessionCandidate.addDialog.bookingWithInvoice\": \"Prenotazione con fattura\",\r\n \"examSessionCandidate.addDialog.candidate\": \"Candidato\",\r\n \"examSessionCandidate.addDialog.course\": \"Corso\",\r\n \"examSessionCandidate.addDialog.module\": \"Modulo\",\r\n \"examSessionCandidate.addDialog.title\": \"Seleziona il candidato, il corso e il modulo\",\r\n \"examSessionCandidate.attachments\": \"Allegati\",\r\n \"examSessionCandidate.averageGrade\": \"Punteggio medio\",\r\n \"examSessionCandidate.book\": \"Prenotare\",\r\n \"examSessionCandidate.booking.error\": \"La sua selezione non è più disponibile. Si prega di riprovare.\",\r\n \"examSessionCandidate.bookingDialog.selectDate\": \"Selezionare una data\",\r\n \"examSessionCandidate.bookingDialog.selectLanguage\": \"Selezionare una lingua\",\r\n \"examSessionCandidate.bookingDialog.selectLocation\": \"Selezionare un luogo\",\r\n \"examSessionCandidate.bookingDialog.title\": \"Luogo e Date di esame\",\r\n \"examSessionCandidate.cancel\": \"Annulla\",\r\n \"examSessionCandidate.cancelModuleMessage\": \"Siete sicuri di voler cancellare questo modulo?\",\r\n \"examSessionCandidate.cancelModuleRefundInformation\": \"Se si rientra nel periodo di cancellazione gratuita, il modulo verrà rimborsato, altrimenti verrà creata un'attività di cancellazione.\",\r\n \"examSessionCandidate.certification\": \"Certificazione\",\r\n \"examSessionCandidate.exam\": \"Esame\",\r\n \"examSessionCandidate.examDate\": \"Date di esame\",\r\n \"examSessionCandidate.examType\": \"Tipo d’esame\",\r\n \"examSessionCandidate.isRepeater\": \"Ripetitore\",\r\n \"examSessionCandidate.locationAndDateEdit\": \"Modifica il luogo e la data dell'esame\",\r\n \"examSessionCandidate.module\": \"Modulo\",\r\n \"examSessionCandidate.option\": \"Opzione\",\r\n \"examSessionCandidate.paymentState\": \"Stato del pagamento\",\r\n \"examSessionCandidate.publishResultsToEmployer\": \"Passare il risultato dell'esame\",\r\n \"examSessionCandidate.rebook\": \"Re-Prenota\",\r\n \"examSessionCandidate.resetManualState\": \"Imposta automaticamente lo stato\",\r\n \"examSessionCandidate.setManualState\": \"Imposta lo stato manualmente\",\r\n \"examSessionCandidate.state\": \"Stato\",\r\n \"examSessionCandidate.validation.examAlreadyBookedForAnotherModule\": \"L'esame è già prenotato per un altro modulo.\",\r\n \"examSessionCandidate.validation.examNotFound\": \"L'esame non è stato trovato.\",\r\n \"examSessionCandidate.validation.idNotEmpty\": \"L'Exam SessionCandidateID non deve essere vuoto.\",\r\n \"examSessionCandidate.validation.invalidGrade\": \"Il grado non è valido.\",\r\n \"examSessionCandidate.validation.invalidScore\": \"Il punteggio non è valido\",\r\n \"examSessionCandidate.verificationRequired\": \"Verifica richiesta\",\r\n \"examSessionCandidateExamState.cancelled\": \"Cancellato\",\r\n \"examSessionCandidateExamState.equivalence\": \"Equivalenza\",\r\n \"examSessionCandidateExamState.failed\": \"Esame non riuscito\",\r\n \"examSessionCandidateExamState.passed\": \"Esame superato\",\r\n \"examSessionCandidateModuleState.applicationAccepted\": \"Richiesta accettata\",\r\n \"examSessionCandidateModuleState.cancelled\": \"Cancellato\",\r\n \"examSessionCandidateModuleState.equivalence\": \"Equivalenza\",\r\n \"examSessionCandidateModuleState.expired\": \"Scaduto\",\r\n \"examSessionCandidateModuleState.failed\": \"Modulo non riuscito\",\r\n \"examSessionCandidateModuleState.passed\": \"Modulo superato\",\r\n \"examSessionCandidateModuleState.Refunded\": \"Modulo rimborsato\",\r\n \"examSessionCandidateModuleState.verificationRequired\": \"Verifica richiesta\",\r\n \"examSessions.noInfo\": \"Non sono state trovate sessioni d'esame\",\r\n \"examState.booked\": \"prenotato\",\r\n \"examState.cancelled\": \"cancellato\",\r\n \"examState.none\": \"---\",\r\n \"expert.button.new\": \"Aggiuncere esperti\",\r\n \"expert.field.courseType.placeholder\": \"Selezionare i tipi di corso per il ruolo\",\r\n \"expert.field.exam.placeholder\": \"Selezionare gli esami per il ruolo\",\r\n \"expert.field.exam\": \"Examen IT\",\r\n \"expert.field.languages\": \"Lingue\",\r\n \"expert.field.role.add\": \"Aggiungere un nuovo ruoli\",\r\n \"expert.field.role.Aufsichtsexperten\": \"Esperti di sorveglianza \",\r\n \"expert.field.role.delete\": \"Eliminare il ruoli\",\r\n \"expert.field.role.EinspracheKomission\": \"Commissione ricorsi\",\r\n \"expert.field.role.Expertenschulung\": \"Training per esperti\",\r\n \"expert.field.role.Hauptexperten\": \"Esperti chiave\",\r\n \"expert.field.role.Leiterprüfungszentrum\": \"Direttori centro d’esami Center\",\r\n \"expert.field.role.placeholder\": \"Selezionare nuovi ruoli per esperti\",\r\n \"expert.field.role.Prüfungsexperten\": \"Esaminatori\",\r\n \"expert.field.role.Prüfungskomission\": \"Commissione d’esami\",\r\n \"expert.field.role.QSK\": \"Commissione per la garanzia della qualità\",\r\n \"expert.field.role\": \"Ruoli\",\r\n \"expert.header\": \"Esperti\",\r\n \"expert.snackbar.successfulCreate\": \"Esperto é stato aggiunto.\",\r\n \"expert.snackbar.successfulDelete\": \"L’esperto selezionato é stato cancellato.\",\r\n \"expert.snackbar.successfulUpdate\": \"Le modifiche sono state salvate.\",\r\n \"expert.validation.idNotEmpty\": \"L’ID del esperto non può essere vuota.\",\r\n \"expertAssignment.validation.examNotAssignedToRoom\": \"Esami senza assegnazione di stanze\",\r\n \"expertAssignment.validation.expertAssignedToMultipleRoomsOnSameDay\": \"L'esperto viene assegnato a diverse stanze nello stesso giorno.\",\r\n \"expertAssignment.validation.expertNotRequiredRole\": \"L'esperto non ha il ruolo richiesto.\",\r\n \"expertAssignment.validation.expertNotSpeakingAnySupportedLanguage\": \"L'esperto non parla nessuna delle lingue richieste.\",\r\n \"expertAssignment.validation.roomNotAssignedToExamDay\": \"La sala non è assegnata al giorno dell'esame.\",\r\n \"expertAvailability.header\": \"Disponibilità\",\r\n \"expertAvailability.noDatesAvailable\": \"Al momento non ci sono date disponibilità\",\r\n \"expertCorrectionAvailability.header\": \"Disponibilità per la correzione dell'esame\",\r\n \"file.name\": \"nome del file\",\r\n \"home.candidate\": \"Vista del candidato\",\r\n \"home.expert\": \"Il punto di vista dell'esperto\",\r\n \"home.header\": \"Pagina iniziale\",\r\n \"home.me.edit\": \"Gestire il conto\",\r\n \"home.me\": \"Io e le mie impostazioni\",\r\n \"home.myAlertFields.link\": \"Si prega di gestire il proprio account.\",\r\n \"home.myAlertFields\": \"Sono richieste alcune informazioni obbligatorie.\",\r\n \"home.myCertifications\": \"I miei certificati\",\r\n \"home.myCourses.downloadCertificate\": \"Certificato\",\r\n \"home.myCourses.downloadPerformanceRecord\": \"Record di prestazioni\",\r\n \"home.myCourses.table.ClosingDate\": \"Data di chiusura\",\r\n \"home.myCourses.table.downloads\": \"Downloads\",\r\n \"home.myCourses\": \"I miei corsi\",\r\n \"home.myExamCases\": \"I miei casi d'esame\",\r\n \"home.myExamResults\": \"I risultati del mio esame\",\r\n \"home.myExams.newApplication\": \"Registrazione All'esame\",\r\n \"home.myExams.noExams\": \"Nessuna exame disponibile\",\r\n \"home.myExams.table.actionsColumn\": \"Azioni\",\r\n \"home.myExams.table.dateColumn\": \"Data\",\r\n \"home.myExams.table.examColumn\": \"Esame\",\r\n \"home.myExams.table.examTypeColumn\": \"Tipo di esame\",\r\n \"home.myExams.table.gradeColumn\": \"Grado\",\r\n \"home.myExams.table.locationColumn\": \"Luogo\",\r\n \"home.myExams.table.moduleColumn\": \"Modulo\",\r\n \"home.myExams.table.roomColumn\": \"Sala\",\r\n \"home.myExams.table.statusColumn\": \"Stato\",\r\n \"home.myExams.table.timeColumn\": \"Ora\",\r\n \"home.myExams\": \"I Miei Esami\",\r\n \"home.myExamSessions\": \"Le mie sessioni d'esame\",\r\n \"home.myFiles\": \"I miei file\",\r\n \"home.myTasks\": \"I miei compiti\",\r\n \"home.pendingItemsInCartMessage\": \"I moduli non sono ancora stati pagati. Volete continuare la prenotazione ora? Si prega di notare che il posto in un modulo non è riservato finché non è stato effettuato il pagamento.\",\r\n \"home.switch.candidate\": \"Passa alla visualizzazione candidato\",\r\n \"home.switch.expert\": \"Passa alla visualizzazione esperto\",\r\n \"import.pev.bookingFailed\": \"Non è possibile prenotare tutti i candidati.\",\r\n \"import.pev.failedImportCandidates\": \"Impossibile importare i candidati.\",\r\n \"import.pev.failedImportScoresAndGrades\": \"Impossibile importare i punteggi e i voti.\",\r\n \"import.pev.invalidCsv\": \"File CSV non valido.\",\r\n \"import.pev.missingEntities\": \"Alcune entità non sono state trovate. ID dei candidati: {candidateIds}. ID delle sessioni d'esame: {examSessionsIds}. ID dei corsi: {courseIds}. ID dei moduli: {moduleIds}. ID esami: {examIds}.\",\r\n \"import.pev.noExam\": \"Impossibile trovare l'esame. ID esame: {examId}.\",\r\n \"import.pev.noExamDayForExam\": \"Impossibile trovare un giorno d'esame disponibile per l'esame. ID sessione d'esame: {examSessionId}. ID esame: {examId}. Lingua: {language}.\",\r\n \"import.pev.success\": \"I dati PEV sono stati importati con successo.\",\r\n \"import.pev.wrongCourseModules\": \"I moduli non sono collegati al corso. ID corso: {courseId}. ID moduli: {moduleIds}.\",\r\n \"import.pev.wrongExamSessionExams\": \"Gli esami non sono collegati alla sessione d'esame. ID sessione d'esame: {examSessionId}. ID esami: {examIds}.\",\r\n \"import.pev.wrongModuleExams\": \"Gli esami non sono collegati al modulo. ID modulo: {moduleId}. ID esami: {examIds}.\",\r\n \"location.button.new\": \"Aggiungere una nuova sede\",\r\n \"location.field.canton.placeholder\": \"Seleziona un Cantone\",\r\n \"location.field.canton\": \"Cantone\",\r\n \"location.field.city\": \"Città\",\r\n \"location.field.contactEmailAddress\": \"Email del contatto\",\r\n \"location.field.contactName\": \"Nome del contatto\",\r\n \"location.field.contactPhoneNo\": \"Telefono del contatto\",\r\n \"location.field.languageRegions\": \"Regioni linguistiche\",\r\n \"location.field.linkToMap\": \"Pianta del sito\",\r\n \"location.field.name\": \"Nome\",\r\n \"location.field.street\": \"Strada\",\r\n \"location.field.zipCode\": \"Codice postale\",\r\n \"location.header\": \"Sede\",\r\n \"location.validation.idNotEmpty\": \"L'ID sede non può essere vuoto.\",\r\n \"location.validation.languageUnknown\": \"La lingua è sconosciuta. Scegliere una lingua esistente.\",\r\n \"location.validation.nameAlreadyExists\": \"Esiste già un'altra sede con lo stesso nome.\",\r\n \"location\": \"luogo\",\r\n \"login.button.adminLogin\": \"Login VBV-Admin\",\r\n \"login.button.impressum\": \"Impressum\",\r\n \"login.button.impressumLink\": \"https://www.vbv.ch/it/impressum\",\r\n \"login.button.login\": \"Login\",\r\n \"login.error.errorLoadingAppRegistration\": \"Errore durante il recupero della registrazione dell'app\",\r\n \"login.text.external1\": \"Si iscriva per accedere alla sua applicazione.\",\r\n \"login.text.external2\": \"Si prega di utilizzare un browser moderno come Chrome o Edge. Questa piattaforma funziona esclusivamente con un notebook o un desktop. Non funziona con un tablet o un telefono cellulare.\",\r\n \"login.text.externalWarn\": \"Importante\",\r\n \"login.title.external\": \"Iscrizione come candidato/esperto\",\r\n \"module.button.new\": \"Aggiungi un nuovo modulo\",\r\n \"module.dialog.confirmPublishDescription\": \"Sei sicuro di voler pubblicare questo esame?\",\r\n \"module.dialog.noAvailableExams\": \"Nessun esame disponibile.\",\r\n \"module.dialog.noAvailableLocations\": \"Nessuna località disponibile.\",\r\n \"module.dialog.selectExams\": \"Selezione di esami\",\r\n \"module.dialog.selectLocations\": \"Selezionare le località\",\r\n \"module.field.abacusNumber\": \"Numero Abacus\",\r\n \"module.field.allowDocumentUpload\": \"Consentire il caricamento di documenti\",\r\n \"module.field.allowOptions\": \"Permettere le opzioni\",\r\n \"module.field.allowRegistrationOnlyOnce\": \"Disponibile una volta\",\r\n \"module.field.allRoomsAssigned\": \"Camera assegnata\",\r\n \"module.field.certificateValidity.FiveYears\": \"5 anni\",\r\n \"module.field.certificateValidity.OneYear\": \"1 anno\",\r\n \"module.field.certificateValidity.Unlimited\": \"Illimitato\",\r\n \"module.field.certificateValidity\": \"Validità della certificazione\",\r\n \"module.field.documentsUploaded\": \"Documenti caricati\",\r\n \"module.field.gradingRules.allExams\": \"Tutti gli esami devono essere superati\",\r\n \"module.field.gradingRules.averageGrade\": \"Punteggio medio\",\r\n \"module.field.gradingRules\": \"Regole di classificazione\",\r\n \"module.field.moduleId\": \"Modulo ID\",\r\n \"module.field.moduleName\": \"Nome del modulo\",\r\n \"module.field.moduleNameDE\": \"Nome del modulo DE\",\r\n \"module.field.moduleNameEN\": \"Nome del modulo EN\",\r\n \"module.field.moduleNameFR\": \"Nome del modulo FR\",\r\n \"module.field.moduleNameIT\": \"Nome del modulo IT\",\r\n \"module.field.moduleType.mandatory\": \"Obbligatorio\",\r\n \"module.field.moduleType.optionalModule\": \"Modulo elettivo\",\r\n \"module.field.moduleType.processModule\": \"Modulo di processo\",\r\n \"module.field.moduleType\": \"Tipo di modulo\",\r\n \"module.field.needsApproval\": \"Ha bisogno di approvazione\",\r\n \"module.field.paymentState\": \"Stato del pagamento\",\r\n \"module.field.price\": \"Prezzo in CHF\",\r\n \"module.field.verificationRequired\": \"Verifica richiesta\",\r\n \"module.header\": \"Moduli\",\r\n \"module.moduleDetails\": \"Dettagli del modulo\",\r\n \"module.section.specifics\": \"Specifiche del modulo \",\r\n \"module.snackbar.successfulArchive\": \"Modulo scelto è stato archiviato.\",\r\n \"module.snackbar.successfulDelete\": \"Modulo scelto è stato cancellato.\",\r\n \"module.snackbar.successfulPublish\": \"Esame scelto è stato pubblicato.\",\r\n \"module.validation.gradingRule.invalidValue\": \"Il valore della regola di classificazione non è corretto.\",\r\n \"module.validation.idNotEmpty\": \"L'ID del modulo non può essere vuoto.\",\r\n \"module.validation.invalidStatusTransition\": \"Questa transizione di stato non è valida.\",\r\n \"module.validation.invalidStatusValue\": \"Il valore di stato non è corretto.\",\r\n \"module.validation.statusNotEmpty\": \"Lo stato non può essere vuoto.\",\r\n \"oralExamOption.kmu\": \"Piccole imprese\",\r\n \"oralExamOption.none\": \"Nessuna\",\r\n \"oralExamOption.privathaushalte\": \"Domestica privata\",\r\n \"paymentMethodSelector.form.button\": \"Pagare con fattura\",\r\n \"paymentMethodSelector.item.creditCard\": \"Carta di credito / Twint\",\r\n \"paymentMethodSelector.item.invoice\": \"Fattura\",\r\n \"paymentMethodSelector.item.invoiceMessage\": \"Indirizzo privato (CH)\",\r\n \"paymentMethodSelector.title\": \"Scegliere il metodo di pagamento\",\r\n \"paymentStatus.paid.abacus\": \"Fatturato (Abacus)\",\r\n \"paymentStatus.paid.ePayment\": \"Pagato (E-Pagamento)\",\r\n \"paymentStatus.refunded.abacus\": \"Rimborsato (Abacus)\",\r\n \"paymentStatus.refunded.ePayment\": \"Rimborsato (E-Payment)\",\r\n \"person.field.activateSpecificProfile\": \"Attivare il profilo dell'esperto\",\r\n \"person.field.ahvNumber\": \"Numero AVS\",\r\n \"person.field.bankAccount\": \"Conto bancario\",\r\n \"person.field.birthDate\": \"Data di nascita\",\r\n \"person.field.ciceroNumber\": \"Numero Cicero\",\r\n \"person.field.city\": \"Luogo di residenza\",\r\n \"person.field.country\": \"Paese\",\r\n \"person.field.displayName\": \"Nome\",\r\n \"person.field.email\": \"Email\",\r\n \"person.field.employer\": \"Datore di lavoro\",\r\n \"person.field.employerCity\": \"Città del datore di lavoro\",\r\n \"person.field.employerCountry\": \"Seleziona Paese del datore di lavoro\",\r\n \"person.field.employerStreet\": \"Strada del datore di lavoro\",\r\n \"person.field.employerStreetNumber\": \"Numero di strada del datore di lavoro\",\r\n \"person.field.employerZipCode\": \"CAP del datore di lavoro\",\r\n \"person.field.firstName\": \"Nome\",\r\n \"person.field.gender.placeholder\": \"Selezionare un genere\",\r\n \"person.field.gender\": \"Genere\",\r\n \"person.field.homeCountry\": \"Paese nativo\",\r\n \"person.field.icon\": \"Simbolo dell'attore\",\r\n \"person.field.internalComment\": \"Commento interno\",\r\n \"person.field.lastName\": \"Cognome\",\r\n \"person.field.mobileNumber\": \"Numero di cellulare\",\r\n \"person.field.phoneNumber.placeholder\": \"Formato: +41123456789\",\r\n \"person.field.phoneNumber\": \"Numero di telefono\",\r\n \"person.field.showOnlyExperts\": \"Visualizzare solo gli esperti\",\r\n \"person.field.street\": \"Strada\",\r\n \"person.field.streetNumber\": \"Numero\",\r\n \"person.field.zipCode\": \"Codice postale del luogo di residenza\",\r\n \"person.section.address\": \"Indirizzo privato\",\r\n \"person.section.businessData\": \"Dati commerciali\",\r\n \"person.section.expertDetails\": \"Dettagli specifici dell'esperto\",\r\n \"person.section.personalDetails\": \"Dettagli personali\",\r\n \"person.validation.ahvNumberAlreadyExists\": \"Esiste già un altro utente con lo stesso numero AHV.\",\r\n \"person.validation.ahvNumberNotValid\": \"Il numero AVS non è valido.\",\r\n \"person.validation.bankAccountNotEmpty\": \"Il conto bancario non può essere vuoto\",\r\n \"person.validation.ciceroNumberAlreadyExists\": \"Esiste già un altro utente con lo stesso numero Cicero.\",\r\n \"person.validation.ciceroNumberNotValid\": \"Il numero Cicero non è valido.\",\r\n \"person.validation.confirmEmailChange\": \"L'indirizzo e-mail è stato modificato. Questo modificherà anche l'email di accesso. Sei sicuro di voler continuare?\",\r\n \"person.validation.emailAlreadyExists\": \"Esiste già un altro utente con la stessa email.\",\r\n \"person.validation.genderUnknown\": \"Il genere è sconosciuto. Si prega di scegliere un genere esistente.\",\r\n \"person.validation.invalidEmployerZipCode\": \"Il codice postale del datore di lavoro non è valido.\",\r\n \"person.validation.invalidZipCode\": \"Il codice postale del luogo di residenza non è valido.\",\r\n \"person.validation.mandatoryExamRolesWithNoExams\": \"Ci sono ruoli d'esame obbligatori che non hanno esami assegnati. Assegnare gli esami mancanti.\",\r\n \"person.validation.personEdiIdNotEmpty\": \"L'ID EDI non può essere vuoto\",\r\n \"person.validation.personEmailAddressNotEmpty\": \"L'indirizzo e-mail non può essere vuoto\",\r\n \"person.validation.repeatedRoles\": \"I ruoli si ripetono. Assicuratevi che non ci siano ruoli ripetuti.\",\r\n \"person.validation.typeUnknown\": \"Il tipo di persona è sconosciuto. Scegliere un tipo esistente.\",\r\n \"role.validation.roleUnknown\": \"Ruolo sconosciuto\",\r\n \"room.button.new\": \"Assegnazione nuova sala\",\r\n \"room.field.floor\": \"Pavimento\",\r\n \"room.field.isPcRoom\": \"Sala informatica\",\r\n \"room.field.name\": \"Nome\",\r\n \"room.field.numberOfSeats\": \"Capienza\",\r\n \"room.header\": \"Sala\",\r\n \"room.text.seats\": \"posti\",\r\n \"room.validation.idNotEmpty\": \"L'ID sala non può essere vuoto.\",\r\n \"room.validation.nameAlreadyExists\": \"Esiste già un'altra sala con lo stesso nome.\",\r\n \"roomAssignment.button.new\": \"Assegnare una stanza\",\r\n \"roomAssignment.deleteConfirmation.title\": \"Stai per rimuovere un'aula di preparazione. Si assicuri che ci sia una stanza di preparazione assegnata a questa data d'esame.\",\r\n \"roomAssignment.field.isPreparationRoom\": \"Sala di preparazione\",\r\n \"roomAssignment.field.room.placeholder\": \"Selezionare una camera\",\r\n \"roomAssignment.field.room\": \"Camera\",\r\n \"roomAssignment.header\": \"Assegnazione della stanza\",\r\n \"roomAssignment.validation.idNotEmpty\": \"L'assegnazione della stanza non può essere vuota\",\r\n \"scheduler.examSelectDialog.title\": \"Seleziona l'esame per la stanza\",\r\n \"scheduler.examSelectDialog.tooltip\": \"Imposta l'esame per tutte le fasce orarie\",\r\n \"scheduler.message.briefing\": \"Briefing per esperti\",\r\n \"scheduler.message.exam\": \"Esame\",\r\n \"scheduler.message.noExperts\": \"Nessun esperto assegnato\",\r\n \"scheduler.message.pause\": \"Pausa\",\r\n \"scheduler.timeSlot.arrivalTime\": \"Ora di arrivo\",\r\n \"selfcancellation.header\": \"Annullamento del modulo\",\r\n \"selfcancellation.text\": \"Attenzione: Si prega di confermare che si desidera annullare l'iscrizione all'esame.\",\r\n \"startCertification.button.back\": \"Indietro\",\r\n \"startCertification.button.finish\": \"Fine\",\r\n \"startCertification.button.next\": \"Prossimo\",\r\n \"startCertification.courseModuleExamsStep.header\": \"Scegliere il corso, il modulo e gli esami\",\r\n \"startCertification.examDataStep.header\": \"Selezionare tipo d’esame, luogo e data\",\r\n \"startCertification.examDataStep.selectCompany\": \"Selezionare datore di lavoro\",\r\n \"startCertification.examDataStep.selectExamSession\": \"Seleziona la sessione d'esame\",\r\n \"startCertification.examDataStep.selectFachrichtung\": \"Selezionare ramo tecnico\",\r\n \"startCertification.examDataStep.selectLocationOralPart\": \"Selezionare un luogo per la parte orale del suo esame\",\r\n \"startCertification.examDataStep.selectLocationWrittenPart\": \"Selezionare un luogo per la parte scritta del suo esame\",\r\n \"startCertification.examDataStep.selectOralExamDate\": \"Selezionare una data per l’ esame orale\",\r\n \"startCertification.examDataStep.selectWrittenExamDate\": \"Selezionare una data per l’esamo scritto\",\r\n \"startCertification.locationDateStep.header\": \"Scegliere il luogo e la data dell'esame\",\r\n \"startCertification.modulesDetailsStep.dialogHelperText\": \"Si prega di completare le informazioni mancanti e di caricare i documenti richiesti, se necessario.\",\r\n \"startCertification.modulesDetailsStep.docsText1\": \"Si prega di caricare tutti i documenti richiesti per questo modulo.\",\r\n \"startCertification.modulesDetailsStep.docsText2\": \"Se non puoi caricare i documenti in questo momento, segnalo qui sotto. Ti assegneremo un compito appropriato.\",\r\n \"startCertification.modulesDetailsStep.fillDetails\": \"Dettagli completi\",\r\n \"startCertification.modulesDetailsStep.header\": \"Fornire informazioni e documenti\",\r\n \"startCertification.modulesDetailsStep.helperText\": \"Si prega di completare le informazioni mancanti e di caricare i documenti richiesti per i moduli selezionati.\",\r\n \"startCertification.modulesDetailsStep.isRepeater\": \"Sono ripetitore\",\r\n \"startCertification.modulesDetailsStep.option.kmu\": \"PMI\",\r\n \"startCertification.modulesDetailsStep.option.privathaushalte\": \"Privado\",\r\n \"startCertification.modulesDetailsStep.option\": \"Opzione\",\r\n \"startCertification.modulesDetailsStep.tableTitle\": \"Moduli selezionati\",\r\n \"startCertification.modulesDetailsStep.trainingProvider\": \"Fornitore di formazione\",\r\n \"startCertification.modulesDetailsStep.willUploadDocsLater\": \"Caricare i documenti più tardi\",\r\n \"startCertification.moduleSelectionStep.header\": \"Scegliere il corso, il modulo e gli esami\",\r\n \"startCertification.moduleSelectionStep.helperText\": \"Seleziona un corso e una sessione d'esame per selezionare i moduli e gli esami a cui vuoi iscriverti.\",\r\n \"startCertification.moduleSelectionStep.priceColumn\": \"Prezza in CHF\",\r\n \"startCertification.moduleSelectionStep.removeButton\": \"Rimuovi\",\r\n \"startCertification.moduleSelectionStep.selectButton\": \"Selezionare\",\r\n \"startCertification.moduleSelectionStep.selectedModules\": \"I tuoi moduli selezionati\",\r\n \"startCertification.paymentAndCompletionStep.actionColumn\": \"Azione\",\r\n \"startCertification.paymentAndCompletionStep.button.confirm\": \"Prenota ora in modo vincolante\",\r\n \"startCertification.paymentAndCompletionStep.button.confirmed\": \"Confermato\",\r\n \"startCertification.paymentAndCompletionStep.button.paid\": \"Pagato\",\r\n \"startCertification.paymentAndCompletionStep.button.pay\": \"Paga\",\r\n \"startCertification.paymentAndCompletionStep.freeCancelDate\": \"cancellazione gratuita fino a \",\r\n \"startCertification.paymentAndCompletionStep.generalInfo.cost1\": \"Dopo tale termine, \",\r\n \"startCertification.paymentAndCompletionStep.generalInfo.cost2bold\": \"in caso di cancellazione ingiustificata va corrisposta\",\r\n \"startCertification.paymentAndCompletionStep.generalInfo.cost3\": \" l’intera tassa d’esame.\",\r\n \"startCertification.paymentAndCompletionStep.generalInfo.freeCancellation\": \"L'iscrizione è vincolante. Potrà annullare l'iscrizione fino alle date indicate sopra senza costi aggiuntivi.\",\r\n \"startCertification.paymentAndCompletionStep.generalInfo.hveFAQLink\": \"https://www.vbv.ch/fileadmin/vbv/Dokumente/Bildungsabschluesse/Versicherungsfach/72047_PO_Versicherungsfachleute_I_2022.pdf\",\r\n \"startCertification.paymentAndCompletionStep.generalInfo.hveFAQLinkText\": \"FAQ attestato professionale federale\",\r\n \"startCertification.paymentAndCompletionStep.generalInfo.intermediaryFAQLink\": \"https://www.vbv.ch/fileadmin/vbv/Dokumente/Bildungsabschluesse/Versicherungsvermittlung/FAQ_Vermi_Pruefungen_it.pdf\",\r\n \"startCertification.paymentAndCompletionStep.generalInfo.intermediaryFAQLinkText\": \"FAQ intermediario assicurativo\",\r\n \"startCertification.paymentAndCompletionStep.generalInfo.moreInformation1\": \"Ulteriori informazioni sono riportate nella rubrica \",\r\n \"startCertification.paymentAndCompletionStep.generalInfo.moreInformation2\": \".\",\r\n \"startCertification.paymentAndCompletionStep.header\": \"Pagamento e finalizzazione\",\r\n \"startCertification.paymentAndCompletionStep.hint\": \"Si prega di notare che il tuo posto in un modulo non è riservato fino al pagamento.\",\r\n \"startCertification.paymentAndCompletionStep.messages.transactionCancelled\": \"Transazione {id} annullata\",\r\n \"startCertification.paymentAndCompletionStep.messages.transactionConfirmed\": \"La transazione {id} è stata confermata\",\r\n \"startCertification.paymentAndCompletionStep.messages.transactionFailed\": \"Transazione {id} non riuscita\",\r\n \"startCertification.paymentAndCompletionStep.messages.transactionPaid\": \"La transazione {id} è stata pagata\",\r\n \"startCertification.paymentAndCompletionStep.messages.wrongTransactionId\": \"ID transazione non valido {id}\",\r\n \"startCertification.paymentAndCompletionStep.paymentConfirmationMessagePart1\": \"Ciò può richiedere fino a un minuto. Questo messaggio verrà chiuso automaticamente quando il pagamento sarà stato confermato.\",\r\n \"startCertification.paymentAndCompletionStep.paymentConfirmationMessagePart2\": \"In caso contrario, si prega di contattare VBV con l'ID della transazione: {datatransTrxId}\",\r\n \"startCertification.paymentAndCompletionStep.paymentConfirmationTitle\": \"In attesa della conferma del pagamento, si prega di attendere\",\r\n \"startCertification.paymentAndCompletionStep.removeModule\": \"Rimuovere il modulo\",\r\n \"startCertification.paymentAndCompletionStep.removeModuleConfirmation\": \"Si desidera rimuovere il modulo?\",\r\n \"startCertification.paymentAndCompletionStep.summary\": \"Riassunto\",\r\n \"startCertification.personalDataStep.header\": \"Verificare la propria data\",\r\n \"startCertification.policyDialog.accept.link\": \"la politica sulla privacy/CGC\",\r\n \"startCertification.policyDialog.accept.linkUrl\": \"https://www.vbv.ch/it/dichiarazione-di-protezione-dei-dati\",\r\n \"startCertification.policyDialog.accept\": \"Accetto \",\r\n \"startCertification.policyDialog.text1\": \"Con la presente dichiaro di riconoscere e accettare che al mio datore di lavoro vengano divulgate le informazioni seguenti: avvenuta iscrizione a una sessione d’esame, compresa la data della sessione d’esame, risultati dell’esame, compresi le note/i punti e la notifica del superamento o mancato superamento dell’esame, iscrizione nel registro Cicero \",\r\n \"startCertification.policyDialog.text2\": \"Il presente consenso può essere revocato in qualsiasi momento e in forma libera mediante comunicazione scritta all’Associazione per la formazione professionale nell’assicurazione AFA o tramite e-mail da inviarsi all’indirizzo vermittler@vbv-afa.ch.\",\r\n \"startCertification.uploadFilesStep.header\": \"Caricare la verifica dei file\",\r\n \"table.noRecords\": \"Nessun record trovato\",\r\n \"task.creationDate\": \"Data di creazione\",\r\n \"task.deadline\": \"Termine ultimo\",\r\n \"task.noInfo\": \"Nessun compito pendente\",\r\n \"task.state\": \"Stato\",\r\n \"task.type\": \"Tipo\",\r\n \"task.validation.deadlineMustBeLaterThanToday\": \"Il termine ultimo dev’essere più tardi che oggi.\",\r\n \"task.validation.typeUnknown\": \"Tipo compito sconosciuto\",\r\n \"taskState.done\": \"Fatto\",\r\n \"taskState.inProgress\": \"In corso\",\r\n \"taskState.toDo\": \"Da fare\",\r\n \"taskType.cancellation\": \"Cancellazione\",\r\n \"taskType.checkAvailability\": \"Communicare disponibilità\",\r\n \"taskType.checkCorrectionAvailability\": \"Inserisci la disponibilità per la correzione dell'esame\",\r\n \"taskType.none\": \"Nessuna\",\r\n \"taskType.uploadDocuments\": \"Caricare i documenti\",\r\n \"uploadDocumentsTask.header\": \"Compito di caricamento dei documenti\",\r\n \"uploadDocumentsTask.instructions\": \"Carica tutti i documenti richiesti per questo modulo e completa il compito quando hai finito.\",\r\n \"user.noInfo\": \"Nessun informazione utente\",\r\n \"user.settings\": \"Impostazioni\",\r\n \"userRoomAssignment.assignment\": \"Assegnazioni\",\r\n \"userRoomAssignment.label.allExpertsSwitch\": \"Mostra tutti gli esperti\",\r\n \"userRoomAssignment.label.fixed\": \"fissati\",\r\n \"userRoomAssignment.label.fixedCorrectionExperts\": \"Esperti correzione fissati\",\r\n \"userRoomAssignment.label.fixedExperts\": \"Esperti fissati(2x)\",\r\n \"userRoomAssignment.label.fixedProctors\": \"Esperti di sorveglianza fissati(2x)\",\r\n \"userRoomAssignment.label.reserve\": \"Riserva\",\r\n \"userRoomAssignment.label.reserveCorrectionExperts\": \"Esperti correzione di reserva\",\r\n \"userRoomAssignment.label.reserveExperts\": \"Esperti riserva\",\r\n \"userRoomAssignment.label.reserveProctors\": \"Esperti di sorveglianza di riserva\",\r\n \"userRoomAssignment.label.roomFull\": \"La stanza è piena\",\r\n \"userRoomAssignment.label.roomOverload\": \"La stanza è sovraccarica\",\r\n \"userRoomAssignment.placeholder.selectFixedExperts\": \"Selezionare esperti fissi\",\r\n \"userRoomAssignment.placeholder.selectFixedProctors\": \"Selezionare esperti di sorveglianza\",\r\n \"userRoomAssignment.placeholder.selectReserveExperts\": \"Selezionare esperti di riserva\",\r\n \"userRoomAssignment.placeholder.selectReserveProctors\": \"Selezionare esperti di sorveglianza di riserva\",\r\n\"examSessionCandidateExamState.booked\": \"Prenotato\",\r\n\"examSessionCandidateModuleState.Cancelled\": \"Modulo annullato. È stata creata un'attività di sistema\",\r\n};\r\n","import _ from \"lodash\";\nimport { Action, Reducer } from \"redux\";\nimport { AppThunkAction } from \"../ApplicationStore\";\n\nexport interface ErrorMessage {\n error: string;\n data?: any;\n}\n\nexport interface NotificationsState {\n errors: ErrorMessage[];\n}\n\ninterface AddErrorsAction {\n type: \"ADD_ERRORS\";\n errors: ErrorMessage[];\n}\n\ninterface RemoveErrorsAction {\n type: \"REMOVE_ERRORS\";\n errors: string[];\n}\n\ntype KnownAction = AddErrorsAction | RemoveErrorsAction;\n\nexport const actionCreators = {\n addNotifications:\n (errors: string[], data?: any): AppThunkAction =>\n (dispatch) => {\n var errorMessages = errors.map((error) => ({\n error,\n data,\n }));\n dispatch({ type: \"ADD_ERRORS\", errors: errorMessages });\n },\n removeNotifications:\n (errors: string[]): AppThunkAction =>\n (dispatch) =>\n dispatch({ type: \"REMOVE_ERRORS\", errors }),\n};\n\nconst unloadedState = {\n errors: [],\n};\n\nexport const reducer: Reducer = (\n state: NotificationsState = unloadedState,\n incomingAction: Action\n) => {\n const action = incomingAction as KnownAction;\n\n switch (action.type) {\n case \"ADD_ERRORS\":\n return {\n ...state,\n errors: state.errors.concat(...action.errors),\n };\n case \"REMOVE_ERRORS\":\n return {\n ...state,\n errors: state.errors.filter((errorMessage) => !_.includes(action.errors, errorMessage.error)),\n };\n default:\n // The following line guarantees that every action in the KnownAction union has been covered by a case above\n // eslint-disable-next-line\n const exhaustiveCheck: never = action;\n }\n return state;\n};\n","import { isRejectedWithValue, Middleware, MiddlewareAPI } from \"@reduxjs/toolkit\";\nimport { store } from \"../\";\nimport { actionCreators } from \"../store/notifications/NotificationStore\";\nimport { TranslationKey } from \"../translations/TranslationKey\";\nimport { ApiResponse } from \"./CustomFetch\";\n\nconst addNotifications = (errors: TranslationKey[] | string[] | undefined, data?: any) => {\n const notificationErrors = errors !== undefined && errors.length !== undefined ? errors : [\"common.errorMessage\"];\n actionCreators.addNotifications(notificationErrors, data)(store.dispatch, store.getState);\n};\n\nexport const globalApiErrorHandler: Middleware = (api: MiddlewareAPI) => (next) => (action) => {\n if (isRejectedWithValue(action)) {\n let errors: TranslationKey[] | string[] | undefined = action.payload?.data?.errors;\n addNotifications(errors);\n }\n\n return next(action);\n};\n\nexport const globalErrorHandler = (response: any) => {\n if (!response) {\n return null;\n }\n if (response.status === 200) {\n return response;\n }\n\n const originalResponse = response.clone();\n const contentType: string = response.headers.get(\"content-type\") || \"\";\n const processResponse = typeof response.json === \"function\" && contentType.includes(\"json\");\n if (processResponse) {\n response\n .json()\n .then((response: ApiResponse) => {\n const { success, errors, data } = response;\n if (!success) {\n addNotifications(errors, data);\n }\n })\n .catch();\n }\n\n return originalResponse;\n};\n","import { globalErrorHandler } from \"./ErrorHandler\";\nimport { store } from \"../\";\nimport { fetchBaseQuery } from \"@reduxjs/toolkit/dist/query/react\";\nimport { SilentRequest } from \"@azure/msal-browser\";\n\nexport interface ApiResponse {\n success: boolean;\n data: T;\n errors?: string[];\n}\nexport const customFetch = (url: string | Request, init?: RequestInit, useToken=true): Promise => {\n const sessionsState = store.getState().sessionState;\n const fetchUrl = `${getApiUrl()}${url}`;\n const accounts = sessionsState.authClient?.getAllAccounts();\n const request = {\n scopes: sessionsState.appRegistration?.scopes ?? [],\n account: (accounts?.length ?? 0) > 0 ? accounts![0] : undefined\n } as SilentRequest;\n const fetchTask = sessionsState.authClient && useToken\n ? sessionsState.authClient\n .acquireTokenSilent(request)\n .then((response) => {\n if (!response.accessToken) {\n console.error(\"No access token retrieved\");\n }\n init = init || {};\n init.headers = init.headers || {};\n init.headers = { ...init.headers, Authorization: \"Bearer \" + response.accessToken };\n return window.fetch(fetchUrl, init);\n })\n .catch((err) => {\n console.log(\"Error acquireTokenSilent \", err);\n sessionsState.authClient\n ?.acquireTokenRedirect(request)\n .then(() => {})\n .catch((err) => console.log(\"Error acquireTokenRedirect \", err));\n })\n : window.fetch(fetchUrl, init);\n\n return fetchTask.then(globalErrorHandler);\n};\n\nexport const getBaseQuery = () => {\n return fetchBaseQuery({\n baseUrl: getApiUrl(),\n prepareHeaders,\n });\n};\n\nconst prepareHeaders = async (headers: Headers, api: { getState: () => unknown }): Promise => {\n const token = await getToken();\n headers.set(\"authorization\", `Bearer ${token}`);\n return headers;\n};\n\nconst getToken = async () => {\n const sessionsState = store.getState().sessionState;\n const accounts = sessionsState.authClient?.getAllAccounts();\n const request = {\n scopes: sessionsState.appRegistration?.scopes ?? [],\n account: (accounts?.length ?? 0) > 0 ? accounts![0]: undefined\n } as SilentRequest;\n if (sessionsState.authClient) {\n return await sessionsState.authClient\n .acquireTokenSilent(request)\n .then((response) => {\n return response.accessToken;\n })\n .catch((err) => {\n console.log(\"Error acquireTokenSilent \", err);\n sessionsState.authClient\n ?.acquireTokenRedirect(request)\n .then(() => {})\n .catch((err) => console.log(\"Error acquireTokenRedirect \", err));\n return \"\";\n });\n }\n return \"\";\n}\n\nconst getApiUrl = () => {\n return getBaseUrl() + \"/api/\";\n};\n\nconst getCurrentHost = (): string => {\n const host = window.location.host;\n const url = window.location.protocol + \"//\" + host;\n return url;\n};\n\nconst getBaseUrl = (): string => {\n if (!process.env.NODE_ENV || process.env.NODE_ENV === \"development\") {\n return \"https://localhost:51412\";\n }\n\n return getCurrentHost();\n};\n","import { createApi } from \"@reduxjs/toolkit/query/react\";\r\nimport { ApiResponse, getBaseQuery } from \"../CustomFetch\";\r\n\r\nexport const api = createApi({\r\n reducerPath: \"api\",\r\n baseQuery: getBaseQuery(),\r\n endpoints: () => ({}),\r\n});\r\n\r\nexport function transformApiResponse(apiResponse: ApiResponse): DataType {\r\n return apiResponse.data;\r\n}\r\n","import { CandidateViewModel } from \"../../model/CandidateViewModel\";\r\nimport { CandidateCourseViewModel } from \"../../model/courses/CandidateCourseViewModel\";\r\nimport { DocumentReferenceViewModel } from \"../../model/DocumentReferenceViewModel\";\r\nimport { ExamSessionViewModel } from \"../../model/ExamSessionViewModel\";\r\nimport { ExpertMeViewModel } from \"../../model/ExpertMeViewModel\";\r\nimport { CandidateMyModuleViewModel } from \"../../model/me/CandidateMyModuleViewModel\";\r\nimport { UploadDocumentsTaskDetailsViewModel } from \"../../model/personTask/UploadDocumentsTaskDetailsViewModel\";\r\nimport { PersonTaskIndex } from \"../../model/PersonTaskIndex\";\r\nimport { ApiResponse } from \"../CustomFetch\";\r\nimport { api, transformApiResponse } from \"./BaseApi\";\r\n\r\nexport const meUrl = \"Me\";\r\nconst meAsExpertUrl = `${meUrl}/Expert`;\r\n\r\nconst meApi = api\r\n .enhanceEndpoints({\r\n addTagTypes: [\r\n \"Me\",\r\n \"MeAsExpert\",\r\n \"MyCandidateExams\",\r\n \"MyModuleDocuments\",\r\n \"MyCourses\",\r\n \"MyExamSessions\",\r\n \"MyTasks\",\r\n ],\r\n })\r\n .injectEndpoints({\r\n endpoints: (builder) => ({\r\n getMe: builder.query({\r\n query: () => meUrl,\r\n transformResponse: transformApiResponse,\r\n providesTags: [\"Me\"],\r\n }),\r\n\r\n getMeAsExpert: builder.query({\r\n query: () => meAsExpertUrl,\r\n transformResponse: transformApiResponse,\r\n providesTags: [\"MeAsExpert\"],\r\n }),\r\n\r\n getMyModulesAndExamsForCandidate: builder.query({\r\n query: () => `${meUrl}/candidateModulesAndExams`,\r\n transformResponse: transformApiResponse,\r\n providesTags: [\"MyCandidateExams\"],\r\n }),\r\n\r\n getMyExamSessions: builder.query({\r\n query: () => `${meUrl}/examSessions`,\r\n transformResponse: transformApiResponse,\r\n providesTags: [\"MyExamSessions\"],\r\n }),\r\n\r\n getMyTasks: builder.query({\r\n query: () => `${meUrl}/tasks`,\r\n transformResponse: transformApiResponse,\r\n providesTags: [\"MyTasks\"],\r\n }),\r\n\r\n updateMe: builder.mutation, CandidateViewModel>({\r\n query: (candidate: CandidateViewModel) => ({\r\n url: meUrl,\r\n body: candidate,\r\n method: \"PUT\",\r\n }),\r\n invalidatesTags: [\"Me\"],\r\n }),\r\n\r\n updateMeAsExpert: builder.mutation, ExpertMeViewModel>({\r\n query: (expert: ExpertMeViewModel) => ({\r\n url: meAsExpertUrl,\r\n body: expert,\r\n method: \"PUT\",\r\n }),\r\n invalidatesTags: [\"MeAsExpert\"],\r\n }),\r\n\r\n getUploadDocumentsTaskDetails: builder.query<\r\n UploadDocumentsTaskDetailsViewModel,\r\n { taskId: string; examSessionId: string; moduleId: string }\r\n >({\r\n query: ({ taskId, examSessionId, moduleId }) =>\r\n `${meUrl}/task/uploadDocuments/${taskId}?moduleId=${moduleId}&examSessionId=${examSessionId}`,\r\n transformResponse: transformApiResponse,\r\n }),\r\n\r\n completeUploadDocumentsTask: builder.mutation<\r\n ApiResponse,\r\n { taskId: string; moduleId: string; examSessionId: string }\r\n >({\r\n query: ({ taskId, moduleId, examSessionId }) => ({\r\n url: `${meUrl}/task/uploadDocuments/${taskId}/complete?moduleId=${moduleId}&examSessionId=${examSessionId}`,\r\n method: \"POST\",\r\n }),\r\n }),\r\n\r\n listMyModuleDocuments: builder.query({\r\n query: ({ moduleId }) => `${meUrl}/moduleDocuments/${moduleId}`,\r\n transformResponse: transformApiResponse,\r\n providesTags: (_result, _error, { moduleId }) => [{ type: \"MyModuleDocuments\", id: moduleId }],\r\n }),\r\n\r\n addMyModuleDocument: builder.mutation, { moduleId: string; file: File }>({\r\n query: ({ moduleId, file }) => {\r\n const formData = new FormData();\r\n formData.append(\"file\", file);\r\n return {\r\n url: `${meUrl}/moduleDocuments/${moduleId}`,\r\n body: formData,\r\n method: \"POST\",\r\n };\r\n },\r\n invalidatesTags: (_result, _error, { moduleId }) => [{ type: \"MyModuleDocuments\", id: moduleId }],\r\n }),\r\n\r\n deleteMyModuleDocument: builder.mutation, { moduleId: string; fileName: string }>({\r\n query: ({ moduleId, fileName }) => ({\r\n url: `${meUrl}/moduleDocuments/${moduleId}/${fileName}`,\r\n method: \"DELETE\",\r\n }),\r\n invalidatesTags: (_result, _error, { moduleId }) => [{ type: \"MyModuleDocuments\", id: moduleId }],\r\n }),\r\n \r\n getCandidateCourses: builder.query({\r\n query: () => `${meUrl}/candidateCourse`,\r\n transformResponse: transformApiResponse,\r\n providesTags: [\"MyCourses\"],\r\n }),\r\n }),\r\n });\r\n\r\nexport const {\r\n endpoints,\r\n useGetMeQuery,\r\n useGetMeAsExpertQuery,\r\n useUpdateMeMutation,\r\n useUpdateMeAsExpertMutation,\r\n useGetMyModulesAndExamsForCandidateQuery,\r\n useGetMyExamSessionsQuery,\r\n useGetMyTasksQuery,\r\n useGetUploadDocumentsTaskDetailsQuery,\r\n useCompleteUploadDocumentsTaskMutation,\r\n useListMyModuleDocumentsQuery,\r\n useAddMyModuleDocumentMutation,\r\n useDeleteMyModuleDocumentMutation,\r\n useGetCandidateCoursesQuery,\r\n} = meApi;\r\n","export enum PersonType {\n Candidate = 'Candidate',\n Expert = 'Expert',\n Internal = 'Internal',\n Undefined = 'Undefined'\n}\n","import { Language, LocalStorageKey } from \"../data/constants\";\nimport { TranslationKey } from \"../translations/TranslationKey\";\nimport { ModuleIndex } from \"./Module\";\n\nexport enum CourseStatus {\n Draft = \"Draft\",\n Published = \"Published\",\n Archived = \"Archived\",\n}\n\nexport enum CourseCertificateValidity {\n Unlimited = \"Unlimited\",\n FiveYears = \"FiveYears\",\n}\n\nexport enum CourseType {\n None = \"None\",\n Intermediary = \"Intermediary\",\n Hve = \"Hve\",\n ProfessionalOrCicero = \"ProfessionalOrCicero\",\n Mindeststandard = \"Mindeststandard\",\n}\n\nexport const CourseTypeEnumValues = Object.values(CourseType).filter((ct) => ct !== CourseType.None);\n\nexport interface CourseIndex {\n id: string;\n nameDE: string;\n nameEN: string;\n nameFR: string;\n nameIT: string;\n certificateValidity: CourseCertificateValidity;\n status: CourseStatus;\n}\n\nexport interface CourseViewModel {\n id: string;\n nameDE: string;\n nameEN: string;\n nameFR: string;\n nameIT: string;\n certificateValidity: CourseCertificateValidity;\n status: CourseStatus;\n numberOfMandatoryModules: number;\n numberOfSelectionModules: number;\n numberOfProcessModules: number;\n modulesValidity: number | null;\n modulesRelevantForGrade: string[];\n modules: ModuleIndex[];\n type: CourseType;\n}\n\nexport interface RequiredCourse {\n isNameDEEmpty: boolean;\n isNameFREmpty: boolean;\n isNameENEmpty: boolean;\n isNameITEmpty: boolean;\n isModuleNumbersZero: boolean;\n isModuleListEmpty: boolean;\n isTypeEmpty: boolean;\n}\n\nexport const CourseStateTranslationKey: {\n [courseStatus in CourseStatus]: TranslationKey;\n} = {\n [CourseStatus.Draft]: \"common.status.draft\",\n [CourseStatus.Published]: \"common.status.published\",\n [CourseStatus.Archived]: \"common.status.archived\",\n};\n\nexport const CourseCertificateValidityTranslationKey: {\n [courseCertificationValidation in CourseCertificateValidity]: TranslationKey;\n} = {\n [CourseCertificateValidity.Unlimited]: \"course.field.certificateValidity.Unlimited\",\n [CourseCertificateValidity.FiveYears]: \"course.field.certificateValidity.FiveYears\",\n};\n\nexport const CourseTypeTranslationKey: {\n [courseType in CourseType]: TranslationKey;\n} = {\n [CourseType.Mindeststandard]: \"course.type.mindeststandard\",\n [CourseType.Intermediary]: \"course.type.intermediary\",\n [CourseType.Hve]: \"course.type.hve\",\n [CourseType.ProfessionalOrCicero]: \"course.type.cicero\",\n [CourseType.None]: \"examState.none\",\n};\n\nexport const CourseTypeGroupTranslationKey: {\n [courseType in CourseType]: TranslationKey;\n} = {\n [CourseType.Mindeststandard]: \"course.type.mindeststandardGroup\",\n [CourseType.Intermediary]: \"course.type.intermediaryGroup\",\n [CourseType.Hve]: \"course.type.hveGroup\",\n [CourseType.ProfessionalOrCicero]: \"course.type.ciceroGroup\",\n [CourseType.None]: \"examState.none\",\n};\n\nexport const GetLocalizedName = (course: CourseIndex): string => {\n const language = localStorage.getItem(LocalStorageKey.LastSelectedLanguageKey);\n\n switch (language) {\n case Language.EN:\n return course.nameEN;\n case Language.FR:\n return course.nameFR;\n case Language.IT:\n return course.nameIT;\n }\n\n return course.nameDE;\n};\n","import { SkipToken, skipToken } from \"@reduxjs/toolkit/dist/query\";\nimport _ from \"lodash\";\nimport React, { useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { Redirect, Route, RouteComponentProps, RouteProps } from \"react-router-dom\";\nimport { ApplicationState } from \".\";\nimport { useGetMeQuery } from \"./api/rtk/MeApi\";\nimport { CandidateViewModel } from \"./model/CandidateViewModel\";\nimport { PersonType } from \"./model/PersonType\";\nimport { SessionState } from \"./store/session/SessionState\";\nimport LinearProgress from \"@material-ui/core/LinearProgress\";\nimport { useIsAuthenticated, useMsal } from \"@azure/msal-react\";\n\ntype RouteComponent = React.StatelessComponent> | React.ComponentClass;\n\ntype PrivateRouteProps = {\n personTypesAllowed: PersonType[];\n} & SessionState &\n RouteProps;\n\nconst PrivateRoute: React.FunctionComponent = ({\n component,\n isUserAuthenticated,\n isLoadingAuth,\n personTypesAllowed,\n ...rest\n}) => {\n const [skipTokenState, setSkipTokenState] = useState(skipToken);\n const { data: me } = useGetMeQuery(skipTokenState);\n const [pathState, setPathState] = useState(rest.path);\n const firstRender = React.useRef(true);\n const isAuthenticated = useIsAuthenticated();\n const { inProgress} = useMsal();\n\n // That fixes the issue when a component dismounts and the useGetMeQuery is still pending throwing an error.\n React.useEffect(() => {\n if ((pathState !== rest.path || firstRender.current) && inProgress === 'none'){\n setSkipTokenState(undefined);\n setPathState(rest.path);\n firstRender.current = false;\n return;\n }\n }, [rest.path, pathState, inProgress, me]);\n\n const renderFn =\n (Component?: RouteComponent, me?: CandidateViewModel) => (props: RouteComponentProps) => {\n if (!Component || !me ) {\n return null;\n }\n const isInAllowedUserTypes = _.includes(personTypesAllowed, me?.type || PersonType.Undefined);\n\n if (inProgress !== 'none') {\n return ;\n }\n\n if (isAuthenticated && isInAllowedUserTypes) {\n return ;\n }\n\n const routeAfterLogin = props.location ? `${props.location.pathname}${props.location.search ?? \"\"}` : \"/\";\n\n const redirectProps = {\n to: {\n pathname: `/login`,\n state: { from: routeAfterLogin },\n },\n };\n\n return ;\n };\n\n return ;\n};\n\nexport default connect((state: ApplicationState) => state.sessionState, null, null, { pure: false })(PrivateRoute);\n","import { orderBy } from \"lodash\";\nimport { CandidateViewModel } from \"../../model/CandidateViewModel\";\nimport { CandidateCourseViewModel } from \"../../model/courses/CandidateCourseViewModel\";\nimport { ApiResponse } from \"../CustomFetch\";\nimport { api, transformApiResponse } from \"./BaseApi\";\n\nconst getCandidateUrl = (id?: string) => \"/Candidate\" + (id === undefined ? \"\" : `/${id}`);\n\nconst candidatesApi = api.enhanceEndpoints({ addTagTypes: [\"Candidates\", \"CandidateCourses\"] }).injectEndpoints({\n endpoints: (builder) => ({\n getCandidates: builder.query({\n query: () => getCandidateUrl(),\n transformResponse: (response: ApiResponse) =>\n orderBy(response.data, (candidate) => candidate.lastName.toLowerCase()),\n providesTags: (result) =>\n result\n ? [...result.map(({ id }) => ({ type: \"Candidates\" as const, id })), { type: \"Candidates\", id: \"LIST\" }]\n : [{ type: \"Candidates\", id: \"LIST\" }],\n }),\n getCandidate: builder.query({\n query: getCandidateUrl,\n transformResponse: (response: ApiResponse) => response.data,\n providesTags: (_result, _error, arg) => [{ type: \"Candidates\", id: arg }],\n }),\n deleteCandidate: builder.mutation, string>({\n query: (id) => ({\n url: getCandidateUrl(id),\n method: \"DELETE\",\n }),\n invalidatesTags: [{ type: \"Candidates\", id: \"LIST\" }],\n }),\n createCandidate: builder.mutation, CandidateViewModel>({\n query: (candidate: CandidateViewModel) => ({\n url: getCandidateUrl(),\n body: candidate,\n headers: { \"Content-Type\": \"application/json\" },\n method: \"POST\",\n }),\n invalidatesTags: [{ type: \"Candidates\", id: \"LIST\" }],\n }),\n updateCandidate: builder.mutation, CandidateViewModel>({\n query: (candidate: CandidateViewModel) => ({\n url: getCandidateUrl(),\n body: candidate,\n headers: { \"Content-Type\": \"application/json\" },\n method: \"PUT\",\n }),\n invalidatesTags: (_result, _error, arg) => [\n { type: \"Candidates\", id: \"LIST\" },\n { type: \"Candidates\", id: arg.id },\n ],\n }),\n exportDebtorNumber: builder.mutation, string>({\n query: (id) => ({\n url: `${getCandidateUrl(id)}/exportDebtorNumber`,\n method: \"POST\",\n }),\n }),\n\n getCandidateCoursesInternal: builder.query({\n query: (id) => `${getCandidateUrl(id)}/courses`,\n transformResponse: transformApiResponse,\n providesTags: (_result, _error, arg) => [{ type: \"CandidateCourses\", id: arg }],\n }),\n\n getCandidatesValid: builder.query({\n query: () => `${getCandidateUrl()}/valid`,\n transformResponse: (response: ApiResponse) =>\n orderBy(response.data, (candidate) => candidate.lastName.toLowerCase()),\n providesTags: (result) =>\n result\n ? [...result.map(({ id }) => ({ type: \"Candidates\" as const, id })), { type: \"Candidates\", id: \"LIST\" }]\n : [{ type: \"Candidates\", id: \"LIST\" }],\n }),\n }),\n});\n\nexport const {\n endpoints,\n useGetCandidatesQuery,\n useGetCandidateQuery,\n useDeleteCandidateMutation,\n useCreateCandidateMutation,\n useUpdateCandidateMutation,\n useExportDebtorNumberMutation,\n useGetCandidateCoursesInternalQuery,\n useGetCandidatesValidQuery,\n} = candidatesApi;\n","import { api, transformApiResponse } from \"./BaseApi\";\r\nimport { ExamTemplateIndex } from \"../../model/Exam\";\r\n\r\nconst getExamUrl = (id?: string) => \"/Exam\" + (id === undefined ? \"\" : `/${id}`);\r\n\r\nconst examsApi = api.enhanceEndpoints({ addTagTypes: [\"Exams\"] }).injectEndpoints({\r\n endpoints: (builder) => ({\r\n getPublishedExams: builder.query({\r\n // Keep cache for 1 second (\"disable\") until all exam APIs will be migrated to RTK Query.\r\n keepUnusedDataFor: 1,\r\n query: () => `${getExamUrl()}/published`,\r\n transformResponse: transformApiResponse,\r\n providesTags: (result) =>\r\n result\r\n ? [...result.map(({ id }) => ({ type: \"Exams\" as const, id })), { type: \"Exams\", id: \"PUBLISHED_LIST\" }]\r\n : [{ type: \"Exams\", id: \"PUBLISHED_LIST\" }],\r\n }),\r\n }),\r\n});\r\n\r\nexport const { endpoints, useGetPublishedExamsQuery } = examsApi;\r\n","import { IntlShape } from \"react-intl\";\nimport { TranslationKey } from \"./TranslationKey\";\n\nexport const GetTranslation = (intl: IntlShape, key: TranslationKey) => {\n if (!key) {\n console.warn(\"GetTranslation: invalid 'key' parameter.\");\n return \"\";\n }\n\n const containsSeveralKeys = key.indexOf(\"{\") >= 0;\n if (!containsSeveralKeys) {\n return intl.formatMessage({ id: key });\n }\n\n const keysToTranslate = key.match(/({[\\w-\\s.äöüÄÖÜß]+})/g) || [];\n\n let translatedText = \"\";\n keysToTranslate.forEach((key) => {\n const keyWithoutBraces = key.replace(\"{\", \"\").replace(\"}\", \"\");\n translatedText = translatedText.replace(key, intl.formatMessage({ id: keyWithoutBraces }));\n });\n\n return translatedText;\n};\n","import { en } from './en';\n\nexport type TranslationKeys = typeof en;\n\nexport type TranslationKey = keyof TranslationKeys;\n\nexport const isTranslationKey = (key: string) => key in en;\n","export const DateFormat = \"DD.MM.YYYY\";\n\nconst birthdateOffset = 30;\nconst humanAgeOffset = 100;\n\nexport const getBirthdateDefaultValue = () => {\n const defaultDate = new Date();\n defaultDate.setFullYear(defaultDate.getFullYear() - birthdateOffset);\n return defaultDate;\n};\n\nexport const getMinimumValidDate = () => {\n const minimumDate = new Date();\n minimumDate.setFullYear(minimumDate.getFullYear() - humanAgeOffset);\n return minimumDate;\n};\n\nexport const areDatesEqual = (date1: Date, date2: Date) => {\n const firstDate = new Date(date1);\n firstDate.setHours(0, 0, 0, 0);\n\n const secondDate = new Date(date2);\n secondDate.setHours(0, 0, 0, 0);\n\n return firstDate.getTime() === secondDate.getTime();\n};\n\nexport const isDateInArray = (date: Date, datesArray: Date[]) => {\n for (var i = 0; i < datesArray.length; i++) {\n if (date.getTime() === datesArray[i].getTime()) {\n return true;\n }\n }\n return false;\n};\n\nexport const getValidDate = (date: Date) => {\n if (new Date(date).getTime() < getMinimumValidDate().getTime()) {\n return null;\n }\n\n return date;\n};\n","import { api } from \"./BaseApi\";\r\nimport { CountryViewModel } from \"../../model/CountryViewModel\";\r\nimport { ApiResponse } from \"../CustomFetch\";\r\n\r\nconst countriesApi = api.enhanceEndpoints({ addTagTypes: [\"Countries\"] }).injectEndpoints({\r\n endpoints: (builder) => ({\r\n getCountries: builder.query({\r\n query: () => \"/Country\",\r\n transformResponse: (response: ApiResponse) => response.data,\r\n providesTags: [{ type: \"Countries\", id: \"LIST\" }],\r\n }),\r\n }),\r\n});\r\n\r\nexport const { endpoints, useGetCountriesQuery } = countriesApi;\r\n","import { Grid, GridSize } from \"@material-ui/core\";\r\nimport TextField from \"@material-ui/core/TextField\";\r\nimport { UseAutocompleteProps } from \"@material-ui/lab\";\r\nimport Autocomplete from \"@material-ui/lab/Autocomplete\";\r\nimport React, { FocusEventHandler } from \"react\";\r\n\r\ninterface CustomAutocompleteProps<\r\n T,\r\n Multiple extends boolean | undefined,\r\n DisableClearable extends boolean | undefined,\r\n FreeSolo extends boolean | undefined\r\n> extends UseAutocompleteProps {\r\n xs?: GridSize;\r\n sm?: GridSize;\r\n md?: GridSize;\r\n lg?: GridSize;\r\n xl?: GridSize;\r\n label: string;\r\n name?: string;\r\n required?: boolean;\r\n error?: boolean;\r\n helperText?: string;\r\n onBlur?: FocusEventHandler;\r\n disabled?: boolean;\r\n}\r\n\r\nexport const CustomAutocomplete = <\r\n T,\r\n Multiple extends boolean | undefined = undefined,\r\n DisableClearable extends boolean | undefined = undefined,\r\n FreeSolo extends boolean | undefined = undefined\r\n>(\r\n props: CustomAutocompleteProps\r\n) => {\r\n const { xs, sm, md, lg, xl, label, name, required, error, helperText, onBlur, ...autoCompleteProps } = props;\r\n\r\n return (\r\n \r\n (\r\n \r\n )}\r\n />\r\n \r\n );\r\n};\r\n","import * as React from \"react\";\r\nimport { FC, useEffect, useState } from \"react\";\r\nimport { Language, LocalStorageKey } from \"../../../data/constants\";\r\nimport { CustomAutocomplete } from \"../customAutocomplete/CustomAutocomplete\";\r\nimport { IBaseSelectProps } from \"./IBaseSelectProps\";\r\nimport { IOption } from \"./IOption\";\r\n\r\nexport interface IMultiLanguageOption {\r\n labelDE: string;\r\n labelEN: string;\r\n labelFR: string;\r\n labelIT: string;\r\n value: string;\r\n}\r\n\r\ninterface IMultiLanguageSelectProps extends IBaseSelectProps {\r\n label: string;\r\n defaultValue?: string;\r\n options: IMultiLanguageOption[];\r\n}\r\n\r\nexport const MultiLanguageSelect: FC = ({\r\n options,\r\n defaultValue,\r\n value,\r\n onChange = (_value?: string) => { },\r\n ...props\r\n}) => {\r\n const [inputOptions, setInputOptions] = useState([]);\r\n const language = localStorage.getItem(LocalStorageKey.LastSelectedLanguageKey);\r\n\r\n useEffect(() => {\r\n var unsortedOptions = options.map((option) => {\r\n let label = option.labelDE;\r\n switch (language) {\r\n case Language.EN:\r\n label = option.labelEN;\r\n break;\r\n case Language.FR:\r\n label = option.labelFR;\r\n break;\r\n case Language.IT:\r\n label = option.labelIT;\r\n break;\r\n }\r\n\r\n return {\r\n label: label,\r\n value: option.value,\r\n };\r\n });\r\n const sortedOptions = unsortedOptions.sort((a, b) => a.label.localeCompare(b.label));\r\n setInputOptions(sortedOptions);\r\n }, [options, language]);\r\n\r\n const defaultOption = inputOptions.find((option) => option.value === defaultValue) || null;\r\n const selectedOption = inputOptions.find((option) => option.value === value) || null;\r\n return (\r\n option.label}\r\n defaultValue={defaultOption}\r\n value={selectedOption}\r\n onChange={(_event, value) => onChange(value?.value)}\r\n />\r\n );\r\n};\r\n","import * as React from \"react\";\r\nimport { useEffect } from \"react\";\r\nimport { useGetCountriesQuery } from \"../../../api/rtk/CountryApi\";\r\nimport { CountryViewModel } from \"../../../model/CountryViewModel\";\r\nimport { IBaseSelectProps } from \"./IBaseSelectProps\";\r\nimport { MultiLanguageSelect } from \"./MultiLanguageSelect\";\r\n\r\ninterface ICountrySelectProps extends IBaseSelectProps {\r\n label: string;\r\n defaultValue?: string;\r\n}\r\n\r\nexport const CountrySelect: React.FunctionComponent = (props) => {\r\n const [countries, setCountries] = React.useState(new Array());\r\n const { data: fetchedCountries } = useGetCountriesQuery();\r\n\r\n useEffect(() => {\r\n if (fetchedCountries !== undefined) {\r\n setCountries(fetchedCountries);\r\n }\r\n }, [fetchedCountries]);\r\n\r\n return ;\r\n};\r\n","import React from 'react';\nimport { Grid, TextField } from '@material-ui/core';\n\ntype columnCount = boolean | \"auto\" | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | undefined;\n\ninterface IGridTextFieldProps {\n label: string,\n xs?: columnCount,\n sm?: columnCount,\n md?: columnCount,\n lg?: columnCount,\n xl?: columnCount,\n onChange?: (event: React.ChangeEvent) => void,\n value?: any,\n readOnly?: any,\n required?: boolean,\n maxLength?: number,\n error?: boolean\n}\n\nconst GridTextField: React.FC = props => {\n const { label, onChange, value, xs, sm, md, lg, xl, required, readOnly, maxLength, error } = props;\n\n return (\n \n \n \n );\n};\n\nexport default GridTextField;\n","export const isInvalidZipCode = (zipCode: string | undefined, country: string | undefined) => {\n if (!country) {\n return false;\n }\n\n if (!zipCode || zipCode.length === 0) {\n return false;\n }\n\n if (country === \"Deutschland\" || country === \"Frankreich\" || country === \"Italien\") {\n let isValid = /^(\\d){5}$/.test(zipCode);\n if (!isValid) {\n return true;\n }\n }\n\n if (country === \"Schweiz\" || country === \"Österreich\" || country === \"Liechtenstein\") {\n let isValid = /^(\\d){4}$/.test(zipCode);\n if (!isValid) {\n return true;\n }\n }\n};\n","import React from \"react\";\r\nimport { useIntl } from \"react-intl\";\r\nimport ZipCodesAndCities from \"../../data/zipCodes.json\";\r\nimport { GetTranslation } from \"../../translations/GetTranslation\";\r\nimport { CountrySelect } from \"./customAutocomplete/CountrySelect\";\r\nimport GridTextField from \"./customGrid/GridTextField\";\r\nimport { isInvalidZipCode } from \"../../utils/ZipCodeUtils\";\r\n\r\nexport interface AddressFieldsValues {\r\n street?: string;\r\n streetNumber?: string;\r\n zipCode?: string;\r\n city?: string;\r\n country?: string;\r\n}\r\n\r\nexport interface AddressFieldsValidation {\r\n isStreetEmpty: boolean;\r\n isStreetNumberEmpty: boolean;\r\n isZipCodeEmpty: boolean;\r\n isCityEmpty: boolean;\r\n isCountryEmpty: boolean;\r\n}\r\n\r\ntype AddressFieldsProps = {\r\n fieldValues: AddressFieldsValues;\r\n fieldsValidation?: AddressFieldsValidation;\r\n handleChange: (change: Partial) => void;\r\n};\r\n\r\nexport function AddressFields({ fieldValues, fieldsValidation, handleChange }: AddressFieldsProps) {\r\n const intl = useIntl();\r\n\r\n const handleZipCodeChange = (event: React.ChangeEvent) => {\r\n const zipCode = event.target.value;\r\n const match = ZipCodesAndCities.find((pair) => pair.zipCode === zipCode);\r\n handleChange({\r\n zipCode,\r\n city: match ? match.city : \"\",\r\n });\r\n };\r\n\r\n const handleCountryChange = (value?: string) => handleChange({ country: value });\r\n\r\n return (\r\n <>\r\n handleChange({ street: event.target.value })}\r\n value={fieldValues.street || \"\"}\r\n />\r\n handleChange({ streetNumber: event.target.value })}\r\n value={fieldValues.streetNumber || \"\"}\r\n maxLength={9}\r\n />\r\n \r\n handleChange({ city: event.target.value })}\r\n value={fieldValues.city || \"\"}\r\n />\r\n \r\n \r\n );\r\n}\r\n","import { FormControlLabel, Switch } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport React from \"react\";\n\ninterface CustomSwitchProps {\n label?: React.ReactNode;\n onChange?: (checked: boolean) => void;\n value: boolean;\n customCssClass?: string;\n disabled?: boolean;\n}\n\nconst useStyles = makeStyles({\n label: {\n marginLeft: 0,\n height: 48,\n },\n});\n\nexport const CustomSwitch: React.FunctionComponent = ({\n onChange,\n customCssClass,\n value,\n label,\n disabled,\n}) => {\n const handleSwitchChange = (event: React.ChangeEvent, checked: boolean) => onChange!(checked);\n const classes = useStyles();\n\n return (\n }\n label={label}\n labelPlacement=\"start\"\n />\n );\n};\n\nCustomSwitch.defaultProps = {\n onChange: () => {},\n} as Partial;\n\nexport default CustomSwitch;\n","import { Grid, Hidden } from \"@material-ui/core\";\nimport React from \"react\";\n\ntype columnCount = boolean | \"auto\" | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | undefined;\n\ninterface FormGridCellProps {\n children?: JSX.Element;\n size?: \"small\" | \"medium\" | \"half\" | \"full\" | \"fill\" | \"third\" | \"fourth\" | \"sixth\" | \"wide\";\n className?: string;\n}\n\nconst FormGridCell: React.FC = (props) => {\n const { children, className, size } = props;\n let xs: columnCount, sm: columnCount, md: columnCount, lg: columnCount, xl: columnCount;\n\n if (size === \"small\") {\n xs = 4;\n md = 3;\n lg = 2;\n xl = 1;\n } else if (size === \"half\") {\n xs = 12;\n md = 4;\n lg = 3;\n xl = 2;\n } else if (size === \"medium\") {\n xs = 8;\n md = 5;\n lg = 4;\n xl = 3;\n } else if (size === \"full\") {\n xs = 12;\n md = 8;\n lg = 6;\n xl = 4;\n } else if (size === \"fill\") {\n xs = 12;\n md = 4;\n lg = 6;\n xl = 8;\n } else if (size === \"third\") {\n xs = 12;\n sm = 6;\n md = 4;\n lg = 4;\n xl = 4;\n } else if (size === \"fourth\") {\n xs = 12;\n sm = 6;\n md = 3;\n lg = 3;\n xl = 3;\n } else if (size === \"sixth\") {\n xs = 12;\n sm = 6;\n md = 2;\n lg = 2;\n xl = 2;\n } else if (size === \"wide\") {\n xs = 12;\n sm = 12;\n md = 12;\n lg = 12;\n xl = 12;\n }\n\n const grid = (\n \n {children}\n \n );\n return children ? grid : {grid};\n};\n\nFormGridCell.defaultProps = {\n size: \"medium\",\n} as Partial;\n\nexport default FormGridCell;\n","import React from \"react\";\nimport { useIntl } from \"react-intl\";\nimport { SwissGermanLocale } from \"../../data/constants\";\nimport { GetTranslation } from \"../../translations/GetTranslation\";\n\ntype LastModificationInfoProps = {\n lastModifiedBy: string | undefined;\n lastModifiedOnUtc: string | undefined;\n};\n\nexport default function LastModificationInfo({ lastModifiedBy, lastModifiedOnUtc }: LastModificationInfoProps) {\n const intl = useIntl();\n\n if (!lastModifiedBy && !lastModifiedOnUtc) {\n return null;\n }\n\n const modifiedOn = lastModifiedOnUtc\n ? `${GetTranslation(intl, \"common.lastModification.on\")} ${new Date(lastModifiedOnUtc).toLocaleString(\n SwissGermanLocale\n )} `\n : \"\";\n\n const modifiedBy = lastModifiedBy ? `${GetTranslation(intl, \"common.lastModification.by\")} ${lastModifiedBy}` : \"\";\n\n return (\n \n {GetTranslation(intl, \"common.lastModification\")} {modifiedOn}\n {modifiedBy}\n \n );\n}\n","import { Button, Tooltip, Typography } from '@material-ui/core';\nimport { createStyles, makeStyles } from '@material-ui/styles';\nimport React from 'react';\n\nconst useStyles = makeStyles(theme => (createStyles({\n root: {\n marginLeft: '7px',\n height: 35,\n boxShadow: 'none'\n },\n})));\n\ninterface ICustomButtonProps {\n tooltip: NonNullable,\n onClick: (event: any) => void,\n disabled?: boolean,\n className?: string,\n internalButtonClassName?: string;\n color?: \"inherit\" | \"primary\" | \"secondary\" | \"default\" | undefined;\n}\n\nconst CustomButton: React.FC = ({ children, internalButtonClassName, color, className, onClick, tooltip, disabled }) => {\n const cssClasses = useStyles({});\n\n return (\n \n \n \n \n \n \n \n );\n};\n\nCustomButton.defaultProps = {\n disabled: false,\n color: \"primary\"\n} as Partial;\n\nexport default CustomButton;\n","import { Box, createStyles, makeStyles } from \"@material-ui/core\";\nimport React, { FC } from \"react\";\n\nconst useStyles = makeStyles(() =>\n createStyles({\n root: {\n display: \"flex\",\n justifyContent: \"flex-end\",\n alignItems: \"center\",\n height: \"max-content\",\n flexWrap: \"wrap\",\n },\n })\n);\n\nconst RightButtonArea: FC = ({ children }) => {\n const cssClasses = useStyles({});\n return {children};\n};\n\nexport default RightButtonArea;\n","import { api } from \"./BaseApi\";\r\nimport { CompanyViewModel } from \"../../model/CompanyViewModel\";\r\nimport { ApiResponse } from \"../CustomFetch\";\r\n\r\nconst companiesApi = api.enhanceEndpoints({ addTagTypes: [\"Companies\"] }).injectEndpoints({\r\n endpoints: (builder) => ({\r\n getCompanies: builder.query({\r\n query: () => \"/Company\",\r\n transformResponse: (response: ApiResponse) => response.data,\r\n providesTags: [{ type: \"Companies\", id: \"LIST\" }],\r\n }),\r\n }),\r\n});\r\n\r\nexport const { endpoints, useGetCompaniesQuery } = companiesApi;\r\n","import * as React from \"react\";\r\nimport { FC, useEffect, useState } from \"react\";\r\nimport { useGetCompaniesQuery } from \"../../../api/rtk/CompanyApi\";\r\nimport { CompanyViewModel } from \"../../../model/CompanyViewModel\";\r\nimport { IBaseSelectProps } from \"./IBaseSelectProps\";\r\nimport { MultiLanguageSelect } from \"./MultiLanguageSelect\";\r\n\r\ninterface ICompanySelectProps extends IBaseSelectProps {\r\n label: string;\r\n defaultValue?: string;\r\n}\r\n\r\nexport const CompanySelect: FC = (props) => {\r\n const [companies, setCompanies] = useState([]);\r\n const { data: fetchedCompanies } = useGetCompaniesQuery();\r\n\r\n useEffect(() => {\r\n if (fetchedCompanies !== undefined) {\r\n setCompanies(fetchedCompanies);\r\n }\r\n }, [fetchedCompanies]);\r\n\r\n return ;\r\n};\r\n","import * as React from \"react\";\r\nimport { FC, useEffect, useState } from \"react\";\r\nimport { useIntl } from \"react-intl\";\r\nimport { UserGender, UserGenderLabels } from \"../../../data/constants\";\r\nimport { GetTranslation } from \"../../../translations/GetTranslation\";\r\nimport { CustomAutocomplete } from \"./CustomAutocomplete\";\r\nimport { IBaseSelectProps } from \"./IBaseSelectProps\";\r\nimport { IOption } from \"./IOption\";\r\n\r\nexport const GenderSelect: FC> = ({\r\n value,\r\n onChange = (_value?: string) => {},\r\n onBlur,\r\n ...props\r\n}) => {\r\n const intl = useIntl();\r\n const [options, setOptions] = useState([]);\r\n\r\n useEffect(() => {\r\n const genderOptions: IOption[] = Object.values(UserGender).map((gender) => ({\r\n value: gender,\r\n label: GetTranslation(intl, UserGenderLabels(gender)),\r\n }));\r\n setOptions(genderOptions);\r\n }, [intl]);\r\n\r\n const selectedOption = options.find((option) => option.value === value) || null;\r\n return (\r\n option.label}\r\n value={selectedOption}\r\n onChange={(_event, value) => onChange(value?.value)}\r\n onBlur={onBlur}\r\n />\r\n );\r\n};\r\n","import * as React from \"react\";\r\nimport { FC } from \"react\";\r\nimport { useIntl } from \"react-intl\";\r\nimport Places from \"../../../data/placeOfOrigin.json\";\r\nimport { GetTranslation } from \"../../../translations/GetTranslation\";\r\nimport { CustomAutocomplete } from \"./CustomAutocomplete\";\r\nimport { IBaseSelectProps } from \"./IBaseSelectProps\";\r\n\r\nexport interface IPlaceOfOriginOption {\r\n value: string;\r\n canton: string;\r\n}\r\n\r\ninterface IPlaceOfOriginSelectProps extends IBaseSelectProps {\r\n name?: string;\r\n defaultValue?: string;\r\n}\r\n\r\nconst options: IPlaceOfOriginOption[] = Places.map((place) => ({\r\n value: place.value,\r\n canton: place.canton,\r\n}));\r\n\r\nexport const PlaceOfOriginSelect: FC = ({\r\n defaultValue,\r\n value,\r\n onChange = (_value: IPlaceOfOriginOption | null) => {},\r\n onBlur,\r\n ...props\r\n}) => {\r\n const intl = useIntl();\r\n const defaultOption =\r\n defaultValue === undefined ? undefined : options.find((option) => option.value === defaultValue) || null;\r\n const selectedOption = value === undefined ? undefined : options.find((option) => option.value === value) || null;\r\n return (\r\n option.value}\r\n defaultValue={defaultOption}\r\n value={selectedOption}\r\n onChange={(_event, value) => onChange(value)}\r\n onBlur={onBlur}\r\n />\r\n );\r\n};\r\n","import {\n Checkbox,\n ListItem,\n ListItemText,\n withStyles,\n WithStyles\n} from '@material-ui/core';\nimport * as React from 'react';\n\ninterface IListItemProps extends WithStyles {\n isChecked: boolean;\n name: string;\n onCheckItem: (name: string, isChecked: boolean) => void;\n readOnly?: boolean;\n}\n\nconst styles = {\n listItem: {\n paddingTop: 0,\n paddingBottom: 0\n },\n checkbox: { zIndex: -1 }\n};\n\nconst CheckboxListItem: React.FC = props => {\n const { classes, isChecked, name, onCheckItem } = props;\n\n return (\n {\n onCheckItem(name, isChecked);\n }} className={classes.listItem}>\n \n {name}\n \n );\n}\n\nexport default withStyles(styles)(CheckboxListItem);\n","import { List, FormLabel } from '@material-ui/core';\nimport * as React from 'react';\nimport CheckboxListItem from './CheckboxListItem';\n\ninterface ICheckboxListProps {\n label: string;\n availableItems: string[];\n checkedItems: string[];\n onChange?: (checkedItems: string[]) => void;\n readOnly?: boolean;\n required?: boolean;\n}\n\nclass CheckboxList extends React.Component {\n public render(): JSX.Element {\n const { label, availableItems, required, readOnly, checkedItems } = this.props;\n\n return (\n \n {label}\n {availableItems.map((item) => {\n return (\n -1}\n onCheckItem={this.handleCheck}\n key={item}\n name={item}\n />\n );\n })\n }\n \n );\n }\n\n private handleCheck = (name: string, isChecked: boolean) => {\n const { checkedItems, onChange } = this.props;\n\n const willBeChecked = !isChecked;\n const changedItems: string[] = willBeChecked ? checkedItems.concat(name) : checkedItems.filter((x) => x !== name);\n\n this.setState({\n checkedItems: changedItems\n }, () => {\n if (onChange) {\n onChange(changedItems);\n }\n });\n }\n}\n\nexport default CheckboxList;\n","import React from 'react';\nimport CheckboxList from './CheckboxList';\n\ninterface LanguageCheckboxListProps {\n label: string;\n checkedLanguages: string[];\n onSelectedLanguagesChanged?: (checkedItems: string[]) => void;\n readOnly?: boolean,\n availableLanguages?: string[];\n required?: boolean;\n}\n\nconst languages = [\"DE\", \"FR\", \"IT\"];\n\nconst LanguageCheckboxList: React.FunctionComponent = ({ availableLanguages, label, readOnly, onSelectedLanguagesChanged, checkedLanguages, required }) => {\n return (\n \n );\n}\n\nLanguageCheckboxList.defaultProps = {\n onSelectedLanguagesChanged: () => { },\n availableLanguages: languages\n} as Partial;\n\nexport default LanguageCheckboxList;\n","import { createStyles, makeStyles } from \"@material-ui/core\";\nimport Button from \"@material-ui/core/Button\";\nimport Dialog from \"@material-ui/core/Dialog\";\nimport DialogActions from \"@material-ui/core/DialogActions\";\nimport DialogContent from \"@material-ui/core/DialogContent\";\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Close from \"@material-ui/icons/Close\";\nimport React from \"react\";\nimport Draggable from \"react-draggable\";\n\nconst useStyles = makeStyles(() =>\n createStyles({\n overflowYVisible: { overflowY: \"visible\" },\n titleWrapper: {\n display: \"flex\",\n alignItems: \"start\",\n },\n title: {\n flex: 1,\n paddingRight: 0,\n cursor: \"move\",\n },\n closeButton: {\n margin: \"0.5rem\",\n },\n })\n);\n\nfunction PaperComponent(props: any) {\n const cssClasses = useStyles({});\n\n return (\n \n \n \n );\n}\n\ninterface ICustomDraggableDialogProps {\n title: React.ReactNode;\n content: React.ReactNode;\n isOpen: boolean;\n cancelText: React.ReactNode;\n acceptText: React.ReactNode;\n onCancel?: () => void;\n onAccept?: () => void;\n hideActions?: boolean;\n onClose?: () => void;\n acceptDisabled?: boolean;\n}\n\nconst CustomDraggableDialog: React.FC = (props) => {\n const cssClasses = useStyles({});\n\n const { onClose, hideActions, title, content, isOpen, cancelText, acceptText, onCancel, onAccept, acceptDisabled } =\n props;\n\n return (\n
\n \n
\n \n {title}\n \n {onClose ? (\n \n \n \n ) : null}\n
\n {content}\n {!hideActions && (\n \n \n \n \n )}\n \n
\n );\n};\n\nCustomDraggableDialog.defaultProps = {\n onCancel: () => {},\n onAccept: () => {},\n} as Partial;\n\nexport default CustomDraggableDialog;\n","import DateFnsUtils from \"@date-io/date-fns\";\nimport MomentUitls from \"@date-io/moment\";\nimport { KeyboardDatePicker, MuiPickersUtilsProvider } from \"@material-ui/pickers\";\nimport moment from \"moment-timezone\";\nimport React from \"react\";\nimport { DateFormat } from \"../../../utils/Dates\";\n\ninterface DatePickerProps {\n label: React.ReactNode;\n value?: Date | null;\n onChange: (date: Date | null) => void;\n required?: boolean;\n shouldDisableDate?: (date: Date | null) => boolean;\n disablePast?: boolean;\n error?: boolean;\n onBlur?: () => void;\n disabled?: boolean;\n}\n\nconst DatePicker: React.FunctionComponent = ({\n label,\n value,\n onChange,\n required,\n disablePast,\n shouldDisableDate,\n error,\n onBlur,\n disabled,\n}) => {\n moment.tz.setDefault(\"UTC\");\n\n // date-fns is still used somehow to make it work\n const fnsUtils = DateFnsUtils;\n fnsUtils.toString();\n\n return (\n \n \n \n );\n};\n\nexport default DatePicker;\n","import { TextField } from \"@material-ui/core\";\nimport React, { useEffect } from \"react\";\n\nexport interface RegexTextFieldProps {\n label: React.ReactNode;\n onChange?: (event: React.ChangeEvent) => void;\n onChangeIsValid?: (isEmailValid: boolean) => void;\n value: string;\n required?: boolean;\n error?: boolean;\n disabled?: boolean;\n placeholder?: string;\n variant?: \"standard\" | \"filled\" | \"outlined\" | undefined;\n}\n\nconst RegexTextField: React.FC = ({\n label,\n onChange,\n onChangeIsValid,\n required,\n value,\n validationRegex,\n error,\n disabled,\n placeholder,\n variant,\n}) => {\n const isValid = value.length < 1 ? !required : validationRegex.test(value);\n\n useEffect(() => {\n onChangeIsValid!(isValid);\n }, [isValid, onChangeIsValid]);\n\n return (\n \n );\n};\n\nRegexTextField.defaultProps = {\n onChangeIsValid: () => {},\n required: false,\n} as Partial;\n\nexport default RegexTextField;\n","import React from 'react';\nimport RegexTextField, { RegexTextFieldProps } from './RegexTextField';\n\nconst regexp = new RegExp(/^(\\d{3}).(\\d{4}).(\\d{4}).(\\d{2})$/);\n\nconst AhvNoTextField: React.FC = ({ label, onChange, onChangeIsValid, required, value, disabled }) => (\n \n);\n\nexport default AhvNoTextField;\n","import React from 'react';\nimport RegexTextField, { RegexTextFieldProps } from './RegexTextField';\n\nconst regexp = new RegExp(/^\\d{5,}$/);\n\nconst CiceroNoTextField: React.FC = ({ label, onChange, onChangeIsValid, required, value }) => (\n \n);\n\nexport default CiceroNoTextField;\n","import React from \"react\";\nimport RegexTextField, { RegexTextFieldProps } from \"./RegexTextField\";\n\nconst regexp = new RegExp(\n /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/\n);\n\nconst EmailTextField: React.FC = ({\n label,\n onChange,\n onChangeIsValid,\n required,\n value,\n variant,\n}) => (\n \n);\n\nexport default EmailTextField;\n","import React from \"react\";\nimport RegexTextField, { RegexTextFieldProps } from \"./RegexTextField\";\n/*\nHere are the international phone number formats for Germany, Switzerland, Italy, and France, including the minimum and maximum digits:\n\nGermany:\nFormat: +49 AA NNNNNNNN\nMinimum digits: 8 (excluding the country code)\nMaximum digits: 11 (excluding the country code)\nExample: +49 30 12345678\n\nSwitzerland:\nFormat: +41 AA NNN NN NN\nMinimum digits: 9 (excluding the country code)\nMaximum digits: 12 (excluding the country code)\nExample: +41 44 668 18 00\n\nItaly:\nFormat: +39 AA NNNNNNN\nMinimum digits: 8 (excluding the country code)\nMaximum digits: 10 (excluding the country code)\nExample: +39 06 1234567\n\nFrance:\nFormat: +33 A NN NN NN NN\nMinimum digits: 9 (excluding the country code)\nMaximum digits: 9 (excluding the country code)\nExample: +33 1 23 45 67 89\n*/\nconst regexp = new RegExp(/^\\+\\d{1,3}(\\s*\\d){8,12}$/);\n\nconst PhoneNoTextField: React.FC = ({\n label,\n onChange,\n onChangeIsValid,\n required,\n value,\n placeholder,\n}) => (\n \n);\n\nexport default PhoneNoTextField;\n","import { ExpertRole, Language, NewEntityId, Switzerland, ValidationFields } from \"../../data/constants\";\nimport { ExpertMeViewModel } from \"../../model/ExpertMeViewModel\";\nimport { ExpertViewModel } from \"../../model/ExpertViewModel\";\n\nexport interface RequiredExpert {\n isFirstnameEmpty: boolean;\n isLastnameEmpty: boolean;\n isGenderEmpty: boolean;\n isBirthDateEmpty: boolean;\n isAhvNoEmpty: boolean;\n isEmailEmpty: boolean;\n isMobileNoEmpty: boolean;\n isBankAccountEmpty: boolean;\n isStreetEmpty: boolean;\n isStreetNumberEmpty: boolean;\n isZipCodeEmpty: boolean;\n isCityEmpty: boolean;\n isCountryEmpty: boolean;\n isLanguageEmpty: boolean;\n hasEmptyRoleArray: ExpertRole[];\n hasEmptyRole: boolean;\n}\n\nexport const initialRequiredFields = (): RequiredExpert => ({\n isFirstnameEmpty: false,\n isLastnameEmpty: false,\n isGenderEmpty: false,\n isBirthDateEmpty: false,\n isEmailEmpty: false,\n isStreetEmpty: false,\n isStreetNumberEmpty: false,\n isZipCodeEmpty: false,\n isCityEmpty: false,\n isCountryEmpty: false,\n isLanguageEmpty: false,\n isAhvNoEmpty: false,\n isMobileNoEmpty: false,\n isBankAccountEmpty: false,\n hasEmptyRoleArray: [],\n hasEmptyRole: false,\n});\n\nexport const emptyExpertViewModel: ExpertViewModel = {\n birthdate: new Date(),\n correspondenceLanguage: Language.DE,\n emailAddress: \"\",\n city: \"\",\n gender: \"\",\n bankAccount: \"\",\n mobileNumber: \"\",\n firstName: \"\",\n phoneNumber: \"\",\n id: NewEntityId,\n lastName: \"\",\n street: \"\",\n streetNumber: \"\",\n zipCode: \"\",\n languages: [],\n country: Switzerland,\n rolesWithExamsAndCourseTypes: [],\n};\n\nexport const initialValidationFields: ValidationFields = {\n isAhvValid: false,\n isCiceroValid: false,\n isEmailValid: false,\n isMobileValid: false,\n isPhoneValid: false,\n};\n\nexport const initialExpertMe: ExpertMeViewModel = {\n birthdate: new Date(),\n correspondenceLanguage: Language.DE,\n emailAddress: \"\",\n city: \"\",\n gender: \"\",\n bankAccount: \"\",\n mobileNumber: \"\",\n firstName: \"\",\n phoneNumber: \"\",\n id: \"\",\n lastName: \"\",\n street: \"\",\n streetNumber: \"\",\n zipCode: \"\",\n country: Switzerland,\n rolesWithExamsAndCourseTypes: [],\n};\n\nexport const rolesWithRequiredExamOrCourseTypeAssignements: ExpertRole[] = [\n ExpertRole.Aufsichtsexperten,\n ExpertRole.Prüfungsexperten,\n];\n\nexport const rolesAssignedToCourseTypes: ExpertRole[] = [ExpertRole.Aufsichtsexperten];\n","import * as React from \"react\";\nimport { FormattedMessage, injectIntl, WrappedComponentProps } from \"react-intl\";\nimport { Props as FormattedMessageProps } from \"react-intl/dist/components/message\";\nimport { GetTranslation } from \"../../translations/GetTranslation\";\nimport { TranslationKey } from \"../../translations/TranslationKey\";\n\ntype TranslatedMessageProps = {\n id: TranslationKey;\n} & FormattedMessageProps &\n WrappedComponentProps;\n\nconst TranslatedMessage: React.FunctionComponent = ({ id, intl, values }) => {\n if (!id) {\n console.warn(\"TranslatedMessage: invalid 'id' parameter.\");\n return null;\n }\n const containsSeveralKeys = id.indexOf(\"{\") >= 0;\n if (containsSeveralKeys) {\n const translatedText = GetTranslation(intl, id);\n return {translatedText};\n }\n\n return ;\n};\n\nexport default injectIntl(TranslatedMessage);\n","export const navigateBack = (defaultBackRoute: string, history: any, location: any) => {\n const state: any = location.state;\n\n if (state && state.internal === true)\n history.goBack();\n else \n history.push(defaultBackRoute);\n};\n\nexport const navigateTo = (route: string, history: any) => {\n history.push(route, { internal: true });\n};","import { IntlShape } from \"react-intl\";\r\nimport { LocalStorageKey } from \"../../data/constants\";\r\n\r\nexport interface TranslatedValue {\r\n de: string;\r\n fr: string;\r\n it: string;\r\n en: string;\r\n}\r\n\r\nexport const GetTranslatedValue = (translatedValue: TranslatedValue) => {\r\n const language = localStorage.getItem(LocalStorageKey.LastSelectedLanguageKey)?.toLowerCase();\r\n return !!language && language in translatedValue\r\n ? translatedValue[language as keyof TranslatedValue]\r\n : translatedValue.de;\r\n};\r\n\r\nexport const GetTranslatedValueIntl = (intl: IntlShape, translatedValue: TranslatedValue) => {\r\n return intl.locale.toLowerCase() in translatedValue\r\n ? translatedValue[intl.locale.toLowerCase() as keyof TranslatedValue]\r\n : translatedValue.de;\r\n}\r\n","import { Chip, Grid, MenuItem, Omit, Paper, Tooltip, Typography } from \"@material-ui/core\";\r\nimport { createStyles, emphasize, makeStyles, Theme, useTheme } from \"@material-ui/core/styles\";\r\nimport TextField, { BaseTextFieldProps } from \"@material-ui/core/TextField\";\r\nimport { Cancel } from \"@material-ui/icons\";\r\nimport clsx from \"clsx\";\r\nimport React, { CSSProperties, HTMLAttributes } from \"react\";\r\nimport Select from \"react-select\";\r\nimport { ValueContainerProps } from \"react-select/src/components/containers\";\r\nimport { ControlProps } from \"react-select/src/components/Control\";\r\nimport { MenuProps, NoticeProps } from \"react-select/src/components/Menu\";\r\nimport { MultiValueProps } from \"react-select/src/components/MultiValue\";\r\nimport { OptionProps } from \"react-select/src/components/Option\";\r\nimport { PlaceholderProps } from \"react-select/src/components/Placeholder\";\r\nimport { SingleValueProps } from \"react-select/src/components/SingleValue\";\r\nimport { ActionMeta, ValueType } from \"react-select/src/types\";\r\n\r\ntype columnCount = boolean | \"auto\" | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | undefined;\r\n\r\nconst flaggedColor = \"#fff0d1\";\r\n\r\nexport const useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n flexGrow: 1,\r\n height: 250,\r\n minWidth: 290,\r\n cursor: \"pointer\",\r\n },\r\n input: {\r\n display: \"flex\",\r\n padding: 0,\r\n height: \"auto\",\r\n cursor: \"pointer\",\r\n },\r\n valueContainer: {\r\n display: \"flex\",\r\n flexWrap: \"wrap\",\r\n flex: 1,\r\n alignItems: \"center\",\r\n overflow: \"hidden\",\r\n },\r\n chip: {\r\n margin: theme.spacing(0.5, 0.25),\r\n maxWidth: \"calc(100% - 2px)\",\r\n },\r\n chipFocused: {\r\n backgroundColor: emphasize(\r\n theme.palette.type === \"light\" ? theme.palette.grey[300] : theme.palette.grey[700],\r\n 0.08\r\n ),\r\n },\r\n noOptionsMessage: {\r\n padding: theme.spacing(1, 2),\r\n },\r\n singleValue: {\r\n fontSize: 16,\r\n },\r\n placeholder: {\r\n position: \"absolute\",\r\n left: 2,\r\n bottom: 6,\r\n fontSize: 16,\r\n },\r\n paper: {\r\n position: \"absolute\",\r\n zIndex: 1,\r\n marginTop: theme.spacing(1),\r\n left: 0,\r\n right: 0,\r\n },\r\n divider: {\r\n height: theme.spacing(2),\r\n },\r\n grid: {\r\n paddingTop: \"10px\",\r\n paddingBottom: \"0px\",\r\n },\r\n select: { paddingTop: 10, paddingBottom: 0 },\r\n })\r\n);\r\n\r\nexport interface OptionType {\r\n label: React.ReactNode;\r\n value: string;\r\n canton?: string;\r\n tooltip?: string;\r\n payload?: any;\r\n flagged?: boolean;\r\n flaggedTooltip?: string;\r\n}\r\n\r\nfunction NoOptionsMessage(props: NoticeProps) {\r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n}\r\n\r\ntype InputComponentProps = Pick & HTMLAttributes;\r\n\r\nfunction inputComponent({ inputRef, ...props }: InputComponentProps) {\r\n return
;\r\n}\r\n\r\nfunction Control(props: ControlProps) {\r\n const {\r\n children,\r\n innerProps,\r\n innerRef,\r\n selectProps: { classes, TextFieldProps },\r\n } = props;\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction Option(props: OptionProps) {\r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n}\r\n\r\ntype MuiPlaceholderProps = Omit, \"innerProps\"> &\r\n Partial, \"innerProps\">>;\r\nfunction Placeholder(props: MuiPlaceholderProps) {\r\n const { selectProps, innerProps = {}, children } = props;\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n\r\nfunction SingleValue(props: SingleValueProps) {\r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n}\r\n\r\nfunction ValueContainer(props: ValueContainerProps) {\r\n return
{props.children}
;\r\n}\r\n\r\nfunction MultiValue(props: MultiValueProps) {\r\n let color: string = \"\";\r\n let tooltip: React.ReactNode;\r\n\r\n if (props.data.flagged) {\r\n color = flaggedColor;\r\n tooltip = props.data.flaggedTooltip;\r\n }\r\n\r\n if (props.data.tooltip) {\r\n tooltip = props.data.tooltip;\r\n } else if (props.data.label) {\r\n tooltip = props.data.label;\r\n }\r\n\r\n const chip = (\r\n }\r\n />\r\n );\r\n\r\n if (tooltip) {\r\n return {chip};\r\n } else {\r\n return chip;\r\n }\r\n}\r\n\r\nconst Menu = (props: MenuProps) => {\r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n};\r\n\r\nexport const components = {\r\n Control,\r\n Menu,\r\n MultiValue,\r\n NoOptionsMessage,\r\n Option,\r\n Placeholder,\r\n SingleValue,\r\n ValueContainer,\r\n};\r\n\r\ntype MenuPlacementType = \"auto\" | \"bottom\" | \"top\" | undefined;\r\n\r\ninterface CustomSelectProps {\r\n name: string;\r\n label: React.ReactNode;\r\n placeholder: React.ReactNode;\r\n isClearable?: boolean;\r\n onChange?: (value: ValueType, actionMeta?: ActionMeta) => void;\r\n value?: ValueType;\r\n options?: OptionType[];\r\n isMulti?: boolean;\r\n isDisabled?: boolean;\r\n xs?: columnCount;\r\n sm?: columnCount;\r\n md?: columnCount;\r\n lg?: columnCount;\r\n xl?: columnCount;\r\n required?: boolean;\r\n className?: string;\r\n error?: boolean;\r\n menuPlacement?: MenuPlacementType;\r\n useDocumentBodyAsPortalTarget?: boolean;\r\n}\r\n\r\n// TODO: replace with CustomAutocomplete\r\nconst CustomSelect: React.FC = (props) => {\r\n // As react-select has some problems to scroll the menu when menuPortalTarget is document.body (needed when the select is in a table or in a popup),\r\n // we select mainElement and force to close the select menu when the main element is scrolled.\r\n const mainElement = document.querySelector(\"main\");\r\n\r\n const classes = useStyles(props);\r\n const theme = useTheme();\r\n const { xs, sm, md, lg, xl, error } = props;\r\n\r\n const selectStyles = {\r\n input: (base: CSSProperties) => ({\r\n ...base,\r\n zIndex: 9999,\r\n color: theme.palette.text.primary,\r\n \"& input\": {\r\n font: \"inherit\",\r\n },\r\n }),\r\n };\r\n return (\r\n \r\n props.useDocumentBodyAsPortalTarget && e.target === mainElement}\r\n />\r\n \r\n );\r\n};\r\n\r\nCustomSelect.defaultProps = {\r\n onChange: () => {},\r\n menuPlacement: \"auto\",\r\n} as Partial;\r\n\r\nexport default CustomSelect;\r\n","import { TranslationKey } from \"../../translations/TranslationKey\";\nimport { CourseType } from \"../Course\";\nimport { TranslatedValue } from \"../Shared/TranslatedValue\";\n\nexport enum CandidateCourseStatus {\n Open = \"Open\",\n Passed = \"Passed\",\n}\n\nexport const CandidateCourseStatusTranslationKey: {\n [courseStatus in CandidateCourseStatus]: TranslationKey;\n} = {\n [CandidateCourseStatus.Open]: \"candidateCourseStatus.open\",\n [CandidateCourseStatus.Passed]: \"candidateCourseStatus.passed\",\n};\n\nexport interface CandidateCourseViewModel {\n id: string;\n courseName: TranslatedValue;\n courseType: CourseType;\n status: CandidateCourseStatus;\n startingDateUtc: string;\n closingDateUtc?: string;\n}\n\nexport function isCertificateAvailable(candidateCourse: CandidateCourseViewModel) {\n return (\n candidateCourse.status === CandidateCourseStatus.Passed &&\n (candidateCourse.courseType === CourseType.Hve || candidateCourse.courseType === CourseType.Intermediary || candidateCourse.courseType === CourseType.Mindeststandard)\n );\n}\n","import { Grid } from \"@material-ui/core\";\r\nimport { createStyles, makeStyles } from \"@material-ui/styles\";\r\nimport React from \"react\";\r\nimport { ActionMeta, ValueType } from \"react-select/src/types\";\r\nimport FormGridCell from \"../common/FormGridCell\";\r\nimport CustomSelect, { OptionType } from \"../common/customSelect/CustomSelect\";\r\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\r\n\r\ntype ExpertExamsSelectProps = {\r\n expertExams: OptionType[];\r\n selectedExpertExams: OptionType[];\r\n onExpertExamsSelectChange: (selectedElements: ValueType, actionMeta?: ActionMeta) => void;\r\n mandatory?: boolean;\r\n error?: boolean;\r\n};\r\n\r\nconst useStyles = makeStyles(() =>\r\n createStyles({\r\n root: {\r\n paddingTop: \"15px\",\r\n paddingBottom: \"15px\",\r\n width: \"100%\",\r\n zIndex: 100000000,\r\n },\r\n })\r\n);\r\n\r\nconst ExpertExamsSelect: React.FunctionComponent = ({\r\n expertExams,\r\n selectedExpertExams,\r\n onExpertExamsSelectChange,\r\n mandatory = false,\r\n error,\r\n}) => {\r\n const cssClasses = useStyles({});\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {mandatory ? \"*\" : \"\"}\r\n \r\n }\r\n options={expertExams}\r\n isMulti={true}\r\n onChange={onExpertExamsSelectChange}\r\n menuPlacement={\"auto\"}\r\n isClearable={false}\r\n useDocumentBodyAsPortalTarget={true}\r\n error={error}\r\n />\r\n \r\n \r\n );\r\n};\r\n\r\nexport default ExpertExamsSelect;\r\n","import { Grid } from \"@material-ui/core\";\nimport { createStyles, makeStyles } from \"@material-ui/styles\";\nimport React from \"react\";\nimport { useIntl } from \"react-intl\";\nimport { ActionMeta, ValueType } from \"react-select/src/types\";\nimport { CourseType, CourseTypeEnumValues, CourseTypeGroupTranslationKey } from \"../../model/Course\";\nimport { GetTranslation } from \"../../translations/GetTranslation\";\nimport FormGridCell from \"../common/FormGridCell\";\nimport CustomSelect, { OptionType } from \"../common/customSelect/CustomSelect\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\n\ntype CourseTypeSelectProps = {\n selectedCourseTypes: CourseType[];\n onCourseTypeSelectChange: (selectedElements: ValueType, actionMeta?: ActionMeta) => void;\n mandatory?: boolean;\n error?: boolean;\n};\n\nconst useStyles = makeStyles(() =>\n createStyles({\n root: {\n paddingTop: \"15px\",\n paddingBottom: \"15px\",\n width: \"100%\",\n zIndex: 100000000,\n },\n })\n);\n\nconst CourseTypeSelect: React.FunctionComponent = ({\n selectedCourseTypes,\n onCourseTypeSelectChange,\n mandatory = false,\n error,\n}) => {\n const cssClasses = useStyles({});\n const intl = useIntl();\n\n const courseTypesWithTranslation = CourseTypeEnumValues.map((courseType) => ({\n value: courseType,\n translation: GetTranslation(intl, CourseTypeGroupTranslationKey[courseType]),\n }));\n\n const getCourseTypesWithTranslations = (courseTypes: CourseType[]) =>\n courseTypesWithTranslation\n .filter((ct) => courseTypes.includes(ct.value))\n .sort((a, b) => a.translation.localeCompare(b.translation))\n .map((courseType) => ({\n value: courseType.value,\n label: {courseType.translation},\n }));\n\n return (\n \n \n \n \n {mandatory ? \"*\" : \"\"}\n \n }\n options={getCourseTypesWithTranslations(CourseTypeEnumValues)}\n isMulti={true}\n onChange={onCourseTypeSelectChange}\n menuPlacement={\"auto\"}\n isClearable={false}\n useDocumentBodyAsPortalTarget={true}\n error={error}\n />\n \n \n );\n};\n\nexport default CourseTypeSelect;\n","import { makeStyles, TableCell, TableRow } from \"@material-ui/core\";\nimport React from \"react\";\nimport { GetTranslatedValue, TranslatedValue } from \"../../../model/Shared/TranslatedValue\";\nimport ExpertExamsSelect from \"../ExpertExamsSelect\";\nimport { ExamTemplateIndex } from \"../../../model/Exam\";\nimport { OptionType } from \"../../common/customSelect/CustomSelect\";\nimport { ActionMeta, ValueType } from \"react-select\";\nimport { ExpertRole, getExpertRoleTranslationKey } from \"../../../data/constants\";\nimport { GetTranslation } from \"../../../translations/GetTranslation\";\nimport { useIntl } from \"react-intl\";\nimport { rolesWithRequiredExamOrCourseTypeAssignements, rolesAssignedToCourseTypes } from \"../ExpertConstants\";\nimport CourseTypeSelect from \"../../course/CourseTypeSelect\";\nimport { CourseType } from \"../../../model/Course\";\nimport HighlightOffIcon from \"@material-ui/icons/HighlightOff\";\nimport CustomButton from \"../../common/buttons/CustomButton\";\nimport TranslatedMessage from \"../../translations/TranslatedMessage\";\n\nexport type ExpertRoleExamsRowProps = {\n role: ExpertRole;\n selectedExamIds?: string[];\n selectedCourseTypes?: CourseType[];\n publishedExams: ExamTemplateIndex[];\n onExamsChange: (selectedElements: ValueType, actionMeta?: ActionMeta) => void;\n onCourseTypeChange: (selectedElements: ValueType, actionMeta?: ActionMeta) => void;\n onRoleDelete: (role: ExpertRole) => void;\n examSelectError: boolean;\n};\n\nexport const useExamColumnStyles = makeStyles((theme) => ({\n noPaddingColumn: {\n padding: 0,\n },\n bold: {\n fontWeight: \"bold\",\n },\n deleteButton: {\n backgroundColor: \"transparent\",\n color: theme.palette.secondary.main,\n \"&:hover\": {\n backgroundColor: \"transparent\",\n color: theme.palette.secondary.main,\n border: \"none\",\n boxShadow: \"none\",\n },\n },\n}));\n\nexport const ExpertRoleExamsRow: React.FunctionComponent = ({\n role,\n selectedExamIds,\n selectedCourseTypes,\n publishedExams,\n onExamsChange,\n onCourseTypeChange,\n onRoleDelete,\n examSelectError,\n}) => {\n const classes = useExamColumnStyles();\n const intl = useIntl();\n const publishedExamsObject: Record = {};\n publishedExams.forEach((exam) => (publishedExamsObject[exam.id] = exam.name));\n const examOptions = publishedExams!.map((exam) => ({\n label: GetTranslatedValue(exam.name),\n value: exam.id,\n payload: exam,\n }));\n const publishedExamIds = publishedExams.map((pe) => pe.id);\n\n const selectedExamsOptions = selectedExamIds\n ? [...selectedExamIds.filter((se) => publishedExamIds.includes(se))]\n .sort((a, b) => {\n return GetTranslatedValue(publishedExamsObject[a]).localeCompare(\n GetTranslatedValue(publishedExamsObject[b] || b)\n );\n })\n .map((examId) => ({\n value: examId,\n label: {GetTranslatedValue(publishedExamsObject[examId])},\n }))\n : [];\n\n return (\n \n \n {GetTranslation(intl, getExpertRoleTranslationKey(role))}\n \n {rolesAssignedToCourseTypes.includes(role) ? (\n \n ) : (\n a.label.localeCompare(b.label))}\n onExpertExamsSelectChange={onExamsChange}\n mandatory={rolesWithRequiredExamOrCourseTypeAssignements.includes(role)}\n error={examSelectError}\n />\n )}\n \n \n \n }\n onClick={() => onRoleDelete(role)}\n internalButtonClassName={classes.deleteButton}\n color=\"secondary\"\n >\n \n \n \n \n \n );\n};\n\nexport default ExpertRoleExamsRow;\n","import { Divider, IconButton, InputBase, Paper } from \"@material-ui/core\";\r\nimport { Theme } from \"@material-ui/core/styles\";\r\nimport ArrowDown from \"@material-ui/icons/ArrowDropDown\";\r\nimport SearchIcon from \"@material-ui/icons/Search\";\r\nimport { createStyles, makeStyles } from \"@material-ui/styles\";\r\nimport React, { FC } from \"react\";\r\nimport { WrappedComponentProps, injectIntl } from \"react-intl\";\r\nimport { GetTranslation } from \"../../../translations/GetTranslation\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n padding: \"2px 2px\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n height: 35,\r\n width: 400,\r\n marginLeft: \"auto\",\r\n textAlign: \"right\",\r\n position: \"relative\",\r\n borderStyle: \"solid\",\r\n borderWidth: 1,\r\n borderColor: theme.palette.primary.main,\r\n },\r\n input: {\r\n marginLeft: 5,\r\n flex: 1,\r\n \"& >.MuiInputBase-input\": {\r\n padding: \"4px 0 0\",\r\n },\r\n },\r\n iconButton: {\r\n padding: 5,\r\n color: theme.palette.primary.main,\r\n },\r\n divider: {\r\n height: 23,\r\n margin: 4,\r\n background: theme.palette.primary.main,\r\n },\r\n })\r\n);\r\n\r\ntype CustomSearchBoxProps = {\r\n searchToken: string;\r\n onChange: (event: any) => void;\r\n tag?: boolean;\r\n onClick?: (event: any) => void;\r\n} & WrappedComponentProps;\r\n\r\nconst CustomSearchBox: FC = (props) => {\r\n const { onChange, searchToken, tag, onClick, intl } = props;\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {tag && (\r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default injectIntl(CustomSearchBox);\r\n","import { Checkbox, ListItemSecondaryAction, ListItemText, Typography } from \"@material-ui/core\";\nimport Button from \"@material-ui/core/Button\";\nimport Dialog from \"@material-ui/core/Dialog\";\nimport DialogActions from \"@material-ui/core/DialogActions\";\nimport DialogContent from \"@material-ui/core/DialogContent\";\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\nimport List from \"@material-ui/core/List\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport React from \"react\";\nimport { useIntl } from \"react-intl\";\nimport { ExpertRole, getExpertRoleTranslationKey } from \"../../../data/constants\";\nimport { GetTranslation } from \"../../../translations/GetTranslation\";\nimport CustomSearchBox from \"../../common/customSearchBox/CustomSearchBox\";\nimport TranslatedMessage from \"../../translations/TranslatedMessage\";\n\ntype RoleSelectionDialogProps = {\n isOpened: boolean;\n handleAccept: (selection: ExpertRole[]) => void;\n handleCancel: () => void;\n selectableRoles: ExpertRole[];\n selectedRoles?: ExpertRole[];\n};\n\nconst RoleSelectionDialog = (props: RoleSelectionDialogProps) => {\n const { isOpened, handleAccept, handleCancel, selectableRoles } = props;\n const [selection, setSelection] = React.useState([]);\n const [searchToken, setSearchToken] = React.useState(\"\");\n const [filteredRoles, setFilteredRoles] = React.useState(selectableRoles);\n const intl = useIntl();\n\n React.useEffect(() => {\n setFilteredRoles(selectableRoles);\n }, [selectableRoles]);\n\n const onAccept = () => {\n const selectedRoles = selectableRoles.filter((role) => selection.indexOf(role) !== -1);\n handleAccept(selectedRoles);\n setSelection([]);\n setSearchToken(\"\");\n };\n\n const onCancel = () => {\n handleCancel();\n setSelection([]);\n setSearchToken(\"\");\n };\n\n const onSearchTokenChanged = (token: string) => {\n const nonSelectedFilteredRoles = selectableRoles.filter(\n (role) =>\n selection.indexOf(role) === -1 &&\n GetTranslation(intl, getExpertRoleTranslationKey(role)).toLowerCase().indexOf(token.toLowerCase()) !== -1\n );\n setFilteredRoles(nonSelectedFilteredRoles);\n setSearchToken(token);\n };\n\n const toggleRoleSelection = (role: ExpertRole) => {\n if (selection.indexOf(role) === -1) {\n setSelection([...selection, role]);\n } else {\n setSelection(selection.filter((selectedRole) => selectedRole !== role));\n }\n };\n\n const isListEmpty = filteredRoles.length === 0;\n\n return (\n \n \n \n \n \n onSearchTokenChanged(event.target.value)}\n searchToken={searchToken}\n />\n\n {isListEmpty ? (\n \n \n \n ) : (\n \n {filteredRoles.map((role) => (\n toggleRoleSelection(role)} key={role}>\n \n \n toggleRoleSelection(role)}\n checked={selection.indexOf(role) !== -1}\n />\n \n \n ))}\n \n )}\n \n \n \n \n \n \n );\n};\n\nconst listContainer: React.CSSProperties = {\n height: 400,\n overflow: \"auto\",\n marginTop: 10,\n paddingTop: 0,\n};\n\nconst emptyMessage: React.CSSProperties = {\n height: 400,\n marginTop: 10,\n paddingTop: 200,\n textAlign: \"center\",\n};\n\nexport default RoleSelectionDialog;\n","import { Grid, Paper, Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from \"@material-ui/core\";\nimport React, { useState } from \"react\";\nimport FormGridCell from \"../../common/FormGridCell\";\nimport { OptionType } from \"../../common/customSelect/CustomSelect\";\nimport TranslatedMessage from \"../../translations/TranslatedMessage\";\nimport { ValueType, ActionMeta } from \"react-select/src/types\";\nimport { ExpertRole, getExpertRoleTranslationKey, RoleWithExamsAndCourseTypes } from \"../../../data/constants\";\nimport { ExamTemplateIndex } from \"../../../model/Exam\";\nimport ExpertRoleExamsRow, { useExamColumnStyles } from \"./ExpertRoleExamsRow\";\nimport RoleSelectionDialog from \"./RoleSelectionDialog\";\nimport { useIntl } from \"react-intl\";\nimport { GetTranslation } from \"../../../translations/GetTranslation\";\nimport CustomButton from \"../../common/buttons/CustomButton\";\nimport { Add } from \"@material-ui/icons\";\n\ntype ExpertRolesTableProps = {\n currentRolesWithExamsAndCourseTypes: RoleWithExamsAndCourseTypes[];\n publishedExams: ExamTemplateIndex[];\n onRoleCreation: (role: ExpertRole[]) => void;\n onRoleDelete: (role: ExpertRole) => void;\n getExamChangeHandler: (\n role: ExpertRole\n ) => (selectedElements: ValueType, actionMeta?: ActionMeta) => void;\n getCourseTypeChangeHandler: (\n role: ExpertRole\n ) => (selectedElements: ValueType, actionMeta?: ActionMeta) => void;\n examSelectErrorsArray: ExpertRole[];\n};\n\nconst ExpertRolesTable: React.FunctionComponent = ({\n currentRolesWithExamsAndCourseTypes,\n publishedExams,\n getExamChangeHandler,\n getCourseTypeChangeHandler,\n onRoleCreation,\n onRoleDelete,\n examSelectErrorsArray,\n}) => {\n const classes = useExamColumnStyles();\n const [isAddRoleDialogVisible, setIsAddRoleDialogVisible] = useState(false);\n const intl = useIntl();\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n }\n onClick={() => setIsAddRoleDialogVisible(true)}\n >\n \n \n \n \n \n \n {currentRolesWithExamsAndCourseTypes?.length ? (\n [...currentRolesWithExamsAndCourseTypes]\n .sort((a, b) =>\n GetTranslation(intl, getExpertRoleTranslationKey(a.role)).localeCompare(\n GetTranslation(intl, getExpertRoleTranslationKey(b.role))\n )\n )\n .map((roleExamsCourseTypes, index) => (\n \n ))\n ) : (\n \n \n \n \n \n )}\n \n
\n
\n
\n {isAddRoleDialogVisible && (\n setIsAddRoleDialogVisible(false)}\n handleAccept={(selectedRoles) => {\n onRoleCreation(selectedRoles);\n setIsAddRoleDialogVisible(false);\n }}\n selectableRoles={getSelectableRoles(currentRolesWithExamsAndCourseTypes)}\n />\n )}\n
\n );\n};\n\nconst getSelectableRoles = (selectedRoleExams: RoleWithExamsAndCourseTypes[]) => {\n const currentRoles = selectedRoleExams.map((roleExam) => roleExam.role);\n const existingExpertRoles = Object.values(ExpertRole);\n return existingExpertRoles.filter((rol) => currentRoles.indexOf(rol) === -1);\n};\n\nexport default ExpertRolesTable;\n","import {\r\n Switzerland,\r\n RequiredCandidate,\r\n ValidationFields,\r\n Language,\r\n RequiredCandidateExpert,\r\n} from \"../../data/constants\";\r\nimport { CandidateViewModel } from \"../../model/CandidateViewModel\";\r\nimport { PersonType } from \"../../model/PersonType\";\r\n\r\nexport const initialCandidate: CandidateViewModel = {\r\n emailAddress: \"\",\r\n city: \"\",\r\n mobileNumber: \"\",\r\n firstName: \"\",\r\n phoneNumber: \"\",\r\n id: \"\",\r\n lastName: \"\",\r\n street: \"\",\r\n streetNumber: \"\",\r\n zipCode: \"\",\r\n blocked: false,\r\n gender: \"\",\r\n nationality: \"\",\r\n preferredContact: \"\",\r\n ahvNumber: \"\",\r\n ciceroNumber: \"\",\r\n bankAccount: \"\",\r\n birthdate: new Date(),\r\n canton: \"\",\r\n correspondenceLanguage: Language.DE,\r\n country: Switzerland,\r\n employer: \"\",\r\n employerCity: \"\",\r\n employerCountry: Switzerland,\r\n employerStreet: \"\",\r\n employerZipCode: \"\",\r\n nationalityIsSwiss: true,\r\n placeOfOrigin: \"\",\r\n privateIsPreferredContact: true,\r\n disablePersonalFields: false,\r\n type: PersonType.Candidate,\r\n languages: [],\r\n rolesWithExamsAndCourseTypes: [],\r\n hasEmptyPersonalFields: false,\r\n internalComment: \"\",\r\n};\r\n\r\nexport const initialRequiredCandidateExpertFields = (): RequiredCandidateExpert => ({\r\n isBankAccountEmpty: false,\r\n hasEmptyRoleArray: [],\r\n hasEmptyRole: false,\r\n});\r\n\r\nexport const initialRequiredFields = (): RequiredCandidate => ({\r\n isFirstnameEmpty: false,\r\n isLastnameEmpty: false,\r\n isGenderEmpty: false,\r\n isBirthDateEmpty: false,\r\n isEmailEmpty: false,\r\n isStreetEmpty: false,\r\n isStreetNumberEmpty: false,\r\n isZipCodeEmpty: false,\r\n isCityEmpty: false,\r\n isCountryEmpty: false,\r\n isLanguageEmpty: false,\r\n isAhvNoEmpty: false,\r\n isNationalityEmpty: false,\r\n isPlaceOfOriginEmpty: false,\r\n isCantonEmpty: false,\r\n isEmployerInformationEmpty: false,\r\n});\r\n\r\nexport const initialValidationFields: ValidationFields = {\r\n isAhvValid: false,\r\n isCiceroValid: false,\r\n isEmailValid: false,\r\n isMobileValid: false,\r\n isPhoneValid: false,\r\n};\r\n","import download from \"downloadjs\";\nimport { customFetch } from \"./CustomFetch\";\nimport { meUrl } from \"./rtk/MeApi\";\n\nconst getCandidateCourseUrl = (candidateCourseId: string) => `${meUrl}/candidateCourse/${candidateCourseId}`;\n\nconst getInternalCandidateCourseUrl = (candidateId: string, candidateCourseId: string) =>\n `candidate/${candidateId}/courses/${candidateCourseId}`;\n\nconst handleDownloadResponse = async (response: Response, fallbackFileName: string) => {\n const contentDispositionHeader = response.headers.get(\"content-disposition\");\n const fileName =\n contentDispositionHeader !== null ? contentDispositionHeader.split(\";\")[1].split('\"')[1] : fallbackFileName;\n if (response.ok) {\n var blob = await response.blob();\n download(blob, fileName);\n }\n};\n\nexport const downloadCandidateCourseCertificate = async (candidateCourseId: string, fallbackFileName: string) => {\n const response = await customFetch(`${getCandidateCourseUrl(candidateCourseId)}/downloadCertificate`);\n await handleDownloadResponse(response, fallbackFileName);\n};\n\nexport const downloadCandidateCoursePerformanceRecord = async (candidateCourseId: string, fallbackFileName: string) => {\n const response = await customFetch(`${getCandidateCourseUrl(candidateCourseId)}/downloadPerformanceRecord`);\n await handleDownloadResponse(response, fallbackFileName);\n};\n\nexport const downloadInternalCandidateCourseCertificate = async (\n candidateId: string,\n candidateCourseId: string,\n fallbackFileName: string\n) => {\n const response = await customFetch(\n `${getInternalCandidateCourseUrl(candidateId, candidateCourseId)}/downloadCertificate`\n );\n await handleDownloadResponse(response, fallbackFileName);\n};\n\nexport const downloadInternalCandidateCoursePerformanceRecord = async (\n candidateId: string,\n candidateCourseId: string,\n fallbackFileName: string\n) => {\n const response = await customFetch(\n `${getInternalCandidateCourseUrl(candidateId, candidateCourseId)}/downloadPerformanceRecord`\n );\n await handleDownloadResponse(response, fallbackFileName);\n};\n","import { Button, Grid, TableCell, TableRow } from \"@material-ui/core\";\nimport React, { FC, useState } from \"react\";\nimport { useIntl } from \"react-intl\";\nimport { SwissGermanLocale, SwissTimeZone } from \"../../data/constants\";\nimport {\n CandidateCourseStatus,\n CandidateCourseStatusTranslationKey,\n CandidateCourseViewModel,\n isCertificateAvailable\n} from \"../../model/courses/CandidateCourseViewModel\";\nimport { GetTranslatedValueIntl } from \"../../model/Shared/TranslatedValue\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\n\ninterface CandidateCourseTableRowProps {\n candidateCourse: CandidateCourseViewModel;\n handleDownloadCertificate: (candidateCourse: CandidateCourseViewModel) => Promise;\n handleDownloadPerformanceRecord: (candidateCourse: CandidateCourseViewModel) => Promise;\n}\n\nconst CandidateCourseTableRow: FC = ({\n candidateCourse,\n handleDownloadCertificate,\n handleDownloadPerformanceRecord,\n}) => {\n const intl = useIntl();\n const [isLoadingCertificate, setIsLoadingCertificate] = useState(false);\n const [isLoadingPerformanceRecord, setIsLoadingPerformanceRecord] = useState(false);\n\n const onDownloadCertificate = async () => {\n setIsLoadingCertificate(true);\n await handleDownloadCertificate(candidateCourse);\n setIsLoadingCertificate(false);\n };\n\n const onDownloadPerformanceRecord = async () => {\n setIsLoadingPerformanceRecord(true);\n await handleDownloadPerformanceRecord(candidateCourse);\n setIsLoadingPerformanceRecord(false);\n };\n\n return (\n \n {GetTranslatedValueIntl(intl, candidateCourse.courseName)}\n \n {candidateCourse.status === CandidateCourseStatus.Passed &&\n candidateCourse.closingDateUtc &&\n new Date(candidateCourse.closingDateUtc).toLocaleDateString(SwissGermanLocale, { timeZone: SwissTimeZone })}\n \n {}\n \n \n {isCertificateAvailable(candidateCourse) && (\n \n \n \n \n \n )}\n \n \n \n \n \n \n \n \n );\n};\n\nexport default CandidateCourseTableRow;\n","import { Paper, Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from \"@material-ui/core\";\nimport React, { FC } from \"react\";\nimport { CandidateCourseViewModel } from \"../../model/courses/CandidateCourseViewModel\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\nimport CandidateCourseTableRow from \"./CandidateCourseTableRow\";\n\ntype CandidateCourseTableProps = {\n candidateCourses: CandidateCourseViewModel[];\n handleDownloadCertificate: (candidateCourse: CandidateCourseViewModel) => Promise;\n handleDownloadPerformanceRecord: (candidateCourse: CandidateCourseViewModel) => Promise;\n};\n\nconst tableHeaders = (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n);\n\nconst CandidateCourseTable: FC = ({\n candidateCourses,\n handleDownloadCertificate,\n handleDownloadPerformanceRecord,\n}) => {\n return (\n \n \n {tableHeaders}\n \n {candidateCourses.map((course, courseIndex) => (\n \n ))}\n \n
\n
\n );\n};\nexport default CandidateCourseTable;\n","import { Grid, LinearProgress, Typography } from \"@material-ui/core\";\nimport React, { FC } from \"react\";\nimport { useIntl } from \"react-intl\";\nimport {\n downloadInternalCandidateCourseCertificate,\n downloadInternalCandidateCoursePerformanceRecord,\n} from \"../../api/CandidateCourseCertificateApi\";\nimport { useGetCandidateCoursesInternalQuery } from \"../../api/rtk/CandidateApi\";\nimport { CandidateCourseViewModel, isCertificateAvailable } from \"../../model/courses/CandidateCourseViewModel\";\nimport { GetTranslatedValueIntl } from \"../../model/Shared/TranslatedValue\";\nimport { GetTranslation } from \"../../translations/GetTranslation\";\nimport CandidateCourseTable from \"../candidateCourses/CandidateCourseTable\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\n\ntype CandidateCoursesInternalProps = {\n candidateId: string;\n};\n\nconst CandidateCoursesInternal: FC = ({ candidateId }) => {\n const intl = useIntl();\n const { data: candidateCourses, isFetching } = useGetCandidateCoursesInternalQuery(candidateId, {\n skip: !candidateId,\n });\n\n const handleDownloadCertificate = async (candidateCourse: CandidateCourseViewModel) => {\n if (isCertificateAvailable(candidateCourse)) {\n var certificateFileNamePrefix = GetTranslation(intl, \"candidateCourse.certificate.fileNamePrefix\");\n var courseName = GetTranslatedValueIntl(intl, candidateCourse.courseName);\n var certificateFileName = `${certificateFileNamePrefix} - ${courseName}`;\n await downloadInternalCandidateCourseCertificate(candidateId, candidateCourse.id, certificateFileName);\n }\n };\n\n const handleDownloadPerformanceRecord = async (candidateCourse: CandidateCourseViewModel) => {\n var performanceRecordFileNamePrefix = GetTranslation(intl, \"candidateCourse.performanceRecord.fileNamePrefix\");\n var courseName = GetTranslatedValueIntl(intl, candidateCourse.courseName);\n var performanceRecordFileName = `${performanceRecordFileNamePrefix} - ${courseName}`;\n await downloadInternalCandidateCoursePerformanceRecord(candidateId, candidateCourse.id, performanceRecordFileName);\n };\n\n return (\n \n \n \n \n\n \n {isFetching && (\n \n \n \n )}\n {!isFetching && (\n \n {candidateCourses && candidateCourses.length ? (\n \n ) : (\n \n \n \n )}\n \n )}\n \n \n );\n};\n\nexport default CandidateCoursesInternal;\n","import { LinearProgress, TextField, makeStyles } from \"@material-ui/core\";\r\nimport FormControl from \"@material-ui/core/FormControl\";\r\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\r\nimport FormLabel from \"@material-ui/core/FormLabel\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport Radio from \"@material-ui/core/Radio\";\r\nimport RadioGroup from \"@material-ui/core/RadioGroup\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport { Cancel, ImportExport, Save } from \"@material-ui/icons\";\r\nimport { useSnackbar } from \"notistack\";\r\nimport React, { FunctionComponent, useEffect, useState } from \"react\";\r\nimport { useIntl } from \"react-intl\";\r\nimport { useHistory, useParams } from \"react-router\";\r\nimport { ActionMeta, ValueType } from \"react-select\";\r\nimport { routesPaths } from \"../../Routes\";\r\nimport {\r\n useCreateCandidateMutation,\r\n useDeleteCandidateMutation,\r\n useExportDebtorNumberMutation,\r\n useGetCandidateQuery,\r\n useUpdateCandidateMutation,\r\n} from \"../../api/rtk/CandidateApi\";\r\nimport { useGetPublishedExamsQuery } from \"../../api/rtk/ExamApi\";\r\nimport {\r\n ExpertRole,\r\n Language,\r\n NewEntityId,\r\n PropertyNames,\r\n RequiredCandidate,\r\n RequiredCandidateExpert,\r\n Switzerland,\r\n ValidationFields,\r\n} from \"../../data/constants\";\r\nimport ZipCodes from \"../../data/zipCodes.json\";\r\nimport { CandidateViewModel } from \"../../model/CandidateViewModel\";\r\nimport { CourseType } from \"../../model/Course\";\r\nimport { PersonType } from \"../../model/PersonType\";\r\nimport { GetTranslation } from \"../../translations/GetTranslation\";\r\nimport { TranslationKey, isTranslationKey } from \"../../translations/TranslationKey\";\r\nimport { getValidDate } from \"../../utils/Dates\";\r\nimport { AddressFields } from \"../common/AddressFields\";\r\nimport CustomSwitch from \"../common/CustomSwitch\";\r\nimport FormGridCell from \"../common/FormGridCell\";\r\nimport LastModificationInfo from \"../common/LastModificationInfo\";\r\nimport CustomButton from \"../common/buttons/CustomButton\";\r\nimport RightButtonArea from \"../common/buttons/RightButtonArea\";\r\nimport { CompanySelect } from \"../common/customAutocomplete/CompanySelect\";\r\nimport { CountrySelect } from \"../common/customAutocomplete/CountrySelect\";\r\nimport { GenderSelect } from \"../common/customAutocomplete/GenderSelect\";\r\nimport { IPlaceOfOriginOption, PlaceOfOriginSelect } from \"../common/customAutocomplete/PlaceOfOriginSelect\";\r\nimport LanguageCheckboxList from \"../common/customCheckBox/LanguageCheckboxList\";\r\nimport CustomDraggableDialog from \"../common/customDialog/CustomDraggableDialog\";\r\nimport GridTextField from \"../common/customGrid/GridTextField\";\r\nimport { OptionType } from \"../common/customSelect/CustomSelect\";\r\nimport DatePicker from \"../common/datePicker/DatePicker\";\r\nimport AhvNoTextField from \"../common/textField/AhvNoTextField\";\r\nimport CiceroNoTextField from \"../common/textField/CiceroNoTextField\";\r\nimport EmailTextField from \"../common/textField/EmailTextField\";\r\nimport PhoneNoTextField from \"../common/textField/PhoneNoTextField\";\r\nimport { rolesAssignedToCourseTypes, rolesWithRequiredExamOrCourseTypeAssignements } from \"../expert/ExpertConstants\";\r\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\r\nimport { navigateBack } from \"./../../utils/Navigation\";\r\nimport ExpertRolesTable from \"./../expert/ExpertRoleExamAssignment/ExpertRolesExamsTable\";\r\nimport {\r\n initialCandidate,\r\n initialRequiredCandidateExpertFields,\r\n initialRequiredFields,\r\n initialValidationFields,\r\n} from \"./CandidateConstants\";\r\nimport CandidateCoursesInternal from \"./CandidateCoursesInternal\";\r\nimport { isInvalidZipCode } from \"../../utils/ZipCodeUtils\";\r\n\r\nconst useStyles = makeStyles({\r\n formControl: {\r\n marginBottom: \"-11px\",\r\n },\r\n expertsRolesTable: {\r\n paddingBottom: \"300px!important\",\r\n },\r\n});\r\n\r\n// Candidate form for Internal users, for creation and update\r\nconst CandidateForm: FunctionComponent = () => {\r\n const { candidateId } = useParams<{ candidateId: string }>();\r\n const intl = useIntl();\r\n const history = useHistory();\r\n const { enqueueSnackbar } = useSnackbar();\r\n const classes = useStyles();\r\n\r\n const isNewCandidate: boolean = candidateId === NewEntityId;\r\n const [createCandidate, { isLoading: isCreateCandidateLoading }] = useCreateCandidateMutation();\r\n const [updateCandidate, { isLoading: isUpdateCandidateLoading }] = useUpdateCandidateMutation();\r\n const [deleteCandidate, { isLoading: isDeleteCandidateLoading, isSuccess: isDeleteSuccess }] =\r\n useDeleteCandidateMutation();\r\n const [exportDebtorNumber, { isLoading: isExportingDebtorNumber }] = useExportDebtorNumberMutation();\r\n\r\n const { data: fetchedCandidate, isFetching: isCandidateFetching } = useGetCandidateQuery(candidateId, {\r\n skip: isNewCandidate || isDeleteSuccess,\r\n });\r\n const { data: exams, isFetching: isExamsFetching } = useGetPublishedExamsQuery();\r\n const isLoading =\r\n isCreateCandidateLoading ||\r\n isUpdateCandidateLoading ||\r\n isDeleteCandidateLoading ||\r\n isCandidateFetching ||\r\n isExamsFetching;\r\n\r\n const [candidate, setCandidate] = useState(initialCandidate);\r\n const [isRequired, setIsRequired] = useState({\r\n ...initialRequiredFields(),\r\n ...initialRequiredCandidateExpertFields(),\r\n });\r\n const [isValid, setIsValid] = useState(initialValidationFields);\r\n const [isDeleteDialogOpen, setIsDeleteDialogOpen] = useState(false);\r\n const [isEmailChangeDialogOpened, setIsEmailChangeDialogOpened] = useState(false);\r\n const [emailChangeNeedsConfirmation, setEmailChangeNeedsConfirmation] = useState(false);\r\n\r\n useEffect(() => {\r\n if (fetchedCandidate !== undefined) {\r\n setCandidate(fetchedCandidate);\r\n }\r\n }, [fetchedCandidate]);\r\n\r\n if (!isLoading && ((fetchedCandidate === undefined && candidateId !== NewEntityId) || exams === undefined)) {\r\n return <>;\r\n }\r\n\r\n const renderForm = () => {\r\n if (isLoading || isDeleteSuccess || isExportingDebtorNumber) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n <>\r\n {isNewCandidate && renderCreationForm()}\r\n {!isNewCandidate && renderUpdateForm()}\r\n \r\n );\r\n };\r\n\r\n const renderCandidateForm = () => {\r\n const { privateIsPreferredContact } = candidate;\r\n\r\n return (\r\n \r\n {renderPersonForm()}\r\n {renderBusinessDataForm()}\r\n {renderAddressForm()}\r\n {renderInvoiceForm()}\r\n {!privateIsPreferredContact && renderBusinessForm()}\r\n {!isNewCandidate && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n }\r\n value={candidate.internalComment}\r\n onChange={getChangeHandler(PropertyNames.internalComment)}\r\n />\r\n \r\n \r\n \r\n {renderActiveExpertProfileToggle()}\r\n {renderExpertProfile()}\r\n \r\n );\r\n };\r\n\r\n const renderExpertProfile = () => {\r\n const { isBankAccountEmpty, hasEmptyRoleArray: rolesWithErrorArray } = isRequired;\r\n\r\n if (candidate.type !== PersonType.Expert) {\r\n return <>;\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n };\r\n\r\n const renderActiveExpertProfileToggle = () => {\r\n return (\r\n \r\n handleChange({ type: checked ? PersonType.Expert : PersonType.Candidate })}\r\n label={}\r\n />\r\n \r\n );\r\n };\r\n\r\n const close = () => navigateBack(routesPaths.candidates(), history, history.location);\r\n\r\n const renderCreationForm = () => {\r\n return (\r\n \r\n \r\n } onClick={() => handleCreate()}>\r\n \r\n \r\n } onClick={close}>\r\n \r\n \r\n \r\n {renderCandidateForm()}\r\n \r\n );\r\n };\r\n\r\n const renderUpdateForm = () => {\r\n return (\r\n \r\n \r\n {/* Currently disabled as this was causing issue with candidates registered for an exam session */}\r\n {/* } onClick={this.openDeleteDialog}>\r\n \r\n */}\r\n } onClick={handleExport}>\r\n \r\n \r\n } onClick={() => handleUpdate()}>\r\n \r\n \r\n } onClick={close}>\r\n \r\n \r\n \r\n }\r\n cancelText={}\r\n content={}\r\n isOpen={isDeleteDialogOpen}\r\n onAccept={() => handleDelete()}\r\n onCancel={closeDeleteDialog}\r\n title=\" \"\r\n />\r\n }\r\n cancelText={}\r\n content={}\r\n isOpen={isEmailChangeDialogOpened}\r\n onAccept={handleConfirmEmailChange}\r\n onCancel={() => setIsEmailChangeDialogOpened(false)}\r\n />\r\n {renderCandidateForm()}\r\n \r\n );\r\n };\r\n\r\n const renderPersonForm = () => {\r\n const {\r\n isFirstnameEmpty,\r\n isLastnameEmpty,\r\n isGenderEmpty,\r\n isBirthDateEmpty,\r\n isEmailEmpty,\r\n isNationalityEmpty,\r\n isPlaceOfOriginEmpty,\r\n isCantonEmpty,\r\n } = isRequired;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n handleChange({ gender: value })}\r\n />\r\n\r\n \r\n }\r\n value={getValidDate(candidate.birthdate)}\r\n onChange={(date) => handleChange({ birthdate: date ?? undefined })}\r\n required={true}\r\n error={isBirthDateEmpty}\r\n />\r\n \r\n \r\n }\r\n onChangeIsValid={handleAhvIsValid}\r\n onChange={getChangeHandler(PropertyNames.ahvNumber)}\r\n value={candidate.ahvNumber || \"\"}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n onChangeIsValid={handleCiceroIsValid}\r\n onChange={getChangeHandler(PropertyNames.ciceroNumber)}\r\n value={candidate.ciceroNumber || \"\"}\r\n />\r\n \r\n handleNationalityChanged(value)}\r\n required\r\n error={isNationalityEmpty}\r\n />\r\n {candidate.nationalityIsSwiss ? (\r\n <>\r\n handlePlaceOfOriginChange(value)}\r\n required\r\n error={isPlaceOfOriginEmpty}\r\n />\r\n \r\n \r\n ) : (\r\n <>\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n };\r\n\r\n const renderBusinessDataForm = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n handleChange({ employerInformation: value })}\r\n required={true}\r\n error={isRequired.isEmployerInformationEmpty}\r\n />\r\n \r\n \r\n );\r\n };\r\n\r\n const renderAddressForm = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {renderLanguageCheckboxList()}\r\n \r\n \r\n \r\n );\r\n };\r\n\r\n const renderInvoiceForm = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {renderRadioButtons()}\r\n \r\n \r\n \r\n \r\n );\r\n };\r\n\r\n const renderBusinessForm = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n handleChange({ employerCountry: value })}\r\n />\r\n \r\n \r\n );\r\n };\r\n\r\n const renderRadioButtons = () => {\r\n return (\r\n \r\n } label={GetTranslation(intl, \"common.private\")} />\r\n }\r\n label={GetTranslation(intl, \"common.business\")}\r\n />\r\n \r\n );\r\n };\r\n\r\n const renderLanguageCheckboxList = () => {\r\n const { isLanguageEmpty } = isRequired;\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n } label={} />\r\n } label={} />\r\n }\r\n label={}\r\n />\r\n \r\n \r\n \r\n );\r\n };\r\n\r\n const getChangeHandler = (propertyName: PropertyNames) => {\r\n return (event: any) => {\r\n handleChange({ [propertyName]: event.target.value });\r\n };\r\n };\r\n\r\n const handlePlaceOfOriginChange = (option: IPlaceOfOriginOption | null) => {\r\n handleChange({ placeOfOrigin: option?.value });\r\n handleChange({ canton: option?.canton });\r\n };\r\n\r\n // Used for both the private and the employer zipcodes\r\n const getZipCodeChangeHandler = (zipCodeProperty: PropertyNames, cityProperty: PropertyNames) => {\r\n return (event: React.ChangeEvent) => {\r\n const newZipCode = event.target.value;\r\n const zipCodeMatch = ZipCodes.find((zipCode) => zipCode.zipCode === newZipCode);\r\n handleChange({\r\n [zipCodeProperty]: newZipCode,\r\n [cityProperty]: zipCodeMatch ? zipCodeMatch.city : \"\",\r\n });\r\n };\r\n };\r\n\r\n const getLanguageChangeHandler = () => {\r\n return (value: string[]) => {\r\n return handleChange({ languages: value as Language[] });\r\n };\r\n };\r\n\r\n const getExamChangeHandler = (role: ExpertRole) => {\r\n return (selectedElements: ValueType, actionMeta?: ActionMeta) => {\r\n if ((actionMeta && actionMeta.action === \"clear\") || !selectedElements) {\r\n const modifiedRoles = candidate.rolesWithExamsAndCourseTypes\r\n .filter((rec) => rec.role !== role)\r\n .concat([{ role: role, examIds: [], courseTypes: [] }]);\r\n return handleChange({ rolesWithExamsAndCourseTypes: modifiedRoles });\r\n }\r\n\r\n const selectedElementsArray = selectedElements as OptionType[];\r\n\r\n if (selectedElementsArray) {\r\n var values = selectedElementsArray.map((selectedElement) => selectedElement.value);\r\n const modifiedRoles = candidate.rolesWithExamsAndCourseTypes\r\n .filter((rec) => rec.role !== role)\r\n .concat([{ role: role, examIds: values, courseTypes: [] }]);\r\n return handleChange({ rolesWithExamsAndCourseTypes: modifiedRoles });\r\n }\r\n };\r\n };\r\n\r\n const getCourseTypeChangeHandler = (role: ExpertRole) => {\r\n return (selectedElements: ValueType, actionMeta?: ActionMeta) => {\r\n if ((actionMeta && actionMeta.action === \"clear\") || !selectedElements) {\r\n const modifiedRoles = candidate.rolesWithExamsAndCourseTypes\r\n .filter((roleExam) => roleExam.role !== role)\r\n .concat([{ role: role, examIds: [], courseTypes: [] }]);\r\n return handleChange({ rolesWithExamsAndCourseTypes: modifiedRoles });\r\n }\r\n\r\n const selectedElementsArray = selectedElements as OptionType[];\r\n\r\n if (selectedElementsArray) {\r\n var values = selectedElementsArray.map((selectedElement) => CourseType[selectedElement.value as CourseType]);\r\n const modifiedRoles = candidate.rolesWithExamsAndCourseTypes\r\n .filter((rec) => rec.role !== role)\r\n .concat([{ role: role, examIds: [], courseTypes: values }]);\r\n return handleChange({ rolesWithExamsAndCourseTypes: modifiedRoles });\r\n }\r\n };\r\n };\r\n\r\n const onRolesCreation = (roles: ExpertRole[]) => {\r\n const newRoles = roles\r\n .map((role) => ({ role: role, examIds: [], courseTypes: [] }))\r\n .filter(\r\n (newRole) =>\r\n !candidate.rolesWithExamsAndCourseTypes ||\r\n candidate.rolesWithExamsAndCourseTypes.every((currentRole) => currentRole.role !== newRole.role)\r\n );\r\n handleChange({\r\n rolesWithExamsAndCourseTypes: (candidate.rolesWithExamsAndCourseTypes || []).concat(newRoles).sort(),\r\n });\r\n };\r\n\r\n const onRoleDelete = (role: ExpertRole) => {\r\n handleChange({\r\n rolesWithExamsAndCourseTypes:\r\n candidate.rolesWithExamsAndCourseTypes &&\r\n candidate.rolesWithExamsAndCourseTypes.filter((rec) => rec.role !== role),\r\n });\r\n };\r\n\r\n const closeDeleteDialog = () => setIsDeleteDialogOpen(false);\r\n\r\n const handleChange = (value: Partial) => {\r\n if (!isNewCandidate && value.emailAddress !== undefined) {\r\n // Email was changed, we will display a confirm dialog on save.\r\n setEmailChangeNeedsConfirmation(true);\r\n }\r\n\r\n setCandidate((prevState) => ({\r\n ...prevState,\r\n ...value,\r\n }));\r\n };\r\n\r\n const handleCreate = async () => {\r\n if (handleRequired() && handleCandidateExpertRequired() && handleValidation()) {\r\n const response = await createCandidate(candidate).unwrap();\r\n if (response.success) {\r\n close();\r\n }\r\n }\r\n };\r\n\r\n const handleUpdate = async (checkEmailChangeConfirmation = true) => {\r\n if (checkEmailChangeConfirmation && emailChangeNeedsConfirmation) {\r\n setIsEmailChangeDialogOpened(true);\r\n return;\r\n }\r\n\r\n if (handleRequired() && handleCandidateExpertRequired() && handleValidation()) {\r\n const response = await updateCandidate(candidate).unwrap();\r\n if (response.success) {\r\n close();\r\n }\r\n }\r\n };\r\n\r\n const handleDelete = async () => {\r\n var response = await deleteCandidate(candidate.id).unwrap();\r\n if (response.success) {\r\n enqueueSnackbar();\r\n close();\r\n }\r\n };\r\n\r\n const handleExport = async () => {\r\n exportDebtorNumber(candidate.id).then(() => {\r\n enqueueSnackbar();\r\n });\r\n }\r\n\r\n const handleCandidateExpertRequired = () => {\r\n if (candidate.type !== PersonType.Expert) {\r\n return true;\r\n }\r\n\r\n const newStatus: RequiredCandidateExpert = {\r\n isBankAccountEmpty: !candidate.bankAccount,\r\n hasEmptyRoleArray: candidate.rolesWithExamsAndCourseTypes\r\n .filter(\r\n (rec) =>\r\n rolesWithRequiredExamOrCourseTypeAssignements.includes(rec.role) &&\r\n (rolesAssignedToCourseTypes.includes(rec.role) ? rec.courseTypes.length === 0 : rec.examIds.length === 0)\r\n )\r\n .map((rec) => rec.role),\r\n hasEmptyRole: candidate.rolesWithExamsAndCourseTypes.some(\r\n (rec) =>\r\n rolesWithRequiredExamOrCourseTypeAssignements.includes(rec.role) &&\r\n (rolesAssignedToCourseTypes.includes(rec.role) ? rec.courseTypes.length === 0 : rec.examIds.length === 0)\r\n ),\r\n };\r\n\r\n const values = Object.values(newStatus);\r\n const hasMissingFields = values.some((value) => value === true);\r\n\r\n if (hasMissingFields) {\r\n setIsRequired({ ...isRequired, ...newStatus });\r\n }\r\n return !hasMissingFields;\r\n };\r\n\r\n const handleRequired = () => {\r\n const newStatus: RequiredCandidate = {\r\n isFirstnameEmpty: !candidate.firstName,\r\n isLastnameEmpty: !candidate.lastName,\r\n isGenderEmpty: !candidate.gender,\r\n isBirthDateEmpty: getValidDate(candidate.birthdate) === null,\r\n isEmailEmpty: !candidate.emailAddress,\r\n isStreetEmpty: !candidate.street,\r\n isStreetNumberEmpty: !candidate.streetNumber,\r\n isZipCodeEmpty: !candidate.zipCode,\r\n isCityEmpty: !candidate.city,\r\n isCountryEmpty: !candidate.country,\r\n isLanguageEmpty: false,\r\n isAhvNoEmpty: !candidate.ahvNumber,\r\n isNationalityEmpty: !candidate.placeOfOrigin,\r\n isPlaceOfOriginEmpty:\r\n candidate.nationalityIsSwiss !== undefined && candidate.nationalityIsSwiss && !candidate.placeOfOrigin,\r\n isCantonEmpty: candidate.nationalityIsSwiss !== undefined && candidate.nationalityIsSwiss && !candidate.canton,\r\n isEmployerInformationEmpty: !candidate.employerInformation,\r\n };\r\n const values = Object.values(newStatus);\r\n const hasMissingFields = values.some((value) => value === true);\r\n\r\n if (hasMissingFields) {\r\n setIsRequired({ ...isRequired, ...newStatus });\r\n }\r\n return !hasMissingFields;\r\n };\r\n\r\n const handleValidation = () => {\r\n const { isAhvValid, isCiceroValid, isEmailValid, isPhoneValid, isMobileValid } = isValid;\r\n return isAhvValid && isCiceroValid && isEmailValid && isPhoneValid && isMobileValid;\r\n };\r\n\r\n const handleEmailIsValid = (isEmailValid: boolean) => {\r\n handleIsValid(\"isEmailValid\", isEmailValid);\r\n };\r\n const handleAhvIsValid = (isAhvValid: boolean) => {\r\n handleIsValid(\"isAhvValid\", isAhvValid);\r\n };\r\n const handleCiceroIsValid = (isCiceroValid: boolean) => {\r\n handleIsValid(\"isCiceroValid\", isCiceroValid);\r\n };\r\n const handlePhoneIsValid = (isPhoneValid: boolean) => {\r\n handleIsValid(\"isPhoneValid\", isPhoneValid);\r\n };\r\n const handleMobileIsValid = (isMobileValid: boolean) => {\r\n handleIsValid(\"isMobileValid\", isMobileValid);\r\n };\r\n\r\n const handleIsValid = (propertyName: string, isValid: boolean) => {\r\n setIsValid((prevIsValid) =>\r\n prevIsValid[propertyName as keyof ValidationFields] !== isValid\r\n ? {\r\n ...prevIsValid,\r\n [propertyName]: isValid,\r\n }\r\n : prevIsValid\r\n );\r\n };\r\n\r\n const handleConfirmEmailChange = () => {\r\n setIsEmailChangeDialogOpened(false);\r\n setEmailChangeNeedsConfirmation(false);\r\n handleUpdate(false);\r\n };\r\n\r\n const handleNationalityChanged = (value?: string) => {\r\n if (value === Switzerland) {\r\n handleChange({ placeOfOrigin: \"\" });\r\n handleChange({ nationalityIsSwiss: true });\r\n } else {\r\n handleChange({ canton: \"\" });\r\n handleChange({ nationalityIsSwiss: false });\r\n handleChange({ placeOfOrigin: value });\r\n }\r\n handleChange({ nationality: value });\r\n };\r\n\r\n const handlePreferredContactChange = (event: React.ChangeEvent) => {\r\n const value = event.target.value;\r\n handleChange({\r\n preferredContact: value,\r\n privateIsPreferredContact: value === \"private\",\r\n });\r\n };\r\n\r\n // For the transition from long name to short names of candidate's cantons.\r\n const getCantonDisplayValue = (canton: string | undefined): string => {\r\n if (!canton) {\r\n return \"\";\r\n }\r\n const key = `canton.${canton.toLowerCase()}`;\r\n if (isTranslationKey(key)) {\r\n return GetTranslation(intl, key as TranslationKey);\r\n }\r\n return canton;\r\n };\r\n return (\r\n
\r\n \r\n \r\n \r\n {renderForm()}\r\n
\r\n );\r\n};\r\n\r\nexport default CandidateForm;\r\n","import { TableCell, TableSortLabel } from '@material-ui/core';\nimport { TableCellProps } from '@material-ui/core/TableCell';\nimport * as React from 'react';\n\ntype HeaderCellProps = {\n columnKey: string;\n onClickSortHandler: (columnKey: string) => void;\n direction?: \"asc\" | \"desc\";\n orderBy?: string;\n className?: string;\n isSortingDisabled?: boolean;\n} & Partial;\n\nexport default class CustomHeaderCell extends React.Component {\n public render(): JSX.Element {\n const { orderBy, isSortingDisabled, direction, columnKey, onClickSortHandler, ...rest } = this.props;\n\n return (\n \n \n {this.props.children}\n \n \n );\n }\n\n private onClickSortHandler = () => {\n const { columnKey, isSortingDisabled, onClickSortHandler } = this.props;\n\n if (!isSortingDisabled) {\n onClickSortHandler(columnKey);\n }\n }\n}\n","import { createStyles, TableFooter, WithStyles, withStyles } from '@material-ui/core';\nimport { TableFooterProps } from '@material-ui/core/TableFooter';\nimport * as React from 'react';\n\ntype CustomTableFooterProps =\n & WithStyles\n & TableFooterProps;\n\nconst CustomTableFooter: React.FC = props => {\n const { classes, ...rest } = props;\n\n return ;\n\n}\n\nconst styles = () => createStyles({\n footer: {\n \"& div\": {\n backgroundColor: \"unset\"\n }\n }\n});\n\nexport default withStyles(styles)(CustomTableFooter);\n","import { CustomGridFilter } from './CustomGrid';\nimport CustomButton from '../buttons/CustomButton';\nimport RightButtonArea from '../buttons/RightButtonArea';\nimport CustomSearchBox from '../customSearchBox/CustomSearchBox';\nimport { CustomSwitch } from '../CustomSwitch';\nimport { Add } from '@material-ui/icons';\nimport React from 'react';\n\ninterface GridActionsProps {\n addButtonTooltip: NonNullable;\n filters?: CustomGridFilter[];\n hideAddButton?: boolean;\n hideSearchBar?: boolean;\n onAddClick: (event: any) => void;\n onSearchTokenChanged?: (searchToken: string) => void;\n searchToken: string;\n tag?: boolean;\n additionalButtons?: \"\" | JSX.Element;\n}\nexport class GridActions extends React.Component> {\n public render() {\n if (this.props.hideAddButton && this.props.hideSearchBar && !this.props.filters) {\n return ;\n }\n\n return (\n \n {this.props.filters && this.renderSwitchFilters()}\n {!this.props.hideSearchBar && }\n {!this.props.hideAddButton && \n \n }\n {this.props.additionalButtons}\n \n );\n }\n\n private renderSwitchFilters = () => {\n let switchFilters: JSX.Element[] = [];\n\n if (this.props.filters) {\n switchFilters = this.props.filters.map((filter: CustomGridFilter, index: number) => {\n return ;\n });\n }\n\n return switchFilters;\n };\n\n private handleSearchToken = (event: any) => {\n if (this.props.onSearchTokenChanged) {\n this.props.onSearchTokenChanged(event.target.value);\n }\n };\n}\n\nexport default GridActions;\n\nconst switchFilter: React.CSSProperties = {\n marginRight: \"10px\",\n};\n","import Table, { TableProps } from \"@material-ui/core/Table\";\nimport TableBody from \"@material-ui/core/TableBody\";\nimport TableCell, { TableCellProps } from \"@material-ui/core/TableCell\";\nimport TableHead from \"@material-ui/core/TableHead\";\nimport TablePagination from \"@material-ui/core/TablePagination\";\nimport TableRow, { TableRowProps } from \"@material-ui/core/TableRow\";\nimport Typography from \"@material-ui/core/Typography\";\nimport _ from \"lodash\";\nimport * as React from \"react\";\nimport TranslatedMessage from \"../../translations/TranslatedMessage\";\nimport CustomHeaderCell from \"./CustomHeaderCell\";\nimport CustomTableFooter from \"./CustomTableFooter\";\nimport GridActions from \"./GridActions\";\n\nexport interface CustomGridFilter {\n label: string;\n filterFunction: (element: RowType) => boolean;\n isActive: boolean;\n onFilterChange: (checked: boolean) => void;\n}\n\nexport interface ColumnDefinition {\n columnKey: string;\n columnLabel: string | React.ReactNode;\n cellValue: (row: RowType) => any;\n orderValue?: (row: RowType) => any;\n cellProps?: (row?: RowType) => Partial;\n isSortingDisabled?: boolean;\n}\n\ntype CustomGridProps = {\n rows: RowType[];\n additionalHeaderRows?: RowType[];\n rowKey: (row: RowType) => string;\n onRowClick?: (row: RowType) => void;\n columnDefinitions: Array>;\n tableProps?: Partial;\n rowsProps?: (row?: RowType, index?: number, isAdditionalHeaderRow?: boolean) => Partial;\n // This function will be called with the actual rows that are displayed\n // after changing the sort. Usefull when rendering custom rows instead of passing them\n // as props\n onChangedSort?: (rows: RowType[]) => void;\n initialSorting?: {\n direction: \"asc\" | \"desc\";\n orderBy: string;\n };\n addButtonTooltip: NonNullable;\n onAddClick: (event: any) => void;\n tag?: boolean;\n filters?: CustomGridFilter[];\n hideAddButton?: boolean;\n hideSearchBar?: boolean;\n additionalButtons?: \"\" | JSX.Element;\n rowsPerPage?: number;\n};\n\ninterface CustomGridState {\n direction?: \"asc\" | \"desc\";\n orderBy?: string;\n page: number;\n rowsPerPage: number;\n searchToken: string;\n}\n\nexport class CustomGrid extends React.Component, CustomGridState> {\n constructor(props: CustomGridProps) {\n super(props);\n const { initialSorting } = props;\n\n const hash = this.getParametersFromQueryString();\n const { page, searchToken } = hash;\n const orderBy = hash.orderBy ?? initialSorting?.orderBy;\n const direction = hash.direction ?? initialSorting?.direction ?? \"asc\";\n const rowsPerPage = hash.rowsPerPage ?? props.rowsPerPage ?? 10;\n\n this.state = {\n page: page,\n rowsPerPage: rowsPerPage,\n direction: direction,\n orderBy: orderBy,\n searchToken: searchToken,\n };\n }\n\n public render() {\n const headerRows = this.renderHeadRows();\n\n const filteredItems = this.getFilteredRows(this.getSortedRows());\n const pagedItems = this.getPagedRows(filteredItems);\n const bodyRows = this.renderBodyRows(pagedItems);\n\n return (\n \n \n
\n {this.renderHeader(headerRows, bodyRows)}\n {this.renderBody(headerRows, bodyRows)}\n
\n {this.renderFooter(filteredItems.length)}\n
\n );\n }\n\n public componentDidMount() {\n window.addEventListener(\"hashchange\", this.changeGridParametersFromHash, false);\n }\n\n public componentWillUnmount() {\n window.removeEventListener(\"hashchange\", this.changeGridParametersFromHash, false);\n }\n\n private changeGridParametersFromHash = () => {\n const hash = this.getParametersFromQueryString();\n\n this.setState(hash);\n };\n\n private getParametersFromQueryString(): CustomGridState {\n let hash: CustomGridState = {\n page: 0,\n rowsPerPage: 10,\n searchToken: \"\",\n };\n\n if (window.location.hash.length > 1) {\n hash = JSON.parse(atob(window.location.hash.replace(\"#\", \"\")));\n }\n\n return hash;\n }\n\n private setParametersInQueryString(hash: CustomGridState) {\n window.location.hash = btoa(JSON.stringify(hash));\n // That part worked better in some situations but caused issues in Firefox.\n // var state = window.history.state;\n // state.internal = true;\n // window.history.replaceState(state, \"\", \"#\" + btoa(JSON.stringify(hash)));\n }\n\n private handleSearchTokenChanged = (searchToken: string) => {\n let hash = this.getParametersFromQueryString();\n hash.searchToken = searchToken;\n hash.page = 0;\n this.setParametersInQueryString(hash);\n this.setState({ searchToken: searchToken, page: 0 });\n };\n\n private renderHeadRows = () => {\n const { columnDefinitions } = this.props;\n\n return (\n \n \n {columnDefinitions.map((columnDefinition: ColumnDefinition) => {\n const { columnKey, columnLabel, isSortingDisabled } = columnDefinition;\n const { direction, orderBy } = this.state;\n\n return (\n \n {columnLabel}\n \n );\n })}\n \n {this.props.additionalHeaderRows &&\n this.props.additionalHeaderRows.map((row, index) => this.renderAdditionalHeaderTableRow(row, index))}\n \n );\n };\n\n private renderBodyRows = (rows: RowType[]) => {\n return (\n \n {!this.props.children && rows.map((row, index) => this.renderTableRow(row, index))}\n {this.props.children}\n \n );\n };\n\n private renderHeader = (headerRows: JSX.Element, bodyRows: JSX.Element) => {\n return (\n
\n \n {headerRows}\n {bodyRows}\n
\n
\n );\n };\n\n private renderBody = (headerRows: JSX.Element, bodyRows: JSX.Element) => {\n const hasRows = this.props.rows.length > 0;\n const { children, tableProps } = this.props;\n\n return (\n
\n \n {headerRows}\n \n {!hasRows && !children && (\n \n \n \n \n \n \n \n )}\n {bodyRows}\n \n
\n
\n );\n };\n\n private renderFooter = (totalRows: number) => {\n const { page, rowsPerPage } = this.state;\n\n return (\n
\n \n \n \n \n \n \n
\n
\n );\n };\n\n private handleOnChangePage = (e: any, page: number) => {\n let hash = this.getParametersFromQueryString();\n hash.page = page;\n this.setParametersInQueryString(hash);\n this.setState({ page });\n };\n\n private handleChangeRowsPerPage = (event: any) => {\n const rowsPerPage: number = parseInt(event.target.value, 10);\n\n let hash = this.getParametersFromQueryString();\n hash.rowsPerPage = rowsPerPage;\n this.setParametersInQueryString(hash);\n\n this.setState({ rowsPerPage: rowsPerPage, page: 0 });\n };\n\n private getOnClickFunction = (row: RowType) => () => {\n const { onRowClick } = this.props;\n if (onRowClick) {\n onRowClick(row);\n }\n };\n\n private onClickSortHandler = (columnKey: string) => {\n let newDirection: \"asc\" | \"desc\" = \"desc\";\n const { direction, orderBy } = this.state;\n\n if (orderBy === columnKey && direction === \"desc\") {\n newDirection = \"asc\";\n }\n\n let hash = this.getParametersFromQueryString();\n hash.page = 0;\n hash.orderBy = columnKey;\n hash.direction = newDirection;\n this.setParametersInQueryString(hash);\n\n this.setState({ orderBy: columnKey, direction: newDirection, page: 0 }, () => {\n const { onChangedSort } = this.props;\n\n if (onChangedSort) {\n const filteredRows = this.getFilteredRows(this.getSortedRows());\n onChangedSort(this.getPagedRows(filteredRows));\n }\n });\n };\n\n private getSortedRows(): RowType[] {\n const { columnDefinitions, rows } = this.props;\n const { direction, orderBy } = this.state;\n\n if (!orderBy) {\n return rows;\n }\n\n const columnDefinition = columnDefinitions.find((_) => _.columnKey === orderBy);\n if (!columnDefinition) {\n return rows;\n }\n\n const { cellValue, orderValue } = columnDefinition;\n const valueOrderGetter = orderValue || cellValue;\n\n const sortedRows = _.orderBy(\n rows,\n (_: RowType) => {\n if (typeof valueOrderGetter(_) === \"string\") {\n return valueOrderGetter(_).toLowerCase();\n }\n\n return valueOrderGetter(_);\n },\n direction\n );\n\n return sortedRows as RowType[];\n }\n\n private getFilteredRows(rows: RowType[]): RowType[] {\n const { filters, columnDefinitions } = this.props;\n const { searchToken } = this.state;\n\n if (!searchToken && !filters) {\n return rows;\n }\n\n let filteredRows: RowType[] = [...rows];\n\n if (filters) {\n // Apply switch filters\n for (let filter of filters) {\n if (filter.isActive) {\n filteredRows = _.filter(filteredRows, (row: RowType) => {\n return filter.filterFunction(row);\n });\n }\n }\n }\n\n if (searchToken) {\n // Filter by search token\n filteredRows = _.filter(filteredRows, (row: RowType) => {\n const rowContent = Object.keys(row)\n .map((key) => {\n const value = row[key as keyof RowType];\n if (typeof value === \"object\") {\n var columnDefinition = columnDefinitions.find((column) => column.columnKey === key);\n return columnDefinition ? columnDefinition?.cellValue(row) : \"\";\n }\n return value;\n })\n .join()\n .toLowerCase();\n\n return rowContent.indexOf(this.state.searchToken.toLowerCase()) >= 0;\n });\n }\n\n return filteredRows as RowType[];\n }\n\n private getPagedRows = (rows: RowType[]) => {\n if (rows) {\n const { page, rowsPerPage } = this.state;\n const offset = page * rowsPerPage;\n const pagedRows = rows.slice(offset, offset + rowsPerPage);\n\n return pagedRows;\n }\n\n return rows;\n };\n\n private renderTableRow = (row: RowType, index: number): JSX.Element => {\n const { columnDefinitions, rowKey, onRowClick } = this.props;\n\n return (\n \n {columnDefinitions.map((columnDefinition) => (\n \n {columnDefinition.cellValue(row)}\n \n ))}\n \n );\n };\n\n private renderAdditionalHeaderTableRow = (row: RowType, index: number): JSX.Element => {\n const { columnDefinitions, rowKey, rowsProps } = this.props;\n\n return (\n \n {columnDefinitions.map((columnDefinition) => (\n \n {columnDefinition.cellValue(row)}\n \n ))}\n \n );\n };\n}\n\nconst boxContainer: React.CSSProperties = {\n display: \"flex\",\n flexFlow: \"column\",\n maxHeight: \"calc(100vh - 221px)\",\n maxWidth: \"100%\",\n overflowX: \"auto\",\n};\n\nconst boxRowHeader: React.CSSProperties = {\n flex: \"0 1 auto\",\n};\n\nconst boxContent: React.CSSProperties = {\n display: \"flex\",\n flexFlow: \"column\",\n flex: \"1 1 auto\",\n};\n\nconst boxFooter: React.CSSProperties = {\n flex: \"0 1 auto\",\n};\n","import { Tooltip } from \"@material-ui/core\";\nimport { CloudUpload, GetApp, Person, School } from \"@material-ui/icons\";\nimport \"moment/locale/de-ch\";\nimport * as React from \"react\";\nimport { WithIntlProps, injectIntl } from \"react-intl\";\nimport * as CandidateApi from \"../../api/CandidateApi\";\nimport { SwissGermanLocale, SwissTimeZone } from \"../../data/constants\";\nimport { CandidateViewModel } from \"../../model/CandidateViewModel\";\nimport { PersonType } from \"../../model/PersonType\";\nimport { GetTranslation } from \"../../translations/GetTranslation\";\nimport CustomButton from \"../common/buttons/CustomButton\";\nimport { ColumnDefinition, CustomGrid, CustomGridFilter } from \"../common/customGrid/CustomGrid\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\n\ntype ICandidateGridProps = {\n candidates: CandidateViewModel[];\n onCandidateClick: (id: string) => void;\n onAddClick: (event: any) => void;\n onUploadEdiIdsButtonClick: () => void;\n} & WithIntlProps;\n\ntype CandidateGridState = {\n filters: CustomGridFilter[];\n};\n\nclass CandidateGrid extends React.Component {\n constructor(props: any) {\n super(props);\n\n const { intl } = props;\n const filters: CustomGridFilter[] = [\n {\n label: GetTranslation(intl, \"person.field.showOnlyExperts\"),\n isActive: false,\n filterFunction: (row: CandidateViewModel) => row.type === PersonType.Expert,\n onFilterChange: this.getHandlerByFilterIndex(0),\n },\n ];\n\n this.state = {\n filters,\n };\n }\n\n private columnsDefinitions: Array> = [\n {\n columnKey: \"icon\",\n columnLabel: ,\n orderValue: (_) => _.type,\n cellValue: (_) => {\n if (_.type === PersonType.Expert) {\n return (\n }>\n \n \n );\n }\n return (\n }>\n \n \n );\n },\n },\n {\n columnKey: \"firstName\",\n columnLabel: ,\n cellValue: (_) => _.firstName,\n },\n {\n columnKey: \"lastName\",\n columnLabel: ,\n cellValue: (_) => _.lastName,\n },\n { columnKey: \"street\", columnLabel: , cellValue: (_) => _.street },\n { columnKey: \"zipCode\", columnLabel: , cellValue: (_) => _.zipCode },\n { columnKey: \"city\", columnLabel: , cellValue: (_) => _.city },\n {\n columnKey: \"email\",\n columnLabel: ,\n cellValue: (_) => _.emailAddress,\n },\n {\n columnKey: \"mobileNumber\",\n columnLabel: ,\n cellValue: (_) => _.mobileNumber,\n },\n {\n columnKey: \"birthdate\",\n columnLabel: ,\n orderValue: (_) => _.birthdate,\n cellValue: (_) => new Date(_.birthdate).toLocaleDateString(SwissGermanLocale, { timeZone: SwissTimeZone }),\n },\n ];\n\n private additionalButtons = (\n \n }\n onClick={() => {\n CandidateApi.exportAllCandidates();\n }}\n >\n \n \n }\n onClick={this.props.onUploadEdiIdsButtonClick}\n >\n \n \n \n );\n\n private getHandlerByFilterIndex(index: number) {\n return (checked: boolean) => {\n this.setState((prevState) => {\n const newFilters = [...prevState.filters];\n newFilters[index].isActive = checked;\n return {\n ...prevState,\n filters: [...newFilters],\n };\n });\n };\n }\n\n public render() {\n return (\n \n filters={this.state.filters}\n columnDefinitions={this.columnsDefinitions}\n rows={this.props.candidates}\n onRowClick={(_) => this.props.onCandidateClick(_.id)}\n rowKey={(_) => _.id}\n addButtonTooltip={}\n onAddClick={this.props.onAddClick}\n additionalButtons={\n this.props.candidates.length > 0 ? this.additionalButtons : \n }\n />\n );\n }\n}\n\nexport default injectIntl(CandidateGrid);\n","import download from \"downloadjs\";\nimport { customFetch } from \"./CustomFetch\";\n\nexport const ediIdsImportUrl = \"candidate/edi\";\n\nconst candidateCsvFileName = \"kandidaten.csv\";\n\nexport const exportAllCandidates = () => {\n return customFetch(`candidate/export`)\n .then((response) => response.blob())\n .then((blob) => {\n download(blob, candidateCsvFileName);\n });\n};\n","import { LinearProgress, makeStyles, Paper, Theme } from \"@material-ui/core\";\nimport { CloudUpload } from \"@material-ui/icons\";\nimport * as React from \"react\";\nimport Dropzone, { DropzoneRenderArgs, FileWithPreview } from \"react-dropzone\";\nimport { ApiResponse, customFetch } from \"../../api/CustomFetch\";\n\ntype UploadDropZoneProps = {\n uploadURL?: string;\n onFileUploaded?: (file: FileWithPreview, response: ApiResponse) => void;\n onDrop?: (file: FileWithPreview[]) => void;\n accept?: string;\n tags?: string[];\n allowMultiple?: boolean;\n onUploadError?: (response?: ApiResponse) => void;\n postFileFn?: (file: FileWithPreview) => Promise;\n};\n\nconst useStyles = makeStyles((theme: Theme) => ({\n paperRoot: {\n ...theme.mixins.gutters(),\n paddingBottom: theme.spacing(2),\n paddingTop: theme.spacing(2),\n height: \"100%\",\n textAlign: \"center\",\n width: \"100%\",\n },\n paperRootRejecting: {\n backgroundColor: \"rgba(153, 0, 0,0.25)\",\n },\n paperRootAccepting: {\n backgroundColor: \"rgba(102, 169, 47, 0.35)\",\n },\n uploadIcon: {\n height: \"2em\",\n width: \"2em\",\n },\n}));\n\nconst UploadDropZone = (props: UploadDropZoneProps) => {\n const [isInTransfer, setIsInTransfer] = React.useState(false);\n const classes = useStyles();\n\n const { uploadURL, onFileUploaded, onDrop, accept, tags, allowMultiple, onUploadError, postFileFn } = props;\n\n const uploadFile = (accepted: FileWithPreview[], rejected: FileWithPreview[]) => {\n if (!accepted || accepted.length === 0) {\n return;\n }\n\n setIsInTransfer(true);\n\n const fileToUpload = accepted[0];\n\n postFile(fileToUpload)\n .then((response) => {\n if (response.ok) {\n setIsInTransfer(false);\n response.json().then((jsonResponse: ApiResponse) => {\n if (onFileUploaded) {\n onFileUploaded(fileToUpload, jsonResponse);\n }\n });\n } else {\n setIsInTransfer(false);\n response.json().then((jsonResponse: ApiResponse) => {\n if (onUploadError) {\n onUploadError(jsonResponse);\n }\n });\n }\n })\n .catch((_) => {\n setIsInTransfer(false);\n });\n };\n\n const postFile = (file: FileWithPreview): Promise => {\n\n if (postFileFn) {\n return postFileFn(file);\n }\n\n if (!uploadURL) {\n throw new Error(\"No uploadURL defined for UploadDropZone.\");\n }\n\n const formData = new FormData();\n formData.append(\"file\", file);\n\n if (tags) {\n tags.forEach((tag: string, index: number) => formData.append(`tags[${index}]`, tag));\n }\n\n return customFetch(uploadURL, {\n body: formData,\n headers: {\n Accept: \"application/json\",\n },\n method: \"POST\",\n });\n };\n\n return (\n \n \n {(childProps: DropzoneRenderArgs) => {\n let paperStyle = classes.paperRoot + \" \";\n paperStyle += childProps.isDragReject ? classes.paperRootRejecting : \"\";\n paperStyle += childProps.isDragAccept ? classes.paperRootAccepting : \"\";\n\n return (\n \n \n \n );\n }}\n \n {isInTransfer && }\n \n );\n};\n\nexport default UploadDropZone;\n","import * as CandidateApi from '../../api/CandidateApi';\nimport { ApiResponse } from '../../api/CustomFetch';\nimport { AddCandidateEdiIdsViewModel } from '../../model/AddCandidateEdiIdsViewModel';\nimport CustomDraggableDialog from '../common/customDialog/CustomDraggableDialog';\nimport UploadDropZone from '../common/UploadDropZone';\nimport TranslatedMessage from '../translations/TranslatedMessage';\nimport { makeStyles } from '@material-ui/core';\nimport React from 'react';\nimport { FileWithPreview } from 'react-dropzone';\n\ninterface ImportEdiIdsDialogProps {\n isOpen: boolean;\n onUploadError: () => void;\n onFileUploaded: (file: FileWithPreview, response: ApiResponse) => void;\n onClose: () => void;\n}\n\nconst useStyles = makeStyles(() => ({\n dropZoneDiv: { width: '50%', marginLeft: 'auto', marginRight: 'auto' }\n}));\n\nconst ImportEdiIdsDialog: React.FunctionComponent = ({ isOpen, onFileUploaded, onUploadError, onClose }) => {\n const classes = useStyles();\n\n return }\n cancelText={}\n content={\n
\n \n
\n
\n }\n isOpen={isOpen}\n title={} />;\n};\n\nexport default ImportEdiIdsDialog;","import { createStyles, LinearProgress, Theme, Typography } from \"@material-ui/core\";\nimport { withStyles } from \"@material-ui/styles\";\nimport { withSnackbar, WithSnackbarProps } from \"notistack\";\nimport React, { Component } from \"react\";\nimport { FileWithPreview } from \"react-dropzone\";\nimport { connect, ConnectedProps } from \"react-redux\";\nimport { RouteComponentProps } from \"react-router\";\nimport { ApplicationState } from \"../..\";\nimport { ApiResponse } from \"../../api/CustomFetch\";\nimport { endpoints } from \"../../api/rtk/CandidateApi\";\nimport { NewEntityId } from \"../../data/constants\";\nimport { AddCandidateEdiIdsViewModel } from \"../../model/AddCandidateEdiIdsViewModel\";\nimport { routesPaths } from \"../../Routes\";\nimport { navigateTo } from \"../../utils/Navigation\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\nimport CandidateGrid from \"./CandidateGrid\";\nimport ImportEdiIdsDialog from \"./ImportEdiIdsDialog\";\n\nconst mapStateToProps = (state: ApplicationState) => {\n return {\n candidatesState: endpoints.getCandidates.select()(state),\n };\n};\nconst mapDispatchToProps = {\n getCandidates: endpoints.getCandidates.initiate,\n};\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ntype CandidateListProps = ConnectedProps & RouteComponentProps & WithSnackbarProps;\n\ntype CandidateListState = {\n isUploadEdiIdsDialogOpen: boolean;\n};\n\nconst styles = ({ spacing }: Theme) =>\n createStyles({\n button: { margin: spacing(1) },\n icon: { marginRight: spacing(1) },\n });\n\nclass CandidateList extends Component {\n constructor(props: CandidateListProps) {\n super(props);\n this.state = {\n isUploadEdiIdsDialogOpen: false,\n };\n }\n\n private handleUploadEdiIdsDialogClose = () => {\n this.setState((prevState) => {\n return {\n ...prevState,\n isUploadEdiIdsDialogOpen: false,\n };\n });\n };\n\n private handleUploadEdiIdsButtonClick = () => {\n this.setState((prevState) => {\n return {\n ...prevState,\n isUploadEdiIdsDialogOpen: true,\n };\n });\n };\n\n private handleUploadEdiIdsError = () => {\n this.props.enqueueSnackbar();\n };\n\n private handleUploadEdiIdsSuccess = (_: FileWithPreview, response: ApiResponse) => {\n const { updatedCandidatesCount, recordsCount: totalCandidatesCount } = response.data;\n this.props.enqueueSnackbar(\n <>\n {\" \"}\n {`${updatedCandidatesCount}/${totalCandidatesCount}`}\n \n );\n };\n\n public componentDidMount() {\n this.props.getCandidates();\n }\n\n public render() {\n return (\n <>\n \n \n \n {this.renderCandidates()}\n \n );\n }\n\n private renderCandidates(): JSX.Element {\n const { isLoading, data: candidates } = this.props.candidatesState;\n\n if (isLoading) {\n return ;\n }\n\n if (candidates === undefined) {\n return <>;\n }\n\n return (\n <>\n this.navigateToCandidate(NewEntityId)}\n />\n \n \n );\n }\n\n private navigateToCandidate = (candidateId: string) => {\n navigateTo(routesPaths.candidate(candidateId), this.props.history);\n };\n}\n\nexport default withSnackbar(withStyles(styles)(connector(CandidateList)));\n","import FormControl from \"@material-ui/core/FormControl\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport FormLabel from \"@material-ui/core/FormLabel\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Radio from \"@material-ui/core/Radio\";\nimport RadioGroup from \"@material-ui/core/RadioGroup\";\nimport Typography from \"@material-ui/core/Typography\";\nimport React from \"react\";\nimport { useIntl } from \"react-intl\";\nimport { Language, RequiredCandidate } from \"../../../data/constants\";\nimport { CandidateViewModel } from \"../../../model/CandidateViewModel\";\nimport { GetTranslation } from \"../../../translations/GetTranslation\";\nimport { AddressFields } from \"../../common/AddressFields\";\nimport FormGridCell from \"../../common/FormGridCell\";\nimport TranslatedMessage from \"../../translations/TranslatedMessage\";\n\ntype CandidateAddressFieldsProps = {\n candidate: CandidateViewModel;\n isRequired: RequiredCandidate;\n onPropertyValueChanges: (part: Partial) => void;\n};\n\nconst CandidateAddressFields: React.FunctionComponent = ({\n candidate,\n isRequired,\n onPropertyValueChanges,\n}) => {\n const intl = useIntl();\n\n const handlePreferredContactChange = (event: React.ChangeEvent) => {\n const contactType = event.target.value;\n if (contactType === \"private\") {\n onPropertyValueChanges({\n preferredContact: contactType,\n privateIsPreferredContact: true,\n employer: \"\",\n employerCity: \"\",\n employerCountry: \"\",\n employerStreet: \"\",\n employerStreetNumber: \"\",\n employerZipCode: \"\",\n });\n } else {\n onPropertyValueChanges({\n preferredContact: contactType,\n privateIsPreferredContact: false,\n });\n }\n };\n\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n onPropertyValueChanges({ correspondenceLanguage: event.target.value as Language })}\n >\n } label={} />\n } label={} />\n } label={} />\n \n \n \n \n \n \n \n \n \n } label={GetTranslation(intl, \"common.private\")} />\n } label={GetTranslation(intl, \"common.business\")} />\n \n \n \n \n \n );\n};\n\nexport default CandidateAddressFields;\n","import Grid from \"@material-ui/core/Grid\";\r\nimport TextField from \"@material-ui/core/TextField\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport React from \"react\";\r\nimport { WithIntlProps, injectIntl } from \"react-intl\";\r\nimport { RequiredCandidateMyProfile, Switzerland } from \"../../../data/constants\";\r\nimport ZipCodes from \"../../../data/zipCodes.json\";\r\nimport { CandidateViewModel } from \"../../../model/CandidateViewModel\";\r\nimport { GetTranslation } from \"../../../translations/GetTranslation\";\r\nimport FormGridCell from \"../../common/FormGridCell\";\r\nimport { CountrySelect } from \"../../common/customAutocomplete/CountrySelect\";\r\nimport TranslatedMessage from \"../../translations/TranslatedMessage\";\r\nimport { isInvalidZipCode } from \"../../../utils/ZipCodeUtils\";\r\n\r\ntype CandidateBusinessFieldsProps = {\r\n candidate: CandidateViewModel;\r\n isRequired: RequiredCandidateMyProfile;\r\n onPropertyValueChanges?: (part: Partial) => void;\r\n} & WithIntlProps;\r\n\r\nconst CandidateBusinessFields: React.FunctionComponent = ({\r\n candidate,\r\n intl,\r\n isRequired,\r\n ...handlers\r\n}) => {\r\n const handleTextChange =\r\n (key: keyof CandidateViewModel) => (event: React.ChangeEvent) =>\r\n handleChange(key, event.target.value);\r\n const handleSelectChange = (key: keyof CandidateViewModel) => (value?: string) => handleChange(key, value);\r\n const handleChange = (key: keyof CandidateViewModel, value?: string | string[] | Date | boolean) => {\r\n let part: Partial = {\r\n [key]: value,\r\n };\r\n\r\n if (handlers.onPropertyValueChanges) {\r\n handlers.onPropertyValueChanges(part);\r\n }\r\n };\r\n const handleZipCodeChange =\r\n (zipCodeKey: keyof CandidateViewModel, cityKey: keyof CandidateViewModel) =>\r\n (event: React.ChangeEvent) => {\r\n handleChange(zipCodeKey, event.target.value);\r\n handleChange(cityKey, \"\");\r\n ZipCodes.forEach((zipCode) => {\r\n if (zipCode.zipCode === event.target.value) {\r\n handleChange(cityKey, zipCode.city);\r\n }\r\n });\r\n };\r\n\r\n if (candidate.employerCountry === \"\") {\r\n handleChange(\"employerCountry\", Switzerland);\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nCandidateBusinessFields.defaultProps = {\r\n onPropertyValueChanges: () => { },\r\n} as Partial;\r\n\r\nexport default injectIntl(CandidateBusinessFields);\r\n","import { Grid, TextField, Typography, createStyles, makeStyles } from \"@material-ui/core\";\r\nimport React from \"react\";\r\nimport { WithIntlProps, injectIntl } from \"react-intl\";\r\nimport { RequiredCandidateMyProfile, Switzerland } from \"../../../data/constants\";\r\nimport { CandidateViewModel } from \"../../../model/CandidateViewModel\";\r\nimport { GetTranslation } from \"../../../translations/GetTranslation\";\r\nimport { TranslationKey, isTranslationKey } from \"../../../translations/TranslationKey\";\r\nimport { getValidDate } from \"../../../utils/Dates\";\r\nimport FormGridCell from \"../../common/FormGridCell\";\r\nimport { CompanySelect } from \"../../common/customAutocomplete/CompanySelect\";\r\nimport { CountrySelect } from \"../../common/customAutocomplete/CountrySelect\";\r\nimport { GenderSelect } from \"../../common/customAutocomplete/GenderSelect\";\r\nimport { IPlaceOfOriginOption, PlaceOfOriginSelect } from \"../../common/customAutocomplete/PlaceOfOriginSelect\";\r\nimport { OptionType } from \"../../common/customSelect/CustomSelect\";\r\nimport DatePicker from \"../../common/datePicker/DatePicker\";\r\nimport AhvNoTextField from \"../../common/textField/AhvNoTextField\";\r\nimport CiceroNoTextField from \"../../common/textField/CiceroNoTextField\";\r\nimport EmailTextField from \"../../common/textField/EmailTextField\";\r\nimport PhoneNoTextField from \"../../common/textField/PhoneNoTextField\";\r\nimport TranslatedMessage from \"../../translations/TranslatedMessage\";\r\n\r\ntype CandidateFieldsProps = {\r\n candidate: CandidateViewModel;\r\n isRequired: RequiredCandidateMyProfile;\r\n places: OptionType[];\r\n onPropertyValueChanges?: (part: Partial) => void;\r\n onChangeAhvIsValid?: (isValid: boolean) => void;\r\n onChangeCiceroIsValid?: (isValid: boolean) => void;\r\n onChangePhoneIsValid?: (isValid: boolean) => void;\r\n onChangeMobileIsValid?: (isValid: boolean) => void;\r\n onChangeEmailIsValid?: (isValid: boolean) => void;\r\n} & WithIntlProps;\r\n\r\nconst useStyles = makeStyles(() =>\r\n createStyles({\r\n header: {\r\n marginTop: \"40px\",\r\n },\r\n })\r\n);\r\n\r\nconst CandidateFields: React.FunctionComponent = ({\r\n candidate,\r\n intl,\r\n isRequired,\r\n countries,\r\n places,\r\n ...handlers\r\n}) => {\r\n const classes = useStyles({});\r\n\r\n const handleTextChange =\r\n (key: keyof CandidateViewModel) => (event: React.ChangeEvent) =>\r\n handleChange(key, event.target.value);\r\n\r\n const handleNationalityChange = (value?: string) => {\r\n if (value === Switzerland) {\r\n handleChange(\"placeOfOrigin\", \"\");\r\n handleChange(\"nationalityIsSwiss\", true);\r\n } else {\r\n handleChange(\"canton\", \"\");\r\n handleChange(\"nationalityIsSwiss\", false);\r\n handleChange(\"placeOfOrigin\", value);\r\n }\r\n handleChange(\"nationality\", value);\r\n };\r\n\r\n const handleCompanyChanged = (value?: string) => handleChange(\"employerInformation\", value);\r\n\r\n const handlePlaceOfOriginChange = (option: IPlaceOfOriginOption | null) => {\r\n handleChange(\"placeOfOrigin\", option?.value);\r\n handleChange(\"canton\", option?.canton);\r\n };\r\n\r\n const handleDateChange = (key: keyof CandidateViewModel) => (date: Date | null) => {\r\n handleChange(key, date);\r\n };\r\n const handleChange = (\r\n key: keyof CandidateViewModel,\r\n value: string | string[] | Date | boolean | null | undefined\r\n ) => {\r\n let part: Partial = {\r\n [key]: value,\r\n };\r\n\r\n if (handlers.onPropertyValueChanges) {\r\n handlers.onPropertyValueChanges(part);\r\n }\r\n };\r\n\r\n // For the transition from long name to short names of candidate's cantons.\r\n const getCantonDisplayValue = (): string => {\r\n if (!candidate.canton) {\r\n return \"\";\r\n }\r\n const key = `canton.${candidate.canton.toLowerCase()}`;\r\n if (isTranslationKey(key)) {\r\n return GetTranslation(intl, key as TranslationKey);\r\n }\r\n return candidate.canton;\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n handleChange(\"gender\", value)}\r\n />\r\n \r\n }\r\n value={getValidDate(candidate.birthdate)}\r\n onChange={handleDateChange(\"birthdate\")}\r\n required={true}\r\n error={isRequired.isBirthDateEmpty}\r\n disabled={candidate.disablePersonalFields}\r\n />\r\n \r\n \r\n }\r\n onChangeIsValid={handlers.onChangeAhvIsValid}\r\n onChange={handleTextChange(\"ahvNumber\")}\r\n value={candidate.ahvNumber || \"\"}\r\n disabled={candidate.disablePersonalFields}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n onChangeIsValid={handlers.onChangeCiceroIsValid}\r\n onChange={handleTextChange(\"ciceroNumber\")}\r\n value={candidate.ciceroNumber || \"\"}\r\n />\r\n \r\n \r\n {candidate.nationalityIsSwiss ? (\r\n \r\n handlePlaceOfOriginChange(value)}\r\n required\r\n error={isRequired.isPlaceOfOriginEmpty}\r\n disabled={candidate.disablePersonalFields}\r\n />\r\n \r\n \r\n \r\n \r\n ) : (\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nCandidateFields.defaultProps = {\r\n onPropertyValueChanges: () => {},\r\n onChangeAhvIsValid: () => {},\r\n onChangePhoneIsValid: () => {},\r\n onChangeMobileIsValid: () => {},\r\n onChangeEmailIsValid: () => {},\r\n} as Partial;\r\n\r\nexport default injectIntl(CandidateFields);\r\n","import { Grid, Typography } from \"@material-ui/core\";\nimport React from \"react\";\nimport { WithIntlProps, injectIntl } from \"react-intl\";\nimport { PropertyNames, RequiredCandidateMyProfile } from \"../../../data/constants\";\nimport { CandidateViewModel } from \"../../../model/CandidateViewModel\";\nimport { GetTranslation } from \"../../../translations/GetTranslation\";\nimport GridTextField from \"../../common/customGrid/GridTextField\";\nimport TranslatedMessage from \"../../translations/TranslatedMessage\";\n\ntype ExpertFieldsProps = {\n expert: CandidateViewModel;\n isRequired: RequiredCandidateMyProfile;\n onPropertyValueChanges?: (part: Partial) => void;\n} & WithIntlProps;\n\nconst ExpertFields: React.FunctionComponent = ({ expert, intl, isRequired, ...handlers }) => {\n const handleTextChange =\n (key: keyof CandidateViewModel) => (event: React.ChangeEvent) =>\n handleChange(key, event.target.value);\n\n const handleChange = (\n key: keyof CandidateViewModel,\n value: string | string[] | Date | boolean | null | undefined\n ) => {\n let part: Partial = {\n [key]: value,\n };\n\n if (handlers.onPropertyValueChanges) {\n handlers.onPropertyValueChanges(part);\n }\n };\n\n return (\n <>\n \n \n \n \n \n \n \n );\n};\n\nexport default injectIntl(ExpertFields);\n","import { Grid, LinearProgress, Typography } from \"@material-ui/core\";\nimport { Cancel, Save } from \"@material-ui/icons\";\nimport React, { FC, useEffect, useState } from \"react\";\nimport { useHistory } from \"react-router\";\nimport { useGetMeQuery, useUpdateMeMutation } from \"../../../api/rtk/MeApi\";\nimport { RequiredCandidateMyProfile } from \"../../../data/constants\";\nimport Places from \"../../../data/placeOfOrigin.json\";\nimport { CandidateViewModel } from \"../../../model/CandidateViewModel\";\nimport { PersonType } from \"../../../model/PersonType\";\nimport { getValidDate } from \"../../../utils/Dates\";\nimport CustomButton from \"../../common/buttons/CustomButton\";\nimport RightButtonArea from \"../../common/buttons/RightButtonArea\";\nimport CustomDraggableDialog from \"../../common/customDialog/CustomDraggableDialog\";\nimport TranslatedMessage from \"../../translations/TranslatedMessage\";\nimport { initialCandidate } from \"../CandidateConstants\";\nimport CandidateAddressFields from \"./CandidateAddressFields\";\nimport CandidateBusinessFields from \"./CandidateBusinessFields\";\nimport CandidateFields from \"./CandidateFields\";\nimport ExpertFields from \"./ExpertFields\";\n\nconst initialIsRequired: RequiredCandidateMyProfile = {\n isFirstnameEmpty: false,\n isLastnameEmpty: false,\n isGenderEmpty: false,\n isBirthDateEmpty: false,\n isStreetEmpty: false,\n isStreetNumberEmpty: false,\n isZipCodeEmpty: false,\n isCityEmpty: false,\n isCountryEmpty: false,\n isLanguageEmpty: false,\n isAhvNoEmpty: false,\n isNationalityEmpty: false,\n isPlaceOfOriginEmpty: false,\n isCantonEmpty: false,\n isEmployerInformationEmpty: false,\n isEmployerEmpty: false,\n isEmployerStreetEmpty: false,\n isEmployerStreetNumberEmpty: false,\n isEmployerZipCodeEmpty: false,\n isEmployerCityEmpty: false,\n isEmployerCountryEmpty: false,\n isEmailEmpty: false,\n isBankAccountEmpty: false,\n};\n\nconst MyProfile: FC = () => {\n const history = useHistory();\n\n const { data: fetchedMe, isFetching: isMeFetching } = useGetMeQuery();\n const [updateMe, { isLoading: isUpdateMeLoading }] = useUpdateMeMutation();\n const isLoading = isMeFetching || isUpdateMeLoading;\n\n const [me, setMe] = useState(initialCandidate);\n const [isEmailValid, setIsEmailValid] = useState(false);\n const [isAhvValid, setIsAhvValid] = useState(false);\n const [isCiceroValid, setIsCiceroValid] = useState(false);\n const [isPhoneValid, setIsPhoneValid] = useState(false);\n const [isMobileValid, setIsMobileValid] = useState(false);\n const [isRequired, setIsRequired] = useState(initialIsRequired);\n const [isEmailChangeDialogOpened, setIsEmailChangeDialogOpened] = useState(false);\n const [emailChangeNeedsConfirmation, setEmailChangeNeedsConfirmation] = useState(false);\n const [showConfirmationDialog, setShowConfirmationDialog] = React.useState(false);\n\n const isUserExpert = me?.type === PersonType.Expert;\n\n useEffect(() => {\n if (fetchedMe !== undefined) {\n setMe(fetchedMe);\n }\n }, [fetchedMe]);\n\n const handleCandidateChange = (partialCandidate: Partial) => {\n if (partialCandidate.emailAddress !== undefined) {\n // Email was changed, we will display a confirm dialog on save.\n setEmailChangeNeedsConfirmation(true);\n }\n setMe((prevCandidate) => ({ ...prevCandidate, ...partialCandidate }));\n };\n\n if (isLoading) {\n return ;\n }\n\n if (fetchedMe === undefined) {\n return <>;\n }\n\n const close = () => history.goBack();\n\n const handleSave = async (checkEmailChangeConfirmation = true) => {\n if (checkEmailChangeConfirmation && emailChangeNeedsConfirmation) {\n setIsEmailChangeDialogOpened(true);\n return;\n }\n\n if (handleRequired() && handleValidation()) {\n if (!me.disablePersonalFields && !showConfirmationDialog) {\n setShowConfirmationDialog(true);\n return;\n }\n const response = await updateMe(me).unwrap();\n if (response.success) {\n close();\n }\n }\n };\n\n const handleEmpty = (field: any, isEmpty: string) => {\n if (field === \"\" || field === null) {\n setIsRequired((prevIsRequired) => ({ ...prevIsRequired, [isEmpty]: true }));\n return true;\n } else {\n setIsRequired((prevIsRequired) => ({ ...prevIsRequired, [isEmpty]: false }));\n return false;\n }\n };\n\n const handleValidDate = (value: any, isEmpty: string) => {\n value = getValidDate(value);\n\n return handleEmpty(value, isEmpty);\n };\n\n const handleRequired = () => {\n const resultList: boolean[] = [];\n resultList.push(handleEmpty(me.firstName, \"isFirstnameEmpty\"));\n resultList.push(handleEmpty(me.lastName, \"isLastnameEmpty\"));\n resultList.push(handleEmpty(me.gender, \"isGenderEmpty\"));\n resultList.push(handleValidDate(me.birthdate, \"isBirthDateEmpty\"));\n resultList.push(handleEmpty(me.street, \"isStreetEmpty\"));\n resultList.push(handleEmpty(me.streetNumber, \"isStreetNumberEmpty\"));\n resultList.push(handleEmpty(me.zipCode, \"isZipCodeEmpty\"));\n resultList.push(handleEmpty(me.city, \"isCityEmpty\"));\n resultList.push(handleEmpty(me.country, \"isCountryEmpty\"));\n resultList.push(handleEmpty(me.correspondenceLanguage, \"isLanguageEmpty\"));\n resultList.push(handleEmpty(me.ahvNumber, \"isAhvNoEmpty\"));\n resultList.push(handleEmpty(me.nationality, \"isNationalityEmpty\"));\n resultList.push(handleEmpty(me.employerInformation, \"isEmployerInformationEmpty\"));\n if (me.nationalityIsSwiss) {\n resultList.push(handleEmpty(me.placeOfOrigin, \"isPlaceOfOriginEmpty\"));\n resultList.push(handleEmpty(me.canton, \"isCantonEmpty\"));\n }\n if (!me.privateIsPreferredContact) {\n resultList.push(handleEmpty(me.employer, \"isEmployerEmpty\"));\n resultList.push(handleEmpty(me.employerCity, \"isEmployerCityEmpty\"));\n resultList.push(handleEmpty(me.employerCountry, \"isEmployerCountryEmpty\"));\n resultList.push(handleEmpty(me.employerStreet, \"isEmployerStreetEmpty\"));\n resultList.push(handleEmpty(me.employerStreetNumber, \"isEmployerStreetNumberEmpty\"));\n resultList.push(handleEmpty(me.employerZipCode, \"isEmployerZipCodeEmpty\"));\n }\n if (isUserExpert) {\n resultList.push(handleEmpty(me.bankAccount, \"isBankAccountEmpty\"));\n }\n\n return resultList.every((fieldStatus) => fieldStatus === false);\n };\n\n const handleValidation = () => isEmailValid && isAhvValid && isCiceroValid && isPhoneValid && isMobileValid;\n\n const handleConfirmEmailChange = () => {\n setIsEmailChangeDialogOpened(false);\n setEmailChangeNeedsConfirmation(false);\n handleSave(false);\n };\n\n const handleConfirmationDialog = () => {\n setMe((prevCandidate) => ({ ...prevCandidate, disablePersonalFields: true }));\n setShowConfirmationDialog(false);\n handleSave();\n };\n\n return (\n <>\n \n \n \n \n } onClick={handleSave}>\n \n \n } onClick={close}>\n \n \n \n \n \n setIsEmailValid(isValid)}\n onChangeAhvIsValid={(isValid: boolean) => setIsAhvValid(isValid)}\n onChangeCiceroIsValid={(isValid: boolean) => setIsCiceroValid(isValid)}\n onChangePhoneIsValid={(isValid: boolean) => setIsPhoneValid(isValid)}\n onChangeMobileIsValid={(isValid: boolean) => setIsMobileValid(isValid)}\n isRequired={isRequired}\n candidate={me}\n places={Places}\n />\n \n \n \n \n {!me.privateIsPreferredContact && (\n \n \n \n )}\n {isUserExpert && (\n \n \n \n )}\n \n }\n cancelText={}\n content={}\n isOpen={isEmailChangeDialogOpened}\n onAccept={handleConfirmEmailChange}\n onCancel={() => setIsEmailChangeDialogOpened(false)}\n />\n }\n cancelText={}\n content={}\n isOpen={showConfirmationDialog}\n onAccept={handleConfirmationDialog}\n onCancel={() => setShowConfirmationDialog(false)}\n title={}\n />\n \n );\n};\n\nexport default MyProfile;\n","import { CourseIndex, CourseStatus, CourseViewModel } from \"../../model/Course\";\nimport { ApiResponse } from \"../CustomFetch\";\nimport { api, transformApiResponse } from \"./BaseApi\";\n\nconst courseApi = api.enhanceEndpoints({ addTagTypes: [\"Courses\"] }).injectEndpoints({\n endpoints: (builder) => ({\n getCourses: builder.query({\n query: () => \"course\",\n transformResponse: transformApiResponse,\n providesTags: [{ type: \"Courses\", id: \"LIST\" }],\n }),\n\n getCourse: builder.query({\n query: (courseId) => `course/${courseId}`,\n transformResponse: transformApiResponse,\n providesTags: (_result, _error, arg) => [{ type: \"Courses\", id: arg }],\n }),\n\n createCourse: builder.mutation, CourseViewModel>({\n query: (courseViewModel) => ({\n url: `course`,\n body: courseViewModel,\n method: \"POST\",\n }),\n invalidatesTags: [{ type: \"Courses\", id: \"LIST\" }],\n }),\n\n updateCourse: builder.mutation, CourseViewModel>({\n query: (courseViewModel) => ({\n url: `course`,\n body: courseViewModel,\n method: \"PUT\",\n }),\n invalidatesTags: (_result, _error, arg) => [\n { type: \"Courses\", id: \"LIST\" },\n { type: \"Courses\", id: arg.id },\n ],\n }),\n\n publishCourse: builder.mutation, CourseViewModel>({\n query: (courseViewModel) => ({\n url: `course/status/${courseViewModel.id}/${CourseStatus.Published}`,\n body: courseViewModel,\n method: \"PUT\",\n }),\n invalidatesTags: (_result, _error, arg) => [\n { type: \"Courses\", id: \"LIST\" },\n { type: \"Courses\", id: arg.id },\n ],\n }),\n\n archiveCourse: builder.mutation, CourseViewModel>({\n query: (courseViewModel) => ({\n url: `course/status/${courseViewModel.id}/${CourseStatus.Archived}`,\n body: courseViewModel,\n method: \"PUT\",\n }),\n invalidatesTags: (_result, _error, arg) => [\n { type: \"Courses\", id: \"LIST\" },\n { type: \"Courses\", id: arg.id },\n ],\n }),\n\n deleteCourse: builder.mutation, string>({\n query: (courseId) => ({\n url: `course/${courseId}`,\n method: \"DELETE\",\n }),\n invalidatesTags: (_result, _error, arg) => [\n { type: \"Courses\", id: \"LIST\" },\n { type: \"Courses\", id: arg },\n ],\n }),\n }),\n});\n\nexport const {\n useGetCoursesQuery,\n useGetCourseQuery,\n useCreateCourseMutation,\n useUpdateCourseMutation,\n usePublishCourseMutation,\n useArchiveCourseMutation,\n useDeleteCourseMutation,\n} = courseApi;\n","import { Cancel, Delete, Save } from '@material-ui/icons';\nimport React, { useState } from 'react';\nimport CustomDraggableDialog from '../customDialog/CustomDraggableDialog';\nimport CustomButton from './CustomButton';\nimport RightButtonArea from './RightButtonArea';\nimport TranslatedMessage from '../../translations/TranslatedMessage';\n\ninterface DefaultButtonsProps {\n isDeleteButtonEnabled?: boolean;\n isSaveButtonEnabled?: boolean;\n isCloseButtonEnabled?: boolean;\n isDeleteButtonVisible?: boolean;\n isSaveButtonVisible?: boolean;\n isCloseButtonVisible?: boolean;\n onDelete?: () => void;\n onSave?: () => void;\n onClose?: () => void;\n additionalButtons?: \"\" | JSX.Element;\n}\n\nconst DefaultButtons: React.FunctionComponent = (props) => {\n const [isDeleteDialogOpen, showDeleteDialog] = useState(false);\n\n const deleteButton = props.isDeleteButtonVisible ?\n } onClick={() => showDeleteDialog(true)} disabled={!props.isDeleteButtonEnabled} >\n \n \n : ;\n\n const saveButton = props.isSaveButtonVisible ?\n } onClick={props.onSave!} disabled={!props.isSaveButtonEnabled}>\n \n \n : ;\n\n const closeButton = props.isCloseButtonVisible ?\n } onClick={props.onClose!} disabled={!props.isCloseButtonEnabled}>\n \n \n : ;\n\n return (\n \n \n {props.additionalButtons}\n {deleteButton}\n {saveButton}\n {closeButton}\n \n }\n cancelText={}\n content={}\n isOpen={isDeleteDialogOpen}\n onAccept={props.onDelete!}\n onCancel={() => showDeleteDialog(false)}\n title={} />\n \n );\n}\n\nDefaultButtons.defaultProps = {\n isDeleteButtonEnabled: true,\n isSaveButtonEnabled: true,\n isCloseButtonEnabled: true,\n isDeleteButtonVisible: true,\n isSaveButtonVisible: true,\n isCloseButtonVisible: true,\n onDelete: () => { },\n onSave: () => { },\n onClose: () => { },\n} as Partial;\n\nexport default DefaultButtons;\n","import { Publish, Restore } from '@material-ui/icons';\nimport React, { useState } from 'react';\nimport CustomDraggableDialog from '../customDialog/CustomDraggableDialog';\nimport CustomButton from './CustomButton';\nimport TranslatedMessage from '../../translations/TranslatedMessage';\n\ninterface DefaultPublishArchiveButtonsProps {\n isPublishButtonEnabled?: boolean;\n isArchiveButtonEnabled?: boolean;\n isPublishButtonVisible?: boolean;\n isArchiveButtonVisible?: boolean;\n onPublish?: () => void;\n onArchive?: () => void;\n}\n\nconst DefaultPublishArchiveButtons: React.FunctionComponent = (props) => {\n const [isPublishDialogOpen, showPublishDialogOpen] = useState(false);\n const [isArchiveDialogOpen, showArchiveDialogOpen] = useState(false);\n\n const archiveButton = props.isArchiveButtonVisible ?\n } onClick={() => showArchiveDialogOpen(true)} >\n \n \n : ;\n\n const publishButton = props.isPublishButtonVisible ?\n } onClick={() => showPublishDialogOpen(true)} >\n \n \n : ;\n\n return (\n \n {publishButton}\n {archiveButton}\n }\n cancelText={}\n content={}\n isOpen={isArchiveDialogOpen}\n onAccept={props.onArchive}\n onCancel={() => showArchiveDialogOpen(false)}\n title=\" \"\n />\n\n }\n cancelText={}\n content={}\n isOpen={isPublishDialogOpen}\n onAccept={() => {\n showPublishDialogOpen(false);\n props.onPublish && props.onPublish();\n }}\n onCancel={() => showPublishDialogOpen(false)}\n title=\" \"\n />\n \n );\n}\n\nDefaultPublishArchiveButtons.defaultProps = {\n isPublishButtonEnabled: true,\n isArchiveButtonEnabled: true,\n isPublishButtonVisible: true,\n isArchiveButtonVisible: true,\n onPublish: () => { },\n onArchive: () => { }\n} as Partial;\n\nexport default DefaultPublishArchiveButtons;\n","import { Language, LocalStorageKey } from \"../data/constants\";\nimport { TranslationKey } from \"../translations/TranslationKey\";\nimport { ExamTemplateIndex } from \"./Exam\";\n\nexport interface ModuleIndex {\n id: string;\n nameDE: string;\n nameEN: string;\n nameFR: string;\n nameIT: string;\n moduleType: ModuleType;\n certificateValidity: ModuleCertificateValidity;\n status: ModuleStatus;\n}\n\nexport interface ModuleViewModel {\n id: string;\n nameDE: string;\n nameEN: string;\n nameFR: string;\n nameIT: string;\n moduleType: ModuleType;\n certificateValidity: ModuleCertificateValidity;\n status: ModuleStatus;\n exams: ExamTemplateIndex[];\n allowOptions: boolean;\n allowDocumentUpload: boolean;\n verificationRequired: boolean;\n price?: number;\n abacusNumber: string;\n gradingRule?: ModuleGradingRules;\n allowRegistrationOnlyOnce: boolean;\n}\n\nexport enum ModuleGradingRules {\n AverageGrade = \"AverageGrade\",\n AllExams = \"AllExams\",\n}\n\nexport const ModuleGradingRulesTranslationKey: {\n [moduleGradingRules in ModuleGradingRules]: TranslationKey;\n} = {\n [ModuleGradingRules.AverageGrade]: \"module.field.gradingRules.averageGrade\",\n [ModuleGradingRules.AllExams]: \"module.field.gradingRules.allExams\",\n};\n\nexport enum ModuleStatus {\n Draft = \"Draft\",\n Published = \"Published\",\n Archived = \"Archived\",\n}\n\nexport enum ModuleCertificateValidity {\n Unlimited = \"Unlimited\",\n FiveYears = \"FiveYears\",\n OneYear = \"OneYear\",\n}\n\nexport const ModuleStateTranslationKey: {\n [moduleStatus in ModuleStatus]: TranslationKey;\n} = {\n [ModuleStatus.Draft]: \"common.status.draft\",\n [ModuleStatus.Published]: \"common.status.published\",\n [ModuleStatus.Archived]: \"common.status.archived\",\n};\n\nexport const ModuleCertificateValidityTranslationKey: {\n [moduleCertificationValidation in ModuleCertificateValidity]: TranslationKey;\n} = {\n [ModuleCertificateValidity.Unlimited]: \"module.field.certificateValidity.Unlimited\",\n [ModuleCertificateValidity.FiveYears]: \"module.field.certificateValidity.FiveYears\",\n [ModuleCertificateValidity.OneYear]: \"module.field.certificateValidity.OneYear\",\n};\n\nexport enum ModuleType {\n Mandatory = \"Mandatory\",\n ProcessModule = \"ProcessModule\",\n OptionalModule = \"OptionalModule\",\n}\n\nexport const ModuleTypeTranslationKey: {\n [moduleType in ModuleType]: TranslationKey;\n} = {\n [ModuleType.Mandatory]: \"module.field.moduleType.mandatory\",\n [ModuleType.ProcessModule]: \"module.field.moduleType.processModule\",\n [ModuleType.OptionalModule]: \"module.field.moduleType.optionalModule\",\n};\n\nexport interface RequiredModule {\n isNameDEEmpty: boolean;\n isNameFREmpty: boolean;\n isNameENEmpty: boolean;\n isNameITEmpty: boolean;\n isPriceEmpty: boolean;\n isGradingRuleEmpty: boolean;\n}\n\nexport const GetLocalizedName = (module: ModuleIndex): string => {\n const language = localStorage.getItem(LocalStorageKey.LastSelectedLanguageKey);\n\n switch (language) {\n case Language.EN:\n return module.nameEN;\n case Language.FR:\n return module.nameFR;\n case Language.IT:\n return module.nameIT;\n }\n\n return module.nameDE;\n};\n","import { NewEntityId } from \"../../data/constants\";\nimport {\n CourseViewModel,\n CourseStatus,\n CourseCertificateValidity,\n RequiredCourse,\n CourseType,\n} from \"../../model/Course\";\n\nexport const initialCourse: CourseViewModel = {\n id: NewEntityId,\n nameDE: \"\",\n nameEN: \"\",\n nameFR: \"\",\n nameIT: \"\",\n numberOfMandatoryModules: 0,\n numberOfProcessModules: 0,\n numberOfSelectionModules: 0,\n modulesValidity: null,\n certificateValidity: CourseCertificateValidity.Unlimited,\n status: CourseStatus.Draft,\n modules: [],\n modulesRelevantForGrade: [],\n type: CourseType.None,\n};\nexport const getInitialRequiredFieldsStatuses = (): RequiredCourse => ({\n isNameDEEmpty: false,\n isNameENEmpty: false,\n isNameFREmpty: false,\n isNameITEmpty: false,\n isModuleNumbersZero: false,\n isModuleListEmpty: false,\n isTypeEmpty: false,\n});\n","import { TranslationKey } from \"../translations/TranslationKey\";\nimport { CourseType } from \"./Course\";\nimport { TranslatedValue } from \"./Shared/TranslatedValue\";\n\nexport enum ExamStatus {\n Draft = \"Draft\",\n Published = \"Published\",\n Archived = \"Archived\",\n}\n\nexport enum ExamType {\n Written = \"Written\",\n Oral = \"Oral\",\n TermPaper = \"TermPaper\",\n}\n\nexport interface ExamTemplateIndex {\n id: string;\n name: TranslatedValue;\n examId?: string;\n price: number;\n type: ExamType;\n status: ExamStatus;\n}\n\nexport interface ExamTemplateWithStructureIndex {\n id: string;\n courseTypes: CourseType[];\n availableCourseTypes: CourseType[];\n type: ExamType;\n name: TranslatedValue;\n includedInCourses: TranslatedValue;\n includedInModules: TranslatedValue;\n}\n\nexport interface ExamViewModel {\n id: string;\n nameDE: string;\n nameEN: string;\n nameFR: string;\n nameIT: string;\n examId?: string;\n examExpenses: number;\n correctionExpenses: number;\n expertExpenses: number;\n type: ExamType;\n status: ExamStatus;\n}\n\nexport const ExamStateTranslationKey: {\n [examStatus in ExamStatus]: TranslationKey;\n} = {\n [ExamStatus.Draft]: \"common.status.draft\",\n [ExamStatus.Published]: \"common.status.published\",\n [ExamStatus.Archived]: \"common.status.archived\",\n};\n\nexport const ExamTypeTranslationKey: {\n [examTypeNew in ExamType]: TranslationKey;\n} = {\n [ExamType.Written]: \"exam.type.written\",\n [ExamType.Oral]: \"exam.type.oral\",\n [ExamType.TermPaper]: \"exam.type.termPaper\",\n};\n\nexport interface RequiredExam {\n isNameDEEmpty: boolean;\n isNameFREmpty: boolean;\n isNameENEmpty: boolean;\n isNameITEmpty: boolean;\n}\n","import React from \"react\";\nimport { Grid, TextField } from \"@material-ui/core\";\n\ntype columnCount = boolean | \"auto\" | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | undefined;\n\ninterface IGridTextFieldProps {\n label: string;\n xs?: columnCount;\n sm?: columnCount;\n md?: columnCount;\n lg?: columnCount;\n xl?: columnCount;\n onChange?: (value: number) => void;\n value?: number;\n readOnly?: any;\n required?: boolean;\n error?: boolean;\n min?: number;\n max?: number;\n}\n\nconst GridNumberField = (props: IGridTextFieldProps) => {\n const { label, onChange, value, xs, sm, md, lg, xl, required, readOnly, error, min, max } = props;\n\n const [innerValue, setInnerValue] = React.useState(value === undefined ? \"\" : value.toString());\n\n const minError = value !== undefined && min !== undefined && value < min;\n const maxError = value !== undefined && max !== undefined && value > max;\n const hasError = error || minError || maxError;\n\n const innerOnChange = (event: React.ChangeEvent) => {\n const parsed = parseInt(event.target.value);\n if (!Object.is(NaN, parsed) && onChange) {\n setInnerValue(parsed.toString());\n onChange(parsed);\n } else {\n setInnerValue(event.target.value);\n if (onChange) {\n onChange(0);\n }\n }\n };\n\n return (\n \n \n \n );\n};\n\nexport default GridNumberField;\n","import {\n Checkbox,\n createStyles,\n FormControl,\n FormControlLabel,\n FormLabel,\n Grid,\n InputLabel,\n makeStyles,\n MenuItem,\n TextField,\n Typography,\n} from \"@material-ui/core\";\nimport Select from \"@material-ui/core/Select\";\nimport React from \"react\";\nimport { useIntl } from \"react-intl\";\nimport { ActionMeta, ValueType } from \"react-select\";\nimport {\n CourseCertificateValidity,\n CourseCertificateValidityTranslationKey,\n CourseType,\n CourseTypeEnumValues,\n CourseTypeTranslationKey,\n CourseViewModel,\n RequiredCourse,\n} from \"../../model/Course\";\nimport { GetLocalizedName, ModuleIndex } from \"../../model/Module\";\nimport { GetTranslation } from \"../../translations/GetTranslation\";\nimport GridNumberField from \"../common/customGrid/GridNumberField\";\nimport GridTextField from \"../common/customGrid/GridTextField\";\nimport CustomSelect, { OptionType } from \"../common/customSelect/CustomSelect\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\n\ntype CourseFormFieldsProps = {\n course: CourseViewModel;\n isCreation: boolean;\n handleFieldChange: (change: Partial) => void;\n isReadOnly?: boolean;\n requiredFieldStatus: RequiredCourse;\n};\n\nconst useStyles = makeStyles(() =>\n createStyles({\n form: {\n paddingTop: \"12px !important\",\n paddingBottom: \"0px !important\",\n },\n })\n);\n\nconst CourseFormFields = (props: CourseFormFieldsProps) => {\n const { course, isCreation, handleFieldChange, isReadOnly, requiredFieldStatus } = props;\n const intl = useIntl();\n const classes = useStyles({});\n const getModulesAsOptionTypes = (modules: ModuleIndex[]) => {\n return modules.map((module) => ({\n value: module.id,\n label: GetLocalizedName(module),\n }));\n };\n\n const getSelectedModulesAsOptionTypes = () => {\n const { modulesRelevantForGrade } = course;\n\n return modulesRelevantForGrade.map((moduleSelected) => {\n const module = course.modules.find((module) => module.id === moduleSelected);\n return {\n value: moduleSelected,\n label: module ? GetLocalizedName(module) : moduleSelected,\n };\n });\n };\n\n const onModuleRevelantSelectChange = (\n selectedElements: ValueType,\n actionMeta?: ActionMeta\n ) => {\n const selectedElementsArray = selectedElements as OptionType[] | undefined;\n const modulesRelevantForGrade =\n (actionMeta && actionMeta.action === \"clear\") || !selectedElementsArray || selectedElementsArray.length === 0\n ? []\n : [...selectedElementsArray.map((selectedElement) => selectedElement.value)];\n\n handleFieldChange({\n modulesRelevantForGrade,\n });\n };\n\n const selectedCoursesAsOptionTypes = getSelectedModulesAsOptionTypes();\n const modulesOptions = getModulesAsOptionTypes(course.modules);\n const availableCourseTypes = CourseTypeEnumValues;\n\n return (\n
\n \n handleFieldChange({ nameDE: event.target.value })}\n value={course.nameDE}\n readOnly={isReadOnly}\n />\n handleFieldChange({ nameEN: event.target.value })}\n value={course.nameEN}\n readOnly={isReadOnly}\n />\n handleFieldChange({ nameFR: event.target.value })}\n value={course.nameFR}\n readOnly={isReadOnly}\n />\n handleFieldChange({ nameIT: event.target.value })}\n value={course.nameIT}\n readOnly={isReadOnly}\n />\n {requiredFieldStatus.isModuleNumbersZero && (\n \n \n \n \n \n )}\n handleFieldChange({ numberOfMandatoryModules: value })}\n value={course.numberOfMandatoryModules}\n min={0}\n error={false}\n readOnly={isReadOnly}\n />\n handleFieldChange({ numberOfSelectionModules: value })}\n value={course.numberOfSelectionModules}\n min={0}\n error={false}\n readOnly={isReadOnly}\n />\n\n handleFieldChange({ numberOfProcessModules: value })}\n value={course.numberOfProcessModules}\n min={0}\n error={false}\n readOnly={isReadOnly}\n />\n\n \n \n \n \n \n \n {\n handleFieldChange({ modulesValidity: event.target.checked ? null : 0 });\n }}\n />\n }\n label={}\n labelPlacement=\"end\"\n style={{ minWidth: \"50%\", margin: 0, fontSize: \"0.9rem\" }}\n disabled={isReadOnly}\n />\n \n {\n if (event.target.value === \"\") {\n handleFieldChange({ modulesValidity: 0 });\n return;\n }\n const parsed = parseInt(event.target.value);\n if (!Object.is(NaN, parsed)) {\n handleFieldChange({ modulesValidity: parsed });\n }\n }}\n />\n \n \n \n \n \n \n \n\n \n \n \n \n \n \n handleFieldChange({ certificateValidity: event.target.value as CourseCertificateValidity })\n }\n readOnly={isReadOnly}\n >\n \n \n \n \n \n \n \n \n \n\n {!isCreation && (\n \n \n }\n options={modulesOptions}\n isMulti={true}\n onChange={onModuleRevelantSelectChange}\n className={classes.form}\n isDisabled={isReadOnly}\n />\n \n \n )}\n \n \n \n \n \n handleFieldChange({ type: event.target.value as CourseType })}\n readOnly={isReadOnly}\n required\n error={requiredFieldStatus.isTypeEmpty}\n value={course.type}\n >\n {availableCourseTypes.map((type, typeIndex) => (\n \n \n \n ))}\n \n \n \n \n
\n );\n};\n\nexport default CourseFormFields;\n","import { ApiResponse, customFetch } from './CustomFetch';\nimport { ModuleViewModel, ModuleIndex, ModuleStatus } from '../model/Module';\n\n\nexport const getModules = (): Promise => {\n return customFetch('Module')\n .then((response) => response.json() as Promise>)\n .then((apiResponse) => apiResponse.data);\n};\n\nexport const getAllPublishedModules = (): Promise => {\n return customFetch('Module/published')\n .then((response) => response.json() as Promise>)\n .then((apiResponse) => apiResponse.data);\n};\n\nexport const getModule = (moduleId: string): Promise => {\n return customFetch(`Module/${moduleId}`)\n .then((response) => response.json() as Promise>)\n .then((apiResponse) => apiResponse.data);\n};\n\nexport const createModule = (Module: ModuleViewModel): Promise> => {\n return customFetch('Module', {\n body: JSON.stringify(Module),\n headers: { 'Content-Type': 'application/json' },\n method: \"POST\",\n })\n .then((response) => response.json() as Promise>);\n};\n\nexport const updateModule = (module: ModuleViewModel): Promise => {\n return customFetch('Module', {\n body: JSON.stringify(module),\n headers: { 'Content-Type': 'application/json' },\n method: \"PUT\",\n });\n};\n\nexport const publishModule = (module: ModuleViewModel): Promise => {\n return customFetch(`Module/status/${module.id}/${ModuleStatus.Published}`, {\n body: JSON.stringify(module),\n headers: { 'Content-Type': 'application/json' },\n method: \"PUT\",\n });\n};\n\nexport const archiveModule = (module: ModuleViewModel): Promise => {\n return customFetch(`Module/status/${module.id}/${ModuleStatus.Archived}`, {\n body: JSON.stringify(module),\n headers: { 'Content-Type': 'application/json' },\n method: \"PUT\",\n });\n}\n\nexport const deleteModule = (moduleId: string): Promise => {\n return customFetch(`Module/${moduleId}`, {\n headers: { 'Content-Type': 'application/json' },\n method: \"DELETE\",\n });\n}\n","import { Checkbox, ListItemSecondaryAction, ListItemText, Typography } from \"@material-ui/core\";\nimport Button from \"@material-ui/core/Button\";\nimport Dialog from \"@material-ui/core/Dialog\";\nimport DialogActions from \"@material-ui/core/DialogActions\";\nimport DialogContent from \"@material-ui/core/DialogContent\";\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\nimport List from \"@material-ui/core/List\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport React from \"react\";\nimport { GetLocalizedName, ModuleIndex } from \"../../model/Module\";\nimport CustomSearchBox from \"../common/customSearchBox/CustomSearchBox\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\n\ntype ModuleSelectionDialogProps = {\n isOpened: boolean;\n handleAccept: (selection: ModuleIndex[]) => void;\n handleCancel: () => void;\n selectableModules: ModuleIndex[];\n};\n\nconst ModuleSelectionDialog = (props: ModuleSelectionDialogProps) => {\n const { isOpened, handleAccept, handleCancel, selectableModules } = props;\n const [selection, setSelection] = React.useState([]);\n const [searchToken, setSearchToken] = React.useState(\"\");\n const [filteredModules, setFilteredModules] = React.useState(selectableModules);\n\n React.useEffect(() => {\n setFilteredModules(selectableModules)\n }, [selectableModules])\n\n const onAccept = () => {\n const selectedModules = selectableModules.filter((module) => selection.indexOf(module.id) !== -1);\n handleAccept(selectedModules);\n setSelection([]);\n setSearchToken(\"\");\n };\n\n const onCancel = () => {\n handleCancel();\n setSelection([]);\n setSearchToken(\"\");\n };\n\n const onSearchTokenChanged = (token: string) => {\n const nonSelectedFilteredModules = selectableModules.filter((module) => selection.indexOf(module.id) === -1 && GetLocalizedName(module).toLowerCase().indexOf(token.toLowerCase()) !== -1);\n setFilteredModules(nonSelectedFilteredModules);\n setSearchToken(token);\n };\n\n const toggleModuleSelection = (module: ModuleIndex) => {\n if (selection.indexOf(module.id) === -1) {\n setSelection([...selection, module.id]);\n } else {\n setSelection(selection.filter((id) => id !== module.id));\n }\n };\n\n const isListEmpty = filteredModules.length === 0;\n\n return (\n \n \n \n onSearchTokenChanged(event.target.value)} searchToken={searchToken} />\n\n {isListEmpty ? \n \n :\n \n {filteredModules.map((module) => (\n toggleModuleSelection(module)} key={module.id}>\n \n \n toggleModuleSelection(module)} checked={selection.indexOf(module.id) !== -1} />\n \n \n ))}\n \n }\n \n \n \n \n \n \n );\n};\n\nconst listContainer: React.CSSProperties = {\n height: 400,\n overflow: \"auto\",\n marginTop: 10,\n paddingTop: 0\n};\n\nconst emptyMessage: React.CSSProperties = {\n height: 400,\n marginTop: 10,\n paddingTop: 200,\n textAlign: \"center\"\n};\n\nexport default ModuleSelectionDialog;\n","import { createStyles, IconButton, makeStyles, Typography } from \"@material-ui/core\";\r\nimport HighlightOffIcon from \"@material-ui/icons/HighlightOff\";\r\nimport React from \"react\";\r\nimport { useIntl } from \"react-intl\";\r\nimport { useHistory } from \"react-router\";\r\nimport { getAllPublishedModules } from \"../../api/ModuleApi\";\r\nimport { RequiredCourse } from \"../../model/Course\";\r\nimport { GetLocalizedName, ModuleIndex, ModuleStateTranslationKey, ModuleTypeTranslationKey } from \"../../model/Module\";\r\nimport { routesPaths } from \"../../Routes\";\r\nimport { GetTranslation } from \"../../translations/GetTranslation\";\r\nimport { ColumnDefinition, CustomGrid } from \"../common/customGrid/CustomGrid\";\r\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\r\nimport ModuleSelectionDialog from \"./ModuleSelectionDialog\";\r\n\r\nconst useStyles = makeStyles(() =>\r\n createStyles({\r\n header: {\r\n marginBottom: \"-3rem\",\r\n },\r\n })\r\n);\r\n\r\ntype CourseFormModulesProps = {\r\n courseModules: ModuleIndex[];\r\n handleAddModules: (modules: ModuleIndex[]) => void;\r\n handleRemoveModule: (module: ModuleIndex) => void;\r\n isReadOnly: boolean;\r\n requiredFieldStatus: RequiredCourse;\r\n};\r\n\r\nconst CourseFormModules = (props: CourseFormModulesProps) => {\r\n const { courseModules, handleAddModules, handleRemoveModule, isReadOnly, requiredFieldStatus } = props;\r\n\r\n const [selectionDialogOpened, setSelectionDialogOpened] = React.useState(false);\r\n const [allModules, setAllModules] = React.useState([]);\r\n\r\n const intl = useIntl();\r\n const classes = useStyles();\r\n const history = useHistory();\r\n\r\n React.useEffect(() => {\r\n let unmounted = false;\r\n getAllPublishedModules().then((modules) => {\r\n if (!unmounted) {\r\n setAllModules(modules);\r\n }\r\n });\r\n return () => {\r\n unmounted = true;\r\n };\r\n }, []);\r\n\r\n const columnsDefinitions: ColumnDefinition[] = [\r\n {\r\n columnKey: \"moduleName\",\r\n columnLabel: ,\r\n cellValue: (_) => GetLocalizedName(_),\r\n },\r\n {\r\n columnKey: \"moduleType\",\r\n columnLabel: ,\r\n cellValue: (_) => (_.moduleType ? GetTranslation(intl, ModuleTypeTranslationKey[_.moduleType]) : \"\"),\r\n },\r\n {\r\n columnKey: \"status\",\r\n columnLabel: ,\r\n cellValue: (_) => GetTranslation(intl, ModuleStateTranslationKey[_.status]),\r\n },\r\n ];\r\n\r\n if (!isReadOnly) {\r\n columnsDefinitions.push({\r\n columnKey: \"removeModule\",\r\n columnLabel: \"\",\r\n cellValue: (_) => (\r\n {\r\n event.stopPropagation();\r\n handleRemoveModule(_);\r\n }}\r\n >\r\n \r\n \r\n ),\r\n isSortingDisabled: true,\r\n });\r\n }\r\n\r\n const handleAcceptSelection = (modules: ModuleIndex[]) => {\r\n setSelectionDialogOpened(false);\r\n if (modules && modules.length) {\r\n handleAddModules(modules);\r\n }\r\n };\r\n\r\n return (\r\n \r\n
\r\n \r\n \r\n \r\n {requiredFieldStatus.isModuleListEmpty && (\r\n \r\n \r\n \r\n )}\r\n
\r\n \r\n columnDefinitions={columnsDefinitions}\r\n rows={courseModules}\r\n rowKey={(_) => _.id}\r\n addButtonTooltip={}\r\n onRowClick={(row: ModuleIndex) => history.push(routesPaths.module(row.id))}\r\n onAddClick={() => setSelectionDialogOpened(true)}\r\n hideSearchBar={true}\r\n hideAddButton={isReadOnly}\r\n />\r\n\r\n setSelectionDialogOpened(false)}\r\n isOpened={selectionDialogOpened}\r\n selectableModules={allModules.filter((module) => courseModules.every((cm) => cm.id !== module.id))}\r\n />\r\n
\r\n );\r\n};\r\n\r\nexport default CourseFormModules;\r\n","import { Chip, Grid, LinearProgress, Typography } from \"@material-ui/core\";\r\nimport { useSnackbar } from \"notistack\";\r\nimport * as React from \"react\";\r\nimport { FC, useEffect, useState } from \"react\";\r\nimport { useIntl } from \"react-intl\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport {\r\n useArchiveCourseMutation,\r\n useCreateCourseMutation,\r\n useDeleteCourseMutation,\r\n useGetCourseQuery,\r\n usePublishCourseMutation,\r\n useUpdateCourseMutation,\r\n} from \"../../api/rtk/CourseApi\";\r\nimport { NewEntityId } from \"../../data/constants\";\r\nimport {\r\n CourseStateTranslationKey,\r\n CourseStatus,\r\n CourseType,\r\n CourseViewModel,\r\n RequiredCourse,\r\n} from \"../../model/Course\";\r\nimport { routesPaths } from \"../../Routes\";\r\nimport { GetTranslation } from \"../../translations/GetTranslation\";\r\nimport { navigateBack } from \"../../utils/Navigation\";\r\nimport DefaultButtons from \"../common/buttons/DefaultButtons\";\r\nimport DefaultPublishArchiveButtons from \"../common/buttons/DefaultPublishArchiveButtons\";\r\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\r\nimport { getInitialRequiredFieldsStatuses, initialCourse } from \"./CourseConstants\";\r\nimport CourseFormFields from \"./CourseFormFields\";\r\nimport CourseFormModules from \"./CourseFormModules\";\r\n\r\nconst CourseForm: FC = () => {\r\n const { courseId } = useParams<{ courseId: string }>();\r\n const isCreation = courseId === NewEntityId;\r\n\r\n const [updateCourse, { isLoading: isUpdating }] = useUpdateCourseMutation();\r\n const [createCourse, { isLoading: isCreating }] = useCreateCourseMutation();\r\n const [publishCourse, { isLoading: isPublishing }] = usePublishCourseMutation();\r\n const [archiveCourse, { isLoading: isArchiving }] = useArchiveCourseMutation();\r\n const [deleteCourse, { isLoading: isDeleting, isSuccess: isDeleteSuccess }] = useDeleteCourseMutation();\r\n\r\n const { data: fetchedCourse, isFetching } = useGetCourseQuery(courseId, {\r\n skip: isCreation || isDeleteSuccess || !courseId,\r\n });\r\n\r\n const [course, setCourse] = useState(isCreation ? initialCourse : undefined);\r\n const [requiredFieldStatus, setRequiredFieldStatus] = useState(getInitialRequiredFieldsStatuses());\r\n\r\n const history = useHistory();\r\n const { enqueueSnackbar } = useSnackbar();\r\n\r\n const intl = useIntl();\r\n\r\n useEffect(() => {\r\n if (!isCreation && fetchedCourse) {\r\n setCourse(fetchedCourse);\r\n }\r\n }, [isCreation, fetchedCourse]);\r\n\r\n const isLoading = isFetching || isUpdating || isCreating || isPublishing || isArchiving || isDeleting;\r\n\r\n if (isLoading) {\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n if (course === undefined) {\r\n return null;\r\n }\r\n\r\n const isReadonly = course.status === CourseStatus.Published || course.status === CourseStatus.Archived;\r\n\r\n const close = () => navigateBack(routesPaths.courses(), history, history.location);\r\n\r\n const handleSave = () => {\r\n if (!validateForm()) {\r\n return;\r\n }\r\n\r\n if (isCreation) {\r\n handleCreate();\r\n } else {\r\n handleUpdate();\r\n }\r\n };\r\n\r\n const handleCreate = async () => {\r\n const response = await createCourse(course).unwrap();\r\n if (response.success) {\r\n history.replace(routesPaths.course(response.data));\r\n }\r\n };\r\n\r\n const handleUpdate = async () => {\r\n const response = await updateCourse(course).unwrap();\r\n if (response.success) {\r\n close();\r\n }\r\n };\r\n\r\n const handlePublish = async () => {\r\n if (!validateForm(true)) {\r\n return;\r\n }\r\n const response = await publishCourse(course).unwrap();\r\n if (response.success) {\r\n close();\r\n enqueueSnackbar();\r\n }\r\n };\r\n\r\n const handleDelete = async () => {\r\n const response = await deleteCourse(course.id).unwrap();\r\n if (response.success) {\r\n close();\r\n enqueueSnackbar();\r\n }\r\n };\r\n\r\n const handleArchive = async () => {\r\n const response = await archiveCourse(course).unwrap();\r\n if (response.success) {\r\n close();\r\n enqueueSnackbar();\r\n }\r\n };\r\n\r\n const validateForm = (forPublish: boolean = false) => {\r\n const currentStatus: RequiredCourse = {\r\n isNameDEEmpty: !course.nameDE,\r\n isNameENEmpty: !course.nameEN,\r\n isNameFREmpty: !course.nameFR,\r\n isNameITEmpty: !course.nameIT,\r\n isModuleNumbersZero: false,\r\n isModuleListEmpty: false,\r\n isTypeEmpty: !course.type || course.type === CourseType.None,\r\n };\r\n\r\n if (forPublish) {\r\n currentStatus.isModuleNumbersZero =\r\n course.numberOfMandatoryModules + course.numberOfProcessModules + course.numberOfSelectionModules <= 0;\r\n currentStatus.isModuleListEmpty = !course.modules?.length;\r\n }\r\n\r\n const isInvalid = Object.values(currentStatus).reduce(\r\n (prev, curr) => (typeof curr === \"boolean\" ? prev || curr : prev),\r\n false\r\n );\r\n\r\n setRequiredFieldStatus(currentStatus);\r\n return !isInvalid;\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n }\r\n onClose={() => history.goBack()}\r\n onDelete={handleDelete}\r\n onSave={handleSave}\r\n isDeleteButtonVisible={course.status === CourseStatus.Draft && !isCreation}\r\n isSaveButtonVisible={course.status === CourseStatus.Draft}\r\n />\r\n\r\n \r\n \r\n ) => setCourse({ ...course, ...change })}\r\n requiredFieldStatus={requiredFieldStatus}\r\n isReadOnly={isReadonly}\r\n />\r\n \r\n\r\n \r\n {!isCreation && (\r\n setCourse({ ...course, modules: [...course.modules, ...modules] })}\r\n handleRemoveModule={(module) => {\r\n setCourse({\r\n ...course,\r\n modules: course.modules.filter((m) => m.id !== module.id),\r\n modulesRelevantForGrade: course.modulesRelevantForGrade?.filter((m) => m !== module.id),\r\n });\r\n }}\r\n isReadOnly={isReadonly}\r\n requiredFieldStatus={requiredFieldStatus}\r\n />\r\n )}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default CourseForm;\r\n","import * as React from \"react\";\nimport { useIntl } from \"react-intl\";\nimport { CourseIndex, CourseStateTranslationKey, CourseCertificateValidityTranslationKey, GetLocalizedName } from \"../../model/Course\";\nimport { GetTranslation } from \"../../translations/GetTranslation\";\nimport { ColumnDefinition, CustomGrid } from \"../common/customGrid/CustomGrid\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\n\ntype CourseGridProps = {\n courses: CourseIndex[];\n onRowClick: (course: CourseIndex) => void;\n onAddClick: () => void;\n};\n\nconst CourseGrid = (props: CourseGridProps) => {\n const intl = useIntl();\n const { courses, onRowClick, onAddClick } = props;\n const columnsDefinitions: ColumnDefinition[] = [\n { \n columnKey: \"name\", \n columnLabel: , \n cellValue: (_) => GetLocalizedName(_) \n },\n {\n columnKey: \"validity\",\n columnLabel: ,\n cellValue: (_) => (_.certificateValidity ? GetTranslation(intl, CourseCertificateValidityTranslationKey[_.certificateValidity]) : \"\"),\n },\n {\n columnKey: \"status\",\n columnLabel: ,\n cellValue: (_) => GetTranslation(intl, CourseStateTranslationKey[_.status]),\n },\n ];\n\n return (\n \n columnDefinitions={columnsDefinitions}\n rows={courses}\n onRowClick={onRowClick}\n rowKey={(_) => _.id}\n addButtonTooltip={}\n onAddClick={onAddClick}\n />\n );\n};\n\nexport default CourseGrid;\n","import { LinearProgress, Typography } from \"@material-ui/core\";\nimport * as React from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { useGetCoursesQuery } from \"../../api/rtk/CourseApi\";\nimport { NewEntityId } from \"../../data/constants\";\nimport { CourseIndex } from \"../../model/Course\";\nimport { routesPaths } from \"../../Routes\";\nimport { navigateTo } from \"../../utils/Navigation\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\nimport CourseGrid from \"./CourseGrid\";\n\nconst CourseList = () => {\n const { data: courses, isFetching } = useGetCoursesQuery();\n const history = useHistory();\n\n if (isFetching) {\n return ;\n }\n\n return (\n \n \n \n \n navigateTo(routesPaths.course(row.id), history)}\n onAddClick={() => history.push(routesPaths.course(NewEntityId))}\n />\n \n );\n};\n\nexport default CourseList;\n","import { TranslationKey } from \"../translations/TranslationKey\";\n\nexport enum ExamDayType {\n Oral = \"Oral\",\n Written = \"Written\",\n Correction = \"Correction\",\n}\n\nexport const ExamFormatLabels: { [examType in ExamDayType]: TranslationKey } = {\n [ExamDayType.Oral]: \"examDay.field.type.oral\",\n [ExamDayType.Written]: \"examDay.field.type.written\",\n [ExamDayType.Correction]: \"examDay.field.type.correction\",\n};\n","import { NewEntityId } from \"../../data/constants\";\nimport { ExamStatus, ExamViewModel, RequiredExam, ExamType } from \"../../model/Exam\";\n\nexport const initialExam: ExamViewModel = {\n id: NewEntityId,\n nameDE: \"\",\n nameEN: \"\",\n nameFR: \"\",\n nameIT: \"\",\n examId: \"\",\n examExpenses: 0,\n correctionExpenses: 0,\n expertExpenses: 0,\n type: ExamType.Written,\n status: ExamStatus.Draft,\n};\n\nexport const getInitialRequiredFieldsStatuses = (): RequiredExam => ({\n isNameDEEmpty: false,\n isNameENEmpty: false,\n isNameFREmpty: false,\n isNameITEmpty: false,\n});\n","import React from 'react';\nimport { Grid, GridProps } from '@material-ui/core';\nimport CurrencyTextField from '@unicef/material-ui-currency-textfield';\n\ninterface IGridCurrencyFieldProps extends GridProps {\n label: string;\n onFieldChange: (ev: any, value: any) => void;\n value: number | undefined;\n error?: boolean;\n readOnly?: boolean;\n required?: boolean;\n}\n\nconst GridCurrencyField: React.FC = props => {\n\n const { label, value, error, readOnly, required, onFieldChange, ...gridProps } = props;\n\n return (\n \n \n )\n}\n\nexport default GridCurrencyField","import { FormControl, Grid, InputLabel, MenuItem, Select, Typography } from \"@material-ui/core\";\r\nimport React from \"react\";\r\nimport { useIntl } from \"react-intl\";\r\nimport { ExamType, ExamTypeTranslationKey, ExamViewModel, RequiredExam } from \"../../model/Exam\";\r\nimport { GetTranslation } from \"../../translations/GetTranslation\";\r\nimport GridTextField from \"../common/customGrid/GridTextField\";\r\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\r\nimport GridCurrencyField from \"../common/customGrid/GridCurrencyField\";\r\n\r\ntype ExamFormFieldsProps = {\r\n exam: ExamViewModel;\r\n handleFieldChange: (change: Partial) => void;\r\n isReadOnly?: boolean;\r\n requiredFieldStatus: RequiredExam;\r\n};\r\n\r\nconst ExamFormFields = (props: ExamFormFieldsProps) => {\r\n const { exam, handleFieldChange, isReadOnly, requiredFieldStatus } = props;\r\n const intl = useIntl();\r\n\r\n return (\r\n \r\n \r\n \r\n handleFieldChange({ nameDE: event.target.value })}\r\n value={exam.nameDE}\r\n readOnly={isReadOnly}\r\n />\r\n handleFieldChange({ nameEN: event.target.value })}\r\n value={exam.nameEN}\r\n readOnly={isReadOnly}\r\n />\r\n handleFieldChange({ nameFR: event.target.value })}\r\n value={exam.nameFR}\r\n readOnly={isReadOnly}\r\n />\r\n handleFieldChange({ nameIT: event.target.value })}\r\n value={exam.nameIT}\r\n readOnly={isReadOnly}\r\n />\r\n handleFieldChange({ examId: event.target.value })}\r\n value={exam.examId || \"\"}\r\n readOnly={isReadOnly}\r\n />\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n handleFieldChange({ type: event.target.value as ExamType })}\r\n error={false}\r\n readOnly={isReadOnly}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n handleFieldChange({ examExpenses: value })}\r\n value={exam.examExpenses}\r\n readOnly={isReadOnly}\r\n />\r\n\r\n \r\n handleFieldChange({ correctionExpenses: value })}\r\n value={exam.correctionExpenses}\r\n readOnly={isReadOnly}\r\n />\r\n\r\n \r\n handleFieldChange({ expertExpenses: value })}\r\n value={exam.expertExpenses}\r\n readOnly={isReadOnly}\r\n />\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ExamFormFields;\r\n","import { Chip, LinearProgress, Typography } from \"@material-ui/core\";\nimport { useSnackbar } from \"notistack\";\nimport React, { FC, useEffect, useState } from \"react\";\nimport { useIntl } from \"react-intl\";\nimport { useHistory, useParams } from \"react-router-dom\";\nimport { addNewExam, archiveExam, deleteExam, getExam, publishExam, updateExam } from \"../../api/ExamApi\";\nimport { NewEntityId } from \"../../data/constants\";\nimport { ExamStateTranslationKey, ExamStatus, ExamViewModel, RequiredExam } from \"../../model/Exam\";\nimport { GetTranslation } from \"../../translations/GetTranslation\";\nimport DefaultButtons from \"../common/buttons/DefaultButtons\";\nimport DefaultPublishArchiveButtons from \"../common/buttons/DefaultPublishArchiveButtons\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\nimport { initialExam, getInitialRequiredFieldsStatuses } from \"./ExamConstants\";\nimport ExamFormFields from \"./ExamFormFields\";\n\nconst ExamForm: FC = () => {\n const { examId } = useParams<{ examId?: string }>();\n const isCreating = examId === NewEntityId;\n\n const [isLoading, setIsLoading] = useState(!isCreating);\n const [exam, setExam] = useState(initialExam);\n const [requiredFieldStatus, setRequiredFieldStatus] = useState(getInitialRequiredFieldsStatuses());\n\n const history = useHistory();\n const { enqueueSnackbar } = useSnackbar();\n\n const intl = useIntl();\n\n useEffect(() => {\n if (!isCreating && examId) {\n getExam(examId).then((result) => {\n setExam(result);\n setIsLoading(false);\n });\n }\n }, [isCreating, examId]);\n\n if (isLoading) {\n return (\n
\n \n \n \n \n
\n );\n }\n\n const handleSave = () => {\n if (!validateForm()) {\n return;\n }\n\n if (isCreating) {\n handleCreate();\n } else {\n handleUpdate();\n }\n };\n\n const handleCreate = () => {\n addNewExam(exam).then((response) => {\n if (response.success) {\n history.goBack();\n }\n });\n };\n\n const handleUpdate = () => {\n updateExam(exam).then((response) => {\n if (response.ok) {\n history.goBack();\n }\n });\n };\n\n const handlePublish = () => {\n publishExam(exam).then((response) => {\n if (response.ok) {\n history.goBack();\n enqueueSnackbar();\n }\n });\n };\n\n const handleDelete = () => {\n deleteExam(exam.id).then((response) => {\n if (response.ok) {\n history.goBack();\n enqueueSnackbar();\n }\n });\n };\n\n const handleArchive = () => {\n archiveExam(exam).then((response) => {\n if (response.ok) {\n history.goBack();\n enqueueSnackbar();\n }\n });\n };\n\n const validateForm = () => {\n let formHasEmptyFields = false;\n\n const isFieldEmpty = (value: string) => {\n const isEmpty = value === undefined || value === null || value === \"\";\n formHasEmptyFields = formHasEmptyFields || isEmpty;\n return isEmpty;\n };\n\n const currentStatus: RequiredExam = {\n isNameDEEmpty: isFieldEmpty(exam.nameDE),\n isNameENEmpty: isFieldEmpty(exam.nameEN),\n isNameFREmpty: isFieldEmpty(exam.nameFR),\n isNameITEmpty: isFieldEmpty(exam.nameIT),\n };\n\n setRequiredFieldStatus(currentStatus);\n\n return !formHasEmptyFields;\n };\n\n return (\n <>\n \n \n \n\n \n \n \n \n }\n onClose={() => history.goBack()}\n onDelete={handleDelete}\n onSave={handleSave}\n isDeleteButtonVisible={exam.status === ExamStatus.Draft && !isCreating}\n isSaveButtonVisible={exam.status === ExamStatus.Draft}\n />\n\n ) => setExam({ ...exam, ...change })}\n requiredFieldStatus={requiredFieldStatus}\n isReadOnly={exam.status !== ExamStatus.Draft}\n />\n \n );\n};\n\nexport default ExamForm;\n","import { ExamStatus, ExamTemplateIndex, ExamTemplateWithStructureIndex, ExamViewModel } from \"../model/Exam\";\nimport { ApiResponse, customFetch } from \"./CustomFetch\";\n\nexport const getExams = (): Promise => {\n return customFetch(\"Exam\")\n .then((response) => response.json() as Promise>)\n .then((apiResponse) => apiResponse.data);\n};\n\nexport const getPublishedExams = (): Promise => {\n return customFetch(\"Exam/published\")\n .then((response) => response.json() as Promise>)\n .then((apiResponse) => apiResponse.data);\n};\n\nexport const getExamsIncludedInPublishedCourses = (): Promise => {\n return customFetch(\"Exam/inPublishedCourses\")\n .then((response) => response.json() as Promise>)\n .then((apiResponse) => apiResponse.data);\n};\n\nexport const getExam = (examId: string): Promise => {\n return customFetch(`Exam/${examId}`)\n .then((response) => response.json() as Promise>)\n .then((apiResponse) => apiResponse.data);\n};\n\nexport const addNewExam = (Exam: ExamViewModel): Promise> => {\n return customFetch(\"Exam\", {\n body: JSON.stringify(Exam),\n headers: { \"Content-Type\": \"application/json\" },\n method: \"POST\",\n }).then((response) => response.json() as Promise>);\n};\n\nexport const updateExam = (exam: ExamViewModel): Promise => {\n return customFetch(\"Exam\", {\n body: JSON.stringify(exam),\n headers: { \"Content-Type\": \"application/json\" },\n method: \"PUT\",\n });\n};\n\nexport const publishExam = (exam: ExamViewModel): Promise => {\n return customFetch(`Exam/status/${exam.id}/${ExamStatus.Published}`, {\n body: JSON.stringify(exam),\n headers: { \"Content-Type\": \"application/json\" },\n method: \"PUT\",\n });\n};\n\nexport const archiveExam = (exam: ExamViewModel): Promise => {\n return customFetch(`Exam/status/${exam.id}/${ExamStatus.Archived}`, {\n body: JSON.stringify(exam),\n headers: { \"Content-Type\": \"application/json\" },\n method: \"PUT\",\n });\n};\n\nexport const deleteExam = (examId: string): Promise => {\n return customFetch(`Exam/${examId}`, {\n headers: { \"Content-Type\": \"application/json\" },\n method: \"DELETE\",\n });\n};\n","import * as React from \"react\";\nimport { useIntl } from \"react-intl\";\nimport { ExamStateTranslationKey, ExamTemplateIndex, ExamTypeTranslationKey } from \"../../model/Exam\";\nimport { GetTranslatedValue } from \"../../model/Shared/TranslatedValue\";\nimport { GetTranslation } from \"../../translations/GetTranslation\";\nimport { ColumnDefinition, CustomGrid } from \"../common/customGrid/CustomGrid\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\n\ntype ExamGridProps = {\n exams: ExamTemplateIndex[];\n onRowClick: (course: ExamTemplateIndex) => void;\n onAddClick: () => void;\n};\n\nconst ExamGrid = (props: ExamGridProps) => {\n const intl = useIntl();\n const { exams, onRowClick, onAddClick } = props;\n const columnsDefinitions: ColumnDefinition[] = [\n {\n columnKey: \"name\",\n columnLabel: ,\n cellValue: (e) => GetTranslatedValue(e.name),\n },\n {\n columnKey: \"examType\",\n columnLabel: ,\n cellValue: (e) => GetTranslation(intl, ExamTypeTranslationKey[e.type]),\n },\n { columnKey: \"examId\", columnLabel: , cellValue: (e) => e.examId },\n {\n columnKey: \"status\",\n columnLabel: ,\n cellValue: (e) => GetTranslation(intl, ExamStateTranslationKey[e.status]),\n },\n ];\n\n return (\n \n columnDefinitions={columnsDefinitions}\n rows={exams}\n onRowClick={onRowClick}\n rowKey={(_) => _.id}\n addButtonTooltip={}\n onAddClick={onAddClick}\n />\n );\n};\n\nexport default ExamGrid;\n","import { LinearProgress, Typography } from \"@material-ui/core\";\nimport React, { FC, useEffect, useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { getExams } from \"../../api/ExamApi\";\nimport { NewEntityId } from \"../../data/constants\";\nimport { ExamTemplateIndex } from \"../../model/Exam\";\nimport { routesPaths } from \"../../Routes\";\nimport { navigateTo } from \"../../utils/Navigation\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\nimport ExamGrid from \"./ExamGrid\";\n\nconst ExamList: FC = () => {\n const [isLoading, setIsLoading] = useState(true);\n const [exams, setExams] = useState([]);\n const history = useHistory();\n\n useEffect(() => {\n getExams().then((result) => {\n setExams(result);\n setIsLoading(false);\n });\n }, []);\n\n if (isLoading) {\n return ;\n }\n\n const navigateToExam = (examId: string) => navigateTo(routesPaths.exam(examId), history);\n\n return (\n <>\n \n \n \n navigateToExam(row.id)}\n onAddClick={() => navigateToExam(NewEntityId)}\n />\n \n );\n};\n\nexport default ExamList;\n","import { Language } from \"../../data/constants\";\r\nimport { ExamAndExpertAssignmentRequestModel } from \"../../model/ExamAssignmentRequestModel\";\r\nimport { ExamDayViewModel } from \"../../model/ExamDayViewModel\";\r\nimport SendInvitationResponse from \"../../model/examSession/SendInvitationResponse\";\r\nimport { ExamSessionViewModel } from \"../../model/ExamSessionViewModel\";\r\nimport { ExamLocationViewModel } from \"../../model/ExamSignup/ModuleExamDetailsViewModel\";\r\nimport { ExpertAssignmentRequestModel } from \"../../model/ExpertAssignmentRequestModel\";\r\nimport { PersonType } from \"../../model/PersonType\";\r\nimport { RoomAssignmentViewModel } from \"../../model/RoomAssignmentViewModel\";\r\nimport { ApiResponse } from \"../CustomFetch\";\r\nimport { api } from \"./BaseApi\";\r\n\r\nconst getExamSessionUrl = (id?: string) => \"ExamSession\" + (id === undefined ? \"\" : `/${id}`);\r\n\r\nconst getExamDayUrl = (examSessionId: string, examDayId?: string) =>\r\n `${getExamSessionUrl(examSessionId)}/ExamDay` + (examDayId === undefined ? \"\" : `/${examDayId}`);\r\n\r\nconst getRoomAssignmentUrl = (examSessionId: string, examDayId: string, roomAssignmentId?: string) =>\r\n `${getExamSessionUrl(examSessionId)}/examDay/${examDayId}/roomAssignment` +\r\n (roomAssignmentId === undefined ? \"\" : `/${roomAssignmentId}`);\r\n\r\nconst examSessionApi = api.enhanceEndpoints({ addTagTypes: [\"ExamSessions\", \"AvailableDays\"] }).injectEndpoints({\r\n endpoints: (builder) => ({\r\n getExamSessions: builder.query({\r\n query: () => getExamSessionUrl(),\r\n transformResponse: (response: ApiResponse) => response.data,\r\n providesTags: (_result, _error, arg) => [{ type: \"ExamSessions\", id: \"LIST\" }],\r\n }),\r\n getExamSession: builder.query({\r\n query: getExamSessionUrl,\r\n transformResponse: (response: ApiResponse) => response.data,\r\n providesTags: (_result, _error, arg) => [{ type: \"ExamSessions\", id: arg }],\r\n }),\r\n getAvailableDays: builder.query<\r\n ExamLocationViewModel[],\r\n { examSessionId: string; examId: string; language: Language }\r\n >({\r\n query: ({ examSessionId, examId, language }) =>\r\n `${getExamSessionUrl(examSessionId)}/exam/${examId}/availableDays?language=${language}`,\r\n transformResponse: (response: ApiResponse) => response.data,\r\n providesTags: [\"AvailableDays\"],\r\n }),\r\n deleteExamSession: builder.mutation, string>({\r\n query: (examSessionId) => ({\r\n url: getExamSessionUrl(examSessionId),\r\n method: \"DELETE\",\r\n }),\r\n invalidatesTags: (_result, _error, arg) => [\r\n { type: \"ExamSessions\", id: \"LIST\" },\r\n { type: \"ExamSessions\", id: arg },\r\n ],\r\n }),\r\n createExamSession: builder.mutation, ExamSessionViewModel>({\r\n query: (examSession: ExamSessionViewModel) => ({\r\n url: getExamSessionUrl(),\r\n body: examSession,\r\n method: \"POST\",\r\n }),\r\n invalidatesTags: [{ type: \"ExamSessions\", id: \"LIST\" }],\r\n }),\r\n updateExamSession: builder.mutation, ExamSessionViewModel>({\r\n query: (examSessionViewModel) => ({\r\n url: getExamSessionUrl(),\r\n body: examSessionViewModel,\r\n method: \"PUT\",\r\n }),\r\n invalidatesTags: (_result, _error, arg) => [\r\n { type: \"ExamSessions\", id: \"LIST\" },\r\n { type: \"ExamSessions\", id: arg.id },\r\n ],\r\n }),\r\n updateAndPublishExamSession: builder.mutation({\r\n async queryFn(examSessionViewModel, _queryApi, _extraOptions, fetchWithBaseQuery) {\r\n const updateResponse = await fetchWithBaseQuery({\r\n url: getExamSessionUrl(),\r\n body: examSessionViewModel,\r\n method: \"PUT\",\r\n });\r\n if (updateResponse.error) {\r\n return updateResponse;\r\n }\r\n\r\n const publishResponse = await fetchWithBaseQuery({\r\n url: `${getExamSessionUrl(examSessionViewModel.id)}/publish`,\r\n body: {},\r\n method: \"POST\",\r\n });\r\n return publishResponse;\r\n },\r\n invalidatesTags: (_result, _error, arg) => [\r\n { type: \"ExamSessions\", id: \"LIST\" },\r\n { type: \"ExamSessions\", id: arg.id },\r\n ],\r\n }),\r\n unPublishExamSession: builder.mutation, string>({\r\n query: (examSessionId) => ({\r\n url: `${getExamSessionUrl(examSessionId)}/unpublish`,\r\n body: {},\r\n method: \"POST\",\r\n }),\r\n invalidatesTags: (_result, _error, arg) => [\r\n { type: \"ExamSessions\", id: \"LIST\" },\r\n { type: \"ExamSessions\", id: arg },\r\n ],\r\n }),\r\n deleteExamDay: builder.mutation, { examSessionId: string; examDayId: string }>({\r\n query: ({ examSessionId, examDayId }) => ({\r\n url: getExamDayUrl(examSessionId, examDayId),\r\n method: \"DELETE\",\r\n }),\r\n invalidatesTags: (_result, _error, arg) => [\r\n { type: \"AvailableDays\" },\r\n { type: \"ExamSessions\", id: arg.examSessionId },\r\n ],\r\n }),\r\n createExamDay: builder.mutation, { examSessionId: string; data: ExamDayViewModel }>({\r\n query: ({ examSessionId, data }) => ({\r\n url: getExamDayUrl(examSessionId),\r\n body: data,\r\n headers: { \"Content-Type\": \"application/json\" },\r\n method: \"POST\",\r\n }),\r\n invalidatesTags: (_result, _error, arg) => [\r\n { type: \"AvailableDays\" },\r\n { type: \"ExamSessions\", id: arg.examSessionId },\r\n ],\r\n }),\r\n updateExamDay: builder.mutation, { examSessionId: string; data: ExamDayViewModel }>({\r\n query: ({ examSessionId, data }) => ({\r\n url: getExamDayUrl(examSessionId),\r\n body: data,\r\n headers: { \"Content-Type\": \"application/json\" },\r\n method: \"PUT\",\r\n }),\r\n invalidatesTags: (_result, _error, arg) => [\r\n { type: \"AvailableDays\" },\r\n { type: \"ExamSessions\", id: arg.examSessionId },\r\n ],\r\n }),\r\n createRoomAssignment: builder.mutation<\r\n ApiResponse,\r\n { examSessionId: string; examDayId: string; data: RoomAssignmentViewModel }\r\n >({\r\n query: ({ examSessionId, examDayId, data }) => ({\r\n url: getRoomAssignmentUrl(examSessionId, examDayId),\r\n body: data,\r\n method: \"POST\",\r\n }),\r\n invalidatesTags: (_result, _error, arg) => [\r\n { type: \"ExamSessions\", id: \"LIST\" },\r\n { type: \"ExamSessions\", id: arg.examSessionId },\r\n \"AvailableDays\",\r\n ],\r\n }),\r\n deleteRoomAssignment: builder.mutation<\r\n ApiResponse,\r\n { examSessionId: string; examDayId: string; roomAssignmentId: string }\r\n >({\r\n query: ({ examSessionId, examDayId, roomAssignmentId }) => ({\r\n url: getRoomAssignmentUrl(examSessionId, examDayId, roomAssignmentId),\r\n method: \"DELETE\",\r\n }),\r\n invalidatesTags: (_result, _error, arg) => [\r\n { type: \"ExamSessions\", id: \"LIST\" },\r\n { type: \"ExamSessions\", id: arg.examSessionId },\r\n \"AvailableDays\",\r\n ],\r\n }),\r\n updateExamAndExpertAssignments: builder.mutation<\r\n ApiResponse,\r\n { examSessionId: string; data: ExamAndExpertAssignmentRequestModel }\r\n >({\r\n query: ({ examSessionId, data }) => ({\r\n url: `${getExamSessionUrl(examSessionId)}/examAndExpertAssignment`,\r\n body: data,\r\n method: \"PUT\",\r\n }),\r\n invalidatesTags: (_result, _error, arg) => [\r\n { type: \"ExamSessions\", id: \"LIST\" },\r\n { type: \"ExamSessions\", id: arg.examSessionId },\r\n \"AvailableDays\",\r\n ],\r\n }),\r\n updateExpertAssignments: builder.mutation<\r\n ApiResponse,\r\n { examSessionId: string; examDayId: string; data: ExpertAssignmentRequestModel[] }\r\n >({\r\n query: ({ examSessionId, examDayId, data }) => ({\r\n url: `${getExamSessionUrl(examSessionId)}/ExamDay/${examDayId}/Expert`,\r\n body: data,\r\n method: \"PUT\",\r\n }),\r\n invalidatesTags: (_result, _error, arg) => [\r\n { type: \"ExamSessions\", id: \"LIST\" },\r\n { type: \"ExamSessions\", id: arg.examSessionId },\r\n \"AvailableDays\",\r\n ],\r\n }),\r\n publishExamResults: builder.mutation, string>({\r\n query: (examSessionId) => ({\r\n url: `${getExamSessionUrl(examSessionId)}/publishExamResults`,\r\n body: {},\r\n method: \"POST\",\r\n }),\r\n invalidatesTags: (_result, _error, arg) => [\r\n { type: \"ExamSessions\", id: \"LIST\" },\r\n { type: \"ExamSessions\", id: arg },\r\n ],\r\n }),\r\n addExamSessionLocations: builder.mutation, { examSessionId: string; locationIds: string[] }>({\r\n query: ({ examSessionId, locationIds }) => ({\r\n url: `${getExamSessionUrl(examSessionId)}/location`,\r\n body: locationIds,\r\n method: \"POST\",\r\n }),\r\n invalidatesTags: (_result, _error, arg) => [\r\n { type: \"ExamSessions\", id: \"LIST\" },\r\n { type: \"ExamSessions\", id: arg.examSessionId },\r\n \"AvailableDays\",\r\n ],\r\n }),\r\n deleteExamSessionLocation: builder.mutation, { examSessionId: string; locationId: string }>({\r\n query: ({ examSessionId, locationId }) => ({\r\n url: `${getExamSessionUrl(examSessionId)}/location/${locationId}`,\r\n body: {},\r\n method: \"DELETE\",\r\n }),\r\n invalidatesTags: (_result, _error, arg) => [\r\n { type: \"ExamSessions\", id: \"LIST\" },\r\n { type: \"ExamSessions\", id: arg.examSessionId },\r\n \"AvailableDays\",\r\n ],\r\n }),\r\n startSurvey: builder.mutation, { examSessionId: string; surveyDeadline: Date }>({\r\n query: ({ examSessionId, surveyDeadline }) => ({\r\n url: `${getExamSessionUrl(examSessionId)}/survey`,\r\n body: surveyDeadline,\r\n method: \"POST\",\r\n }),\r\n }),\r\n sendInvitation: builder.mutation<\r\n SendInvitationResponse,\r\n {\r\n examSessionId: string;\r\n locationIds: string[];\r\n personType: PersonType;\r\n }\r\n >({\r\n query: ({ examSessionId, locationIds, personType: invitationType }) => ({\r\n url: `${getExamSessionUrl(examSessionId)}/invitation/${invitationType}`,\r\n body: locationIds,\r\n method: \"POST\",\r\n }),\r\n transformResponse: (response: ApiResponse) => response.data,\r\n invalidatesTags: (_result, _error, arg) => [\r\n { type: \"ExamSessions\", id: \"LIST\" },\r\n { type: \"ExamSessions\", id: arg.examSessionId },\r\n ],\r\n }),\r\n sendResultNotifications: builder.mutation, string>({\r\n query: (examSessionId) => ({\r\n url: `${getExamSessionUrl(examSessionId)}/examResult`,\r\n body: {},\r\n method: \"POST\",\r\n }),\r\n }),\r\n exportOrders: builder.mutation, string>({\r\n query: (examSessionId) => ({\r\n url: `${getExamSessionUrl(examSessionId)}/export`,\r\n body: {},\r\n method: \"POST\",\r\n }),\r\n }),\r\n }),\r\n});\r\n\r\nexport const importPevUrl = `${getExamSessionUrl()}/importPev`;\r\n\r\nexport const getWrittenExamScoreImportUrl = (examSessionId: string) =>\r\n `${getExamSessionUrl(examSessionId)}/writtenExamScoreFile`;\r\n\r\nexport const {\r\n endpoints,\r\n useGetExamSessionsQuery,\r\n useGetExamSessionQuery,\r\n useGetAvailableDaysQuery,\r\n useDeleteExamSessionMutation,\r\n useCreateExamSessionMutation,\r\n useUpdateExamSessionMutation,\r\n useUpdateAndPublishExamSessionMutation,\r\n useUnPublishExamSessionMutation,\r\n useDeleteExamDayMutation,\r\n useCreateExamDayMutation,\r\n useUpdateExamDayMutation,\r\n useCreateRoomAssignmentMutation,\r\n useDeleteRoomAssignmentMutation,\r\n useUpdateExamAndExpertAssignmentsMutation,\r\n useUpdateExpertAssignmentsMutation,\r\n usePublishExamResultsMutation,\r\n useAddExamSessionLocationsMutation,\r\n useDeleteExamSessionLocationMutation,\r\n useStartSurveyMutation,\r\n useSendInvitationMutation,\r\n useSendResultNotificationsMutation,\r\n useExportOrdersMutation,\r\n} = examSessionApi;\r\n","import { TranslationKey } from '../translations/TranslationKey';\n\nexport type TimeSlotStructure = { [type in TimeSlotStructureType]: TimeSlot[] };\n\nexport enum TimeSlotStructureType {\n OralHBB_ProcessModule = 'OralHBB_ProcessModule',\n OralIntermediary = 'OralIntermediary',\n ElectiveWritten = 'ElectiveWritten',\n WrittenHBB_ProcessModule = 'WrittenHBB_ProcessModule',\n WrittenIntermediary = 'WrittenIntermediary',\n MandatoryWritten = 'MandatoryWritten',\n Correction = 'Correction',\n}\n\nexport enum TimeSlotType {\n Exam = 0,\n Briefing = 1,\n Break = 2,\n}\n\nexport interface TimeSlot {\n index?: number;\n startTime: string;\n endTime: string;\n arrivalTime: string | null;\n type?: TimeSlotType;\n}\n\nexport const TimeSlotStructureLabels: { [structure in TimeSlotStructureType]: TranslationKey } = {\n [TimeSlotStructureType.OralHBB_ProcessModule]: 'examDay.field.timeSlotStructure.oralHBB_ProcessModule',\n [TimeSlotStructureType.OralIntermediary]: 'examDay.field.timeSlotStructure.oralIntermediary',\n [TimeSlotStructureType.ElectiveWritten]: 'examDay.field.timeSlotStructure.electiveWritten',\n [TimeSlotStructureType.WrittenHBB_ProcessModule]: 'examDay.field.timeSlotStructure.writtenHBB_ProcessModule',\n [TimeSlotStructureType.WrittenIntermediary]: 'examDay.field.timeSlotStructure.writtenIntermediary',\n [TimeSlotStructureType.MandatoryWritten]: 'examDay.field.timeSlotStructure.mandatoryWritten',\n [TimeSlotStructureType.Correction]: 'examDay.field.timeSlotStructure.correction',\n};\n\n","import { Language, LocalStorageKey, NewEntityId } from \"../data/constants\";\nimport { ConfirmationMailHistoryEntryViewModel } from \"./ConfirmationMailHistoryEntryViewModel\";\nimport { ExamTemplateWithStructureIndex } from \"./Exam\";\nimport { ExamDayViewModel } from \"./ExamDayViewModel\";\nimport { LocationViewModel } from \"./LocationViewModel\";\n\nexport interface ExamSessionViewModel {\n from: Date;\n id: string;\n locations: LocationViewModel[];\n published: boolean;\n sessionKeyDE: string;\n sessionKeyEN: string;\n sessionKeyFR: string;\n sessionKeyIT: string;\n signupEndDate: Date;\n signupStartDate: Date;\n to: Date;\n examDays: ExamDayViewModel[];\n surveyDeadline?: Date;\n confirmationMailHistory: ConfirmationMailHistoryEntryViewModel[];\n examResultDate: Date;\n objectionDate: Date;\n gradingConferenceDate: Date;\n freeCancellationEndDate: Date;\n resultsArePublished: boolean;\n\n examsStartDate: Date;\n examsEndDate: Date;\n\n correctionStartDate: Date;\n correctionEndDate: Date;\n\n inspectionStartDate: Date;\n inspectionEndDate: Date;\n\n exams: ExamTemplateWithStructureIndex[];\n}\n\nexport const initialExamSession: ExamSessionViewModel = {\n from: new Date(),\n id: NewEntityId,\n locations: [],\n published: false,\n signupEndDate: new Date(),\n signupStartDate: new Date(),\n to: new Date(),\n examDays: [],\n surveyDeadline: new Date(),\n confirmationMailHistory: [],\n examResultDate: new Date(),\n objectionDate: new Date(),\n gradingConferenceDate: new Date(),\n freeCancellationEndDate: new Date(),\n resultsArePublished: false,\n examsStartDate: new Date(),\n examsEndDate: new Date(),\n correctionStartDate: new Date(),\n correctionEndDate: new Date(),\n inspectionStartDate: new Date(),\n inspectionEndDate: new Date(),\n exams: [],\n sessionKeyDE: \"\",\n sessionKeyEN: \"\",\n sessionKeyFR: \"\",\n sessionKeyIT: \"\",\n};\n\nexport const GetLocalizedName = (examSession: ExamSessionViewModel): string => {\n const language = localStorage.getItem(LocalStorageKey.LastSelectedLanguageKey);\n\n switch (language) {\n case Language.EN:\n return examSession.sessionKeyEN;\n case Language.FR:\n return examSession.sessionKeyFR;\n case Language.IT:\n return examSession.sessionKeyIT;\n }\n\n return examSession.sessionKeyDE;\n};\n\n","import { Grid, makeStyles, Typography } from \"@material-ui/core\";\nimport React from \"react\";\n\ninterface TitleWithIconProps {\n title: React.ReactNode;\n children?: JSX.Element;\n variant: \"h3\" | \"h4\" | \"h5\";\n}\n\nconst useStyles = makeStyles((theme) => ({\n main: {\n display: \"flex\",\n flexWrap: \"nowrap\",\n alignItems: \"baseline\",\n gap: theme.spacing(1) + \"px\",\n },\n}));\n\nconst TitleWithIcon: React.FC = ({ title, children, variant }) => {\n const classes = useStyles();\n\n return (\n \n {children}\n {title}\n \n );\n};\n\nexport default TitleWithIcon;\n","import { Card, CardActionArea, CardContent, Typography, CardHeader, IconButton } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport React, { useState } from \"react\";\nimport { Close, Launch } from \"@material-ui/icons\";\nimport CustomDraggableDialog from \"./customDialog/CustomDraggableDialog\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\n\ninterface CustomCardProps {\n line1?: JSX.Element | string;\n line2?: JSX.Element | string;\n line3?: JSX.Element | string;\n line4?: JSX.Element | string;\n restLines?: (JSX.Element | string)[];\n title?: JSX.Element | string;\n deleteConfirmationHeader?: JSX.Element | string;\n deleteConfirmationContent?: JSX.Element | string;\n onClick?: () => void;\n onDelete?: () => void;\n isOpenButtonVisible?: boolean;\n isDeleteButtonVisible?: boolean;\n isCardClickDisabled?: boolean;\n}\n\nconst useStyles = makeStyles({\n card: {\n minHeight: 160,\n },\n header: {\n paddingTop: 5,\n paddingBottom: 0,\n height: 0,\n },\n title: {\n fontSize: 14,\n },\n pos: {\n marginBottom: 12,\n },\n restLine: {\n marginTop: 12,\n },\n});\n\nconst CustomCard: React.FunctionComponent = ({\n deleteConfirmationHeader,\n deleteConfirmationContent,\n isDeleteButtonVisible,\n isOpenButtonVisible,\n ...card\n}) => {\n const classes = useStyles();\n const [isDeleteDialogOpen, showDeleteDialog] = useState(false);\n const emptyLinePlaceHolder = \"--\";\n\n let headerClass = classes.header;\n if (card.title) {\n headerClass = \"\";\n }\n\n const cardHeader = (\n \n {isOpenButtonVisible && (\n \n \n \n )}\n {isDeleteButtonVisible && (\n showDeleteDialog(true)}>\n \n \n )}\n
\n }\n />\n );\n\n const cardContent = (\n \n \n {card.line1 || emptyLinePlaceHolder}\n \n {card.line2 || emptyLinePlaceHolder}\n \n {card.line3 || emptyLinePlaceHolder}\n \n \n {card.line4 || emptyLinePlaceHolder}\n \n {card.restLines?.map((line, index) => (\n \n {line || emptyLinePlaceHolder}\n \n ))}\n \n );\n\n return (\n \n \n {(isOpenButtonVisible || isDeleteButtonVisible) && cardHeader}\n {card.isCardClickDisabled ? (\n
{cardContent}
\n ) : (\n \n {cardContent}\n \n )}\n
\n\n {isDeleteButtonVisible && (\n }\n cancelText={}\n content={deleteConfirmationContent || }\n isOpen={isDeleteDialogOpen}\n onAccept={card.onDelete!}\n onCancel={() => showDeleteDialog(false)}\n title={deleteConfirmationHeader || }\n />\n )}\n
\n );\n};\n\nCustomCard.defaultProps = {\n onClick: () => {},\n onDelete: () => {},\n} as Partial;\n\nexport default CustomCard;\n","import { TranslationKey } from '../../../translations/TranslationKey';\nimport TranslatedMessage from '../../translations/TranslatedMessage';\nimport Chip from '@material-ui/core/Chip';\nimport { createStyles, makeStyles } from '@material-ui/styles';\nimport React from 'react';\n\ntype LanguageListProps = {\n languageRegions: string[];\n};\n\nconst useStyles = makeStyles(theme => (createStyles({\n language: {\n marginRight: '10px',\n }\n})));\n\nconst LanguageList: React.FunctionComponent = ({ languageRegions }) => {\n const cssClasses = useStyles({});;\n const languages = languageRegions.map(languageRegion =>\n } />);\n\n return (\n {languages}\n );\n}\n\nexport default LanguageList;\n","import { Tooltip } from \"@material-ui/core\";\r\nimport Chip from \"@material-ui/core/Chip\";\r\nimport { createStyles, makeStyles } from \"@material-ui/styles\";\r\nimport React from \"react\";\r\nimport { ExamTemplateWithStructureIndex } from \"../../model/Exam\";\r\nimport { GetTranslatedValue } from \"../../model/Shared/TranslatedValue\";\r\n\r\ntype ExamChipsProps = {\r\n exams: ExamTemplateWithStructureIndex[];\r\n};\r\n\r\nconst margin = 10;\r\nconst useStyles = makeStyles(() =>\r\n createStyles({\r\n container: {\r\n marginTop: -margin,\r\n },\r\n item: {\r\n marginRight: margin,\r\n marginTop: margin,\r\n maxWidth: \"100%\",\r\n },\r\n })\r\n);\r\n\r\nconst ExamChips: React.FC = ({ exams }) => {\r\n const cssClasses = useStyles({});\r\n const examNames = exams.map((exam) => GetTranslatedValue(exam.name));\r\n const examElements = examNames.map((name) => (\r\n \r\n \r\n \r\n ));\r\n return
{examElements}
;\r\n};\r\n\r\nexport default ExamChips;\r\n","import Computer from \"@material-ui/icons/Computer\";\nimport School from \"@material-ui/icons/School\";\nimport SpeakerNotes from \"@material-ui/icons/SpeakerNotes\";\nimport React, { FC } from \"react\";\nimport { ExamSessionViewModel } from \"../../model/ExamSessionViewModel\";\nimport { RoomAssignmentViewModel } from \"../../model/RoomAssignmentViewModel\";\nimport CustomCard from \"../common/CustomCard\";\nimport LanguageList from \"../common/language/LanguageList\";\nimport ExamChips from \"../exam/ExamChips\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\n\ntype RoomAssignmentCardProps = {\n examSession: ExamSessionViewModel;\n isReadOnly: boolean;\n isUserRoomAssignment?: boolean;\n locationId: string;\n roomAssignment: RoomAssignmentViewModel;\n onDeleteRoomAssignment?: (roomAssignmentId: string) => void;\n};\n\nconst RoomAssignmentCard: FC = ({\n examSession,\n isReadOnly,\n isUserRoomAssignment,\n roomAssignment,\n locationId,\n onDeleteRoomAssignment,\n}) => {\n const location = examSession.locations.find((location) => location.id === locationId);\n if (location === undefined) {\n return <>;\n }\n\n const handleDelete = () => {\n if (isReadOnly && !roomAssignment.isPreparationRoom) {\n return () => {};\n }\n\n return onDeleteRoomAssignment!(roomAssignment.id);\n };\n\n const getRoomAssignmentIcon = () => {\n if (roomAssignment.isPreparationRoom) {\n return ;\n }\n if (room && room.isPcRoom) {\n return ;\n }\n\n return ;\n };\n\n const getExams = () => {\n const examIds = roomAssignment.examAssignments.map((assignment) => assignment.examId);\n return examSession.exams.filter((exam) => examIds.indexOf(exam.id) > -1);\n };\n\n const exams = getExams();\n const room = location.rooms.find((room) => room.id === roomAssignment.roomId);\n const roomAssignmentIcon = getRoomAssignmentIcon();\n const floor = room !== undefined ? room.floor : \"\";\n const numberOfSeats = room !== undefined ? room.numberOfSeats : 0;\n const languagesElement = ;\n const examsElement = ;\n const deleteConfirmationContent = roomAssignment.isPreparationRoom ? (\n \n ) : undefined;\n\n return (\n \n {room && room.name} {roomAssignmentIcon}\n \n }\n line3={\n \n {floor} - {numberOfSeats}{\" \"}\n \n \n }\n restLines={[languagesElement, examsElement]}\n deleteConfirmationContent={deleteConfirmationContent}\n />\n );\n};\n\nexport default RoomAssignmentCard;\n","import { Grid } from \"@material-ui/core\";\r\nimport { Add, MeetingRoom } from \"@material-ui/icons\";\r\nimport { orderBy } from \"lodash\";\r\nimport React, { FC } from \"react\";\r\nimport { ExamSessionViewModel } from \"../../model/ExamSessionViewModel\";\r\nimport { RoomAssignmentViewModel } from \"../../model/RoomAssignmentViewModel\";\r\nimport TitleWithIcon from \"../common/TitleWithIcon\";\r\nimport CustomButton from \"../common/buttons/CustomButton\";\r\nimport RightButtonArea from \"../common/buttons/RightButtonArea\";\r\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\r\nimport RoomAssignmentCard from \"./RoomAssignmentCard\";\r\n\r\ninterface IRoomAssignmentListProps {\r\n examSession: ExamSessionViewModel;\r\n roomAssignments: RoomAssignmentViewModel[];\r\n locationId: string;\r\n isReadOnly: boolean;\r\n onStartAddingRoomAssignment?: () => void;\r\n onDeleteRoomAssignment?: (roomAssignmentId: string) => void;\r\n}\r\n\r\nconst RoomAssignmentList: FC = ({\r\n roomAssignments,\r\n onStartAddingRoomAssignment,\r\n ...cardProps\r\n}) => {\r\n const sortedRoomAssignments = orderBy(roomAssignments, (room) => room.roomId.toLowerCase());\r\n const roomCards = sortedRoomAssignments.map((roomAssignment) => (\r\n \r\n \r\n \r\n ));\r\n\r\n return (\r\n <>\r\n \r\n \r\n } variant=\"h4\">\r\n \r\n \r\n \r\n {!cardProps.isReadOnly && (\r\n \r\n \r\n }\r\n onClick={onStartAddingRoomAssignment!}\r\n >\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n {roomCards}\r\n \r\n \r\n );\r\n};\r\n\r\nRoomAssignmentList.defaultProps = {\r\n onStartAddingRoomAssignment: () => {},\r\n onDeleteRoomAssignment: () => {},\r\n} as Partial;\r\n\r\nexport default RoomAssignmentList;\r\n","import React, { FC, useEffect, useState } from \"react\";\nimport { useIntl } from \"react-intl\";\nimport { TimeSlotStructureLabels, TimeSlotStructureType } from \"../../model/TimeSlotStructure\";\nimport { GetTranslation } from \"../../translations/GetTranslation\";\nimport { CustomAutocomplete } from \"../common/customAutocomplete/CustomAutocomplete\";\nimport { IOption } from \"../common/customAutocomplete/IOption\";\n\ninterface TimeSlotStructureSelectProps {\n value: TimeSlotStructureType;\n onChange?: (value: TimeSlotStructureType) => void;\n error?: boolean;\n}\n\nexport const TimeSlotStructureSelect: FC = ({\n value,\n onChange = (_value: TimeSlotStructureType) => {},\n error,\n}) => {\n const intl = useIntl();\n const [options, setOptions] = useState[]>([]);\n\n useEffect(() => {\n const structureOptions = Object.values(TimeSlotStructureType).map((structureValue) => {\n return { value: structureValue, label: GetTranslation(intl, TimeSlotStructureLabels[structureValue]) };\n });\n setOptions(structureOptions);\n }, [intl]);\n\n const selectedValue = options.find((structure) => structure.value === value) || null;\n return (\n 0}\n label={GetTranslation(intl, \"examDay.field.timeSlotStructure\")}\n options={options}\n getOptionLabel={(option) => option.label}\n value={selectedValue}\n onChange={(_event, value) => onChange(value?.value || options[0].value)}\n required={true}\n error={error}\n />\n );\n};\n","import { FormControlLabel, FormLabel, Grid, Radio, RadioGroup } from \"@material-ui/core\";\r\nimport React from \"react\";\r\nimport { ExamDayViewModel } from \"../../model/ExamDayViewModel\";\r\nimport { TimeSlotStructureType } from \"../../model/TimeSlotStructure\";\r\nimport FormGridCell from \"../common/FormGridCell\";\r\nimport DatePicker from \"../common/datePicker/DatePicker\";\r\nimport { TimeSlotStructureSelect } from \"../examDay/TimeSlotStructureSelect\";\r\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\r\n\r\ntype ExamDayFieldsProps = {\r\n examDay: ExamDayViewModel;\r\n onPropertyValueChanges?: (part: Partial) => void;\r\n minDate: Date;\r\n maxDate: Date;\r\n};\r\n\r\nconst ExamDayFields: React.FunctionComponent = ({\r\n examDay,\r\n onPropertyValueChanges,\r\n minDate,\r\n maxDate,\r\n}) => {\r\n const handleTextChange =\r\n (key: keyof ExamDayViewModel) => (event: React.ChangeEvent) =>\r\n handleChange(key, event.target.value);\r\n\r\n const handleDateChange = (key: keyof ExamDayViewModel) => (date: Date | null) => {\r\n if (date) {\r\n handleChange(key, date);\r\n }\r\n };\r\n\r\n const handleTimeSlotStructureChange = (structure: TimeSlotStructureType) => {\r\n handleChange(\"timeSlotStructureType\", structure);\r\n };\r\n\r\n const handleChange = (key: keyof ExamDayViewModel, value: string | string[] | Date | boolean) => {\r\n let part: Partial = {\r\n [key]: value,\r\n };\r\n\r\n if (onPropertyValueChanges) {\r\n onPropertyValueChanges(part);\r\n }\r\n };\r\n\r\n const hasRoomAssignments = examDay.roomAssignments && examDay.roomAssignments.length > 0;\r\n\r\n const datesFilter = (date: Date | null) => {\r\n if (date && date >= minDate && date <= maxDate) {\r\n return false;\r\n }\r\n return true;\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n label={}\r\n disabled={hasRoomAssignments}\r\n />\r\n }\r\n label={}\r\n disabled={hasRoomAssignments}\r\n />\r\n }\r\n label={}\r\n disabled={hasRoomAssignments}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n }\r\n value={examDay.date}\r\n onChange={handleDateChange(\"date\")}\r\n required={true}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nExamDayFields.defaultProps = {\r\n onPropertyValueChanges: () => { },\r\n} as Partial;\r\n\r\nexport default ExamDayFields;\r\n","import Grid from \"@material-ui/core/Grid\";\nimport LinearProgress from \"@material-ui/core/LinearProgress\";\nimport Typography from \"@material-ui/core/Typography\";\nimport AssignmentIndOutlined from \"@material-ui/icons/AssignmentIndOutlined\";\nimport MeetingRoom from \"@material-ui/icons/MeetingRoom\";\nimport People from \"@material-ui/icons/People\";\nimport SchoolOutlined from \"@material-ui/icons/SchoolOutlined\";\nimport React, { FC, useEffect, useState } from \"react\";\nimport { useHistory, useParams } from \"react-router\";\nimport { routesPaths } from \"../../Routes\";\nimport {\n useCreateExamDayMutation,\n useDeleteExamDayMutation,\n useDeleteRoomAssignmentMutation,\n useGetExamSessionQuery,\n useUpdateExamDayMutation,\n} from \"../../api/rtk/ExamSessionApi\";\nimport { NewEntityId, SwissGermanLocale, SwissTimeZone, UserRoomAssignmentType } from \"../../data/constants\";\nimport { ExamDayType } from \"../../model/ExamDayType\";\nimport { ExamDayViewModel } from \"../../model/ExamDayViewModel\";\nimport { GetLocalizedName } from \"../../model/ExamSessionViewModel\";\nimport { TimeSlotStructureType } from \"../../model/TimeSlotStructure\";\nimport TitleWithIcon from \"../common/TitleWithIcon\";\nimport CustomButton from \"../common/buttons/CustomButton\";\nimport DefaultButtons from \"../common/buttons/DefaultButtons\";\nimport RoomAssignmentList from \"../roomAssignment/RoomAssignmentList\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\nimport ExamDayFields from \"./ExamDayFields\";\n\nconst ExamDayForm: FC = () => {\n const history = useHistory();\n const { examSessionId, locationId, examDayId } =\n useParams<{ examSessionId: string; locationId: string; examDayId: string }>();\n const { data: examSession, isFetching: isExamSessionFetching } = useGetExamSessionQuery(examSessionId);\n const [deleteRoomAssignment, { isLoading: isDeleteRoomAssignmentLoading }] = useDeleteRoomAssignmentMutation();\n const [deleteExamDay, { isLoading: isDeleteExamDayLoading }] = useDeleteExamDayMutation();\n const [createExamDay, { isLoading: isCreateExamDayLoading }] = useCreateExamDayMutation();\n const [updateExamDay, { isLoading: isUpdateExamDayLoading }] = useUpdateExamDayMutation();\n\n const location = examSession?.locations.find((location) => location.id === locationId);\n\n const [examDay, setExamDay] = useState({\n id: NewEntityId,\n date: new Date(),\n locationId,\n roomAssignments: [],\n type: ExamDayType.Written,\n availableUsers: [],\n availableCorrectionExperts: [],\n timeSlotStructureType: TimeSlotStructureType.ElectiveWritten,\n });\n\n useEffect(() => {\n const examDay = examSession?.examDays.find((examDay) => examDay.id === examDayId);\n if (examDay !== undefined) {\n setExamDay(examDay);\n }\n else if (examSession !== undefined) {\n const now = new Date();\n const utcToday = new Date(Date.UTC(now.getFullYear(), now.getMonth(), now.getDate()));\n const utcFrom = new Date(examSession.from);\n const utcTo = new Date(examSession.to);\n setExamDay(examDay => ({\n ...examDay,\n date: utcToday >= utcFrom && utcToday <= utcTo ? utcToday : utcFrom\n }))\n }\n\n }, [examDayId, examSession]);\n\n if (\n isExamSessionFetching ||\n isDeleteRoomAssignmentLoading ||\n isDeleteExamDayLoading ||\n isCreateExamDayLoading ||\n isUpdateExamDayLoading\n ) {\n return ;\n }\n\n if (examSession === undefined || examDay === undefined || location === undefined) {\n return <>;\n }\n\n const examDayDate = new Date(examDay.date).toLocaleDateString(SwissGermanLocale, { timeZone: SwissTimeZone });\n const from = new Date(examSession.from);\n const to = new Date(examSession.to);\n\n const close = () => history.push(routesPaths.examSessionLocation(examSessionId, locationId));\n\n const handleChange = (partialExamDay: Partial) =>\n setExamDay((prevExamDay) => ({ ...prevExamDay, ...partialExamDay }));\n\n const handleClose = () => close();\n\n const handleSave = async () => {\n var requestData = { examSessionId, data: examDay };\n const response = await (examDay.id === NewEntityId\n ? createExamDay(requestData)\n : updateExamDay(requestData)\n ).unwrap();\n if (response.success) {\n close();\n }\n };\n\n const handleDelete = async () => {\n const response = await deleteExamDay({ examSessionId, examDayId: examDay.id }).unwrap();\n if (response.success) {\n close();\n }\n };\n\n const handleStartAssigningRoomAssignment = () =>\n history.push(routesPaths.roomAssignment(examSessionId, locationId, examDay.id, NewEntityId));\n\n const handleDeleteRoomAssignment = async (roomAssignmentId: string) => {\n const response = await deleteRoomAssignment({ examSessionId, examDayId, roomAssignmentId }).unwrap();\n if (response.success) {\n close();\n }\n };\n\n const assignProctorsToWrittenExamsButton = (\n }\n onClick={() =>\n history.push(routesPaths.userRoomAssignment(examSessionId, examDay.id, UserRoomAssignmentType.WrittenExam))\n }\n >\n \n \n );\n\n const assignProctorsToOralPreparationButton = (\n }\n onClick={() =>\n history.push(routesPaths.userRoomAssignment(examSessionId, examDay.id, UserRoomAssignmentType.OralPreparation))\n }\n >\n \n \n );\n\n const assignExpertsToOralExamButton = (\n }\n onClick={() =>\n history.push(routesPaths.userRoomAssignment(examSessionId, examDay.id, UserRoomAssignmentType.OralExam))\n }\n >\n \n \n );\n\n const assignExpertsToCorrectionExamsButton = (\n }\n onClick={() =>\n history.push(routesPaths.userRoomAssignment(examSessionId, examDay.id, UserRoomAssignmentType.Correction))\n }\n >\n \n \n );\n\n return (\n <>\n \n \n \n \n {GetLocalizedName(examSession)} - {location.name}\n \n \n \n \n \n \n \n {examDay.type === ExamDayType.Written &&\n examDay.roomAssignments.length > 0 &&\n assignProctorsToWrittenExamsButton}\n {examDay.type === ExamDayType.Oral &&\n examDay.roomAssignments.find((assignment) => assignment.isPreparationRoom) &&\n assignProctorsToOralPreparationButton}\n {examDay.type === ExamDayType.Oral &&\n examDay.roomAssignments.find((assignment) => !assignment.isPreparationRoom) &&\n assignExpertsToOralExamButton}\n {examDay.type === ExamDayType.Correction &&\n examDay.roomAssignments.length > 0 &&\n assignExpertsToCorrectionExamsButton}\n \n }\n />\n \n \n \n \n \n \n {examDay.id !== NewEntityId && (\n \n )}\n \n \n \n );\n};\n\nexport default ExamDayForm;\n","import { OrderStatus } from \"../../components/order/OrderConstants\";\r\nimport { DocumentReferenceViewModel } from \"../../model/DocumentReferenceViewModel\";\r\nimport { AssignCandidatesRequestModel } from \"../../model/examSessionCandidate/AssignCandidatesRequestModel\";\r\nimport { ExamSessionCandidateViewModel } from \"../../model/examSessionCandidate/ExamSessionCandidateViewModel\";\r\nimport { ReBookCandidateExamRequestModel } from \"../../model/examSessionCandidate/ReBookCandidateExamRequestModel\";\r\nimport { UpdateCandidateModuleRequestModel } from \"../../model/examSessionCandidate/UpdateCandidateModuleRequestModel\";\r\nimport { ApiResponse } from \"../CustomFetch\";\r\nimport { api, transformApiResponse } from \"./BaseApi\";\r\n\r\nconst apiUrl = \"/examSessionCandidate\";\r\n\r\nconst getExamSessionCandidateUrl = (id?: string) => (id === undefined ? apiUrl : `${apiUrl}/${id}`);\r\n\r\nconst examSessionCandidateApi = api\r\n .enhanceEndpoints({ addTagTypes: [\"ExamSessionCandidates\", \"AvailableDays\", \"MyCandidateExams\"] })\r\n .injectEndpoints({\r\n endpoints: (builder) => ({\r\n getExamSessionCandidates: builder.query({\r\n query: (examSessionId) => `/examSession/${examSessionId}/examSessionCandidates`,\r\n transformResponse: (response: ApiResponse) => response.data,\r\n providesTags: (result) =>\r\n result\r\n ? [\r\n ...result.map(({ id }) => ({ type: \"ExamSessionCandidates\" as const, id })),\r\n { type: \"ExamSessionCandidates\", id: \"LIST\" },\r\n ]\r\n : [{ type: \"ExamSessionCandidates\", id: \"LIST\" }],\r\n }),\r\n getExamSessionCandidateById: builder.query({\r\n query: getExamSessionCandidateUrl,\r\n transformResponse: (response: ApiResponse) => response.data,\r\n providesTags: (_result, _error, arg) => [{ type: \"ExamSessionCandidates\", id: arg }],\r\n }),\r\n cancelCandidateModule: builder.mutation, { examSessionCandidateId: string; moduleId: string; candidateWillGetRefund: boolean; comments?: string }>({\r\n query: ({ examSessionCandidateId, moduleId, candidateWillGetRefund, comments }) => ({\r\n url: `${getExamSessionCandidateUrl(examSessionCandidateId)}/module/${moduleId}/cancel`,\r\n method: \"POST\",\r\n body: { candidateWillGetRefund, comments },\r\n transformResponse: transformApiResponse,\r\n }),\r\n invalidatesTags: (_result, _error, arg) => [\r\n { type: \"ExamSessionCandidates\", id: arg.examSessionCandidateId },\r\n \"AvailableDays\",\r\n \"MyCandidateExams\",\r\n ],\r\n }),\r\n reBookCandidateExam: builder.mutation<\r\n ApiResponse,\r\n { examSessionCandidateId: string; moduleId: string; examId: string; data?: ReBookCandidateExamRequestModel }\r\n >({\r\n query: ({ examSessionCandidateId, moduleId, examId, data }) => ({\r\n url: `${getExamSessionCandidateUrl(examSessionCandidateId)}/module/${moduleId}/exam/${examId}/reBook`,\r\n body: data === undefined ? {} : data,\r\n method: \"POST\",\r\n }),\r\n invalidatesTags: (_result, _error, arg) => [\r\n { type: \"ExamSessionCandidates\", id: arg.examSessionCandidateId },\r\n \"AvailableDays\",\r\n ],\r\n }),\r\n assignCandidatesAndExperts: builder.mutation, AssignCandidatesRequestModel>({\r\n query: (data) => ({\r\n url: `${getExamSessionCandidateUrl()}/assign`,\r\n body: data,\r\n method: \"POST\",\r\n }),\r\n invalidatesTags: (_result, _error, arg) => {\r\n var candidateTags = arg.examSessionCandidates.map((candidate) => ({\r\n type: \"ExamSessionCandidates\" as const,\r\n id: candidate.examSessionCandidateId,\r\n }));\r\n return [...candidateTags, \"AvailableDays\"];\r\n },\r\n }),\r\n updateCandidateModule: builder.mutation<\r\n ApiResponse,\r\n { examSessionCandidateId: string; moduleId: string; data: UpdateCandidateModuleRequestModel }\r\n >({\r\n query: ({ examSessionCandidateId, moduleId, data }) => ({\r\n url: `${getExamSessionCandidateUrl(examSessionCandidateId)}/module/${moduleId}`,\r\n body: data,\r\n method: \"PATCH\",\r\n }),\r\n invalidatesTags: (_result, _error, arg) => [{ type: \"ExamSessionCandidates\", id: arg.examSessionCandidateId }],\r\n }),\r\n approveCandidateModule: builder.mutation, { examSessionCandidateId: string; moduleId: string }>(\r\n {\r\n query: ({ examSessionCandidateId, moduleId }) => ({\r\n url: `${getExamSessionCandidateUrl(examSessionCandidateId)}/module/${moduleId}/approve`,\r\n body: {},\r\n method: \"POST\",\r\n }),\r\n invalidatesTags: (_result, _error, arg) => [\r\n { type: \"ExamSessionCandidates\", id: arg.examSessionCandidateId },\r\n \"AvailableDays\",\r\n ],\r\n }\r\n ),\r\n rejectCandidateModule: builder.mutation, { examSessionCandidateId: string; moduleId: string }>({\r\n query: ({ examSessionCandidateId, moduleId }) => ({\r\n url: `${getExamSessionCandidateUrl(examSessionCandidateId)}/module/${moduleId}/reject`,\r\n body: {},\r\n method: \"POST\",\r\n }),\r\n invalidatesTags: (_result, _error, arg) => [\r\n { type: \"ExamSessionCandidates\", id: arg.examSessionCandidateId },\r\n \"AvailableDays\",\r\n ],\r\n }),\r\n listModuleDocuments: builder.query<\r\n DocumentReferenceViewModel[],\r\n { examSessionCandidateId: string; moduleId: string }\r\n >({\r\n query: ({ examSessionCandidateId, moduleId }) =>\r\n `${getExamSessionCandidateUrl(examSessionCandidateId)}/module/${moduleId}/documents`,\r\n transformResponse: transformApiResponse,\r\n }),\r\n rebookCandidateModule: builder.mutation, { examSessionCandidateId: string; moduleId: string }>({\r\n query: ({ examSessionCandidateId, moduleId }) => ({\r\n url: `${getExamSessionCandidateUrl(examSessionCandidateId)}/module/${moduleId}/rebook`,\r\n body: {},\r\n method: \"POST\",\r\n }),\r\n invalidatesTags: (_result, _error, arg) => [\r\n { type: \"ExamSessionCandidates\", id: arg.examSessionCandidateId },\r\n \"AvailableDays\",\r\n ],\r\n }),\r\n\r\n calculateExamResults: builder.mutation, string>({\r\n query: (examSessionId) => ({\r\n url: `${apiUrl}/examSession/${examSessionId}/calculateExamResults`,\r\n body: {},\r\n method: \"POST\",\r\n }),\r\n invalidatesTags: () => [{ type: \"ExamSessionCandidates\" }],\r\n }),\r\n }),\r\n });\r\n\r\nexport const {\r\n useGetExamSessionCandidatesQuery,\r\n useGetExamSessionCandidateByIdQuery,\r\n useReBookCandidateExamMutation,\r\n useAssignCandidatesAndExpertsMutation,\r\n useUpdateCandidateModuleMutation,\r\n useApproveCandidateModuleMutation,\r\n useRejectCandidateModuleMutation,\r\n useListModuleDocumentsQuery,\r\n useCalculateExamResultsMutation,\r\n useCancelCandidateModuleMutation,\r\n useRebookCandidateModuleMutation,\r\n} = examSessionCandidateApi;\r\n","import { LocationViewModel } from \"../../model/LocationViewModel\";\nimport { RoomViewModel } from \"../../model/RoomViewModel\";\nimport { ApiResponse } from \"../CustomFetch\";\nimport { api } from \"./BaseApi\";\n\nconst getLocationUrl = (id?: string) => \"/Location\" + (id === undefined ? \"\" : `/${id}`);\n\nconst getRoomUrl = (locationId: string, roomId?: string) =>\n `${getLocationUrl(locationId)}/Room` + (roomId === undefined ? \"\" : `/${roomId}`);\n\nconst locationsApi = api.enhanceEndpoints({ addTagTypes: [\"Locations\"] }).injectEndpoints({\n endpoints: (builder) => ({\n getLocations: builder.query({\n query: () => getLocationUrl(),\n transformResponse: (response: ApiResponse) => response.data,\n providesTags: (result) =>\n result\n ? [...result.map(({ id }) => ({ type: \"Locations\" as const, id })), { type: \"Locations\", id: \"LIST\" }]\n : [{ type: \"Locations\", id: \"LIST\" }],\n }),\n getLocation: builder.query({\n query: getLocationUrl,\n transformResponse: (response: ApiResponse) => response.data,\n providesTags: (_result, _error, arg) => [{ type: \"Locations\", id: arg }],\n }),\n deleteLocation: builder.mutation, string>({\n query: (id) => ({\n url: getLocationUrl(id),\n method: \"DELETE\",\n }),\n invalidatesTags: (_result, _error, arg) => [\n { type: \"Locations\", id: \"LIST\" },\n { type: \"Locations\", id: arg },\n ],\n }),\n createLocation: builder.mutation, LocationViewModel>({\n query: (location: LocationViewModel) => ({\n url: getLocationUrl(),\n body: location,\n headers: { \"Content-Type\": \"application/json\" },\n method: \"POST\",\n }),\n invalidatesTags: [{ type: \"Locations\", id: \"LIST\" }],\n }),\n updateLocation: builder.mutation, LocationViewModel>({\n query: (location: LocationViewModel) => ({\n url: getLocationUrl(),\n body: location,\n headers: { \"Content-Type\": \"application/json\" },\n method: \"PUT\",\n }),\n invalidatesTags: (_result, _error, arg) => [\n { type: \"Locations\", id: \"LIST\" },\n { type: \"Locations\", id: arg.id },\n ],\n }),\n deleteRoom: builder.mutation, { locationId: string; roomId: string }>({\n query: ({ locationId, roomId }) => ({\n url: getRoomUrl(locationId, roomId),\n method: \"DELETE\",\n }),\n invalidatesTags: (_result, _error, arg) => [\n { type: \"Locations\", id: \"LIST\" },\n { type: \"Locations\", id: arg.locationId },\n ],\n }),\n createRoom: builder.mutation, { locationId: string; data: RoomViewModel }>({\n query: ({ locationId, data }) => ({\n url: getRoomUrl(locationId),\n body: data,\n headers: { \"Content-Type\": \"application/json\" },\n method: \"POST\",\n }),\n invalidatesTags: (_result, _error, arg) => [\n { type: \"Locations\", id: \"LIST\" },\n { type: \"Locations\", id: arg.locationId },\n ],\n }),\n updateRoom: builder.mutation, { locationId: string; data: RoomViewModel }>({\n query: ({ locationId, data }) => ({\n url: getRoomUrl(locationId),\n body: data,\n headers: { \"Content-Type\": \"application/json\" },\n method: \"PUT\",\n }),\n invalidatesTags: (_result, _error, arg) => [\n { type: \"Locations\", id: \"LIST\" },\n { type: \"Locations\", id: arg.locationId },\n ],\n }),\n }),\n});\n\nexport const {\n endpoints,\n useGetLocationsQuery,\n useGetLocationQuery,\n useDeleteLocationMutation,\n useCreateLocationMutation,\n useUpdateLocationMutation,\n useDeleteRoomMutation,\n useCreateRoomMutation,\n useUpdateRoomMutation,\n} = locationsApi;\n","import Button from \"@material-ui/core/Button\";\nimport ButtonGroup from \"@material-ui/core/ButtonGroup\";\nimport ClickAwayListener from \"@material-ui/core/ClickAwayListener\";\nimport Grow from \"@material-ui/core/Grow\";\nimport MenuItem from \"@material-ui/core/MenuItem\";\nimport MenuList from \"@material-ui/core/MenuList\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Popper from \"@material-ui/core/Popper\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport Typography from \"@material-ui/core/Typography\";\nimport ArrowDropDownIcon from \"@material-ui/icons/ArrowDropDown\";\nimport { createStyles, makeStyles } from \"@material-ui/styles\";\nimport React from \"react\";\n\nconst useStyles = makeStyles((theme) =>\n createStyles({\n root: {\n verticalAlign: \"middle\",\n marginLeft: \"7px\",\n height: 35,\n boxShadow: \"none\",\n },\n })\n);\n\ninterface ICustomSplitButtonProps {\n tooltip: NonNullable;\n onClick: (event: any) => void;\n onMenuItemClick: (event: React.MouseEvent, index: number) => void;\n disabled?: boolean;\n options: string[];\n}\n\nconst CustomSplitButton: React.FC = ({\n children,\n onClick,\n tooltip,\n disabled,\n options,\n onMenuItemClick,\n}) => {\n const [open, setOpen] = React.useState(false);\n const anchorRef = React.useRef(null);\n const [selectedIndex, setSelectedIndex] = React.useState(0);\n\n const handleMenuItemClick = (event: React.MouseEvent, index: number) => {\n setSelectedIndex(index);\n setOpen(false);\n onMenuItemClick(event, index);\n };\n\n const handleToggle = () => {\n setOpen((prevOpen) => !prevOpen);\n };\n\n const handleClose = (event: React.MouseEvent) => {\n if (anchorRef.current && anchorRef.current.contains(event.target as HTMLElement)) {\n return;\n }\n\n setOpen(false);\n };\n\n const cssClasses = useStyles({});\n\n return (\n \n \n \n \n \n \n \n \n \n \n {({ TransitionProps, placement }) => (\n \n \n \n \n {options.map((option, index) => (\n handleMenuItemClick(event, index)}\n >\n {option}\n \n ))}\n \n \n \n \n )}\n \n \n );\n};\nexport default CustomSplitButton;\n","import React from \"react\";\nimport CustomDraggableDialog from \"../common/customDialog/CustomDraggableDialog\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\n\ntype ConfirmPublishResultsDialogProps = {\n isOpen: boolean;\n onAccept: () => void;\n onCancel: () => void;\n};\n\nexport default function ConfirmPublishResultsDialog({ isOpen, onAccept, onCancel }: ConfirmPublishResultsDialogProps) {\n return (\n }\n cancelText={}\n content={}\n isOpen={isOpen}\n onAccept={onAccept}\n onCancel={onCancel}\n title={}\n />\n );\n}\n","import { Checkbox, ListItemSecondaryAction, ListItemText, Typography } from \"@material-ui/core\";\nimport Button from \"@material-ui/core/Button\";\nimport Dialog from \"@material-ui/core/Dialog\";\nimport DialogActions from \"@material-ui/core/DialogActions\";\nimport DialogContent from \"@material-ui/core/DialogContent\";\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\nimport List from \"@material-ui/core/List\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport React from \"react\";\nimport { ExamTemplateWithStructureIndex } from \"../../model/Exam\";\nimport { GetTranslatedValue } from \"../../model/Shared/TranslatedValue\";\nimport CustomSearchBox from \"../common/customSearchBox/CustomSearchBox\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\n\ntype PublishedExamSelectionDialogProps = {\n isOpened: boolean;\n handleAccept: (selection: ExamTemplateWithStructureIndex[]) => void;\n handleCancel: () => void;\n selectedExams?: ExamTemplateWithStructureIndex[];\n selectableExams: ExamTemplateWithStructureIndex[];\n};\n\nconst PublishedExamSelectionDialog = (props: PublishedExamSelectionDialogProps) => {\n const { isOpened, handleAccept, handleCancel, selectableExams } = props;\n const [selection, setSelection] = React.useState([]);\n const [searchToken, setSearchToken] = React.useState(\"\");\n const [filteredExams, setFilteredExams] = React.useState(selectableExams);\n\n React.useEffect(() => {\n setFilteredExams(selectableExams)\n }, [selectableExams])\n\n const onAccept = () => {\n const selectedExams = selectableExams.filter((exam) => selection.indexOf(exam.id) !== -1);\n handleAccept(selectedExams);\n setSelection([]);\n setSearchToken(\"\");\n };\n\n const onCancel = () => {\n handleCancel();\n setSelection([]);\n setSearchToken(\"\");\n };\n\n const onSearchTokenChanged = (token: string) => {\n const nonSelectedFilteredExams = selectableExams.filter((exam) => selection.indexOf(exam.id) === -1 \n && (GetTranslatedValue(exam.name).toLowerCase().indexOf(token.toLowerCase()) !== -1\n || GetTranslatedValue(exam.includedInCourses).toLowerCase().indexOf(token.toLowerCase()) !== -1\n || GetTranslatedValue(exam.includedInModules).toLowerCase().indexOf(token.toLowerCase()) !== -1)\n );\n\n setFilteredExams(nonSelectedFilteredExams);\n setSearchToken(token);\n };\n\n const toggleExamSelection = (exam: ExamTemplateWithStructureIndex) => {\n if (selection.indexOf(exam.id) === -1) {\n setSelection([...selection, exam.id]);\n } else {\n setSelection(selection.filter((id) => id !== exam.id));\n }\n };\n\n const getExamSecondaryText = (exam: ExamTemplateWithStructureIndex): React.ReactNode => {\n return
\n
    \n
  • : {GetTranslatedValue(exam.includedInCourses)}
  • \n
  • : {GetTranslatedValue(exam.includedInModules)}
  • \n
\n
;\n }\n\n const isListEmpty = filteredExams.length === 0;\n\n return (\n \n \n \n onSearchTokenChanged(event.target.value)} searchToken={searchToken} />\n\n {isListEmpty ? \n \n :\n \n {filteredExams.map((exam) => (\n toggleExamSelection(exam)} key={exam.id}>\n \n \n toggleExamSelection(exam)} checked={selection.indexOf(exam.id) !== -1} />\n \n \n ))}\n \n }\n \n \n \n \n \n \n );\n};\n\nconst listContainer: React.CSSProperties = {\n height: 400,\n overflow: \"auto\",\n marginTop: 10,\n paddingTop: 0\n};\n\nconst emptyMessage: React.CSSProperties = {\n height: 400,\n marginTop: 10,\n paddingTop: 200,\n textAlign: \"center\"\n};\n\nexport default PublishedExamSelectionDialog;\n","import { Checkbox, ListItemSecondaryAction, ListItemText, Typography } from \"@material-ui/core\";\nimport Button from \"@material-ui/core/Button\";\nimport Dialog from \"@material-ui/core/Dialog\";\nimport DialogActions from \"@material-ui/core/DialogActions\";\nimport DialogContent from \"@material-ui/core/DialogContent\";\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\nimport List from \"@material-ui/core/List\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport React from \"react\";\nimport { useIntl } from \"react-intl\";\nimport { GetTranslation } from \"../../translations/GetTranslation\";\nimport CustomSearchBox from \"../common/customSearchBox/CustomSearchBox\";\nimport { CourseType, CourseTypeTranslationKey } from \"../../model/Course\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\n\ntype EditExamSessionExamCourseTypesDialogProps = {\n isOpened: boolean;\n handleAccept: (selection: CourseType[]) => void;\n handleCancel: () => void;\n selectedCourseTypes?: CourseType[];\n availableCourseTypes?: CourseType[];\n};\n\nconst EditExamSessionExamCourseTypesDialog = (props: EditExamSessionExamCourseTypesDialogProps) => {\n const { isOpened, handleAccept, handleCancel, selectedCourseTypes, availableCourseTypes } = props;\n const [selection, setSelection] = React.useState(selectedCourseTypes ?? []);\n const [searchToken, setSearchToken] = React.useState(\"\");\n const selectableCourseTypes = React.useRef(availableCourseTypes ?? []);\n const [filteredCourseTypes, setFilteredCourseTypes] = React.useState(selectableCourseTypes.current);\n const intl = useIntl();\n\n const onAccept = () => {\n const selectedCourseTypes = selectableCourseTypes.current.filter(\n (courseType) => selection.indexOf(courseType) !== -1\n );\n handleAccept(selectedCourseTypes);\n setSelection([]);\n setSearchToken(\"\");\n };\n\n const onCancel = () => {\n handleCancel();\n setSelection([]);\n setSearchToken(\"\");\n };\n\n const onSearchTokenChanged = (token: string) => {\n const filteredCourseTypes = selectableCourseTypes.current.filter(\n (courseType) =>\n GetTranslation(intl, CourseTypeTranslationKey[courseType]).toLowerCase().indexOf(token.toLowerCase()) !== -1\n );\n setFilteredCourseTypes(filteredCourseTypes);\n setSearchToken(token);\n };\n\n const toggleCourseTypeSelection = (courseType: CourseType) => {\n if (selection.indexOf(courseType) === -1) {\n setSelection([...selection, courseType]);\n } else {\n setSelection(selection.filter((selectedCourseType) => selectedCourseType !== courseType));\n }\n };\n\n const isListEmpty = filteredCourseTypes.length === 0;\n\n return (\n \n \n \n \n \n onSearchTokenChanged(event.target.value)}\n searchToken={searchToken}\n />\n\n {isListEmpty ? (\n \n \n \n ) : (\n \n {filteredCourseTypes.map((courseType) => (\n toggleCourseTypeSelection(courseType)} key={courseType}>\n \n \n toggleCourseTypeSelection(courseType)}\n checked={selection.indexOf(courseType) !== -1}\n />\n \n \n ))}\n \n )}\n \n \n \n \n \n \n );\n};\n\nconst listContainer: React.CSSProperties = {\n height: 400,\n overflow: \"auto\",\n marginTop: 10,\n paddingTop: 0,\n};\n\nconst emptyMessage: React.CSSProperties = {\n height: 400,\n marginTop: 10,\n paddingTop: 200,\n textAlign: \"center\",\n};\n\nexport default EditExamSessionExamCourseTypesDialog;\n","import { createStyles, makeStyles, Typography, IconButton, Grid } from \"@material-ui/core\";\r\nimport React, { useState } from \"react\";\r\nimport { ExamTemplateWithStructureIndex, ExamType, ExamTypeTranslationKey } from \"../../model/Exam\";\r\nimport { ColumnDefinition, CustomGrid } from \"../common/customGrid/CustomGrid\";\r\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\r\nimport { getExamsIncludedInPublishedCourses } from \"../../api/ExamApi\";\r\nimport HighlightOffIcon from \"@material-ui/icons/HighlightOff\";\r\nimport PublishedExamSelectionDialog from \"./PublishedExamSelectionDialog\";\r\nimport { GetTranslation } from \"../../translations/GetTranslation\";\r\nimport { useIntl } from \"react-intl\";\r\nimport { GetTranslatedValue } from \"../../model/Shared/TranslatedValue\";\r\nimport { CourseType, CourseTypeTranslationKey } from \"../../model/Course\";\r\nimport EditIcon from \"@material-ui/icons/Edit\";\r\nimport EditExamSessionExamCourseTypesDialog from \"./EditExamSessionExamCourseTypesDialog\";\r\n\r\nconst useStyles = makeStyles(() =>\r\n createStyles({\r\n header: {\r\n marginBottom: \"-3rem\",\r\n },\r\n })\r\n);\r\n\r\ntype ExamSessionFormExamsProps = {\r\n exams: ExamTemplateWithStructureIndex[];\r\n handleAddExams: (exams: ExamTemplateWithStructureIndex[]) => void;\r\n handleRemoveExam: (exam: ExamTemplateWithStructureIndex) => void;\r\n handleEditExam: (exam: ExamTemplateWithStructureIndex, courseTypes: CourseType[]) => void;\r\n isReadOnly: boolean;\r\n};\r\n\r\nconst ExamSessionFormExams = (props: ExamSessionFormExamsProps) => {\r\n const { exams, handleAddExams: addExamItems, handleEditExam, handleRemoveExam, isReadOnly } = props;\r\n const [allExams, setAllExams] = React.useState([]);\r\n const [selectedExam, setSelectedExam] = useState(null);\r\n const intl = useIntl();\r\n\r\n React.useEffect(() => {\r\n getExamsIncludedInPublishedCourses().then((exams) => {\r\n setAllExams(exams);\r\n });\r\n }, []);\r\n\r\n const [selectionDialogOpened, setSelectionDialogOpened] = React.useState(false);\r\n const classes = useStyles();\r\n\r\n const columnsDefinitions: ColumnDefinition[] = [\r\n {\r\n columnKey: \"courseTypes\",\r\n columnLabel: ,\r\n cellValue: (_) =>\r\n _.courseTypes.map((courseType) => GetTranslation(intl, CourseTypeTranslationKey[courseType])).join(\", \"),\r\n },\r\n {\r\n columnKey: \"examName\",\r\n columnLabel: ,\r\n cellValue: (_) => GetTranslatedValue(_.name),\r\n },\r\n {\r\n columnKey: \"courses\",\r\n columnLabel: ,\r\n cellValue: (_) => GetTranslatedValue(_.includedInCourses),\r\n },\r\n {\r\n columnKey: \"modules\",\r\n columnLabel: ,\r\n cellValue: (_) => GetTranslatedValue(_.includedInModules),\r\n },\r\n {\r\n columnKey: \"examType\",\r\n columnLabel: ,\r\n cellValue: (_) => GetTranslation(intl, ExamTypeTranslationKey[_.type]),\r\n },\r\n ];\r\n\r\n const onNewExamSelection = (exams: ExamTemplateWithStructureIndex[]) => {\r\n var newExams = exams.map((exam) => (exam = { ...exam, courseTypes: exam.availableCourseTypes }));\r\n setSelectionDialogOpened(false);\r\n addExamItems(newExams);\r\n };\r\n\r\n const getSelectableExams = () => allExams.filter((x) => exams.every((y) => y.id !== x.id));\r\n\r\n if (!isReadOnly) {\r\n columnsDefinitions.push({\r\n columnKey: \"removeExam\",\r\n columnLabel: \"\",\r\n cellValue: (row) => (\r\n
\r\n {row.type === ExamType.Oral || row.type === ExamType.Written ? (\r\n {\r\n event.stopPropagation();\r\n setSelectedExam(row);\r\n }}\r\n >\r\n \r\n \r\n ) : null}\r\n {\r\n event.stopPropagation();\r\n handleRemoveExam(row);\r\n }}\r\n >\r\n \r\n \r\n
\r\n ),\r\n isSortingDisabled: true,\r\n });\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n columnDefinitions={columnsDefinitions}\r\n rows={exams}\r\n rowKey={(_) => _.id}\r\n addButtonTooltip={}\r\n onAddClick={() => setSelectionDialogOpened(true)}\r\n hideSearchBar={true}\r\n hideAddButton={isReadOnly}\r\n />\r\n \r\n\r\n \r\n setSelectionDialogOpened(false)}\r\n isOpened={selectionDialogOpened}\r\n selectableExams={getSelectableExams()}\r\n />\r\n \r\n\r\n {selectedExam && !isReadOnly && (\r\n setSelectedExam(null)}\r\n handleAccept={(selectedCourseTypes) => {\r\n handleEditExam(selectedExam, selectedCourseTypes);\r\n setSelectedExam(null);\r\n }}\r\n selectedCourseTypes={selectedExam && selectedExam.courseTypes}\r\n availableCourseTypes={selectedExam.availableCourseTypes}\r\n />\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default ExamSessionFormExams;\r\n","import { Typography } from \"@material-ui/core\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport React from \"react\";\r\nimport { injectIntl, WithIntlProps } from \"react-intl\";\r\nimport { ExamSessionViewModel } from \"../../model/ExamSessionViewModel\";\r\nimport { GetTranslation } from \"../../translations/GetTranslation\";\r\nimport GridTextField from \"../common/customGrid/GridTextField\";\r\nimport DatePicker from \"../common/datePicker/DatePicker\";\r\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\r\n\r\ntype ExamSessionFieldsProps = {\r\n examSession: ExamSessionViewModel;\r\n onChangeEmailIsValid?: (isEmailValid: boolean) => void;\r\n onPropertyValueChanges?: (part: Partial) => void;\r\n} & WithIntlProps;\r\n\r\nconst ExamSessionFields: React.FunctionComponent = ({\r\n examSession,\r\n intl,\r\n onPropertyValueChanges,\r\n}) => {\r\n const handleTextChange =\r\n (key: keyof ExamSessionViewModel) => (event: React.ChangeEvent) =>\r\n handleChange(key, event.target.value);\r\n const handleDateChange = (key: keyof ExamSessionViewModel) => (date: Date | null) => {\r\n if (date) {\r\n handleChange(key, date);\r\n }\r\n };\r\n const handleChange = (key: keyof ExamSessionViewModel, value: string | string[] | Date | boolean) => {\r\n let part: Partial = {\r\n [key]: value,\r\n };\r\n\r\n if (onPropertyValueChanges) {\r\n onPropertyValueChanges(part);\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n }\r\n value={examSession.from}\r\n onChange={handleDateChange(\"from\")}\r\n required={true}\r\n />\r\n \r\n \r\n }\r\n value={examSession.to}\r\n onChange={handleDateChange(\"to\")}\r\n required={true}\r\n />\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n }\r\n value={examSession.signupStartDate}\r\n onChange={handleDateChange(\"signupStartDate\")}\r\n required={true}\r\n />\r\n \r\n \r\n }\r\n value={examSession.signupEndDate}\r\n onChange={handleDateChange(\"signupEndDate\")}\r\n required={true}\r\n />\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n }\r\n value={examSession.examsStartDate}\r\n onChange={handleDateChange(\"examsStartDate\")}\r\n />\r\n \r\n\r\n \r\n }\r\n value={examSession.examsEndDate}\r\n onChange={handleDateChange(\"examsEndDate\")}\r\n />\r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n }\r\n value={examSession.correctionStartDate}\r\n onChange={handleDateChange(\"correctionStartDate\")}\r\n />\r\n \r\n\r\n \r\n }\r\n value={examSession.correctionEndDate}\r\n onChange={handleDateChange(\"correctionEndDate\")}\r\n />\r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n }\r\n value={examSession.inspectionStartDate}\r\n onChange={handleDateChange(\"inspectionStartDate\")}\r\n />\r\n \r\n\r\n \r\n }\r\n value={examSession.inspectionEndDate}\r\n onChange={handleDateChange(\"inspectionEndDate\")}\r\n />\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nExamSessionFields.defaultProps = {\r\n onChangeEmailIsValid: () => {},\r\n onPropertyValueChanges: () => {},\r\n} as Partial;\r\n\r\nexport default injectIntl(ExamSessionFields);\r\n","import { SwissGermanLocale, SwissTimeZone } from '../../../data/constants';\nimport { Typography } from '@material-ui/core';\nimport React from 'react';\nimport { GetTranslation } from '../../../translations/GetTranslation';\nimport { useIntl } from 'react-intl';\n\ntype VariantType = \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"subtitle1\" | \"subtitle2\" | \"body1\" | \"body2\" | \"caption\" | \"button\" | \"overline\" | \"srOnly\" | \"inherit\" | undefined;\n\ntype LocaleFormatDateProps = {\n date: Date;\n variant?: VariantType;\n className?: string;\n};\n\nconst LocaleFormatDate: React.FunctionComponent = ({ date, className, variant }) => {\n const intl = useIntl();\n const d = new Date(date);\n\n return (\n {d.getFullYear() === 1 ? GetTranslation(intl, \"common.Unknown\") : d.toLocaleDateString(SwissGermanLocale, { timeZone: SwissTimeZone })}\n );\n};\n\nLocaleFormatDate.defaultProps = {\n variant: 'h6',\n} as Partial;\n\nexport default LocaleFormatDate;","import React from 'react';\nimport { Typography } from '@material-ui/core';\nimport LocaleFormatDate from './LocaleFormatDate';\n\ntype VariantType = \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"subtitle1\" | \"subtitle2\" | \"body1\" | \"body2\" | \"caption\" | \"button\" | \"overline\" | \"srOnly\" | \"inherit\" | undefined;\n\ntype LocaleFormatDateRangeProps = {\n dateFrom: Date;\n dateTo: Date;\n separator: string;\n variant?: VariantType\n};\n\nconst LocaleFormatDateRange: React.FunctionComponent = ({ dateFrom, dateTo, separator, variant }) => {\n return (\n \n {` ${separator} `}\n \n )\n};\n\nLocaleFormatDateRange.defaultProps = {\n variant: 'body1',\n} as Partial;\n\nexport default LocaleFormatDateRange;\n","import FormLabel from \"@material-ui/core/FormLabel\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Typography from \"@material-ui/core/Typography\";\nimport React from \"react\";\nimport { ExamSessionViewModel, GetLocalizedName } from \"../../model/ExamSessionViewModel\";\nimport CustomDraggableDialog from \"../common/customDialog/CustomDraggableDialog\";\nimport DatePicker from \"../common/datePicker/DatePicker\";\nimport LocaleFormatDate from \"../common/dates/LocaleFormatDate\";\nimport LocaleFormatDateRange from \"../common/dates/LocaleFormatDateRange\";\nimport FormGridCell from \"../common/FormGridCell\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\n\ntype ExamSessionFieldsReadonlyProps = {\n examSession: ExamSessionViewModel;\n isSurveyDialogOpen: boolean;\n isSurveyDeadlineEmpty: boolean;\n onAcceptSurvey: () => void;\n onCancelSurvey: () => void;\n onPropertyValueChanges?: (part: Partial) => void;\n};\n\nconst ExamSessionFieldsReadonly: React.FunctionComponent = ({\n examSession,\n isSurveyDialogOpen,\n isSurveyDeadlineEmpty: isSurveyDealineEmpty,\n onAcceptSurvey,\n onCancelSurvey,\n onPropertyValueChanges,\n}) => {\n const handleChange = (key: keyof ExamSessionViewModel, value: string | string[] | Date | boolean | undefined) => {\n let part: Partial = {\n [key]: value,\n };\n\n if (onPropertyValueChanges) {\n onPropertyValueChanges(part);\n }\n };\n const handleDateChange = (key: keyof ExamSessionViewModel) => (date: Date | null) => {\n if (date) {\n handleChange(key, date);\n }\n };\n\n const handleCancel = () => {\n onCancelSurvey();\n handleChange(\"surveyDeadline\", undefined);\n };\n\n return (\n \n \n \n \n \n \n \n \n \n {GetLocalizedName(examSession)}\n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n\n }\n cancelText={}\n content={\n }\n value={examSession.surveyDeadline}\n onChange={handleDateChange(\"surveyDeadline\")}\n required={true}\n error={isSurveyDealineEmpty}\n />\n }\n isOpen={isSurveyDialogOpen}\n onAccept={() => onAcceptSurvey()}\n onCancel={handleCancel}\n title={}\n />\n \n );\n};\n\nExamSessionFieldsReadonly.defaultProps = {\n onPropertyValueChanges: () => {},\n onAcceptSurvey: () => {},\n onCancelSurvey: () => {},\n} as Partial;\n\nexport default ExamSessionFieldsReadonly;\n","import React from \"react\";\nimport { LocationViewModel } from \"../../model/LocationViewModel\";\nimport CustomCard from \"../common/CustomCard\";\n\ninterface LocationCardProps {\n location: LocationViewModel;\n onClick?: (locationId: string) => void;\n onDeleteClick?: (locationId: string) => void;\n isDeleteButtonVisible?: boolean;\n}\n\nconst LocationCard: React.FunctionComponent = ({ location, isDeleteButtonVisible, onClick, onDeleteClick }) => {\n const handleClick = () => onClick!(location.id);\n\n const handleDelete = () => {\n onDeleteClick!(location.id);\n };\n return (\n \n );\n};\n\nLocationCard.defaultProps = {\n onClick: () => {},\n onDeleteClick: () => {},\n isDeleteButtonVisible: true,\n} as Partial;\n\nexport default LocationCard;\n","import { Checkbox, ListItemSecondaryAction, ListItemText, Typography } from \"@material-ui/core\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport Dialog from \"@material-ui/core/Dialog\";\r\nimport DialogActions from \"@material-ui/core/DialogActions\";\r\nimport DialogContent from \"@material-ui/core/DialogContent\";\r\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\r\nimport List from \"@material-ui/core/List\";\r\nimport ListItem from \"@material-ui/core/ListItem\";\r\nimport React, { CSSProperties, FC, useEffect, useState } from \"react\";\r\nimport { LocationViewModel } from \"../../model/LocationViewModel\";\r\nimport CustomSearchBox from \"../common/customSearchBox/CustomSearchBox\";\r\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\r\n\r\ninterface ILocationSelectionDialogProps {\r\n isOpened: boolean;\r\n handleAccept: (selectedLocations: LocationViewModel[]) => void;\r\n handleCancel: () => void;\r\n locations: LocationViewModel[];\r\n}\r\n\r\nconst LocationSelectionDialog: FC = ({\r\n isOpened,\r\n handleAccept,\r\n handleCancel,\r\n locations,\r\n}) => {\r\n const [selection, setSelection] = useState([]);\r\n const [searchToken, setSearchToken] = useState(\"\");\r\n const [filteredLocations, setFilteredLocations] = useState(locations);\r\n\r\n useEffect(() => {\r\n setFilteredLocations(locations);\r\n }, [locations]);\r\n\r\n const onAccept = () => {\r\n if (selection.length === 0) {\r\n onCancel();\r\n return;\r\n }\r\n\r\n const selectedLocations = locations.filter((location) => selection.indexOf(location.id) !== -1);\r\n handleAccept(selectedLocations);\r\n setSelection([]);\r\n setSearchToken(\"\");\r\n };\r\n\r\n const onCancel = () => {\r\n handleCancel();\r\n setSelection([]);\r\n setSearchToken(\"\");\r\n };\r\n\r\n const onSearchTokenChanged = (token: string) => {\r\n const nonSelectedFilteredLocations = locations.filter((location) => {\r\n const searchText = token.toLowerCase();\r\n return (\r\n selection.indexOf(location.id) === -1 &&\r\n (location.name.toLowerCase().indexOf(searchText) !== -1 ||\r\n location.city.toLowerCase().indexOf(searchText) !== -1)\r\n );\r\n });\r\n\r\n setFilteredLocations(nonSelectedFilteredLocations);\r\n setSearchToken(token);\r\n };\r\n\r\n const toggleSelection = (location: LocationViewModel) => {\r\n if (selection.indexOf(location.id) === -1) {\r\n setSelection([...selection, location.id]);\r\n } else {\r\n setSelection(selection.filter((id) => id !== location.id));\r\n }\r\n };\r\n\r\n const isListEmpty = filteredLocations.length === 0;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n onSearchTokenChanged(event.target.value)}\r\n searchToken={searchToken}\r\n />\r\n {isListEmpty ? (\r\n \r\n \r\n \r\n ) : (\r\n \r\n {filteredLocations.map((location) => (\r\n toggleSelection(location)} key={location.id}>\r\n \r\n \r\n toggleSelection(location)}\r\n checked={selection.indexOf(location.id) !== -1}\r\n />\r\n \r\n \r\n ))}\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst listContainer: CSSProperties = {\r\n height: 400,\r\n overflow: \"auto\",\r\n marginTop: 10,\r\n paddingTop: 0,\r\n};\r\n\r\nconst emptyMessage: CSSProperties = {\r\n height: 400,\r\n marginTop: 10,\r\n paddingTop: 200,\r\n textAlign: \"center\",\r\n};\r\n\r\nexport default LocationSelectionDialog;\r\n","import { Grid } from \"@material-ui/core\";\r\nimport { Add, Room } from \"@material-ui/icons\";\r\nimport _ from \"lodash\";\r\nimport React, { FC, useState } from \"react\";\r\nimport { WrappedComponentProps, injectIntl } from \"react-intl\";\r\nimport { LocationViewModel } from \"../../model/LocationViewModel\";\r\nimport TitleWithIcon from \"../common/TitleWithIcon\";\r\nimport CustomButton from \"../common/buttons/CustomButton\";\r\nimport RightButtonArea from \"../common/buttons/RightButtonArea\";\r\nimport LocationCard from \"../location/LocationCard\";\r\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\r\nimport LocationSelectionDialog from \"./LocationSelectionDialog\";\r\n\r\ntype ExamSessionLocationListProps = {\r\n examSessionLocations: LocationViewModel[];\r\n allLocations: LocationViewModel[];\r\n isReadOnly: boolean;\r\n onAssigningLocations: (locationIds: string[]) => void;\r\n onRemovingLocation: (locationId: string) => void;\r\n onLocationCardSelected: (locationId: string) => void;\r\n className?: string;\r\n} & WrappedComponentProps;\r\n\r\nconst isLocationAssigned = (assignedLocations: LocationViewModel[], locationId: string) => {\r\n if (assignedLocations.find((location) => location.id === locationId)) {\r\n return true;\r\n }\r\n\r\n return false;\r\n};\r\n\r\nconst ExamSessionLocationList: FC = ({\r\n intl,\r\n isReadOnly,\r\n className,\r\n examSessionLocations,\r\n allLocations,\r\n ...eventHandlers\r\n}) => {\r\n const selectableLocations = allLocations.filter((location) => !isLocationAssigned(examSessionLocations, location.id));\r\n const sortedLocations = _.orderBy(examSessionLocations, (location) => location.name.toLowerCase());\r\n const locationCards = sortedLocations.map((location) => (\r\n \r\n eventHandlers.onRemovingLocation(location.id)}\r\n />\r\n \r\n ));\r\n\r\n const handelNewLocationSelection = (selectedLocations: LocationViewModel[]) => {\r\n var selectedLocationIds = selectedLocations.map((location) => location.id);\r\n setSelectionDialogOpened(false);\r\n eventHandlers.onAssigningLocations(selectedLocationIds);\r\n };\r\n\r\n const [selectionDialogOpened, setSelectionDialogOpened] = useState(false);\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n } variant=\"h5\">\r\n \r\n \r\n \r\n\r\n {!isReadOnly && (\r\n \r\n \r\n }\r\n onClick={() => setSelectionDialogOpened(true)}\r\n >\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n\r\n \r\n {locationCards}\r\n \r\n \r\n setSelectionDialogOpened(false)}\r\n isOpened={selectionDialogOpened}\r\n locations={selectableLocations}\r\n />\r\n \r\n );\r\n};\r\n\r\nExamSessionLocationList.defaultProps = {\r\n onAssigningLocations: (_locationIds: string[]) => {},\r\n onRemovingLocation: (_locationId: string) => {},\r\n onLocationCardSelected: (_locationId: string) => {},\r\n} as Partial;\r\n\r\nexport default injectIntl(ExamSessionLocationList);\r\n","import { createStyles, makeStyles } from \"@material-ui/core\";\nimport React from \"react\";\nimport { FileWithPreview } from \"react-dropzone\";\nimport { ApiResponse } from \"../../api/CustomFetch\";\nimport { getWrittenExamScoreImportUrl } from \"../../api/rtk/ExamSessionApi\";\nimport { ExamScoreResultModel } from \"../../model/ExamScoreResultModel\";\nimport CustomDraggableDialog from \"../common/customDialog/CustomDraggableDialog\";\nimport UploadDropZone from \"../common/UploadDropZone\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\n\ninterface ImportWrittenExamScoresDialogProps {\n examSessionId: string;\n isOpen: boolean;\n onUploadError: () => void;\n onFileUploaded: (file: FileWithPreview, response: ApiResponse) => void;\n onClose: () => void;\n}\n\nconst useStyles = makeStyles(() =>\n createStyles({\n dropZoneDiv: { width: \"65%\", marginLeft: \"auto\", marginRight: \"auto\" },\n })\n);\n\nconst ImportScoresAndGradesExamDialog: React.FunctionComponent = ({\n examSessionId,\n isOpen,\n onFileUploaded,\n onUploadError,\n onClose,\n}) => {\n const classes = useStyles({});\n\n return (\n }\n cancelText={}\n content={\n \n
\n \n
\n
\n }\n isOpen={isOpen}\n title={}\n />\n );\n};\n\nexport default ImportScoresAndGradesExamDialog;\n","import { GetTranslation } from '../../translations/GetTranslation';\nimport CustomDraggableDialog from '../common/customDialog/CustomDraggableDialog';\nimport CustomSelect, { OptionType } from '../common/customSelect/CustomSelect';\nimport TranslatedMessage from '../translations/TranslatedMessage';\nimport FormControl from '@material-ui/core/FormControl';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport Radio from '@material-ui/core/Radio';\nimport RadioGroup from '@material-ui/core/RadioGroup';\nimport Switch from '@material-ui/core/Switch';\nimport React from 'react';\nimport { injectIntl, WrappedComponentProps } from 'react-intl';\nimport { ActionMeta, ValueType } from 'react-select';\n\ntype IInvitationDialogProps = {\n onAccept: () => void,\n onCancel: () => void,\n onRadioButtonChange: (event: React.ChangeEvent) => void,\n onSwitchChange: (event: React.ChangeEvent) => void,\n onLocationChange: (selectedElements: ValueType, actionMeta?: ActionMeta) => void,\n isAllSelected: boolean,\n isInvitationDialogOpen: boolean,\n selectionValue: string,\n locations: OptionType[],\n selectedLocations: OptionType[],\n} & WrappedComponentProps;\n\nconst InvitationDialog: React.FunctionComponent = (\n { onAccept, onCancel, onRadioButtonChange, onSwitchChange, onLocationChange, isAllSelected, isInvitationDialogOpen, selectionValue, locations, selectedLocations, intl }) => {\n return (\n }\n cancelText={}\n content={\n \n \n \n } label={GetTranslation(intl, \"expert.header\")} />\n } label={GetTranslation(intl, \"candidate.header\")} />\n \n \n \n }\n label={}\n />\n {!isAllSelected &&\n }\n name={GetTranslation(intl, \"examSession.invitation.selectLocations\")}\n placeholder={}\n isMulti={true}\n options={locations}\n value={selectedLocations}\n onChange={onLocationChange} />}\n \n }\n isOpen={isInvitationDialogOpen}\n onAccept={onAccept}\n onCancel={onCancel}\n title={} />\n );\n}\n\nexport default injectIntl(InvitationDialog);\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"XMLID_241_\"\n}, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M369.635,0H90.365C73.595,0,60,13.595,60,30.365v399.27C60,446.405,73.595,460,90.365,460h279.27 c16.77,0,30.365-13.595,30.365-30.365V30.365C400,13.595,386.405,0,369.635,0z M108.204,343.61v-43.196 c0-3.451,2.797-6.248,6.248-6.248h43.196c3.451,0,6.248,2.797,6.248,6.248v43.196c0,3.451-2.797,6.248-6.248,6.248h-43.196 C111.001,349.858,108.204,347.06,108.204,343.61z M108.204,256.61v-43.196c0-3.451,2.797-6.248,6.248-6.248h43.196 c3.451,0,6.248,2.797,6.248,6.248v43.196c0,3.451-2.797,6.248-6.248,6.248h-43.196C111.001,262.858,108.204,260.06,108.204,256.61 z M308.891,421H151.109c-11.046,0-20-8.954-20-20c0-11.046,8.954-20,20-20h157.782c11.046,0,20,8.954,20,20 C328.891,412.046,319.937,421,308.891,421z M208.402,294.165h43.196c3.451,0,6.248,2.797,6.248,6.248v43.196 c0,3.451-2.797,6.248-6.248,6.248h-43.196c-3.451,0-6.248-2.797-6.248-6.248v-43.196 C202.154,296.963,204.951,294.165,208.402,294.165z M202.154,256.61v-43.196c0-3.451,2.797-6.248,6.248-6.248h43.196 c3.451,0,6.248,2.797,6.248,6.248v43.196c0,3.451-2.797,6.248-6.248,6.248h-43.196C204.951,262.858,202.154,260.06,202.154,256.61 z M345.548,349.858h-43.196c-3.451,0-6.248-2.797-6.248-6.248v-43.196c0-3.451,2.797-6.248,6.248-6.248h43.196 c3.451,0,6.248,2.797,6.248,6.248v43.196h0C351.796,347.061,348.999,349.858,345.548,349.858z M345.548,262.858h-43.196 c-3.451,0-6.248-2.797-6.248-6.248v-43.196c0-3.451,2.797-6.248,6.248-6.248h43.196c3.451,0,6.248,2.797,6.248,6.248v43.196h0 C351.796,260.061,348.999,262.858,345.548,262.858z M354,149.637c0,11.799-9.565,21.363-21.363,21.363H127.364 C115.565,171,106,161.435,106,149.637V62.363C106,50.565,115.565,41,127.364,41h205.273C344.435,41,354,50.565,354,62.363V149.637 z\"\n})));\n\nvar SvgCalculatorSvgrepoCom = function SvgCalculatorSvgrepoCom(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 460 460\",\n style: {\n enableBackground: \"new 0 0 460 460\"\n },\n xmlSpace: \"preserve\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgCalculatorSvgrepoCom, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/calculator-svgrepo-com.07412fab.svg\";\nexport { ForwardRef as ReactComponent };","import { TranslationKey } from \"../../translations/TranslationKey\";\r\n\r\nexport enum CandidateModuleState {\r\n None = \"None\",\r\n ApplicationAccepted = \"ApplicationAccepted\",\r\n VerificationRequired = \"VerificationRequired\",\r\n Passed = \"Passed\",\r\n Failed = \"Failed\",\r\n Cancelled = \"Cancelled\",\r\n Expired = \"Expired\",\r\n Equivalence = \"Equivalence\",\r\n}\r\n\r\nexport const CandidateModuleStateTranslationKey: { [state in CandidateModuleState]: TranslationKey | undefined } = {\r\n [CandidateModuleState.None]: undefined,\r\n [CandidateModuleState.ApplicationAccepted]: \"examSessionCandidateModuleState.applicationAccepted\",\r\n [CandidateModuleState.VerificationRequired]: \"examSessionCandidateModuleState.verificationRequired\",\r\n [CandidateModuleState.Passed]: \"examSessionCandidateModuleState.passed\",\r\n [CandidateModuleState.Failed]: \"examSessionCandidateModuleState.failed\",\r\n [CandidateModuleState.Cancelled]: \"examSessionCandidateModuleState.cancelled\",\r\n [CandidateModuleState.Expired]: \"examSessionCandidateModuleState.expired\",\r\n [CandidateModuleState.Equivalence]: \"examSessionCandidateModuleState.equivalence\",\r\n};\r\n","import { Language } from \"../../data/constants\";\nimport { DocumentReferenceViewModel } from \"../../model/DocumentReferenceViewModel\";\nimport { ExamSessionForSignupViewModel } from \"../../model/ExamSignup/ExamSessionForSignupViewModel\";\nimport ModuleAttachmentsViewModel from \"../../model/ExamSignup/ModuleAttachmentsViewModel\";\nimport { ModuleExamDetailsViewModel } from \"../../model/ExamSignup/ModuleExamDetailsViewModel\";\nimport { ModuleSelectionViewModel } from \"../../model/ExamSignup/ModuleSelectionViewModel\";\nimport { SignupModuleRequestModel } from \"../../model/ExamSignup/SignupModuleRequestModel\";\nimport { ApiResponse } from \"../CustomFetch\";\nimport { api, transformApiResponse } from \"./BaseApi\";\n\nconst signUpApi = api\n .enhanceEndpoints({\n addTagTypes: [\n \"ModuleAttachments\",\n \"AvailableExamsSessions\",\n \"ExamSessionCandidates\",\n \"AvailableDays\",\n \"MyCandidateExams\",\n \"MyCourses\",\n ],\n })\n .injectEndpoints({\n endpoints: (builder) => ({\n getExamSessionsAvailableForSignUp: builder.query({\n query: (language: Language) => `signup/examSession?language=${language}`,\n transformResponse: transformApiResponse,\n providesTags: [\"AvailableExamsSessions\"],\n }),\n\n getExamSessionAvailableForSignUp: builder.query<\n ExamSessionForSignupViewModel,\n { examSessionId: string; candidateId: string; language: Language; }\n >({\n query: ({ examSessionId, candidateId, language }) => `signup/examSession/${examSessionId}?&candidateId=${candidateId}&language=${language}`,\n transformResponse: transformApiResponse,\n providesTags: [\"AvailableExamsSessions\"],\n }),\n\n getModuleExamDetails: builder.query({\n query: (moduleSelection: ModuleSelectionViewModel[]) => ({\n url: \"signup/moduleExamDetails\",\n body: moduleSelection,\n method: \"POST\",\n }),\n transformResponse: transformApiResponse,\n }),\n\n getAllModulesAttachments: builder.query({\n query: () => ({\n url: \"signup/module-attachments\",\n method: \"GET\",\n }),\n transformResponse: transformApiResponse,\n providesTags: (result) =>\n result\n ? [\n ...result.map(({ moduleId }) => ({ type: \"ModuleAttachments\" as const, id: moduleId })),\n { type: \"ModuleAttachments\", id: \"LIST\" },\n ]\n : [{ type: \"ModuleAttachments\", id: \"LIST\" }],\n }),\n\n getModuleAttachments: builder.query({\n query: (moduleId) => getModuleAttachmentUrl(moduleId),\n transformResponse: transformApiResponse,\n providesTags: (_result, _error, id) => [{ type: \"ModuleAttachments\", id }],\n }),\n\n addModuleAttachment: builder.mutation, { moduleId: string; file: File }>({\n query: ({ moduleId, file }) => {\n const formData = new FormData();\n formData.append(\"file\", file);\n return {\n url: getModuleAttachmentUrl(moduleId),\n body: formData,\n method: \"POST\",\n };\n },\n invalidatesTags: (_result, _error, { moduleId }) => [\n { type: \"ModuleAttachments\", id: moduleId },\n { type: \"ModuleAttachments\", id: \"LIST\" },\n ],\n }),\n\n deleteModuleAttachment: builder.mutation, { moduleId: string; fileName: string }>({\n query: ({ moduleId, fileName }) => ({\n url: getModuleAttachmentUrl(moduleId) + `/${fileName}`,\n method: \"DELETE\",\n }),\n invalidatesTags: (_result, _error, { moduleId }) => [\n { type: \"ModuleAttachments\", id: moduleId },\n { type: \"ModuleAttachments\", id: \"LIST\" },\n ],\n }),\n\n signup: builder.mutation, { candidateId: string; data: SignupModuleRequestModel }>({\n query: ({ candidateId, data }) => {\n const url = \"signup/new\" + (candidateId === \"\" ? \"\" : `?candidateId=${candidateId}`);\n return {\n url: url,\n body: data,\n method: \"POST\",\n };\n },\n invalidatesTags: [\n \"AvailableExamsSessions\",\n \"ExamSessionCandidates\",\n \"AvailableDays\",\n \"MyCandidateExams\",\n \"MyCourses\",\n ],\n }),\n }),\n });\n\nexport const {\n useGetExamSessionsAvailableForSignUpQuery,\n useGetExamSessionAvailableForSignUpQuery,\n useGetModuleExamDetailsQuery,\n useGetAllModulesAttachmentsQuery,\n useGetModuleAttachmentsQuery,\n useAddModuleAttachmentMutation,\n useDeleteModuleAttachmentMutation,\n useSignupMutation,\n} = signUpApi;\n\nexport const getModuleAttachmentUrl = (moduleId: string) => `signup/module-attachments/${moduleId}`;\n","export enum PaymentMethodType {\n CreditCardAndOthers = \"creditCard\",\n CembraPay = \"cembraPay\",\n}\n\nexport enum PaymentState {\n EPayment = \"ePayment\",\n Abacus = \"abacus\"\n}\n","import React from \"react\";\nimport { PaymentState } from \"../../payment/PaymentConstants\";\nimport TranslatedMessage from \"../../translations/TranslatedMessage\";\n\ninterface PaymentStatusProps {\n refunded?: boolean;\n state: PaymentState;\n}\n\nconst PaymentStatus: React.FunctionComponent = ({ state, refunded }) => {\n const messageId =\n state === PaymentState.EPayment && !refunded\n ? \"paymentStatus.paid.ePayment\"\n : state === PaymentState.EPayment && refunded\n ? \"paymentStatus.refunded.ePayment\"\n : state === PaymentState.Abacus && !refunded\n ? \"paymentStatus.paid.abacus\"\n : state === PaymentState.Abacus && refunded\n ? \"paymentStatus.refunded.abacus\"\n : \"paymentStatus.paid.abacus\";\n\n return (\n <>\n \n \n );\n};\n\nexport default PaymentStatus;\n","import { Backdrop, CircularProgress } from \"@material-ui/core\";\nimport React from \"react\";\n\ninterface LoadingIndicatorProps {\n show: boolean;\n}\n\nconst LoadingIndicator: React.FunctionComponent = ({ show }) => {\n return (\n \n \n \n );\n};\n\nexport default LoadingIndicator;\n","import { yupResolver } from \"@hookform/resolvers/yup\";\r\nimport { InputLabel, LinearProgress, makeStyles, MenuItem, Select, Switch, Typography } from \"@material-ui/core\";\r\nimport React, { FC, useEffect, useState } from \"react\";\r\nimport { Controller, useForm } from \"react-hook-form\";\r\nimport { useIntl } from \"react-intl\";\r\nimport * as yup from \"yup\";\r\nimport { useGetCandidatesValidQuery } from \"../../../api/rtk/CandidateApi\";\r\nimport { useGetExamSessionAvailableForSignUpQuery } from \"../../../api/rtk/SignUpApi\";\r\nimport {\r\n CourseForSignupViewModel,\r\n ModuleForSignupViewModel,\r\n} from \"../../../model/ExamSignup/ExamSessionForSignupViewModel\";\r\nimport { GetTranslatedValueIntl } from \"../../../model/Shared/TranslatedValue\";\r\nimport CustomDraggableDialog from \"../../common/customDialog/CustomDraggableDialog\";\r\nimport CustomSelect, { OptionType } from \"../../common/customSelect/CustomSelect\";\r\nimport TranslatedMessage from \"../../translations/TranslatedMessage\";\r\nimport { Language, LanguageLabels } from \"../../../data/constants\";\r\nimport FormGridCell from \"../../common/FormGridCell\";\r\nimport LoadingIndicator from \"../../common/LoadingIndicator\";\r\n\r\ninterface ExamSessionCandidateAddDialogProps {\r\n examSessionId: string;\r\n isOpen: boolean;\r\n add: (candidateId: string, module: ModuleForSignupViewModel) => void;\r\n cancel: () => void;\r\n}\r\n\r\ninterface ExamSessionCandidateAddDialogFormData {\r\n candidateId?: string;\r\n courseId?: string;\r\n moduleId?: string;\r\n bookingWithInvoice: boolean;\r\n}\r\n\r\nconst formDefaultValues: ExamSessionCandidateAddDialogFormData = {\r\n bookingWithInvoice: true,\r\n};\r\n\r\nconst formSchema = yup\r\n .object()\r\n .shape({\r\n candidateId: yup.string().required(),\r\n courseId: yup.string().required(),\r\n moduleId: yup.string().required(),\r\n bookingWithInvoice: yup.boolean().required().default(true),\r\n })\r\n .defined();\r\n\r\nconst useStyles = makeStyles(() => ({\r\n form: {\r\n marginBottom: 16,\r\n },\r\n candidateSelect: {\r\n minWidth: 500,\r\n },\r\n checkbox: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n },\r\n languageCell: {\r\n paddingTop: 16,\r\n paddingBottom: 16,\r\n },\r\n select: {\r\n width: \"100%\",\r\n },\r\n}));\r\n\r\nconst ExamSessionCandidateAddDialog: FC = ({\r\n examSessionId,\r\n isOpen,\r\n add,\r\n cancel,\r\n}) => {\r\n const classes = useStyles();\r\n const intl = useIntl();\r\n const { handleSubmit, reset, resetField, watch, control } = useForm({\r\n mode: \"onBlur\",\r\n defaultValues: formDefaultValues,\r\n resolver: yupResolver(formSchema),\r\n });\r\n const candidateId = watch(\"candidateId\");\r\n const courseId = watch(\"courseId\");\r\n const moduleId = watch(\"moduleId\");\r\n const bookingWithInvoice = watch(\"bookingWithInvoice\");\r\n const { data: candidates, isFetching } = useGetCandidatesValidQuery();\r\n const selectedCandidate = candidates?.find((candidate) => candidate.id === candidateId);\r\n const [selectedLanguage, setSelectedLanguage] = useState(\r\n selectedCandidate?.correspondenceLanguage ?? Language.DE\r\n );\r\n\r\n const {\r\n data: availableExamSession,\r\n refetch,\r\n isFetching: isFetchingExams,\r\n } = useGetExamSessionAvailableForSignUpQuery(\r\n {\r\n examSessionId,\r\n candidateId: selectedCandidate === undefined ? \"\" : selectedCandidate.id,\r\n language: selectedLanguage,\r\n },\r\n {\r\n skip: selectedCandidate === undefined,\r\n }\r\n );\r\n\r\n useEffect(() => {\r\n setSelectedLanguage(selectedCandidate?.correspondenceLanguage ?? Language.DE);\r\n }, [selectedCandidate]);\r\n\r\n const handleLanguageChange = (event: React.ChangeEvent<{ value: unknown }>) => {\r\n const language = event.target.value as Language;\r\n setSelectedLanguage(language);\r\n refetch();\r\n };\r\n\r\n if (isFetching) {\r\n return ;\r\n }\r\n\r\n if (candidates === undefined) {\r\n return <>;\r\n }\r\n\r\n const candidateOptions: OptionType[] = candidates.map((candidate) => ({\r\n label: `${candidate.firstName} ${candidate.lastName} - ${candidate.emailAddress}`,\r\n value: candidate.id,\r\n payload: candidate,\r\n }));\r\n\r\n const selectedCandidateOption = candidateOptions.find((option) => option.value === candidateId);\r\n\r\n const isCourseDisabled = selectedCandidateOption === undefined || availableExamSession === undefined;\r\n const courseOptions: OptionType[] = !isCourseDisabled\r\n ? availableExamSession.courses.map((course) => ({\r\n label: GetTranslatedValueIntl(intl, course.name),\r\n value: course.id,\r\n payload: course,\r\n }))\r\n : [];\r\n const selectedCourseOption = courseOptions.find((option) => option.value === courseId);\r\n\r\n const isModuleDisabled = selectedCourseOption === undefined;\r\n const moduleOptions: OptionType[] = !isModuleDisabled\r\n ? (selectedCourseOption.payload! as CourseForSignupViewModel).modules.map((module) => ({\r\n label: GetTranslatedValueIntl(intl, module.name),\r\n value: module.id,\r\n payload: module,\r\n }))\r\n : [];\r\n const selectedModuleOption = moduleOptions.find((option) => option.value === moduleId);\r\n\r\n const submit = () => {\r\n let signup: ModuleForSignupViewModel = selectedModuleOption!.payload;\r\n signup = { ...signup, bookingWithInvoice: bookingWithInvoice, language: selectedLanguage };\r\n add(candidateId!, signup);\r\n reset();\r\n };\r\n\r\n const handleAccept = () => {\r\n handleSubmit(submit)();\r\n };\r\n\r\n const handleCancel = () => {\r\n reset();\r\n cancel();\r\n };\r\n\r\n return (\r\n }\r\n cancelText={}\r\n content={\r\n
\r\n {\r\n return (\r\n }\r\n placeholder=\"\"\r\n options={candidateOptions}\r\n isMulti={false}\r\n required\r\n error={invalid}\r\n value={selectedCandidateOption || null}\r\n onChange={(value) => {\r\n resetField(\"courseId\");\r\n resetField(\"moduleId\");\r\n onChange((value as OptionType).value);\r\n }}\r\n />\r\n );\r\n }}\r\n />\r\n {selectedCandidate && (\r\n \r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {\r\n return (\r\n }\r\n placeholder=\"\"\r\n options={isCourseDisabled ? [] : courseOptions}\r\n isMulti={false}\r\n isDisabled={isCourseDisabled}\r\n required\r\n error={invalid}\r\n value={selectedCourseOption || null}\r\n onChange={(value) => onChange((value as OptionType).value)}\r\n />\r\n );\r\n }}\r\n />\r\n {\r\n return (\r\n }\r\n placeholder=\"\"\r\n options={isModuleDisabled ? [] : moduleOptions}\r\n isMulti={false}\r\n isDisabled={isModuleDisabled}\r\n required\r\n error={invalid}\r\n value={selectedModuleOption || null}\r\n onChange={(value) => onChange((value as OptionType).value)}\r\n />\r\n );\r\n }}\r\n />\r\n {\r\n return (\r\n
\r\n \r\n \r\n \r\n onChange(value)} />\r\n
\r\n );\r\n }}\r\n />\r\n \r\n \r\n }\r\n isOpen={isOpen}\r\n onAccept={handleAccept}\r\n onCancel={handleCancel}\r\n title={}\r\n />\r\n );\r\n};\r\n\r\nexport default ExamSessionCandidateAddDialog;\r\n","import Grid from \"@material-ui/core/Grid\";\nimport School from \"@material-ui/icons/School\";\nimport React, { FC } from \"react\";\nimport TitleWithIcon from \"../../common/TitleWithIcon\";\nimport TranslatedMessage from \"../../translations/TranslatedMessage\";\n\nconst ExamSessionCandidateListHeader: FC = () => (\n \n \n } variant=\"h5\">\n \n \n \n \n \n);\n\nexport default ExamSessionCandidateListHeader;\n","import Grid from \"@material-ui/core/Grid\";\nimport LinearProgress from \"@material-ui/core/LinearProgress\";\nimport DoneIcon from \"@material-ui/icons/Done\";\nimport React, { FC, useState } from \"react\";\nimport { useIntl } from \"react-intl\";\nimport { useHistory, useParams } from \"react-router\";\nimport { routesPaths } from \"../../../Routes\";\nimport { useGetExamSessionCandidatesQuery } from \"../../../api/rtk/ExamSessionCandidateApi\";\nimport { useSignupMutation } from \"../../../api/rtk/SignUpApi\";\nimport { ModuleForSignupViewModel } from \"../../../model/ExamSignup/ExamSessionForSignupViewModel\";\nimport { GetTranslatedValueIntl } from \"../../../model/Shared/TranslatedValue\";\nimport {\n CandidateModuleState,\n CandidateModuleStateTranslationKey,\n} from \"../../../model/examSessionCandidate/CandidateModuleState\";\nimport { GetTranslation } from \"../../../translations/GetTranslation\";\nimport { ColumnDefinition, CustomGrid } from \"../../common/customGrid/CustomGrid\";\nimport PaymentStatus from \"../../common/payment/PaymentStatus\";\nimport { PaymentState } from \"../../payment/PaymentConstants\";\nimport TranslatedMessage from \"../../translations/TranslatedMessage\";\nimport ExamSessionCandidateAddDialog from \"./ExamSessionCandidateAddDialog\";\nimport ExamSessionCandidateListHeader from \"./ExamSessionCandidateListHeader\";\nimport { SignupModuleRequestModel } from \"../../../model/ExamSignup/SignupModuleRequestModel\";\n\ninterface RowData {\n examSessionCandidateId: string;\n candidateLastName: string;\n candidateFirstName: string;\n candidateEmail: string;\n moduleId: string;\n moduleName: string;\n documentsUploaded: boolean;\n moduleState: CandidateModuleState;\n paymentState: PaymentState;\n refundStatus?: boolean;\n allRoomsAssigned: boolean;\n}\n\nconst ExamSessionCandidateList: FC = () => {\n const history = useHistory();\n const intl = useIntl();\n const { examSessionId } = useParams<{ examSessionId: string }>();\n const [isAddDialogOpen, setIsAddDialogOpen] = useState(false);\n const { data: examSessionCandidates, isFetching } = useGetExamSessionCandidatesQuery(examSessionId);\n const [signUp, { isLoading: isSingUpLoading }] = useSignupMutation();\n\n if (isFetching || isSingUpLoading) {\n return (\n <>\n \n \n \n );\n }\n\n if (examSessionCandidates === undefined) {\n return <>;\n }\n\n const closeAddDialog = () => setIsAddDialogOpen(false);\n\n const addExamSessionCandidate = async (candidateId: string, module: ModuleForSignupViewModel) => {\n setIsAddDialogOpen(false);\n const request: SignupModuleRequestModel = {\n courseId: module.courseId,\n examSessionId: examSessionId,\n moduleId: module.id,\n isRepeating: false,\n trainingProvider: \"\",\n willProvideDocumentsLater: module.needsDocuments,\n option: undefined,\n exams: [],\n bookingWithInvoice: module.bookingWithInvoice\n };\n signUp({ candidateId, data: request });\n };\n\n const navigateToExamSessionCandidate = (row: RowData) => {\n const path = routesPaths.examSessionCandidate(row.examSessionCandidateId, row.moduleId);\n history.push(path);\n };\n\n const getRows = () => {\n const rows: RowData[] = [];\n examSessionCandidates.forEach((examSessionCandidate) => {\n examSessionCandidate.modules.forEach((module) => {\n const allRoomsAssigned =\n examSessionCandidate.exams.find((e) => e.moduleId === module.moduleId && !e.roomId) === undefined;\n rows.push({\n examSessionCandidateId: examSessionCandidate.id,\n candidateLastName: examSessionCandidate.lastName,\n candidateFirstName: examSessionCandidate.firstName,\n candidateEmail: examSessionCandidate.email,\n moduleId: module !== undefined ? module.moduleId : \"\",\n moduleName: module !== undefined ? GetTranslatedValueIntl(intl, module.name) : \"\",\n documentsUploaded: module.documentsUploaded,\n moduleState: module !== undefined ? module.state : CandidateModuleState.None,\n paymentState: module.paymentState,\n refundStatus: module.refundStatus,\n allRoomsAssigned,\n });\n });\n });\n return rows;\n };\n\n const rows: RowData[] = getRows();\n\n const columnsDefinitions: ColumnDefinition[] = [\n {\n columnKey: \"candidateLastName\",\n columnLabel: ,\n cellValue: (row) => row.candidateLastName,\n },\n {\n columnKey: \"candidateFirstName\",\n columnLabel: ,\n cellValue: (row) => row.candidateFirstName,\n },\n {\n columnKey: \"candidateEmail\",\n columnLabel: ,\n cellValue: (row) => row.candidateEmail,\n },\n {\n columnKey: \"moduleName\",\n columnLabel: ,\n cellValue: (row) => row.moduleName,\n },\n {\n columnKey: \"documentsUploaded\",\n columnLabel: ,\n cellValue: (row) => (row.documentsUploaded ? : \"\"),\n orderValue: (row) => row.documentsUploaded,\n },\n {\n columnKey: \"allRoomsAssigned\",\n columnLabel: ,\n cellValue: (row) => (row.allRoomsAssigned ? : \"\"),\n orderValue: (row) => row.allRoomsAssigned,\n },\n {\n columnKey: \"paymentState\",\n columnLabel: ,\n cellValue: (row) => ,\n orderValue: (row) => row.paymentState,\n },\n {\n columnKey: \"state\",\n columnLabel: ,\n cellValue: (row) => {\n const translationKey = CandidateModuleStateTranslationKey[row.moduleState];\n return translationKey !== undefined ? GetTranslation(intl, translationKey) : \"\";\n },\n },\n ];\n\n return (\n <>\n \n \n \n \n columnDefinitions={columnsDefinitions}\n rows={rows}\n onRowClick={navigateToExamSessionCandidate}\n rowKey={(row) => `${row.examSessionCandidateId}_${row.moduleId}`}\n addButtonTooltip={}\n onAddClick={() => setIsAddDialogOpen(true)}\n rowsPerPage={5}\n />\n \n \n \n \n );\n};\n\nexport default ExamSessionCandidateList;\n","import {\n Grid,\n makeStyles,\n} from \"@material-ui/core\";\nimport { QuestionAnswer } from \"@material-ui/icons\";\nimport React, { ReactNode } from \"react\";\nimport { TranslationKey } from \"../../translations/TranslationKey\";\nimport TitleWithIcon from \"../common/TitleWithIcon\";\n\nexport const drawerWidth = 240;\nexport const navMenuLogoHeight = 120;\nexport const toolbarHeight = 64;\n\nconst useStyles = makeStyles((theme) => ({\n main: {\n rowGap: theme.spacing(1)+\"px\",\n },\n}));\n\ntype TitleBarProps = {\n children: ReactNode;\n title: TranslationKey | string;\n variant: \"h3\" | \"h4\" | \"h5\";\n};\n\nconst TitleBar: React.FunctionComponent = ({ title, variant, children }) => {\n const classes = useStyles();\n return (\n \n \n \n \n \n \n \n {children}\n \n \n );\n};\n\nexport default TitleBar;\n","import { Chip, SvgIcon } from \"@material-ui/core\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport LinearProgress from \"@material-ui/core/LinearProgress\";\r\nimport { ImportExport, InsertDriveFile, Mail } from \"@material-ui/icons\";\r\nimport CloudUpload from \"@material-ui/icons/CloudUpload\";\r\nimport Publish from \"@material-ui/icons/Publish\";\r\nimport Restore from \"@material-ui/icons/Restore\";\r\nimport createStyles from \"@material-ui/styles/createStyles\";\r\nimport makeStyles from \"@material-ui/styles/makeStyles\";\r\nimport { useSnackbar } from \"notistack\";\r\nimport React, { FC, useEffect, useState } from \"react\";\r\nimport { FileWithPreview } from \"react-dropzone\";\r\nimport { useIntl } from \"react-intl\";\r\nimport { useHistory, useParams } from \"react-router\";\r\nimport { ActionMeta, ValueType } from \"react-select/src/types\";\r\nimport { routesPaths } from \"../../Routes\";\r\nimport { ApiResponse } from \"../../api/CustomFetch\";\r\nimport {\r\n useAddExamSessionLocationsMutation,\r\n useCreateExamSessionMutation,\r\n useDeleteExamSessionLocationMutation,\r\n useDeleteExamSessionMutation,\r\n useExportOrdersMutation,\r\n useGetExamSessionQuery,\r\n usePublishExamResultsMutation,\r\n useSendInvitationMutation,\r\n useSendResultNotificationsMutation,\r\n useStartSurveyMutation,\r\n useUnPublishExamSessionMutation,\r\n useUpdateAndPublishExamSessionMutation,\r\n useUpdateExamSessionMutation,\r\n} from \"../../api/rtk/ExamSessionApi\";\r\nimport { useCalculateExamResultsMutation } from \"../../api/rtk/ExamSessionCandidateApi\";\r\nimport { useGetLocationsQuery } from \"../../api/rtk/LocationApi\";\r\nimport { NewEntityId } from \"../../data/constants\";\r\nimport { ExamScoreResultModel } from \"../../model/ExamScoreResultModel\";\r\nimport { ExamSessionViewModel, GetLocalizedName, initialExamSession } from \"../../model/ExamSessionViewModel\";\r\nimport { PersonType } from \"../../model/PersonType\";\r\nimport { GetTranslation } from \"../../translations/GetTranslation\";\r\nimport { TranslationKey } from \"../../translations/TranslationKey\";\r\nimport { navigateBack } from \"../../utils/Navigation\";\r\nimport CustomButton from \"../common/buttons/CustomButton\";\r\nimport CustomSplitButton from \"../common/buttons/CustomSplitButton\";\r\nimport DefaultButtons from \"../common/buttons/DefaultButtons\";\r\nimport { OptionType } from \"../common/customSelect/CustomSelect\";\r\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\r\nimport ConfirmPublishResultsDialog from \"./ConfirmPublishResultsDialog\";\r\nimport ExamSessionExams from \"./ExamSessionExams\";\r\nimport ExamSessionFields from \"./ExamSessionFields\";\r\nimport ExamSessionFieldsReadonly from \"./ExamSessionFieldsReadonly\";\r\nimport ExamSessionLocationList from \"./ExamSessionLocationList\";\r\nimport ImportScoresAndGradesExamDialog from \"./ImportExamScoresAndGradesDialog\";\r\nimport InvitationDialog from \"./InvitationDialog\";\r\nimport { ReactComponent as CalculatorIcon } from \"./assets/calculator-svgrepo-com.svg\";\r\nimport ExamSessionCandidateList from \"./examSessionCandidate/ExamSessionCandidateList\";\r\nimport TitleBar from \"../layout/TitleBar\";\r\n\r\nconst useStyles = makeStyles(() =>\r\n createStyles({\r\n locationsSelect: {\r\n marginTop: \"4px\",\r\n },\r\n })\r\n);\r\n\r\nconst ExamSessionForm: FC = () => {\r\n const intl = useIntl();\r\n const history = useHistory();\r\n const { enqueueSnackbar } = useSnackbar();\r\n const { examSessionId } = useParams<{ examSessionId: string }>();\r\n\r\n const [examSession, setExamSession] = useState(initialExamSession);\r\n const [isSurveyDialogOpen, setIsSurveyDialogOpen] = useState(false);\r\n const [isSurveyDeadlineEmpty, setIsSurveyDeadlineEmpty] = useState(false);\r\n const [locationIds, setLocationIds] = useState([]);\r\n const [isInvitationDialogOpen, setIsInvitationDialogOpen] = useState(false);\r\n const [selectionValue, setSelectionValue] = React.useState(\"expert\");\r\n const [personType, setPersonType] = React.useState(PersonType.Expert);\r\n const [isAllSelected, setIsAllSelected] = useState(true);\r\n const [selectedLocationsOptions, setSelectedLocationsOptions] = useState([]);\r\n const [selectedLocationIds, setSelectedLocationIds] = useState([]);\r\n const [selectedIndex, setSelectedIndex] = React.useState(0);\r\n let mailingOptions = [\r\n GetTranslation(intl, \"examSession.mail.invitation\"),\r\n GetTranslation(intl, \"examSession.mail.survey\"),\r\n ];\r\n if (examSession.resultsArePublished) {\r\n mailingOptions = [...mailingOptions, GetTranslation(intl, \"examSession.mail.notifyCandidates\")];\r\n }\r\n const [mailButtonTooltip, setMailButtonTooltip] = React.useState(mailingOptions[selectedIndex]);\r\n const [isExamScoresAndGradesImportDialogOpen, setExamScoresAndGradesImportDialogOpen] = useState(false);\r\n const [isConfirmPublishResultsDialogOpen, setIsConfirmPublishResultsDialogOpen] = useState(false);\r\n const cssClasses = useStyles({});\r\n\r\n const [publishExamResults, { isLoading: isPublishExamResultsLoading }] = usePublishExamResultsMutation();\r\n const [exportOrders, { isLoading: isExportingOrders }] = useExportOrdersMutation();\r\n const [calculateExamResults, { isLoading: isCalculateExamResultsLoading }] = useCalculateExamResultsMutation();\r\n const [deleteExamSession, { isLoading: isDeleteExamSessionLoading, isSuccess: isDeleteSuccess }] =\r\n useDeleteExamSessionMutation();\r\n const [createExamSession, { isLoading: isCreateExamSessionLoading }] = useCreateExamSessionMutation();\r\n const [updateExamSession, { isLoading: isUpdateExamSessionLoading }] = useUpdateExamSessionMutation();\r\n const [updateAndPublishExamSession, { isLoading: isUpdateAndPublishExamSessionLoading }] =\r\n useUpdateAndPublishExamSessionMutation();\r\n const [unPublishExamSession, { isLoading: isUnPublishExamSessionLoading }] = useUnPublishExamSessionMutation();\r\n const [addExamSessionLocations, { isLoading: isAddExamSessionLocationsLoading }] =\r\n useAddExamSessionLocationsMutation();\r\n const [deleteExamSessionLocation, { isLoading: isDeleteExamSessionLocationLoading }] =\r\n useDeleteExamSessionLocationMutation();\r\n const [startSurvey, { isLoading: isStartSurveyLoading }] = useStartSurveyMutation();\r\n const [sendInvitation, { isLoading: isSendInvitationLoading }] = useSendInvitationMutation();\r\n const [sendResultNotifications, { isLoading: isSendResultNotificationsLoading }] =\r\n useSendResultNotificationsMutation();\r\n const { data: fetchedExamSession, isFetching: isExamSessionFetching } = useGetExamSessionQuery(examSessionId, {\r\n skip: examSessionId === NewEntityId || isDeleteSuccess,\r\n });\r\n const { data: allLocations, isFetching: isLocationsFetching } = useGetLocationsQuery();\r\n const isLoading =\r\n isExamSessionFetching ||\r\n isLocationsFetching ||\r\n isCalculateExamResultsLoading ||\r\n isPublishExamResultsLoading ||\r\n isDeleteExamSessionLoading ||\r\n isUpdateExamSessionLoading ||\r\n isCreateExamSessionLoading ||\r\n isUpdateExamSessionLoading ||\r\n isUpdateAndPublishExamSessionLoading ||\r\n isUnPublishExamSessionLoading ||\r\n isAddExamSessionLocationsLoading ||\r\n isDeleteExamSessionLocationLoading ||\r\n isStartSurveyLoading ||\r\n isSendInvitationLoading ||\r\n isSendResultNotificationsLoading ||\r\n isExportingOrders;\r\n\r\n useEffect(() => {\r\n if (fetchedExamSession !== undefined) {\r\n setExamSession(fetchedExamSession);\r\n }\r\n }, [fetchedExamSession]);\r\n\r\n useEffect(() => {\r\n if (examSession === undefined) {\r\n return;\r\n }\r\n\r\n setLocationIds(examSession.locations.map((loc) => loc.id));\r\n }, [examSession]);\r\n\r\n if (isLoading) {\r\n return ;\r\n }\r\n\r\n if ((fetchedExamSession === undefined && examSessionId !== NewEntityId) || allLocations === undefined) {\r\n return <>;\r\n }\r\n\r\n const navigateToExamSessionsList = () => navigateBack(routesPaths.examSessions(), history, history.location);\r\n\r\n const handleChange = (partialExamSession: Partial) =>\r\n setExamSession((prevExamSession: any) => ({ ...prevExamSession, ...partialExamSession }));\r\n\r\n const handleClose = () => navigateToExamSessionsList();\r\n\r\n const handleSave = async () => {\r\n if (examSession.id === NewEntityId) {\r\n const response = await createExamSession(examSession).unwrap();\r\n if (response.success) {\r\n const examSessionId = response.data;\r\n history.replace(routesPaths.examSession(examSessionId));\r\n }\r\n } else {\r\n updateExamSession(examSession);\r\n }\r\n };\r\n\r\n const handleDelete = async () => {\r\n const response = await deleteExamSession(examSession.id).unwrap();\r\n if (response.success) {\r\n navigateToExamSessionsList();\r\n }\r\n };\r\n\r\n const handleAssignLocations = (locationIds: string[]) => {\r\n addExamSessionLocations({ examSessionId: examSession.id, locationIds });\r\n };\r\n\r\n const handleRemoveLocation = (locationId: string) =>\r\n deleteExamSessionLocation({ examSessionId: examSession.id, locationId });\r\n\r\n const handlePublishExamSession = () => updateAndPublishExamSession(examSession);\r\n\r\n const handleStartSurveyForExpert = () => {\r\n if (examSession.surveyDeadline === undefined) {\r\n setIsSurveyDeadlineEmpty(true);\r\n } else {\r\n startSurvey({ examSessionId: examSession.id, surveyDeadline: examSession.surveyDeadline });\r\n setIsSurveyDialogOpen(false);\r\n }\r\n };\r\n\r\n const handleUnPublishExamSession = () => unPublishExamSession(examSession.id);\r\n\r\n const handleLocationCardSelected = (locationId: string) =>\r\n history.push(routesPaths.examSessionLocation(examSession.id, locationId));\r\n\r\n const handleInvitation = () => setIsInvitationDialogOpen(true);\r\n\r\n const handleExamScoresAndGrades = () => setExamScoresAndGradesImportDialogOpen(true);\r\n\r\n const handlePersonTypeSelect = (event: React.ChangeEvent) => {\r\n setSelectionValue((event.target as HTMLInputElement).value);\r\n if (selectionValue === \"candidate\") {\r\n setPersonType(PersonType.Expert);\r\n } else {\r\n setPersonType(PersonType.Candidate);\r\n }\r\n };\r\n\r\n const handleSwitch = () => (event: React.ChangeEvent) => setIsAllSelected(event.target.checked);\r\n\r\n const handleLocationSelection = (selectedElements: ValueType, actionMeta?: ActionMeta) => {\r\n if ((actionMeta && actionMeta.action === \"clear\") || !selectedElements || isAllSelected) {\r\n setSelectedLocationsOptions([]);\r\n }\r\n\r\n const selectedElementsArray = selectedElements as OptionType[];\r\n\r\n if (selectedElementsArray && selectedElementsArray.length > 0) {\r\n setSelectedLocationsOptions(selectedElementsArray);\r\n const value: string[] = [];\r\n for (let i = 0, l = selectedElementsArray.length; i < l; i += 1) {\r\n const item = allLocations.find((loc) => loc.id === selectedElementsArray[i].value);\r\n if (item) {\r\n value.push(item.id);\r\n }\r\n }\r\n setSelectedLocationIds(value);\r\n }\r\n };\r\n\r\n const handleInvitationAccept = async () => {\r\n setIsInvitationDialogOpen(false);\r\n const invitationLocationIds = isAllSelected ? locationIds : selectedLocationIds;\r\n const response = await sendInvitation({\r\n examSessionId: examSession.id,\r\n locationIds: invitationLocationIds,\r\n personType,\r\n }).unwrap();\r\n if (personType === PersonType.Candidate) {\r\n enqueueSnackbar(\r\n \r\n );\r\n } else {\r\n enqueueSnackbar(\r\n \r\n );\r\n }\r\n resetInvitationStates();\r\n };\r\n\r\n const handleNotifyCandidates = () => sendResultNotifications(examSession.id);\r\n\r\n const handleMailButton = (index: number) => {\r\n switch (index) {\r\n case 0: {\r\n handleInvitation();\r\n break;\r\n }\r\n case 1: {\r\n setIsSurveyDialogOpen(true);\r\n break;\r\n }\r\n case 2: {\r\n handleNotifyCandidates();\r\n break;\r\n }\r\n default: {\r\n break;\r\n }\r\n }\r\n };\r\n\r\n const resetInvitationStates = () => {\r\n setIsInvitationDialogOpen(false);\r\n setSelectedLocationsOptions([]);\r\n setIsAllSelected(true);\r\n setSelectionValue(\"expert\");\r\n };\r\n\r\n const handleUploadExamScoresAndGradesSuccess = (\r\n file: FileWithPreview,\r\n response: ApiResponse\r\n ) => {\r\n const { updatedExamsCount, recordsCount: totalCandidatesCount } = response.data;\r\n enqueueSnackbar(\r\n <>\r\n {\" \"}\r\n {`${updatedExamsCount}/${totalCandidatesCount}`}\r\n \r\n );\r\n };\r\n\r\n const handleUploadExamScoresAndGradesError = () => {\r\n enqueueSnackbar();\r\n };\r\n\r\n const handleMenuItemClick = (event: React.MouseEvent, index: number) => {\r\n setMailButtonTooltip(mailingOptions[index]);\r\n setSelectedIndex(index);\r\n handleMailButton(index);\r\n };\r\n\r\n const handleConfirmationMailHistory = (locationId: string) => {\r\n let flagged = false;\r\n const confirmationMailHistory = examSession.confirmationMailHistory.find(\r\n (confirmation) => confirmation.locationId === locationId\r\n );\r\n if (confirmationMailHistory) {\r\n flagged = true;\r\n }\r\n return flagged;\r\n };\r\n\r\n const handlePublishExamResults = () => {\r\n setIsConfirmPublishResultsDialogOpen(false);\r\n publishExamResults(examSessionId);\r\n };\r\n\r\n const sessionHasRooms = examSession.examDays.filter((examDay) => examDay.roomAssignments.length > 0).length > 0;\r\n\r\n const publishButton = !examSession.published && (\r\n }\r\n onClick={handlePublishExamSession}\r\n >\r\n \r\n \r\n );\r\n\r\n const unpublishButton = examSession.published && (\r\n } onClick={handleUnPublishExamSession}>\r\n \r\n \r\n );\r\n\r\n const mailButton = examSession.published && (\r\n handleMailButton(selectedIndex)}\r\n options={mailingOptions}\r\n onMenuItemClick={handleMenuItemClick}\r\n >\r\n \r\n \r\n );\r\n const exportButton = examSession.published && (\r\n }\r\n onClick={() => exportOrders(examSessionId)}\r\n >\r\n \r\n \r\n );\r\n\r\n const calculateExamResultsButton = examSession.published && (\r\n }\r\n onClick={() => calculateExamResults(examSessionId)}\r\n >\r\n \r\n \r\n );\r\n\r\n const publishExamResultsButton = examSession.published && (\r\n }\r\n onClick={() => setIsConfirmPublishResultsDialogOpen(true)}\r\n >\r\n \r\n \r\n );\r\n\r\n const importScoresAndGradesByExamsButton = examSession.published && (\r\n }\r\n onClick={handleExamScoresAndGrades}\r\n >\r\n \r\n \r\n );\r\n\r\n const locationsOptions: OptionType[] = Object.values(examSession.locations).map((loc) => ({\r\n value: loc.id,\r\n label: loc.name,\r\n flagged: handleConfirmationMailHistory(loc.id),\r\n flaggedTooltip: GetTranslation(intl, \"examSession.invitation.flagged\"),\r\n }));\r\n\r\n const getExamSessionStateTranslationKey = (published: boolean): TranslationKey =>\r\n published ? \"common.status.published\" : \"common.status.draft\";\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n {examSessionId !== NewEntityId && publishButton}\r\n {unpublishButton}\r\n {importScoresAndGradesByExamsButton}\r\n {calculateExamResultsButton}\r\n {publishExamResultsButton}\r\n {mailButton}\r\n {exportButton}\r\n \r\n }\r\n onClose={handleClose}\r\n onDelete={handleDelete}\r\n onSave={handleSave}\r\n isDeleteButtonEnabled={examSession.locations.length === 0}\r\n isSaveButtonEnabled={!examSession.published}\r\n />\r\n \r\n\r\n \r\n {!examSession.published && (\r\n \r\n )}\r\n {examSession.published && (\r\n setIsSurveyDialogOpen(false)}\r\n />\r\n )}\r\n \r\n {examSession.published && (\r\n \r\n \r\n \r\n )}\r\n\r\n \r\n {examSession.id !== NewEntityId && (\r\n loc.rooms.length > 0)}\r\n onAssigningLocations={handleAssignLocations}\r\n onLocationCardSelected={handleLocationCardSelected}\r\n />\r\n )}\r\n \r\n \r\n {examSession.id !== NewEntityId && (\r\n setExamSession({ ...examSession, exams: [...examSession.exams, ...exams] })}\r\n handleEditExam={(changedExam, courseTypes) =>\r\n setExamSession({\r\n ...examSession,\r\n exams: [...examSession.exams].map((exam) =>\r\n exam.id === changedExam.id ? { ...exam, courseTypes: courseTypes } : exam\r\n ),\r\n })\r\n }\r\n handleRemoveExam={(exam) =>\r\n setExamSession({ ...examSession, exams: examSession.exams.filter((e) => e.id !== exam.id) })\r\n }\r\n isReadOnly={examSession.published}\r\n />\r\n )}\r\n \r\n \r\n\r\n setExamScoresAndGradesImportDialogOpen(false)}\r\n onFileUploaded={handleUploadExamScoresAndGradesSuccess}\r\n onUploadError={handleUploadExamScoresAndGradesError}\r\n examSessionId={examSession.id}\r\n />\r\n \r\n setIsConfirmPublishResultsDialogOpen(false)}\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default ExamSessionForm;\r\n","import { CloudUpload } from '@material-ui/icons';\nimport * as React from 'react';\nimport { WithIntlProps, injectIntl } from 'react-intl';\nimport { SwissGermanLocale, SwissTimeZone } from '../../data/constants';\nimport { ExamSessionViewModel, GetLocalizedName } from '../../model/ExamSessionViewModel';\nimport { GetTranslation } from '../../translations/GetTranslation';\nimport CustomButton from '../common/buttons/CustomButton';\nimport { ColumnDefinition, CustomGrid, CustomGridFilter } from '../common/customGrid/CustomGrid';\nimport TranslatedMessage from '../translations/TranslatedMessage';\n\ntype IExamSessionGridProps = {\n examSessions: ExamSessionViewModel[];\n onExamSessionClick: (id: string) => void;\n onAddClick: (event: any) => void;\n onImportPevButtonClick: () => void;\n} & WithIntlProps;\n\ntype ExamSessionGridState = {\n filters: CustomGridFilter[]\n};\n\nclass ExamSessionGrid extends React.Component {\n constructor(props: any) {\n super(props);\n\n const { intl } = props;\n\n const filters: CustomGridFilter[] = [\n {\n label: GetTranslation(intl, \"examSession.field.hidePastSessions\"),\n isActive: false,\n filterFunction: (row: ExamSessionViewModel) => {\n let today = new Date();\n today.setHours(0, 0, 0, 0);\n let to = new Date(row.to);\n to.setHours(0, 0, 0, 0);\n\n if (to >= today) {\n return true;\n }\n\n return false;\n },\n onFilterChange: this.getHandlerByFilterIndex(0)\n }\n ];\n\n this.state = {\n filters\n };\n }\n\n private columnsDefinitions: Array> = [\n {\n columnKey: \"sessionKey\",\n columnLabel: ,\n cellValue: (((_) => GetLocalizedName(_)))\n },\n { columnKey: \"from\", columnLabel: , orderValue: _ => _.from, cellValue: (((_) => new Date(_.from).toLocaleDateString(SwissGermanLocale, { timeZone: SwissTimeZone }))) },\n { columnKey: \"to\", columnLabel: , orderValue: _ => _.to, cellValue: (((_) => new Date(_.to).toLocaleDateString(SwissGermanLocale, { timeZone: SwissTimeZone }))) },\n { columnKey: \"signupStartDate\", columnLabel: , orderValue: _ => _.signupStartDate, cellValue: (((_) => new Date(_.signupStartDate).toLocaleDateString(SwissGermanLocale, { timeZone: SwissTimeZone }))) },\n { columnKey: \"signupEndDate\", columnLabel: , orderValue: _ => _.signupEndDate, cellValue: (((_) => new Date(_.signupEndDate).toLocaleDateString(SwissGermanLocale, { timeZone: SwissTimeZone }))) },\n {\n columnKey: \"published\", columnLabel: , orderValue: _ => _.published, cellValue: ((_) => {\n if (_.published) {\n return ;\n }\n\n return ;\n })\n },\n ];\n\n private additionalButtons = (\n }\n onClick={this.props.onImportPevButtonClick}\n >\n \n \n );\n\n private getHandlerByFilterIndex(index: number) {\n return (checked: boolean) => {\n this.setState(\n prevState => {\n const newFilters = [...prevState.filters];\n newFilters[index].isActive = checked;\n return {\n ...prevState,\n filters: [...newFilters]\n }\n });\n }\n }\n\n private updateFilterLabel(filterIndex: number) {\n const { intl } = this.props;\n\n this.setState(prevState => {\n const newFilterLabel = GetTranslation(intl, \"examSession.field.hidePastSessions\");\n if (newFilterLabel === prevState.filters[filterIndex].label) {\n return null;\n }\n\n const newFilters = [...prevState.filters];\n newFilters[filterIndex].label = newFilterLabel;\n return {\n ...prevState,\n filters: [...newFilters]\n }\n });\n\n }\n\n public componentDidUpdate() {\n this.updateFilterLabel(0);\n }\n\n public render() {\n return (\n \n filters={this.state.filters}\n columnDefinitions={this.columnsDefinitions}\n rows={this.props.examSessions}\n onRowClick={(_) => this.props.onExamSessionClick(_.id)}\n rowKey={(_) => _.id}\n addButtonTooltip={}\n onAddClick={this.props.onAddClick}\n additionalButtons={this.additionalButtons}\n />\n );\n }\n}\n\nexport default injectIntl(ExamSessionGrid);\n","import { makeStyles } from '@material-ui/core';\nimport React, { FC } from 'react';\nimport { importPevUrl } from '../../api/rtk/ExamSessionApi';\nimport UploadDropZone from '../common/UploadDropZone';\nimport CustomDraggableDialog from '../common/customDialog/CustomDraggableDialog';\nimport TranslatedMessage from '../translations/TranslatedMessage';\n\ninterface ImportPevDialogProps {\n isOpen: boolean;\n onFileUploaded: () => void;\n onClose: () => void;\n}\n\nconst useStyles = makeStyles(() => ({\n dropZoneDiv: {\n width: '200px',\n margin: '0 auto'\n }\n}));\n\nconst ImportPevDialog: FC = ({ isOpen, onFileUploaded, onClose }) => {\n const classes = useStyles();\n return }\n cancelText={}\n content={\n
\n \n
\n
\n }\n isOpen={isOpen}\n title={} />;\n};\n\nexport default ImportPevDialog;","import { createStyles, LinearProgress, Theme, Typography } from \"@material-ui/core\";\nimport { withStyles } from \"@material-ui/styles\";\nimport { withSnackbar, WithSnackbarProps } from 'notistack';\nimport React, { Component } from \"react\";\nimport { connect, ConnectedProps } from \"react-redux\";\nimport { RouteComponentProps } from \"react-router\";\nimport { ApplicationState } from \"../..\";\nimport { endpoints } from \"../../api/rtk/ExamSessionApi\";\nimport { NewEntityId } from \"../../data/constants\";\nimport { ExamSessionViewModel } from \"../../model/ExamSessionViewModel\";\nimport { routesPaths } from \"../../Routes\";\nimport { navigateTo } from \"../../utils/Navigation\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\nimport ExamSessionGrid from \"./ExamSessionGrid\";\nimport ImportPevDialog from './ImportPevDialog';\n\nconst styles = ({ spacing }: Theme) =>\n createStyles({\n button: { margin: spacing(1) },\n icon: { marginRight: spacing(1) },\n });\n\nconst mapStateToProps = (state: ApplicationState) => {\n return {\n examSessionsState: endpoints.getExamSessions.select()(state),\n };\n};\nconst mapDispatchToProps = {\n getExamSessions: endpoints.getExamSessions.initiate,\n};\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ntype ExamSessionListProps = ConnectedProps & RouteComponentProps & WithSnackbarProps;\n\ntype ExamSessionListState = {\n examSessions: ExamSessionViewModel[];\n isImportPevDialogOpen: boolean;\n};\n\nclass ExamSessionList extends Component {\n constructor(props: ExamSessionListProps) {\n super(props);\n this.state = {\n examSessions: [],\n isImportPevDialogOpen: false,\n };\n }\n\n public componentDidMount() {\n this.props.getExamSessions();\n }\n\n public render() {\n return (\n <>\n \n \n \n {this.renderExamSessions()}\n \n );\n }\n\n private renderExamSessions(): JSX.Element {\n const { isLoading, data: examSessions } = this.props.examSessionsState;\n\n if (isLoading) {\n return ;\n }\n\n if (examSessions === undefined) {\n return <>;\n }\n\n return (\n <>\n this.navigateToExamSession(NewEntityId)}\n onImportPevButtonClick={this.handleImportPevButtonClick}\n />\n \n \n );\n }\n\n private navigateToExamSession = (examSessionId: string) =>\n navigateTo(routesPaths.examSession(examSessionId), this.props.history);\n\n private handleImportPevButtonClick = () =>\n this.setState((prevState) => {\n return {\n ...prevState,\n isImportPevDialogOpen: true,\n };\n });\n\n private handleImportPevSuccess = () => {\n this.props.enqueueSnackbar();\n this.handleImportPevDialogClose();\n };\n\n private handleImportPevDialogClose = () =>\n this.setState((prevState) => {\n return {\n ...prevState,\n isImportPevDialogOpen: false,\n };\n });\n}\n\nexport default withStyles(styles)(connector(withSnackbar(ExamSessionList)));\n","import { Button, Tooltip, Typography } from \"@material-ui/core\";\nimport { createStyles, makeStyles } from \"@material-ui/styles\";\nimport React from \"react\";\n\nconst useStyles = makeStyles(() =>\n createStyles({\n root: {\n marginLeft: \"7px\",\n height: 35,\n boxShadow: \"none\",\n },\n })\n);\n\ninterface LinkButtonProps {\n tooltip: NonNullable;\n href: string;\n target: string;\n}\n\nconst LinkButton: React.FC = ({ children, href, target, tooltip }) => {\n const cssClasses = useStyles({});\n\n return (\n \n \n \n {children}\n \n \n \n );\n};\n\nexport default LinkButton;\n","import React from \"react\";\nimport { ExamDayViewModel } from \"../../model/ExamDayViewModel\";\nimport CustomCard from \"../common/CustomCard\";\nimport LocaleFormatDate from \"../common/dates/LocaleFormatDate\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\nimport { ExamFormatLabels } from \"../../model/ExamDayType\";\n\ntype ExamDayCardProps = {\n examDay: ExamDayViewModel;\n onClick?: (examDayId: string) => void;\n};\n\nconst ExamDayCard: React.FunctionComponent = ({ examDay, onClick }) => {\n const handleClick = () => onClick!(examDay.id);\n\n return (\n \n {examDay.roomAssignments.length}\n \n }\n line1={}\n line2={}\n onClick={handleClick}\n />\n );\n};\n\nexport default ExamDayCard;\n","import { Grid } from '@material-ui/core';\nimport { MeetingRoom } from '@material-ui/icons';\nimport { Add } from '@material-ui/icons';\nimport _ from 'lodash';\nimport React from 'react';\nimport { ExamDayViewModel } from '../../model/ExamDayViewModel';\nimport CustomButton from '../common/buttons/CustomButton';\nimport RightButtonArea from '../common/buttons/RightButtonArea';\nimport TitleWithIcon from '../common/TitleWithIcon';\nimport ExamDayCard from './ExamDayCard';\nimport TranslatedMessage from '../translations/TranslatedMessage';\n\ninterface ExamDayListProps {\n examDays?: ExamDayViewModel[];\n onExamDaySelected?: (examDayId: string) => void;\n onStartAddingExamDay?: () => void;\n isReadOnly: boolean;\n showAddButton?: boolean;\n}\n\nconst ExamDayList: React.FunctionComponent = ({ examDays, isReadOnly, showAddButton, ...eventHandlers }) => {\n\n const sortedExamDays = _.orderBy(examDays, (examDay) => examDay.date);\n const examDayCards = sortedExamDays.map(examDay =>\n \n \n \n );\n\n return (\n \n \n \n } variant='h5' >\n \n \n \n {!isReadOnly && showAddButton && \n \n\n } onClick={eventHandlers.onStartAddingExamDay!}>\n \n \n \n }\n \n \n {examDayCards}\n \n \n );\n};\n\nExamDayList.defaultProps = {\n onStartAddingExamDay: () => { },\n showAddButton: true\n} as Partial;\n\nexport default ExamDayList;\n","import Schedule from \"@material-ui/icons/Schedule\";\nimport React, { useState } from \"react\";\nimport { injectIntl, WrappedComponentProps } from \"react-intl\";\nimport { GetTranslation } from \"../../translations/GetTranslation\";\nimport CustomSplitButton from \"../common/buttons/CustomSplitButton\";\n\ntype SchedulerOpenButtonProps = {\n onScheduleOralExams: () => void;\n scheduleOralExamsAvailable: boolean;\n onScheduleWrittenExams: () => void;\n scheduleWrittenExamsAvailable: boolean;\n onScheduleCorrectionExams: () => void;\n scheduleCorrectionExamsAvailable: boolean;\n} & WrappedComponentProps;\n\nconst SchedulerOpenButton: React.FunctionComponent = ({\n onScheduleOralExams,\n scheduleOralExamsAvailable,\n onScheduleWrittenExams,\n scheduleWrittenExamsAvailable,\n onScheduleCorrectionExams,\n scheduleCorrectionExamsAvailable,\n intl,\n}) => {\n const scheduleOptions = new Array<{ label: string; handler: () => void }>();\n if (scheduleOralExamsAvailable) {\n scheduleOptions.push({ label: GetTranslation(intl, \"common.scheduleOralExams\"), handler: onScheduleOralExams });\n }\n if (scheduleWrittenExamsAvailable) {\n scheduleOptions.push({\n label: GetTranslation(intl, \"common.scheduleWrittenExams\"),\n handler: onScheduleWrittenExams,\n });\n }\n if (scheduleCorrectionExamsAvailable) {\n scheduleOptions.push({\n label: GetTranslation(intl, \"common.scheduleCorrectionExams\"),\n handler: onScheduleCorrectionExams,\n });\n }\n\n const [selectedMenuIndex, setSelectedMenuIndex] = useState(0);\n const [buttonTooltip, setButtonTooltip] = useState(scheduleOptions.length > 0 ? scheduleOptions[0].label : \"\");\n\n if (!scheduleOralExamsAvailable && !scheduleWrittenExamsAvailable && !scheduleCorrectionExamsAvailable) {\n return null;\n }\n\n const handleButtonClick = (index: number) => {\n if (index < scheduleOptions.length) {\n scheduleOptions[index].handler();\n }\n };\n\n const handleMenuItemClick = (_: React.MouseEvent, index: number) => {\n if (index < scheduleOptions.length) {\n setButtonTooltip(scheduleOptions[index].label);\n setSelectedMenuIndex(index);\n handleButtonClick(index);\n }\n };\n\n const options = scheduleOptions.map((option) => option.label);\n\n return (\n handleButtonClick(selectedMenuIndex)}\n options={options}\n onMenuItemClick={handleMenuItemClick}\n >\n \n \n );\n};\n\nexport default injectIntl(SchedulerOpenButton);\n","import { NewEntityId } from \"../../data/constants\";\r\nimport { LocationViewModel } from \"../../model/LocationViewModel\";\r\n\r\nexport const initialLocation: LocationViewModel = {\r\n id: NewEntityId,\r\n name: \"\",\r\n canton: \"\",\r\n city: \"\",\r\n contactEmailAddress: \"\",\r\n contactName: \"\",\r\n contactPhoneNo: \"\",\r\n languageRegions: [],\r\n linkToMap: \"\",\r\n rooms: [],\r\n street: \"\",\r\n zipCode: \"\",\r\n};\r\n","import { Grid, Typography, Link } from '@material-ui/core';\nimport React from 'react';\nimport { LocationViewModel } from '../../model/LocationViewModel';\nimport FormGridCell from '../common/FormGridCell';\nimport { injectIntl, WrappedComponentProps } from 'react-intl';\nimport { makeStyles, createStyles } from '@material-ui/styles';\nimport LanguageList from '../common/language/LanguageList';\n\ntype ExamSessionLocationFieldsProps = {\n location: LocationViewModel;\n}\n & WrappedComponentProps;\n\nconst useStyles = makeStyles(theme => (createStyles({\n language: {\n marginRight: '10px',\n },\n root: {\n marginLeft: '4px'\n },\n})));\n\nconst ExamSessionLocationFields: React.FunctionComponent = ({ intl, location }) => {\n const cssClasses = useStyles({});\n\n return (\n \n \n \n \n {location.street}\n \n \n {location.zipCode} {location.city}\n \n \n {location.canton}\n \n \n \n \n \n \n \n \n \n {location.contactName}\n \n \n {location.contactEmailAddress} \n \n \n {location.contactPhoneNo}\n \n \n \n \n );\n}\n\nExamSessionLocationFields.defaultProps = {\n onChangeEmailIsValid: () => { },\n onPropertyValueChanges: () => { },\n readOnly: false\n} as Partial;\n\nexport default injectIntl(ExamSessionLocationFields);\n","import { TranslationKey } from \"../../translations/TranslationKey\";\r\nimport { ExamType } from \"../Exam\";\r\n\r\nexport enum ExamSessionCandidateExamState {\r\n Booked = \"Booked\",\r\n Cancelled = \"Cancelled\",\r\n Passed = \"Passed\",\r\n Failed = \"Failed\",\r\n Equivalence = \"Equivalence\",\r\n}\r\n\r\nexport const ExamSessionCandidateExamStateTranslationKey: {\r\n [examState in ExamSessionCandidateExamState]: TranslationKey;\r\n} = {\r\n [ExamSessionCandidateExamState.Booked]: \"examSessionCandidateExamState.booked\",\r\n [ExamSessionCandidateExamState.Cancelled]: \"examSessionCandidateExamState.cancelled\",\r\n [ExamSessionCandidateExamState.Passed]: \"examSessionCandidateExamState.passed\",\r\n [ExamSessionCandidateExamState.Failed]: \"examSessionCandidateExamState.failed\",\r\n [ExamSessionCandidateExamState.Equivalence]: \"examSessionCandidateExamState.equivalence\",\r\n};\r\n\r\nexport interface ExamSessionCandidateExamViewModel {\r\n moduleId: string;\r\n examId: string;\r\n type: ExamType;\r\n examDayId: string;\r\n roomId: string;\r\n timeSlotIndex: number;\r\n grade?: number | null;\r\n score?: number | null;\r\n state: ExamSessionCandidateExamState;\r\n isManualState: boolean;\r\n willBeRefunded: boolean;\r\n comment: string;\r\n refundAccountNumber: string;\r\n caseName?: string;\r\n}\r\n","import Grid from \"@material-ui/core/Grid\";\nimport LinearProgress from \"@material-ui/core/LinearProgress\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { Map, Room } from \"@material-ui/icons\";\nimport React from \"react\";\nimport { useHistory, useParams } from \"react-router\";\nimport { useGetExamSessionQuery } from \"../../api/rtk/ExamSessionApi\";\nimport { NewEntityId } from \"../../data/constants\";\nimport { ExamDayType } from \"../../model/ExamDayType\";\nimport { GetLocalizedName } from \"../../model/ExamSessionViewModel\";\nimport { LocationViewModel } from \"../../model/LocationViewModel\";\nimport { routesPaths } from \"../../Routes\";\nimport DefaultButtons from \"../common/buttons/DefaultButtons\";\nimport LinkButton from \"../common/buttons/LinkButton\";\nimport TitleWithIcon from \"../common/TitleWithIcon\";\nimport ExamDayList from \"../examDay/ExamDayList\";\nimport SchedulerOpenButton from \"../examsScheduler/SchedulerOpenButton\";\nimport { initialLocation } from \"../location/LocationConstants\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\nimport { navigateBack } from \"./../../utils/Navigation\";\nimport ExamSessionLocationFields from \"./ExamSessionLocationFields\";\n\nconst ExamSessionLocationForm: React.FunctionComponent = () => {\n const history = useHistory();\n const { examSessionId, locationId } = useParams<{ examSessionId: string; locationId: string }>();\n const { data: examSession, isFetching: isExamSessionFetching } = useGetExamSessionQuery(examSessionId);\n\n if (isExamSessionFetching) {\n return ;\n }\n\n if (examSession === undefined) {\n return <>;\n }\n\n const getLocationFromArray = (locationId: string, locations: LocationViewModel[]): LocationViewModel => {\n const location = locations.find((location) => location.id === locationId);\n return location ? location : initialLocation;\n };\n\n const location = getLocationFromArray(locationId, examSession.locations);\n\n const locationHasExamType = (examDayType: ExamDayType) =>\n examSession.examDays.filter((d) => d.locationId === locationId && examDayType === d.type).length > 0;\n\n const handleClose = () => {\n navigateBack(routesPaths.examSession(examSessionId), history, location);\n };\n\n const handleExamDaySelected = (examDayId: string) => {\n history.push(routesPaths.examDay(examSessionId, location.id, examDayId));\n };\n\n const handleStartAddingExamDay = () => {\n history.push(routesPaths.examDay(examSessionId, location.id, NewEntityId));\n };\n\n const handleSchedulingOralExam = () => {\n history.push(routesPaths.employeeOralExamsSchedule(examSessionId, location.id));\n };\n\n const handleSchedulingWrittenExam = () => {\n history.push(routesPaths.employeeWrittenExamsSchedule(examSessionId, location.id));\n };\n\n const handleSchedulingCorrectionExam = () => {\n history.push(routesPaths.employeeCorrectionExamsSchedule(examSessionId, location.id));\n };\n\n const hasOralExams = locationHasExamType(ExamDayType.Oral);\n const hasWrittenExams = locationHasExamType(ExamDayType.Written);\n const hasCorrectionExams = locationHasExamType(ExamDayType.Correction);\n\n const additionalButtons = (\n \n {location.linkToMap && (\n }\n href={location.linkToMap}\n target=\"_blank\"\n >\n \n \n )}\n {(hasOralExams || hasWrittenExams || hasCorrectionExams) && (\n \n )}\n \n );\n\n return (\n \n \n \n \n \n {GetLocalizedName(examSession)}\n \n \n \n \n \n \n \n \n \n\n \n \n \n \n {location.id !== NewEntityId && examSessionId && (\n 0}\n isReadOnly={examSession.published}\n examDays={examSession.examDays.filter((examDay) => examDay.locationId === location.id)}\n onExamDaySelected={handleExamDaySelected}\n onStartAddingExamDay={handleStartAddingExamDay}\n />\n )}\n \n \n \n );\n};\n\nexport default ExamSessionLocationForm;\n","import TrainingProvider from \"../../model/TrainingProvider\";\nimport { ApiResponse } from \"../CustomFetch\";\nimport { api } from \"./BaseApi\";\n\nconst trainingProviderApi = api.injectEndpoints({\n endpoints: (builder) => ({\n getAllTrainingProviders: builder.query({\n query: () => \"/TrainingProvider\",\n transformResponse: (response: ApiResponse) =>\n response.data.map(\n (d) =>\n ({\n key: d.key,\n label: {\n de: d.labelDE,\n en: d.labelEN,\n fr: d.labelFR,\n it: d.labelIT,\n },\n } as TrainingProvider)\n ),\n }),\n }),\n});\n\nexport const { useGetAllTrainingProvidersQuery } = trainingProviderApi;\n\ninterface TrainingProviderRaw {\n key: string;\n labelDE: string;\n labelEN: string;\n labelFR: string;\n labelIT: string;\n}\n","import { TranslationKey } from \"../translations/TranslationKey\";\n\n// aka Fachrichtung on the backend\nexport enum OralExamOption {\n None = \"\",\n KMU = \"KMU\",\n Privathaushalte = \"Privathaushalte\",\n}\n\nexport const OralExamOptionTranslationKey: { [oralExamOption in OralExamOption]: TranslationKey } = {\n [OralExamOption.None]: \"oralExamOption.none\",\n [OralExamOption.KMU]: \"oralExamOption.kmu\",\n [OralExamOption.Privathaushalte]: \"oralExamOption.privathaushalte\",\n};\n","import download from 'downloadjs';\nimport { DocumentReferenceViewModel } from '../model/DocumentReferenceViewModel';\nimport { customFetch } from './CustomFetch';\n\nexport const downloadFile = async (fileReference: DocumentReferenceViewModel) => {\n const response = await customFetch(`file?containerId=${fileReference.containerId}&fileName=${fileReference.name}`);\n const blob = await response.blob();\n download(blob, fileReference.name);\n}\n","export const getFileAvatarImg = (filename: string) => {\n let ext = filename.substr(1 + filename.lastIndexOf('.')).toLowerCase();\n if (!['docx', 'pdf', 'xlsx'].includes(ext)) {\n ext = 'txt';\n }\n\n return \"/images/icons/\" + ext + \".png\";\n};\n","import { DocumentReferenceViewModel } from \"../../model/DocumentReferenceViewModel\";\nimport { ColumnDefinition, CustomGrid } from \"../common/customGrid/CustomGrid\";\nimport { getFileAvatarImg } from \"../taskCompletion/TaskCompletionUtilities\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\nimport Avatar from \"@material-ui/core/Avatar\";\nimport LinearProgress from \"@material-ui/core/LinearProgress\";\nimport { createStyles, withStyles, WithStyles } from \"@material-ui/core/styles\";\nimport CloudDownload from \"@material-ui/icons/CloudDownload\";\nimport DeleteForever from \"@material-ui/icons/DeleteForever\";\nimport * as React from \"react\";\n\ninterface DocumentListProps extends WithStyles {\n documents: DocumentReferenceViewModel[];\n onDeleteFile?: (file: DocumentReferenceViewModel) => Promise;\n onDownloadFile?: (file: DocumentReferenceViewModel) => void;\n}\n\nclass DocumentList extends React.PureComponent {\n constructor(props: DocumentListProps) {\n super(props);\n this.state = {};\n }\n\n public render() {\n return (\n \n columnDefinitions={this.columnsDefinitions}\n rows={this.props.documents}\n rowKey={(_) => _.id}\n addButtonTooltip=\"\"\n onAddClick={(_) => {}}\n hideAddButton={true}\n hideSearchBar={true}\n tableProps={{ size: \"small\" }}\n />\n );\n }\n\n private columnsDefinitions: Array> = [\n {\n columnKey: \"icon\",\n columnLabel: \"\",\n cellValue: (_) => ,\n isSortingDisabled: true,\n },\n { columnKey: \"fileName\", columnLabel: , cellValue: (_) => _.name },\n { columnKey: \"tools\", columnLabel: \"\", cellValue: (_) => this.getToolColumn(_), isSortingDisabled: true },\n ];\n\n private getToolColumn = (file: DocumentReferenceViewModel): JSX.Element => {\n const { classes } = this.props;\n\n return (\n \n {this.getDownloadIcon(file)}\n {this.getDeleteIcon(file)}\n {this.state.deletingFileId === file.id && }\n \n );\n };\n\n private getDownloadIcon = (file: DocumentReferenceViewModel) => {\n const { onDownloadFile } = this.props;\n if (!onDownloadFile) {\n return null;\n }\n return ;\n };\n\n private handleDownloadClick = (file: DocumentReferenceViewModel) => () => {\n const { onDownloadFile } = this.props;\n if (!onDownloadFile) {\n return null;\n }\n\n onDownloadFile(file);\n };\n\n private getDeleteIcon = (file: DocumentReferenceViewModel) => {\n const { onDeleteFile } = this.props;\n if (!onDeleteFile) {\n return null;\n }\n return ;\n };\n\n private handleDeleteClick = (file: DocumentReferenceViewModel) => (event: any) => {\n const { onDeleteFile } = this.props;\n if (!onDeleteFile) {\n return null;\n }\n this.setState({ deletingFileId: file.id }, () => onDeleteFile(file));\n };\n}\n\nconst styles = () =>\n createStyles({\n icon: {\n cursor: \"pointer\",\n },\n deleteProgressBar: {\n width: \"80%\",\n position: \"absolute\",\n bottom: \"0px\",\n left: \"10%\",\n },\n });\n\nexport default withStyles(styles)(DocumentList);\n","import { LinearProgress } from \"@material-ui/core\";\r\nimport { AttachFile } from \"@material-ui/icons\";\r\nimport React from \"react\";\r\nimport { downloadFile } from \"../../../api/FileApi\";\r\nimport { useListModuleDocumentsQuery } from \"../../../api/rtk/ExamSessionCandidateApi\";\r\nimport DocumentList from \"../../common/DocumentList\";\r\nimport TitleWithIcon from \"../../common/TitleWithIcon\";\r\nimport TranslatedMessage from \"../../translations/TranslatedMessage\";\r\n\r\ninterface ExamSessionCandidateAttachmentListProps {\r\n examSessionCandidateId: string;\r\n moduleId: string;\r\n}\r\n\r\nconst ExamSessionCandidateAttachmentList: React.FunctionComponent = ({\r\n examSessionCandidateId,\r\n moduleId,\r\n}) => {\r\n const { data: documents, isFetching } = useListModuleDocumentsQuery({ examSessionCandidateId, moduleId });\r\n return (\r\n <>\r\n } variant=\"h5\">\r\n \r\n \r\n {isFetching ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default ExamSessionCandidateAttachmentList;\r\n","import { ExamType } from \"../../../model/Exam\";\r\nimport { ExamSessionCandidateExamState } from \"../../../model/examSessionCandidate/ExamSessionCandidateExamViewModel\";\r\n\r\nexport const manualStates = [ExamSessionCandidateExamState.Passed, ExamSessionCandidateExamState.Failed];\r\nconst termPaperManualStates = [...manualStates, ExamSessionCandidateExamState.Equivalence];\r\n\r\nexport const getManualStates = (examType: ExamType) =>\r\n examType === ExamType.TermPaper ? termPaperManualStates : manualStates;\r\n","import { TimeSlotStructure, TimeSlotStructureType, TimeSlotType } from \"../../model/TimeSlotStructure\";\r\nimport { ApiResponse } from \"../CustomFetch\";\r\nimport { api } from \"./BaseApi\";\r\n\r\nconst timeSlotStructureApi = api.injectEndpoints({\r\n endpoints: (builder) => ({\r\n getTimeSlotStructure: builder.query({\r\n query: () => \"/TimeSlot\",\r\n transformResponse: (response: ApiResponse) => {\r\n setExamTimeSlotIndexes(response.data);\r\n return response.data;\r\n },\r\n }),\r\n }),\r\n});\r\n\r\nexport const { useGetTimeSlotStructureQuery } = timeSlotStructureApi;\r\n\r\nconst setExamTimeSlotIndexes = (timeSlotStructure: TimeSlotStructure): void => {\r\n Object.keys(timeSlotStructure).forEach((key) => {\r\n timeSlotStructure[key as TimeSlotStructureType]\r\n .filter((timeSlot) => timeSlot.type === undefined || timeSlot.type === TimeSlotType.Exam)\r\n .forEach((timeSlot, index) => (timeSlot.index = index + 1)); // Exam time slot index in DB starts with 1.\r\n });\r\n};\r\n","import { TimeSlot, TimeSlotStructure, TimeSlotStructureType, TimeSlotType } from \"../model/TimeSlotStructure\";\r\n\r\nexport const getExamTimeSlots = (timeSlotStructure: TimeSlotStructure, timeSlotStructureType: TimeSlotStructureType) =>\r\n timeSlotStructure[timeSlotStructureType].filter((timeSlot) => timeSlot.type === TimeSlotType.Exam);\r\n\r\nexport const getTimeSlotLabel = (timeSlot: TimeSlot) => {\r\n return `${timeSlot.startTime} - ${timeSlot.endTime}`;\r\n};\r\n\r\nexport const getExamTimeSlotLabelByIndex = (\r\n timeSlotStructure: TimeSlotStructure,\r\n timeSlotStructureType: TimeSlotStructureType,\r\n examTimeSlotIndex: number\r\n) => {\r\n const timeSlot = getExamTimeSlotByIndex(timeSlotStructure, timeSlotStructureType, examTimeSlotIndex);\r\n return timeSlot !== undefined ? getTimeSlotLabel(timeSlot) : \"\";\r\n};\r\n\r\nconst getExamTimeSlotByIndex = (\r\n timeSlotStructure: TimeSlotStructure,\r\n timeSlotStructureType: TimeSlotStructureType,\r\n examTimeSlotIndex: number\r\n): TimeSlot | undefined =>\r\n getExamTimeSlots(timeSlotStructure, timeSlotStructureType).find((timeSlot) => timeSlot.index === examTimeSlotIndex);\r\n","import { Grid } from \"@material-ui/core\";\nimport { Autorenew, Edit, Schedule } from \"@material-ui/icons\";\nimport React from \"react\";\nimport { ExamSessionCandidateExamState } from \"../../../model/examSessionCandidate/ExamSessionCandidateExamViewModel\";\nimport CustomButton from \"../../common/buttons/CustomButton\";\nimport TranslatedMessage from \"../../translations/TranslatedMessage\";\n\ninterface ExamSessionCandidateExamActionsProps {\n examState: ExamSessionCandidateExamState;\n disabled?: boolean;\n hideRebookButton?: boolean;\n hideEditStateButton?: boolean;\n hideResetStateButton?: boolean;\n rebook: () => void;\n toggleExamManualState: () => void;\n isTermPaper: boolean;\n}\n\nconst ExamSessionCandidateExamActions: React.FunctionComponent = ({\n examState,\n disabled,\n hideRebookButton,\n hideEditStateButton,\n hideResetStateButton,\n rebook,\n toggleExamManualState,\n isTermPaper\n}) => {\n const isBookedExam = examState !== ExamSessionCandidateExamState.Cancelled;\n\n if (isBookedExam) {\n return (\n \n {hideEditStateButton !== true && (\n }\n onClick={toggleExamManualState}\n disabled={disabled}\n >\n \n \n )}\n {hideResetStateButton !== true && (\n }\n onClick={toggleExamManualState}\n disabled={disabled}\n >\n \n \n )}\n {hideRebookButton !== true && !isTermPaper && (\n }\n onClick={rebook}\n disabled={disabled}\n >\n \n \n )}\n \n );\n }\n\n if (hideRebookButton) {\n return null;\n }\n\n return (\n \n }\n onClick={rebook}\n disabled={disabled}\n >\n \n \n \n );\n};\n\nexport default ExamSessionCandidateExamActions;\n","import { Grid, InputLabel, ListItem, makeStyles, MenuItem, Select } from \"@material-ui/core\";\nimport React, { useEffect, useState } from \"react\";\nimport { useIntl } from \"react-intl\";\nimport { useGetAvailableDaysQuery } from \"../../../api/rtk/ExamSessionApi\";\nimport { Language, LanguageLabels, SwissGermanLocale, SwissTimeZone } from \"../../../data/constants\";\nimport { ExamLocationViewModel, ExamLocationDayViewModel } from \"../../../model/ExamSignup/ModuleExamDetailsViewModel\";\nimport { GetTranslation } from \"../../../translations/GetTranslation\";\nimport CustomDraggableDialog from \"../../common/customDialog/CustomDraggableDialog\";\nimport FormGridCell from \"../../common/FormGridCell\";\nimport TranslatedMessage from \"../../translations/TranslatedMessage\";\nimport { ExamType } from \"../../../model/Exam\";\nimport LoadingIndicator from \"../../common/LoadingIndicator\";\n\ninterface ExamSessionCandidateExamBookDialogProps {\n opened: boolean;\n examSessionId: string;\n examId: string;\n examType: ExamType;\n language: Language;\n locationId?: string;\n examDayId?: string;\n accept: (locationId: string, examDayId: string, language: Language) => void;\n decline: () => void;\n}\n\nconst useStyles = makeStyles({\n select: {\n width: \"100%\",\n },\n});\n\nconst ExamSessionCandidateExamBookDialog: React.FC = ({\n opened,\n examSessionId,\n examId,\n examType,\n language,\n locationId,\n examDayId,\n accept,\n decline,\n}) => {\n const classes = useStyles();\n const intl = useIntl();\n const [selectedLocation, setSelectedLocation] = useState(undefined);\n const [selectedDay, setSelectedDay] = useState(undefined);\n const [selectedLanguage, setSelectedLanguage] = useState(language);\n const { data: locationViewModels, isFetching, refetch } = useGetAvailableDaysQuery({ examSessionId, examId,language: selectedLanguage });\n\n useEffect(() => {\n const locationViewModel = locationViewModels?.find((location) => location.locationId === locationId);\n setSelectedLocation(locationViewModel);\n }, [locationViewModels, locationId]);\n\n useEffect(() => {\n const dayViewModel = selectedLocation?.examDays.find((day) => day.examDayId === examDayId);\n setSelectedDay(dayViewModel);\n }, [selectedLocation, examDayId]);\n\n const handleExamDayChanged = (event: React.ChangeEvent<{ value: unknown }>) => {\n const selectedDayId = event.target.value as string;\n const dayViewModel = selectedLocation?.examDays.find((day) => day.examDayId === selectedDayId);\n setSelectedDay(dayViewModel);\n };\n\n const handleLocationChanged = (event: React.ChangeEvent<{ value: unknown }>) => {\n const selectedLocationId = event.target.value as string;\n const locationViewModel = locationViewModels?.find((location) => location.locationId === selectedLocationId);\n setSelectedLocation(locationViewModel);\n const dayViewModel = locationViewModel?.examDays[0];\n setSelectedDay(dayViewModel);\n };\n\n const handleUpdateAvailableExamDay = async () => {\n if (selectedLocation === undefined || selectedDay === undefined) {\n return;\n }\n accept(selectedLocation.locationId, selectedDay.examDayId, selectedLanguage);\n };\n\n const handleLanguageChanged = (event: React.ChangeEvent<{ name?: string; value: unknown }>) => {\n setSelectedLanguage(event.target.value as Language);\n refetch();\n };\n\n const examTypeLabel =\n examType === ExamType.Oral\n ? GetTranslation(intl, \"exam.type.oral\")\n : GetTranslation(intl, \"exam.type.written\");\n const locationAndDate = GetTranslation(intl, \"examSessionCandidate.bookingDialog.title\");\n\n return (\n }\n cancelText={}\n content={\n <>\n \n \n \n <>\n \n \n \n \n {Object.keys(Language).map((languageKey) => {\n const lang = Language[languageKey as Language];\n return (\n \n {LanguageLabels[lang]}\n \n );\n })}\n \n \n \n \n <>\n \n \n \n \n {locationViewModels?.map((location) => (\n \n {location.name}\n \n ))}\n \n \n \n \n <>\n \n \n \n \n {selectedLocation?.examDays.map((day) => (\n \n {new Date(day.date).toLocaleDateString(SwissGermanLocale, { timeZone: SwissTimeZone })}\n \n ))}\n \n \n \n \n \n \n \n }\n isOpen={opened}\n onAccept={handleUpdateAvailableExamDay}\n onCancel={decline}\n title={locationAndDate + \" - \" + examTypeLabel}\n />\n );\n};\n\nexport default ExamSessionCandidateExamBookDialog;\n","import TextField from \"@material-ui/core/TextField\";\nimport Typography from \"@material-ui/core/Typography\";\nimport React from \"react\";\nimport { ExamSessionCandidateExamState } from \"../../../model/examSessionCandidate/ExamSessionCandidateExamViewModel\";\n\ninterface ExamSessionCandidateExamGradeProps {\n disabled?: boolean;\n examState: ExamSessionCandidateExamState;\n grade?: number | null;\n gradeChange: (score?: number | null) => void;\n}\n\nconst ExamSessionCandidateExamGrade: React.FunctionComponent = ({\n disabled,\n examState,\n grade,\n gradeChange,\n}) => {\n const handleGradeChange = (event: React.ChangeEvent) => {\n const examGrade = parseFloat(event.target.value);\n gradeChange(isNaN(examGrade) ? null : examGrade);\n };\n\n if (examState === ExamSessionCandidateExamState.Cancelled) {\n return (\n \n -\n \n );\n }\n\n const value = grade === undefined || grade === null ? \"\" : grade;\n return (\n \n );\n};\n\nexport default ExamSessionCandidateExamGrade;\n","import { FormLabel, Grid, makeStyles, Typography } from \"@material-ui/core\";\nimport React, { FC } from \"react\";\nimport { TranslationKey } from \"../../../translations/TranslationKey\";\nimport TranslatedMessage from \"../../translations/TranslatedMessage\";\n\nconst useStyles = makeStyles(() => ({\n labelContainer: {\n display: \"flex\",\n alignItems: \"center\",\n },\n}));\n\ninterface ExamSessionCandidateExamRowProps {\n labelTranslationKey: TranslationKey;\n value: string | JSX.Element;\n}\n\nconst ExamSessionCandidateExamRow: FC = ({ labelTranslationKey, value }) => {\n const classes = useStyles();\n return (\n <>\n \n \n \n \n \n \n \n \n {value}\n \n \n );\n};\n\nexport default ExamSessionCandidateExamRow;\n","import TextField from \"@material-ui/core/TextField\";\nimport Typography from \"@material-ui/core/Typography\";\nimport React from \"react\";\nimport { ExamSessionCandidateExamState } from \"../../../model/examSessionCandidate/ExamSessionCandidateExamViewModel\";\n\ninterface ExamSessionCandidateExamScoreProps {\n disabled?: boolean;\n examState: ExamSessionCandidateExamState;\n score?: number | null;\n scoreChange: (score?: number | null) => void;\n}\n\nconst ExamSessionCandidateExamScore: React.FunctionComponent = ({\n disabled,\n examState,\n score,\n scoreChange,\n}) => {\n const handleScoreChange = (event: React.ChangeEvent) => {\n const examScore = parseFloat(event.target.value);\n scoreChange(isNaN(examScore) ? null : examScore);\n };\n\n if (examState === ExamSessionCandidateExamState.Cancelled) {\n return (\n \n -\n \n );\n }\n\n const value = score === undefined || score === null ? \"\" : score;\n return (\n \n );\n};\n\nexport default ExamSessionCandidateExamScore;\n","import { Card, CardContent, CardHeader, Grid, makeStyles, MenuItem, Select, Typography } from \"@material-ui/core\";\nimport React, { useState } from \"react\";\nimport { useIntl } from \"react-intl\";\nimport { useReBookCandidateExamMutation } from \"../../../api/rtk/ExamSessionCandidateApi\";\nimport { useGetTimeSlotStructureQuery } from \"../../../api/rtk/TimeSlotStructureApi\";\nimport { Language, SwissGermanLocale, SwissTimeZone } from \"../../../data/constants\";\nimport { ExamType, ExamTypeTranslationKey } from \"../../../model/Exam\";\nimport {\n ExamSessionCandidateExamState,\n ExamSessionCandidateExamStateTranslationKey,\n ExamSessionCandidateExamViewModel,\n} from \"../../../model/examSessionCandidate/ExamSessionCandidateExamViewModel\";\nimport { ExamSessionCandidateViewModel } from \"../../../model/examSessionCandidate/ExamSessionCandidateViewModel\";\nimport { ReBookCandidateExamRequestModel } from \"../../../model/examSessionCandidate/ReBookCandidateExamRequestModel\";\nimport { ExamSessionViewModel } from \"../../../model/ExamSessionViewModel\";\nimport { GetTranslatedValueIntl } from \"../../../model/Shared/TranslatedValue\";\nimport { getExamTimeSlotLabelByIndex } from \"../../../utils/TimeSlotUtils\";\nimport FormGridCell from \"../../common/FormGridCell\";\nimport TranslatedMessage from \"../../translations/TranslatedMessage\";\nimport { getManualStates } from \"./ExamSessionCandidateConstants\";\nimport ExamSessionCandidateExamActions from \"./ExamSessionCandidateExamActions\";\nimport ExamSessionCandidateExamBookDialog from \"./ExamSessionCandidateExamBookDialog\";\nimport ExamSessionCandidateExamGrade from \"./ExamSessionCandidateExamGrade\";\nimport ExamSessionCandidateExamRow from \"./ExamSessionCandidateExamRow\";\nimport ExamSessionCandidateExamScore from \"./ExamSessionCandidateExamScore\";\nimport { CandidateModuleState } from \"../../../model/examSessionCandidate/CandidateModuleState\";\n\nconst useStyles = makeStyles(() => ({\n conainer: {\n width: \"100%\",\n },\n labelContainer: {\n display: \"flex\",\n alignItems: \"center\",\n },\n editExamStateButtonContainer: {\n marginLeft: 8,\n },\n stateSelect: {\n minWidth: 150,\n },\n stateLabel: {\n display: \"inline\",\n },\n}));\n\nexport interface ExamSessionCandidateExamCallbacks {\n toggleExamManualState: (moduleId: string, examId: string) => void;\n manualExamStateChange: (moduleId: string, examId: string, state: ExamSessionCandidateExamState) => void;\n examScoreChange: (moduleId: string, examId: string, score?: number | null) => void;\n examGradeChange: (moduleId: string, examId: string, grade?: number | null) => void;\n}\n\ninterface ExamSessionCandidateExamProps extends ExamSessionCandidateExamCallbacks {\n examSession: ExamSessionViewModel;\n examSessionCandidate: ExamSessionCandidateViewModel;\n candidateExam: ExamSessionCandidateExamViewModel;\n}\n\nconst ExamSessionCandidateExam: React.FC = ({\n examSession,\n examSessionCandidate,\n candidateExam,\n manualExamStateChange,\n toggleExamManualState,\n examScoreChange,\n examGradeChange,\n}) => {\n const classes = useStyles();\n const intl = useIntl();\n const { data: timeSlotStructure } = useGetTimeSlotStructureQuery();\n const [rebookCandidateExam, { isLoading: isReBookCandidateExamLoading }] = useReBookCandidateExamMutation();\n const [isLocationDateDialogOpen, setIsLocationDateDialogOpen] = useState(false);\n\n const exam = examSession.exams.find((exam) => exam.id === candidateExam.examId);\n const day = examSession.examDays.find((day) => day.id === candidateExam.examDayId);\n const roomAssignment = day?.roomAssignments.find((roomAssignment) => roomAssignment.roomId === candidateExam.roomId);\n const location = examSession.locations.find((location) => location.id === day?.locationId);\n\n if (exam === undefined) {\n return <>;\n }\n\n const isBookedExam = candidateExam.state !== ExamSessionCandidateExamState.Cancelled;\n const isTermPaper = exam.type === ExamType.TermPaper;\n const none = \"-\";\n const examName = GetTranslatedValueIntl(intl, exam.name);\n const locationName = isBookedExam && location !== undefined ? location.name : none;\n const date =\n isBookedExam && day !== undefined\n ? new Date(day.date).toLocaleDateString(SwissGermanLocale, { timeZone: SwissTimeZone })\n : none;\n const room = location?.rooms.find((room) => room.id === roomAssignment?.roomId);\n const roomName = isBookedExam && room !== undefined ? room.name : none;\n const preparationRoomAssignment = day?.roomAssignments.find((roomAssignment) => roomAssignment.isPreparationRoom);\n const preparationRoom = location?.rooms.find((room) => room.id === preparationRoomAssignment?.roomId);\n const preparationRoomName = isBookedExam && preparationRoom !== undefined ? preparationRoom.name : none;\n const timeSlotLabel =\n isBookedExam && timeSlotStructure !== undefined && day !== undefined\n ? getExamTimeSlotLabelByIndex(timeSlotStructure, day.timeSlotStructureType, candidateExam.timeSlotIndex)\n : none;\n const isCancelled = candidateExam.state === ExamSessionCandidateExamState.Cancelled;\n const module = examSessionCandidate.modules.find((m) => m.moduleId === candidateExam.moduleId);\n const roomLanguages = roomAssignment?.languages.join(\", \");\n\n const handleToggleExamManualState = () => toggleExamManualState(candidateExam.moduleId, candidateExam.examId);\n\n const handleRebook = async () => {\n if (isTermPaper) {\n await rebookExam();\n } else {\n setIsLocationDateDialogOpen(true);\n }\n };\n\n const handleManualStateChange = (event: React.ChangeEvent<{ value: unknown }>) =>\n manualExamStateChange(\n candidateExam.moduleId,\n candidateExam.examId,\n event.target.value as ExamSessionCandidateExamState\n );\n\n const handleScoreChange = (score?: number | null) =>\n examScoreChange(candidateExam.moduleId, candidateExam.examId, score);\n\n const handleGradeChange = (grade?: number | null) =>\n examGradeChange(candidateExam.moduleId, candidateExam.examId, grade);\n\n const handleAcceptRebook = async (locationId: string, examDayId: string, language: Language) =>\n await rebookExam({ locationId, examDayId, language });\n\n const rebookExam = async (data?: ReBookCandidateExamRequestModel) =>\n rebookCandidateExam({\n examSessionCandidateId: examSessionCandidate.id,\n moduleId: candidateExam.moduleId,\n examId: exam.id,\n data,\n });\n\n const { isManualState } = candidateExam;\n const stateRow = (\n \n {!isManualState && (\n \n \n \n )}\n {isManualState && (\n \n )}\n \n }\n />\n );\n\n const locationRow = !isTermPaper && (\n {locationName} ({roomLanguages})} />\n );\n\n const examDateRow = !isTermPaper && (\n {date}}\n />\n );\n\n const roomRow = !isTermPaper && (\n {roomName}}\n />\n );\n\n const preparationRoomRow = exam.type === ExamType.Oral && (\n {preparationRoomName}}\n />\n );\n\n const timeSlotRow = !isTermPaper && (\n {timeSlotLabel}}\n />\n );\n\n const gradeRow = (\n \n }\n />\n );\n\n const pointsRow = (\n \n }\n />\n );\n\n return (\n \n \n \n }\n action={\n \n }\n />\n \n \n {stateRow}\n {!isCancelled && (\n <>\n {locationRow}\n {examDateRow}\n {roomRow}\n {preparationRoomRow}\n {timeSlotRow}\n {gradeRow}\n {pointsRow}\n \n )}\n \n \n \n \n {isLocationDateDialogOpen && (\n setIsLocationDateDialogOpen(false)}\n />\n )}\n \n );\n};\n\nexport default ExamSessionCandidateExam;\n","import {\n Card,\n CardContent,\n CardHeader,\n FormControlLabel,\n makeStyles,\n Radio,\n RadioGroup,\n TextField,\n} from \"@material-ui/core\";\nimport React, { useState } from \"react\";\nimport { useIntl } from \"react-intl\";\nimport {\n ExamSessionCandidateExamState,\n ExamSessionCandidateExamViewModel,\n} from \"../../../model/examSessionCandidate/ExamSessionCandidateExamViewModel\";\nimport { ExamSessionCandidateViewModel } from \"../../../model/examSessionCandidate/ExamSessionCandidateViewModel\";\nimport { ExamSessionViewModel } from \"../../../model/ExamSessionViewModel\";\nimport { GetTranslatedValueIntl } from \"../../../model/Shared/TranslatedValue\";\nimport { Book, EventBusy } from \"@material-ui/icons\";\nimport { ExamSessionCandidateModuleViewModel } from \"../../../model/examSessionCandidate/ExamSessionCandidateModuleViewModel\";\nimport ExamSessionCandidateExam from \"./ExamSessionCandidateExam\";\nimport CustomButton from \"../../common/buttons/CustomButton\";\nimport TranslatedMessage from \"../../translations/TranslatedMessage\";\nimport CustomDraggableDialog from \"../../common/customDialog/CustomDraggableDialog\";\nimport { CandidateModuleState } from \"../../../model/examSessionCandidate/CandidateModuleState\";\nimport TitleWithIcon from \"../../common/TitleWithIcon\";\nimport { SwissGermanLocale, SwissTimeZone } from \"../../../data/constants\";\nimport { GetTranslation } from \"../../../translations/GetTranslation\";\n\nconst useStyles = makeStyles((theme) => ({\n labelContainer: {\n display: \"flex\",\n alignItems: \"center\",\n },\n editExamStateButtonContainer: {\n marginLeft: 8,\n },\n stateSelect: {\n minWidth: 150,\n },\n stateLabel: {\n display: \"inline\",\n },\n moduleContainer: {\n marginBottom: \"1rem\",\n padding: theme.spacing(2),\n margin: theme.spacing(2),\n display: \"flex\",\n flexDirection: \"column\",\n width: \"100%\",\n gap: theme.spacing(2) + \"px\",\n },\n moduleTitle: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n width: \"100%\",\n },\n moduleCancel: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: theme.spacing(1) + \"px\",\n },\n radio: {\n marginLeft: theme.spacing(4),\n textTransform: \"capitalize\",\n },\n}));\n\nexport interface ExamSessionCandidateModuleCallbacks {\n toggleExamManualState: (moduleId: string, examId: string) => void;\n manualExamStateChange: (moduleId: string, examId: string, state: ExamSessionCandidateExamState) => void;\n examScoreChange: (moduleId: string, examId: string, score?: number | null) => void;\n examGradeChange: (moduleId: string, examId: string, grade?: number | null) => void;\n}\n\ninterface ExamSessionCandidateModuleProps extends ExamSessionCandidateModuleCallbacks {\n module: ExamSessionCandidateModuleViewModel;\n exams: ExamSessionCandidateExamViewModel[];\n examSession: ExamSessionViewModel;\n examSessionCandidate: ExamSessionCandidateViewModel;\n onCancelModule: (module: ExamSessionCandidateModuleViewModel) => void;\n onRebookModule: (module: ExamSessionCandidateModuleViewModel) => void;\n}\n\nconst ExamSessionCandidateModule: React.FC = ({\n module,\n exams,\n examSession,\n examSessionCandidate,\n onCancelModule,\n onRebookModule,\n ...callbacks\n}) => {\n const classes = useStyles();\n const intl = useIntl();\n const [showCancelDialog, setShowCancelDialog] = useState(false);\n const [comments, setComments] = useState(\"\");\n const [candidateWillGetRefund, setCandidateWillGetRefund] = useState(null);\n\n const handleCancelModule = () => {\n setShowCancelDialog(false);\n const moduleToCancel: ExamSessionCandidateModuleViewModel = {\n ...module,\n comments,\n candidateWillGetRefund: candidateWillGetRefund === true,\n };\n onCancelModule(moduleToCancel);\n };\n\n if (module === undefined || exams.length === 0) {\n return null;\n }\n\n return (\n <>\n \n \n \n \n \n {module.state === CandidateModuleState.Cancelled && (\n <>\n \n \n \n }\n onClick={() => onRebookModule(module)}\n >\n \n \n \n )}\n
\n }\n action={\n module.state !== CandidateModuleState.Cancelled ? (\n }\n onClick={() => setShowCancelDialog(true)}\n >\n \n \n ) : (\n <>\n )\n }\n />\n \n <>\n {exams.map((candidateExam) => (\n \n ))}\n \n \n \n {showCancelDialog && (\n }\n content={\n
\n
\n \n  \n {new Date(examSession.freeCancellationEndDate).toLocaleDateString(SwissGermanLocale, {\n timeZone: SwissTimeZone,\n })}\n
\n
\n \n {\n setCandidateWillGetRefund(e.target.value === \"true\");\n }}\n >\n } label={} />\n } label={} />\n \n
\n
\n setComments(e.target.value)}\n />\n
\n
\n \n
\n
\n }\n isOpen={true}\n cancelText={}\n acceptText={}\n onCancel={() => setShowCancelDialog(false)}\n onAccept={handleCancelModule}\n acceptDisabled={candidateWillGetRefund === null}\n >\n )}\n \n );\n};\n\nexport default ExamSessionCandidateModule;\n","import { LinearProgress } from \"@material-ui/core\";\nimport React from \"react\";\nimport { useGetExamSessionQuery } from \"../../../api/rtk/ExamSessionApi\";\nimport { ExamSessionCandidateViewModel } from \"../../../model/examSessionCandidate/ExamSessionCandidateViewModel\";\nimport ExamSessionCandidateModule from \"./ExamSessionCandidateModule\";\nimport { ExamSessionCandidateExamCallbacks } from \"./ExamSessionCandidateExam\";\nimport { ExamSessionCandidateModuleViewModel } from \"../../../model/examSessionCandidate/ExamSessionCandidateModuleViewModel\";\n\ninterface ExamSessionCandidateModulesProps extends ExamSessionCandidateExamCallbacks {\n examSessionCandidate: ExamSessionCandidateViewModel;\n moduleId: string;\n onCancelModule: (module: ExamSessionCandidateModuleViewModel) => void;\n onRebookModule: (module: ExamSessionCandidateModuleViewModel) => void;\n}\n\nconst ExamSessionCandidateModules: React.FunctionComponent = ({\n examSessionCandidate,\n moduleId,\n onCancelModule,\n onRebookModule,\n ...callbacks\n}) => {\n const { data: examSession, isFetching } = useGetExamSessionQuery(examSessionCandidate.examSessionId);\n const exams = examSessionCandidate?.exams.filter((exam) => exam.moduleId === moduleId);\n\n const modules = examSessionCandidate.modules;\n\n return (\n <>\n {isFetching && }\n {!isFetching &&\n examSession !== undefined &&\n modules.map((module) => (\n e.moduleId === module.moduleId)}\n examSession={examSession}\n examSessionCandidate={examSessionCandidate}\n onCancelModule={onCancelModule}\n onRebookModule={onRebookModule}\n {...callbacks}\n />\n ))}\n \n );\n};\n\nexport default ExamSessionCandidateModules;\n","import { Checkbox, FormLabel, Grid, makeStyles, MenuItem, Select, Typography } from \"@material-ui/core\";\r\nimport { AssignmentInd, Block } from \"@material-ui/icons\";\r\nimport CheckCircleOutlineIcon from \"@material-ui/icons/CheckCircleOutline\";\r\nimport React from \"react\";\r\nimport { useIntl } from \"react-intl\";\r\nimport { LanguageTranslationKeys } from \"../../../data/constants\";\r\nimport {\r\n CandidateModuleState,\r\n CandidateModuleStateTranslationKey,\r\n} from \"../../../model/examSessionCandidate/CandidateModuleState\";\r\nimport { ExamSessionCandidateModuleViewModel } from \"../../../model/examSessionCandidate/ExamSessionCandidateModuleViewModel\";\r\nimport { ExamSessionCandidateViewModel } from \"../../../model/examSessionCandidate/ExamSessionCandidateViewModel\";\r\nimport { OralExamOption, OralExamOptionTranslationKey } from \"../../../model/OralExamOption\";\r\nimport { GetTranslatedValueIntl } from \"../../../model/Shared/TranslatedValue\";\r\nimport TrainingProvider from \"../../../model/TrainingProvider\";\r\nimport { TranslationKey } from \"../../../translations/TranslationKey\";\r\nimport CustomButton from \"../../common/buttons/CustomButton\";\r\nimport FormGridCell from \"../../common/FormGridCell\";\r\nimport TitleWithIcon from \"../../common/TitleWithIcon\";\r\nimport TranslatedMessage from \"../../translations/TranslatedMessage\";\r\nimport PaymentStatus from \"../../common/payment/PaymentStatus\";\r\nimport { PaymentState } from \"../../payment/PaymentConstants\";\r\n\r\ninterface ExamSessionCandidateInfoProps {\r\n examSessionCandidate: ExamSessionCandidateViewModel;\r\n module: ExamSessionCandidateModuleViewModel;\r\n trainingProviders: TrainingProvider[];\r\n refundStatusChange: (value: boolean) => void;\r\n optionChange: (value: OralExamOption) => void;\r\n trainingProviderChange: (value: string) => void;\r\n isRepeatingChange: (value: boolean) => void;\r\n publishResultsToEmployerChange: (value: boolean) => void;\r\n validateModule: (approved: boolean) => void;\r\n}\r\n\r\ninterface FormRowProps {\r\n titleId: any;\r\n}\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n labelContainer: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n },\r\n checkbox: {\r\n marginLeft: -12,\r\n },\r\n verificationButtons: {\r\n marginLeft: -7,\r\n },\r\n rejected: {\r\n marginLeft: theme.spacing(1),\r\n },\r\n}));\r\n\r\nconst isRepeatingFalseValue = 0;\r\nconst isRepeatingTrueValue = 1;\r\n\r\nconst ExamSessionCandidateInfo: React.FunctionComponent = ({\r\n examSessionCandidate,\r\n module,\r\n trainingProviders,\r\n refundStatusChange,\r\n optionChange,\r\n trainingProviderChange,\r\n isRepeatingChange,\r\n publishResultsToEmployerChange,\r\n validateModule,\r\n}) => {\r\n const classes = useStyles();\r\n const intl = useIntl();\r\n const moduleName = GetTranslatedValueIntl(intl, module.name);\r\n\r\n const handleRefundStatusChange = (event: React.ChangeEvent<{ value: unknown }>) =>\r\n refundStatusChange(event.target.value as boolean);\r\n\r\n const handleOptionChange = (event: React.ChangeEvent<{ value: unknown }>) =>\r\n optionChange(event.target.value as OralExamOption);\r\n\r\n const handleTrainingProviderChange = (event: React.ChangeEvent<{ value: unknown }>) =>\r\n trainingProviderChange(event.target.value as string);\r\n\r\n const handleIsRepeatingChange = (event: React.ChangeEvent<{ value: unknown }>) =>\r\n isRepeatingChange((event.target.value as number) === isRepeatingTrueValue);\r\n\r\n const handlePublishResultsToEmployerChange = (event: React.ChangeEvent<{ value: unknown }>, checked: boolean) =>\r\n publishResultsToEmployerChange(checked);\r\n\r\n const handleApproveModule = () => validateModule(true);\r\n\r\n const handleRejectModule = () => validateModule(false);\r\n\r\n const getAverageGrade = () => {\r\n const { averageGrade } = module;\r\n return averageGrade === null || averageGrade === undefined ? \"-\" : averageGrade;\r\n };\r\n\r\n const getIsRepeatingValue = () => {\r\n if (module.isRepeating === undefined) {\r\n return undefined;\r\n }\r\n\r\n return module.isRepeating ? isRepeatingTrueValue : isRepeatingFalseValue;\r\n };\r\n\r\n const FormGridRow: React.FC = ({ titleId, children }) => {\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {children}\r\n \r\n \r\n \r\n \r\n );\r\n };\r\n\r\n return (\r\n <>\r\n } variant=\"h5\">\r\n \r\n \r\n \r\n \r\n {`${examSessionCandidate.firstName} ${examSessionCandidate.lastName}`}\r\n \r\n {module.abacusDebtorNumber}\r\n {examSessionCandidate.email}\r\n \r\n \r\n \r\n {examSessionCandidate.employer}\r\n \r\n {module.paymentState === PaymentState.Abacus ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n {CandidateModuleStateTranslationKey[module.state] && (\r\n <>\r\n \r\n {module.isRejected && (\r\n \r\n ()\r\n \r\n )}\r\n \r\n )}\r\n \r\n {getAverageGrade()}\r\n {moduleName}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n {module.state === CandidateModuleState.VerificationRequired && (\r\n \r\n \r\n } onClick={handleApproveModule}>\r\n \r\n \r\n } onClick={handleRejectModule}>\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default ExamSessionCandidateInfo;\r\n","import { Grid, makeStyles } from \"@material-ui/core\";\r\nimport LinearProgress from \"@material-ui/core/LinearProgress\";\r\nimport { School } from \"@material-ui/icons\";\r\nimport produce from \"immer\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router\";\r\nimport {\r\n useApproveCandidateModuleMutation,\r\n useCancelCandidateModuleMutation,\r\n useGetExamSessionCandidateByIdQuery,\r\n useRebookCandidateModuleMutation,\r\n useRejectCandidateModuleMutation,\r\n useUpdateCandidateModuleMutation,\r\n} from \"../../../api/rtk/ExamSessionCandidateApi\";\r\nimport { useGetAllTrainingProvidersQuery } from \"../../../api/rtk/TrainingProviderApi\";\r\nimport {\r\n ExamSessionCandidateExamState,\r\n ExamSessionCandidateExamViewModel,\r\n} from \"../../../model/examSessionCandidate/ExamSessionCandidateExamViewModel\";\r\nimport { ExamSessionCandidateModuleViewModel } from \"../../../model/examSessionCandidate/ExamSessionCandidateModuleViewModel\";\r\nimport { OralExamOption } from \"../../../model/OralExamOption\";\r\nimport DefaultButtons from \"../../common/buttons/DefaultButtons\";\r\nimport TitleWithIcon from \"../../common/TitleWithIcon\";\r\nimport ExamSessionCandidateAttachmentList from \"./ExamSessionCandidateAttachmentList\";\r\nimport { manualStates } from \"./ExamSessionCandidateConstants\";\r\nimport ExamSessionCandidateModules from \"./ExamSessionCandidateModules\";\r\nimport ExamSessionCandidateInfo from \"./ExamSessionCandidateInfo\";\r\n\r\nconst useStyles = makeStyles(() => ({\r\n infoRow: {\r\n marginBottom: \"2rem\",\r\n },\r\n}));\r\n\r\nconst ExamSessionCandidateForm: React.FC = () => {\r\n const classes = useStyles();\r\n const history = useHistory();\r\n const { examSessionCandidateId, moduleId } = useParams<{ examSessionCandidateId: string; moduleId: string }>();\r\n const [updateCandidateModule, { isLoading: isUpdateModuleLoading }] = useUpdateCandidateModuleMutation();\r\n const [approveCandidateModule, { isLoading: isApproveModuleLoading }] = useApproveCandidateModuleMutation();\r\n const [rejectCandidateModule, { isLoading: isRejectModuleLoading }] = useRejectCandidateModuleMutation();\r\n const { data: originalExamSessionCandidate, isFetching: isExamSessionCandidateFetching } =\r\n useGetExamSessionCandidateByIdQuery(examSessionCandidateId);\r\n const { data: trainingProviders, isFetching: isTrainingProvidersFetching } = useGetAllTrainingProvidersQuery();\r\n const [cancelModuleForCandidate, { isLoading: isCancellingModule }] = useCancelCandidateModuleMutation();\r\n const [rebookModuleForCandidate, { isLoading: isRebookingModule }] = useRebookCandidateModuleMutation();\r\n\r\n const isLoading =\r\n isExamSessionCandidateFetching ||\r\n isUpdateModuleLoading ||\r\n isTrainingProvidersFetching ||\r\n isApproveModuleLoading ||\r\n isRejectModuleLoading ||\r\n isCancellingModule ||\r\n isRebookingModule;\r\n\r\n const [examSessionCandidate, setExamSessionCandidate] = useState(originalExamSessionCandidate);\r\n\r\n const module = examSessionCandidate?.modules.find((module) => module.moduleId === moduleId);\r\n\r\n useEffect(() => {\r\n setExamSessionCandidate(() => originalExamSessionCandidate);\r\n }, [originalExamSessionCandidate]);\r\n\r\n if (isLoading) {\r\n return ;\r\n }\r\n\r\n if (examSessionCandidate === undefined || module === undefined || trainingProviders === undefined) {\r\n return <>;\r\n }\r\n\r\n const handleManualExamStateChange = (moduleId: string, examId: string, state: ExamSessionCandidateExamState) =>\r\n changeExamProperties(\"state\", state, moduleId, examId);\r\n\r\n const handleToggleExamManualState = (moduleId: string, examId: string) => {\r\n setExamSessionCandidate((prevExamSessionCandidate) =>\r\n produce(prevExamSessionCandidate, (draftExamSessionCandidate) => {\r\n const exam = draftExamSessionCandidate?.exams.find(\r\n (exam) => exam.moduleId === moduleId && exam.examId === examId\r\n );\r\n if (exam === undefined) {\r\n return;\r\n }\r\n\r\n exam.isManualState = !exam.isManualState;\r\n if (!exam.isManualState) {\r\n exam.state = ExamSessionCandidateExamState.Booked;\r\n } else {\r\n exam.state = manualStates.includes(exam.state) ? exam.state : manualStates[0];\r\n }\r\n\r\n exam.score = undefined;\r\n exam.grade = undefined;\r\n })\r\n );\r\n };\r\n\r\n const handleScoreChange = (moduleId: string, examId: string, score?: number | null) => {\r\n changeExamProperties(\"score\", score, moduleId, examId);\r\n };\r\n\r\n const handleGradeChange = (moduleId: string, examId: string, grade?: number | null) => {\r\n changeExamProperties(\"grade\", grade, moduleId, examId);\r\n };\r\n\r\n const changeExamProperties = (\r\n propertyName: keyof ExamSessionCandidateExamViewModel,\r\n value: any,\r\n moduleId: string,\r\n examId: string\r\n ) => {\r\n setExamSessionCandidate((prevExamSessionCandidate) =>\r\n produce(prevExamSessionCandidate, (draftExamSessionCandidate) => {\r\n const exam = draftExamSessionCandidate?.exams.find(\r\n (exam) => exam.examId === examId && exam.moduleId === moduleId\r\n );\r\n if (exam !== undefined) {\r\n exam[propertyName] = value as never;\r\n }\r\n })\r\n );\r\n };\r\n\r\n const handleSave = async () => {\r\n const exams = examSessionCandidate.exams\r\n .filter((exam) => exam.state !== ExamSessionCandidateExamState.Cancelled)\r\n .map((exam) => ({\r\n examId: exam.examId,\r\n score: exam.score,\r\n grade: exam.grade,\r\n state: exam.isManualState ? exam.state : undefined,\r\n }));\r\n updateCandidateModule({\r\n examSessionCandidateId,\r\n moduleId: module.moduleId,\r\n data: {\r\n publishResultsToEmployer: examSessionCandidate.publishResultsToEmployer,\r\n option: module.option,\r\n trainingProvider: module.trainingProvider,\r\n isRepeating: module.isRepeating,\r\n refundStatus: module.refundStatus,\r\n exams,\r\n },\r\n });\r\n };\r\n\r\n const changeModule = (propertyName: keyof ExamSessionCandidateModuleViewModel, value: never) => {\r\n setExamSessionCandidate((prevExamSessionCandidate) =>\r\n produce(prevExamSessionCandidate, (draftExamSessionCandidate) => {\r\n const currentModule = draftExamSessionCandidate?.modules.find((module) => module.moduleId === moduleId);\r\n if (currentModule !== undefined) {\r\n currentModule[propertyName] = value;\r\n }\r\n })\r\n );\r\n };\r\n\r\n const handleRefundStatusChange = (refundStatus: boolean) => {\r\n changeModule(\"refundStatus\", refundStatus as never);\r\n };\r\n\r\n const handleOptionChange = (option: OralExamOption) => {\r\n changeModule(\"option\", option as never);\r\n };\r\n\r\n const handleTrainingProviderChange = (trainingProviderKey: string) => {\r\n changeModule(\"trainingProvider\", trainingProviderKey as never);\r\n };\r\n\r\n const handleIsRepeatingChange = (isRepeating: boolean) => {\r\n changeModule(\"isRepeating\", isRepeating as never);\r\n };\r\n\r\n const handlePublishResultsToEmployerChange = (publishResultsToEmployer: boolean) => {\r\n setExamSessionCandidate((prevExamSessionCandidate) =>\r\n produce(prevExamSessionCandidate, (draftExamSessionCandidate) => {\r\n if (draftExamSessionCandidate) {\r\n draftExamSessionCandidate.publishResultsToEmployer = publishResultsToEmployer;\r\n }\r\n })\r\n );\r\n };\r\n\r\n const handleValidateModule = (approved: boolean) => {\r\n const data = {\r\n examSessionCandidateId,\r\n moduleId,\r\n };\r\n approved ? approveCandidateModule(data) : rejectCandidateModule(data);\r\n };\r\n\r\n const handleCancelModule = async (module: ExamSessionCandidateModuleViewModel) => {\r\n await cancelModuleForCandidate({\r\n examSessionCandidateId,\r\n moduleId: module.moduleId,\r\n candidateWillGetRefund: module.candidateWillGetRefund,\r\n comments: module.comments,\r\n }).unwrap();\r\n };\r\n\r\n const handleRebookModule = (module: ExamSessionCandidateModuleViewModel) => {\r\n rebookModuleForCandidate({ examSessionCandidateId, moduleId: module.moduleId });\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n history.goBack()} isDeleteButtonVisible={false} />\r\n \r\n \r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default ExamSessionCandidateForm;\r\n","import React from \"react\";\r\nimport { Language } from \"../../../data/constants\";\r\nimport { ExamSessionCandidateExamState } from \"../../../model/examSessionCandidate/ExamSessionCandidateExamViewModel\";\r\nimport { OralExamOption } from \"../../../model/OralExamOption\";\r\n\r\nexport interface SchedulerCandidate {\r\n candidateId: string;\r\n firstName: string;\r\n lastName: string;\r\n language: Language;\r\n}\r\n\r\nexport interface SchedulerExamCandidate {\r\n candidateId: string;\r\n examId: string;\r\n examState: ExamSessionCandidateExamState;\r\n moduleOption: OralExamOption;\r\n examDayId: string;\r\n roomId: string;\r\n timeSlotIndex: number;\r\n caseName?: string;\r\n}\r\n\r\nexport interface SchedulerCandidateContext {\r\n isValid: boolean;\r\n schedulerCandidates: SchedulerCandidate[];\r\n schedulerExamCandidates: SchedulerExamCandidate[];\r\n addCandidate: (candidateId: string, examId: string, examDayId: string, roomId: string, timeSlotIndex: number) => void;\r\n removeCandidate: (candidateId: string, examId: string) => void;\r\n clearCandidates: (examDayId: string, roomId: string, timeSlotIndex: number) => void;\r\n}\r\n\r\nexport const initialSchedulerCandidateContextValue: SchedulerCandidateContext = {\r\n isValid: true,\r\n schedulerCandidates: [],\r\n schedulerExamCandidates: [],\r\n addCandidate: (candidateId: string, examId: string, examDayId: string, roomId: string, timeSlotIndex: number) => {},\r\n removeCandidate: (candidateId: string, examId: string) => {},\r\n clearCandidates: (examDayId: string, roomId: string, timeSlotIndex: number) => {},\r\n};\r\n\r\nexport const SchedulerCandidateContextValue = React.createContext(\r\n initialSchedulerCandidateContextValue\r\n);\r\n","import React from \"react\";\r\n\r\nexport interface ExamCandidateCaseName {\r\n candidateId: string;\r\n examId: string;\r\n caseName?: string;\r\n}\r\n\r\nexport interface SchedulerCaseNameContext {\r\n examCandidateCaseNames: ExamCandidateCaseName[];\r\n updateCaseName: (candidateId: string, examId: string, caseName: string) => void;\r\n}\r\n\r\nexport const initialSchedulerCaseNameContextValue: SchedulerCaseNameContext = {\r\n examCandidateCaseNames: [],\r\n updateCaseName: (candidateId: string, examId: string, caseName: string) => {},\r\n};\r\n\r\nexport const SchedulerCaseNameContextValue = React.createContext(\r\n initialSchedulerCaseNameContextValue\r\n);\r\n","import React from \"react\";\nimport { AssignedUserViewModel } from \"../../../model/AssignedUserViewModel\";\nimport { ExpertAssignmentRequestModel } from \"../../../model/ExpertAssignmentRequestModel\";\n\nexport interface SchedulerRoomExperts {\n examDayId: string;\n expertAssignments: ExpertAssignmentRequestModel[];\n}\n\nexport interface SchedulerExpertContext {\n schedulerExperts: SchedulerRoomExperts[];\n changeExpert: (\n examDayId: string,\n roomId: string\n ) => (areFixed: boolean, selectedExperts: AssignedUserViewModel[]) => void;\n}\n\nexport const initialSchedulerExpertContextValue: SchedulerExpertContext = {\n schedulerExperts: [],\n changeExpert:\n (examDayId: string, roomId: string) => (areFixed: boolean, selectedExperts: AssignedUserViewModel[]) => {},\n};\n\nexport const SchedulerExpertContextValue = React.createContext(\n initialSchedulerExpertContextValue\n);\n","import React from \"react\";\nimport { ExamType, ExamTemplateWithStructureIndex } from \"../../../model/Exam\";\nimport { ExamDayViewModel } from \"../../../model/ExamDayViewModel\";\nimport { ExamSessionViewModel } from \"../../../model/ExamSessionViewModel\";\nimport { LocationViewModel } from \"../../../model/LocationViewModel\";\nimport { RoomViewModel } from \"../../../model/RoomViewModel\";\nimport { TimeSlot, TimeSlotStructure } from \"../../../model/TimeSlotStructure\";\n\nexport interface SchedulerContext {\n examTypes: ExamType[];\n readonly: boolean;\n examSession: ExamSessionViewModel | undefined;\n examSessionLabel: string;\n selectedLocationName: string;\n isSessionPublished: boolean;\n selectedExamDayId: string;\n locations: LocationViewModel[];\n examDays: ExamDayViewModel[];\n rooms: RoomViewModel[];\n exams: ExamTemplateWithStructureIndex[];\n timeSlotStructure: TimeSlotStructure;\n addTimeSlotExam: (roomId: string, examId: string, timeSlotIndex: number) => void;\n removeTimeSlotExam: (roomId: string, examId: string, timeSlotIndex: number) => void;\n clearTimeSlotExams: (roomId: string, timeSlotIndex: number) => void;\n setAllTimeSlotsExams: (roomId: string, examIds: string[]) => void;\n changeSelectedExamDay: (examDayId: string) => void;\n save: () => void;\n navigateToSession: () => void;\n renderCell?: (examIds: string[], room: RoomViewModel, timeSlotIndex: number, key?: string) => JSX.Element | null;\n renderTimeSlotLabel?: (timeSlot: TimeSlot) => JSX.Element | null;\n}\n\nexport const initialSchedulerContextValue: SchedulerContext = {\n examTypes: [],\n readonly: false,\n examSession: {} as ExamSessionViewModel,\n examSessionLabel: \"\",\n selectedLocationName: \"\",\n isSessionPublished: false,\n selectedExamDayId: \"\",\n locations: [],\n examDays: [],\n rooms: [],\n exams: [],\n timeSlotStructure: {} as TimeSlotStructure,\n addTimeSlotExam: (roomId: string, examId: string, timeSlotIndex: number) => {},\n removeTimeSlotExam: (roomId: string, examId: string, timeSlotIndex: number) => {},\n clearTimeSlotExams: (roomId: string, timeSlotIndex: number) => {},\n setAllTimeSlotsExams: (roomId: string, examIds: string[]) => {},\n changeSelectedExamDay: (examDayId: string) => {},\n save: () => {},\n navigateToSession: () => {},\n};\n\nexport const SchedulerContextValue = React.createContext(initialSchedulerContextValue);\n","import { ExamType } from \"../../../model/Exam\";\r\nimport { ExamAndExpertAssignmentRequestModel, ExamAssignment } from \"../../../model/ExamAssignmentRequestModel\";\r\nimport { ExamDayType } from \"../../../model/ExamDayType\";\r\nimport { ExamDayViewModel } from \"../../../model/ExamDayViewModel\";\r\nimport { CandidateAssignment } from \"../../../model/examSessionCandidate/AssignCandidatesRequestModel\";\r\nimport { ExamSessionCandidateExamState } from \"../../../model/examSessionCandidate/ExamSessionCandidateExamViewModel\";\r\nimport { ExamSessionCandidateViewModel } from \"../../../model/examSessionCandidate/ExamSessionCandidateViewModel\";\r\nimport { ExamSessionViewModel } from \"../../../model/ExamSessionViewModel\";\r\nimport { TimeSlotStructure } from \"../../../model/TimeSlotStructure\";\r\nimport { getExamTimeSlots } from \"../../../utils/TimeSlotUtils\";\r\nimport { SchedulerCandidate, SchedulerExamCandidate } from \"./SchedulerCandidateContext\";\r\nimport { ExamCandidateCaseName } from \"./SchedulerCaseNameContext\";\r\nimport { SchedulerRoomExperts } from \"./SchedulerExpertContext\";\r\n\r\nexport const getLocation = (examSession: ExamSessionViewModel | undefined, locationId: string) =>\r\n examSession?.locations.find((location) => location.id === locationId);\r\n\r\nexport const getExamDay = (allExamDays: ExamDayViewModel[], selectedExamDayId: string) =>\r\n allExamDays.find((day) => day.id === selectedExamDayId);\r\n\r\nconst getRoomAssignmentFromExamDay = (examDay: ExamDayViewModel, roomId: string) =>\r\n examDay.roomAssignments.find((assignment) => assignment.roomId === roomId);\r\n\r\nconst getRoomAssignment = (allExamDays: ExamDayViewModel[], selectedExamDayId: string, roomId: string) => {\r\n const examDay = getExamDay(allExamDays, selectedExamDayId);\r\n if (examDay === undefined) {\r\n return undefined;\r\n }\r\n\r\n return getRoomAssignmentFromExamDay(examDay, roomId);\r\n};\r\n\r\nconst getRoomExamAssignments = (allExamDays: ExamDayViewModel[], selectedExamDayId: string, roomId: string) => {\r\n const roomAssignment = getRoomAssignment(allExamDays, selectedExamDayId, roomId);\r\n return roomAssignment?.examAssignments;\r\n};\r\n\r\nexport const getCandidatesContextData = (\r\n examSessionCandidates: ExamSessionCandidateViewModel[],\r\n examDays: ExamDayViewModel[]\r\n) => {\r\n const schedulerCandidates: SchedulerCandidate[] = [];\r\n const schedulerExamCandidates: SchedulerExamCandidate[] = [];\r\n const examCandidateCaseNames: ExamCandidateCaseName[] = [];\r\n\r\n const examDayIds = examDays.map((d) => d.id);\r\n\r\n examSessionCandidates.forEach((examSessionCandidate) => {\r\n // Do not show cancelled exams or exams for other exam days\r\n const exams = examSessionCandidate.exams.filter(\r\n (exam) => exam.state !== ExamSessionCandidateExamState.Cancelled && examDayIds.includes(exam.examDayId)\r\n );\r\n\r\n if (!exams.length) {\r\n return;\r\n }\r\n\r\n schedulerCandidates.push({\r\n candidateId: examSessionCandidate.candidateId,\r\n firstName: examSessionCandidate.firstName,\r\n lastName: examSessionCandidate.lastName,\r\n language: examSessionCandidate.language,\r\n });\r\n\r\n exams.forEach((exam) => {\r\n const module = examSessionCandidate.modules.find((module) => module.moduleId === exam.moduleId);\r\n schedulerExamCandidates.push({\r\n candidateId: examSessionCandidate.candidateId,\r\n moduleOption: module!.option,\r\n examId: exam.examId,\r\n examState: exam.state,\r\n examDayId: exam.examDayId,\r\n roomId: exam.roomId,\r\n timeSlotIndex: exam.timeSlotIndex,\r\n });\r\n examCandidateCaseNames.push({\r\n candidateId: examSessionCandidate.candidateId,\r\n examId: exam.examId,\r\n caseName: exam.caseName,\r\n });\r\n });\r\n });\r\n\r\n return {\r\n schedulerCandidates,\r\n schedulerExamCandidates,\r\n examCandidateCaseNames,\r\n };\r\n};\r\n\r\nexport const getExamTypes = (examDay?: ExamDayViewModel) => {\r\n switch (examDay?.type) {\r\n case ExamDayType.Correction:\r\n return [ExamType.TermPaper, ExamType.Written, ExamType.Oral];\r\n case ExamDayType.Written:\r\n return [ExamType.Written];\r\n case ExamDayType.Oral:\r\n return [ExamType.Oral];\r\n default:\r\n return [ExamType.Written];\r\n }\r\n};\r\n\r\nexport const isOralDay = (examTypes: ExamType[]) => examTypes.length === 1 && examTypes[0] === ExamType.Oral;\r\n\r\nexport const addTimeSlotExam = (\r\n allExamDays: ExamDayViewModel[],\r\n selectedExamDayId: string,\r\n roomId: string,\r\n examId: string,\r\n timeSlotIndex: number\r\n) => {\r\n const examAssignments = getRoomExamAssignments(allExamDays, selectedExamDayId, roomId);\r\n if (examAssignments === undefined) {\r\n return;\r\n }\r\n\r\n examAssignments.push({\r\n examId,\r\n timeSlotIndex,\r\n });\r\n};\r\n\r\nexport const removeTimeSlotExam = (\r\n allExamDays: ExamDayViewModel[],\r\n selectedExamDayId: string,\r\n roomId: string,\r\n examId: string,\r\n timeSlotIndex: number\r\n) => {\r\n const examAssignments = getRoomExamAssignments(allExamDays, selectedExamDayId, roomId);\r\n if (examAssignments === undefined) {\r\n return;\r\n }\r\n\r\n const examAssignment = examAssignments.find(\r\n (assignment) => assignment.examId === examId && assignment.timeSlotIndex === timeSlotIndex\r\n );\r\n if (examAssignment === undefined) {\r\n return;\r\n }\r\n\r\n const index = examAssignments.indexOf(examAssignment);\r\n examAssignments.splice(index, 1);\r\n};\r\n\r\nexport const clearTimeSlotExams = (\r\n allExamDays: ExamDayViewModel[],\r\n selectedExamDayId: string,\r\n roomId: string,\r\n timeSlotIndex: number\r\n) => {\r\n const roomAssignment = getRoomAssignment(allExamDays, selectedExamDayId, roomId);\r\n if (roomAssignment === undefined) {\r\n return;\r\n }\r\n\r\n roomAssignment.examAssignments = roomAssignment.examAssignments.filter(\r\n (assignment) => assignment.timeSlotIndex !== timeSlotIndex\r\n );\r\n};\r\n\r\nexport const setAllTimeSlotsExams = (\r\n allExamDays: ExamDayViewModel[],\r\n selectedExamDayId: string,\r\n timeSlotStructure: TimeSlotStructure,\r\n roomId: string,\r\n examIds: string[]\r\n) => {\r\n const examDay = getExamDay(allExamDays, selectedExamDayId);\r\n if (examDay === undefined) {\r\n return;\r\n }\r\n\r\n const roomAssignment = getRoomAssignmentFromExamDay(examDay, roomId);\r\n if (roomAssignment === undefined) {\r\n return;\r\n }\r\n\r\n const timeSlotIndexes = getExamTimeSlots(timeSlotStructure, examDay?.timeSlotStructureType).map(\r\n (timeSlot) => timeSlot.index as number\r\n );\r\n roomAssignment.examAssignments = [];\r\n timeSlotIndexes.forEach((timeSlotIndex) =>\r\n examIds.forEach((examId) =>\r\n roomAssignment.examAssignments.push({\r\n examId,\r\n timeSlotIndex,\r\n })\r\n )\r\n );\r\n};\r\n\r\nexport const areRoomsNotOverloaded = (\r\n examSession: ExamSessionViewModel | undefined,\r\n locationId: string,\r\n schedulerExamCandidates: SchedulerExamCandidate[]\r\n) => {\r\n const location = getLocation(examSession, locationId);\r\n if (location === undefined) {\r\n return false;\r\n }\r\n\r\n // Get all unique slots being used.\r\n const uniqueSlots = new Array<{\r\n examDayId: string;\r\n roomId: string;\r\n timeSlotIndex: number;\r\n candidatesCount: number;\r\n }>();\r\n const locationRoomIds = location.rooms.map((room) => room.id);\r\n const bookedExamCandidatesInLocationRooms = schedulerExamCandidates.filter(\r\n (schedulerExamCandidate) =>\r\n schedulerExamCandidate.examState !== ExamSessionCandidateExamState.Cancelled &&\r\n locationRoomIds.includes(schedulerExamCandidate.roomId)\r\n );\r\n bookedExamCandidatesInLocationRooms.forEach((schedulerExamCandidate) => {\r\n const { examDayId, roomId, timeSlotIndex } = schedulerExamCandidate;\r\n const existingSlot = uniqueSlots.find(\r\n (slot) => slot.examDayId === examDayId && slot.roomId === roomId && slot.timeSlotIndex === timeSlotIndex\r\n );\r\n if (existingSlot !== undefined) {\r\n existingSlot.candidatesCount++;\r\n } else {\r\n uniqueSlots.push({\r\n examDayId,\r\n roomId,\r\n timeSlotIndex,\r\n candidatesCount: 1,\r\n });\r\n }\r\n });\r\n\r\n // For each of those slots, check if the room, for that day and time slot, is not overloaded.\r\n const roomsNotOverloaded = uniqueSlots.every((slot) => {\r\n const room = location.rooms.find((room) => room.id === slot.roomId);\r\n return room && room.numberOfSeats >= slot.candidatesCount;\r\n });\r\n return roomsNotOverloaded;\r\n};\r\n\r\nexport const getAssignCandidatesAndExpertsRequestModel = (\r\n schedulerExamCandidates: SchedulerExamCandidate[],\r\n examCandidateCaseNames: ExamCandidateCaseName[],\r\n examDays: ExamDayViewModel[],\r\n schedulerExperts: SchedulerRoomExperts[],\r\n examSessionId: string,\r\n examSessionCandidates?: ExamSessionCandidateViewModel[]\r\n) => {\r\n const candidateAssignments: CandidateAssignment[] = [];\r\n const examDayIds = examDays.map((d) => d.id);\r\n schedulerExamCandidates\r\n .filter((schedulerExamCandidate) => examDayIds.includes(schedulerExamCandidate.examDayId))\r\n .forEach((schedulerExamCandidate) => {\r\n const examSessionCandidate = examSessionCandidates?.find(\r\n (examSessionCandidate) => examSessionCandidate.candidateId === schedulerExamCandidate.candidateId\r\n );\r\n let candidateAssignment = candidateAssignments.find(\r\n (candidateAssignment) => candidateAssignment.examSessionCandidateId === examSessionCandidate!.id\r\n );\r\n if (candidateAssignment === undefined) {\r\n candidateAssignment = {\r\n examSessionCandidateId: examSessionCandidate!.id,\r\n exams: [],\r\n };\r\n candidateAssignments.push(candidateAssignment);\r\n }\r\n\r\n const examCandidateCaseName = examCandidateCaseNames.find(\r\n (examCandidate) =>\r\n examCandidate.candidateId === schedulerExamCandidate.candidateId &&\r\n examCandidate.examId === schedulerExamCandidate.examId\r\n );\r\n candidateAssignment.exams.push({\r\n examId: schedulerExamCandidate.examId,\r\n examDayId: schedulerExamCandidate.examDayId,\r\n roomId: schedulerExamCandidate.roomId,\r\n timeSlotIndex: schedulerExamCandidate.timeSlotIndex,\r\n caseName: examCandidateCaseName?.caseName,\r\n });\r\n });\r\n return { examSessionCandidates: candidateAssignments, examSessionExperts: schedulerExperts, examSessionId };\r\n};\r\n\r\nexport const getExamAndExpertsAssignmentRequestModels = (\r\n examDays: ExamDayViewModel[],\r\n schedulerExperts: SchedulerRoomExperts[]\r\n) => {\r\n const examAssignments: ExamAssignment[] = [];\r\n examDays.forEach((examDay) => {\r\n examDay.roomAssignments.forEach((roomAssignment) => {\r\n if (!roomAssignment.isPreparationRoom) {\r\n examAssignments.push({\r\n examDayId: examDay.id,\r\n roomExamDayAssignmentId: roomAssignment.id,\r\n examAssignments: roomAssignment.examAssignments,\r\n });\r\n }\r\n });\r\n });\r\n const examAndExpertAssignModel: ExamAndExpertAssignmentRequestModel = {\r\n examSessionExams: examAssignments,\r\n examSessionExperts: schedulerExperts,\r\n };\r\n return examAndExpertAssignModel;\r\n};\r\n\r\nexport const getExamDays = (\r\n examSession: ExamSessionViewModel | undefined,\r\n locationId: string,\r\n examDayType: ExamDayType\r\n) =>\r\n examSession?.examDays\r\n .filter((examDay) => examDay.locationId === locationId && examDay.type === examDayType)\r\n .sort((day1, day2) => new Date(day1.date).getTime() - new Date(day2.date).getTime());\r\n","import { LinearProgress } from \"@material-ui/core\";\r\nimport produce from \"immer\";\r\nimport React, { FC, useCallback, useEffect, useMemo, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router\";\r\nimport { useGetExamSessionQuery, useUpdateExamAndExpertAssignmentsMutation } from \"../../../api/rtk/ExamSessionApi\";\r\nimport {\r\n useAssignCandidatesAndExpertsMutation,\r\n useGetExamSessionCandidatesQuery,\r\n} from \"../../../api/rtk/ExamSessionCandidateApi\";\r\nimport { useGetTimeSlotStructureQuery } from \"../../../api/rtk/TimeSlotStructureApi\";\r\nimport { ExamDayType } from \"../../../model/ExamDayType\";\r\nimport { ExamDayViewModel } from \"../../../model/ExamDayViewModel\";\r\nimport { ExamSessionCandidateExamState } from \"../../../model/examSessionCandidate/ExamSessionCandidateExamViewModel\";\r\nimport { GetLocalizedName } from \"../../../model/ExamSessionViewModel\";\r\nimport { RoomViewModel } from \"../../../model/RoomViewModel\";\r\nimport { TimeSlotStructure } from \"../../../model/TimeSlotStructure\";\r\nimport { routesPaths } from \"../../../Routes\";\r\nimport {\r\n SchedulerCandidate,\r\n SchedulerCandidateContext,\r\n SchedulerCandidateContextValue,\r\n SchedulerExamCandidate,\r\n} from \"./SchedulerCandidateContext\";\r\nimport {\r\n ExamCandidateCaseName,\r\n SchedulerCaseNameContext,\r\n SchedulerCaseNameContextValue,\r\n} from \"./SchedulerCaseNameContext\";\r\nimport { SchedulerExpertContext, SchedulerRoomExperts, SchedulerExpertContextValue } from \"./SchedulerExpertContext\";\r\nimport { SchedulerContext, SchedulerContextValue } from \"./SchedulerContext\";\r\nimport {\r\n addTimeSlotExam,\r\n areRoomsNotOverloaded,\r\n clearTimeSlotExams,\r\n getAssignCandidatesAndExpertsRequestModel,\r\n getCandidatesContextData,\r\n getExamAndExpertsAssignmentRequestModels,\r\n getExamDay,\r\n getExamDays,\r\n getExamTypes,\r\n getLocation,\r\n isOralDay,\r\n removeTimeSlotExam,\r\n setAllTimeSlotsExams,\r\n} from \"./SchedulerContextUtils\";\r\nimport { ExpertAssignmentRequestModel } from \"../../../model/ExpertAssignmentRequestModel\";\r\nimport { AssignedUserViewModel } from \"../../../model/AssignedUserViewModel\";\r\n\r\nconst updateExamDayExperts = (\r\n schedulerExperts: SchedulerRoomExperts,\r\n roomId: string,\r\n areFixed: boolean,\r\n assignedExperts: AssignedUserViewModel[]\r\n): SchedulerRoomExperts => {\r\n return {\r\n examDayId: schedulerExperts.examDayId,\r\n expertAssignments: schedulerExperts.expertAssignments.map((expertAssignment) =>\r\n expertAssignment.roomId === roomId\r\n ? updateRoomExperts(expertAssignment, areFixed, assignedExperts)\r\n : expertAssignment\r\n ),\r\n };\r\n};\r\n\r\nconst updateRoomExperts = (\r\n expertAssignment: ExpertAssignmentRequestModel,\r\n areFixed: boolean,\r\n assignedExperts: AssignedUserViewModel[]\r\n): ExpertAssignmentRequestModel => {\r\n return {\r\n roomId: expertAssignment.roomId,\r\n assignedUsers: expertAssignment.assignedUsers\r\n .filter((assignedExpert) => assignedExpert.isFixed !== areFixed)\r\n .concat(assignedExperts),\r\n };\r\n};\r\n\r\ninterface SchedulerContextProviderProps {\r\n examDayType: ExamDayType;\r\n readonly?: boolean;\r\n}\r\n\r\nexport const SchedulerContextProvider: FC = ({ examDayType, readonly, children }) => {\r\n const history = useHistory();\r\n const { examSessionId, locationId } = useParams<{ examSessionId: string; locationId: string }>();\r\n const { data: examSession, isFetching: isExamSessionFetching } = useGetExamSessionQuery(examSessionId, {\r\n refetchOnMountOrArgChange: true,\r\n });\r\n const { data: examSessionCandidates, isFetching: areExamSessionCandidatesFetching } =\r\n useGetExamSessionCandidatesQuery(examSessionId);\r\n\r\n const { data: timeSlotStructure, isFetching: isTimeSlotStructureFetching } = useGetTimeSlotStructureQuery();\r\n const [updateExamAndExpertAssignments, { isLoading: isUpdateExamAndExpertAssignmentsLoading }] =\r\n useUpdateExamAndExpertAssignmentsMutation();\r\n const [assignCandidatesAndExperts, { isLoading: isAssignCandidatesAndExpertsLoading }] =\r\n useAssignCandidatesAndExpertsMutation();\r\n\r\n const [selectedExamDayId, setSelectedExamDayId] = useState(\"\");\r\n const [examDays, setExamDays] = useState([]);\r\n const [isValid, setIsValid] = useState(false);\r\n const [schedulerCandidates, setSchedulerCandidates] = useState([]);\r\n const [schedulerExperts, setSchedulerExperts] = useState([]);\r\n const [schedulerExamCandidates, setSchedulerExamCandidates] = useState([]);\r\n const [examCandidateCaseNames, setExamCandidateCaseNames] = useState([]);\r\n\r\n const isSessionPublished = examSession?.published || false;\r\n const selectedExamDay = useMemo(() => getExamDay(examDays, selectedExamDayId), [examDays, selectedExamDayId]);\r\n const examTypes = getExamTypes(selectedExamDay);\r\n const location = useMemo(() => getLocation(examSession, locationId), [examSession, locationId]);\r\n const exams = useMemo(\r\n () => examSession?.exams.filter((exam) => examTypes.includes(exam.type)) || [],\r\n [examSession, examTypes]\r\n );\r\n const rooms = useMemo(() => {\r\n if (selectedExamDay === undefined || location === undefined) {\r\n return [];\r\n }\r\n\r\n var preparationRooms: RoomViewModel[] = [];\r\n var examRooms: RoomViewModel[] = [];\r\n selectedExamDay.roomAssignments.forEach((roomAssignment) => {\r\n var room = location.rooms.find((room) => room.id === roomAssignment.roomId);\r\n if (room !== undefined) {\r\n roomAssignment.isPreparationRoom ? preparationRooms.push(room) : examRooms.push(room);\r\n }\r\n });\r\n return [...preparationRooms, ...examRooms];\r\n }, [location, selectedExamDay]);\r\n\r\n const updateCaseNames = useCallback(\r\n (examCandidateCaseNames: ExamCandidateCaseName[]) => {\r\n if (!isOralDay(examTypes)) {\r\n return;\r\n }\r\n\r\n setExamCandidateCaseNames((prevCaseNames) =>\r\n produce(prevCaseNames, (draftCaseNames) => {\r\n examCandidateCaseNames.forEach(({ candidateId, examId, caseName }) => {\r\n var schedulerExamCandidates = draftCaseNames.filter(\r\n (examCandidate) => examCandidate.candidateId === candidateId && examCandidate.examId === examId\r\n );\r\n schedulerExamCandidates.forEach((examSessionCandidate) => {\r\n examSessionCandidate.caseName = caseName;\r\n });\r\n });\r\n })\r\n );\r\n },\r\n [examTypes]\r\n );\r\n\r\n const updateCaseName = useCallback(\r\n (candidateId: string, examId: string, caseName: string) => {\r\n updateCaseNames([{ candidateId, examId, caseName }]);\r\n },\r\n [updateCaseNames]\r\n );\r\n\r\n const schedulerCaseNameContext = useMemo(\r\n () => ({\r\n examCandidateCaseNames,\r\n updateCaseName,\r\n }),\r\n [examCandidateCaseNames, updateCaseName]\r\n );\r\n\r\n const updateSchedulerExamCandidate = useCallback(\r\n (\r\n schedulerExamCandidatesFilter: (schedulerExamCandidate: SchedulerExamCandidate) => boolean,\r\n updateData: Partial\r\n ) => {\r\n setSchedulerExamCandidates((prevCandidates) => {\r\n let caseNamesToReset: ExamCandidateCaseName[] = [];\r\n var newContext = produce(prevCandidates, (draftCandidates) => {\r\n const examCandidates = draftCandidates.filter(schedulerExamCandidatesFilter);\r\n caseNamesToReset = examCandidates.map(({ candidateId, examId }) => ({\r\n candidateId,\r\n examId,\r\n caseName: \"\",\r\n }));\r\n examCandidates.forEach((examCandidate) => {\r\n Object.assign(examCandidate, updateData);\r\n });\r\n });\r\n updateCaseNames(caseNamesToReset);\r\n return newContext;\r\n });\r\n },\r\n [updateCaseNames]\r\n );\r\n\r\n const scheduleExam = useCallback(\r\n (candidateId: string, examId: string, examDayId: string, roomId: string, timeSlotIndex: number) =>\r\n updateSchedulerExamCandidate(\r\n (schedulerExamCandidate) =>\r\n schedulerExamCandidate.candidateId === candidateId && schedulerExamCandidate.examId === examId,\r\n {\r\n examDayId,\r\n roomId,\r\n timeSlotIndex,\r\n examState: roomId === \"\" ? ExamSessionCandidateExamState.Cancelled : ExamSessionCandidateExamState.Booked,\r\n }\r\n ),\r\n [updateSchedulerExamCandidate]\r\n );\r\n\r\n const addCandidate = useCallback(\r\n (candidateId: string, examId: string, examDayId: string, roomId: string, timeSlotIndex: number) =>\r\n scheduleExam(candidateId, examId, examDayId, roomId, timeSlotIndex),\r\n [scheduleExam]\r\n );\r\n\r\n const removeCandidate = useCallback(\r\n (candidateId: string, examId: string) => scheduleExam(candidateId, examId, \"\", \"\", 0),\r\n [scheduleExam]\r\n );\r\n\r\n const clearCandidates = useCallback(\r\n (examDayId: string, roomId: string, timeSlotIndex: number) =>\r\n updateSchedulerExamCandidate(\r\n (schedulerExamCandidate) =>\r\n schedulerExamCandidate.examDayId === examDayId &&\r\n schedulerExamCandidate.roomId === roomId &&\r\n schedulerExamCandidate.timeSlotIndex === timeSlotIndex,\r\n {\r\n examState: ExamSessionCandidateExamState.Cancelled,\r\n examDayId: \"\",\r\n roomId: \"\",\r\n timeSlotIndex: 0,\r\n }\r\n ),\r\n [updateSchedulerExamCandidate]\r\n );\r\n\r\n const changeExpert = useCallback(\r\n (examDayId: string, roomId: string) => (areFixed: boolean, selectedExperts: AssignedUserViewModel[]) => {\r\n setSchedulerExperts((prevSchedulerExperts) =>\r\n [...prevSchedulerExperts].map((schedulerExpert) =>\r\n schedulerExpert.examDayId === examDayId\r\n ? updateExamDayExperts(schedulerExpert, roomId, areFixed, selectedExperts)\r\n : schedulerExpert\r\n )\r\n );\r\n },\r\n []\r\n );\r\n\r\n const examSessionCandidatesContext = useMemo(\r\n () => ({\r\n isValid,\r\n schedulerCandidates,\r\n schedulerExamCandidates,\r\n addCandidate,\r\n removeCandidate,\r\n clearCandidates,\r\n }),\r\n [isValid, schedulerCandidates, schedulerExamCandidates, addCandidate, removeCandidate, clearCandidates]\r\n );\r\n\r\n const examSessionExpertsContext = useMemo(\r\n () => ({\r\n schedulerExperts,\r\n changeExpert,\r\n }),\r\n [changeExpert, schedulerExperts]\r\n );\r\n\r\n const handleAddTimeSlotExam = useCallback(\r\n (roomId: string, examId: string, timeSlotIndex: number) =>\r\n setExamDays((prevExamDays) =>\r\n produce(prevExamDays, (draftExamDays) =>\r\n addTimeSlotExam(draftExamDays, selectedExamDayId, roomId, examId, timeSlotIndex)\r\n )\r\n ),\r\n [selectedExamDayId]\r\n );\r\n\r\n const handleRemoveTimeSlotExam = useCallback(\r\n (roomId: string, examId: string, timeSlotIndex: number) =>\r\n setExamDays((prevExamDays) =>\r\n produce(prevExamDays, (draftExamDays) =>\r\n removeTimeSlotExam(draftExamDays, selectedExamDayId, roomId, examId, timeSlotIndex)\r\n )\r\n ),\r\n [selectedExamDayId]\r\n );\r\n\r\n const handleClearTimeSlotExams = useCallback(\r\n (roomId: string, timeSlotIndex: number) =>\r\n setExamDays((prevExamDays) =>\r\n produce(prevExamDays, (draftExamDays) =>\r\n clearTimeSlotExams(draftExamDays, selectedExamDayId, roomId, timeSlotIndex)\r\n )\r\n ),\r\n [selectedExamDayId]\r\n );\r\n\r\n const handleSetAllTimeSlotsExams = useCallback(\r\n (roomId: string, examIds: string[]) => {\r\n if (timeSlotStructure === undefined) {\r\n return;\r\n }\r\n\r\n setExamDays((prevExamDays) =>\r\n produce(prevExamDays, (draftExamDays) =>\r\n setAllTimeSlotsExams(draftExamDays, selectedExamDayId, timeSlotStructure, roomId, examIds)\r\n )\r\n );\r\n },\r\n [selectedExamDayId, timeSlotStructure]\r\n );\r\n\r\n const changeSelectedExamDay = useCallback((examDayId: string) => {\r\n setSelectedExamDayId(examDayId);\r\n }, []);\r\n\r\n const navigateToSession = useCallback(() => {\r\n const route = routesPaths.examSessionLocation(examSessionId, locationId);\r\n history.push(route);\r\n }, [examSessionId, locationId, history]);\r\n\r\n const save = useCallback(async () => {\r\n const saveCandidateAndExpertsAssignments = () => {\r\n const requestModel = getAssignCandidatesAndExpertsRequestModel(\r\n schedulerExamCandidates,\r\n examCandidateCaseNames,\r\n examDays,\r\n schedulerExperts,\r\n examSessionId,\r\n examSessionCandidates\r\n );\r\n\r\n return assignCandidatesAndExperts(requestModel);\r\n };\r\n\r\n const saveExamAndExpertsAssignments = () => {\r\n const examAndExpertAssignmentsRequestModel = getExamAndExpertsAssignmentRequestModels(examDays, schedulerExperts);\r\n return updateExamAndExpertAssignments({\r\n examSessionId,\r\n data: examAndExpertAssignmentsRequestModel,\r\n });\r\n };\r\n\r\n if (isSessionPublished && isValid) {\r\n const response = await saveCandidateAndExpertsAssignments().unwrap();\r\n if (response.success) {\r\n navigateToSession();\r\n }\r\n }\r\n\r\n if (!isSessionPublished) {\r\n const response = await saveExamAndExpertsAssignments().unwrap();\r\n if (response.success) {\r\n navigateToSession();\r\n }\r\n }\r\n }, [\r\n isSessionPublished,\r\n isValid,\r\n schedulerExamCandidates,\r\n examCandidateCaseNames,\r\n examDays,\r\n schedulerExperts,\r\n examSessionCandidates,\r\n assignCandidatesAndExperts,\r\n updateExamAndExpertAssignments,\r\n examSessionId,\r\n navigateToSession,\r\n ]);\r\n\r\n const schedulerContext = useMemo(() => {\r\n return {\r\n examTypes,\r\n readonly: readonly === true,\r\n examSession: examSession,\r\n examSessionLabel: examSession !== undefined ? GetLocalizedName(examSession) : \"\",\r\n selectedLocationName: location !== undefined ? location.name : \"\",\r\n isSessionPublished,\r\n selectedExamDayId,\r\n locations: examSession !== undefined ? examSession.locations : [],\r\n examDays,\r\n rooms,\r\n exams,\r\n timeSlotStructure: timeSlotStructure !== undefined ? timeSlotStructure : ({} as TimeSlotStructure),\r\n addTimeSlotExam: handleAddTimeSlotExam,\r\n removeTimeSlotExam: handleRemoveTimeSlotExam,\r\n clearTimeSlotExams: handleClearTimeSlotExams,\r\n setAllTimeSlotsExams: handleSetAllTimeSlotsExams,\r\n changeSelectedExamDay,\r\n save,\r\n navigateToSession,\r\n };\r\n }, [\r\n examTypes,\r\n readonly,\r\n examSession,\r\n location,\r\n isSessionPublished,\r\n selectedExamDayId,\r\n examDays,\r\n rooms,\r\n exams,\r\n timeSlotStructure,\r\n handleAddTimeSlotExam,\r\n handleRemoveTimeSlotExam,\r\n handleClearTimeSlotExams,\r\n handleSetAllTimeSlotsExams,\r\n changeSelectedExamDay,\r\n save,\r\n navigateToSession,\r\n ]);\r\n\r\n // Update isValid\r\n useEffect(() => {\r\n const allAssigned = schedulerExamCandidates.every(\r\n (examCandidate) => examCandidate.examState !== ExamSessionCandidateExamState.Cancelled\r\n );\r\n const valid = allAssigned && areRoomsNotOverloaded(examSession, locationId, schedulerExamCandidates);\r\n setIsValid(valid);\r\n }, [examSession, examDays, locationId, schedulerExamCandidates]);\r\n\r\n useEffect(() => {\r\n const examDays = getExamDays(examSession, locationId, examDayType);\r\n if (examDays === undefined) {\r\n return;\r\n }\r\n\r\n setExamDays(examDays);\r\n if (examDays[0] !== undefined) {\r\n setSelectedExamDayId(examDays[0].id);\r\n }\r\n }, [examSession, locationId, examDayType]);\r\n\r\n useEffect(() => {\r\n if (examSessionCandidates === undefined) {\r\n return;\r\n }\r\n\r\n const { schedulerCandidates, schedulerExamCandidates, examCandidateCaseNames } = getCandidatesContextData(\r\n examSessionCandidates,\r\n examDays\r\n );\r\n setSchedulerCandidates(schedulerCandidates);\r\n setSchedulerExamCandidates(schedulerExamCandidates);\r\n setExamCandidateCaseNames(examCandidateCaseNames);\r\n }, [examSessionCandidates, examDays]);\r\n\r\n useEffect(() => {\r\n if (examDays === undefined) {\r\n return;\r\n }\r\n setSchedulerExperts(\r\n examDays.map((ed) => ({\r\n examDayId: ed.id,\r\n expertAssignments: ed.roomAssignments.map((ra) => ({\r\n roomId: ra.roomId,\r\n assignedUsers: ra.assignedUsers.map((user) => ({ isFixed: user.isFixed, userId: user.userId })),\r\n })),\r\n }))\r\n );\r\n }, [examDays]);\r\n\r\n if (\r\n isExamSessionFetching ||\r\n areExamSessionCandidatesFetching ||\r\n isUpdateExamAndExpertAssignmentsLoading ||\r\n isAssignCandidatesAndExpertsLoading ||\r\n isTimeSlotStructureFetching\r\n ) {\r\n return ;\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {children}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default SchedulerContextProvider;\r\n","import { ExamDayViewModel } from \"../../model/ExamDayViewModel\";\nimport { LocationViewModel } from \"../../model/LocationViewModel\";\nimport LocaleFormatDate from \"../common/dates/LocaleFormatDate\";\nimport { makeStyles } from \"@material-ui/core\";\nimport StepLabel from \"@material-ui/core/StepLabel\";\nimport Typography from \"@material-ui/core/Typography\";\nimport TodayIcon from \"@material-ui/icons/Today\";\nimport React, { FC } from \"react\";\n\nconst useStepStyles = makeStyles((theme) => ({\n root: {\n cursor: \"pointer\",\n color: \"black\",\n },\n active: {\n textDecoration: \"underline\",\n },\n}));\n\ninterface SchedulerDayStepLabelProps {\n examDay: ExamDayViewModel;\n location?: LocationViewModel;\n isLocationVisible?: boolean;\n isStepActive: boolean;\n}\n\ninterface IconProps {\n active: boolean;\n}\n\nconst SchedulerStepIcon: FC = ({ active }) => {\n const classes = useStepStyles({});\n if (active) {\n return (\n
\n \n
\n );\n }\n\n return (\n
\n \n
\n );\n};\n\nconst SchedulerDayStepLabel: FC = ({\n examDay,\n location,\n isLocationVisible,\n isStepActive,\n}) => {\n const classes = useStepStyles({});\n\n return (\n \n \n {isStepActive && }\n {!isStepActive && }\n {isLocationVisible && location &&
{location.name}
}\n
\n {isLocationVisible && location && (\n \n {location.street}\n {`${location.zipCode} ${location.city}`}\n \n )}\n
\n );\n};\n\nSchedulerDayStepLabel.defaultProps = {\n isLocationVisible: false,\n} as Partial;\n\nexport default SchedulerDayStepLabel;\n","import Step from \"@material-ui/core/Step\";\nimport Stepper from \"@material-ui/core/Stepper\";\nimport _ from \"lodash\";\nimport React, { FC } from \"react\";\nimport { ExamDayViewModel } from \"../../model/ExamDayViewModel\";\nimport { LocationViewModel } from \"../../model/LocationViewModel\";\nimport SchedulerDayStepLabel from \"./SchedulerDayStepLabel\";\n\ninterface SchedulerExamDayStepsProps {\n locations?: LocationViewModel[];\n examDays?: ExamDayViewModel[];\n selectedExamDayId: string;\n onExamDaySelected?: (examDayId: string) => void;\n onStartAddingExamDay?: () => void;\n showLocation?: boolean;\n}\n\nconst SchedulerExamDaySteps: FC = ({\n examDays,\n locations,\n selectedExamDayId,\n showLocation,\n ...eventHandlers\n}) => {\n const sortedExamDays = _.orderBy(examDays, (examDay) => examDay.date);\n const activeStep = sortedExamDays!.map((day) => day.id).indexOf(selectedExamDayId);\n\n return (\n \n {sortedExamDays!.map((examDay, index) => {\n let location: LocationViewModel | undefined;\n if (locations) {\n location = locations.find((l) => l.id === examDay.locationId);\n }\n\n return (\n {\n if (eventHandlers && eventHandlers.onExamDaySelected) {\n eventHandlers.onExamDaySelected(examDay.id);\n }\n }}\n key={examDay.id}\n >\n \n \n );\n })}\n \n );\n};\n\nSchedulerExamDaySteps.defaultProps = {\n onStartAddingExamDay: () => {},\n showLocation: false,\n locations: [],\n examDays: [],\n} as Partial;\n\nexport default SchedulerExamDaySteps;\n","import { ApiResponse } from \"../CustomFetch\";\nimport { api } from \"./BaseApi\";\nimport { ExpertViewModel } from \"../../model/ExpertViewModel\";\nimport { orderBy } from \"lodash\";\n\nconst getExpertUrl = (id?: string) => \"/Expert\" + (id === undefined ? \"\" : `/${id}`);\n\nconst expertsApi = api.enhanceEndpoints({ addTagTypes: [\"Experts\"] }).injectEndpoints({\n endpoints: (builder) => ({\n getExperts: builder.query({\n query: () => getExpertUrl(),\n transformResponse: (response: ApiResponse) =>\n orderBy(response.data, (expert) => expert.lastName.toLowerCase()),\n providesTags: (result) =>\n result\n ? [...result.map(({ id }) => ({ type: \"Experts\" as const, id })), { type: \"Experts\", id: \"LIST\" }]\n : [{ type: \"Experts\", id: \"LIST\" }],\n }),\n getExpert: builder.query({\n query: getExpertUrl,\n transformResponse: (response: ApiResponse) => response.data,\n providesTags: (_result, _error, arg) => [{ type: \"Experts\", id: arg }],\n }),\n deleteExpert: builder.mutation, string>({\n query: (id) => ({\n url: getExpertUrl(id),\n method: \"DELETE\",\n }),\n invalidatesTags: [{ type: \"Experts\", id: \"LIST\" }],\n }),\n createExpert: builder.mutation, ExpertViewModel>({\n query: (expert: ExpertViewModel) => ({\n url: getExpertUrl(),\n body: expert,\n headers: { \"Content-Type\": \"application/json\" },\n method: \"POST\",\n }),\n invalidatesTags: [{ type: \"Experts\", id: \"LIST\" }],\n }),\n updateExpert: builder.mutation, ExpertViewModel>({\n query: (expert: ExpertViewModel) => ({\n url: getExpertUrl(),\n body: expert,\n headers: { \"Content-Type\": \"application/json\" },\n method: \"PUT\",\n }),\n invalidatesTags: (_result, _error, arg) => [\n { type: \"Experts\", id: \"LIST\" },\n { type: \"Experts\", id: arg.id },\n ],\n }),\n }),\n});\n\nexport const {\n endpoints,\n useGetExpertsQuery,\n useGetExpertQuery,\n useDeleteExpertMutation,\n useCreateExpertMutation,\n useUpdateExpertMutation,\n} = expertsApi;\n","import { Chip, createStyles, makeStyles, Tooltip } from \"@material-ui/core\";\nimport React from \"react\";\nimport { ActionMeta, ValueType } from \"react-select/src/types\";\nimport { ExamTemplateWithStructureIndex } from \"../../model/Exam\";\nimport { GetTranslatedValue } from \"../../model/Shared/TranslatedValue\";\nimport CustomSelect, { OptionType } from \"../common/customSelect/CustomSelect\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\n\ninterface ExamSelectProps {\n selectedExamIds: string[];\n exams: ExamTemplateWithStructureIndex[];\n isMulti: boolean;\n readonly?: boolean;\n add?: (examId: string) => void;\n remove?: (examId: string) => void;\n clear?: () => void;\n}\n\nconst useStyles = makeStyles(() =>\n createStyles({\n examChip: {\n maxWidth: \"100%\",\n },\n })\n);\n\nconst ExamSelect: React.FunctionComponent = ({\n selectedExamIds,\n exams,\n isMulti,\n readonly,\n add: addTimeSlotExam,\n remove: removeTimeSlotExam,\n clear: clearTimeSlotExams,\n}) => {\n const cssClasses = useStyles();\n\n if (readonly === true) {\n const selectedExams = exams.filter((exam) => selectedExamIds.includes(exam.id));\n const examComponents = selectedExams.map((exam) => {\n const label = GetTranslatedValue(exam.name);\n return (\n \n \n \n );\n });\n return <>{examComponents};\n }\n\n const options = exams.map((exam) => {\n const label = GetTranslatedValue(exam.name);\n return { label, value: exam.id };\n });\n const value = options.filter((option) => selectedExamIds.includes(option.value));\n\n const handleChange = (valueType: ValueType, action: ActionMeta | undefined) => {\n if (!action) {\n return;\n }\n\n if (action.action === \"clear\") {\n if (clearTimeSlotExams !== undefined) {\n clearTimeSlotExams();\n }\n\n return;\n }\n\n if (action.removedValue && action.action === \"remove-value\") {\n if (removeTimeSlotExam !== undefined) {\n removeTimeSlotExam(action.removedValue.value);\n }\n\n return;\n }\n\n if (action.action === \"select-option\" && addTimeSlotExam !== undefined) {\n if (isMulti) {\n if (action.option !== undefined) {\n addTimeSlotExam(action.option?.value);\n }\n } else {\n if (valueType !== undefined && valueType !== null) {\n const optionType = valueType as OptionType;\n addTimeSlotExam(optionType.value);\n }\n }\n }\n };\n\n return (\n }\n placeholder={\"\"}\n options={options}\n isMulti={isMulti}\n isClearable={true}\n onChange={handleChange}\n />\n );\n};\n\nexport default ExamSelect;\n","import React, { FC, useEffect, useState } from \"react\";\r\nimport CustomDraggableDialog from \"../common/customDialog/CustomDraggableDialog\";\r\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\r\nimport ExamSelect from \"../examSession/ExamSelect\";\r\nimport { ExamTemplateWithStructureIndex } from \"../../model/Exam\";\r\n\r\ninterface SchedulerExamSelectDialogProps {\r\n opened: boolean;\r\n isMulti: boolean;\r\n exams: ExamTemplateWithStructureIndex[];\r\n accept: (examIds: string[]) => void;\r\n decline: () => void;\r\n}\r\n\r\nconst SchedulerExamSelectDialog: FC = ({ opened, isMulti, exams, accept, decline }) => {\r\n const [selectedExamIds, setSelectedExamIds] = useState([]);\r\n\r\n useEffect(() => {\r\n if (opened) {\r\n setSelectedExamIds([]);\r\n }\r\n }, [opened]);\r\n\r\n const handleAddExam = (examId: string) => {\r\n setSelectedExamIds((prevSelectedExamIds) => (isMulti ? [...prevSelectedExamIds, examId] : [examId]));\r\n };\r\n\r\n const handleRemoveExam = (examId: string) => {\r\n setSelectedExamIds((prevSelectedExamIds) => prevSelectedExamIds.filter((id) => id !== examId));\r\n };\r\n\r\n const handleClearExams = () => {\r\n setSelectedExamIds([]);\r\n };\r\n\r\n const applySelectedExam = () => {\r\n if (selectedExamIds.length > 0) {\r\n accept(selectedExamIds);\r\n }\r\n };\r\n\r\n return (\r\n }\r\n cancelText={}\r\n content={\r\n \r\n }\r\n isOpen={opened}\r\n onAccept={applySelectedExam}\r\n onCancel={decline}\r\n title={}\r\n />\r\n );\r\n};\r\n\r\nexport default SchedulerExamSelectDialog;\r\n","import TableCell from \"@material-ui/core/TableCell\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport React, { FC } from \"react\";\n\ninterface SchedulerInfoRowProps {\n cellsCount: number;\n cellContent: React.ReactNode;\n rowLabel: string;\n className?: string;\n}\n\nconst SchedulerInfoRow: FC = ({ cellsCount, cellContent, rowLabel, className }) => {\n let tableCells: JSX.Element[] = [];\n for (let i = 0; i < cellsCount; i++) {\n tableCells.push({cellContent});\n }\n\n return (\n \n {rowLabel}\n {tableCells}\n \n );\n};\n\nexport default SchedulerInfoRow;\n","import Chip from \"@material-ui/core/Chip\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport React, { FC, useContext } from \"react\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\nimport { SchedulerContextValue } from \"./context/SchedulerContext\";\n\nconst SchedulerLanguagesRow: FC = () => {\n const { selectedExamDayId, rooms, examDays } = useContext(SchedulerContextValue);\n\n const getLanguagesForDayAndRoom = (roomId: string) => {\n const examDay = examDays.find((examDay) => examDay.id === selectedExamDayId);\n const roomAssignment = examDay?.roomAssignments.find((r) => r.roomId === roomId);\n if (roomAssignment !== undefined) {\n var roomLanguages = roomAssignment.languages;\n if (roomLanguages.length > 0) {\n return roomLanguages.map((l) => );\n }\n }\n\n return ;\n };\n\n const translationId = \"common.languages\";\n return (\n \n \n \n \n {rooms.map((room) => (\n {getLanguagesForDayAndRoom(room.id)}\n ))}\n \n );\n};\n\nexport default SchedulerLanguagesRow;\n","import { ExpertViewModel } from \"../../model/ExpertViewModel\";\nimport CustomSelect, { OptionType } from \"../common/customSelect/CustomSelect\";\nimport React from \"react\";\nimport { ActionMeta, ValueType } from \"react-select/src/types\";\nimport { GetTranslation } from \"../../translations/GetTranslation\";\nimport { IntlShape, useIntl } from \"react-intl\";\nimport { getExpertRoleTranslationKey } from \"../../data/constants\";\n\nexport type UserSelectProps = {\n availableUsers: ExpertViewModel[];\n selectedUsers: ExpertViewModel[];\n minimumSelectedUsers?: number;\n onUserSelectChange: (selectedElements: ValueType, actionMeta?: ActionMeta) => void;\n label?: JSX.Element;\n placeholder?: JSX.Element;\n name?: string;\n};\n\nconst getOptions = (users: ExpertViewModel[], intl: IntlShape, withCity?: boolean): OptionType[] => {\n return users.map((user) => {\n return {\n label: `${user.firstName} ${user.lastName}${\n withCity && user.city && user.country ? ` - ${user.city} (${user.country})` : \"\"\n }`,\n value: user.id,\n tooltip: `${user.rolesWithExamsAndCourseTypes\n .map((re) => GetTranslation(intl, getExpertRoleTranslationKey(re.role)))\n .join(\", \")} - ${user.languages.join(\", \")}${\n user.city && user.country ? ` - ${user.city} (${user.country})` : \"\"\n }`,\n };\n });\n};\n\nconst UserSelect: React.FunctionComponent = ({\n availableUsers,\n minimumSelectedUsers,\n label,\n name,\n selectedUsers,\n placeholder,\n onUserSelectChange,\n}) => {\n const intl = useIntl();\n return (\n \n );\n};\n\nUserSelect.defaultProps = {\n name: \"user-select-create\",\n minimumSelectedUsers: 0,\n} as Partial;\n\nexport default UserSelect;\n","import React, { FC } from \"react\";\nimport { ExpertRole } from \"../../data/constants\";\nimport { AssignedUserViewModel } from \"../../model/AssignedUserViewModel\";\nimport { ExpertViewModel } from \"../../model/ExpertViewModel\";\nimport { RoomAssignmentViewModel } from \"../../model/RoomAssignmentViewModel\";\nimport UserSelect, { UserSelectProps } from \"./UserSelect\";\nimport { ExamDayViewModel } from \"../../model/ExamDayViewModel\";\nimport { ActionMeta, ValueType } from \"react-select\";\nimport { OptionType } from \"../common/customSelect/CustomSelect\";\nimport { ExamDayType } from \"../../model/ExamDayType\";\nimport { ExamSessionViewModel } from \"../../model/ExamSessionViewModel\";\nimport { rolesAssignedToCourseTypes } from \"../expert/ExpertConstants\";\n\nexport interface RoomAssignmentExpertSelectProps {\n examSession: ExamSessionViewModel;\n allExperts?: ExpertViewModel[];\n examDay: ExamDayViewModel;\n expertRole: ExpertRole;\n isFixedExpert: boolean;\n label?: JSX.Element;\n placeholder?: JSX.Element;\n minimumUsers?: number;\n showAllExperts: boolean;\n roomAssignment: RoomAssignmentViewModel;\n change: (isFixed: boolean, experts: AssignedUserViewModel[]) => void;\n}\n\nconst RoomAssignmentExpertSelect: FC = ({\n examSession,\n allExperts,\n expertRole,\n isFixedExpert,\n minimumUsers,\n label,\n placeholder,\n showAllExperts,\n examDay,\n roomAssignment,\n change,\n}) => {\n if (allExperts === undefined) {\n return <>;\n }\n\n const getAssignedUsers = (isFixed: boolean) =>\n roomAssignment.assignedUsers.filter((user) => user.isFixed === isFixed);\n\n const filterAvailableUsers = (\n availableUsers: ExpertViewModel[],\n assignedUsers: AssignedUserViewModel[],\n userRole: ExpertRole,\n roomAssignmentLanguages: string[],\n assignedExamIds: string[]\n ) => {\n return availableUsers.filter(\n (user) =>\n user.rolesWithExamsAndCourseTypes.filter(\n (roleExam) =>\n roleExam.role === userRole && roleExam.examIds.some((examId) => assignedExamIds.indexOf(examId) >= 0)\n ) && // expert has required role for at least one of the required exams\n !assignedUsers.map((assignedUser) => assignedUser.userId).includes(user.id) && // expert is not already assigned\n user.languages.some((language) => roomAssignmentLanguages.includes(language)) // expert has at least one required language\n );\n };\n\n const getRequiredExamIds = () => {\n if (roomAssignment.isPreparationRoom) {\n var examIds = new Set();\n examDay.roomAssignments.forEach((dayRoomAssignment) => {\n dayRoomAssignment.examAssignments.forEach((examAssignment) => {\n examIds.add(examAssignment.examId);\n });\n });\n return Array.from(examIds);\n }\n\n return roomAssignment.examAssignments.map((examAssignment) => examAssignment.examId);\n };\n\n const getRequiredCourseTypes = (examSession: ExamSessionViewModel, examIds: string[]) => {\n return examSession.exams\n .filter((exam) => examIds.includes(exam.id))\n .map((exam) => exam.courseTypes)\n .flat();\n };\n\n const getExpertSelectsProps = (examSession: ExamSessionViewModel) => {\n const allAssignedUsers = getAllAssignedExpertsForDay();\n const examIds = getRequiredExamIds();\n const requiredCourseTypes = getRequiredCourseTypes(examSession, examIds);\n\n const getAvailableUsers = () => {\n if (showAllExperts) {\n return allExperts.filter((e) =>\n e.rolesWithExamsAndCourseTypes.some(\n (re) =>\n re.role === expertRole &&\n (rolesAssignedToCourseTypes.includes(expertRole)\n ? re.courseTypes.some((courseType) => requiredCourseTypes.includes(courseType))\n : re.examIds.some((examId) => roomAssignment.examAssignments.map((ea) => ea.examId).includes(examId)))\n )\n );\n }\n const experts =\n examDay.type === ExamDayType.Correction ? examDay.availableCorrectionExperts : examDay.availableUsers;\n return experts.filter((e) =>\n e.rolesWithExamsAndCourseTypes.some(\n (re) =>\n re.role === expertRole &&\n (rolesAssignedToCourseTypes.includes(expertRole)\n ? re.courseTypes.some((courseType) => requiredCourseTypes.includes(courseType))\n : re.examIds.some((examId) => roomAssignment.examAssignments.map((ea) => ea.examId).includes(examId)))\n )\n );\n };\n const availableExperts = filterAvailableUsers(\n getAvailableUsers(),\n allAssignedUsers,\n expertRole,\n roomAssignment.languages,\n examIds\n );\n return {\n expertProps: getExpertsProps(availableExperts),\n };\n };\n\n const getAllAssignedExpertsForDay = () => {\n const dateString = new Date(examDay.date).toDateString();\n return examSession.examDays\n .filter((d) => new Date(d.date).toDateString() === dateString)\n .map((d) => d.roomAssignments.map((r) => r.assignedUsers).flat())\n .flat();\n };\n\n const handleChange =\n (areFixed: boolean) => (selectedExperts: ValueType, actionMeta?: ActionMeta) => {\n const experts =\n (actionMeta && actionMeta.action === \"clear\") || !selectedExperts\n ? []\n : (selectedExperts as OptionType[]).map((selectedUser) => {\n return {\n isFixed: areFixed,\n userId: selectedUser.value,\n };\n });\n change(areFixed, experts);\n };\n\n const getExpertsProps = (availableExperts: ExpertViewModel[]): UserSelectProps => {\n const assignedUsers = getAssignedUsers(isFixedExpert);\n const selectedExperts = allExperts.filter(\n (expert) => assignedUsers.filter((assignedUser) => assignedUser.userId === expert.id).length > 0\n );\n return {\n availableUsers: availableExperts,\n selectedUsers: selectedExperts,\n label: label,\n placeholder: placeholder,\n onUserSelectChange: handleChange(isFixedExpert),\n minimumSelectedUsers: minimumUsers,\n };\n };\n\n const { expertProps } = getExpertSelectsProps(examSession);\n\n const nameIdentifyier = isFixedExpert ? \"fixed-user-select-\" : \"reserve-user-select-\";\n return ;\n};\n\nexport default RoomAssignmentExpertSelect;\n","import Chip from \"@material-ui/core/Chip\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport React, { FC, useContext, useMemo } from \"react\";\nimport { ExpertMinumimFixedUsers, ExpertRole } from \"../../data/constants\";\nimport { ExamDayType } from \"../../model/ExamDayType\";\nimport { ExamDayViewModel } from \"../../model/ExamDayViewModel\";\nimport { ExpertViewModel } from \"../../model/ExpertViewModel\";\nimport { RoomAssignmentViewModel } from \"../../model/RoomAssignmentViewModel\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\nimport RoomAssignmentExpertSelect, {\n RoomAssignmentExpertSelectProps,\n} from \"../userRoomAssignmentBoard/RoomAssignmentExpertSelect\";\nimport { SchedulerContextValue } from \"./context/SchedulerContext\";\nimport { SchedulerExpertContextValue } from \"./context/SchedulerExpertContext\";\n\nconst getMinFixedExperts = (examDay: ExamDayViewModel, roomAssignment: RoomAssignmentViewModel) => {\n if (examDay.type === ExamDayType.Written) {\n return ExpertMinumimFixedUsers.proctorWrittenExam;\n } else if (roomAssignment.isPreparationRoom) {\n return ExpertMinumimFixedUsers.proctorOralPreparation;\n }\n return ExpertMinumimFixedUsers.expertOralExam;\n};\ninterface SchedulerProctorRowProps {\n isFixed: boolean;\n allExperts: ExpertViewModel[] | undefined;\n showAllExperts: boolean;\n readOnly: boolean;\n isSessionPublished: boolean;\n}\n\nconst SchedulerProctorRow: FC = ({ isFixed, allExperts, showAllExperts, readOnly }) => {\n const { selectedExamDayId, rooms, examDays, examSession } = useContext(SchedulerContextValue);\n const { changeExpert, schedulerExperts } = useContext(SchedulerExpertContextValue);\n\n const expertSelectors = useMemo(() => {\n return rooms\n .map((room) => {\n const examDay = examDays.find((examDay) => examDay.id === selectedExamDayId);\n const roomAssignment = examDay?.roomAssignments.find((r) => r.roomId === room.id);\n const expertRole =\n examDay?.type === ExamDayType.Written ||\n (examDay?.type === ExamDayType.Oral && roomAssignment?.isPreparationRoom)\n ? ExpertRole.Aufsichtsexperten\n : ExpertRole.Prüfungsexperten;\n\n if (!examDay || !roomAssignment || !examSession || !allExperts) {\n return null;\n }\n\n const roomAssignedWithUpdatedExperts: RoomAssignmentViewModel = {\n ...roomAssignment,\n assignedUsers:\n schedulerExperts\n .find((expert) => expert.examDayId === examDay.id)\n ?.expertAssignments.find((ea) => ea.roomId === room.id)\n ?.assignedUsers.filter((u) => u.isFixed === isFixed) || [],\n };\n\n if (readOnly) {\n const experts = roomAssignedWithUpdatedExperts.assignedUsers.map((assignedUser) => {\n const expert = allExperts.find((expert) => expert.id === assignedUser.userId);\n const expertName = expert !== undefined ? `${expert.firstName} ${expert.lastName}` : assignedUser.userId;\n return ;\n });\n return (\n \n {experts.length > 0 ? (\n experts\n ) : (\n <>\n {\"<\"}\n \n {\">\"}\n \n )}\n \n );\n }\n\n const minimumUsers = (isFixed && getMinFixedExperts(examDay, roomAssignment)) || undefined;\n const expertSelectProps: RoomAssignmentExpertSelectProps = {\n examDay,\n examSession,\n roomAssignment: roomAssignedWithUpdatedExperts,\n isFixedExpert: isFixed,\n expertRole,\n allExperts,\n showAllExperts,\n minimumUsers,\n change: changeExpert(examDay.id, room.id),\n };\n\n return {};\n })\n .filter((expertSelect) => expertSelect);\n }, [\n allExperts,\n changeExpert,\n examDays,\n examSession,\n isFixed,\n readOnly,\n rooms,\n schedulerExperts,\n selectedExamDayId,\n showAllExperts,\n ]);\n\n if (allExperts === undefined || examSession === undefined || examDays === undefined) {\n return <>;\n }\n\n const translationId = isFixed ? \"userRoomAssignment.label.fixed\" : \"userRoomAssignment.label.reserve\";\n return (\n \n \n \n \n {expertSelectors}\n \n );\n};\n\nexport default SchedulerProctorRow;\n","import { Typography } from \"@material-ui/core\";\r\nimport React, { FC, useContext } from \"react\";\r\nimport { useIntl } from \"react-intl\";\r\nimport { ActionMeta, ValueType } from \"react-select/src/types\";\r\nimport { ExamSessionCandidateExamState } from \"../../model/examSessionCandidate/ExamSessionCandidateExamViewModel\";\r\nimport { OralExamOptionTranslationKey } from \"../../model/OralExamOption\";\r\nimport { RoomViewModel } from \"../../model/RoomViewModel\";\r\nimport { GetTranslation } from \"../../translations/GetTranslation\";\r\nimport CustomSelect, { OptionType } from \"../common/customSelect/CustomSelect\";\r\nimport FormGridCell from \"../common/FormGridCell\";\r\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\r\nimport { SchedulerCandidateContextValue, SchedulerExamCandidate } from \"./context/SchedulerCandidateContext\";\r\nimport { SchedulerContextValue } from \"./context/SchedulerContext\";\r\nimport { isOralDay } from \"./context/SchedulerContextUtils\";\r\n\r\ninterface SchedulerCandidateSelectProps {\r\n selectedCandidates: SchedulerExamCandidate[];\r\n examId?: string;\r\n room?: RoomViewModel;\r\n timeSlotIndex?: number;\r\n}\r\n\r\nconst SchedulerCandidateSelect: FC = ({\r\n selectedCandidates,\r\n examId,\r\n room,\r\n timeSlotIndex,\r\n}) => {\r\n const intl = useIntl();\r\n const { examTypes, readonly, selectedExamDayId } = useContext(SchedulerContextValue);\r\n const {\r\n schedulerCandidates,\r\n schedulerExamCandidates,\r\n addCandidate: handleAddCandidate,\r\n removeCandidate: handleRemoveCandidate,\r\n clearCandidates: handleClearCandidates,\r\n } = useContext(SchedulerCandidateContextValue);\r\n\r\n const getCandidateLabel = (schedulerExamCandidate: SchedulerExamCandidate) => {\r\n const { candidateId, moduleOption } = schedulerExamCandidate;\r\n const candidate = schedulerCandidates.find((candidate) => candidate.candidateId === candidateId);\r\n if (candidate === undefined) {\r\n return candidateId;\r\n }\r\n\r\n const name = `${candidate.firstName} ${candidate.lastName}`.trim();\r\n const optionLabel = GetTranslation(intl, OralExamOptionTranslationKey[moduleOption]);\r\n return `${name} ${candidate.language} - ${optionLabel}`;\r\n };\r\n\r\n if (readonly) {\r\n const getReadonlyCandidateElement = (schedulerExamCandidate: SchedulerExamCandidate) => {\r\n const { candidateId } = schedulerExamCandidate;\r\n const label = getCandidateLabel(schedulerExamCandidate);\r\n return (\r\n \r\n {label}\r\n \r\n );\r\n };\r\n\r\n return <>{selectedCandidates.map(getReadonlyCandidateElement)};\r\n }\r\n\r\n if (examId === undefined || room === undefined || timeSlotIndex === undefined) {\r\n return null;\r\n }\r\n\r\n const isMulti = !isOralDay(examTypes);\r\n\r\n const mapToOption = (schedulerExamCandidate: SchedulerExamCandidate): OptionType => {\r\n const { candidateId } = schedulerExamCandidate;\r\n const label = getCandidateLabel(schedulerExamCandidate);\r\n return { label, value: candidateId } as OptionType;\r\n };\r\n\r\n const handleChange = (valueType: ValueType, action: ActionMeta | undefined) => {\r\n if (!action) {\r\n return;\r\n }\r\n\r\n if (action.action === \"clear\") {\r\n handleClearCandidates(selectedExamDayId, room.id, timeSlotIndex);\r\n return;\r\n }\r\n\r\n if (action.removedValue && action.action === \"remove-value\") {\r\n handleRemoveCandidate(action.removedValue.value, examId);\r\n return;\r\n }\r\n\r\n if (action.action === \"select-option\") {\r\n if (isMulti) {\r\n if (action.option !== undefined) {\r\n handleAddCandidate(action.option?.value, examId, selectedExamDayId, room.id, timeSlotIndex);\r\n }\r\n } else {\r\n if (valueType !== undefined && valueType !== null) {\r\n const optionType = valueType as OptionType;\r\n handleAddCandidate(optionType.value, examId, selectedExamDayId, room.id, timeSlotIndex);\r\n }\r\n }\r\n }\r\n };\r\n\r\n const selectedCandidateOptions = selectedCandidates.map(mapToOption);\r\n\r\n const availableCandidateOptions = schedulerExamCandidates\r\n .filter(\r\n (schedulerExamCandidate) =>\r\n schedulerExamCandidate.examId === examId &&\r\n schedulerExamCandidate.examState === ExamSessionCandidateExamState.Cancelled\r\n )\r\n .map(mapToOption);\r\n\r\n const isFull = selectedCandidateOptions.length === room.numberOfSeats;\r\n const isOverloaded = selectedCandidateOptions.length > room.numberOfSeats;\r\n\r\n const getLabel = () => {\r\n if (isOverloaded) {\r\n return ;\r\n }\r\n\r\n if (isFull) {\r\n return ;\r\n }\r\n\r\n return \"\";\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default SchedulerCandidateSelect;\r\n","import React, { ChangeEvent, FocusEvent, FC, useContext, useEffect, useState } from \"react\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\nimport { TextField, Typography } from \"@material-ui/core\";\nimport { SchedulerCaseNameContextValue } from \"./context/SchedulerCaseNameContext\";\nimport { SchedulerContextValue } from \"./context/SchedulerContext\";\n\ninterface SchedulerCaseNameTextFieldProps {\n candidateId: string;\n examId: string;\n}\n\nconst SchedulerCaseNameTextField: FC = ({ candidateId, examId }) => {\n const { readonly } = useContext(SchedulerContextValue);\n const { examCandidateCaseNames, updateCaseName } = useContext(SchedulerCaseNameContextValue);\n const [value, setValue] = useState(\"\");\n\n useEffect(() => {\n const schedulerExamCandidate = examCandidateCaseNames.find(\n (examCandidate) => examCandidate.candidateId === candidateId && examCandidate.examId === examId\n );\n const caseName = schedulerExamCandidate?.caseName;\n setValue(() => (caseName === undefined || caseName === null ? \"\" : caseName));\n }, [candidateId, examId, examCandidateCaseNames]);\n\n if (readonly) {\n return {value};\n }\n\n const handleOnChange = (event: ChangeEvent) => {\n setValue(event.target.value);\n };\n\n // Performance optimization. Update value on blur to prevent unnecessary renders.\n const handleOnBlur = (event: FocusEvent) => {\n updateCaseName(candidateId, examId, value);\n };\n\n return (\n }\n value={value}\n onBlur={handleOnBlur}\n onChange={handleOnChange}\n />\n );\n};\n\nexport default SchedulerCaseNameTextField;\n","import Grid from \"@material-ui/core/Grid\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport { createStyles, makeStyles } from \"@material-ui/styles\";\nimport React, { FC, useContext } from \"react\";\nimport { ExamDayType } from \"../../model/ExamDayType\";\nimport { ExamSessionCandidateExamState } from \"../../model/examSessionCandidate/ExamSessionCandidateExamViewModel\";\nimport { RoomViewModel } from \"../../model/RoomViewModel\";\nimport FormGridCell from \"../common/FormGridCell\";\nimport ExamSelect from \"../examSession/ExamSelect\";\nimport { SchedulerCandidateContextValue } from \"./context/SchedulerCandidateContext\";\nimport { SchedulerContextValue } from \"./context/SchedulerContext\";\nimport { isOralDay } from \"./context/SchedulerContextUtils\";\nimport SchedulerCandidateSelect from \"./SchedulerCandidateSelect\";\nimport SchedulerCaseNameTextField from \"./SchedulerCaseNameTextField\";\n\nconst useStyles = makeStyles(() =>\n createStyles({\n infoRow: {\n marginTop: 10,\n },\n })\n);\n\nexport interface SchedulerCellProps {\n examIds: string[];\n room: RoomViewModel;\n timeSlotIndex: number;\n}\n\nconst SchedulerCell: FC = ({ examIds, room, timeSlotIndex }) => {\n const classes = useStyles();\n const {\n examTypes,\n readonly,\n isSessionPublished,\n selectedExamDayId,\n exams,\n examDays,\n addTimeSlotExam,\n removeTimeSlotExam,\n clearTimeSlotExams,\n } = useContext(SchedulerContextValue);\n const { schedulerExamCandidates } = useContext(SchedulerCandidateContextValue);\n const selectedDay = examDays.find((examDay) => examDay.id === selectedExamDayId);\n const isCorrectionDay = selectedDay?.type === ExamDayType.Correction;\n\n const selectedCandidates = schedulerExamCandidates.filter(\n (schedulerExamCandidate) =>\n schedulerExamCandidate.examDayId === selectedExamDayId &&\n schedulerExamCandidate.roomId === room.id &&\n schedulerExamCandidate.timeSlotIndex === timeSlotIndex &&\n schedulerExamCandidate.examState !== ExamSessionCandidateExamState.Cancelled\n );\n\n const handleAddExam = (examId: string) => {\n addTimeSlotExam(room.id, examId, timeSlotIndex);\n };\n\n const handleRemoveExam = (examId: string) => {\n removeTimeSlotExam(room.id, examId, timeSlotIndex);\n };\n\n const handleClearExams = () => {\n clearTimeSlotExams(room.id, timeSlotIndex);\n };\n\n return (\n \n \n \n \n \n {isSessionPublished && !isCorrectionDay && examIds.length > 0 && (\n \n \n \n )}\n {isOralDay(examTypes) && selectedCandidates.length === 1 && examIds.length > 0 && (\n \n \n \n )}\n \n \n );\n};\n\nexport default SchedulerCell;\n","import TableCell from \"@material-ui/core/TableCell\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport React, { FC, useContext } from \"react\";\nimport { RoomAssignmentViewModel } from \"../../model/RoomAssignmentViewModel\";\nimport { TimeSlot } from \"../../model/TimeSlotStructure\";\nimport { getTimeSlotLabel } from \"../../utils/TimeSlotUtils\";\nimport { SchedulerContextValue } from \"./context/SchedulerContext\";\nimport SchedulerCell from \"./SchedulerCell\";\n\ninterface SchedulerTimeSlotRowProps {\n timeSlot: TimeSlot;\n}\n\nconst SchedulerTimeSlotRow: FC = ({ timeSlot }) => {\n const { selectedExamDayId, rooms, examDays, renderCell, renderTimeSlotLabel } = useContext(SchedulerContextValue);\n\n const getRoomAssignment = (roomId: string) => {\n const examDay = examDays.find((examDay) => examDay.id === selectedExamDayId);\n return examDay?.roomAssignments.find((roomAssignment) => roomAssignment.roomId === roomId);\n };\n\n const getRoomExamIds = (roomAssignment: RoomAssignmentViewModel | undefined) => {\n if (timeSlot.index === undefined || roomAssignment === undefined) {\n return [];\n }\n\n return roomAssignment.examAssignments\n .filter((examAssignment) => examAssignment.timeSlotIndex === timeSlot.index)\n .map((examAssignment) => examAssignment.examId);\n };\n\n const label = getTimeSlotLabel(timeSlot);\n return (\n \n {renderTimeSlotLabel !== undefined ? renderTimeSlotLabel(timeSlot) : label}\n {rooms.map((room) => {\n const roomAssignment = getRoomAssignment(room.id);\n const examIds = getRoomExamIds(roomAssignment);\n if (renderCell !== undefined) {\n return renderCell(examIds, room, timeSlot.index!, room.id);\n }\n\n if (roomAssignment?.isPreparationRoom) {\n return ;\n }\n\n return ;\n })}\n \n );\n};\n\nexport default SchedulerTimeSlotRow;\n","import { IconButton, Tooltip, makeStyles } from \"@material-ui/core\";\r\nimport Paper from \"@material-ui/core/Paper\";\r\nimport Table from \"@material-ui/core/Table\";\r\nimport TableBody from \"@material-ui/core/TableBody\";\r\nimport TableCell from \"@material-ui/core/TableCell\";\r\nimport TableHead from \"@material-ui/core/TableHead\";\r\nimport TableRow from \"@material-ui/core/TableRow\";\r\nimport { Queue } from \"@material-ui/icons\";\r\nimport React, { FC, useContext, useState } from \"react\";\r\nimport { useGetExpertsQuery } from \"../../api/rtk/ExpertApi\";\r\nimport { ExamDayType } from \"../../model/ExamDayType\";\r\nimport { TimeSlot, TimeSlotType } from \"../../model/TimeSlotStructure\";\r\nimport { getTimeSlotLabel } from \"../../utils/TimeSlotUtils\";\r\nimport CustomSwitch from \"../common/CustomSwitch\";\r\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\r\nimport { SchedulerContextValue } from \"./context/SchedulerContext\";\r\nimport SchedulerExamSelectDialog from \"./SchedulerExamSelectDialog\";\r\nimport SchedulerInfoRow from \"./SchedulerInfoRow\";\r\nimport SchedulerLanguagesRow from \"./SchedulerLanguagesRow\";\r\nimport SchedulerProctorRow from \"./SchedulerProctorRow\";\r\nimport SchedulerTimeSlotRow from \"./SchedulerTimeSlotRow\";\r\n\r\nconst secondaryColor = \"#e0e0e0\";\r\nconst useStyles = makeStyles((theme) => ({\r\n paper: {\r\n width: \"100%\",\r\n maxHeight: `calc(100% - ${theme.spacing(1)}px)`,\r\n overflow: \"auto\",\r\n margin: \"1px\",\r\n },\r\n table: {\r\n tableLayout: \"fixed\",\r\n \"& tbody tr td:first-child\": {\r\n position: \"sticky\",\r\n left: 0,\r\n zIndex: 1,\r\n background: \"white\",\r\n },\r\n \"& tbody tr$secondaryRow td:first-child\": {\r\n backgroundColor: secondaryColor,\r\n },\r\n },\r\n headerCell: {\r\n width: \"18rem\",\r\n position: \"sticky\",\r\n top: 0,\r\n zIndex: 1,\r\n backgroundColor: secondaryColor,\r\n },\r\n expertsTableBody: {\r\n border: \"solid\",\r\n borderColor: secondaryColor,\r\n borderWidth: \"10px\",\r\n borderRight: \"none\",\r\n borderLeft: \"none\",\r\n borderTop: \"none\",\r\n padding: 0,\r\n margin: 0,\r\n boxSizing: \"border-box\",\r\n },\r\n roomColumn: {\r\n width: \"10rem\",\r\n left: 0,\r\n zIndex: 2,\r\n },\r\n secondaryRow: {\r\n \"& td\": {\r\n backgroundColor: secondaryColor,\r\n },\r\n },\r\n separationRow: {\r\n padding: \"1px\",\r\n },\r\n assignExamButton: {\r\n marginLeft: \"8px\",\r\n },\r\n expertsSwitch: {\r\n backgroundColor: `${secondaryColor}!important`,\r\n paddingTop: 0,\r\n paddingBottom: 0,\r\n },\r\n}));\r\n\r\nconst SchedulerTable: FC = () => {\r\n const classes = useStyles();\r\n const [examSelectDialogRoomId, setExamSelectDialogRoomId] = useState(\"\");\r\n const {\r\n readonly,\r\n isSessionPublished,\r\n exams,\r\n rooms,\r\n selectedExamDayId,\r\n examDays,\r\n timeSlotStructure,\r\n setAllTimeSlotsExams,\r\n } = useContext(SchedulerContextValue);\r\n const selectedExamDay = examDays.find((examDay) => examDay.id === selectedExamDayId);\r\n const timeSlots = selectedExamDay === undefined ? [] : timeSlotStructure[selectedExamDay.timeSlotStructureType];\r\n const { data: allExperts } = useGetExpertsQuery();\r\n const [showAllExperts, setShowAllExperts] = useState(false);\r\n\r\n const closeExamSelectDialog = () => setExamSelectDialogRoomId(\"\");\r\n\r\n const applySelectedExams = (examIds: string[]) => {\r\n setAllTimeSlotsExams(examSelectDialogRoomId, examIds);\r\n closeExamSelectDialog();\r\n };\r\n\r\n const openExamSelectDialog = (roomId: string) => setExamSelectDialogRoomId(roomId);\r\n\r\n const getRoomAssignment = (roomId: string) =>\r\n selectedExamDay?.roomAssignments.find((roomAssignment) => roomAssignment.roomId === roomId);\r\n\r\n const getExamSelectDialogButton = (roomId: string) => {\r\n if (readonly || isSessionPublished) {\r\n return <>;\r\n }\r\n\r\n var roomAssignment = getRoomAssignment(roomId);\r\n if (roomAssignment?.isPreparationRoom) {\r\n return <>;\r\n }\r\n\r\n return (\r\n }>\r\n openExamSelectDialog(roomId)}>\r\n \r\n \r\n \r\n );\r\n };\r\n\r\n const getRow = (timeSlot: TimeSlot) => {\r\n const label = getTimeSlotLabel(timeSlot);\r\n if (timeSlot.type === TimeSlotType.Briefing) {\r\n return (\r\n }\r\n rowLabel={label}\r\n className={classes.secondaryRow}\r\n />\r\n );\r\n }\r\n\r\n if (timeSlot.type === TimeSlotType.Break) {\r\n return (\r\n }\r\n rowLabel={label}\r\n className={classes.secondaryRow}\r\n />\r\n );\r\n }\r\n\r\n return ;\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {rooms.map((room) => (\r\n \r\n {room.name}\r\n {getExamSelectDialogButton(room.id)}\r\n \r\n ))}\r\n \r\n \r\n 0 &&\r\n timeSlots[0].type === TimeSlotType.Exam &&\r\n classes.expertsTableBody) ||\r\n undefined\r\n }\r\n >\r\n \r\n {!readonly && (\r\n \r\n <>\r\n \r\n }\r\n value={showAllExperts}\r\n onChange={() => setShowAllExperts((prevState) => !prevState)}\r\n />\r\n \r\n {selectedExamDay?.roomAssignments?.map((x) => (\r\n \r\n ))}\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n {timeSlots?.map(getRow)}\r\n
\r\n
\r\n \r\n \r\n );\r\n};\r\n\r\nexport default SchedulerTable;\r\n","import React, { FC, useContext } from \"react\";\r\nimport DefaultButtons from \"../common/buttons/DefaultButtons\";\r\nimport { SchedulerCandidateContextValue } from \"./context/SchedulerCandidateContext\";\r\nimport { SchedulerContextValue } from \"./context/SchedulerContext\";\r\n\r\nconst SchedulerButtons: FC = () => {\r\n const { save, navigateToSession } = useContext(SchedulerContextValue);\r\n const { isValid } = useContext(SchedulerCandidateContextValue);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default SchedulerButtons;\r\n","import SchedulerExamDaySteps from \"./SchedulerExamDaySteps\";\nimport FormGridCell from \"../common/FormGridCell\";\nimport Grid from \"@material-ui/core/Grid\";\nimport React, { FC, useContext } from \"react\";\nimport Room from \"@material-ui/icons/Room\";\nimport TitleWithIcon from \"../common/TitleWithIcon\";\nimport Typography from \"@material-ui/core/Typography\";\nimport SchedulerTable from \"./SchedulerTable\";\nimport { SchedulerContextValue } from \"./context/SchedulerContext\";\nimport SchedulerButtons from \"./SchedulerButtons\";\nimport { makeStyles } from \"@material-ui/core\";\n\nconst useStyles = makeStyles(() => ({\n mainContainer: {\n overflow: \"hidden\",\n height: \"calc(100vh - 88px)\",\n },\n tableContainer: {\n overflow: \"hidden\",\n flex: 1,\n },\n}));\n\nconst Scheduler: FC = () => {\n const classes = useStyles();\n const { examSessionLabel, selectedLocationName, selectedExamDayId, examDays, changeSelectedExamDay } =\n useContext(SchedulerContextValue);\n\n return (\n \n \n \n {examSessionLabel}\n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n );\n};\n\nexport default Scheduler;\n","import React, { FC } from \"react\";\nimport { ExamDayType } from \"../../../model/ExamDayType\";\nimport SchedulerContextProvider from \"../context/SchedulerContextProvider\";\nimport Scheduler from \"../Scheduler\";\n\nconst CorrectionExamsScheduler: FC = () => (\n \n \n \n);\n\nexport default CorrectionExamsScheduler;\n","import Grid from \"@material-ui/core/Grid\";\r\nimport TableCell from \"@material-ui/core/TableCell\";\r\nimport { createStyles, makeStyles } from \"@material-ui/styles\";\r\nimport React, { FC, useContext } from \"react\";\r\nimport { ExamSessionCandidateExamState } from \"../../../model/examSessionCandidate/ExamSessionCandidateExamViewModel\";\r\nimport FormGridCell from \"../../common/FormGridCell\";\r\nimport ExamSelect from \"../../examSession/ExamSelect\";\r\nimport { SchedulerCandidateContextValue } from \"../context/SchedulerCandidateContext\";\r\nimport { SchedulerContextValue } from \"../context/SchedulerContext\";\r\nimport SchedulerCandidateSelect from \"../SchedulerCandidateSelect\";\r\nimport SchedulerCell, { SchedulerCellProps } from \"../SchedulerCell\";\r\n\r\nconst useStyles = makeStyles(() =>\r\n createStyles({\r\n infoRow: {\r\n marginTop: 10,\r\n },\r\n })\r\n);\r\n\r\nconst ExpertSchedulerCell: FC = (props) => {\r\n const classes = useStyles();\r\n const { selectedExamDayId, exams, examDays } = useContext(SchedulerContextValue);\r\n const { schedulerExamCandidates } = useContext(SchedulerCandidateContextValue);\r\n const selectedDay = examDays.find((examDay) => examDay.id === selectedExamDayId);\r\n const roomAssignment = selectedDay?.roomAssignments.find((roomAssignment) => roomAssignment.roomId === props.room.id);\r\n\r\n if (!roomAssignment?.isPreparationRoom) {\r\n return ;\r\n }\r\n\r\n if (selectedDay === undefined) {\r\n return null;\r\n }\r\n\r\n const { timeSlotIndex } = props;\r\n\r\n const selectedCandidates = schedulerExamCandidates.filter(\r\n (schedulerExamCandidate) =>\r\n schedulerExamCandidate.examDayId === selectedExamDayId &&\r\n schedulerExamCandidate.timeSlotIndex === timeSlotIndex &&\r\n schedulerExamCandidate.examState !== ExamSessionCandidateExamState.Cancelled\r\n );\r\n const selectedExamIds = selectedDay.roomAssignments.reduce((examIds, roomAssignment) => {\r\n roomAssignment.examAssignments.forEach((examAssignment) => {\r\n if (examAssignment.timeSlotIndex === timeSlotIndex && !examIds.includes(examAssignment.examId)) {\r\n examIds.push(examAssignment.examId);\r\n }\r\n });\r\n return examIds;\r\n }, []);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {selectedExamIds.length > 0 && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default ExpertSchedulerCell;\r\n","import { LinearProgress } from \"@material-ui/core\";\r\nimport React, { FC, useCallback, useEffect, useMemo, useState } from \"react\";\r\nimport { useParams } from \"react-router\";\r\nimport { useGetExamSessionQuery } from \"../../../api/rtk/ExamSessionApi\";\r\nimport { useGetExamSessionCandidatesQuery } from \"../../../api/rtk/ExamSessionCandidateApi\";\r\nimport { useGetMeAsExpertQuery } from \"../../../api/rtk/MeApi\";\r\nimport { useGetTimeSlotStructureQuery } from \"../../../api/rtk/TimeSlotStructureApi\";\r\nimport { ExamDayViewModel } from \"../../../model/ExamDayViewModel\";\r\nimport { GetLocalizedName } from \"../../../model/ExamSessionViewModel\";\r\nimport { RoomViewModel } from \"../../../model/RoomViewModel\";\r\nimport { TimeSlot, TimeSlotStructure } from \"../../../model/TimeSlotStructure\";\r\nimport { getTimeSlotLabel } from \"../../../utils/TimeSlotUtils\";\r\nimport TranslatedMessage from \"../../translations/TranslatedMessage\";\r\nimport ExpertSchedulerCell from \"../expertExams/ExpertSchedulerCell\";\r\nimport {\r\n initialSchedulerCandidateContextValue,\r\n SchedulerCandidate,\r\n SchedulerCandidateContext,\r\n SchedulerCandidateContextValue,\r\n SchedulerExamCandidate\r\n} from \"./SchedulerCandidateContext\";\r\nimport {\r\n ExamCandidateCaseName,\r\n initialSchedulerCaseNameContextValue,\r\n SchedulerCaseNameContext,\r\n SchedulerCaseNameContextValue\r\n} from \"./SchedulerCaseNameContext\";\r\nimport { initialSchedulerContextValue, SchedulerContext, SchedulerContextValue } from \"./SchedulerContext\";\r\nimport { getCandidatesContextData, getExamDay, getExamTypes } from \"./SchedulerContextUtils\";\r\nimport {\r\n initialSchedulerExpertContextValue,\r\n SchedulerExpertContext,\r\n SchedulerExpertContextValue,\r\n SchedulerRoomExperts\r\n} from \"./SchedulerExpertContext\";\r\n\r\nexport const ExpertSchedulerContextProvider: FC = ({ children }) => {\r\n const { examSessionId } = useParams<{ examSessionId: string }>();\r\n const { data: examSession, isFetching: isExamSessionFetching } = useGetExamSessionQuery(examSessionId);\r\n const { data: examSessionCandidates, isFetching: areExamSessionCandidatesFetching } =\r\n useGetExamSessionCandidatesQuery(examSessionId);\r\n const { data: timeSlotStructure, isFetching: isTimeSlotStructureFetching } = useGetTimeSlotStructureQuery();\r\n const { data: currentExpert, isFetching: isExpertFetching } = useGetMeAsExpertQuery();\r\n\r\n const [selectedExamDayId, setSelectedExamDayId] = useState(\"\");\r\n const [examDays, setExamDays] = useState([]);\r\n const [schedulerCandidates, setSchedulerCandidates] = useState([]);\r\n const [schedulerExamCandidates, setSchedulerExamCandidates] = useState([]);\r\n const [examCandidateCaseNames, setExamCandidateCaseNames] = useState([]);\r\n const [schedulerExperts, setSchedulerExperts] = useState([]);\r\n\r\n const isSessionPublished = examSession?.published || false;\r\n const selectedExamDay = useMemo(() => getExamDay(examDays, selectedExamDayId), [examDays, selectedExamDayId]);\r\n const examTypes = getExamTypes(selectedExamDay);\r\n const exams = useMemo(\r\n () => examSession?.exams.filter((exam) => examTypes.includes(exam.type)) || [],\r\n [examSession, examTypes]\r\n );\r\n\r\n const rooms = useMemo(() => {\r\n const allRooms = examSession?.locations.map((location) => location.rooms).flat();\r\n return selectedExamDay !== undefined && allRooms !== undefined\r\n ? allRooms.filter((room) =>\r\n selectedExamDay.roomAssignments.some(\r\n (roomAssignment) =>\r\n roomAssignment.roomId === room.id &&\r\n roomAssignment.assignedUsers.some((user) => user.userId === currentExpert?.id)\r\n )\r\n )\r\n : [];\r\n }, [examSession, currentExpert, selectedExamDay]);\r\n\r\n const schedulerCaseNameContext = useMemo(\r\n () => ({\r\n ...initialSchedulerCaseNameContextValue,\r\n examCandidateCaseNames,\r\n }),\r\n [examCandidateCaseNames]\r\n );\r\n\r\n const examSessionCandidatesContext = useMemo(\r\n () => ({\r\n ...initialSchedulerCandidateContextValue,\r\n schedulerCandidates,\r\n schedulerExamCandidates,\r\n }),\r\n [schedulerCandidates, schedulerExamCandidates]\r\n );\r\n\r\n const changeSelectedExamDay = useCallback((examDayId: string) => {\r\n setSelectedExamDayId(examDayId);\r\n }, []);\r\n\r\n const schedulerContext = useMemo(() => {\r\n return {\r\n ...initialSchedulerContextValue,\r\n examTypes,\r\n readonly: true,\r\n examSessionLabel: examSession !== undefined ? GetLocalizedName(examSession) : \"\",\r\n isSessionPublished,\r\n selectedExamDayId,\r\n locations: examSession !== undefined ? examSession.locations : [],\r\n examDays,\r\n rooms,\r\n exams,\r\n timeSlotStructure: timeSlotStructure !== undefined ? timeSlotStructure : ({} as TimeSlotStructure),\r\n changeSelectedExamDay,\r\n renderCell: (examIds: string[], room: RoomViewModel, timeSlotIndex: number, key?: string) => (\r\n \r\n ),\r\n renderTimeSlotLabel: (timeSlot: TimeSlot) => (\r\n <>\r\n
{getTimeSlotLabel(timeSlot)}
\r\n
\r\n : {timeSlot.arrivalTime}\r\n
\r\n \r\n ),\r\n };\r\n }, [\r\n examTypes,\r\n examSession,\r\n isSessionPublished,\r\n selectedExamDayId,\r\n examDays,\r\n rooms,\r\n exams,\r\n timeSlotStructure,\r\n changeSelectedExamDay,\r\n ]);\r\n\r\n const expertSchedulerContext = useMemo(() => {\r\n return {\r\n schedulerExperts,\r\n changeExpert: initialSchedulerExpertContextValue.changeExpert,\r\n };\r\n }, [schedulerExperts]);\r\n\r\n useEffect(() => {\r\n if (examSession === undefined) {\r\n return;\r\n }\r\n\r\n const examDays = examSession.examDays\r\n .filter((examDay) =>\r\n examDay.roomAssignments.some((assignment) =>\r\n assignment.assignedUsers.some((user) => user.userId === currentExpert?.id)\r\n )\r\n )\r\n .sort((day1, day2) => new Date(day1.date).getTime() - new Date(day2.date).getTime());\r\n setExamDays(examDays);\r\n if (examDays[0] !== undefined) {\r\n setSelectedExamDayId(examDays[0].id);\r\n }\r\n }, [examSession, currentExpert]);\r\n\r\n useEffect(() => {\r\n if (examSessionCandidates === undefined) {\r\n return;\r\n }\r\n\r\n const { schedulerCandidates, schedulerExamCandidates, examCandidateCaseNames } = getCandidatesContextData(\r\n examSessionCandidates,\r\n examDays\r\n );\r\n setSchedulerCandidates(schedulerCandidates);\r\n setSchedulerExamCandidates(schedulerExamCandidates);\r\n setExamCandidateCaseNames(examCandidateCaseNames);\r\n }, [examSessionCandidates, examDays]);\r\n\r\n useEffect(() => {\r\n if (examDays === undefined) {\r\n return;\r\n }\r\n setSchedulerExperts(\r\n examDays.map((ed) => ({\r\n examDayId: ed.id,\r\n expertAssignments: ed.roomAssignments.map((ra) => ({\r\n roomId: ra.roomId,\r\n assignedUsers: ra.assignedUsers.map((user) => ({ isFixed: user.isFixed, userId: user.userId })),\r\n })),\r\n }))\r\n );\r\n }, [examDays]);\r\n\r\n if (isExamSessionFetching || areExamSessionCandidatesFetching || isExpertFetching || isTimeSlotStructureFetching) {\r\n return ;\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {children}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ExpertSchedulerContextProvider;\r\n","import SchedulerExamDaySteps from \"../SchedulerExamDaySteps\";\nimport FormGridCell from \"../../common/FormGridCell\";\nimport Grid from \"@material-ui/core/Grid\";\nimport React, { FC, useContext } from \"react\";\nimport TitleWithIcon from \"../../common/TitleWithIcon\";\nimport SchedulerTable from \"../SchedulerTable\";\nimport { SchedulerContextValue } from \"../context/SchedulerContext\";\nimport { AssignmentInd } from \"@material-ui/icons\";\n\nconst ExpertScheduler: FC = () => {\n const { examSessionLabel, selectedExamDayId, locations, examDays, changeSelectedExamDay } =\n useContext(SchedulerContextValue);\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default ExpertScheduler;\n","import React, { FC } from \"react\";\nimport ExpertSchedulerContextProvider from \"../context/ExpertSchedulerContextProvider\";\nimport ExpertScheduler from \"./ExpertScheduler\";\n\nconst ExpertExamsScheduler: FC = () => (\n \n \n \n);\n\nexport default ExpertExamsScheduler;\n","import React, { FC } from \"react\";\nimport { ExamDayType } from \"../../../model/ExamDayType\";\nimport SchedulerContextProvider from \"../context/SchedulerContextProvider\";\nimport Scheduler from \"../Scheduler\";\n\nconst OralExamsScheduler: FC = () => (\n \n \n \n);\n\nexport default OralExamsScheduler;\n","import React, { FC } from \"react\";\nimport { ExamDayType } from \"../../../model/ExamDayType\";\nimport SchedulerContextProvider from \"../context/SchedulerContextProvider\";\nimport Scheduler from \"../Scheduler\";\n\nconst WrittenExamsScheduler: FC = () => (\n \n \n \n);\n\nexport default WrittenExamsScheduler;\n","import { ApiResponse } from \"../CustomFetch\";\nimport { api } from \"./BaseApi\";\nimport { ExpertAvailabilityRequestModel } from \"../../model/ExpertAvailabilityRequestModel\";\nimport { ExpertAvailabilityViewModel } from \"../../model/ExpertAvailabilityViewModel\";\n\nexport type AvailabilityType = \"examination\" | \"correction\";\n\nconst getExpertAvailabilityUrl = (examSessionId: string, availabilityType: AvailabilityType) =>\n `expertAvailability/${examSessionId}/${availabilityType}`;\n\nconst expertAvailabilityApi = api.enhanceEndpoints({ addTagTypes: [\"ExpertAvailability\"] }).injectEndpoints({\n endpoints: (builder) => ({\n getExpertAvailability: builder.query<\n ExpertAvailabilityViewModel,\n { examSessionId: string; availabilityType: AvailabilityType }\n >({\n query: ({ examSessionId, availabilityType }) => getExpertAvailabilityUrl(examSessionId, availabilityType),\n transformResponse: (response: ApiResponse) => response.data,\n providesTags: (_result, _error, arg) => [\n { type: \"ExpertAvailability\", id: arg.examSessionId + arg.availabilityType },\n ],\n }),\n updateAvailability: builder.mutation<\n ApiResponse,\n { examSessionId: string; availabilityType: AvailabilityType; expertAvailability: ExpertAvailabilityRequestModel }\n >({\n query: ({ availabilityType, expertAvailability }) => ({\n url: `expertAvailability/${availabilityType}`,\n body: expertAvailability,\n method: \"PUT\",\n }),\n invalidatesTags: (_result, _error, arg) => [\n { type: \"ExpertAvailability\", id: arg.examSessionId + arg.availabilityType },\n ],\n }),\n }),\n});\n\nexport const { endpoints, useGetExpertAvailabilityQuery, useUpdateAvailabilityMutation } = expertAvailabilityApi;\n","import React from \"react\";\nimport { Typography, TableRow, Checkbox, TableCell, Chip, Grid, Box } from \"@material-ui/core\";\nimport { ExamDayViewModel } from \"../../model/ExamDayViewModel\";\nimport { areDatesEqual } from \"../../utils/Dates\";\nimport { LocationViewModel } from \"../../model/LocationViewModel\";\nimport { ExamTemplateIndex } from \"../../model/Exam\";\nimport { GetTranslatedValue } from \"../../model/Shared/TranslatedValue\";\n\nexport type CellData = FullCellData | EmptyCellData;\n\nexport class FullCellData {\n isChecked: boolean;\n examDay: ExamDayViewModel;\n examIds: string[];\n\n constructor(isChecked: boolean, examDay: ExamDayViewModel, examIds: string[]) {\n this.isChecked = isChecked;\n this.examDay = examDay;\n this.examIds = examIds;\n }\n}\n\nexport class EmptyCellData {}\n\ninterface ExpertAvailabilityRowProps {\n location: LocationViewModel;\n cells: CellData[];\n availableExamDays: ExamDayViewModel[];\n selectedExamDayIds: string[];\n allSessionExams: ExamTemplateIndex[];\n onChange: (checkedItems: string[]) => void;\n}\n\nconst isDateAlreadySelected = (\n availableExamDays: ExamDayViewModel[],\n selectedExamDayIds: string[],\n newSelectedExamDay: ExamDayViewModel\n) => {\n const selectedExamDays = availableExamDays.filter((day) => selectedExamDayIds.includes(day.id));\n const existingDate = selectedExamDays.find((day) => areDatesEqual(day.date, newSelectedExamDay.date));\n return existingDate;\n};\n\nconst ExpertAvailabilityRow: React.FunctionComponent = ({\n availableExamDays,\n location,\n cells,\n selectedExamDayIds,\n allSessionExams,\n onChange,\n}) => {\n const handleChange =\n (changedExamDay: ExamDayViewModel) => (event: React.ChangeEvent, checked: boolean) => {\n if (checked && !isDateAlreadySelected(availableExamDays, selectedExamDayIds, changedExamDay)) {\n onChange([...selectedExamDayIds, changedExamDay.id]);\n } else {\n onChange([...selectedExamDayIds.filter((examDayId) => examDayId !== changedExamDay.id)]);\n }\n };\n\n function cellContent(cellData: FullCellData) {\n function getExamName(examId: string) {\n const exam = allSessionExams.find((e) => e.id === examId);\n if (!exam) return \"\";\n return GetTranslatedValue(exam.name);\n }\n\n return (\n \n \n \n {cellData.examIds.map((examId, index) => (\n \n \n \n ))}\n \n \n );\n }\n\n return (\n \n \n \n {location.name}\n \n {cells.map((cellData, index) => {\n if (cellData instanceof FullCellData)\n return (\n \n {cellContent(cellData)}\n \n );\n return ;\n })}\n \n \n );\n};\n\nexport default ExpertAvailabilityRow;\n","import { TranslationKey } from '../translations/TranslationKey';\n\nexport enum TaskState {\n ToDo = 'ToDo',\n InProgress = 'InProgress',\n Done = 'Done',\n}\n\nexport const TaskStateTranslationKey: { [taskState in TaskState]: TranslationKey } = {\n [TaskState.ToDo]: 'taskState.toDo',\n [TaskState.InProgress]: 'taskState.inProgress',\n [TaskState.Done]: 'taskState.done',\n}\n","import Grid from \"@material-ui/core/Grid\";\nimport LinearProgress from \"@material-ui/core/LinearProgress\";\nimport Paper from \"@material-ui/core/Paper\";\nimport { Theme } from \"@material-ui/core/styles\";\nimport Table from \"@material-ui/core/Table\";\nimport TableBody from \"@material-ui/core/TableBody\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableHead from \"@material-ui/core/TableHead\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Room from \"@material-ui/icons/Room\";\nimport { createStyles, makeStyles } from \"@material-ui/styles\";\nimport React, { useEffect, useState } from \"react\";\nimport { useHistory, useParams } from \"react-router\";\nimport {\n AvailabilityType,\n useGetExpertAvailabilityQuery,\n useUpdateAvailabilityMutation,\n} from \"../../api/rtk/ExpertAvailabilityApi\";\nimport { useGetMeAsExpertQuery } from \"../../api/rtk/MeApi\";\nimport { ExamDayViewModel, getExamIdsOfExamDay } from \"../../model/ExamDayViewModel\";\nimport { LocationViewModel } from \"../../model/LocationViewModel\";\nimport { routesPaths } from \"../../Routes\";\nimport { TranslationKey } from \"../../translations/TranslationKey\";\nimport { areDatesEqual, isDateInArray } from \"../../utils/Dates\";\nimport { navigateBack } from \"../../utils/Navigation\";\nimport DefaultButtons from \"../common/buttons/DefaultButtons\";\nimport LocaleFormatDate from \"../common/dates/LocaleFormatDate\";\nimport TitleWithIcon from \"../common/TitleWithIcon\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\nimport ExpertAvailabilityRow, { CellData, EmptyCellData, FullCellData } from \"./ExpertAvailabilityRow\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n width: \"100%\",\n },\n paper: {\n marginTop: theme.spacing(3),\n width: \"100%\",\n maxHeight: \"calc(100vh - 230px)\",\n overflowX: \"auto\",\n overflowY: \"auto\",\n marginBottom: theme.spacing(2),\n },\n table: {\n minWidth: 650,\n },\n })\n);\n\ninterface DayColumn {\n date: Date;\n cells: CellData[];\n}\n\ninterface LocationRow {\n location: LocationViewModel;\n cells: CellData[];\n}\n\ninterface ExpertAvailabilitySetupTypeProps {\n title: TranslationKey;\n availabilityType: AvailabilityType;\n}\n\ntype ExpertAvailabilitySetupProps = ExpertAvailabilitySetupTypeProps;\n\nconst ExpertAvailabilitySetup: React.FunctionComponent = ({\n title,\n availabilityType,\n}) => {\n const { examSessionId } = useParams<{ examSessionId: string }>();\n\n const { data: expert, isFetching: isFetchingExpert } = useGetMeAsExpertQuery();\n const { data: initialExpertAvailability, isFetching: isFetchingAvailbability } = useGetExpertAvailabilityQuery({\n examSessionId,\n availabilityType,\n });\n const [updateAvailability, { isLoading: isUpdateAvailabilityLoading }] = useUpdateAvailabilityMutation();\n const [selectedExamDayIds, setSelectedExamDayIds] = useState([]);\n const history = useHistory();\n const classes = useStyles({});\n\n useEffect(() => {\n if (initialExpertAvailability) setSelectedExamDayIds(initialExpertAvailability.selectedExamDayIds);\n }, [initialExpertAvailability]);\n\n if (isFetchingExpert || isFetchingAvailbability || isUpdateAvailabilityLoading) {\n return ;\n }\n\n if (!expert || !initialExpertAvailability || !examSessionId) return <>;\n\n const { availableExamDays, locations } = initialExpertAvailability;\n\n if (availableExamDays.length === 0) {\n return (\n \n \n \n \n \n );\n }\n\n const getAllAvailableDays = () => {\n const dates = availableExamDays.map((day) => {\n const date = new Date(day.date);\n date.setHours(0, 0, 0, 0);\n return date;\n });\n const uniqueDates: Date[] = [];\n for (let date of dates) {\n if (!isDateInArray(date, uniqueDates)) {\n uniqueDates.push(date);\n }\n }\n return uniqueDates.sort((a: Date, b: Date) => a.getTime() - b.getTime());\n };\n\n const getCellDataForExamDay = (examDay?: ExamDayViewModel) => {\n if (!examDay) return new EmptyCellData();\n const examIds = getExamIdsOfExamDay(examDay);\n\n if (examIds.length === 0) return new EmptyCellData();\n const isChecked = selectedExamDayIds.includes(examDay.id);\n return new FullCellData(isChecked, examDay, examIds);\n };\n\n const locationsCount = locations.length;\n const allAvailableDates = getAllAvailableDays();\n\n function getColumns(): DayColumn[] {\n const columns = allAvailableDates.map((date) => {\n const columnCells = new Array(locationsCount);\n locations.forEach((location, index) => {\n const currentExamDay = availableExamDays\n .filter((day) => day.locationId === location.id)\n .find((e) => areDatesEqual(e.date, date));\n\n const cellData = getCellDataForExamDay(currentExamDay);\n columnCells[index] = cellData;\n });\n return { date, cells: columnCells };\n });\n return columns.filter((column) => {\n const allCellsEmpty = column.cells.every((cell) => cell instanceof EmptyCellData);\n return !allCellsEmpty;\n });\n }\n\n let columns = getColumns();\n\n const getRows = () => {\n const rows: LocationRow[] = new Array(locationsCount); //vertical array of rows, where each row as array of horizontal celldata\n for (let i = 0; i < locationsCount; i++) {\n rows[i] = { location: locations[i], cells: new Array(columns.length) };\n }\n //transform columns to rows\n columns.forEach((col, horizontalIndex) => {\n col.cells.forEach((cell, verticalCellIndex) => {\n rows[verticalCellIndex].cells[horizontalIndex] = cell;\n });\n });\n\n // remove rows with all empty cells\n return rows.filter((row) => !row.cells.every((cell) => cell instanceof EmptyCellData));\n };\n\n const handleSave = async () => {\n const expertAvailability = { ...initialExpertAvailability, selectedExamDayIds };\n const response = await updateAvailability({ examSessionId, expertAvailability, availabilityType }).unwrap();\n if (response.success) {\n navigateBack(routesPaths.root(), history, history.location);\n }\n };\n\n return (\n \n \n \n } variant=\"h4\">\n \n \n \n \n \n \n \n
\n \n \n \n \n \n {columns.map((col) => (\n \n \n \n ))}\n \n \n \n {getRows().map((row, index) => (\n \n ))}\n \n
\n
\n
\n
\n );\n};\n\nexport default ExpertAvailabilitySetup;\n","import { ExamDayType } from \"./ExamDayType\";\nimport { ExpertViewModel } from \"./ExpertViewModel\";\nimport { RoomAssignmentViewModel } from \"./RoomAssignmentViewModel\";\nimport { TimeSlotStructureType } from \"./TimeSlotStructure\";\n\nexport interface ExamDayViewModel {\n date: Date;\n roomAssignments: RoomAssignmentViewModel[];\n id: string;\n locationId: string;\n type: ExamDayType;\n availableUsers: ExpertViewModel[];\n availableCorrectionExperts: ExpertViewModel[];\n timeSlotStructureType: TimeSlotStructureType;\n}\n\nexport function getExamIdsOfExamDay(examDay: ExamDayViewModel) {\n const examIds: string[] = [];\n examDay.roomAssignments.forEach((roomAssignment) => {\n examIds.push(...roomAssignment.examAssignments.map((examAssignment) => examAssignment.examId));\n });\n const uniqueIds = new Set(examIds);\n return Array.from(uniqueIds);\n}\n","import React from \"react\";\nimport ExpertAvailabilitySetup from \"./ExpertAvailabilitySetup\";\n\nconst ExpertCorrectionAvailabilitySetup: React.FunctionComponent = () => {\n return ;\n};\n\nexport default ExpertCorrectionAvailabilitySetup;\n","import React from \"react\";\nimport ExpertAvailabilitySetup from \"./ExpertAvailabilitySetup\";\n\n\nconst ExpertExaminationAvailabilitySetup: React.FunctionComponent = () => {\n return (\n \n );\n};\n\nexport default ExpertExaminationAvailabilitySetup;\n","import { Grid, Typography } from \"@material-ui/core\";\r\nimport React from \"react\";\r\nimport { WrappedComponentProps, injectIntl } from \"react-intl\";\r\nimport { PropertyNames } from \"../../../data/constants\";\r\nimport { ExpertMeViewModel } from \"../../../model/ExpertMeViewModel\";\r\nimport { GetTranslation } from \"../../../translations/GetTranslation\";\r\nimport { CompanySelect } from \"../../common/customAutocomplete/CompanySelect\";\r\nimport { GenderSelect } from \"../../common/customAutocomplete/GenderSelect\";\r\nimport GridTextField from \"../../common/customGrid/GridTextField\";\r\nimport DatePicker from \"../../common/datePicker/DatePicker\";\r\nimport AhvNoTextField from \"../../common/textField/AhvNoTextField\";\r\nimport CiceroNoTextField from \"../../common/textField/CiceroNoTextField\";\r\nimport EmailTextField from \"../../common/textField/EmailTextField\";\r\nimport PhoneNoTextField from \"../../common/textField/PhoneNoTextField\";\r\nimport TranslatedMessage from \"../../translations/TranslatedMessage\";\r\nimport { RequiredExpert } from \"../ExpertConstants\";\r\n\r\ntype ExpertPersonalFieldsProps = {\r\n handleChange: (change: Partial) => void;\r\n handleAhvIsValid: (isValid: boolean) => void;\r\n handleCiceroIsValid: (isValid: boolean) => void;\r\n handleEmailIsValid: (isValid: boolean) => void;\r\n handlePhoneIsValid: (isValid: boolean) => void;\r\n handleMobileIsValid: (isValid: boolean) => void;\r\n expert: ExpertMeViewModel;\r\n requiredFields: RequiredExpert;\r\n} & WrappedComponentProps;\r\n\r\nconst ExpertPersonalFields = (props: ExpertPersonalFieldsProps) => {\r\n const { expert, requiredFields, intl, handleChange } = props;\r\n\r\n const handleCompanyChanged = (value?: string) => handleChange({ employerInformation: value });\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n handleChange({ [PropertyNames.firstName]: event.target.value })}\r\n value={expert.firstName || \"\"}\r\n />\r\n handleChange({ [PropertyNames.lastName]: event.target.value })}\r\n value={expert.lastName || \"\"}\r\n />\r\n handleChange({ gender: value })}\r\n />\r\n \r\n }\r\n value={expert.birthdate}\r\n onChange={(event) => handleChange({ [PropertyNames.birthdate]: event === null ? undefined : event })}\r\n required={true}\r\n error={requiredFields.isBirthDateEmpty}\r\n />\r\n \r\n \r\n }\r\n onChangeIsValid={props.handleAhvIsValid}\r\n onChange={(event) => handleChange({ [PropertyNames.ahvNumber]: event.target.value })}\r\n value={expert.ahvNumber || \"\"}\r\n />\r\n \r\n \r\n }\r\n onChangeIsValid={props.handleCiceroIsValid}\r\n onChange={(event) => handleChange({ [PropertyNames.ciceroNumber]: event.target.value })}\r\n value={expert.ciceroNumber || \"\"}\r\n />\r\n \r\n \r\n }\r\n onChangeIsValid={props.handleEmailIsValid}\r\n onChange={(event) => handleChange({ [PropertyNames.emailAddress]: event.target.value })}\r\n value={expert.emailAddress || \"\"}\r\n />\r\n \r\n \r\n handleChange({ [PropertyNames.phoneNumber]: event.target.value })}\r\n value={expert.phoneNumber || \"\"}\r\n />\r\n \r\n \r\n handleChange({ [PropertyNames.mobileNumber]: event.target.value })}\r\n value={expert.mobileNumber || \"\"}\r\n />\r\n \r\n handleChange({ [PropertyNames.bankAccount]: event.target.value })}\r\n value={expert.bankAccount || \"\"}\r\n />\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default injectIntl(ExpertPersonalFields);\r\n","import { Grid, LinearProgress, Typography } from \"@material-ui/core\";\nimport { Cancel, Save } from \"@material-ui/icons\";\nimport React, { useEffect, useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { routesPaths } from \"../../../Routes\";\nimport { useGetMeAsExpertQuery, useUpdateMeAsExpertMutation } from \"../../../api/rtk/MeApi\";\nimport { ValidationFields } from \"../../../data/constants\";\nimport { ExpertMeViewModel } from \"../../../model/ExpertMeViewModel\";\nimport { AddressFields } from \"../../common/AddressFields\";\nimport CustomButton from \"../../common/buttons/CustomButton\";\nimport RightButtonArea from \"../../common/buttons/RightButtonArea\";\nimport CustomDraggableDialog from \"../../common/customDialog/CustomDraggableDialog\";\nimport TranslatedMessage from \"../../translations/TranslatedMessage\";\nimport { RequiredExpert, initialExpertMe, initialRequiredFields, initialValidationFields } from \"../ExpertConstants\";\nimport ExpertPersonalFields from \"./ExpertPersonalFields\";\n\nconst MyExpertProfile = () => {\n const history = useHistory();\n\n const [emailChanged, setEmailChanged] = useState(false);\n const [isEmailChangeDialogOpened, setIsEmailChangeDialogOpened] = useState(false);\n const [validationStatus, setValidationStatus] = useState(initialValidationFields);\n const [profile, setProfile] = useState(initialExpertMe);\n const [requiredFieldStatus, setRequiredFieldStatus] = useState(initialRequiredFields());\n const { data: currentExpert, isFetching: isCurrenExpertFetching } = useGetMeAsExpertQuery();\n const [updateMeAsExpert, { isLoading: isUpdateMeAsExpertLoading }] = useUpdateMeAsExpertMutation();\n\n useEffect(() => {\n if (currentExpert === undefined) {\n return;\n }\n\n setProfile(currentExpert);\n }, [currentExpert]);\n\n if (isCurrenExpertFetching || isUpdateMeAsExpertLoading) {\n return ;\n }\n\n if (profile === undefined) {\n return <>;\n }\n\n const handleSave = () => {\n if (emailChanged) {\n setIsEmailChangeDialogOpened(true);\n return;\n }\n saveChanges();\n };\n\n const handleConfirmEmailChange = () => {\n setIsEmailChangeDialogOpened(false);\n saveChanges();\n };\n\n const saveChanges = () => {\n if (!allFieldsValid() || !validateRequiredFields()) {\n return;\n }\n\n updateMeAsExpert(profile)\n .unwrap()\n .then(() => history.push(routesPaths.root()));\n };\n\n const allFieldsValid = () =>\n validationStatus.isAhvValid &&\n validationStatus.isCiceroValid &&\n validationStatus.isEmailValid &&\n validationStatus.isMobileValid &&\n validationStatus.isPhoneValid;\n\n const validateRequiredFields = () => {\n const newStatus: RequiredExpert = {\n isFirstnameEmpty: !profile.firstName,\n isLastnameEmpty: !profile.lastName,\n isGenderEmpty: !profile.gender,\n isBirthDateEmpty: !profile.birthdate,\n isEmailEmpty: !profile.emailAddress,\n isStreetEmpty: !profile.street,\n isStreetNumberEmpty: !profile.streetNumber,\n isZipCodeEmpty: !profile.zipCode,\n isCityEmpty: !profile.city,\n isCountryEmpty: !profile.country,\n isLanguageEmpty: false,\n isAhvNoEmpty: !profile.ahvNumber,\n isMobileNoEmpty: !profile.mobileNumber,\n isBankAccountEmpty: !profile.bankAccount,\n hasEmptyRole: false,\n hasEmptyRoleArray: [],\n };\n\n const values = Object.values(newStatus);\n const hasMissingFields = values.some((value) => value === true);\n if (hasMissingFields) {\n setRequiredFieldStatus(newStatus);\n }\n return !hasMissingFields;\n };\n\n const handleFieldChange = (change: Partial) => {\n if (change.emailAddress) {\n setEmailChanged(true);\n }\n setProfile((prevProfile) => ({ ...prevProfile, ...change }));\n };\n\n const handleFieldValidation = (fieldName: keyof ValidationFields, isValid: boolean) => {\n if (validationStatus[fieldName] !== isValid) {\n setValidationStatus({ ...validationStatus, [fieldName]: isValid });\n }\n };\n\n return (\n <>\n \n } onClick={handleSave}>\n \n \n }\n onClick={() => history.push(routesPaths.root())}\n >\n \n \n \n \n \n handleFieldValidation(\"isEmailValid\", isValid)}\n handleAhvIsValid={(isValid: boolean) => handleFieldValidation(\"isAhvValid\", isValid)}\n handleCiceroIsValid={(isValid: boolean) => handleFieldValidation(\"isCiceroValid\", isValid)}\n handlePhoneIsValid={(isValid: boolean) => handleFieldValidation(\"isPhoneValid\", isValid)}\n handleMobileIsValid={(isValid: boolean) => handleFieldValidation(\"isMobileValid\", isValid)}\n />\n \n \n \n \n \n \n \n \n \n }\n cancelText={}\n content={}\n isOpen={isEmailChangeDialogOpened}\n onAccept={handleConfirmEmailChange}\n onCancel={() => setIsEmailChangeDialogOpened(false)}\n />\n \n \n );\n};\n\nexport default MyExpertProfile;\n","import {\n Avatar,\n createStyles,\n Grid,\n Theme,\n Typography,\n withStyles,\n WithStyles,\n} from '@material-ui/core';\nimport * as React from 'react';\n\ntype AvatarHeaderProps = {\n title: React.ReactNode;\n subTitle?: React.ReactNode;\n icon: React.ReactNode;\n} & WithStyles;\n\nconst AvatarHeader: React.FunctionComponent = ({ classes, icon, subTitle, title }) => {\n\n return (\n \n \n \n {icon}\n \n \n \n {title}\n {subTitle && {subTitle}}\n \n \n );\n}\n\nconst styles = (theme: Theme) => createStyles({\n avatar: {\n height: theme.spacing(5),\n marginRight: theme.spacing(2),\n width: theme.spacing(5),\n },\n});\n\nexport default withStyles(styles)(AvatarHeader);\n","import { createStyles, Grid, Paper, makeStyles } from \"@material-ui/core\";\r\nimport * as React from \"react\";\r\nimport AvatarHeader from \"../common/AvatarHeader\";\r\n\r\ntype HomeSectionProps = {\r\n title: React.ReactNode;\r\n icon: React.ReactNode;\r\n onEditClick?: () => void;\r\n};\r\n\r\nconst HomeSection: React.FunctionComponent = ({ title, icon, children }) => {\r\n const classes = useStyles({});\r\n\r\n return (\r\n \r\n \r\n \r\n {children}\r\n \r\n \r\n );\r\n};\r\n\r\nconst useStyles = makeStyles((theme) =>\r\n createStyles({\r\n content: {\r\n marginTop: theme.spacing(2),\r\n },\r\n homeSection: {\r\n position: \"relative\",\r\n backgroundColor: \"transparent\",\r\n marginBottom: theme.spacing(3),\r\n marginTop: theme.spacing(2),\r\n padding: theme.spacing(3),\r\n },\r\n editButton: {\r\n position: \"absolute\",\r\n right: theme.spacing(3),\r\n },\r\n })\r\n);\r\n\r\nexport default HomeSection;\r\n","import { Card, Grid, Typography } from \"@material-ui/core\";\nimport ErrorIcon from \"@material-ui/icons/Error\";\nimport Alert from \"@material-ui/lab/Alert/Alert\";\nimport React from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { routesPaths } from \"../../Routes\";\nimport { useGetMeQuery } from \"../../api/rtk/MeApi\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\n\nconst MandatoryFieldsAlert = () => {\n const { data: me, isFetching: isMeFetching } = useGetMeQuery();\n\n if (isMeFetching || !me?.hasEmptyPersonalFields) {\n return <>;\n }\n\n return (\n \n \n \n } color=\"info\">\n \n {\" \"}\n \n \n \n \n \n \n \n \n );\n};\n\nexport default MandatoryFieldsAlert;\n","import { Grid, LinearProgress, Typography } from \"@material-ui/core\";\nimport SchoolIcon from \"@material-ui/icons/School\";\nimport React, { FC } from \"react\";\nimport { useIntl } from \"react-intl\";\nimport {\n downloadCandidateCourseCertificate,\n downloadCandidateCoursePerformanceRecord,\n} from \"../../api/CandidateCourseCertificateApi\";\nimport { useGetCandidateCoursesQuery } from \"../../api/rtk/MeApi\";\nimport { GetTranslatedValueIntl } from \"../../model/Shared/TranslatedValue\";\nimport { CandidateCourseViewModel, isCertificateAvailable } from \"../../model/courses/CandidateCourseViewModel\";\nimport { GetTranslation } from \"../../translations/GetTranslation\";\nimport CandidateCourseTable from \"../candidateCourses/CandidateCourseTable\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\nimport HomeSection from \"./HomeSection\";\n\nconst MyCourses: FC = () => {\n const intl = useIntl();\n\n const { data: myCandidateCourses, isFetching: isMyCandidateCoursesFetching } = useGetCandidateCoursesQuery(undefined);\n const isLoading = isMyCandidateCoursesFetching;\n\n const handleDownloadCertificate = async (candidateCourse: CandidateCourseViewModel) => {\n if (isCertificateAvailable(candidateCourse)) {\n var certificateFileNamePrefix = GetTranslation(intl, \"candidateCourse.certificate.fileNamePrefix\");\n var courseName = GetTranslatedValueIntl(intl, candidateCourse.courseName);\n var certificateFileName = `${certificateFileNamePrefix} - ${courseName}`;\n await downloadCandidateCourseCertificate(candidateCourse.id, certificateFileName);\n }\n };\n\n const handleDownloadPerformanceRecord = async (candidateCourse: CandidateCourseViewModel) => {\n var performanceRecordFileNamePrefix = GetTranslation(intl, \"candidateCourse.performanceRecord.fileNamePrefix\");\n var courseName = GetTranslatedValueIntl(intl, candidateCourse.courseName);\n var performanceRecordFileName = `${performanceRecordFileNamePrefix} - ${courseName}`;\n await downloadCandidateCoursePerformanceRecord(candidateCourse.id, performanceRecordFileName);\n };\n\n if (!isLoading && myCandidateCourses === undefined) {\n return null;\n }\n\n return (\n } title={}>\n \n {isLoading && (\n \n \n \n )}\n {!isLoading && (\n \n {myCandidateCourses && myCandidateCourses.length ? (\n \n ) : (\n \n \n \n )}\n \n )}\n \n \n );\n};\n\nexport default MyCourses;\n","import { DocumentReferenceViewModel } from \"../../model/DocumentReferenceViewModel\";\r\nimport { api, transformApiResponse } from \"./BaseApi\";\r\n\r\nconst examCasesApi = api.enhanceEndpoints({ addTagTypes: [\"ExamCases\"] }).injectEndpoints({\r\n endpoints: (builder) => ({\r\n getExamCases: builder.query({\r\n query: () => \"/ExamCase\",\r\n transformResponse: transformApiResponse,\r\n providesTags: [{ type: \"ExamCases\", id: \"LIST\" }],\r\n }),\r\n }),\r\n});\r\n\r\nexport const { endpoints, useGetExamCasesQuery } = examCasesApi;\r\n","import { LinearProgress } from \"@material-ui/core\";\nimport Grid from \"@material-ui/core/Grid\";\nimport AttachFile from \"@material-ui/icons/AttachFile\";\nimport React, { FC } from \"react\";\nimport { downloadExamCaseDocument } from \"../../api/ExamCaseApi\";\nimport { useGetExamCasesQuery } from \"../../api/rtk/ExamCaseApi\";\nimport DocumentList from \"../common/DocumentList\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\nimport HomeSection from \"./HomeSection\";\n\nexport const MyExamCases: FC = () => {\n const { data: examCases, isFetching: isExamCasesFetching } = useGetExamCasesQuery(undefined);\n const isLoading = isExamCasesFetching;\n\n if (!isLoading && examCases === undefined) {\n return <>;\n }\n\n return (\n } title={}>\n \n \n {isLoading && }\n {!isLoading && (\n downloadExamCaseDocument(file.name)} />\n )}\n \n \n \n );\n};\n\nexport default MyExamCases;\n","import { ApiResponse, customFetch } from './CustomFetch';\nimport { DocumentReferenceViewModel } from '../model/DocumentReferenceViewModel';\nimport download from 'downloadjs';\n\nexport const downloadExamCaseDocument = (fileName: string) => {\n return customFetch(`examCase/${fileName}`)\n .then((response) => response.blob())\n .then(blob => {\n download(blob, fileName)\n });\n}\n\nexport const fetchExamCaseDocuments = (): Promise => {\n return customFetch('examCase')\n .then((response) => response.json() as Promise>)\n .then((apiResponse) => apiResponse.data);\n};\n","import { DocumentReferenceViewModel } from \"../../model/DocumentReferenceViewModel\";\r\nimport { api, transformApiResponse } from \"./BaseApi\";\r\n\r\nconst getExamResultUrl = (id?: string) => \"/ExamResult\" + (id === undefined ? \"\" : `/${id}`);\r\n\r\nconst examResultsApi = api.enhanceEndpoints({ addTagTypes: [\"ExamResults\"] }).injectEndpoints({\r\n endpoints: (builder) => ({\r\n getExamResults: builder.query({\r\n query: () => getExamResultUrl(),\r\n transformResponse: transformApiResponse,\r\n providesTags: [{ type: \"ExamResults\", id: \"LIST\" }],\r\n }),\r\n }),\r\n});\r\n\r\nexport const { endpoints, useGetExamResultsQuery } = examResultsApi;\r\n","import { LinearProgress } from \"@material-ui/core\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { Attachment } from \"@material-ui/icons\";\nimport React, { FC } from \"react\";\nimport { downloadExamResult } from \"../../api/ExamResultApi\";\nimport { useGetExamResultsQuery } from \"../../api/rtk/ExamResultApi\";\nimport DocumentList from \"../common/DocumentList\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\nimport HomeSection from \"./HomeSection\";\n\nexport const MyExamResults: FC = () => {\n const { data: examResults, isFetching: isExamResultsFetching } = useGetExamResultsQuery(undefined);\n const isLoading = isExamResultsFetching;\n\n if (!isLoading && examResults === undefined) {\n return <>;\n }\n\n return (\n } title={}>\n \n \n {isLoading && }\n {!isLoading && (\n downloadExamResult(file.name)} />\n )}\n \n \n \n );\n};\n\nexport default MyExamResults;\n","import download from \"downloadjs\";\nimport { customFetch } from \"./CustomFetch\";\n\nexport const downloadExamResult = (fileName: string) => {\n return customFetch(`examResult/${fileName}`)\n .then((response) => response.blob())\n .then((blob) => {\n download(blob, fileName);\n });\n};\n","import Grid from \"@material-ui/core/Grid\";\nimport LinearProgress from \"@material-ui/core/LinearProgress\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { AssignmentInd } from \"@material-ui/icons\";\nimport * as React from \"react\";\nimport { FC } from \"react\";\nimport { useHistory } from \"react-router\";\nimport { routesPaths } from \"../../Routes\";\nimport { useGetMyExamSessionsQuery } from \"../../api/rtk/MeApi\";\nimport { SwissGermanLocale, SwissTimeZone } from \"../../data/constants\";\nimport { ExamSessionViewModel, GetLocalizedName } from \"../../model/ExamSessionViewModel\";\nimport { navigateTo } from \"../../utils/Navigation\";\nimport { ColumnDefinition, CustomGrid } from \"../common/customGrid/CustomGrid\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\nimport HomeSection from \"./HomeSection\";\n\nconst MyExamSessions: FC = () => {\n const history = useHistory();\n\n const { data: examSessions, isFetching: isExamSessionsFetching } = useGetMyExamSessionsQuery(undefined);\n const isLoading = isExamSessionsFetching;\n\n if (!isLoading && examSessions === undefined) {\n return <>;\n }\n\n const getRowKey = (row: ExamSessionViewModel) => row.id;\n\n const columnDefinitions: ColumnDefinition[] = [\n {\n columnKey: \"sessionKey\",\n columnLabel: ,\n cellValue: (c) => GetLocalizedName(c),\n },\n {\n columnKey: \"from\",\n columnLabel: ,\n orderValue: (c) => c.from,\n cellValue: (c) => new Date(c.from).toLocaleDateString(SwissGermanLocale, { timeZone: SwissTimeZone }),\n },\n {\n columnKey: \"to\",\n columnLabel: ,\n orderValue: (c) => c.to,\n cellValue: (c) => new Date(c.to).toLocaleDateString(SwissGermanLocale, { timeZone: SwissTimeZone }),\n },\n ];\n\n const gridContent =\n examSessions !== undefined && examSessions.length > 0 ? (\n \n hideAddButton={true}\n rows={examSessions}\n columnDefinitions={columnDefinitions}\n rowKey={getRowKey}\n tableProps={{ padding: \"default\" }}\n addButtonTooltip=\"Add\"\n onAddClick={() => {}}\n onRowClick={(_) => navigateTo(routesPaths.expertExamsSchedule(_.id), history)}\n />\n ) : (\n \n \n \n );\n\n return (\n } title={}>\n \n \n {isLoading && }\n {!isLoading && gridContent}\n \n \n \n );\n};\n\nexport default MyExamSessions;\n","import { TranslationKey } from \"../translations/TranslationKey\";\n\nexport enum TaskType {\n None = \"None\",\n CheckAvailability = \"CheckAvailability\",\n CheckCorrectionAvailability = \"CheckCorrectionAvailability\",\n Cancellation = \"Cancellation\",\n UploadDocuments = \"UploadDocuments\",\n}\n\nexport const TaskTypeTranslationKey: { [taskType in TaskType]: TranslationKey } = {\n [TaskType.CheckAvailability]: \"taskType.checkAvailability\",\n [TaskType.CheckCorrectionAvailability]: \"taskType.checkCorrectionAvailability\",\n [TaskType.Cancellation]: \"taskType.cancellation\",\n [TaskType.UploadDocuments]: \"taskType.uploadDocuments\",\n [TaskType.None]: \"taskType.none\",\n};\n","import Grid from \"@material-ui/core/Grid\";\nimport LinearProgress from \"@material-ui/core/LinearProgress\";\nimport Typography from \"@material-ui/core/Typography\";\nimport * as React from \"react\";\nimport { FC } from \"react\";\nimport { useHistory } from \"react-router\";\nimport { useGetMyTasksQuery } from \"../../api/rtk/MeApi\";\nimport { SwissGermanLocale, SwissTimeZone } from \"../../data/constants\";\nimport { PersonTaskIndex } from \"../../model/PersonTaskIndex\";\nimport { TaskStateTranslationKey } from \"../../model/TaskState\";\nimport { TaskTypeTranslationKey } from \"../../model/TaskType\";\nimport { navigateTo } from \"../../utils/Navigation\";\nimport { ColumnDefinition, CustomGrid } from \"../common/customGrid/CustomGrid\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\n\nconst MyTasks: FC = () => {\n const history = useHistory();\n\n const { data: tasks, isFetching: isTasksFetching } = useGetMyTasksQuery(undefined);\n const isLoading = isTasksFetching;\n\n if (!isLoading && tasks === undefined) {\n return <>;\n }\n\n const getRowKey = (row: PersonTaskIndex) => row.id;\n\n const columnDefinitions: ColumnDefinition[] = [\n {\n columnKey: \"type\",\n columnLabel: ,\n cellValue: (t) => ,\n },\n {\n columnKey: \"state\",\n columnLabel: ,\n cellValue: (t) => ,\n },\n {\n columnKey: \"deadline\",\n columnLabel: ,\n orderValue: (t) => new Date(t.deadline),\n cellValue: (t) => new Date(t.deadline).toLocaleDateString(SwissGermanLocale, { timeZone: SwissTimeZone }),\n },\n ];\n\n const gridContent =\n tasks !== undefined && tasks.length > 0 ? (\n \n hideAddButton={true}\n rows={tasks}\n columnDefinitions={columnDefinitions}\n rowKey={getRowKey}\n tableProps={{ padding: \"default\" }}\n addButtonTooltip=\"Add\"\n onAddClick={() => {}}\n onRowClick={(task) => {\n const url =\n task.relativeUrl.indexOf(task.id) < 0 ? task.relativeUrl + `?taskId=${task.id}` : task.relativeUrl;\n navigateTo(url, history);\n }}\n />\n ) : (\n \n \n \n );\n\n return (\n \n \n {isLoading && }\n {!isLoading && gridContent}\n \n \n );\n};\n\nexport default MyTasks;\n","import {\n createStyles,\n List,\n ListItem,\n ListItemText,\n Typography,\n makeStyles\n} from '@material-ui/core';\nimport { SvgIconProps } from '@material-ui/core/SvgIcon';\nimport * as React from 'react';\n\nexport interface ICandidateSideInformation {\n icon: React.ComponentType;\n data: any[];\n onClick?: () => void;\n}\n\ntype CandidateInformationListProps = {\n items: ICandidateSideInformation[];\n}\n\nconst useStyles = makeStyles(() => (createStyles({\n icon: { fontSize: \"20px\", color: \"#617c94\", maxWidth: \"100%\" }\n})));\n\nconst CandidateInformationList: React.FunctionComponent = props => {\n const cssClasses = useStyles({});\n\n return (\n
\n \n {props.items\n .filter(item => hasValidValues(item.data))\n .map((Info, i) => {\n return (\n \n {React.createElement(Info.icon, { className: cssClasses.icon })}\n \n
\n {Info.data.map((element, j) => {\n return ({element});\n })}\n
\n
\n
\n );\n }\n )}\n
\n
\n );\n}\n\nconst hasValidValues = (items: ICandidateSideInformation[]): boolean => {\n return items.filter(Boolean).length > 0;\n}\n\nexport default CandidateInformationList;\n","import * as React from \"react\";\nimport CandidateInformationList from \"../candidate/CandidateInformationList\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\nimport { Button, Grid, Typography } from \"@material-ui/core\";\nimport { Cake, Edit, PhoneIphone } from \"@material-ui/icons\";\nimport { getMinimumValidDate } from \"../../utils/Dates\";\nimport { PersonType } from \"../../model/PersonType\";\nimport { RouteComponentProps, withRouter } from \"react-router-dom\";\nimport { routesPaths } from \"../../Routes\";\nimport { CandidateViewModel } from \"../../model/CandidateViewModel\";\nimport { SwissGermanLocale, SwissTimeZone } from '../../data/constants';\n\ntype UserReadOnlyViewProps = {\n user: CandidateViewModel;\n} & RouteComponentProps;\n\nclass UserReadOnlyView extends React.PureComponent {\n public render(): JSX.Element {\n const { user } = this.props;\n const infoList = [{ icon: PhoneIphone, data: [user.mobileNumber, user.phoneNumber] }];\n\n const showUserBirthdate =\n user.birthdate && user.birthdate != null && new Date(user.birthdate) > getMinimumValidDate();\n\n if (showUserBirthdate) {\n infoList.push({ icon: Cake, data: [new Date(user.birthdate).toLocaleDateString(SwissGermanLocale, { timeZone: SwissTimeZone })] });\n }\n\n return (\n \n \n \n {user.firstName} {user.lastName}\n \n {user.emailAddress && {user.emailAddress}}\n \n \n \n \n {user &&\n (user.type === PersonType.Candidate || user.type === PersonType.Expert) &&\n this.renderEditProfileButton(user.type)}\n \n );\n }\n\n private renderEditProfileButton = (type: PersonType) => (\n \n \n \n );\n\n private handleProfileClick = (type: PersonType) => {\n switch (type) {\n case PersonType.Candidate:\n this.props.history.push(routesPaths.userProfile());\n break;\n case PersonType.Expert:\n this.props.history.push(routesPaths.expertProfile());\n break;\n }\n };\n}\n\nexport default withRouter(UserReadOnlyView);\n","import { LinearProgress, Typography, Grid } from \"@material-ui/core\";\nimport * as React from \"react\";\nimport { FC } from \"react\";\nimport { useGetMeQuery } from \"../../api/rtk/MeApi\";\nimport UserReadOnlyView from \"../home/UserReadOnlyView\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\n\nconst MyUser: FC = () => {\n const { data: me, isFetching: isMeFetching } = useGetMeQuery();\n\n if (isMeFetching) {\n return (\n \n \n \n );\n }\n\n if (me === undefined) {\n return (\n \n \n \n );\n }\n\n return ;\n};\n\nexport default MyUser;\n","import { Link, TableCell, TableRow } from \"@material-ui/core\";\nimport React from \"react\";\nimport { useIntl } from \"react-intl\";\nimport { SwissGermanLocale, SwissTimeZone } from \"../../../data/constants\";\nimport { ExamTypeTranslationKey } from \"../../../model/Exam\";\nimport { ExamSessionCandidateExamStateTranslationKey } from \"../../../model/examSessionCandidate/ExamSessionCandidateExamViewModel\";\nimport { CandidateMyExamViewModel } from \"../../../model/me/CandidateMyExamViewModel\";\nimport { GetTranslatedValueIntl } from \"../../../model/Shared/TranslatedValue\";\nimport TranslatedMessage from \"../../translations/TranslatedMessage\";\nimport { TranslationKey } from \"../../../translations/TranslationKey\";\n\ntype MyExamsTableExamRowProps = {\n exam: CandidateMyExamViewModel;\n};\n\nconst MyExamsTableExamRow = ({ exam }: MyExamsTableExamRowProps) => {\n const intl = useIntl();\n return (\n \n \n {GetTranslatedValueIntl(intl, exam.name)}\n \n \n \n \n {exam.location ? (\n \n
\n
{exam.location.name}
\n
{exam.location.street}
\n
{exam.location.zipCode + \" \" + exam.location.city}
\n {exam.language ? (\n
\n ()\n
\n ) : null}\n
\n \n ) : null}\n
\n \n {exam.date ? new Date(exam.date).toLocaleDateString(SwissGermanLocale, { timeZone: SwissTimeZone }) : \"\"}\n \n {exam.timeSlot?.arrivalTime}\n {exam.room}\n {}\n {exam.grade}\n \n
\n );\n};\n\nexport default MyExamsTableExamRow;\n","import { IconButton, makeStyles, TableCell, TableRow, Tooltip, Typography } from \"@material-ui/core\";\nimport React from \"react\";\nimport { useIntl } from \"react-intl\";\nimport { SwissGermanLocale, SwissTimeZone } from \"../../../data/constants\";\nimport { CandidateModuleState, CandidateModuleStateTranslationKey } from \"../../../model/examSessionCandidate/CandidateModuleState\";\nimport { CandidateMyModuleViewModel } from \"../../../model/me/CandidateMyModuleViewModel\";\nimport { GetTranslatedValueIntl } from \"../../../model/Shared/TranslatedValue\";\nimport { TranslationKey } from \"../../../translations/TranslationKey\";\nimport TranslatedMessage from \"../../translations/TranslatedMessage\";\nimport CancelIcon from \"@material-ui/icons/Cancel\";\n\ntype MyExamsTableModuleRowProps = {\n module: CandidateMyModuleViewModel;\n onCancel: (module: CandidateMyModuleViewModel) => void;\n};\n\nconst useStyles = makeStyles((theme) => ({\n moduleRow: {\n backgroundColor: theme.palette.action.hover,\n },\n freeCancellationDate: {\n fontStyle: \"italic\",\n marginLeft: theme.spacing(3),\n },\n cancelButton: {\n padding: 0,\n },\n actions: {\n textAlign: \"center\",\n padding: theme.spacing(2),\n }\n\n}));\n\nconst MyExamsTableModuleRow = ({ module, onCancel }: MyExamsTableModuleRowProps) => {\n const intl = useIntl();\n const classes = useStyles();\n const isFreeCancellationPossible = new Date(module.freeCancellationEndDate) > new Date();\n\n return (\n \n \n \n {GetTranslatedValueIntl(intl, module.name)}\n \n {\"(\"}\n \n {new Date(module.freeCancellationEndDate).toLocaleDateString(SwissGermanLocale, { timeZone: SwissTimeZone })}\n {\")\"}\n \n \n \n {CandidateModuleStateTranslationKey[module.state] && (\n \n )}\n \n {module.averageGrade}\n \n {\n isFreeCancellationPossible && module.state === CandidateModuleState.ApplicationAccepted && (\n }>\n onCancel(module)}>\n \n \n \n )\n }\n \n \n \n );\n};\n\nexport default MyExamsTableModuleRow;\n","import { makeStyles, Paper, Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from \"@material-ui/core\";\nimport React from \"react\";\nimport { CandidateMyModuleViewModel } from \"../../../model/me/CandidateMyModuleViewModel\";\nimport TranslatedMessage from \"../../translations/TranslatedMessage\";\nimport MyExamsTableExamRow from \"./MyExamsTableExamRow\";\nimport MyExamsTableModuleRow from \"./MyExamsTableModuleRow\";\n\ntype MyExamsTableProps = {\n modules: CandidateMyModuleViewModel[];\n onCancelModule: (module: CandidateMyModuleViewModel) => void;\n};\n\nconst useStyles = makeStyles(() => ({\n skipRow: {\n padding: \"1px\",\n },\n}));\n\nconst MyExamsTable = ({ modules, onCancelModule }: MyExamsTableProps) => {\n const classes = useStyles();\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {modules.map((module, moduleIndex) => {\n return (\n \n \n {module.exams.map((exam, examIndex) => (\n \n ))}\n \n \n \n \n );\n })}\n \n
\n
\n );\n};\n\nexport default MyExamsTable;\n","import { Typography } from \"@material-ui/core\";\nimport FormControl from \"@material-ui/core/FormControl\";\nimport React from \"react\";\nimport CustomDraggableDialog from \"../../common/customDialog/CustomDraggableDialog\";\nimport TranslatedMessage from \"../../translations/TranslatedMessage\";\n\ntype SelfCancelDialogProps = {\n onAccept: () => void;\n onDecline: () => void;\n isCancelDialogOpen: boolean;\n};\n\nconst SelfCancelDialog: React.FunctionComponent = ({\n onAccept,\n onDecline,\n isCancelDialogOpen,\n}) => {\n return (\n }\n cancelText={}\n content={\n \n \n \n \n \n \n \n }\n isOpen={isCancelDialogOpen}\n onAccept={onAccept}\n onCancel={onDecline}\n title={}\n />\n );\n};\n\nexport default SelfCancelDialog;\n","import { Button, Grid, LinearProgress, Typography } from \"@material-ui/core\";\nimport AddIcon from \"@material-ui/icons/Add\";\nimport AssignmentIndIcon from \"@material-ui/icons/AssignmentInd\";\nimport * as React from \"react\";\nimport { FC, useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { routesPaths } from \"../../../Routes\";\nimport { useGetMyModulesAndExamsForCandidateQuery } from \"../../../api/rtk/MeApi\";\nimport TranslatedMessage from \"../../translations/TranslatedMessage\";\nimport HomeSection from \"../HomeSection\";\nimport MyExamsTable from \"./MyExamsTable\";\nimport SelfCancelDialog from \"./SelfCancelDialog\";\nimport { CandidateMyModuleViewModel } from \"../../../model/me/CandidateMyModuleViewModel\";\nimport { useCancelCandidateModuleMutation } from \"../../../api/rtk/ExamSessionCandidateApi\";\n\nconst MyExams: FC = () => {\n const history = useHistory();\n const { data: myModules, isFetching: isModulesFetching } = useGetMyModulesAndExamsForCandidateQuery(undefined);\n const [cancelModuleForCandidate, { isLoading: isCancellingModule }] = useCancelCandidateModuleMutation();\n const isLoading = isModulesFetching || isCancellingModule;\n\n const [cancelDialogContext, setCancelDialogContext] = useState(undefined);\n\n if (!isLoading && myModules === undefined) {\n return <>;\n }\n\n const handleCancelModule = (module: CandidateMyModuleViewModel) => {\n setCancelDialogContext(module);\n };\n\n const onAcceptCancelModule = () => {\n const params = cancelDialogContext;\n setCancelDialogContext(undefined);\n if (params) {\n cancelModuleForCandidate({\n examSessionCandidateId: params.examSessionCandidateId,\n moduleId: params.moduleId,\n candidateWillGetRefund: true,\n comments: undefined,\n });\n }\n };\n\n return (\n } title={}>\n \n {isLoading && (\n \n \n \n )}\n {!isLoading && (\n <>\n \n history.push(routesPaths.startCertification())}\n >\n \n \n \n \n \n {myModules && myModules.length ? (\n \n ) : (\n \n \n \n )}\n \n setCancelDialogContext(undefined)}\n onAccept={onAcceptCancelModule}\n />\n \n )}\n \n \n );\n};\n\nexport default MyExams;\n","import { CartModulePaymentInitRequestModel } from \"../model/Cart/CartModulePaymentInitRequestModel\";\nimport { CartViewModel } from \"../model/Cart/CartViewModel\";\nimport { PaymentTransactionViewModel } from \"../model/Cart/PaymentTransactionViewModel\";\nimport { ApiResponse, customFetch } from \"./CustomFetch\";\n\nexport const getCart = (): Promise => {\n return customFetch(`Cart`)\n .then((response) => response.json() as Promise>)\n .then((apiResponse) => apiResponse.data);\n};\n\nexport const setCart = (cart: CartViewModel): Promise => {\n return customFetch(\"Cart\", {\n body: JSON.stringify(cart),\n headers: { \"Content-Type\": \"application/json\" },\n method: \"POST\",\n })\n .then((response) => response.json() as Promise>)\n .then((apiResponse) => apiResponse.data);\n};\n\nexport const checkTransactionStatus = (transactionId: string): Promise => {\n return customFetch(`Cart/checkTransactionStatus/${transactionId}`)\n .then((response) => response.json() as Promise>)\n .then((apiResponse) => apiResponse.data);\n};\n\nexport const initModulePayment = (\n paymentInfo: CartModulePaymentInitRequestModel\n): Promise> => {\n return customFetch(\"Cart/initModulePayment\", {\n body: JSON.stringify(paymentInfo),\n headers: { \"Content-Type\": \"application/json\" },\n method: \"POST\",\n }).then((response) => response.json() as Promise>);\n};\n\nexport const clearCart = (): Promise => {\n return customFetch(\"Cart/clear\", {\n body: \"\",\n headers: { \"Content-Type\": \"application/json\" },\n method: \"POST\",\n }).then((response) => response.json() as Promise);\n};\n","import { Button, createStyles, makeStyles, Theme, Typography } from \"@material-ui/core\";\nimport { Person } from \"@material-ui/icons\";\nimport AssignmentLate from \"@material-ui/icons/AssignmentLate\";\nimport React, { FC, useEffect, useState } from \"react\";\nimport { Link, useHistory } from \"react-router-dom\";\nimport { routesPaths } from \"../../Routes\";\nimport { useGetMeQuery } from \"../../api/rtk/MeApi\";\nimport { PersonType } from \"../../model/PersonType\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\nimport HomeSection from \"./HomeSection\";\nimport MandatoryFieldsAlert from \"./MandatoryFieldsAlert\";\nimport MyCourses from \"./MyCourses\";\nimport MyExamCases from \"./MyExamCases\";\nimport MyExamResults from \"./MyExamResults\";\nimport MyExamSessions from \"./MyExamSessions\";\nimport MyTasks from \"./MyTasks\";\nimport MyUser from \"./MyUser\";\nimport MyExams from \"./myExams/MyExams\";\nimport { getCart } from \"../../api/CartApi\";\nimport Alert from \"@material-ui/lab/Alert\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n cartMessageWrapper: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: theme.spacing(1) + \"px\",\n },\n alertMessage: {\n display: \"flex\",\n },\n cartMessage: {\n display: \"flex\",\n alignItems: \"center\",\n },\n })\n);\n\ntype HomeProps = {\n viewType?: PersonType;\n};\n\nconst Home: FC = (props) => {\n const classes = useStyles({});\n const history = useHistory();\n const { data: me, isFetching: isMeFetching } = useGetMeQuery();\n const personType = !props.viewType ? me?.type : props.viewType;\n const [showResumeCartMessage, setShowResumeCartMessage] = useState(false);\n\n useEffect(() => {\n let unmounted = false;\n\n if (personType === PersonType.Candidate) {\n getCart().then((cart) => {\n if (!unmounted) {\n if ((cart.modules?.length ?? 0) > 0) {\n setShowResumeCartMessage(true);\n }\n }\n });\n\n return () => {\n unmounted = true;\n };\n }\n }, [personType]);\n\n if (isMeFetching) {\n return <>;\n }\n\n return (\n <>\n {personType === PersonType.Internal && (\n <>\n } title={}>\n \n \n \n )}\n {personType === PersonType.Candidate && (\n <>\n \n \n \n {me?.type === PersonType.Expert && (\n \n \n \n )}\n \n {showResumeCartMessage && (\n \n
\n \n
\n \n \n
\n )}\n \n \n \n } title={}>\n \n \n \n )}\n {personType === PersonType.Expert && (\n <>\n \n \n \n \n \n \n \n } title={}>\n \n \n \n \n \n )}\n \n );\n};\n\nexport default Home;\n","import React, { FC } from \"react\";\nimport { PersonType } from \"../../model/PersonType\";\nimport Home from \"./Home\";\n\nconst CandidateHome: FC = () => ;\n\nexport default CandidateHome;\n","import React, { FC } from \"react\";\nimport { PersonType } from \"../../model/PersonType\";\nimport Home from \"./Home\";\n\nconst ExpertHome: FC = () => ;\n\nexport default ExpertHome;\n","import { InternalTaskIndex } from \"../../model/InternalTaskIndex\";\r\nimport { InternalTaskViewModel } from \"../../model/InternalTaskViewModel\";\r\nimport { ApiResponse } from \"../CustomFetch\";\r\nimport { api } from \"./BaseApi\";\r\n\r\nconst getInternalTaskUrl = (id?: string) => \"/InternalTask\" + (id === undefined ? \"\" : `/${id}`);\r\n\r\nconst internalTasksApi = api.enhanceEndpoints({ addTagTypes: [\"InternalTasks\"] }).injectEndpoints({\r\n endpoints: (builder) => ({\r\n getInternalTasks: builder.query({\r\n query: () => getInternalTaskUrl(),\r\n transformResponse: (response: ApiResponse) => response.data,\r\n providesTags: [{ type: \"InternalTasks\", id: \"LIST\" }],\r\n }),\r\n getInternalTask: builder.query({\r\n query: getInternalTaskUrl,\r\n transformResponse: (response: ApiResponse) => response.data,\r\n providesTags: (_result, _error, arg) => [{ type: \"InternalTasks\", id: arg }],\r\n }),\r\n updateInternalTask: builder.mutation, InternalTaskViewModel>({\r\n query: (internalTask: InternalTaskViewModel) => ({\r\n url: getInternalTaskUrl(),\r\n body: internalTask,\r\n headers: { \"Content-Type\": \"application/json\" },\r\n method: \"PUT\",\r\n }),\r\n invalidatesTags: (_result, _error, arg) => [\r\n { type: \"InternalTasks\", id: \"LIST\" },\r\n { type: \"InternalTasks\", id: arg.id },\r\n ],\r\n }),\r\n }),\r\n});\r\n\r\nexport const { endpoints, useGetInternalTasksQuery, useGetInternalTaskQuery, useUpdateInternalTaskMutation } =\r\n internalTasksApi;\r\n","import { FormLabel, Grid, Typography } from \"@material-ui/core\";\nimport React from \"react\";\nimport { injectIntl, WithIntlProps } from \"react-intl\";\nimport { InternalTaskViewModel } from \"../../../model/InternalTaskViewModel\";\nimport TranslatedMessage from \"../../translations/TranslatedMessage\";\nimport { TranslationKey } from \"../../../translations/TranslationKey\";\n\ntype CandidateFieldsProps = { task: InternalTaskViewModel } & WithIntlProps;\n\ntype RowProps = { title: TranslationKey; children: any };\n\nconst CandidateFields: React.FC = ({ task, intl }) => {\n const Row = ({ title, children }: RowProps) => {\n return (\n \n \n \n \n \n \n \n {children}\n \n \n );\n };\n return (\n \n \n \n \n\n {task.candidateEmailAddress}\n {task.candidateFirstName}\n {task.candidateLastName}\n {task.orderId > 0 ? task.orderId : \"\"}\n {task.abacusDebtorNumber}\n {task.transactionId}\n \n );\n};\n\nexport default injectIntl(CandidateFields);\n","import { FormLabel, Grid, Typography } from \"@material-ui/core\";\nimport React from \"react\";\nimport { useIntl } from \"react-intl\";\nimport { SwissGermanLocale, SwissTimeZone } from \"../../../data/constants\";\nimport { ExamType, ExamTypeTranslationKey } from \"../../../model/Exam\";\nimport { InternalTaskViewModel } from \"../../../model/InternalTaskViewModel\";\nimport { GetTranslatedValueIntl } from \"../../../model/Shared/TranslatedValue\";\nimport { getTimeSlotLabel } from \"../../../utils/TimeSlotUtils\";\nimport TranslatedMessage from \"../../translations/TranslatedMessage\";\n\nconst ModuleFields: React.FC<{ task: InternalTaskViewModel }> = ({ task }) => {\n const intl = useIntl();\n\n return (\n \n \n \n \n\n \n \n \n \n \n \n \n {GetTranslatedValueIntl(intl, task.examSessionKey)}\n \n \n\n {task.examType !== ExamType.TermPaper && (\n \n \n \n \n \n \n \n \n \n {task.examDate ? new Date(task.examDate).toLocaleDateString(SwissGermanLocale, { timeZone: SwissTimeZone }) : \"\"}\n \n \n \n\n \n \n \n \n \n \n \n {task.examLocation}\n \n \n\n \n \n \n \n \n \n \n {task.examRoom}\n \n \n\n \n \n \n \n \n \n \n {task.examTimeSlot ? getTimeSlotLabel(task.examTimeSlot) : \"\"}\n \n \n \n )}\n\n \n \n \n \n \n \n \n {GetTranslatedValueIntl(intl, task.moduleName)}\n \n \n\n \n \n \n \n \n \n \n {GetTranslatedValueIntl(intl, task.examName)}\n \n \n\n \n \n \n \n \n \n \n \n {task.examType && }\n \n \n \n \n );\n};\n\nexport default ModuleFields;\n","import {\r\n createStyles,\r\n Grid,\r\n LinearProgress,\r\n Link,\r\n makeStyles,\r\n Paper,\r\n Switch,\r\n TextField,\r\n Typography,\r\n} from \"@material-ui/core\";\r\nimport AssignmentTurnedInIcon from \"@material-ui/icons/AssignmentTurnedIn\";\r\nimport React, { ChangeEvent, FC, useEffect, useState } from \"react\";\r\nimport { useIntl } from \"react-intl\";\r\nimport { useHistory, useParams } from \"react-router\";\r\nimport { Link as RouterLink } from \"react-router-dom\";\r\nimport { useGetInternalTaskQuery, useUpdateInternalTaskMutation } from \"../../../api/rtk/InternalTaskApi\";\r\nimport { SwissGermanLocale, SwissTimeZone } from \"../../../data/constants\";\r\nimport { InternalTaskViewModel } from \"../../../model/InternalTaskViewModel\";\r\nimport { TaskState } from \"../../../model/TaskState\";\r\nimport { routesPaths } from \"../../../Routes\";\r\nimport { GetTranslation } from \"../../../translations/GetTranslation\";\r\nimport { navigateBack } from \"../../../utils/Navigation\";\r\nimport CustomButton from \"../../common/buttons/CustomButton\";\r\nimport DefaultButtons from \"../../common/buttons/DefaultButtons\";\r\nimport TranslatedMessage from \"../../translations/TranslatedMessage\";\r\nimport CandidateFields from \"./CandidateFields\";\r\nimport ModuleFields from \"./ModuleFields\";\r\nimport { ModuleViewModel } from \"../../../model/Module\";\r\nimport { getModule } from \"../../../api/ModuleApi\";\r\nimport EmailTextField from \"../../common/textField/EmailTextField\";\r\n\r\nconst useStyles = makeStyles((theme) =>\r\n createStyles({\r\n section: {\r\n marginTop: theme.spacing(3),\r\n padding: theme.spacing(3),\r\n },\r\n checkbox: {\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"center\",\r\n },\r\n row: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n },\r\n })\r\n);\r\n\r\nconst CancellationForm: FC = () => {\r\n const history = useHistory();\r\n const { internalTaskId } = useParams<{ internalTaskId: string }>();\r\n const intl = useIntl();\r\n const classes = useStyles();\r\n\r\n const [internalTask, setInternalTask] = useState();\r\n const [isValidEmail, setIsValidEmail] = useState(true);\r\n\r\n const { data: fetchedInternalTask, isFetching: isInternalTaskFetching } = useGetInternalTaskQuery(internalTaskId);\r\n const [updateInternalTask, { isLoading: isUpdateInternalTaskLoading }] = useUpdateInternalTaskMutation();\r\n const isLoading = isInternalTaskFetching || isUpdateInternalTaskLoading;\r\n const [module, setModule] = useState(null);\r\n\r\n useEffect(() => {\r\n if (fetchedInternalTask !== undefined) {\r\n setInternalTask(fetchedInternalTask);\r\n getModule(fetchedInternalTask.moduleId).then((response) => {\r\n setModule(response);\r\n });\r\n }\r\n }, [fetchedInternalTask]);\r\n\r\n if (isLoading) {\r\n return ;\r\n }\r\n\r\n if (fetchedInternalTask === undefined || internalTask === undefined) {\r\n return <>;\r\n }\r\n\r\n const close = () => navigateBack(routesPaths.root(), history, history.location);\r\n\r\n const handleRefundChange = (_: any, checked: boolean) =>\r\n setInternalTask({ ...internalTask, candidateWillGetRefund: checked });\r\n\r\n const handleCommentsChange = (event: ChangeEvent) =>\r\n setInternalTask({ ...internalTask, comments: event.target.value });\r\n\r\n const handleApprovedByChange = (event: ChangeEvent) => {\r\n const email = event.target.value;\r\n setIsValidEmail(false);\r\n setInternalTask({ ...internalTask, approvedBy: email });\r\n };\r\n\r\n const handleSave = () => {\r\n const requestData = { ...internalTask, state: TaskState.InProgress };\r\n updateInternalTask(requestData);\r\n };\r\n\r\n const handleClose = () => close();\r\n\r\n const handleComplete = async () => {\r\n const requestData = { ...internalTask, state: TaskState.Done };\r\n const response = await updateInternalTask(requestData).unwrap();\r\n if (response.success) {\r\n close();\r\n }\r\n };\r\n\r\n const creationDateDisplay = `${GetTranslation(intl, \"cancellationTaskForm.createdOn\")} ${new Date(\r\n internalTask.creationDate\r\n ).toLocaleDateString(SwissGermanLocale, { timeZone: SwissTimeZone })}`;\r\n\r\n const completeTaskButton = (\r\n }\r\n onClick={handleComplete}\r\n disabled={!isValidEmail}\r\n >\r\n \r\n \r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {creationDateDisplay}\r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n {internalTask.examSessionCandidateId && internalTask.moduleId && (\r\n \r\n \r\n \r\n )}\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n setIsValidEmail(valid)}\r\n onChange={handleApprovedByChange}\r\n variant=\"outlined\"\r\n />\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default CancellationForm;\r\n","import { Computer, SpeakerNotes } from \"@material-ui/icons\";\nimport React from \"react\";\nimport { RoomViewModel } from \"../../model/RoomViewModel\";\nimport CustomCard from \"../common/CustomCard\";\nimport { injectIntl, WithIntlProps } from \"react-intl\";\nimport { GetTranslation } from \"../../translations/GetTranslation\";\n\ntype RoomCardProps = {\n room: RoomViewModel;\n onClick?: (roomId: string) => void;\n} & WithIntlProps;\n\nconst RoomCard: React.FunctionComponent = (props) => {\n const { intl, room, onClick } = props;\n const handleClick = () => onClick!(room.id);\n return (\n : }\n line2={room.name}\n line3={room.floor}\n restLines={[room.numberOfSeats + GetTranslation(intl, \"room.text.seats\")]}\n onClick={handleClick}\n />\n );\n};\n\nexport default injectIntl(RoomCard);\n","import { Grid } from '@material-ui/core';\nimport { MeetingRoom } from '@material-ui/icons';\nimport { Add } from '@material-ui/icons';\nimport _ from 'lodash';\nimport React from 'react';\nimport { RoomViewModel } from '../../model/RoomViewModel';\nimport CustomButton from '../common/buttons/CustomButton';\nimport RightButtonArea from '../common/buttons/RightButtonArea';\nimport TitleWithIcon from '../common/TitleWithIcon';\nimport RoomCard from './RoomCard';\nimport TranslatedMessage from '../translations/TranslatedMessage';\n\ninterface RoomListProps {\n rooms: RoomViewModel[];\n onRoomSelected?: (roomId: string) => void;\n onStartAddingRoom?: () => void;\n}\n\nconst RoomList: React.FunctionComponent = (props) => {\n\n const sortedRooms = _.orderBy(props.rooms, (room) => room.name.toLowerCase());\n const roomCards = sortedRooms.map((room) =>\n \n \n \n );\n\n return (\n \n \n \n } variant='h4' >\n \n \n \n \n \n } onClick={props.onStartAddingRoom!}>\n \n \n \n \n \n \n {roomCards}\n \n \n );\n};\n\nRoomList.defaultProps = {\n onStartAddingRoom: () => { },\n} as Partial;\n\nexport default RoomList;\n","import * as React from \"react\";\r\nimport { FC, useEffect, useState } from \"react\";\r\nimport { useIntl } from \"react-intl\";\r\nimport Cantons from \"../../../data/cantons.json\";\r\nimport { GetTranslation } from \"../../../translations/GetTranslation\";\r\nimport { TranslationKey } from \"../../../translations/TranslationKey\";\r\nimport { CustomAutocomplete } from \"./CustomAutocomplete\";\r\nimport { IBaseSelectProps } from \"./IBaseSelectProps\";\r\nimport { IOption } from \"./IOption\";\r\n\r\nexport const CantonSelect: FC> = ({\r\n value,\r\n onChange = (_value?: string) => {},\r\n ...props\r\n}) => {\r\n const intl = useIntl();\r\n const [options, setOptions] = useState([]);\r\n\r\n useEffect(() => {\r\n const cantonOptions: IOption[] = Cantons.map((canton) => ({\r\n value: canton.value,\r\n label: GetTranslation(intl, canton.label as TranslationKey),\r\n }));\r\n setOptions(cantonOptions);\r\n }, [intl]);\r\n\r\n const selectedOption = options.find((option) => option.value === value) || null;\r\n return (\r\n option.value}\r\n value={selectedOption}\r\n onChange={(_event, value) => onChange(value?.value)}\r\n />\r\n );\r\n};\r\n","import { Grid, TextField } from \"@material-ui/core\";\r\nimport React from \"react\";\r\nimport { WithIntlProps, injectIntl } from \"react-intl\";\r\nimport ZipCodes from \"../../data/zipCodes.json\";\r\nimport { LocationViewModel } from \"../../model/LocationViewModel\";\r\nimport { GetTranslation } from \"../../translations/GetTranslation\";\r\nimport FormGridCell from \"../common/FormGridCell\";\r\nimport { CantonSelect } from \"../common/customAutocomplete/CantonSelect\";\r\nimport LanguageCheckboxList from \"../common/customCheckBox/LanguageCheckboxList\";\r\nimport EmailTextField from \"../common/textField/EmailTextField\";\r\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\r\n\r\ntype LocationFieldsProps = {\r\n location: LocationViewModel;\r\n onChangeEmailIsValid?: (isEmailValid: boolean) => void;\r\n onPropertyValueChanges?: (part: Partial) => void;\r\n} & WithIntlProps;\r\n\r\nconst LocationFields: React.FunctionComponent = (props) => {\r\n const handleTextChange =\r\n (key: keyof LocationViewModel) => (event: React.ChangeEvent) =>\r\n handleChange(key, event.target.value);\r\n const handleValueChange = (key: keyof LocationViewModel) => (value?: string | string[]) => handleChange(key, value);\r\n const handleZipCodeChange =\r\n (zipCodeKey: keyof LocationViewModel, cityKey: keyof LocationViewModel) =>\r\n (event: React.ChangeEvent) => {\r\n handleChange(zipCodeKey, event.target.value);\r\n handleChange(cityKey, \"\");\r\n ZipCodes.forEach((zipCode) => {\r\n if (zipCode.zipCode === event.target.value) {\r\n handleChange(cityKey, zipCode.city);\r\n }\r\n });\r\n };\r\n const handleChange = (key: keyof LocationViewModel, value?: string | string[]) => {\r\n let part: Partial = {\r\n [key]: value,\r\n };\r\n\r\n if (props.onPropertyValueChanges) {\r\n props.onPropertyValueChanges(part);\r\n }\r\n };\r\n const { intl } = props;\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n value={props.location.contactEmailAddress}\r\n onChange={handleTextChange(\"contactEmailAddress\")}\r\n onChangeIsValid={props.onChangeEmailIsValid}\r\n />\r\n \r\n \r\n );\r\n};\r\n\r\nLocationFields.defaultProps = {\r\n onChangeEmailIsValid: () => {},\r\n onPropertyValueChanges: () => {},\r\n} as Partial;\r\n\r\nexport default injectIntl(LocationFields);\r\n","import { Grid, LinearProgress } from \"@material-ui/core\";\r\nimport { Map, Room } from \"@material-ui/icons\";\r\nimport React, { FC, useEffect, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router\";\r\nimport {\r\n useCreateLocationMutation,\r\n useDeleteLocationMutation,\r\n useGetLocationQuery,\r\n useUpdateLocationMutation,\r\n} from \"../../api/rtk/LocationApi\";\r\nimport { NewEntityId } from \"../../data/constants\";\r\nimport { LocationViewModel } from \"../../model/LocationViewModel\";\r\nimport { routesPaths } from \"../../Routes\";\r\nimport { navigateBack } from \"../../utils/Navigation\";\r\nimport DefaultButtons from \"../common/buttons/DefaultButtons\";\r\nimport LinkButton from \"../common/buttons/LinkButton\";\r\nimport TitleWithIcon from \"../common/TitleWithIcon\";\r\nimport RoomList from \"../room/RoomList\";\r\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\r\nimport { initialLocation } from \"./LocationConstants\";\r\nimport LocationFields from \"./LocationFields\";\r\n\r\nconst LocationForm: FC = () => {\r\n const history = useHistory();\r\n const { locationId } = useParams<{ locationId: string }>();\r\n\r\n const [location, setLocation] = useState(initialLocation);\r\n const [isEmailValid, setEmailValid] = useState(false);\r\n\r\n const [deleteLocation, { isLoading: isDeleteLocationLoading, isSuccess: isDeleteSuccess }] =\r\n useDeleteLocationMutation();\r\n const [createLocation, { isLoading: isCreateLocationLoading }] = useCreateLocationMutation();\r\n const [updateLocation, { isLoading: isUpdateLocationLoading }] = useUpdateLocationMutation();\r\n const { data: fetchedLocation, isFetching: isLocationFetching } = useGetLocationQuery(locationId, {\r\n skip: locationId === NewEntityId || isDeleteSuccess,\r\n });\r\n const isLoading = isLocationFetching || isDeleteLocationLoading || isCreateLocationLoading || isUpdateLocationLoading;\r\n\r\n useEffect(() => {\r\n if (fetchedLocation !== undefined) {\r\n setLocation(fetchedLocation);\r\n }\r\n }, [fetchedLocation]);\r\n\r\n if (isLoading) {\r\n return ;\r\n }\r\n\r\n if (fetchedLocation === undefined && locationId !== NewEntityId) {\r\n return <>;\r\n }\r\n\r\n const close = () => navigateBack(routesPaths.locations(), history, history.location);\r\n\r\n const handleChange = (partialLocation: Partial) =>\r\n setLocation((prevLocation) => ({ ...prevLocation, ...partialLocation }));\r\n\r\n const handleEmailIsValid = (isEmailValid: boolean) => setEmailValid(isEmailValid);\r\n\r\n const handleClose = () => close();\r\n\r\n const handleSave = async () => {\r\n if (location.id === NewEntityId) {\r\n const response = await createLocation(location).unwrap();\r\n if (response.success) {\r\n const locationId = response.data;\r\n history.replace(routesPaths.location(locationId));\r\n }\r\n } else {\r\n updateLocation(location);\r\n }\r\n };\r\n\r\n const handleDelete = async () => {\r\n const response = await deleteLocation(location.id).unwrap();\r\n if (response.success) {\r\n close();\r\n }\r\n };\r\n\r\n const handleRoomSelected = (roomId: string) => history.push(routesPaths.room(location.id, roomId));\r\n\r\n const handleStartAddingRoom = () => history.push(routesPaths.room(location.id, NewEntityId));\r\n\r\n const additionalButtons = location.linkToMap && (\r\n } href={location.linkToMap} target=\"_blank\">\r\n \r\n \r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {location.id !== NewEntityId && (\r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default LocationForm;\r\n","import * as React from 'react';\nimport { LocationViewModel } from '../../model/LocationViewModel'\nimport { CustomGrid, ColumnDefinition } from '../common/customGrid/CustomGrid';\nimport TranslatedMessage from '../translations/TranslatedMessage';\n\ninterface ILocationGridProps {\n locations: LocationViewModel[];\n onLocationClick: (id: string) => void;\n onAddClick: (event: any) => void;\n}\n\nclass LocationGrid extends React.Component {\n private columnsDefinitions: Array> = [\n { columnKey: \"locationName\", columnLabel: , cellValue: (((_) => _.name)) },\n { columnKey: \"street\", columnLabel: , cellValue: (((_) => _.street)) },\n { columnKey: \"zipCode\", columnLabel: , cellValue: (((_) => _.zipCode)) },\n { columnKey: \"city\", columnLabel: , cellValue: (((_) => _.city)) },\n { columnKey: \"canton\", columnLabel: , cellValue: (((_) => _.canton)) },\n { columnKey: \"contactName\", columnLabel: , cellValue: (((_) => _.contactName)) },\n { columnKey: \"contactPhoneNo\", columnLabel: , cellValue: (((_) => _.contactPhoneNo)) },\n { columnKey: \"contactEmailAddress\", columnLabel: , cellValue: (((_) => _.contactEmailAddress)) },\n { columnKey: \"languageRegions\", columnLabel: , cellValue: (((_) => _.languageRegions && _.languageRegions.join(', '))) },\n ];\n\n public render() {\n return (\n \n columnDefinitions={this.columnsDefinitions}\n rows={this.props.locations}\n onRowClick={(_) => this.props.onLocationClick(_.id)}\n rowKey={(_) => _.id}\n addButtonTooltip={}\n onAddClick={this.props.onAddClick}\n />\n );\n }\n}\n\nexport default LocationGrid;\n","import { createStyles, LinearProgress, Theme, Typography } from \"@material-ui/core\";\nimport { withStyles } from \"@material-ui/styles\";\nimport React, { Component } from \"react\";\nimport { connect, ConnectedProps } from \"react-redux\";\nimport { RouteComponentProps } from \"react-router\";\nimport { ApplicationState } from \"../..\";\nimport { endpoints } from \"../../api/rtk/LocationApi\";\nimport { NewEntityId } from \"../../data/constants\";\nimport { LocationViewModel } from \"../../model/LocationViewModel\";\nimport { routesPaths } from \"../../Routes\";\nimport { navigateTo } from \"../../utils/Navigation\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\nimport LocationGrid from \"./LocationGrid\";\n\nconst styles = ({ spacing }: Theme) =>\n createStyles({\n button: { margin: spacing(1) },\n icon: { marginRight: spacing(1) },\n });\n\nconst mapStateToProps = (state: ApplicationState) => {\n return {\n locationsState: endpoints.getLocations.select()(state),\n };\n};\nconst mapDispatchToProps = {\n getLocations: endpoints.getLocations.initiate,\n};\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ntype LocationListProps = ConnectedProps & RouteComponentProps;\n\ntype LocationListState = {\n locations: LocationViewModel[];\n};\n\nclass LocationList extends Component {\n constructor(props: any) {\n super(props);\n this.state = {\n locations: [],\n };\n }\n\n public componentDidMount() {\n this.props.getLocations();\n }\n\n public render() {\n return (\n <>\n \n \n \n {this.renderLocations()}\n \n );\n }\n private renderLocations(): JSX.Element {\n const { isLoading, data: locations } = this.props.locationsState;\n\n if (isLoading) {\n return ;\n }\n\n if (locations === undefined) {\n return <>;\n }\n\n return (\n this.navigateToLocation(NewEntityId)}\n />\n );\n }\n\n private navigateToLocation = (locationId: string) => {\n navigateTo(routesPaths.location(locationId), this.props.history);\n };\n}\n\nexport default withStyles(styles)(connector(LocationList));\n","import { Language } from \"../data/constants\";\nimport { ApiResponse, customFetch } from \"./CustomFetch\";\n\nexport const setUpUser = () =>\n customFetch(\"me/set-up\", {\n method: \"PUT\",\n });\n\nexport const fetchMyUiLanguage = () => {\n return customFetch(\"me/ui-language\")\n .then((response) => response.json() as Promise>)\n .then((jsonResponse) => jsonResponse.data);\n};\n","import { IPublicClientApplication } from \"@azure/msal-browser\";\nimport { IUserAuthenticator } from \"../../auth\";\nimport { Language } from \"../../data/constants\";\nimport { AppRegistration } from '../../model/AppRegistration';\nimport { v4 as uuidv4 } from \"uuid\";\n\nexport type UserType = \"INTERNAL\" | \"EXTERNAL\";\n\nexport interface SessionState {\n isUserAuthenticated: boolean;\n userAuthenticator?: IUserAuthenticator;\n isLoadingAuth: boolean;\n language: Language;\n sessionId: string;\n authClient: IPublicClientApplication | null,\n appRegistration: AppRegistration | null\n}\n\nexport const unloadedState: SessionState = {\n isUserAuthenticated: false,\n language: Language.DE,\n userAuthenticator: undefined,\n isLoadingAuth: true,\n sessionId: uuidv4(),\n authClient: null,\n appRegistration: null\n};\n","import * as moment from \"moment\";\nimport { Action, Reducer } from \"redux\";\nimport { fetchMyUiLanguage } from \"../../api/UserApi\";\nimport { Language, LanguageLocale, LanguageKeys, LocalStorageKey } from \"../../data/constants\";\nimport { AppThunkAction } from \"../ApplicationStore\";\nimport { SessionState, unloadedState } from \"./SessionState\";\n\nexport interface IChangeLanguageAction {\n type: \"CHANGE_LANGUAGE\";\n language?: Language;\n}\n\ntype KnownAction = IChangeLanguageAction;\n\nconst setLanguage = (dispatch: (action: KnownAction) => void, language: Language) => {\n moment.locale(LanguageLocale[language]);\n localStorage.setItem(LocalStorageKey.LastSelectedLanguageKey, language);\n dispatch({ type: \"CHANGE_LANGUAGE\", language });\n};\n\nexport const ActionCreators = {\n changeLanguage:\n (language: Language): AppThunkAction =>\n (dispatch) => {\n setLanguage(dispatch, language);\n },\n getAndSetLanguage: (): AppThunkAction => (dispatch, getState) => {\n if (getState().sessionState.isUserAuthenticated) {\n fetchMyUiLanguage().then((language: Language) => setLanguage(dispatch, language));\n }\n },\n detectLanguageIfPossible: (): AppThunkAction => (dispatch, getState) => {\n const lastSelectedLanguage: string | null = localStorage.getItem(LocalStorageKey.LastSelectedLanguageKey);\n if (lastSelectedLanguage && lastSelectedLanguage !== \"null\" && isLanguage(lastSelectedLanguage.toUpperCase())) {\n setLanguage(dispatch, lastSelectedLanguage as Language);\n return;\n }\n\n let suggestedLanguage = navigator.languages.find(\n (lang) =>\n lang.toUpperCase().startsWith(\"DE\") ||\n lang.toUpperCase().startsWith(\"FR\") ||\n lang.toUpperCase().startsWith(\"EN\")\n );\n\n if (suggestedLanguage && isLanguage(suggestedLanguage)) {\n suggestedLanguage = suggestedLanguage.substr(0, 2);\n setLanguage(dispatch, suggestedLanguage as Language);\n }\n },\n};\n\nconst isLanguage = (value: string): value is LanguageKeys => {\n return value in Language;\n};\n\nexport const reducer: Reducer = (state: SessionState = unloadedState, incomingAction: Action) => {\n const action = incomingAction as KnownAction;\n\n switch (action.type) {\n case \"CHANGE_LANGUAGE\": {\n if (action.language) {\n return { ...state, language: action.language };\n }\n }\n }\n\n return state;\n};\n","import { AppRegistration } from '../model/AppRegistration';\nimport { UserType } from '../store/session/SessionState';\nimport { ApiResponse, customFetch } from './CustomFetch';\n\nexport const fetchUiAppRegistration = (typeOfUser: UserType) => {\n return customFetch(`settings/ui-app-registration/${typeOfUser}`, undefined, false)\n .then((response) => response?.json() as Promise>)\n .then((jsonResponse) => jsonResponse?.data);\n};\n","import { routesPaths } from \"../Routes\";\n\nexport default class UrlHelper {\n public static loginUrl(): string {\n return `${window.location.protocol}//${window.location.host}${routesPaths.login()}`;\n }\n}","import * as Msal from \"@azure/msal-browser\";\nimport { store } from \".\";\nimport UrlHelper from \"./utils/UrlHelpler\";\n\nexport interface IUserAuthenticator {\n GetToken(): Promise;\n IsAuthenticated(): Promise;\n}\n\nexport class UserAuthenticator implements IUserAuthenticator {\n constructor(private clientId: string, authority: string, private scopes: string[]) {}\n\n public async GetToken(): Promise {\n const sessionState = store.getState().sessionState;\n const silentRequest: Msal.SilentRequest = {\n scopes: sessionState.appRegistration?.scopes ?? [],\n redirectUri: UrlHelper.loginUrl(),\n account: sessionState.authClient?.getAllAccounts()[0],\n };\n return await sessionState\n .authClient!.acquireTokenSilent(silentRequest)\n .then((result) => {\n if (result.accessToken){\n return Promise.resolve(result.accessToken);\n }\n console.error(\"No access token retrieved\");\n return \"\";\n })\n .catch(async (_) => {\n if (_ instanceof Msal.InteractionRequiredAuthError) {\n await sessionState.authClient!.acquireTokenRedirect(silentRequest);\n }\n\n console.error(\"Error acquiring the access token \", _);\n return Promise.reject();\n });\n }\n\n public async IsAuthenticated(): Promise {\n return await this.GetToken()\n .then(() => {\n return Promise.resolve(true);\n })\n .catch(() => {\n return Promise.resolve(false);\n });\n }\n}\n","import reduceReducers from \"reduce-reducers\";\nimport { AnyAction, Reducer } from \"redux\";\nimport { fetchUiAppRegistration } from \"../../api/SettingsApi\";\nimport { setUpUser } from \"../../api/UserApi\";\nimport { IUserAuthenticator, UserAuthenticator } from \"../../auth\";\nimport { AppThunkAction } from \"../ApplicationStore\";\nimport { ActionCreators as languageActions, reducer as reducerLanguage } from \"./SessionLanguage\";\nimport { SessionState, UserType, unloadedState } from \"./SessionState\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport { PublicClientApplication } from \"@azure/msal-browser\";\nimport { AppRegistration } from \"../../model/AppRegistration\";\n\ninterface SetAppRegistrationAction {\n type: \"SET_APP_REGISTRATION\";\n appRegistration: AppRegistration;\n}\ninterface SetAuthClientAction {\n type: \"SET_AUTH_CLIENT\";\n authClient: PublicClientApplication;\n}\ninterface SetAuthenticatorAction {\n type: \"SET_AUTHENTICATOR\";\n userAuthenticator: IUserAuthenticator;\n}\ninterface LoginAction {\n type: \"SET_USER_LOGGED_IN\";\n}\ninterface LogoutAction {\n type: \"SET_USER_LOGGED_OUT\";\n}\ninterface RenewSessionIdAction {\n type: \"GENERATE_SESSION_ID\";\n}\n\ntype KnownAction = LoginAction | LogoutAction | SetAuthenticatorAction | RenewSessionIdAction | SetAuthClientAction | SetAppRegistrationAction;\n\nconst LastUserTypeKey = \"lastUserType\";\n\nconst getAuthenticator = (typeOfUser: UserType): Promise => {\n return fetchUiAppRegistration(typeOfUser).then(\n (config) => new UserAuthenticator(config.clientId, config.authority, config.scopes) as IUserAuthenticator\n );\n};\n\nconst setLoginStatusAndEnsureUserExists = (dispatch: (action: KnownAction) => void) => (isLoggedIn: boolean) => {\n if (isLoggedIn) {\n setUpUser();\n dispatch({ type: \"SET_USER_LOGGED_IN\" });\n languageActions.getAndSetLanguage();\n } else {\n dispatch({ type: \"SET_USER_LOGGED_OUT\" });\n }\n};\n\nexport const getLastUserType = () => window.localStorage.getItem(LastUserTypeKey) as UserType | undefined;\n\nexport const ActionCreators = {\n checkLoginStatus: (): AppThunkAction => async (dispatch, getState) => {\n try {\n const lastUserType = getLastUserType();\n\n if (!lastUserType) {\n dispatch({ type: \"SET_USER_LOGGED_OUT\" });\n return;\n }\n\n dispatch({ type: \"GENERATE_SESSION_ID\" });\n\n const userAuthenticator = await getAuthenticator(lastUserType);\n dispatch({ type: \"SET_AUTHENTICATOR\", userAuthenticator });\n const isAuthenticated = await userAuthenticator.IsAuthenticated();\n setLoginStatusAndEnsureUserExists(dispatch)(isAuthenticated);\n } catch (error) {\n console.log(error);\n }\n },\n setAuthenticationClient: (client: PublicClientApplication): AppThunkAction => async (dispatch, getState) => {\n dispatch({ type: \"SET_AUTH_CLIENT\", authClient:client });\n },\n setAppRegistration: (appRegistration: AppRegistration): AppThunkAction => async (dispatch, getState) => {\n dispatch({ type: \"SET_APP_REGISTRATION\", appRegistration });\n }\n};\n\nconst reducerSession: Reducer = (state: SessionState = unloadedState, action: KnownAction) => {\n switch (action.type) {\n case \"SET_APP_REGISTRATION\":\n return {\n ...state,\n appRegistration: action.appRegistration,\n };\n case \"SET_AUTH_CLIENT\":\n return {\n ...state,\n authClient: action.authClient,\n };\n case \"SET_AUTHENTICATOR\":\n return {\n ...state,\n userAuthenticator: action.userAuthenticator,\n };\n case \"SET_USER_LOGGED_IN\":\n return {\n ...state,\n isUserAuthenticated: true,\n isLoadingAuth: false,\n };\n case \"SET_USER_LOGGED_OUT\": {\n return {\n ...unloadedState,\n language: state.language,\n isLoadingAuth: false,\n };\n }\n case \"GENERATE_SESSION_ID\":\n return {\n ...state,\n sessionId: uuidv4(),\n };\n\n default:\n // The following line guarantees that every action in the KnownAction union has been covered by a case above\n // eslint-disable-next-line\n const exhaustiveCheck: never = action;\n }\n\n return state;\n};\n\nexport const reducer = reduceReducers(reducerSession, reducerLanguage) as Reducer;\n","import {\n Button,\n Card,\n CardActionArea,\n CardContent,\n CardMedia,\n Grid,\n LinearProgress,\n makeStyles,\n Tooltip,\n Typography,\n} from \"@material-ui/core\";\nimport React, { FC, useEffect } from \"react\";\nimport { useIntl } from \"react-intl\";\nimport { connect } from \"react-redux\";\nimport { Redirect, RouteComponentProps } from \"react-router\";\nimport { bindActionCreators, Dispatch } from \"redux\";\nimport { ApplicationState, store } from \"../..\";\nimport { ActionCreators as LangActionCreators } from \"../../store/session/SessionLanguage\";\nimport { SessionState } from \"../../store/session/SessionState\";\nimport { ActionCreators } from \"../../store/session/SessionStore\";\nimport { GetTranslation } from \"../../translations/GetTranslation\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\nimport loginImage from \"./external-login.jpg\";\nimport loginButtonIcon from \"./login-icon.svg\";\nimport { useIsAuthenticated, useMsal } from \"@azure/msal-react\";\nimport { fetchUiAppRegistration } from \"../../api/SettingsApi\";\nimport { Configuration, PublicClientApplication } from \"@azure/msal-browser\";\nimport useNotification from \"../../utils/useNotification\";\nimport UrlHelper from \"../../utils/UrlHelpler\";\n\ntype LoginProps = RouteComponentProps<{ userType: string }> &\n typeof ActionCreators &\n typeof LangActionCreators &\n SessionState & {\n from: string;\n };\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n minHeight: \"100%\",\n },\n content: {\n padding: \"1rem\",\n flex: 1,\n },\n footer: {\n backgroundColor: \"#0a0a0a\",\n padding: \"0.5rem\",\n },\n footerButton: {\n color: \"#fff\",\n },\n footerLinksContainer: {\n flex: 1,\n textAlign: \"center\",\n },\n card: {\n maxWidth: 900,\n margin: \"auto\",\n },\n media: {\n height: 100,\n \"@media (min-width:800px)\": { height: 300 },\n },\n card_content: {\n marginLeft: \"3rem\",\n marginRight: \"3rem\",\n },\n card_title: {\n marginTop: \"1.5rem\",\n },\n card_button: {\n paddingTop: \"1.5rem\",\n paddingBottom: \"1.5rem\",\n \"& img\": {\n padding: \"1rem\",\n },\n \"& span\": {\n paddingRight: \"1rem\",\n },\n },\n}));\n\nconst Login: FC = ({ detectLanguageIfPossible, location, setAuthenticationClient, setAppRegistration }) => {\n const classes = useStyles();\n const intl = useIntl();\n const { inProgress } = useMsal();\n const isAuthenticated = useIsAuthenticated();\n const defaultDestination = \"/\";\n const { from } = (location.state as any) || { from: { pathname: defaultDestination } };\n const destination = from.pathname === \"/login\" || from.pathname === \"/logout\" ? defaultDestination : from;\n const impressumLink = GetTranslation(intl, \"login.button.impressumLink\");\n const { error } = useNotification();\n\n useEffect(() => {\n detectLanguageIfPossible();\n }, [ detectLanguageIfPossible ]);\n\n const handleLogin = async (type: any) => {\n sessionStorage.clear();\n localStorage.setItem(\"lastUserType\", type);\n await fetchUiAppRegistration(type)\n .then(async (config) => {\n if (config) {\n setAppRegistration(config);\n const configuration: Configuration = {\n auth: {\n authority: config.authority,\n clientId: config.clientId,\n redirectUri: UrlHelper.loginUrl(),\n knownAuthorities: [config.authority?.split(\"/\")[2]],\n },\n cache: {\n cacheLocation: \"sessionStorage\",\n },\n };\n\n const clientApp = new PublicClientApplication(configuration);\n setAuthenticationClient(clientApp);\n await clientApp.initialize().then(async () => {\n await clientApp.loginRedirect({ scopes: store.getState().sessionState.appRegistration?.scopes ?? [] });\n });\n } else {\n error(\"login.error.errorLoadingAppRegistration\");\n }\n })\n .catch((err) => {\n error(\"login.error.errorLoadingAppRegistration\", err);\n });\n };\n\n if (isAuthenticated) {\n return ;\n }\n\n if (inProgress !== \"none\") {\n return ;\n }\n\n return (\n \n \n \n handleLogin(\"EXTERNAL\")}>\n \n \n \n \n \n \n \n \n \n {}\n \n \n {}\n \n {\": \"}\n \n \n \n \n \n }>\n \n \"Login\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nconst mapDispatchToProps = (dispatch: Dispatch) =>\n bindActionCreators({ ...ActionCreators, ...LangActionCreators }, dispatch);\n\nexport default connect((state: ApplicationState) => state.sessionState, mapDispatchToProps)(Login);\n","enum StartCertificationSteps {\n PersonalDataStep = 0,\n ModuleSelectionStep = 1,\n ExamLocationAndDateStep = 2,\n ModulesDetailsStep = 3,\n PaymentAndCompletionStep = 4,\n EmailConfirmationSent = 5,\n}\n\nexport default StartCertificationSteps;\n","import { useSnackbar } from \"notistack\";\nimport { useIntl } from \"react-intl\";\nimport { GetTranslation } from \"../translations/GetTranslation\";\nimport { isTranslationKey, TranslationKey } from \"../translations/TranslationKey\";\n\nexport default function useNotification() {\n const intl = useIntl();\n const { enqueueSnackbar } = useSnackbar();\n const error = (message: string | TranslationKey, error?: any ) => {\n let msg = isTranslationKey(message) ? GetTranslation(intl, message as TranslationKey) : message;\n if (error && error.message) {\n msg = `${msg} Error: ${error.message}`\n }\n enqueueSnackbar(msg, {\n variant: \"error\",\n });\n };\n\n const warning = (message: string | TranslationKey) => {\n enqueueSnackbar(isTranslationKey(message) ? GetTranslation(intl, message as TranslationKey) : message, {\n variant: \"warning\",\n });\n };\n\n const info = (message: string | TranslationKey) => {\n enqueueSnackbar(isTranslationKey(message) ? GetTranslation(intl, message as TranslationKey) : message, {\n variant: \"info\",\n });\n };\n\n const success = (message: string | TranslationKey) => {\n enqueueSnackbar(isTranslationKey(message) ? GetTranslation(intl, message as TranslationKey) : message, {\n variant: \"success\",\n });\n };\n return {error, warning, info, success};\n}\n","import { NewEntityId } from \"../../data/constants\";\nimport {\n ModuleCertificateValidity,\n ModuleStatus,\n ModuleType,\n ModuleViewModel,\n RequiredModule,\n} from \"../../model/Module\";\n\nexport const initialModule: ModuleViewModel = {\n id: NewEntityId,\n nameDE: \"\",\n nameEN: \"\",\n nameFR: \"\",\n nameIT: \"\",\n moduleType: ModuleType.OptionalModule,\n certificateValidity: ModuleCertificateValidity.Unlimited,\n status: ModuleStatus.Draft,\n exams: [],\n allowOptions: false,\n allowDocumentUpload: true,\n verificationRequired: false,\n price: undefined,\n abacusNumber: \"\",\n gradingRule: undefined,\n allowRegistrationOnlyOnce: false,\n};\n\nexport const getInitialRequiredFieldsStatuses = (): RequiredModule => ({\n isNameDEEmpty: false,\n isNameENEmpty: false,\n isNameFREmpty: false,\n isNameITEmpty: false,\n isPriceEmpty: false,\n isGradingRuleEmpty: false,\n});\n","import { Checkbox, ListItemSecondaryAction, ListItemText, Typography } from \"@material-ui/core\";\nimport Button from \"@material-ui/core/Button\";\nimport Dialog from \"@material-ui/core/Dialog\";\nimport DialogActions from \"@material-ui/core/DialogActions\";\nimport DialogContent from \"@material-ui/core/DialogContent\";\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\nimport List from \"@material-ui/core/List\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport React from \"react\";\nimport { ExamTemplateIndex } from \"../../model/Exam\";\nimport { GetTranslatedValue } from \"../../model/Shared/TranslatedValue\";\nimport CustomSearchBox from \"../common/customSearchBox/CustomSearchBox\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\n\ntype ExamSelectionDialogProps = {\n isOpened: boolean;\n handleAccept: (selection: ExamTemplateIndex[]) => void;\n handleCancel: () => void;\n selectedExams?: ExamTemplateIndex[];\n selectableExams: ExamTemplateIndex[];\n};\n\nconst ExamSelectionDialog = (props: ExamSelectionDialogProps) => {\n const { isOpened, handleAccept, handleCancel, selectableExams } = props;\n const [selection, setSelection] = React.useState([]);\n const [searchToken, setSearchToken] = React.useState(\"\");\n const [filteredExams, setFilteredExams] = React.useState(selectableExams);\n\n React.useEffect(() => {\n setFilteredExams(selectableExams);\n }, [selectableExams]);\n\n const onAccept = () => {\n const selectedExams = selectableExams.filter((exam) => selection.indexOf(exam.id) !== -1);\n handleAccept(selectedExams);\n setSelection([]);\n setSearchToken(\"\");\n };\n\n const onCancel = () => {\n handleCancel();\n setSelection([]);\n setSearchToken(\"\");\n };\n\n const onSearchTokenChanged = (token: string) => {\n const nonSelectedFilteredExams = selectableExams.filter(\n (exam) =>\n selection.indexOf(exam.id) === -1 &&\n GetTranslatedValue(exam.name).toLowerCase().indexOf(token.toLowerCase()) !== -1\n );\n setFilteredExams(nonSelectedFilteredExams);\n setSearchToken(token);\n };\n\n const toggleExamSelection = (exam: ExamTemplateIndex) => {\n if (selection.indexOf(exam.id) === -1) {\n setSelection([...selection, exam.id]);\n } else {\n setSelection(selection.filter((id) => id !== exam.id));\n }\n };\n\n const isListEmpty = filteredExams.length === 0;\n\n return (\n \n \n \n \n \n onSearchTokenChanged(event.target.value)}\n searchToken={searchToken}\n />\n\n {isListEmpty ? (\n \n \n \n ) : (\n \n {filteredExams.map((exam) => (\n toggleExamSelection(exam)} key={exam.id}>\n \n \n toggleExamSelection(exam)}\n checked={selection.indexOf(exam.id) !== -1}\n />\n \n \n ))}\n \n )}\n \n \n \n \n \n \n );\n};\n\nconst listContainer: React.CSSProperties = {\n height: 400,\n overflow: \"auto\",\n marginTop: 10,\n paddingTop: 0,\n};\n\nconst emptyMessage: React.CSSProperties = {\n height: 400,\n marginTop: 10,\n paddingTop: 200,\n textAlign: \"center\",\n};\n\nexport default ExamSelectionDialog;\n","import { createStyles, IconButton, makeStyles, Typography } from \"@material-ui/core\";\r\nimport HighlightOffIcon from \"@material-ui/icons/HighlightOff\";\r\nimport React from \"react\";\r\nimport { useIntl } from \"react-intl\";\r\nimport { useHistory } from \"react-router\";\r\nimport { getPublishedExams } from \"../../api/ExamApi\";\r\nimport { ExamTemplateIndex, ExamTypeTranslationKey } from \"../../model/Exam\";\r\nimport { GetTranslatedValue } from \"../../model/Shared/TranslatedValue\";\r\nimport { routesPaths } from \"../../Routes\";\r\nimport { GetTranslation } from \"../../translations/GetTranslation\";\r\nimport { ColumnDefinition, CustomGrid } from \"../common/customGrid/CustomGrid\";\r\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\r\nimport ExamSelectionDialog from \"./ExamSelectionDialog\";\r\n\r\nconst useStyles = makeStyles(() =>\r\n createStyles({\r\n container: {\r\n marginTop: \"3rem\",\r\n },\r\n header: {\r\n marginBottom: \"-2rem\",\r\n },\r\n })\r\n);\r\n\r\ntype ModuleFormExamsProps = {\r\n exams: ExamTemplateIndex[];\r\n handleAddExams: (exams: ExamTemplateIndex[]) => void;\r\n handleRemoveExam: (exam: ExamTemplateIndex) => void;\r\n isReadOnly: boolean;\r\n};\r\n\r\nconst ModuleFormExams = (props: ModuleFormExamsProps) => {\r\n const { exams, handleAddExams: addExamItems, handleRemoveExam, isReadOnly } = props;\r\n const [allExams, setAllExams] = React.useState([]);\r\n\r\n const history = useHistory();\r\n const intl = useIntl();\r\n\r\n React.useEffect(() => {\r\n getPublishedExams().then((exams) => {\r\n setAllExams(exams);\r\n });\r\n }, []);\r\n\r\n const [selectionDialogOpened, setSelectionDialogOpened] = React.useState(false);\r\n const classes = useStyles();\r\n\r\n const columnsDefinitions: ColumnDefinition[] = [\r\n {\r\n columnKey: \"examName\",\r\n columnLabel: ,\r\n cellValue: (_) => GetTranslatedValue(_.name),\r\n },\r\n { columnKey: \"examId\", columnLabel: , cellValue: (_) => _.examId },\r\n {\r\n columnKey: \"examType\",\r\n columnLabel: ,\r\n cellValue: (_) => GetTranslation(intl, ExamTypeTranslationKey[_.type]),\r\n },\r\n ];\r\n\r\n const onNewExamSelection = (exams: ExamTemplateIndex[]) => {\r\n setSelectionDialogOpened(false);\r\n addExamItems(exams);\r\n };\r\n\r\n const getSelectableExams = () => {\r\n let selectableExams = allExams.filter((x) => exams.every((y) => y.id !== x.id));\r\n return selectableExams;\r\n };\r\n\r\n if (!isReadOnly) {\r\n columnsDefinitions.push({\r\n columnKey: \"removeModule\",\r\n columnLabel: \"\",\r\n cellValue: (_) => (\r\n {\r\n event.stopPropagation();\r\n handleRemoveExam(_);\r\n }}\r\n >\r\n \r\n \r\n ),\r\n isSortingDisabled: true,\r\n });\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n columnDefinitions={columnsDefinitions}\r\n rows={exams}\r\n rowKey={(_) => _.id}\r\n addButtonTooltip={}\r\n onRowClick={(row: ExamTemplateIndex) => history.push(routesPaths.exam(row.id))}\r\n onAddClick={() => setSelectionDialogOpened(true)}\r\n hideSearchBar={true}\r\n hideAddButton={isReadOnly}\r\n />\r\n\r\n setSelectionDialogOpened(false)}\r\n isOpened={selectionDialogOpened}\r\n selectableExams={getSelectableExams()}\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default ModuleFormExams;\r\n","import { Checkbox, FormControl, FormControlLabel, Grid, InputLabel, MenuItem, Typography } from \"@material-ui/core\";\r\nimport Select from \"@material-ui/core/Select\";\r\nimport { createStyles, makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport React from \"react\";\r\nimport { useIntl } from \"react-intl\";\r\nimport {\r\n ModuleCertificateValidity,\r\n ModuleCertificateValidityTranslationKey,\r\n ModuleGradingRules,\r\n ModuleGradingRulesTranslationKey,\r\n ModuleStatus,\r\n ModuleType,\r\n ModuleTypeTranslationKey,\r\n ModuleViewModel,\r\n RequiredModule,\r\n} from \"../../model/Module\";\r\nimport { GetTranslation } from \"../../translations/GetTranslation\";\r\nimport GridCurrencyField from \"../common/customGrid/GridCurrencyField\";\r\nimport GridTextField from \"../common/customGrid/GridTextField\";\r\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\r\n\r\ntype ModuleFormFieldsProps = {\r\n module: ModuleViewModel;\r\n handleFieldChange: (change: Partial) => void;\r\n requiredFieldStatus: RequiredModule;\r\n};\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n paddingBottom: theme.spacing(6),\r\n },\r\n moduleDetails: {\r\n marginTop: theme.spacing(2),\r\n marginBottom: theme.spacing(2),\r\n },\r\n documentUploadCheckbox: {\r\n [theme.breakpoints.down(\"xs\")]: {\r\n order: -2,\r\n },\r\n },\r\n allowOptionsCheckbox: {\r\n [theme.breakpoints.down(\"xs\")]: {\r\n order: -3,\r\n },\r\n },\r\n validationRequiredCheckbox: {\r\n [theme.breakpoints.down(\"xs\")]: {\r\n order: -1,\r\n },\r\n },\r\n })\r\n);\r\n\r\nconst ModuleFormFields = (props: ModuleFormFieldsProps) => {\r\n const { module, handleFieldChange, requiredFieldStatus } = props;\r\n const intl = useIntl();\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n handleFieldChange({ nameDE: event.target.value })}\r\n value={module.nameDE || \"\"}\r\n readOnly={module.status === ModuleStatus.Published || module.status === ModuleStatus.Archived}\r\n />\r\n handleFieldChange({ nameEN: event.target.value })}\r\n value={module.nameEN || \"\"}\r\n readOnly={module.status === ModuleStatus.Published || module.status === ModuleStatus.Archived}\r\n />\r\n handleFieldChange({ nameFR: event.target.value })}\r\n value={module.nameFR || \"\"}\r\n readOnly={module.status === ModuleStatus.Published || module.status === ModuleStatus.Archived}\r\n />\r\n handleFieldChange({ nameIT: event.target.value })}\r\n value={module.nameIT || \"\"}\r\n readOnly={module.status === ModuleStatus.Published || module.status === ModuleStatus.Archived}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n handleFieldChange({ allowOptions: event.target.checked })}\r\n disabled={module.status === ModuleStatus.Published || module.status === ModuleStatus.Archived}\r\n />\r\n }\r\n label={}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n handleFieldChange({ moduleType: event.target.value as ModuleType })}\r\n error={false}\r\n readOnly={module.status === ModuleStatus.Published || module.status === ModuleStatus.Archived}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n handleFieldChange({ allowDocumentUpload: event.target.checked })}\r\n disabled={module.status === ModuleStatus.Published || module.status === ModuleStatus.Archived}\r\n />\r\n }\r\n label={}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n handleFieldChange({ certificateValidity: event.target.value as ModuleCertificateValidity })\r\n }\r\n error={false}\r\n readOnly={module.status === ModuleStatus.Published || module.status === ModuleStatus.Archived}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n handleFieldChange({ verificationRequired: event.target.checked })}\r\n disabled={module.status === ModuleStatus.Published || module.status === ModuleStatus.Archived}\r\n />\r\n }\r\n label={}\r\n />\r\n \r\n handleFieldChange({ price: value })}\r\n value={module.price}\r\n readOnly={module.status === ModuleStatus.Archived}\r\n />\r\n \r\n handleFieldChange({ allowRegistrationOnlyOnce: event.target.checked })}\r\n disabled={module.status === ModuleStatus.Published || module.status === ModuleStatus.Archived}\r\n />\r\n }\r\n label={}\r\n />\r\n \r\n handleFieldChange({ abacusNumber: event.target.value })}\r\n value={module.abacusNumber || \"\"}\r\n readOnly={module.status === ModuleStatus.Archived}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n handleFieldChange({ gradingRule: event.target.value as ModuleGradingRules })}\r\n readOnly={module.status === ModuleStatus.Published || module.status === ModuleStatus.Archived}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ModuleFormFields;\r\n","import { Chip, Grid, LinearProgress, Typography } from \"@material-ui/core\";\r\nimport { useSnackbar } from \"notistack\";\r\nimport * as React from \"react\";\r\nimport { useIntl } from \"react-intl\";\r\nimport { useHistory, useLocation, useParams } from \"react-router-dom\";\r\nimport { archiveModule, createModule, deleteModule, getModule, publishModule, updateModule } from \"../../api/ModuleApi\";\r\nimport { NewEntityId } from \"../../data/constants\";\r\nimport { ModuleStateTranslationKey, ModuleStatus, ModuleViewModel, RequiredModule } from \"../../model/Module\";\r\nimport { routesPaths } from \"../../Routes\";\r\nimport { GetTranslation } from \"../../translations/GetTranslation\";\r\nimport { navigateBack } from \"../../utils/Navigation\";\r\nimport DefaultButtons from \"../common/buttons/DefaultButtons\";\r\nimport DefaultPublishArchiveButtons from \"../common/buttons/DefaultPublishArchiveButtons\";\r\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\r\nimport { getInitialRequiredFieldsStatuses, initialModule } from \"./ModuleConstants\";\r\nimport ModuleFormExams from \"./ModuleFormExams\";\r\nimport ModuleFormFields from \"./ModuleFormFields\";\r\n\r\nconst ModuleForm = () => {\r\n const { moduleId } = useParams<{ moduleId?: string }>();\r\n const isCreating = moduleId === NewEntityId;\r\n\r\n const [isLoading, setIsLoading] = React.useState(!isCreating);\r\n const [module, setModule] = React.useState(initialModule);\r\n const [requiredFieldStatus, setRequiredFieldStatus] = React.useState(getInitialRequiredFieldsStatuses());\r\n\r\n const history = useHistory();\r\n const location = useLocation();\r\n const { enqueueSnackbar } = useSnackbar();\r\n\r\n const intl = useIntl();\r\n\r\n React.useEffect(() => {\r\n if (!isCreating && moduleId) {\r\n getModule(moduleId).then((result) => {\r\n setModule(result);\r\n setIsLoading(false);\r\n });\r\n }\r\n }, [isCreating, moduleId]);\r\n\r\n if (isLoading) {\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n const handleSave = () => {\r\n if (!validateForm()) {\r\n return;\r\n }\r\n\r\n if (isCreating) {\r\n handleCreate();\r\n } else {\r\n handleUpdate();\r\n }\r\n };\r\n\r\n const handleCreate = () => {\r\n createModule(module).then((response) => {\r\n if (response.success) {\r\n navigateBack(routesPaths.modules(), history, location);\r\n }\r\n });\r\n };\r\n\r\n const handleUpdate = () => {\r\n updateModule(module).then((response) => {\r\n if (response.ok) {\r\n navigateBack(routesPaths.modules(), history, location);\r\n }\r\n });\r\n };\r\n\r\n const handlePublish = () => {\r\n publishModule(module).then((response) => {\r\n if (response.ok) {\r\n navigateBack(routesPaths.modules(), history, location);\r\n enqueueSnackbar();\r\n }\r\n });\r\n };\r\n\r\n const handleDelete = () => {\r\n deleteModule(module.id).then((response) => {\r\n if (response.ok) {\r\n navigateBack(routesPaths.modules(), history, location);\r\n enqueueSnackbar();\r\n }\r\n });\r\n };\r\n\r\n const handleArchive = () => {\r\n archiveModule(module).then((response) => {\r\n if (response.ok) {\r\n navigateBack(routesPaths.modules(), history, location);\r\n enqueueSnackbar();\r\n }\r\n });\r\n };\r\n\r\n const validateForm = () => {\r\n let formHasEmptyFields = false;\r\n\r\n const isFieldEmpty = (value: string | number | undefined) => {\r\n const isEmpty = value === undefined || value === null || value === \"\";\r\n formHasEmptyFields = formHasEmptyFields || isEmpty;\r\n return isEmpty;\r\n };\r\n\r\n const currentStatus: RequiredModule = {\r\n isNameDEEmpty: isFieldEmpty(module.nameDE),\r\n isNameENEmpty: isFieldEmpty(module.nameEN),\r\n isNameFREmpty: isFieldEmpty(module.nameFR),\r\n isNameITEmpty: isFieldEmpty(module.nameIT),\r\n isPriceEmpty: isFieldEmpty(module.price),\r\n isGradingRuleEmpty: isFieldEmpty(module.gradingRule),\r\n };\r\n\r\n setRequiredFieldStatus(currentStatus);\r\n\r\n return !formHasEmptyFields;\r\n };\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n }\r\n onClose={() => history.goBack()}\r\n onDelete={handleDelete}\r\n onSave={handleSave}\r\n isDeleteButtonVisible={module.status === ModuleStatus.Draft && !isCreating}\r\n isSaveButtonVisible={module.status === ModuleStatus.Draft || module.status === ModuleStatus.Published}\r\n />\r\n\r\n \r\n \r\n ) => setModule({ ...module, ...change })}\r\n requiredFieldStatus={requiredFieldStatus}\r\n />\r\n \r\n\r\n \r\n {!isCreating && (\r\n setModule({ ...module, exams: [...module.exams, ...exams] })}\r\n handleRemoveExam={(exam) => setModule({ ...module, exams: module.exams.filter((e) => e.id !== exam.id) })}\r\n isReadOnly={module.status === ModuleStatus.Archived}\r\n />\r\n )}\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default ModuleForm;\r\n","import * as React from \"react\";\nimport { useIntl } from \"react-intl\";\nimport { GetTranslation } from \"../../translations/GetTranslation\";\nimport { ColumnDefinition, CustomGrid } from \"../common/customGrid/CustomGrid\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\nimport { ModuleIndex, ModuleCertificateValidityTranslationKey, ModuleStateTranslationKey, ModuleTypeTranslationKey, GetLocalizedName } from '../../model/Module';\n\n\ntype ModuleGridProps = {\n modules: ModuleIndex[];\n onRowClick: (module: ModuleIndex) => void;\n onAddClick: () => void;\n};\n\nconst ModuleGrid = (props: ModuleGridProps) => {\n const intl = useIntl();\n const { modules, onRowClick, onAddClick } = props;\n\n const columnsDefinitions: ColumnDefinition[] = [\n { \n columnKey: \"moduleName\", \n columnLabel: , \n cellValue: (((_) => GetLocalizedName(_))) \n },\n {\n columnKey: \"moduleType\", columnLabel: ,\n cellValue: (_) => (_.moduleType ? GetTranslation(intl, ModuleTypeTranslationKey[_.moduleType]) : \"\"),\n },\n {\n columnKey: \"certificateValidity\", columnLabel: ,\n cellValue: (_) => (_.certificateValidity ? GetTranslation(intl, ModuleCertificateValidityTranslationKey[_.certificateValidity]) : \"\"),\n },\n {\n columnKey: \"status\",\n columnLabel: ,\n cellValue: (_) => GetTranslation(intl, ModuleStateTranslationKey[_.status]),\n },\n ];\n\n return (\n \n columnDefinitions={columnsDefinitions}\n rows={modules}\n onRowClick={onRowClick}\n rowKey={(_) => _.id}\n addButtonTooltip={}\n onAddClick={onAddClick}\n />\n );\n};\n\nexport default ModuleGrid;","import { LinearProgress, Typography } from \"@material-ui/core\";\nimport * as React from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { getModules } from \"../../api/ModuleApi\";\nimport { NewEntityId } from \"../../data/constants\";\nimport { ModuleIndex } from \"../../model/Module\";\nimport { routesPaths } from \"../../Routes\";\nimport { navigateTo } from \"../../utils/Navigation\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\nimport ModuleGrid from \"./ModuleGrid\";\n\nconst ModuleList = () => {\n const [isLoading, setIsLoading] = React.useState(true);\n const [modules, setModules] = React.useState([]);\n const history = useHistory();\n\n React.useEffect(() => {\n getModules().then((result) => {\n setModules(result);\n setIsLoading(false);\n });\n }, []);\n\n if (isLoading) {\n return ;\n }\n\n return (\n \n \n \n \n navigateTo(routesPaths.module(row.id), history)}\n onAddClick={() => history.push(routesPaths.module(NewEntityId))}\n />\n \n );\n};\n\nexport default ModuleList;\n","import AssignmentTurnedInIcon from \"@material-ui/icons/AssignmentTurnedIn\";\nimport React from \"react\";\nimport CustomButton from \"../../common/buttons/CustomButton\";\nimport TranslatedMessage from \"../../translations/TranslatedMessage\";\n\ntype CompleteTaskButtonProps = {\n onClick: () => void;\n disabled?: boolean;\n};\n\nconst CompleteTaskButton = ({ onClick, disabled }: CompleteTaskButtonProps) => (\n }\n onClick={onClick}\n disabled={disabled}\n >\n \n \n);\n\nexport default CompleteTaskButton;\n","import { Grid } from \"@material-ui/core\";\nimport React from \"react\";\nimport { useAddMyModuleDocumentMutation, useDeleteMyModuleDocumentMutation } from \"../../../api/rtk/MeApi\";\nimport { DocumentReferenceViewModel } from \"../../../model/DocumentReferenceViewModel\";\nimport DocumentList from \"../../common/DocumentList\";\nimport UploadDropZone from \"../../common/UploadDropZone\";\n\ntype DocumentsManagerProps = {\n moduleId: string;\n documents: DocumentReferenceViewModel[];\n readonly?: boolean;\n};\nconst DocumentsManager = ({ moduleId, documents, readonly }: DocumentsManagerProps) => {\n const [addModuleDocument] = useAddMyModuleDocumentMutation();\n const [deleteModuleDocument] = useDeleteMyModuleDocumentMutation();\n\n return (\n \n \n {!readonly && addModuleDocument({ moduleId, file })} />}\n \n \n deleteModuleDocument({ moduleId, fileName: file.name })\n }\n />\n \n \n );\n};\n\nexport default DocumentsManager;\n","import { Grid, makeStyles, Table, TableBody, TableCell, TableRow, Typography } from \"@material-ui/core\";\nimport React from \"react\";\nimport { useIntl } from \"react-intl\";\nimport { ModuleTypeTranslationKey } from \"../../../model/Module\";\nimport { UploadDocumentsTaskDetailsViewModel } from \"../../../model/personTask/UploadDocumentsTaskDetailsViewModel\";\nimport { GetTranslatedValueIntl } from \"../../../model/Shared/TranslatedValue\";\nimport { GetTranslation } from \"../../../translations/GetTranslation\";\nimport TranslatedMessage from \"../../translations/TranslatedMessage\";\n\ntype TaskDetailsProps = {\n taskDetails: UploadDocumentsTaskDetailsViewModel;\n};\n\nconst useStyles = makeStyles({\n table: {\n \"& td\": {\n borderBottom: \"none\",\n },\n \"& td:nth-child(1)\": {\n width: \"150px\",\n },\n },\n});\n\nconst TaskDetails = ({ taskDetails }: TaskDetailsProps) => {\n const intl = useIntl();\n const classes = useStyles();\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n {GetTranslatedValueIntl(intl, taskDetails.moduleName)}\n \n \n \n \n \n \n {GetTranslation(intl, ModuleTypeTranslationKey[taskDetails.moduleType])}\n \n \n \n \n \n \n {GetTranslatedValueIntl(intl, taskDetails.examSessionName)}\n \n \n \n \n \n {GetTranslatedValueIntl(intl, taskDetails.courseName)}\n \n \n
\n
\n
\n );\n};\n\nexport default TaskDetails;\n","import { useMemo } from \"react\";\nimport { useLocation } from \"react-router\";\n\nexport const useQuery = () => {\n const { search } = useLocation();\n const query = useMemo(() => new URLSearchParams(search), [search]);\n return query;\n };","import { createStyles, Grid, LinearProgress, makeStyles, Paper, Typography } from \"@material-ui/core\";\nimport React from \"react\";\nimport { Redirect, useHistory, useParams } from \"react-router-dom\";\nimport {\n useCompleteUploadDocumentsTaskMutation,\n useGetUploadDocumentsTaskDetailsQuery,\n useListMyModuleDocumentsQuery,\n} from \"../../../api/rtk/MeApi\";\nimport { routesPaths } from \"../../../Routes\";\nimport DefaultButtons from \"../../common/buttons/DefaultButtons\";\nimport TranslatedMessage from \"../../translations/TranslatedMessage\";\nimport CompleteTaskButton from \"./CompleteTaskButton\";\nimport DocumentsManager from \"./DocumentsManager\";\nimport TaskDetails from \"./TaskDetails\";\nimport { useQuery } from \"../../../utils/UseQuery\";\n\nconst useStyles = makeStyles((theme) =>\n createStyles({\n section: {\n marginTop: theme.spacing(2),\n padding: theme.spacing(3),\n },\n })\n);\n\n\nconst UploadDocumentsForm = () => {\n const taskId = useQuery().get(\"taskId\");\n const { examSessionId, moduleId } = useParams<{ examSessionId: string; moduleId: string }>();\n const { data: taskDetails, isLoading: isQueryLoading } = useGetUploadDocumentsTaskDetailsQuery(\n { taskId: taskId ?? \"\", examSessionId, moduleId },\n { skip: !taskId || !examSessionId || !moduleId }\n );\n const { data: documents } = useListMyModuleDocumentsQuery({ moduleId }, { skip: !moduleId });\n const [completeTask, { isLoading: isCompletingTask }] = useCompleteUploadDocumentsTaskMutation();\n\n const history = useHistory();\n const classes = useStyles();\n\n if (!taskId || !examSessionId || !moduleId) {\n return ;\n }\n\n const handleCompleteTask = () => {\n completeTask({ taskId, moduleId, examSessionId })\n .unwrap()\n .then(() => history.push(routesPaths.root()));\n };\n const handleClose = () => history.push(routesPaths.root());\n\n const isCompleteDisabled =\n isQueryLoading ||\n !documents?.length ||\n isCompletingTask ||\n taskDetails?.isTaskCompleted ||\n taskDetails?.isTaskPastDeadline;\n\n return (\n \n \n \n \n \n \n \n\n \n }\n onClose={handleClose}\n />\n \n \n\n \n {isQueryLoading || !taskDetails ? (\n \n ) : (\n \n )}\n {isQueryLoading ? (\n \n ) : (\n \n )}\n \n \n );\n};\n\nexport default UploadDocumentsForm;\n","import { Grid, TextField } from \"@material-ui/core\";\nimport React, { FC } from \"react\";\nimport { RoomViewModel } from \"../../model/RoomViewModel\";\nimport CustomSwitch from \"../common/CustomSwitch\";\nimport FormGridCell from \"../common/FormGridCell\";\nimport { useIntl } from \"react-intl\";\nimport { GetTranslation } from \"../../translations/GetTranslation\";\n\ninterface RoomFieldsProps {\n room: RoomViewModel;\n onPropertyValueChanges?: (part: Partial) => void;\n}\n\nconst RoomFields: FC = ({ room, onPropertyValueChanges }) => {\n const intl = useIntl();\n\n const handleTextChange =\n (key: keyof RoomViewModel) => (event: React.ChangeEvent) =>\n handleChange(key, event.target.value);\n\n const handleIdPCRoomChange = (value: boolean) => handleChange(\"isPcRoom\", value);\n\n const handleNumberOfSeatsChange = (event: React.ChangeEvent) =>\n handleChange(\"numberOfSeats\", parseInt(event.target.value));\n\n const handleChange = (key: keyof RoomViewModel, value: unknown) => {\n let partialRoom: Partial = {\n [key]: value,\n };\n onPropertyValueChanges!(partialRoom);\n };\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default RoomFields;\n","import { Grid, LinearProgress } from \"@material-ui/core\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport { MeetingRoom } from \"@material-ui/icons\";\r\nimport React, { FC, useEffect, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router\";\r\nimport {\r\n useCreateRoomMutation,\r\n useDeleteRoomMutation,\r\n useGetLocationQuery,\r\n useUpdateRoomMutation,\r\n} from \"../../api/rtk/LocationApi\";\r\nimport { NewEntityId } from \"../../data/constants\";\r\nimport { RoomViewModel } from \"../../model/RoomViewModel\";\r\nimport { routesPaths } from \"../../Routes\";\r\nimport { navigateBack } from \"../../utils/Navigation\";\r\nimport DefaultButtons from \"../common/buttons/DefaultButtons\";\r\nimport TitleWithIcon from \"../common/TitleWithIcon\";\r\nimport RoomFields from \"./RoomFields\";\r\n\r\nconst initialRoom: RoomViewModel = {\r\n id: NewEntityId,\r\n name: \"\",\r\n floor: \"\",\r\n isPcRoom: true,\r\n numberOfSeats: 1,\r\n};\r\n\r\nconst RoomForm: FC = () => {\r\n const history = useHistory();\r\n const { locationId, roomId } = useParams<{ locationId: string; roomId: string }>();\r\n\r\n const [room, setRoom] = useState(initialRoom);\r\n\r\n const { data: location, isFetching: isLocationFetching } = useGetLocationQuery(locationId);\r\n const [deleteRoom, { isLoading: isDeleteRoomLoading }] = useDeleteRoomMutation();\r\n const [createRoom, { isLoading: isCreateRoomLoading }] = useCreateRoomMutation();\r\n const [updateRoom, { isLoading: isUpdateRoomLoading }] = useUpdateRoomMutation();\r\n const isLoading = isLocationFetching || isDeleteRoomLoading || isCreateRoomLoading || isUpdateRoomLoading;\r\n\r\n useEffect(() => {\r\n if (location !== undefined) {\r\n const room = location.rooms.find((room) => room.id === roomId);\r\n setRoom(room !== undefined ? room : initialRoom);\r\n }\r\n }, [roomId, location]);\r\n\r\n if (isLoading) {\r\n return ;\r\n }\r\n\r\n if (location === undefined) {\r\n return <>;\r\n }\r\n\r\n const close = () => navigateBack(routesPaths.location(locationId), history, history.location);\r\n\r\n const handleChange = (partialRoom: Partial) =>\r\n setRoom((prevRoom) => ({ ...prevRoom, ...partialRoom }));\r\n\r\n const handleClose = () => close();\r\n\r\n const handleSave = async () => {\r\n var requestData = { locationId, data: room };\r\n const response = await (room.id === NewEntityId ? createRoom(requestData) : updateRoom(requestData)).unwrap();\r\n if (response.success) {\r\n close();\r\n }\r\n };\r\n\r\n const handleDelete = async () => {\r\n const response = await deleteRoom({ locationId, roomId }).unwrap();\r\n if (response.success) {\r\n close();\r\n }\r\n };\r\n\r\n const isValid = () => room.name.length > 0 && room.numberOfSeats > 0;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {location.name}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default RoomForm;\r\n","import { Grid } from \"@material-ui/core\";\r\nimport React, { FC } from \"react\";\r\nimport { useIntl } from \"react-intl\";\r\nimport { RoomAssignmentViewModel } from \"../../model/RoomAssignmentViewModel\";\r\nimport { RoomViewModel } from \"../../model/RoomViewModel\";\r\nimport { GetTranslation } from \"../../translations/GetTranslation\";\r\nimport CustomSwitch from \"../common/CustomSwitch\";\r\nimport FormGridCell from \"../common/FormGridCell\";\r\nimport { CustomAutocomplete } from \"../common/customAutocomplete/CustomAutocomplete\";\r\nimport LanguageCheckboxList from \"../common/customCheckBox/LanguageCheckboxList\";\r\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\r\n\r\nexport interface IRoomAssignmentErrors {\r\n room?: boolean;\r\n}\r\n\r\ninterface IRoomAssignmentFieldsProps {\r\n roomAssignment: RoomAssignmentViewModel;\r\n onPropertyValueChanges?: (part: Partial) => void;\r\n rooms: RoomViewModel[];\r\n errors?: IRoomAssignmentErrors;\r\n onSelectedLanguagesChanged?: (checkedItems: string[]) => void;\r\n availableLanguages: string[];\r\n showPreparationRoomSwitch: boolean;\r\n disablePreparationRoomSwitch?: boolean;\r\n}\r\n\r\nexport const RoomAssignmentFields: FC = ({\r\n availableLanguages,\r\n showPreparationRoomSwitch,\r\n disablePreparationRoomSwitch,\r\n roomAssignment,\r\n rooms,\r\n errors,\r\n ...handlers\r\n}) => {\r\n const intl = useIntl();\r\n\r\n const handleChange = (key: keyof RoomAssignmentViewModel, value: string | boolean | undefined) => {\r\n let part: Partial = {\r\n [key]: value,\r\n };\r\n handlers.onPropertyValueChanges!(part);\r\n };\r\n\r\n const selectedRoom = rooms.find((room) => room.id === roomAssignment.roomId) || null;\r\n return (\r\n \r\n \r\n room.name}\r\n value={selectedRoom}\r\n onChange={(_event, value) => handleChange(\"roomId\", value?.id)}\r\n required={true}\r\n error={errors?.room}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n {showPreparationRoomSwitch && (\r\n \r\n }\r\n onChange={(value) => handleChange(\"isPreparationRoom\", value)}\r\n value={roomAssignment.isPreparationRoom}\r\n disabled={disablePreparationRoomSwitch}\r\n />\r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n","import { Grid, LinearProgress } from \"@material-ui/core\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport { MeetingRoom } from \"@material-ui/icons\";\r\nimport React, { FC, useEffect, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router\";\r\nimport { routesPaths } from \"../../Routes\";\r\nimport {\r\n useCreateRoomAssignmentMutation,\r\n useDeleteRoomAssignmentMutation,\r\n useGetExamSessionQuery,\r\n} from \"../../api/rtk/ExamSessionApi\";\r\nimport { NewEntityId } from \"../../data/constants\";\r\nimport { ExamDayType } from \"../../model/ExamDayType\";\r\nimport { RoomAssignmentViewModel } from \"../../model/RoomAssignmentViewModel\";\r\nimport TitleWithIcon from \"../common/TitleWithIcon\";\r\nimport DefaultButtons from \"../common/buttons/DefaultButtons\";\r\nimport LocaleFormatDate from \"../common/dates/LocaleFormatDate\";\r\nimport { IRoomAssignmentErrors, RoomAssignmentFields } from \"./RoomAssignmentFields\";\r\n\r\ninterface RouteParameters {\r\n examSessionId: string;\r\n locationId: string;\r\n examDayId: string;\r\n roomAssignmentId: string;\r\n}\r\n\r\nconst RoomAssignmentForm: FC = () => {\r\n const history = useHistory();\r\n const { examSessionId, locationId, examDayId, roomAssignmentId } = useParams();\r\n const { data: examSession, isFetching: isExamSessionFetching } = useGetExamSessionQuery(examSessionId);\r\n const [addRoomAssignment, { isLoading: isAddRoomAssignmentLoading }] = useCreateRoomAssignmentMutation();\r\n const [deleteRoomAssignment, { isLoading: isDeleteRoomAssignmentLoading }] = useDeleteRoomAssignmentMutation();\r\n const examDay = examSession?.examDays.find((examDay) => examDay.id === examDayId);\r\n const location = examSession?.locations.find((location) => location.id === locationId);\r\n\r\n const [roomAssignment, setRoomAssignment] = useState({\r\n id: NewEntityId,\r\n languages: [],\r\n roomId: \"\",\r\n isPreparationRoom: false,\r\n assignedUsers: [],\r\n examAssignments: [],\r\n });\r\n\r\n const [errors, setErrors] = useState({});\r\n\r\n useEffect(() => {\r\n const initialRoomAssignment = examDay?.roomAssignments.find(\r\n (roomAssignment) => roomAssignment.id === roomAssignmentId\r\n );\r\n if (initialRoomAssignment !== undefined) {\r\n setRoomAssignment(initialRoomAssignment);\r\n }\r\n }, [roomAssignmentId, examDay]);\r\n\r\n if (isExamSessionFetching || isAddRoomAssignmentLoading || isDeleteRoomAssignmentLoading) {\r\n return ;\r\n }\r\n\r\n if (examSession === undefined || examDay === undefined || location === undefined) {\r\n return <>;\r\n }\r\n\r\n const examDayNeedsPreparationRoom = examDay.type === ExamDayType.Oral;\r\n const examDayHasPreparationRoom = !examDay.roomAssignments.every(\r\n (roomAssignment) => !roomAssignment.isPreparationRoom\r\n );\r\n const examDayRoomsIds = examDay.roomAssignments.map((roomAssignment) => roomAssignment.roomId);\r\n const examDayNeedsPcRoom = examDay.type === ExamDayType.Written || examDay.type === ExamDayType.Correction;\r\n const unassignedRooms = location.rooms.filter(\r\n (room) => room.isPcRoom === examDayNeedsPcRoom && !examDayRoomsIds.includes(room.id)\r\n );\r\n\r\n const validate = () => {\r\n if (!roomAssignment.roomId) {\r\n setErrors({\r\n room: true,\r\n });\r\n return false;\r\n }\r\n\r\n return true;\r\n };\r\n\r\n const close = () => history.push(routesPaths.examDay(examSessionId, locationId, examDayId));\r\n\r\n const handleChange = (partialRoomAssignment: Partial) =>\r\n setRoomAssignment((prevRoomAssignment) => ({ ...prevRoomAssignment, ...partialRoomAssignment }));\r\n\r\n const handleClose = () => close();\r\n\r\n const handleSave = async () => {\r\n if (!validate()) {\r\n return;\r\n }\r\n\r\n const response = await addRoomAssignment({ examSessionId, examDayId, data: roomAssignment }).unwrap();\r\n if (response.success) {\r\n close();\r\n }\r\n };\r\n\r\n const handleDelete = async () => {\r\n const response = await deleteRoomAssignment({\r\n examSessionId,\r\n examDayId,\r\n roomAssignmentId: roomAssignment.id,\r\n }).unwrap();\r\n if (response.success) {\r\n close();\r\n }\r\n };\r\n\r\n const handleLanguageSelectChange = (selectedLanguages: string[]) => {\r\n setRoomAssignment((prevRoomAssignment) => ({ ...prevRoomAssignment, languages: [...selectedLanguages] }));\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n {location.name} - \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default RoomAssignmentForm;\r\n","export enum TransactionStatus {\n Initialized = \"Inintialized\",\n Cancelled = \"Cancelled\",\n Paid = \"Paid\",\n Failed = \"Failed\",\n}\n","import { LinearProgress } from \"@material-ui/core\";\r\nimport * as React from \"react\";\r\nimport { useGetMeQuery } from \"../../../api/rtk/MeApi\";\r\nimport { useGetExamSessionsAvailableForSignUpQuery } from \"../../../api/rtk/SignUpApi\";\r\nimport { Language, Switzerland } from \"../../../data/constants\";\r\nimport {\r\n CertificationDataContextModel,\r\n CertificationDataWizardContextModel,\r\n ModuleReference,\r\n} from \"../../../model/CertificationDataContextModel\";\r\nimport { CourseForSignupViewModel } from \"../../../model/ExamSignup/ExamSessionForSignupViewModel\";\r\nimport { initialCandidate } from \"../../candidate/CandidateConstants\";\r\nimport { getCart } from \"../../../api/CartApi\";\r\nimport StartCertificationSteps from \"./StartCertificationSteps\";\r\nimport { useQuery } from \"../../../utils/UseQuery\";\r\nimport { CartViewModel } from \"../../../model/Cart/CartViewModel\";\r\n\r\nconst initialContextData: CertificationDataWizardContextModel = {\r\n data: {} as CertificationDataContextModel,\r\n availableExamSessions: [],\r\n referenceCourses: [],\r\n referenceModules: [],\r\n setValues: () => {},\r\n activeStep: StartCertificationSteps.PersonalDataStep,\r\n handleNextStep: () => {},\r\n handlePrevStep: () => {},\r\n setActiveStep: (step: number) => {},\r\n};\r\n\r\nconst initialFormData: CertificationDataContextModel = {\r\n candidate: initialCandidate,\r\n modulesSelection: [],\r\n};\r\n\r\nconst initialCourses: CourseForSignupViewModel[] = [];\r\nconst initialModules: ModuleReference[] = [];\r\n\r\nconst CertificationDataWizardContext = React.createContext(initialContextData);\r\n\r\nexport const CertificationDataWizardProvider: React.FC = ({ children }) => {\r\n const [data, setData] = React.useState(initialFormData);\r\n const [referenceCourses, setReferenceCourses] = React.useState(initialCourses);\r\n const [referenceModules, setReferenceModules] = React.useState(initialModules);\r\n const [activeStep, setActiveStep] = React.useState(0);\r\n\r\n const { data: fetchedMe, isFetching: isMeFetching } = useGetMeQuery();\r\n const { data: availableExamSessions, isFetching: isAvailableExamSessionsLoading } =\r\n useGetExamSessionsAvailableForSignUpQuery(\r\n fetchedMe === undefined ? Language.DE : fetchedMe.correspondenceLanguage,\r\n { skip: isMeFetching }\r\n );\r\n\r\n const [currentCart, setCurrentCart] = React.useState(null);\r\n\r\n const isLoading = isAvailableExamSessionsLoading || isMeFetching;\r\n\r\n // We need to pass to the form already loaded data, otherwise the form will be initialized with initial empty data.\r\n // This expression checks whether initial values were updated with the loaded ones.\r\n const areInitialValuesUpdated =\r\n referenceCourses !== initialCourses && referenceModules !== initialModules && currentCart !== null;\r\n\r\n const step = useQuery().get(\"step\");\r\n\r\n React.useEffect(() => {\r\n if (fetchedMe !== undefined) {\r\n setData((prev) => ({\r\n ...prev,\r\n candidate: {\r\n ...fetchedMe,\r\n homeCountry: fetchedMe.nationalityIsSwiss ? Switzerland : fetchedMe.placeOfOrigin,\r\n employerCountry: fetchedMe.employerCountry || Switzerland,\r\n preferredContact: fetchedMe.privateIsPreferredContact ? \"private\" : fetchedMe.preferredContact,\r\n },\r\n }));\r\n }\r\n }, [fetchedMe]);\r\n\r\n React.useEffect(() => {\r\n let unmounted = false;\r\n\r\n if (currentCart === null && referenceModules.length > 0 && referenceCourses.length > 0) {\r\n getCart().then((cart) => {\r\n if (!unmounted) {\r\n setCurrentCart(cart);\r\n const availableModules =\r\n cart?.modules!.filter(\r\n (m) =>\r\n referenceModules.find((rm) => rm.id === m.moduleId) &&\r\n referenceCourses.find((rc) => rc.id === m.courseId)\r\n ) ?? [];\r\n if (availableModules.length > 0 && !unmounted) {\r\n setData((prev) => ({ ...prev, modulesSelection: availableModules }));\r\n if (!unmounted && (step === \"confirmation\" || activeStep === StartCertificationSteps.PersonalDataStep)) {\r\n setActiveStep(StartCertificationSteps.PaymentAndCompletionStep);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n return () => {\r\n unmounted = true;\r\n };\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [referenceModules, referenceCourses]);\r\n\r\n React.useEffect(() => {\r\n setData((prev) => ({ ...prev, modulesSelection: [] }));\r\n }, [data.candidate.correspondenceLanguage]);\r\n\r\n React.useEffect(() => {\r\n if (availableExamSessions === undefined) {\r\n return;\r\n }\r\n\r\n const referenceCourses: CourseForSignupViewModel[] = [];\r\n const referenceModules: ModuleReference[] = [];\r\n\r\n availableExamSessions.forEach((examSession) => {\r\n examSession.courses.forEach((course) => {\r\n if (referenceCourses.find((c) => c.id === course.id) === undefined) {\r\n referenceCourses.push(course);\r\n }\r\n course.modules.forEach((module) => {\r\n referenceModules.push({ ...module, examSessionId: examSession.id });\r\n });\r\n });\r\n });\r\n\r\n setReferenceCourses(referenceCourses);\r\n setReferenceModules(referenceModules);\r\n }, [availableExamSessions]);\r\n\r\n const handleNextStep = () => {\r\n setActiveStep((prevActiveStep) => prevActiveStep + 1);\r\n };\r\n\r\n const handlePrevStep = () => {\r\n setActiveStep((prevActiveStep) => prevActiveStep - 1);\r\n };\r\n\r\n const setValues = (values: Partial): void => {\r\n setData(\r\n (prevData) =>\r\n ({\r\n ...prevData,\r\n ...values,\r\n } as CertificationDataContextModel)\r\n );\r\n };\r\n\r\n if (isLoading || !areInitialValuesUpdated) {\r\n return ;\r\n }\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nexport const useSignUpContext = () => React.useContext(CertificationDataWizardContext);\r\n","import { Button, Theme, Typography } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/styles\";\nimport React from \"react\";\nimport { TranslationKey } from \"../../../translations/TranslationKey\";\nimport TranslatedMessage from \"../../translations/TranslatedMessage\";\nimport { useSignUpContext } from \"../CertificationDataWizardContext/CertificationDataWizardContext\";\nimport { useHistory } from \"react-router\";\nimport { routesPaths } from \"../../../Routes\";\n\nconst useStyles = makeStyles((theme: Theme) => ({\n root: {\n width: \"95%\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n padding: theme.spacing(3),\n gap: theme.spacing(2) + \"px\",\n },\n button: {\n marginRight: theme.spacing(1),\n },\n instructions: {\n marginTop: theme.spacing(1),\n marginBottom: theme.spacing(1),\n textAlign: \"center\",\n },\n}));\n\nconst EmailConfirmationSent: React.FunctionComponent = () => {\n const {\n data: { creationErrors },\n } = useSignUpContext();\n const classes = useStyles();\n const history = useHistory();\n\n const id: TranslationKey =\n creationErrors && creationErrors.length > 0 ? \"candidateWizard.error\" : \"candidateWizard.success\";\n\n return (\n
\n \n \n \n
\n \n
\n
\n );\n};\n\nexport default EmailConfirmationSent;\n","import { CircularProgress } from \"@material-ui/core\";\nimport Button from \"@material-ui/core/Button\";\nimport { createStyles, makeStyles, Theme } from \"@material-ui/core/styles\";\nimport * as React from \"react\";\nimport { useIntl } from \"react-intl\";\nimport { GetTranslation } from \"../../../../translations/GetTranslation\";\nimport { useSignUpContext } from \"../../CertificationDataWizardContext/CertificationDataWizardContext\";\nimport { getSteps } from \"../../StartCertificationWizard\";\nimport StartCertificationSteps from \"../../CertificationDataWizardContext/StartCertificationSteps\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n width: \"100%\",\n },\n stepper: {\n padding: \"0 0 40px 0\",\n marginBottom: 20,\n },\n buttonContainer: {\n marginTop: 40,\n display: \"flex\",\n justifyContent: \"center\",\n },\n button: {\n marginRight: theme.spacing(1),\n },\n instructions: {\n marginTop: theme.spacing(1),\n marginBottom: theme.spacing(1),\n },\n })\n);\n\ntype ControlButtonsProps = {\n onNextClick?: () => void;\n onPreviousClick?: () => void;\n backDisabled?: boolean;\n nextDisabled?: boolean;\n isLoading?: boolean;\n};\n\nexport const ControlButtons: React.FC = ({\n onNextClick,\n onPreviousClick,\n backDisabled,\n nextDisabled,\n isLoading,\n}) => {\n const classes = useStyles();\n const { activeStep, handlePrevStep } = useSignUpContext();\n const intl = useIntl();\n const steps = getSteps(intl);\n\n return (\n
\n {isLoading ? (\n \n ) : (\n <>\n \n {GetTranslation(intl, \"startCertification.button.back\")}\n \n \n {activeStep === steps.length - 1\n ? GetTranslation(intl, \"startCertification.button.finish\")\n : GetTranslation(intl, \"startCertification.button.next\")}\n \n \n )}\n
\n );\n};\n","import * as React from 'react';\nimport { useForm, FormProvider, } from \"react-hook-form\";\nimport { yupResolver } from '@hookform/resolvers/yup';\n\ninterface HookForm extends React.DetailedHTMLProps, HTMLFormElement> {\n defaultValues: any,\n schema: any,\n onSubmit: (values: any) => void;\n}\n\nconst Form: React.FC = ({ defaultValues, schema, onSubmit, children, ...props }) => {\n const methods = useForm({\n mode: 'onBlur',\n defaultValues,\n resolver: schema && yupResolver(schema),\n });\n return (\n \n
{children}
\n
\n )\n}\n\nexport default Form;","import FormControl from \"@material-ui/core/FormControl\";\r\nimport FormLabel from \"@material-ui/core/FormLabel\";\r\nimport RadioGroup from \"@material-ui/core/RadioGroup\";\r\nimport TextFiled, { TextFieldProps } from \"@material-ui/core/TextField\";\r\nimport { Moment } from \"moment\";\r\nimport React, { FC } from \"react\";\r\nimport { Controller, useFormContext } from \"react-hook-form\";\r\nimport { CompanySelect } from \"../../../common/customAutocomplete/CompanySelect\";\r\nimport { CountrySelect } from \"../../../common/customAutocomplete/CountrySelect\";\r\nimport { GenderSelect } from \"../../../common/customAutocomplete/GenderSelect\";\r\nimport { IPlaceOfOriginOption, PlaceOfOriginSelect } from \"../../../common/customAutocomplete/PlaceOfOriginSelect\";\r\nimport DatePicker from \"../../../common/datePicker/DatePicker\";\r\n\r\ntype TextField = TextFieldProps & {\r\n name: string;\r\n withErrorMessage?: boolean;\r\n};\r\n\r\ntype DateField = {\r\n name: string;\r\n label: string;\r\n defaultValue?: Date | Moment | null;\r\n disabled?: boolean;\r\n};\r\n\r\ntype RadioField = {\r\n name: string;\r\n label: string;\r\n defaultValue?: string;\r\n required?: boolean;\r\n};\r\n\r\ninterface ISelectFieldProps {\r\n name: string;\r\n defaultValue?: string;\r\n required?: boolean;\r\n label?: string;\r\n disabled?: boolean;\r\n}\r\n\r\nexport const TextInput: FC = ({ name, withErrorMessage, ...props }) => {\r\n const {\r\n register,\r\n formState: { errors },\r\n } = useFormContext();\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport const PlaceOfOriginSelectField: FC = ({ name, defaultValue, required, disabled }) => {\r\n const {\r\n control,\r\n formState: { errors },\r\n } = useFormContext();\r\n return (\r\n (\r\n {\r\n onChange(value?.value);\r\n }}\r\n onBlur={onBlur}\r\n disabled={disabled}\r\n />\r\n )}\r\n />\r\n );\r\n};\r\n\r\nexport const GenderSelectField: FC = ({ name, defaultValue, required, disabled }) => {\r\n const {\r\n control,\r\n formState: { errors },\r\n } = useFormContext();\r\n return (\r\n (\r\n \r\n )}\r\n />\r\n );\r\n};\r\n\r\nexport const CountrySelectField: FC = ({ name, label, defaultValue, required, disabled }) => {\r\n const {\r\n control,\r\n formState: { errors },\r\n } = useFormContext();\r\n return (\r\n (\r\n \r\n )}\r\n />\r\n );\r\n};\r\n\r\nexport const CompanySelectField: FC = ({ name, label, defaultValue, required }) => {\r\n const {\r\n control,\r\n formState: { errors },\r\n } = useFormContext();\r\n return (\r\n (\r\n \r\n )}\r\n />\r\n );\r\n};\r\n\r\nexport const DateInput: FC = ({ name, label, defaultValue, disabled }) => {\r\n const {\r\n control,\r\n formState: { errors },\r\n } = useFormContext();\r\n return (\r\n (\r\n {\r\n return onChange(!!value ? value.format(\"YYYY-MM-DDTHH:mm:ss[Z]\") : value);\r\n }}\r\n value={value}\r\n label={label}\r\n required\r\n error={!!errors[name]}\r\n disabled={disabled}\r\n />\r\n )}\r\n />\r\n );\r\n};\r\n\r\nexport const RadioInput: FC = ({ name, label, defaultValue, required, children }) => {\r\n const { control } = useFormContext();\r\n return (\r\n \r\n {label}\r\n {children}}\r\n />\r\n \r\n );\r\n};\r\n","import { Grid, Typography } from \"@material-ui/core\";\r\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\r\nimport Radio from \"@material-ui/core/Radio\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport * as React from \"react\";\r\nimport { useFormContext } from \"react-hook-form\";\r\nimport { useIntl } from \"react-intl\";\r\nimport { GetTranslation } from \"../../../../translations/GetTranslation\";\r\nimport FormGridCell from \"../../../common/FormGridCell\";\r\nimport { useSignUpContext } from \"../../CertificationDataWizardContext/CertificationDataWizardContext\";\r\nimport { CountrySelectField, RadioInput, TextInput } from \"../shared/Fields\";\r\n\r\nconst useStyles = makeStyles({\r\n address: {\r\n paddingTop: 25,\r\n },\r\n businessData: {\r\n paddingTop: 10,\r\n },\r\n});\r\n\r\nconst CandidateAddressFields = () => {\r\n const intl = useIntl();\r\n const {\r\n data: { candidate },\r\n } = useSignUpContext();\r\n const { watch, setValue } = useFormContext();\r\n\r\n const preferredContact = watch(\"preferredContact\");\r\n\r\n const classes = useStyles();\r\n\r\n React.useEffect(() => {\r\n setValue(\"privateIsPreferredContact\", preferredContact === \"private\");\r\n }, [preferredContact, setValue]);\r\n\r\n return (\r\n <>\r\n \r\n {GetTranslation(intl, \"person.section.address\")}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n } label={GetTranslation(intl, \"common.language.de\")} />\r\n } label={GetTranslation(intl, \"common.language.fr\")} />\r\n } label={GetTranslation(intl, \"common.language.it\")} />\r\n \r\n \r\n \r\n \r\n } label={GetTranslation(intl, \"common.private\")} />\r\n } label={GetTranslation(intl, \"common.business\")} />\r\n \r\n \r\n \r\n {preferredContact === \"business\" && (\r\n <>\r\n {GetTranslation(intl, \"person.section.businessData\")}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default CandidateAddressFields;\r\n","import { Grid, Typography } from \"@material-ui/core\";\r\nimport TextField from \"@material-ui/core/TextField\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport * as React from \"react\";\r\nimport { FC, useEffect } from \"react\";\r\nimport { useFormContext } from \"react-hook-form\";\r\nimport { useIntl } from \"react-intl\";\r\nimport { Switzerland } from \"../../../../data/constants\";\r\nimport Places from \"../../../../data/placeOfOrigin.json\";\r\nimport { GetTranslation } from \"../../../../translations/GetTranslation\";\r\nimport { TranslationKey, isTranslationKey } from \"../../../../translations/TranslationKey\";\r\nimport FormGridCell from \"../../../common/FormGridCell\";\r\nimport { useSignUpContext } from \"../../CertificationDataWizardContext/CertificationDataWizardContext\";\r\nimport {\r\n CompanySelectField,\r\n CountrySelectField,\r\n DateInput,\r\n GenderSelectField,\r\n PlaceOfOriginSelectField,\r\n TextInput,\r\n} from \"../shared/Fields\";\r\nimport { getValidDate } from \"../../../../utils/Dates\";\r\n\r\nconst useStyles = makeStyles({\r\n businessData: {\r\n paddingTop: 25,\r\n },\r\n});\r\n\r\nconst CandidateFields: FC = () => {\r\n const intl = useIntl();\r\n const {\r\n data: { candidate },\r\n } = useSignUpContext();\r\n const { watch, setValue } = useFormContext();\r\n\r\n const homeCountry = watch(\"homeCountry\");\r\n const placeOfOrigin = watch(\"placeOfOrigin\");\r\n const canton = watch(\"canton\");\r\n\r\n const classes = useStyles();\r\n\r\n useEffect(() => {\r\n setValue(\"nationalityIsSwiss\", homeCountry === Switzerland);\r\n }, [homeCountry, setValue]);\r\n\r\n useEffect(() => {\r\n const cantonObj = Places.find((place) => place.value === placeOfOrigin);\r\n setValue(\"canton\", cantonObj?.canton || \"\");\r\n }, [placeOfOrigin, setValue]);\r\n\r\n const getCantonDisplayValue = () => {\r\n if (!canton) {\r\n return \"\";\r\n }\r\n const key = `canton.${canton.toLowerCase()}`;\r\n if (isTranslationKey(key)) {\r\n return GetTranslation(intl, key as TranslationKey);\r\n }\r\n return canton;\r\n };\r\n\r\n return (\r\n <>\r\n {GetTranslation(intl, \"person.section.personalDetails\")}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {homeCountry === Switzerland && (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n {GetTranslation(intl, \"person.section.businessData\")}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default CandidateFields;\r\n","import { IntlShape } from \"react-intl\";\nimport * as yup from \"yup\";\nimport { GetTranslation } from \"../../../../translations/GetTranslation\";\n\nexport const getSchema = (intl: IntlShape) =>\n yup\n .object()\n .shape({\n firstName: yup.string().required(),\n lastName: yup.string().required(),\n gender: yup.string().required(),\n birthdate: yup.date().required(),\n ahvNumber: yup\n .string()\n .matches(/^(\\d{3}).(\\d{4}).(\\d{4}).(\\d{2})$/, GetTranslation(intl, \"person.validation.ahvNumberNotValid\"))\n .required(),\n emailAddress: yup.string().email().required(),\n phoneNumber: yup.string().matches(/([+]{1})(\\d|\\s)+$/, { excludeEmptyString: true }),\n mobileNumber: yup.string().matches(/([+]{1})(\\d|\\s)+$/, { excludeEmptyString: true }),\n ciceroNumber: yup.string().matches(/^\\d{5,}$/, { excludeEmptyString: true }),\n homeCountry: yup.string().required(),\n placeOfOrigin: yup.string().when(\"nationalityIsSwiss\", {\n is: true,\n then: yup.string().required(),\n }),\n employerInformation: yup.string().required(),\n street: yup.string().required(),\n streetNumber: yup.string().required(),\n zipCode: yup.string().required().when(\"country\",\n {\n is: \"Deutschland\" || \"Frankreich\" || \"Italien\",\n then: yup.string().matches(/^(\\d){5}$/),\n }\n ).when(\"country\",\n {\n is: \"Schweiz\" || \"Österreich\" || \"Liechtenstein\",\n then: yup.string().matches(/^(\\d){4}$/),\n }\n ),\n city: yup.string().required(),\n country: yup.string().required(),\n correspondenceLanguage: yup.string().required(),\n employer: yup.string().when(\"preferredContact\", {\n is: \"business\",\n then: yup.string().required(),\n }),\n employerStreet: yup.string().when(\"preferredContact\", {\n is: \"business\",\n then: yup.string().required(),\n }),\n employerStreetNumber: yup.string().when(\"preferredContact\", {\n is: \"business\",\n then: yup.string().required(),\n }),\n employerZipCode: yup.string().when(\"preferredContact\", {\n is: \"business\",\n then: yup.string().required().when(\"employerCountry\",\n {\n is: \"Deutschland\" || \"Frankreich\" || \"Italien\",\n then: yup.string().matches(/^(\\d){5}$/),\n }\n ).when(\"country\",\n {\n is: \"Schweiz\" || \"Österreich\" || \"Liechtenstein\",\n then: yup.string().matches(/^(\\d){4}$/),\n }\n ),\n }),\n employerCity: yup.string().when(\"preferredContact\", {\n is: \"business\",\n then: yup.string().required(),\n }),\n employerCountry: yup.string().when(\"preferredContact\", {\n is: \"business\",\n then: yup.string().required(),\n }),\n })\n .defined();\n","import {\n Button,\n Checkbox,\n Dialog,\n DialogActions,\n DialogContent,\n FormControlLabel,\n Grid,\n Typography,\n} from \"@material-ui/core\";\nimport React, { FC, useState } from \"react\";\nimport { useIntl } from \"react-intl\";\nimport { GetTranslation } from \"../../../../translations/GetTranslation\";\nimport TranslatedMessage from \"../../../translations/TranslatedMessage\";\n\ntype PrivacyPolicyDialogProps = {\n show: boolean;\n handleAccept: () => void;\n handleCancel: () => void;\n};\n\nconst PrivacyPolicyDialog: FC = ({ show, handleAccept, handleCancel }) => {\n const [acceptChecked, setAcceptChecked] = useState(false);\n const [highlighCheckbox, setHighlightCheckbox] = useState(false);\n const intl = useIntl();\n\n const onAcceptClick = () => {\n if (acceptChecked) {\n handleAccept();\n } else {\n setHighlightCheckbox(true);\n }\n };\n\n const onCancelClick = () => {\n handleCancel();\n setAcceptChecked(false);\n setHighlightCheckbox(false);\n };\n\n const onCheckChange = (event: React.ChangeEvent) => {\n setAcceptChecked(event.target.checked);\n if (event.target.checked) {\n setHighlightCheckbox(false);\n }\n };\n\n return (\n \n \n \n \n \n (\n \n www.cicero.ch\n \n ).\n \n \n \n \n \n \n }\n label={\n \n \n \n \n \n .\n \n }\n />\n \n \n \n \n \n \n \n \n );\n};\n\nexport default PrivacyPolicyDialog;\n","import { Container, Grid } from \"@material-ui/core\";\nimport * as React from \"react\";\nimport { useIntl } from \"react-intl\";\nimport { useUpdateMeMutation } from \"../../../../api/rtk/MeApi\";\nimport { CandidateViewModel } from \"../../../../model/CandidateViewModel\";\nimport CustomDraggableDialog from \"../../../common/customDialog/CustomDraggableDialog\";\nimport TranslatedMessage from \"../../../translations/TranslatedMessage\";\nimport { useSignUpContext } from \"../../CertificationDataWizardContext/CertificationDataWizardContext\";\nimport { ControlButtons } from \"../shared/ControlButtons\";\nimport Form from \"../shared/Form\";\nimport CandidateAddressFields from \"./CandidateAddressFields\";\nimport CandidateFields from \"./CandidateFields\";\nimport { getSchema } from \"./PersonalDataStepSchema\";\nimport PrivacyPolicyDialog from \"./PrivacyPolicyDialog\";\n\nconst PersonalDataStep: React.FC = () => {\n const intl = useIntl();\n const [ updateMe, { isLoading: isUpdatingMe }] = useUpdateMeMutation();\n const { data, setValues, handleNextStep } = useSignUpContext();\n const [showPrivacyDialog, setShowPrivacyDialog] = React.useState(false);\n const [showConfirmationDialog, setShowConfirmationDialog] = React.useState(false);\n const [validatedData, setValidatedData] = React.useState(undefined);\n\n const onSubmit = async (data: CandidateViewModel): Promise => {\n setValidatedData(data);\n if (!data.disablePersonalFields) {\n setShowConfirmationDialog(true);\n return;\n }\n setShowPrivacyDialog(true);\n };\n\n const handleAcceptPrivacyPolicy = async () => {\n if (validatedData && !isUpdatingMe) {\n setValues({ candidate: validatedData });\n var response = await updateMe({\n ...validatedData,\n placeOfOrigin: !validatedData.nationalityIsSwiss ? validatedData.homeCountry : validatedData.placeOfOrigin,\n disablePersonalFields: true,\n }).unwrap();\n if (response.success) {\n handleNextStep();\n }\n }\n };\n\n const handleCancelPrivacyPolicy = () => {\n setShowPrivacyDialog(false);\n setShowConfirmationDialog(false);\n };\n\n return (\n <>\n
\n \n \n \n \n \n \n \n \n }\n cancelText={}\n content={}\n isOpen={showConfirmationDialog}\n onAccept={() => setShowPrivacyDialog(true)}\n onCancel={() => setShowConfirmationDialog(false)}\n title={}\n />\n \n \n );\n};\n\nexport default PersonalDataStep;\n","import { makeStyles } from \"@material-ui/styles\";\nimport React from \"react\";\nimport { useIntl } from \"react-intl\";\nimport { ExamTypeTranslationKey } from \"../../../../model/Exam\";\nimport { ModuleExamForSignupViewModel } from \"../../../../model/ExamSignup/ExamSessionForSignupViewModel\";\nimport { GetTranslatedValueIntl } from \"../../../../model/Shared/TranslatedValue\";\nimport { GetTranslation } from \"../../../../translations/GetTranslation\";\n\ntype ModuleExamListProps = {\n exams: ModuleExamForSignupViewModel[];\n};\n\nconst useStyles = makeStyles({\n list: {\n paddingInlineStart: 0,\n marginBlockStart: 0,\n marginBlockEnd: 0,\n },\n});\n\nconst ModuleExamList: React.FunctionComponent = ({ exams }) => {\n const intl = useIntl();\n const classes = useStyles();\n\n return (\n
    \n {exams.map((exam) => (\n
  • \n {GetTranslatedValueIntl(intl, exam.name) +\n \" - \" +\n GetTranslation(intl, ExamTypeTranslationKey[exam.type])}\n
  • \n ))}\n
\n );\n};\n\nexport default ModuleExamList;\n","import { Button, makeStyles, TableCell, TableRow } from \"@material-ui/core\";\nimport React from \"react\";\nimport { useIntl } from \"react-intl\";\nimport { SwissGermanLocale } from \"../../../../data/constants\";\nimport { ModuleForSignupViewModel } from \"../../../../model/ExamSignup/ExamSessionForSignupViewModel\";\nimport {\n ModuleSelectionExamDetails,\n ModuleSelectionViewModel,\n} from \"../../../../model/ExamSignup/ModuleSelectionViewModel\";\nimport { GetTranslatedValueIntl, TranslatedValue } from \"../../../../model/Shared/TranslatedValue\";\nimport TranslatedMessage from \"../../../translations/TranslatedMessage\";\nimport ModuleExamList from \"./ModuleExamList\";\n\nexport type ModuleSelectorRowProps = {\n examSessionId: string;\n examSessionKey: TranslatedValue;\n courseId: string;\n courseName: TranslatedValue;\n module: ModuleForSignupViewModel;\n rowButtonAction: (module: ModuleSelectionViewModel) => void;\n};\n\nconst useStyles = makeStyles({\n button: { textTransform: \"none\", whiteSpace: \"nowrap\" },\n});\n\nexport const ModuleSelectorRow: React.FunctionComponent = ({\n examSessionId,\n courseId,\n module,\n rowButtonAction,\n}) => {\n const intl = useIntl();\n const classes = useStyles();\n\n return (\n \n \n {GetTranslatedValueIntl(intl, module.name)}\n \n \n \n \n {module.price.toLocaleString(SwissGermanLocale, { minimumFractionDigits: 2 })}\n \n \n {\n // Initialize exam details is necessary for exams of type Term Paper, as no selection is required for them.\n const examDetails = module.exams.map(\n (e) => ({ examId: e.id, examType: e.type } as ModuleSelectionExamDetails)\n );\n rowButtonAction({\n courseId,\n examSessionId,\n moduleId: module.id,\n examDetails,\n price: module.price,\n });\n }}\n variant=\"contained\"\n color=\"primary\"\n className={classes.button}\n >\n \n \n \n \n \n );\n};\n","import {\n FormControl,\n Grid,\n InputLabel,\n MenuItem,\n Paper,\n Select,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n Typography,\n} from \"@material-ui/core\";\nimport React, { useState } from \"react\";\nimport { ModuleReference } from \"../../../../model/CertificationDataContextModel\";\nimport {\n CourseForSignupViewModel,\n ExamSessionForSignupViewModel,\n} from \"../../../../model/ExamSignup/ExamSessionForSignupViewModel\";\nimport { ModuleSelectionViewModel } from \"../../../../model/ExamSignup/ModuleSelectionViewModel\";\nimport { GetTranslatedValue } from \"../../../../model/Shared/TranslatedValue\";\nimport TranslatedMessage from \"../../../translations/TranslatedMessage\";\nimport { ModuleSelectorRow, ModuleSelectorRowProps } from \"./ModuleSelectorRow\";\n\ntype ModuleSelectorProps = {\n allAvailableCourses: CourseForSignupViewModel[];\n availableExamSessions: ExamSessionForSignupViewModel[];\n selection: ModuleSelectionViewModel[];\n referenceModules: ModuleReference[];\n onModuleSelected: (module: ModuleSelectionViewModel) => void;\n};\n\nconst ModuleSelector: React.FunctionComponent = ({\n allAvailableCourses,\n availableExamSessions,\n selection,\n referenceModules,\n onModuleSelected,\n}) => {\n const [selectedCourseId, setSelectedCourseId] = useState(\"\");\n const [selectedExamSessionId, setSelectedExamSessionId] = useState(\"\");\n\n const handleCourseChange = (event: React.ChangeEvent<{ value: unknown }>) => {\n setSelectedCourseId(event.target.value as string);\n setSelectedExamSessionId(\"\");\n };\n\n const handleExamSessionChange = (event: React.ChangeEvent<{ value: unknown }>) => {\n setSelectedExamSessionId(event.target.value as string);\n };\n\n const filteredExamSessions = availableExamSessions.filter(\n (s) => s.courses.find((c) => c.id === selectedCourseId) !== undefined\n );\n\n const createFilteredModuleRow = () => {\n // just take everything\n const rows = availableExamSessions.reduce((modules, examSession) => {\n examSession.courses.forEach((course) => {\n course.modules.forEach((module) => {\n modules.push({\n examSessionId: examSession.id,\n examSessionKey: examSession.sessionKey,\n courseId: course.id,\n courseName: course.name,\n module,\n rowButtonAction: onModuleSelected,\n });\n });\n });\n return modules;\n }, [] as ModuleSelectorRowProps[]);\n\n // then filter on current selection\n const currentExamsSelection = getSelectionExamSessionExams();\n return rows.filter(\n (row) =>\n isAllowedWithFilters(row) &&\n isNotAlreadySelected(row) &&\n hasNoExamSessionModuleOverlap(row) &&\n hasNoExamSessionExamOverlap(row, currentExamsSelection)\n );\n };\n\n const getSelectionExamSessionExams = () =>\n selection.reduce((exams, current) => {\n const refModule = referenceModules.find(\n (m) => m.examSessionId === current.examSessionId && m.courseId === current.courseId && m.id === current.moduleId\n );\n if (refModule) {\n exams = exams.concat(refModule.exams.map((e) => ({ examSessionId: current.examSessionId, examId: e.id })));\n }\n return exams;\n }, [] as { examSessionId: string; examId: string }[]);\n\n const isAllowedWithFilters = (row: ModuleSelectorRowProps) =>\n selectedExamSessionId !== \"\" && row.courseId === selectedCourseId && row.examSessionId === selectedExamSessionId;\n\n const isNotAlreadySelected = (row: ModuleSelectorRowProps) =>\n selection.find(\n (s) => s.courseId === row.courseId && s.examSessionId === row.examSessionId && s.moduleId === row.module.id\n ) === undefined;\n\n const hasNoExamSessionModuleOverlap = (row: ModuleSelectorRowProps) =>\n selection.find((s) => s.examSessionId === row.examSessionId && s.moduleId === row.module.id) === undefined;\n\n const hasNoExamSessionExamOverlap = (\n row: ModuleSelectorRowProps,\n currentExamSelection: { examSessionId: string; examId: string }[]\n ) => {\n const hasOverlapingExams = row.module.exams.some((e) =>\n currentExamSelection.some((s) => s.examId === e.id && s.examSessionId === row.examSessionId)\n );\n return !hasOverlapingExams;\n };\n\n const moduleRowProps = createFilteredModuleRow();\n\n return (\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {moduleRowProps.length ? (\n moduleRowProps.map((rowProps, index) => )\n ) : (\n \n \n \n \n \n )}\n \n
\n
\n
\n
\n );\n};\n\nexport default ModuleSelector;\n","import { Box, Button, Collapse, IconButton, TableCell, TableRow } from \"@material-ui/core\";\nimport KeyboardArrowDownIcon from \"@material-ui/icons/KeyboardArrowDown\";\nimport KeyboardArrowUpIcon from \"@material-ui/icons/KeyboardArrowUp\";\nimport { makeStyles } from \"@material-ui/styles\";\nimport React from \"react\";\nimport { useIntl } from \"react-intl\";\nimport { SwissGermanLocale } from \"../../../../data/constants\";\nimport { ModuleForSignupViewModel } from \"../../../../model/ExamSignup/ExamSessionForSignupViewModel\";\nimport { ModuleSelectionViewModel } from \"../../../../model/ExamSignup/ModuleSelectionViewModel\";\nimport { GetTranslatedValueIntl, TranslatedValue } from \"../../../../model/Shared/TranslatedValue\";\nimport TranslatedMessage from \"../../../translations/TranslatedMessage\";\nimport ModuleExamList from \"./ModuleExamList\";\n\nexport type UserSelectionRowProps = {\n examSessionId: string;\n examSessionKey: TranslatedValue;\n courseId: string;\n courseName: TranslatedValue;\n module: ModuleForSignupViewModel;\n rowButtonAction: (module: ModuleSelectionViewModel) => void;\n disabled: boolean;\n};\n\nconst useStyles = makeStyles({\n button: { textTransform: \"none\", whiteSpace: \"nowrap\" },\n noPadding: { paddingBottom: 0, paddingTop: 0 },\n});\n\nexport const UserSelectionRow: React.FunctionComponent = ({\n examSessionId,\n examSessionKey,\n courseId,\n courseName,\n module,\n rowButtonAction,\n disabled,\n}) => {\n const [open, setOpen] = React.useState(false);\n const intl = useIntl();\n\n const classes = useStyles();\n\n return (\n \n \n \n setOpen(!open)} color=\"primary\">\n {open ? : }\n \n \n {GetTranslatedValueIntl(intl, module.name)}\n {GetTranslatedValueIntl(intl, courseName)}\n {GetTranslatedValueIntl(intl, examSessionKey)}\n \n {module.price.toLocaleString(SwissGermanLocale, { minimumFractionDigits: 2 })}\n \n \n {\n rowButtonAction({\n courseId,\n examSessionId,\n moduleId: module.id,\n price: module.price,\n });\n }}\n className={classes.button}\n disabled={disabled}\n >\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n","import {\n Grid,\n Paper,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n Typography,\n} from \"@material-ui/core\";\nimport React from \"react\";\nimport { SwissGermanLocale } from \"../../../../data/constants\";\nimport { ModuleSelectionViewModel } from \"../../../../model/ExamSignup/ModuleSelectionViewModel\";\nimport TranslatedMessage from \"../../../translations/TranslatedMessage\";\nimport { useSignUpContext } from \"../../CertificationDataWizardContext/CertificationDataWizardContext\";\nimport { UserSelectionRow } from \"./UserSelectionRow\";\n\ntype UserModuleSelectionProps = {\n modulesSelection: ModuleSelectionViewModel[];\n onModuleRemoved: (selection: ModuleSelectionViewModel) => void;\n};\n\nconst UserModuleSelection: React.FunctionComponent = ({\n modulesSelection,\n onModuleRemoved,\n}) => {\n const data = useSignUpContext();\n\n let totalPrice = 0;\n\n const mappedRows = modulesSelection\n .map((selection, index) => {\n const examSession = data.availableExamSessions.find((e) => e.id === selection.examSessionId);\n const course = examSession?.courses.find((c) => c.id === selection.courseId);\n const module = course?.modules.find((m) => m.id === selection.moduleId);\n\n if (!(examSession && course && module)) {\n return null;\n }\n\n totalPrice += module.price;\n\n return (\n \n );\n })\n .filter((row) => row !== null);\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {mappedRows.length ? (\n \n {mappedRows}\n \n \n \n :\n \n \n {totalPrice.toLocaleString(SwissGermanLocale, { minimumFractionDigits: 2 })}\n \n \n \n \n ) : (\n \n \n \n \n \n )}\n \n
\n
\n
\n
\n );\n};\n\nexport default UserModuleSelection;\n","import { Container, Grid } from \"@material-ui/core\";\nimport React from \"react\";\nimport { CourseForSignupViewModel } from \"../../../../model/ExamSignup/ExamSessionForSignupViewModel\";\nimport { ModuleSelectionViewModel } from \"../../../../model/ExamSignup/ModuleSelectionViewModel\";\nimport { useSignUpContext } from \"../../CertificationDataWizardContext/CertificationDataWizardContext\";\nimport { ControlButtons } from \"../shared/ControlButtons\";\nimport ModuleSelector from \"./ModuleSelector\";\nimport UserModuleSelection from \"./UserSelection\";\nimport { setCart } from \"../../../../api/CartApi\";\n\nconst ModuleSelectionStep: React.FunctionComponent = () => {\n const {\n setValues,\n handleNextStep,\n availableExamSessions,\n referenceModules,\n data: { modulesSelection: initialModulesSelection },\n } = useSignUpContext();\n const [modulesSelection, setModuleSelection] = React.useState(initialModulesSelection);\n const [isCartSubmitting, setIsCartSubmitting] = React.useState(false);\n const { data } = useSignUpContext();\n\n const onSubmit = async (): Promise => {\n if (modulesSelection.length) {\n setValues({ modulesSelection });\n handleNextStep();\n }\n };\n\n const allAvailableCourses = availableExamSessions.reduce((courses, currentExamSession) => {\n currentExamSession.courses.forEach((course) => {\n if (courses.find((c) => c.id === course.id) === undefined) {\n courses.push(course);\n }\n });\n return courses;\n }, [] as CourseForSignupViewModel[]);\n\n const handleModuleSelected = (selection: ModuleSelectionViewModel) => {\n if (\n modulesSelection.find(\n (m) =>\n m.courseId === selection.courseId &&\n m.examSessionId === selection.examSessionId &&\n m.moduleId === selection.moduleId\n ) === undefined\n ) {\n setModuleSelection([...modulesSelection, selection]);\n }\n };\n\n const handleModuleRemoved = (selection: ModuleSelectionViewModel) => {\n const modules = modulesSelection.filter(\n (m) =>\n m.courseId !== selection.courseId ||\n m.examSessionId !== selection.examSessionId ||\n m.moduleId !== selection.moduleId\n );\n setModuleSelection(modules);\n setIsCartSubmitting(true);\n setCart({ candidateId: data.candidate.id, modules: modules })\n .then(() => {})\n .finally(() => {\n setIsCartSubmitting(false);\n });\n };\n\n const hasPaidModules = modulesSelection.find((m) => m.paid) !== undefined;\n\n return (\n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default ModuleSelectionStep;\n","import { TableCell, Typography } from \"@material-ui/core\";\nimport React from \"react\";\nimport TranslatedMessage from \"../../../../translations/TranslatedMessage\";\n\nconst ExamFullSelectionCells = () => {\n return (\n \n \n \n \n \n );\n};\n\nexport default ExamFullSelectionCells;\n","import { makeStyles, MenuItem, TableCell, TextField } from \"@material-ui/core\";\nimport React from \"react\";\nimport { SwissGermanLocale, SwissTimeZone } from \"../../../../../data/constants\";\nimport { ExamLocationViewModel } from \"../../../../../model/ExamSignup/ModuleExamDetailsViewModel\";\n\nconst useStyles = makeStyles({\n locationCell: {\n width: \"300px\",\n },\n dayCell: {\n width: \"200px\",\n },\n});\n\ntype NormalSelectionTableCellsProps = {\n selectedLocationId?: string;\n selectedExamDayId?: string;\n onLocationChange: (locationId: string) => void;\n onDayChange: (examDayId: string) => void;\n availableLocations: ExamLocationViewModel[];\n disabled: boolean;\n};\n\nconst NormalSelectionCells = ({\n selectedLocationId,\n selectedExamDayId,\n onLocationChange,\n onDayChange,\n availableLocations,\n disabled,\n}: NormalSelectionTableCellsProps) => {\n const classes = useStyles();\n\n const locationOptions = availableLocations.map((location) => (\n \n {location.name}\n \n ));\n\n const selectedLocationDetails = availableLocations.find((l) => l.locationId === selectedLocationId);\n\n const examDayOptions = selectedLocationDetails?.examDays\n ? selectedLocationDetails?.examDays.map((examDay) => (\n \n {new Date(examDay.date).toLocaleDateString(SwissGermanLocale, { timeZone: SwissTimeZone })}\n \n ))\n : [];\n\n return (\n \n \n onLocationChange(event.target.value as string)}\n fullWidth\n disabled={disabled}\n >\n {locationOptions}\n
\n \n \n onDayChange(event.target.value as string)}\n disabled={!selectedLocationId || disabled}\n fullWidth\n >\n {examDayOptions}\n \n \n \n );\n};\n\nexport default NormalSelectionCells;\n","import { makeStyles, TableCell } from \"@material-ui/core\";\nimport React from \"react\";\n\nconst useStyles = makeStyles({\n locationCell: {\n width: \"300px\",\n },\n dayCell: {\n width: \"200px\",\n },\n});\n\nconst TermPaperSelectionCells = () => {\n const classes = useStyles();\n return (\n \n \n -\n \n \n -\n \n \n );\n};\n\nexport default TermPaperSelectionCells;\n","import { TableCell, TableRow } from \"@material-ui/core\";\nimport CheckCircleOutlineIcon from \"@material-ui/icons/CheckCircleOutline\";\nimport ErrorOutlineIcon from \"@material-ui/icons/ErrorOutline\";\nimport React from \"react\";\nimport { useIntl } from \"react-intl\";\nimport { ExamTypeTranslationKey } from \"../../../../model/Exam\";\nimport { ModuleExamForSignupViewModel } from \"../../../../model/ExamSignup/ExamSessionForSignupViewModel\";\nimport { ModuleExamDetailsViewModel } from \"../../../../model/ExamSignup/ModuleExamDetailsViewModel\";\nimport { ModuleSelectionExamDetails } from \"../../../../model/ExamSignup/ModuleSelectionViewModel\";\nimport { GetTranslatedValueIntl } from \"../../../../model/Shared/TranslatedValue\";\nimport { GetTranslation } from \"../../../../translations/GetTranslation\";\nimport ExamFullSelectionCells from \"./SelectionCells/ExamFullSelectionCells\";\nimport NormalSelectionCells from \"./SelectionCells/NormalSelectionCells\";\nimport TermPaperSelectionCells from \"./SelectionCells/TermPaperSelectionCells\";\n\ntype ExamLocationAndDateStepRowExamProps = {\n referenceExam: ModuleExamForSignupViewModel;\n selectedLocationId?: string;\n selectedExamDayId?: string;\n examPossibleDetails?: ModuleExamDetailsViewModel;\n updateExamDetails: (examDetails: ModuleSelectionExamDetails) => void;\n disabled: boolean;\n};\n\nconst ExamLocationAndDateStepRowExam = ({\n referenceExam,\n selectedLocationId,\n selectedExamDayId,\n examPossibleDetails,\n updateExamDetails,\n disabled,\n}: ExamLocationAndDateStepRowExamProps) => {\n const [locationId, setLocationId] = React.useState(selectedLocationId);\n const intl = useIntl();\n\n const selectedLocationDetails = examPossibleDetails?.availableLocations.find((l) => l.locationId === locationId);\n\n const onDayChange = (examDayId: string) => {\n if (locationId && examDayId) {\n updateExamDetails({\n examId: referenceExam.id,\n locationId,\n examDayId,\n locationName: selectedLocationDetails?.name,\n examDayDate: selectedLocationDetails?.examDays.find((d) => d.examDayId === examDayId)?.date,\n examType: referenceExam.type,\n });\n }\n };\n\n const onLocationChange = (newLocationId: string) => {\n setLocationId(newLocationId);\n };\n\n const isLoading = !examPossibleDetails;\n const isTermPaper = examPossibleDetails && examPossibleDetails.noLocationRequired;\n const isExamFull = examPossibleDetails && !isTermPaper && examPossibleDetails.availableLocations.length === 0;\n const isOk = !isLoading && !isTermPaper && !isExamFull;\n\n return (\n \n \n {GetTranslatedValueIntl(intl, referenceExam.name)}\n {GetTranslation(intl, ExamTypeTranslationKey[referenceExam.type])}\n {isLoading && }\n {isTermPaper && }\n {isExamFull && }\n {isOk && (\n \n )}\n \n {!examPossibleDetails?.noLocationRequired && (!selectedLocationId || !selectedExamDayId) ? (\n \n ) : (\n \n )}\n \n \n );\n};\n\nexport default ExamLocationAndDateStepRowExam;\n","import { TableCell, TableRow } from \"@material-ui/core\";\nimport React from \"react\";\nimport { useIntl } from \"react-intl\";\nimport { ModuleExamDetailsViewModel } from \"../../../../model/ExamSignup/ModuleExamDetailsViewModel\";\nimport {\n ModuleSelectionExamDetails,\n ModuleSelectionViewModel,\n} from \"../../../../model/ExamSignup/ModuleSelectionViewModel\";\nimport { GetTranslatedValueIntl } from \"../../../../model/Shared/TranslatedValue\";\nimport { useSignUpContext } from \"../../CertificationDataWizardContext/CertificationDataWizardContext\";\nimport ExamLocationAndDateStepRowExam from \"./ExamLocationAndDateStepRowExam\";\n\ntype ExamLocationAndDateStepRowProps = {\n module: ModuleSelectionViewModel;\n updateModuleSelection: (selection: ModuleSelectionViewModel) => void;\n allExamPossibleDetails: ModuleExamDetailsViewModel[];\n};\n\nconst ExamLocationAndDateStepRow: React.FunctionComponent = ({\n module,\n updateModuleSelection,\n allExamPossibleDetails,\n}) => {\n const { referenceModules } = useSignUpContext();\n const intl = useIntl();\n\n const referenceModule = referenceModules.find(\n (m) => m.courseId === module.courseId && m.id === module.moduleId && m.examSessionId === module.examSessionId\n );\n\n if (!referenceModule) {\n console.error(\n `Could not find reference module with Course id ${module.courseId}, ExamSessionid ${module.examSessionId} and Module id ${module.moduleId}`\n );\n return null;\n }\n\n const updateExamDetails = (examDetails: ModuleSelectionExamDetails) => {\n updateModuleSelection({\n ...module,\n details: { ...module.details },\n examDetails: [...(module.examDetails ?? []).filter((e) => e.examId !== examDetails.examId), examDetails],\n });\n };\n\n return (\n <>\n \n \n {GetTranslatedValueIntl(intl, referenceModule.name)}\n \n \n {referenceModule.exams.map((referenceExam, index) => {\n const details = module.examDetails?.find((e) => e.examId === referenceExam.id);\n return (\n \n l.courseId === module.courseId &&\n l.examSessionId === module.examSessionId &&\n l.moduleId === module.moduleId &&\n l.examId === referenceExam.id\n )}\n updateExamDetails={updateExamDetails}\n disabled={module.paid ?? false}\n />\n );\n })}\n \n );\n};\n\nexport default ExamLocationAndDateStepRow;\n","import { LinearProgress, Paper, Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from \"@material-ui/core\";\nimport Typography from \"@material-ui/core/Typography\";\nimport makeStyles from \"@material-ui/styles/makeStyles\";\nimport { useSnackbar } from \"notistack\";\nimport React from \"react\";\nimport { useGetModuleExamDetailsQuery } from \"../../../../api/rtk/SignUpApi\";\nimport { ModuleSelectionViewModel } from \"../../../../model/ExamSignup/ModuleSelectionViewModel\";\nimport TranslatedMessage from \"../../../translations/TranslatedMessage\";\nimport { useSignUpContext } from \"../../CertificationDataWizardContext/CertificationDataWizardContext\";\nimport { ControlButtons } from \"../shared/ControlButtons\";\nimport ExamLocationAndDateStepRow from \"./ExamLocationAndDateStepRow\";\n\nconst useStyles = makeStyles({\n description: {\n paddingTop: 20,\n paddingBottom: 20,\n },\n});\n\ntype ExamLocationModel = {\n examId: string;\n sessionId: string;\n day: string;\n locationId: string;\n};\n\nconst ExamLocationAndDateStep: React.FunctionComponent = () => {\n const {\n data: { modulesSelection: initialModulesSelection },\n setValues,\n handleNextStep,\n handlePrevStep,\n } = useSignUpContext();\n const [modulesSelection, setModulesSelection] = React.useState(initialModulesSelection);\n const { data: allExamPossibleDetails, isFetching } = useGetModuleExamDetailsQuery(initialModulesSelection);\n\n const classes = useStyles();\n const { enqueueSnackbar } = useSnackbar();\n\n const updateModuleSelection = (update: ModuleSelectionViewModel) => {\n const index = modulesSelection.findIndex(\n (m) =>\n m.courseId === update.courseId && m.examSessionId === update.examSessionId && m.moduleId === update.moduleId\n );\n if (index >= 0) {\n setModulesSelection([...modulesSelection.slice(0, index), update, ...modulesSelection.slice(index + 1)]);\n }\n };\n\n const examsHaveSameLocation = (): boolean => {\n const examsLocationDays = modulesSelection.reduce(\n (allExamsLocationsDays: ExamLocationModel[], module: ModuleSelectionViewModel) => {\n const examsLocations: ExamLocationModel[] = (module.examDetails ?? [])\n .map((exam) => {\n return {\n examId: exam.examId,\n sessionId: module.examSessionId,\n day: exam.examDayDate,\n locationId: exam.locationId,\n };\n })\n .filter((exam): exam is ExamLocationModel => {\n return !!exam.day && !!exam.locationId;\n });\n\n allExamsLocationsDays.push(...examsLocations);\n return allExamsLocationsDays;\n },\n [] as ExamLocationModel[]\n );\n\n for (const locationDay of examsLocationDays) {\n if (\n examsLocationDays.some(\n (item) =>\n item.examId !== locationDay.examId &&\n item.sessionId === locationDay.sessionId &&\n item.day === locationDay.day &&\n item.locationId !== locationDay.locationId\n )\n ) {\n return false;\n }\n }\n return true;\n };\n\n const onNextStep = () => {\n if (!examsHaveSameLocation()) {\n enqueueSnackbar(\n \n );\n return;\n }\n setValues({ modulesSelection });\n handleNextStep();\n };\n\n const onPreviousStep = () => {\n setValues({ modulesSelection });\n handlePrevStep();\n };\n\n const isSelectionComplete = (): boolean => {\n if (!allExamPossibleDetails) {\n return false;\n }\n\n for (const module of modulesSelection) {\n const expectedSelection = allExamPossibleDetails?.filter(\n (details) =>\n details.examSessionId === module.examSessionId &&\n details.courseId === module.courseId &&\n details.moduleId === module.moduleId &&\n !details.noLocationRequired\n );\n const currentValidSelection = (module.examDetails ?? []).filter(\n (details) => details.locationId !== undefined && details.examDayId !== undefined\n );\n\n if (expectedSelection?.length !== currentValidSelection.length) {\n return false;\n }\n }\n return true;\n };\n\n if (isFetching) {\n return ;\n }\n\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {modulesSelection.map((m, i) => (\n \n ))}\n \n
\n
\n \n \n );\n};\n\nexport default ExamLocationAndDateStep;\n","import { Checkbox, FormControlLabel, Grid, Typography } from \"@material-ui/core\";\nimport React from \"react\";\nimport { useAddModuleAttachmentMutation, useDeleteModuleAttachmentMutation } from \"../../../../api/rtk/SignUpApi\";\nimport { DocumentReferenceViewModel } from \"../../../../model/DocumentReferenceViewModel\";\nimport DocumentList from \"../../../common/DocumentList\";\nimport UploadDropZone from \"../../../common/UploadDropZone\";\nimport TranslatedMessage from \"../../../translations/TranslatedMessage\";\n\ntype ModuleAttachmentsProps = {\n moduleId: string;\n attachments: DocumentReferenceViewModel[];\n willProvideDocumentsLater?: boolean;\n setWillProvideDocumentsLater: (value: boolean | undefined) => void;\n};\n\nconst ModuleAttachments: React.FunctionComponent = ({\n moduleId,\n attachments,\n willProvideDocumentsLater,\n setWillProvideDocumentsLater,\n}) => {\n const [addModuleAttachment] = useAddModuleAttachmentMutation();\n const [deleteModuleAttachment] = useDeleteModuleAttachmentMutation();\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n setWillProvideDocumentsLater(event.target.checked)}\n />\n }\n label={}\n />\n \n \n addModuleAttachment({ moduleId, file })} />\n \n \n \n deleteModuleAttachment({\n moduleId,\n fileName: file.name,\n })\n }\n />\n \n \n );\n};\n\nexport default ModuleAttachments;\n","import {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n FormControl,\n Grid,\n InputLabel,\n makeStyles,\n MenuItem,\n Select,\n Table,\n TableBody,\n TableCell,\n TableRow,\n Typography,\n} from \"@material-ui/core\";\nimport React from \"react\";\nimport { useIntl } from \"react-intl\";\nimport { useGetAllTrainingProvidersQuery } from \"../../../../api/rtk/TrainingProviderApi\";\nimport { ModuleSelectionDetails } from \"../../../../model/ExamSignup/ModuleSelectionViewModel\";\nimport { ModuleTypeTranslationKey } from \"../../../../model/Module\";\nimport { OralExamOption } from \"../../../../model/OralExamOption\";\nimport { GetTranslatedValueIntl } from \"../../../../model/Shared/TranslatedValue\";\nimport { GetTranslation } from \"../../../../translations/GetTranslation\";\nimport TranslatedMessage from \"../../../translations/TranslatedMessage\";\nimport ModuleAttachments from \"./ModuleAttachments\";\nimport { ModuleData } from \"./ModulesDetailsStep\";\n\nconst useStyles = makeStyles({\n table: {\n \"& td\": {\n borderBottom: \"none\",\n },\n \"& td:nth-child(1)\": {\n width: \"150px\",\n },\n },\n});\n\ntype ModuleDetailsDialogProps = {\n moduleData: ModuleData;\n handleOk: (details: ModuleSelectionDetails) => void;\n handleCancel: () => void;\n};\n\nconst ModuleDetailsDialog: React.FunctionComponent = ({\n moduleData,\n handleOk,\n handleCancel,\n}) => {\n const [trainingProvider, setTrainingProvider] = React.useState(moduleData.selection.details?.trainingProvider ?? \"\");\n const [option, setOption] = React.useState(moduleData.selection.details?.option ?? \"\");\n const [isRepeater, setIsRepeater] = React.useState(moduleData.selection.details?.isRepeater);\n const [willProvideDocumentsLater, setWillProvideDocumentsLater] = React.useState(\n moduleData.selection.details?.willProvideDocumentsLater\n );\n\n const { data: trainingProviders } = useGetAllTrainingProvidersQuery();\n\n const intl = useIntl();\n const classes = useStyles();\n\n const onIsRepeaterChange = (value: string | number) => {\n const isRepeater = value === \"\" ? undefined : value === 1 ? true : false;\n setIsRepeater(isRepeater);\n };\n\n const getIsRepeaterSelectValue = () => {\n if (isRepeater === undefined) {\n return \"\";\n }\n if (isRepeater === false) {\n return 0;\n }\n return 1;\n };\n\n const canSave = () => {\n return (\n trainingProvider &&\n trainingProvider !== \"\" &&\n (!moduleData.reference.needsOption || (option && option !== \"\")) &&\n isRepeater !== undefined &&\n (!moduleData.reference.needsDocuments || moduleData.attachments.length > 0 || willProvideDocumentsLater)\n );\n };\n\n return (\n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n {GetTranslatedValueIntl(intl, moduleData.reference.name)}\n \n \n \n \n \n \n {GetTranslation(intl, ModuleTypeTranslationKey[moduleData.reference.moduleType])}\n \n \n \n \n \n \n {moduleData.examSessionName}\n \n \n \n \n \n {moduleData.courseName}\n \n \n
\n
\n\n \n \n \n \n \n \n setTrainingProvider(event.target.value as string)}\n >\n {trainingProviders &&\n trainingProviders.map((p) => (\n \n {GetTranslatedValueIntl(intl, p.label)}\n \n ))}\n \n \n \n {moduleData.reference.needsOption && (\n \n \n \n \n \n \n \n \n )}\n \n \n \n \n \n onIsRepeaterChange(event.target.value as string | number)}\n >\n \n \n \n \n \n \n \n \n \n \n\n {moduleData.reference.needsDocuments && (\n \n )}\n
\n
\n \n \n handleOk({ trainingProvider, option, isRepeater, willProvideDocumentsLater })}\n variant=\"contained\"\n color=\"primary\"\n disabled={!canSave()}\n >\n \n \n \n
\n );\n};\n\nexport default ModuleDetailsDialog;\n","import {\n Button,\n Grid,\n makeStyles,\n Paper,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n Typography,\n} from \"@material-ui/core\";\nimport CheckCircleOutlineIcon from \"@material-ui/icons/CheckCircleOutline\";\nimport EditIcon from \"@material-ui/icons/Edit\";\nimport ErrorOutlineIcon from \"@material-ui/icons/ErrorOutline\";\nimport React from \"react\";\nimport { useIntl } from \"react-intl\";\nimport { useGetAllModulesAttachmentsQuery } from \"../../../../api/rtk/SignUpApi\";\nimport { ModuleReference } from \"../../../../model/CertificationDataContextModel\";\nimport { DocumentReferenceViewModel } from \"../../../../model/DocumentReferenceViewModel\";\nimport {\n ModuleSelectionDetails,\n ModuleSelectionViewModel,\n} from \"../../../../model/ExamSignup/ModuleSelectionViewModel\";\nimport { GetTranslatedValueIntl } from \"../../../../model/Shared/TranslatedValue\";\nimport TranslatedMessage from \"../../../translations/TranslatedMessage\";\nimport { useSignUpContext } from \"../../CertificationDataWizardContext/CertificationDataWizardContext\";\nimport { ControlButtons } from \"../shared/ControlButtons\";\nimport ModuleDetailsDialog from \"./ModuleDetailsDialog\";\n\nexport type ModuleData = {\n selection: ModuleSelectionViewModel;\n reference: ModuleReference;\n courseName: string;\n examSessionName: string;\n attachments: DocumentReferenceViewModel[];\n paid: boolean;\n};\n\nconst useStyles = makeStyles({\n button: { textTransform: \"none\", whiteSpace: \"nowrap\" },\n});\n\nconst ModulesDetailsStep: React.FunctionComponent = () => {\n const {\n availableExamSessions,\n referenceCourses,\n referenceModules,\n data: { modulesSelection },\n setValues,\n handleNextStep,\n } = useSignUpContext();\n\n const [dialogModuleindex, setDialogModuleIndex] = React.useState(undefined);\n\n const { data: allModulesAttachments } = useGetAllModulesAttachmentsQuery();\n\n const intl = useIntl();\n const classes = useStyles();\n\n const getCourseName = (courseId: string) => {\n const course = referenceCourses.find((c) => c.id === courseId);\n return course ? GetTranslatedValueIntl(intl, course.name) : courseId;\n };\n\n const getExamSessionName = (examSessionId: string) => {\n const examSession = availableExamSessions.find((e) => e.id === examSessionId);\n return examSession ? GetTranslatedValueIntl(intl, examSession.sessionKey) : examSessionId;\n };\n\n const moduleItems = modulesSelection\n .map((module) => {\n const moduleReference = referenceModules.find(\n (m) => m.examSessionId === module.examSessionId && m.courseId === module.courseId && m.id === module.moduleId\n );\n\n return moduleReference\n ? ({\n isValid: false,\n selection: module,\n reference: moduleReference,\n courseName: getCourseName(module.courseId),\n examSessionName: getExamSessionName(module.examSessionId),\n attachments: allModulesAttachments?.find((ma) => ma.moduleId === module.moduleId)?.attachments ?? [],\n paid: module.paid,\n } as ModuleData)\n : undefined;\n })\n .filter((moduleItem): moduleItem is ModuleData => !!moduleItem);\n\n const handleDialogOk = (details: ModuleSelectionDetails) => {\n if (dialogModuleindex !== undefined) {\n const currentSelection = moduleItems[dialogModuleindex].selection;\n const newModulesSelection = modulesSelection.map((s) => {\n if (\n s.courseId === currentSelection.courseId &&\n s.examSessionId === currentSelection.examSessionId &&\n s.moduleId === currentSelection.moduleId\n ) {\n return { ...currentSelection, details };\n }\n return s;\n });\n setValues({ modulesSelection: newModulesSelection });\n setDialogModuleIndex(undefined);\n }\n };\n\n const hasCompleteData = (moduleData: ModuleData): boolean => {\n return (\n moduleData.selection.details !== undefined &&\n moduleData.selection.details?.trainingProvider !== undefined &&\n moduleData.selection.details?.trainingProvider !== \"\" &&\n (!moduleData.reference.needsOption ||\n (moduleData.selection.details?.option !== undefined && moduleData.selection.details?.option !== \"\")) &&\n moduleData.selection.details?.isRepeater !== undefined &&\n (!moduleData.reference.needsDocuments ||\n moduleData.attachments.length > 0 ||\n moduleData.selection.details?.willProvideDocumentsLater === true)\n );\n };\n\n const isInputComplete = moduleItems.reduce((prevIsValid, curr) => prevIsValid && hasCompleteData(curr), true);\n\n return (\n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {moduleItems.map((moduleData, index) => (\n \n {GetTranslatedValueIntl(intl, moduleData.reference.name)}\n {moduleData.examSessionName}\n {moduleData.courseName}\n \n setDialogModuleIndex(index)}\n startIcon={}\n variant=\"contained\"\n color=\"primary\"\n className={classes.button}\n disabled={moduleData.paid}\n >\n \n \n \n \n {hasCompleteData(moduleData) ? (\n \n ) : (\n \n )}\n \n \n ))}\n \n
\n
\n
\n
\n \n\n {dialogModuleindex !== undefined && (\n setDialogModuleIndex(undefined)}\n />\n )}\n
\n );\n};\n\nexport default ModulesDetailsStep;\n","import { CartViewModel } from \"../model/Cart/CartViewModel\";\nimport { ModuleSelectionViewModel } from \"../model/ExamSignup/ModuleSelectionViewModel\";\n\nexport default class ErrorHelper {\n public static GetErrors(cart?: CartViewModel): string[] {\n var allErrors: string[] = [];\n\n if (cart?.modules) {\n allErrors = ErrorHelper.GetModuleErrors(cart.modules);\n }\n\n return allErrors;\n }\n\n public static GetModuleErrors(modules: ModuleSelectionViewModel[]): string[] {\n var allErrors: string[] = [];\n // note module.Errors is a list of strings and can contain various errors for each module.\n modules?.forEach((module) => {\n if ((module.errors?.length ?? 0) > 0) {\n module.errors?.forEach((err) => {\n if (err && (err?.length ?? 0) > 0) {\n if (!allErrors.includes(err)) {\n allErrors = allErrors.concat(err);\n }\n }\n });\n }\n });\n \n return allErrors;\n }\n}\n","import { Theme } from \"@material-ui/core/styles\";\nimport Backdrop from \"@material-ui/core/Backdrop\";\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\nimport makeStyles from \"@material-ui/styles/makeStyles\";\nimport React from \"react\";\n\ntype LoadingSpinnerProps = {\n children?: JSX.Element;\n};\n\nconst useStyles = makeStyles((theme: Theme) => ({\n backdrop: {\n zIndex: theme.zIndex.tooltip,\n color: \"#fff\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: theme.spacing(4) + \"px\",\n },\n}));\n\nexport function LoadingSpinner({ children }: LoadingSpinnerProps) {\n const classes = useStyles();\n return (\n \n \n {children}\n \n );\n}\n","import Typography from \"@material-ui/core/Typography\";\nimport * as React from \"react\";\nimport TranslatedMessage from \"../../../translations/TranslatedMessage\";\n\ntype FaqLinkProps = {\n link: string;\n linkText: string;\n};\n\nconst FaqLink: React.FunctionComponent = ({\n link,\n linkText,\n}) => {\n return (\n \n \n \n {linkText}\n \n \n \n );\n};\n\nexport default FaqLink;\n","import { configureStore, Reducer } from \"@reduxjs/toolkit\";\nimport { connectRouter, routerMiddleware, RouterState } from \"connected-react-router\";\nimport { History } from \"history\";\nimport { ApplicationState } from \"..\";\nimport { globalApiErrorHandler } from \"../api/ErrorHandler\";\nimport { api } from \"../api/rtk/BaseApi\";\nimport { reducer as NotificationReducer } from \"./notifications/NotificationStore\";\nimport { reducer as SessionReducer } from \"./session/SessionStore\";\n\n// This type can be used as a hint on action creators so that its 'dispatch' and 'getState' params are\n// correctly typed to match your store.\nexport type AppThunkAction = (dispatch: (action: TAction) => void, getState: () => ApplicationState) => void;\n\nexport const configureReduxStore = (history: History) =>\n configureStore({\n reducer: {\n router: connectRouter(history) as Reducer,\n notificationsState: NotificationReducer,\n sessionState: SessionReducer,\n [api.reducerPath]: api.reducer,\n },\n middleware: (getDefaultMiddleware) =>\n getDefaultMiddleware({\n // TODO: remove user authenticator from the store\n immutableCheck: {\n ignoredPaths: [\"sessionState.userAuthenticator\", \"sessionState.authClient\", \"sessionState.appRegistration\"],\n },\n // TODO: fix serialization warnings\n serializableCheck: {\n ignoredActionPaths: [\"userAuthenticator\",\"authClient\", \"meta\", \"appRegistration\"],\n ignoredPaths: [\"sessionState.userAuthenticator\", \"sessionState.authClient\", \"sessionState.appRegistration\"],\n // default is 32 but produces a lot of warnings in screen with 'big' state objects\n warnAfter: 64,\n },\n })\n .concat(routerMiddleware(history))\n .concat(api.middleware)\n .concat(globalApiErrorHandler),\n });\n","import { Theme } from \"@material-ui/core/styles\";\nimport { createStyles, makeStyles } from \"@material-ui/styles\";\nimport { Button, Paper } from \"@material-ui/core\";\nimport React from \"react\";\nimport { PaymentMethodType } from \"./PaymentConstants\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n button: {\n height: \"100%\",\n },\n item: {\n padding: theme.spacing(2),\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"center\",\n gap: theme.spacing(1) + \"px\",\n height: theme.spacing(16),\n width: theme.spacing(23),\n },\n text:{\n textWrap: \"wrap\",\n height: \"100%\",\n }\n })\n);\n\ntype PaymentMethodItemProps = {\n selected: PaymentMethodType | undefined;\n type: PaymentMethodType;\n label?: string;\n icon: any;\n onSelect: (type: PaymentMethodType) => void;\n};\n\nconst PaymentMethodItem: React.FC = ({\n selected,\n icon,\n type,\n onSelect,\n}: PaymentMethodItemProps) => {\n const classes = useStyles();\n if (selected !== undefined && selected !== type) {\n return null;\n }\n\n return (\n \n );\n};\n\nexport default PaymentMethodItem;\n","import { Theme } from \"@material-ui/core/styles\";\nimport { createStyles, makeStyles } from \"@material-ui/styles\";\nimport React, { useState } from \"react\";\nimport { CandidateViewModel } from \"../../model/CandidateViewModel\";\nimport { GetTranslation } from \"../../translations/GetTranslation\";\nimport { getValidDate } from \"../../utils/Dates\";\nimport { useIntl } from \"react-intl\";\nimport { MaterialUiPickersDate } from \"@material-ui/pickers/typings/date\";\nimport DatePicker from \"../common/datePicker/DatePicker\";\nimport PhoneNoTextField from \"../common/textField/PhoneNoTextField\";\nimport CustomButton from \"../common/buttons/CustomButton\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n form: {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n padding: theme.spacing(2),\n },\n button: {\n marginTop: theme.spacing(2),\n },\n })\n);\n\ntype InvoicePaymentFormProps = {\n me: CandidateViewModel;\n onSubmit: (me: CandidateViewModel) => void;\n};\n\nconst InvoicePaymentForm: React.FC = ({ me, onSubmit }: InvoicePaymentFormProps) => {\n const classes = useStyles();\n const intl = useIntl();\n const [birthDate, setBirthDate] = useState(me.birthdate);\n const [phone, setPhone] = useState(me.phoneNumber);\n const [phoneValid, setPhoneValid] = useState(false);\n\n const handlePayClicked = () => {\n onSubmit({ ...me, phoneNumber: phone, birthdate: birthDate! });\n };\n\n return (\n
\n {\n setBirthDate(date as Date);\n }}\n required={true}\n error={!birthDate}\n />\n setPhone(e.target.value)}\n onChangeIsValid={(valid) => setPhoneValid(valid)}\n required={true}\n placeholder={GetTranslation(intl, \"person.field.phoneNumber.placeholder\")}\n >\n \n {GetTranslation(intl, \"paymentMethodSelector.form.button\")}\n \n \n );\n};\n\nexport default InvoicePaymentForm;\n","import { Theme } from \"@material-ui/core/styles\";\nimport { createStyles, makeStyles } from \"@material-ui/styles\";\nimport {\n Box,\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n LinearProgress,\n Paper,\n} from \"@material-ui/core\";\nimport React, { useState } from \"react\";\nimport { PaymentMethodType } from \"./PaymentConstants\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\nimport { useGetMeQuery, useUpdateMeMutation } from \"../../api/rtk/MeApi\";\nimport CreditCardIcon from \"@material-ui/icons/CreditCard\";\nimport PaymentMethodItem from \"./PaymentMethodItem\";\nimport InvoicePaymentForm from \"./InvoicePaymentForm\";\nimport { CandidateViewModel } from \"../../model/CandidateViewModel\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n buttons: {\n padding: theme.spacing(1),\n display: \"flex\",\n justifyContent: \"center\",\n },\n content: {\n padding: theme.spacing(1),\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n gap: theme.spacing(2) + \"px\",\n },\n selector: {\n padding: theme.spacing(1),\n display: \"flex\",\n justifyContent: \"center\",\n gap: theme.spacing(1) + \"px\",\n },\n form: {\n margin: theme.spacing(1),\n padding: theme.spacing(1),\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n gap: theme.spacing(1) + \"px\",\n },\n icon: {\n height: theme.spacing(2),\n },\n singleIcon: {\n height: theme.spacing(4),\n },\n })\n);\n\ntype PaymentMethodSelectorDialogProps = {\n onClose: () => void;\n onPay: (paymentMethod: PaymentMethodType) => void;\n};\n\nconst PaymentMethodSelectorDialog: React.FC = ({\n onClose,\n onPay,\n}: PaymentMethodSelectorDialogProps) => {\n const classes = useStyles();\n const [selectedMethod, setSelectedMethod] = useState();\n const { data: me, isFetching: isMeFetching } = useGetMeQuery();\n const [updateMe, { isLoading: isSavingMe }] = useUpdateMeMutation();\n const handleSelect = (type: PaymentMethodType) => {\n setSelectedMethod(type);\n if (type === PaymentMethodType.CreditCardAndOthers) {\n onPay(type);\n } else if (type === PaymentMethodType.CembraPay && me?.birthdate && me?.phoneNumber) {\n onPay(type);\n } else {\n setSelectedMethod(type);\n }\n };\n\n const handleInvoicePaymentSubmit = async (value: CandidateViewModel) => {\n if (me!.phoneNumber !== value.phoneNumber || me!.birthdate !== value.birthdate) {\n await updateMe(value);\n }\n onPay(PaymentMethodType.CembraPay);\n };\n\n if (isMeFetching || isSavingMe) {\n return ;\n }\n\n return (\n \n \n \n \n \n \n }\n onSelect={handleSelect}\n >\n }\n onSelect={handleSelect}\n >\n \n {selectedMethod === PaymentMethodType.CembraPay && me && (\n \n \n \n )}\n \n \n \n \n \n );\n};\n\nexport default PaymentMethodSelectorDialog;\n","import { TableCell, TableRow } from \"@material-ui/core\";\nimport React from \"react\";\nimport { useIntl } from \"react-intl\";\nimport { SwissGermanLocale, SwissTimeZone } from \"../../../../data/constants\";\nimport { ExamType, ExamTypeTranslationKey } from \"../../../../model/Exam\";\nimport { ModuleExamForSignupViewModel } from \"../../../../model/ExamSignup/ExamSessionForSignupViewModel\";\nimport { ModuleSelectionViewModel } from \"../../../../model/ExamSignup/ModuleSelectionViewModel\";\nimport { GetTranslatedValueIntl } from \"../../../../model/Shared/TranslatedValue\";\nimport TranslatedMessage from \"../../../translations/TranslatedMessage\";\n\ntype SummaryExamRow = {\n module: ModuleSelectionViewModel;\n examReference: ModuleExamForSignupViewModel;\n};\n\nconst SummaryExamRow: React.FunctionComponent = ({ module, examReference }) => {\n const intl = useIntl();\n\n const isTermPaper = examReference.type === ExamType.TermPaper;\n const examDetails = isTermPaper ? undefined : module.examDetails?.find((d) => d.examId === examReference.id);\n\n const displayDate = examDetails?.examDayDate\n ? new Date(examDetails?.examDayDate).toLocaleDateString(SwissGermanLocale, { timeZone: SwissTimeZone })\n : \"\";\n\n return (\n \n \n {GetTranslatedValueIntl(intl, examReference.name)}\n \n \n \n {isTermPaper ? \"-\" : examDetails?.locationName}\n {isTermPaper ? \"-\" : displayDate}\n \n \n \n );\n};\n\nexport default SummaryExamRow;\n","import { makeStyles, Theme } from \"@material-ui/core\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport Typography from \"@material-ui/core/Typography\";\nimport DeleteForeverOutlinedIcon from \"@material-ui/icons/DeleteForeverOutlined\";\nimport ErrorOutlineIcon from \"@material-ui/icons/ErrorOutline\";\nimport { useSnackbar } from \"notistack\";\nimport React, { useState } from \"react\";\nimport { useIntl } from \"react-intl\";\nimport { store } from \"../../../..\";\nimport { initModulePayment } from \"../../../../api/CartApi\";\nimport { SwissGermanLocale, SwissTimeZone } from \"../../../../data/constants\";\nimport { TransactionStatus } from \"../../../../model/Cart/TransactionStatus\";\nimport { ModuleSelectionViewModel } from \"../../../../model/ExamSignup/ModuleSelectionViewModel\";\nimport { GetTranslatedValueIntl } from \"../../../../model/Shared/TranslatedValue\";\nimport CustomButton from \"../../../common/buttons/CustomButton\";\nimport CustomDraggableDialog from \"../../../common/customDialog/CustomDraggableDialog\";\nimport { LoadingSpinner } from \"../../../common/LoadingSpinner\";\nimport { PaymentMethodType } from \"../../../payment/PaymentConstants\";\nimport PaymentMethodSelectorDialog from \"../../../payment/PaymentMethodSelectorDialog\";\nimport TranslatedMessage from \"../../../translations/TranslatedMessage\";\nimport { useSignUpContext } from \"../../CertificationDataWizardContext/CertificationDataWizardContext\";\nimport SummaryExamRow from \"./SummaryExamRow\";\nimport { TranslationKey } from \"../../../../translations/TranslationKey\";\nimport { GetTranslation } from '../../../../translations/GetTranslation';\n\ntype SummaryModuleRowProps = {\n module: ModuleSelectionViewModel;\n onRemoveModule: (module: ModuleSelectionViewModel) => void;\n onPayModule: (module: ModuleSelectionViewModel) => void;\n};\n\nconst useStyles = makeStyles((theme: Theme) => ({\n freeCancellationDate: {\n fontStyle: \"italic\",\n marginLeft: theme.spacing(3),\n },\n pointer: {\n cursor: \"pointer\",\n },\n actions: {\n display: \"flex\",\n alignItems: \"center\",\n gap: theme.spacing(1) + \"px\",\n },\n payButton: {\n height: \"auto !important\",\n },\n}));\n\nconst SummaryModuleRow: React.FunctionComponent = ({ module, onRemoveModule, onPayModule }) => {\n const { referenceModules, availableExamSessions } = useSignUpContext();\n const [confirmRemoveDialog, setConfirmRemoveDialog] = useState(false);\n const [showPaymentSelector, setShowPaymentSelector] = useState(false);\n const deviceFingerprint = store.getState().sessionState.sessionId;\n const [busy, setBusy] = useState(false);\n\n const intl = useIntl();\n const classes = useStyles();\n const { enqueueSnackbar } = useSnackbar();\n\n const moduleHasErrors = (module.errors?.length ?? 0) > 0;\n\n const referenceModule = referenceModules.find(\n (m) => m.examSessionId === module.examSessionId && m.courseId === module.courseId && m.id === module.moduleId\n );\n if (!referenceModule) {\n console.warn(\"Reference Module not found for ModuleSelection: \", module);\n return null;\n }\n\n const examSession = availableExamSessions.find((e) => e.id === module.examSessionId);\n if (!examSession) {\n console.warn(\"Exam Session not found for ModuleSelection: \", module);\n return null;\n }\n\n const buttonLabel = module.paid ? (\n referenceModule.price > 0 ? (\n \n ) : (\n \n )\n ) : referenceModule.price > 0 ? (\n \n ) : (\n \n );\n\n const onPayButtonClick = (module: ModuleSelectionViewModel) => {\n if (module.price > 0) {\n setShowPaymentSelector(true);\n } else {\n startModulePayment(PaymentMethodType.CreditCardAndOthers);\n }\n };\n\n const startModulePayment = (paymentMethod: PaymentMethodType) => {\n setBusy(true);\n initModulePayment({\n moduleId: module.moduleId,\n examSessionId: module.examSessionId,\n courseId: module.courseId,\n examDetails: module.examDetails!,\n paymentMethod,\n deviceFingerprint,\n })\n .then((response) => {\n if (response.success) {\n if (response.data.paymentUrl) {\n window.open(response.data.paymentUrl, \"_self\");\n } else if (response.data.status === TransactionStatus.Paid) {\n enqueueSnackbar(\n ,\n { variant: \"success\" }\n );\n\n onPayModule(module);\n }\n }\n })\n .finally(() => setBusy(false));\n };\n\n const handlePay = (paymentMethod: PaymentMethodType) => {\n setShowPaymentSelector(false);\n startModulePayment(paymentMethod);\n };\n\n const handleRemoveModule = () => {\n setConfirmRemoveDialog(false);\n onRemoveModule(module);\n };\n\n const handleCancelRemove = () => {\n setConfirmRemoveDialog(false);\n };\n\n return (\n \n \n \n {GetTranslatedValueIntl(intl, referenceModule.name)}\n \n {\"(\"}\n \n {new Date(examSession.freeCancellationEndDate).toLocaleDateString(SwissGermanLocale, {\n timeZone: SwissTimeZone,\n })}\n {\")\"}\n \n \n \n {referenceModule.price.toLocaleString(SwissGermanLocale, { minimumFractionDigits: 2 })}\n \n \n onPayButtonClick(module)}\n disabled={moduleHasErrors || module.paid}\n internalButtonClassName={classes.payButton}\n >\n {buttonLabel}\n \n {!module.paid && (\n setConfirmRemoveDialog(true)}\n >\n )}\n {moduleHasErrors && GetTranslation(intl, err as TranslationKey)).join('\\n') } />}\n {confirmRemoveDialog && (\n }\n isOpen={true}\n content={}\n acceptText={}\n cancelText={}\n onAccept={handleRemoveModule}\n onCancel={handleCancelRemove}\n >\n )}\n \n \n {referenceModule.exams.map((exam, index) => (\n \n ))}\n {showPaymentSelector && (\n setShowPaymentSelector(false)}\n onPay={handlePay}\n >\n )}\n {busy && (\n \n \n \n \n \n )}\n \n );\n};\n\nexport default SummaryModuleRow;\n","import {\n Grid,\n Paper,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n Typography,\n} from \"@material-ui/core\";\nimport makeStyles from \"@material-ui/styles/makeStyles\";\nimport React from \"react\";\nimport { SwissGermanLocale } from \"../../../../data/constants\";\nimport { ModuleReference } from \"../../../../model/CertificationDataContextModel\";\nimport { ModuleSelectionViewModel } from \"../../../../model/ExamSignup/ModuleSelectionViewModel\";\nimport TranslatedMessage from \"../../../translations/TranslatedMessage\";\nimport { useSignUpContext } from \"../../CertificationDataWizardContext/CertificationDataWizardContext\";\nimport SummaryModuleRow from \"./SummaryModuleRow\";\nimport Alert from \"@material-ui/lab/Alert\";\n\nconst useStyles = makeStyles(() => ({\n skipRow: {\n padding: \"1px\",\n },\n}));\n\ntype ModuleData = {\n selection: ModuleSelectionViewModel;\n reference: ModuleReference;\n};\n\ntype SelectionSummaryProps = {\n onRemoveModule: (module: ModuleSelectionViewModel) => void;\n onPayModule: (module: ModuleSelectionViewModel) => void;\n};\n\nconst SelectionSummary: React.FunctionComponent = ({\n onRemoveModule,\n onPayModule,\n}: SelectionSummaryProps) => {\n const {\n referenceModules,\n data: { modulesSelection },\n } = useSignUpContext();\n\n const classes = useStyles();\n\n const moduleRows = modulesSelection\n .map((m: ModuleSelectionViewModel) => {\n const refModule = referenceModules.find(\n (r) => r.examSessionId === m.examSessionId && r.courseId === m.courseId && r.id === m.moduleId\n );\n if (!refModule) {\n return undefined;\n }\n return { selection: m, reference: refModule } as ModuleData;\n })\n .filter((r): r is ModuleData => r !== undefined);\n\n const totalPrice = moduleRows.reduce((sum, row) => sum + row.reference.price, 0);\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {modulesSelection.map((module, index) => (\n \n \n \n \n \n \n ))}\n \n \n {totalPrice.toLocaleString(SwissGermanLocale, { minimumFractionDigits: 2 })}\n \n \n \n \n
\n
\n
\n
\n );\n};\n\nexport default SelectionSummary;\n","import { Backdrop } from \"@material-ui/core\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Paper from \"@material-ui/core/Paper\";\nimport { Theme } from \"@material-ui/core/styles\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Alert from \"@material-ui/lab/Alert\";\nimport AlertTitle from \"@material-ui/lab/AlertTitle\";\nimport { createStyles, makeStyles } from \"@material-ui/styles\";\nimport { useSnackbar } from \"notistack\";\nimport * as React from \"react\";\nimport { useEffect } from \"react\";\nimport { store } from \"../../../..\";\nimport { checkTransactionStatus, clearCart, getCart, setCart } from \"../../../../api/CartApi\";\nimport { TransactionStatus } from \"../../../../model/Cart/TransactionStatus\";\nimport { ModuleSelectionViewModel } from \"../../../../model/ExamSignup/ModuleSelectionViewModel\";\nimport ErrorHelper from \"../../../../utils/ErrorHelper\";\nimport { useQuery } from \"../../../../utils/UseQuery\";\nimport { LoadingSpinner } from \"../../../common/LoadingSpinner\";\nimport TranslatedMessage from \"../../../translations/TranslatedMessage\";\nimport { useSignUpContext } from \"../../CertificationDataWizardContext/CertificationDataWizardContext\";\nimport { ControlButtons } from \"../shared/ControlButtons\";\nimport FaqLink from \"./FaqLink\";\nimport SelectionSummary from \"./SelectionSummary\";\nimport { TranslationKey } from \"../../../../translations/TranslationKey\";\nimport { CourseType } from \"../../../../model/Course\";\nimport { GetTranslation } from \"../../../../translations/GetTranslation\";\nimport { useIntl } from \"react-intl\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n width: \"90%\",\n marginLeft: \"auto\",\n marginRight: \"auto\",\n },\n paper: {\n marginTop: theme.spacing(2),\n padding: theme.spacing(5),\n width: \"100%\",\n overflowX: \"auto\",\n marginBottom: theme.spacing(2),\n },\n errors: {\n marginLeft: \"auto\",\n marginRight: \"auto\",\n padding: theme.spacing(2),\n marginBottom: theme.spacing(4),\n },\n confirmMessage: {\n display: \"flex\",\n flexDirection: \"column\",\n padding: theme.spacing(4),\n },\n backDrop: {\n zIndex: theme.zIndex.tooltip,\n },\n })\n);\n\ntype WaitStates =\n | \"init\"\n | \"initDone\"\n | \"waitingTransactionConfirmation\"\n | \"waitingForCart\"\n | \"cartUpdated\"\n | \"finished\";\n\nconst PaymentAndCompletionStep: React.FunctionComponent = () => {\n const { handleNextStep, data, setValues } = useSignUpContext();\n\n const { enqueueSnackbar } = useSnackbar();\n const intl = useIntl();\n\n const datatransTrxId = useQuery().get(\"datatransTrxId\");\n const classes = useStyles({});\n const [waitingForOrderPaymentConfirmation, setWaitingForOrderPaymentConfirmation] = React.useState(false);\n const [state, setState] = React.useState(\"init\");\n const [confirmationError, setConfirmationError] = React.useState(false);\n const [isCartSubmitting, setIsCartSubmitting] = React.useState(false);\n const [checkStatusTimeout, setCheckStatusTimeout] = React.useState(1000);\n const [moduleErrors, setModuleErrors] = React.useState([]);\n\n const sessionId = store.getState().sessionState.sessionId;\n\n const getModuleByTransactionId = (transactionId: string): ModuleSelectionViewModel | undefined => {\n return data.modulesSelection.find((m) => m.transactionId === transactionId);\n };\n\n const refreshCart = () => {\n setIsCartSubmitting(true);\n getCart()\n .then((cart) => {\n setValues({ modulesSelection: cart!.modules });\n setState(\"cartUpdated\");\n })\n .finally(() => {\n setIsCartSubmitting(false);\n });\n };\n\n const scheduleNextTransactionUpdate = () => {\n setState(\"waitingTransactionConfirmation\");\n setTimeout(() => getTransactionStatus(), checkStatusTimeout);\n if (checkStatusTimeout < 60000) {\n setCheckStatusTimeout((prevTimeout) => prevTimeout + 1000);\n }\n };\n\n const updateCartWithModulesSelection = (modules?: ModuleSelectionViewModel[]) => {\n setCart({ candidateId: data.candidate.id, modules: modules ?? data.modulesSelection }).then((cart) =>\n setValues({ modulesSelection: cart!.modules })\n );\n }\n\n const getTransactionStatus = () => {\n if (datatransTrxId) {\n checkTransactionStatus(datatransTrxId)\n .then((transaction) => {\n if (transaction.status === TransactionStatus.Paid) {\n setState(\"waitingForCart\");\n refreshCart();\n enqueueSnackbar(\n ,\n { variant: \"success\", key: transaction.transactionId }\n );\n } else if (transaction.status === TransactionStatus.Initialized) {\n scheduleNextTransactionUpdate();\n } else if (transaction.status === TransactionStatus.Cancelled) {\n enqueueSnackbar(\n ,\n { variant: \"warning\", key: transaction.transactionId }\n );\n setWaitingForOrderPaymentConfirmation(false);\n } else {\n enqueueSnackbar(\n \n {\" \"}\n {transaction.message}\n ,\n { variant: \"error\", key: transaction.transactionId }\n );\n setWaitingForOrderPaymentConfirmation(false);\n }\n })\n .catch((err) => {\n setConfirmationError(true);\n });\n }\n };\n\n useEffect(() => {\n setModuleErrors(ErrorHelper.GetModuleErrors(data.modulesSelection));\n }, [data.modulesSelection]);\n\n useEffect(() => {\n if (state === \"init\" || state === \"initDone\" || state === \"waitingForCart\" || state === \"cartUpdated\") {\n if (state === \"init\") {\n setState(\"initDone\");\n updateCartWithModulesSelection();\n }\n if (datatransTrxId && !isCartSubmitting && (state === \"cartUpdated\" || state === \"init\")) {\n var module = getModuleByTransactionId(datatransTrxId);\n if (!module?.paid) {\n setWaitingForOrderPaymentConfirmation(true);\n scheduleNextTransactionUpdate();\n } else {\n setWaitingForOrderPaymentConfirmation(false);\n setState(\"finished\");\n }\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [data.modulesSelection, state, isCartSubmitting]);\n\n useEffect(() => {\n if (!document.getElementById(\"tmx_tags_iframe\")) {\n // const script = document.createElement(\"script\");\n // script.type = \"text/javascript\";\n // script.src = `https://h.online-metrix.net/fp/tags.js?org_id=lq866c5i&session_id=${sessionId}`;\n // script.async = true;\n\n // document.body.appendChild(script);\n\n const iframe = document.createElement(\"iframe\");\n iframe.innerHTML = ``;\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const submitRegistration = async () => {\n clearCart().then(() => {\n handleNextStep();\n });\n };\n\n const handleRemoveModule = (module: ModuleSelectionViewModel) => {\n const modules = data.modulesSelection.filter(\n (m) =>\n m.courseId !== module.courseId || m.examSessionId !== module.examSessionId || m.moduleId !== module.moduleId\n );\n updateCartWithModulesSelection(modules);\n };\n\n const handlePayModule = (module: ModuleSelectionViewModel) => {\n const modulesSelection = [...data.modulesSelection];\n const paidModule = data.modulesSelection.find(\n (m) =>\n m.moduleId === module.moduleId && m.courseId === module.courseId && m.examSessionId === module.examSessionId\n );\n if (paidModule) {\n paidModule.paid = true;\n }\n setValues({ modulesSelection });\n };\n\n const allModulesPaid = !data?.modulesSelection?.find((m) => !m.paid) ?? false;\n\n return (\n \n \n\n {moduleErrors.length > 0 && (\n \n \n \n \n {moduleErrors.map((err) => (\n \n ))}\n \n )}\n\n \n \n \n \n \n \n \n \n \n \n \n \n {\n data.modulesSelection?.some((m) => m.courseType === CourseType.Hve)\n ? \n : null\n }\n {\n data.modulesSelection?.some((m) => m.courseType === CourseType.Intermediary)\n ? \n : null\n }\n \n \n \n\n {waitingForOrderPaymentConfirmation && (\n <>\n {!confirmationError && (\n \n \n

\n \n

\n

\n \n
\n \n

\n
\n
\n )}\n {confirmationError && (\n \n \n setWaitingForOrderPaymentConfirmation(false)}>\n \n \n \n \n )}\n \n )}\n
\n );\n};\n\nexport default PaymentAndCompletionStep;\n","import Step from \"@material-ui/core/Step\";\nimport StepLabel from \"@material-ui/core/StepLabel\";\nimport Stepper from \"@material-ui/core/Stepper\";\nimport { createStyles, makeStyles, Theme } from \"@material-ui/core/styles\";\nimport * as React from \"react\";\nimport { IntlShape, useIntl } from \"react-intl\";\nimport { GetTranslation } from \"../../translations/GetTranslation\";\nimport {\n CertificationDataWizardProvider,\n useSignUpContext,\n} from \"./CertificationDataWizardContext/CertificationDataWizardContext\";\nimport EmailConfirmationSent from \"./components/EmailConfirmationSent\";\nimport PersonalDataStep from \"./components/Step1_PersonalData/PersonalDataStep\";\nimport ModuleSelectionStep from \"./components/Step2_ModuleSelection/ModuleSelectionStep\";\nimport ExamLocationAndDateStep from \"./components/Step3_ExamDetails/ExamLocationAndDateStep\";\nimport ModulesDetailsStep from \"./components/Step4_ModulesDetails/ModulesDetailsStep\";\nimport StartCertificationSteps from \"./CertificationDataWizardContext/StartCertificationSteps\";\nimport PaymentAndCompletionStep from \"./components/Step5_PaymentAndCompletion/PaymentAndCompletionStep\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n width: \"100%\",\n },\n stepper: {\n padding: \"0 0 40px 0\",\n marginBottom: 20,\n },\n buttonContainer: {\n marginTop: 40,\n display: \"flex\",\n justifyContent: \"center\",\n },\n button: {\n marginRight: theme.spacing(1),\n },\n instructions: {\n marginTop: theme.spacing(1),\n marginBottom: theme.spacing(1),\n },\n })\n);\n\nexport const getSteps = (intl: IntlShape) => [\n GetTranslation(intl, \"startCertification.personalDataStep.header\"),\n GetTranslation(intl, \"startCertification.courseModuleExamsStep.header\"),\n GetTranslation(intl, \"startCertification.locationDateStep.header\"),\n GetTranslation(intl, \"startCertification.modulesDetailsStep.header\"),\n GetTranslation(intl, \"startCertification.paymentAndCompletionStep.header\"),\n];\n\nconst getStepContent = (step: number) => {\n switch (step) {\n case StartCertificationSteps.PersonalDataStep:\n return ;\n case StartCertificationSteps.ModuleSelectionStep:\n return ;\n case StartCertificationSteps.ExamLocationAndDateStep:\n return ;\n case StartCertificationSteps.ModulesDetailsStep:\n return ;\n case StartCertificationSteps.PaymentAndCompletionStep:\n return ;\n case StartCertificationSteps.EmailConfirmationSent:\n return ;\n default:\n return \"Unknown step\";\n }\n};\n\nconst StartCertificationWizard: React.FC = () => {\n const classes = useStyles();\n const intl = useIntl();\n const { activeStep } = useSignUpContext();\n const steps = getSteps(intl);\n\n return (\n
\n \n {steps.map((label) => {\n const stepProps: { completed?: boolean } = {};\n const labelProps: { optional?: React.ReactNode } = {};\n return (\n \n {label}\n \n );\n })}\n \n {getStepContent(activeStep)}\n
\n );\n};\n\nconst StartCertificationWizardContainer: React.FC = () => (\n \n \n \n);\n\nexport default StartCertificationWizardContainer;\n","import Divider from \"@material-ui/core/Divider\";\nimport Grid from \"@material-ui/core/Grid\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport React, { FC } from \"react\";\nimport { ExpertRole } from \"../../data/constants\";\nimport { AssignedUserViewModel } from \"../../model/AssignedUserViewModel\";\nimport { RoomAssignmentViewModel } from \"../../model/RoomAssignmentViewModel\";\nimport RoomAssignmentCard from \"../roomAssignment/RoomAssignmentCard\";\nimport { ExamDayViewModel } from \"../../model/ExamDayViewModel\";\nimport { ExamSessionViewModel } from \"../../model/ExamSessionViewModel\";\nimport RoomAssignmentExpertSelect from \"./RoomAssignmentExpertSelect\";\nimport { ExpertViewModel } from \"../../model/ExpertViewModel\";\n\ninterface RoomAssignmentRowProps {\n examSession: ExamSessionViewModel;\n allExperts: ExpertViewModel[] | undefined;\n expertRole: ExpertRole;\n fixedExpertsLabel: JSX.Element;\n fixedExpertsPlaceholder: JSX.Element;\n reserveExpertsLabel: JSX.Element;\n reserveExpertsPlaceholder: JSX.Element;\n minimumFixedUsers: number;\n showAllExperts: boolean;\n examDay: ExamDayViewModel;\n roomAssignment: RoomAssignmentViewModel;\n change: (isFixed: boolean, experts: AssignedUserViewModel[]) => void;\n}\n\nconst RoomAssignmentRow: FC = ({\n examSession,\n allExperts,\n expertRole,\n fixedExpertsLabel,\n fixedExpertsPlaceholder,\n reserveExpertsLabel,\n reserveExpertsPlaceholder,\n minimumFixedUsers,\n showAllExperts,\n examDay,\n roomAssignment,\n change,\n}) => {\n if (allExperts === undefined) {\n return <>;\n }\n\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default RoomAssignmentRow;\n","import { Grid, LinearProgress, List } from \"@material-ui/core\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport { createStyles, makeStyles } from \"@material-ui/styles\";\r\nimport produce from \"immer\";\r\nimport React, { FC, useEffect, useState } from \"react\";\r\nimport { useIntl } from \"react-intl\";\r\nimport { useHistory, useParams } from \"react-router\";\r\nimport { useGetExamSessionQuery, useUpdateExpertAssignmentsMutation } from \"../../api/rtk/ExamSessionApi\";\r\nimport { useGetExpertsQuery } from \"../../api/rtk/ExpertApi\";\r\nimport { ExpertRole, getExpertRoleTranslationKey } from \"../../data/constants\";\r\nimport { AssignedUserViewModel } from \"../../model/AssignedUserViewModel\";\r\nimport { ExamDayViewModel } from \"../../model/ExamDayViewModel\";\r\nimport { GetLocalizedName } from \"../../model/ExamSessionViewModel\";\r\nimport { ExpertAssignmentRequestModel } from \"../../model/ExpertAssignmentRequestModel\";\r\nimport { RoomAssignmentViewModel } from \"../../model/RoomAssignmentViewModel\";\r\nimport { routesPaths } from \"../../Routes\";\r\nimport { GetTranslation } from \"../../translations/GetTranslation\";\r\nimport DefaultButtons from \"../common/buttons/DefaultButtons\";\r\nimport CustomSwitch from \"../common/CustomSwitch\";\r\nimport LocaleFormatDate from \"../common/dates/LocaleFormatDate\";\r\nimport FormGridCell from \"../common/FormGridCell\";\r\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\r\nimport RoomAssignmentRow from \"./RoomAssignmentRow\";\r\n\r\ntype RoomAssignmentBoardProps = {\r\n expertRole: ExpertRole;\r\n assignPreparationRooms: boolean;\r\n fixedExpertsLabel: JSX.Element;\r\n fixedExpertsPlaceholder: JSX.Element;\r\n reserveExpertsLabel: JSX.Element;\r\n reserveExpertsPlaceholder: JSX.Element;\r\n minimumFixedUsers: number;\r\n};\r\n\r\nconst useStyles = makeStyles(() =>\r\n createStyles({\r\n root: {\r\n width: \"100%\",\r\n },\r\n inline: {\r\n display: \"inline\",\r\n },\r\n })\r\n);\r\n\r\nconst RoomAssignmentBoard: FC = ({\r\n expertRole,\r\n assignPreparationRooms,\r\n minimumFixedUsers,\r\n ...labelsAndPlaceholders\r\n}) => {\r\n const classes = useStyles();\r\n const history = useHistory();\r\n const intl = useIntl();\r\n const { examSessionId, examDayId } = useParams<{ examSessionId: string; examDayId: string }>();\r\n const [examDay, setExamDay] = useState();\r\n const [showAllExperts, setShowAllExperts] = useState(false);\r\n const [updateExpertAssignments, { isLoading: isUpdateExpertAssignmentsLoading }] =\r\n useUpdateExpertAssignmentsMutation();\r\n const { data: examSession, isFetching: isExamSessionFetching } = useGetExamSessionQuery(examSessionId);\r\n const { data: allExperts } = useGetExpertsQuery();\r\n useEffect(() => {\r\n const examDay = examSession?.examDays.find((examDay) => examDay.id === examDayId);\r\n setExamDay(examDay);\r\n }, [examDayId, examSession]);\r\n\r\n if (isExamSessionFetching || isUpdateExpertAssignmentsLoading) {\r\n return ;\r\n }\r\n\r\n if (examSession === undefined || examDay === undefined) {\r\n return <>;\r\n }\r\n\r\n const filterRoomAssignments = (roomAssignments: RoomAssignmentViewModel[], assignPreparationRooms: boolean) =>\r\n roomAssignments.filter((roomAssignment) =>\r\n assignPreparationRooms ? roomAssignment.isPreparationRoom : !roomAssignment.isPreparationRoom\r\n );\r\n\r\n const handleSave = async () => {\r\n const data: ExpertAssignmentRequestModel[] = examDay.roomAssignments.map((roomAssignment) => ({\r\n roomId: roomAssignment.roomId,\r\n assignedUsers: roomAssignment.assignedUsers,\r\n }));\r\n updateExpertAssignments({\r\n examSessionId,\r\n examDayId: examDay.id,\r\n data,\r\n });\r\n };\r\n\r\n const handleClose = () => {\r\n const path = routesPaths.examDay(examSessionId, examDay.locationId, examDay.id);\r\n history.push(path);\r\n };\r\n\r\n const updateAssignedExperts = (\r\n roomAssignment: RoomAssignmentViewModel,\r\n areFixed: boolean,\r\n selectedExperts: AssignedUserViewModel[]\r\n ) => {\r\n setExamDay((prevDay) =>\r\n produce(prevDay, (draftDay) => {\r\n const assignment = draftDay?.roomAssignments.find((assignment) => assignment.id === roomAssignment.id);\r\n if (assignment === undefined) {\r\n return;\r\n }\r\n\r\n assignment.assignedUsers = [\r\n ...roomAssignment.assignedUsers.filter((user) => user.isFixed !== areFixed),\r\n ...selectedExperts,\r\n ];\r\n })\r\n );\r\n };\r\n\r\n const handleChange =\r\n (roomAssignment: RoomAssignmentViewModel) => (areFixed: boolean, selectedExperts: AssignedUserViewModel[]) => {\r\n updateAssignedExperts(roomAssignment, areFixed, selectedExperts);\r\n };\r\n\r\n const handleShowAllExpertsChange = (checked: boolean) => {\r\n setShowAllExperts(() => checked);\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n {GetLocalizedName(examSession)}\r\n \r\n \r\n :{\" \"}\r\n {GetTranslation(intl, getExpertRoleTranslationKey(expertRole))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n value={showAllExperts}\r\n onChange={handleShowAllExpertsChange}\r\n />\r\n \r\n \r\n \r\n {filterRoomAssignments(examDay.roomAssignments, assignPreparationRooms).map((roomAssignment) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default RoomAssignmentBoard;\r\n","import React from \"react\";\nimport RoomAssignmentBoard from \"./RoomAssignmentBoard\";\nimport { ExpertMinumimFixedUsers, ExpertRole } from \"../../data/constants\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\n\nconst ExpertsCorrectionExamAssignmentBoard: React.FunctionComponent = () => {\n return (\n }\n fixedExpertsPlaceholder={}\n reserveExpertsLabel={}\n reserveExpertsPlaceholder={}\n expertRole={ExpertRole.Prüfungsexperten}\n />\n );\n};\n\nexport default ExpertsCorrectionExamAssignmentBoard;\n","import React from \"react\";\nimport RoomAssignmentBoard from \"./RoomAssignmentBoard\";\nimport { ExpertMinumimFixedUsers, ExpertRole } from \"../../data/constants\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\n\nconst ExpertsOralExamAssignmentBoard: React.FunctionComponent = () => {\n return (\n }\n fixedExpertsPlaceholder={}\n reserveExpertsLabel={}\n reserveExpertsPlaceholder={}\n expertRole={ExpertRole.Prüfungsexperten}\n />\n );\n};\n\nexport default ExpertsOralExamAssignmentBoard;\n","import React from \"react\";\nimport RoomAssignmentBoard from \"./RoomAssignmentBoard\";\nimport { ExpertMinumimFixedUsers, ExpertRole } from \"../../data/constants\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\n\nconst ProctorsOralPreparationAssignmentBoard: React.FunctionComponent = () => {\n return (\n }\n fixedExpertsPlaceholder={}\n reserveExpertsLabel={}\n reserveExpertsPlaceholder={}\n expertRole={ExpertRole.Aufsichtsexperten}\n />\n );\n};\n\nexport default ProctorsOralPreparationAssignmentBoard;\n","import React from \"react\";\nimport RoomAssignmentBoard from \"./RoomAssignmentBoard\";\nimport { ExpertMinumimFixedUsers, ExpertRole } from \"../../data/constants\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\n\nconst ProctorsWrittenExamAssignmentBoard: React.FunctionComponent = () => {\n return (\n }\n fixedExpertsPlaceholder={}\n reserveExpertsLabel={}\n reserveExpertsPlaceholder={}\n expertRole={ExpertRole.Aufsichtsexperten}\n />\n );\n};\n\nexport default ProctorsWrittenExamAssignmentBoard;\n","import * as React from \"react\";\nimport { Route, Switch } from \"react-router-dom\";\nimport PrivateRoute from \"./PrivateRoute\";\nimport CandidateForm from \"./components/candidate/CandidateForm\";\nimport CandidateList from \"./components/candidate/CandidateList\";\nimport MyProfile from \"./components/candidate/myProfile/MyProfile\";\nimport CourseForm from \"./components/course/CourseForm\";\nimport CourseList from \"./components/course/CourseList\";\nimport ExamForm from \"./components/exam/ExamForm\";\nimport ExamList from \"./components/exam/ExamList\";\nimport ExamDayForm from \"./components/examDay/ExamDayForm\";\nimport ExamSessionForm from \"./components/examSession/ExamSessionForm\";\nimport ExamSessionList from \"./components/examSession/ExamSessionList\";\nimport ExamSessionLocationForm from \"./components/examSession/ExamSessionLocationForm\";\nimport ExamSessionCandidateForm from \"./components/examSession/examSessionCandidate/ExamSessionCandidateForm\";\nimport CorrectionExamsScheduler from \"./components/examsScheduler/correctionExams/CorrectionExamsScheduler\";\nimport ExpertExamsScheduler from \"./components/examsScheduler/expertExams/ExpertExamsScheduler\";\nimport OralExamsScheduler from \"./components/examsScheduler/oralExams/OralExamsScheduler\";\nimport WrittenExamsScheduler from \"./components/examsScheduler/writtenExams/WrittenExamsScheduler\";\nimport ExpertCorrectionAvailabilitySetup from \"./components/expert/ExpertCorrectionAvailabilitySetup\";\nimport ExpertExaminationAvailabilitySetup from \"./components/expert/ExpertExaminationAvailabilitySetup\";\nimport MyExpertProfile from \"./components/expert/MyExpertProfile/MyExpertProfile\";\nimport CandidateHome from \"./components/home/CandidateHome\";\nimport ExpertHome from \"./components/home/ExpertHome\";\nimport Home from \"./components/home/Home\";\nimport CancellationForm from \"./components/internalTask/Cancellation/CancellationForm\";\nimport LocationForm from \"./components/location/LocationForm\";\nimport LocationList from \"./components/location/LocationList\";\nimport Login from \"./components/login/Login\";\nimport ModuleForm from \"./components/module/ModuleForm\";\nimport ModuleList from \"./components/module/ModuleList\";\nimport UploadDocumentsForm from \"./components/personTask/uploadDocuments/UploadDocumentsForm\";\nimport RoomForm from \"./components/room/RoomForm\";\nimport RoomAssignmentForm from \"./components/roomAssignment/RoomAssignmentForm\";\nimport StartCertificationWizard from \"./components/startCertificationWizard_new/StartCertificationWizard\";\nimport ExpertsCorrectionExamAssignmentBoard from \"./components/userRoomAssignmentBoard/ExpertsCorrectionExamAssignmentBoard\";\nimport ExpertsOralExamAssignmentBoard from \"./components/userRoomAssignmentBoard/ExpertsOralExamAssignmentBoard\";\nimport ProctorsOralPreparationAssignmentBoard from \"./components/userRoomAssignmentBoard/ProctorsOralPreparationAssignmentBoard\";\nimport ProctorsWrittenExamAssignmentBoard from \"./components/userRoomAssignmentBoard/ProctorsWrittenExamAssignmentBoard\";\nimport { UserRoomAssignmentType } from \"./data/constants\";\nimport { PersonType } from \"./model/PersonType\";\n\nexport const routesPaths = {\n root: () => \"/\",\n login: () => \"/login\",\n internalLogin: () => \"/login/internal\",\n externalLogin: () => \"/login/external\",\n candidate: (candidateId: string) => `/candidate/${candidateId}`,\n candidates: () => \"/candidate\",\n candidateHome: () => \"/candidateHome\",\n candidateWizard: () => \"/startCertification\",\n course: (courseId: string) => `/course/${courseId}`,\n courses: () => \"/courses\",\n expert: (expertId: string) => `/expert/${expertId}`,\n expertHome: () => \"/expertHome\",\n location: (locationId: string, examSessionId?: string) =>\n examSessionId ? `/examSession/${examSessionId}/location/${locationId}` : `/location/${locationId}`,\n locations: () => \"/location\",\n exam: (examId: string) => `/exam/${examId}`,\n exams: () => \"/exam\",\n examSession: (examSessionId: string) => `/examSession/${examSessionId}`,\n examSessions: () => \"/examSession\",\n examSessionLocation: (examSessionId: string, locationId: string) =>\n `/examSession/${examSessionId}/location/${locationId}`,\n examSessionCandidate: (examSessionCandidateId: string, moduleId: string) =>\n `/examSessionCandidate/${examSessionCandidateId}/module/${moduleId}`,\n module: (moduleId: string) => `/module/${moduleId}`,\n modules: () => \"/modules\",\n room: (locationId: string, roomId: string) => `/location/${locationId}/room/${roomId}`,\n examDay: (examSessionId: string, locationId: string, examDayId: string) =>\n `/examSession/${examSessionId}/location/${locationId}/examDay/${examDayId}`,\n roomAssignment: (examSessionId: string, locationId: string, examDayId: string, roomAssignmentId: string) =>\n `/examSession/${examSessionId}/location/${locationId}/examDay/${examDayId}/roomAssignment/${roomAssignmentId}`,\n startCertification: () => `/startCertification`,\n expertAvailability: (examSessionId: string) => `/expertAvailability/${examSessionId}`,\n expertCorrectionAvailability: (examSessionId: string) => `/expertAvailabilityCorrection/${examSessionId}`,\n employeeOralExamsSchedule: (examSessionId: string, locationId: string) =>\n `/examSession/${examSessionId}/location/${locationId}/scheduleOralExams`,\n expertExamsSchedule: (examSessionId: string) => `/examSession/${examSessionId}/examsSchedule`,\n userRoomAssignment: (examSessionId: string, examDayId: string, userRoomAssignmentType: UserRoomAssignmentType) =>\n `/userRoomAssignment/${examSessionId}/examDay/${examDayId}/assignmentType/${userRoomAssignmentType}`,\n userProfile: (userId: string = \"\") => `/myProfile/${userId}`,\n expertProfile: (userId: string = \"\") => `/myExpertProfile/${userId}`,\n cancellationInternalTask: (internalTaskId: string) => `/internalTask/Cancellation/${internalTaskId}`,\n employeeWrittenExamsSchedule: (examSessionId: string, locationId: string) =>\n `/examSession/${examSessionId}/location/${locationId}/scheduleWrittenExams`,\n employeeCorrectionExamsSchedule: (examSessionId: string, locationId: string) =>\n `/examSession/${examSessionId}/location/${locationId}/scheduleCorrectionExams`,\n uploadDocumentsPersonTask: (examSessionId: string, moduleId: string) =>\n `/task/uploadDocuments/${examSessionId}/${moduleId}`,\n};\n\nconst Routes: React.FC = () => (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n);\n\nexport default Routes;\n","import { createStyles, makeStyles, MenuItem, Select } from \"@material-ui/core\";\nimport { Language as LanguageIcon } from \"@material-ui/icons\";\nimport * as React from \"react\";\nimport { FC } from \"react\";\nimport { Language, LanguageLabels } from \"../../../data/constants\";\n\nconst useStyles = makeStyles((theme) =>\n createStyles({\n root: {\n color: theme.palette.primary.contrastText,\n },\n selectIcon: {\n color: theme.palette.primary.contrastText,\n },\n languageIcon: {\n marginRight: \"0.5rem\",\n },\n })\n);\n\ninterface ILanguageSelectProps {\n language: Language;\n onChangeLanguage: (language: Language) => void;\n}\n\nexport const LanguageSelect: FC = ({ language, onChangeLanguage }) => {\n const styles = useStyles({});\n\n return (\n <>\n \n \n {Object.keys(Language).map((languageKey) => {\n const language = Language[languageKey as Language];\n return (\n onChangeLanguage(language)}>\n {LanguageLabels[language]}\n \n );\n })}\n \n \n );\n};\n","import { ListItem, ListItemIcon, ListItemText, Tooltip } from '@material-ui/core';\nimport { Lock } from '@material-ui/icons';\nimport TranslatedMessage from '../translations/TranslatedMessage';\nimport React from 'react';\n\ntype LogoutProps = {\n logout: () => void;\n}\n\nconst Logout: React.FunctionComponent = ({ logout }) => {\n return (\n }>\n \n \n \n \n } />\n \n \n );\n}\n\nexport default Logout;\n","import React from 'react';\nimport { ListItem, ListItemIcon, ListItemText, Tooltip } from '@material-ui/core'\nimport { LocationDescriptor } from 'history';\nimport { Link } from 'react-router-dom';\nimport { TranslationKey } from '../../translations/TranslationKey';\nimport TranslatedMessage from '../translations/TranslatedMessage';\n\ninterface ListItemLinkProps {\n to: LocationDescriptor;\n translationKey: TranslationKey;\n children: React.ReactElement;\n}\n\nconst ListItemLink: React.FC = ({ to, children, translationKey }) => {\n return (\n }>\n \n \n {children}\n \n } />\n \n \n );\n}\n\nexport default ListItemLink;\n","import { Divider, List, makeStyles } from \"@material-ui/core\";\nimport { AssignmentInd, Book, Dashboard, Person, Room, School, Star } from \"@material-ui/icons\";\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { Dispatch, bindActionCreators } from \"redux\";\nimport { ApplicationState } from \"../..\";\nimport { routesPaths } from \"../../Routes\";\nimport { useGetMeQuery } from \"../../api/rtk/MeApi\";\nimport { PersonType } from \"../../model/PersonType\";\nimport { SessionState } from \"../../store/session/SessionState\";\nimport { ActionCreators } from \"../../store/session/SessionStore\";\nimport Logout from \"../login/Logout\";\nimport ListItemLink from \"./ListItemLink\";\nimport CoursesLogo from \"./img/CoursesLogo.svg\";\nimport ModulesLogo from \"./img/ModulesLogo.svg\";\nimport { useIsAuthenticated, useMsal } from \"@azure/msal-react\";\nimport { SkipToken, skipToken } from \"@reduxjs/toolkit/dist/query\";\n\ntype NavigationListProps = SessionState & typeof ActionCreators;\n\nconst useStyles = makeStyles((theme) => ({\n list: {\n [theme.breakpoints.up(\"sm\")]: {\n paddingLeft: \"8px\",\n },\n },\n}));\n\nconst NavigationList: React.FC = () => {\n const cssClasses = useStyles();\n const [skipTokenState, setSkipTokenState] = useState(skipToken);\n const { data: me, isFetching: isMeFetching } = useGetMeQuery(skipTokenState);\n const { inProgress} = useMsal();\n\n const isAuthenticated = useIsAuthenticated();\n const { instance } = useMsal();\n\n useEffect(() => {\n if (isAuthenticated && inProgress === 'none') {\n setSkipTokenState(undefined);\n }\n }, [inProgress, isAuthenticated]);\n\n if (isMeFetching) {\n return ;\n }\n\n return (\n \n \n \n \n \n {me?.type !== PersonType.Internal && (\n \n \n \n )}\n {me?.type === PersonType.Expert && (\n \n \n \n )}\n {me?.type === PersonType.Internal && (\n \n \n \n )}\n {me?.type === PersonType.Internal && (\n \n \n \n )}\n {me?.type === PersonType.Internal && (\n \n \n \n )}\n {me?.type === PersonType.Internal && (\n \n \n \n )}\n \n \n {me?.type === PersonType.Internal && (\n <>\n \n \n \"\"\n \n \n \"\"\n \n \n \n \n \n \n \n )}\n \n {\n sessionStorage.clear();\n instance.logoutRedirect({\n account: instance.getActiveAccount(),\n postLogoutRedirectUri: instance.getConfiguration()?.auth?.redirectUri\n })\n }}\n />\n \n \n );\n};\n\nconst mapDispatchToProps = (dispatch: Dispatch) => bindActionCreators({ ...ActionCreators }, dispatch);\n\nexport default connect((state: ApplicationState) => state.sessionState, mapDispatchToProps)(NavigationList);\n","import {\n AppBar,\n Container,\n CssBaseline,\n Divider,\n Drawer,\n IconButton,\n makeStyles,\n Toolbar,\n Typography,\n} from \"@material-ui/core\";\nimport { ChevronLeft, Menu } from \"@material-ui/icons\";\nimport clsx from \"clsx\";\nimport React, { useEffect } from \"react\";\nimport { connect } from \"react-redux\";\nimport { useLocation } from \"react-router-dom\";\nimport { bindActionCreators } from \"redux\";\nimport { ApplicationState } from \"../..\";\nimport { routesPaths } from \"../../Routes\";\nimport { ActionCreators } from \"../../store/session/SessionLanguage\";\nimport { ActionCreators as LangActionCreators } from \"../../store/session/SessionLanguage\";\nimport { SessionState } from \"../../store/session/SessionState\";\nimport { LanguageSelect } from \"../common/language/LanguageSelect\";\nimport logo from \"./logo.svg\";\nimport NavigationList from \"./NavigationList\";\n\nexport const drawerWidth = 240;\nexport const navMenuLogoHeight = 120;\nexport const toolbarHeight = 64;\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: \"flex\",\n },\n loginBackground: {\n backgroundColor: \"#ededea\",\n },\n toolbar: {\n paddingRight: 24, // keep right padding when drawer closed\n },\n toolbarLogo: {\n maxHeight: 64,\n padding: \"13px\",\n },\n toolbarIcon: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n padding: \"0 8px\",\n ...theme.mixins.toolbar,\n },\n appBar: {\n zIndex: theme.zIndex.drawer + 1,\n transition: theme.transitions.create([\"width\", \"margin\"], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n },\n appBarShift: {\n marginLeft: drawerWidth,\n width: `calc(100% - ${drawerWidth}px)`,\n transition: theme.transitions.create([\"width\", \"margin\"], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.enteringScreen,\n }),\n },\n menuButton: {\n padding: 0,\n marginRight: 44,\n [theme.breakpoints.down(\"xs\")]: {\n marginRight: 36,\n },\n },\n menuButtonHidden: {\n display: \"none\",\n },\n title: {\n flexGrow: 1,\n },\n drawerPaper: {\n position: \"relative\",\n whiteSpace: \"nowrap\",\n width: drawerWidth,\n transition: theme.transitions.create(\"width\", {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.enteringScreen,\n }),\n },\n drawerPaperClose: {\n overflowX: \"hidden\",\n transition: theme.transitions.create(\"width\", {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n width: theme.spacing(7),\n [theme.breakpoints.up(\"sm\")]: {\n width: theme.spacing(9),\n },\n },\n content: {\n flexGrow: 1,\n height: \"calc(100vh - 64px)\",\n overflow: \"auto\",\n marginTop: \"64px\",\n },\n container: {\n paddingTop: theme.spacing(3),\n },\n}));\n\ntype NavContainerProps = typeof ActionCreators & typeof LangActionCreators & SessionState;\n\nconst NavContainer: React.FunctionComponent = ({ changeLanguage, children, language, detectLanguageIfPossible }) => {\n const cssClasses = useStyles({});\n const [open, setOpen] = React.useState(false);\n\n const location = useLocation();\n const isLogin = location.pathname === routesPaths.login();\n const showMenu = !isLogin;\n\n useEffect(() => {\n detectLanguageIfPossible();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const handleDrawerOpen = () => {\n setOpen(true);\n };\n const handleDrawerClose = () => {\n setOpen(false);\n };\n return (\n
\n \n \n \n {showMenu && (\n \n \n \n )}\n \"Logo\n \n \n \n \n {showMenu && (\n \n
\n \n \n \n
\n \n \n \n )}\n
\n {children && !isLogin && (\n \n {children}\n \n )}\n {isLogin && children}\n
\n
\n );\n};\n\nconst mapDispatchToProps = (dispatch: any) => {\n return bindActionCreators(ActionCreators, dispatch);\n};\n\nexport default connect((state: ApplicationState) => state.sessionState, mapDispatchToProps, null, { pure: false })(\n NavContainer\n);\n","import { SnackbarOrigin } from \"@material-ui/core/Snackbar\";\nimport { withSnackbar, WithSnackbarProps } from \"notistack\";\nimport * as React from \"react\";\nimport { connect } from \"react-redux\";\nimport { bindActionCreators, Dispatch } from \"redux\";\nimport { ApplicationState } from \"../..\";\nimport { actionCreators, NotificationsState } from \"../../store/notifications/NotificationStore\";\nimport { isTranslationKey, TranslationKey } from \"../../translations/TranslationKey\";\nimport TranslatedMessage from \"../translations/TranslatedMessage\";\n\ntype NotificationsProps = NotificationsState & typeof actionCreators & WithSnackbarProps;\n\nconst defaultAnchorOrigin: SnackbarOrigin = { horizontal: \"center\", vertical: \"top\" };\nconst tenSecondsInMs = 10000;\n\nclass Notifications extends React.Component {\n public componentDidUpdate = () => {\n this.displayNewErrors();\n };\n\n public render() {\n return [];\n }\n\n private displayNewErrors = () => {\n const { enqueueSnackbar } = this.props;\n const newErrors = this.props.errors;\n\n newErrors.forEach(({ error, data }) => {\n this.props.removeNotifications([error]);\n const message = isTranslationKey(error) ? (\n \n ) : (\n error\n );\n enqueueSnackbar(message, {\n anchorOrigin: defaultAnchorOrigin,\n autoHideDuration: tenSecondsInMs,\n variant: \"error\",\n preventDuplicate: true,\n key: error,\n });\n });\n };\n}\n\nconst notificationsWithSnackbar = withSnackbar(Notifications);\n\nconst mapStateToProps = (state: ApplicationState) => state.notificationsState;\nconst mapDispatchToProps = (dispatch: Dispatch) => bindActionCreators({ ...actionCreators }, dispatch);\nexport default connect(mapStateToProps, mapDispatchToProps)(notificationsWithSnackbar);\n","import Woff from \"./BuenosAiresWeb-Regular.woff\";\nimport Woff2 from \"./BuenosAiresWeb-Regular.woff2\";\n\nconst font = {\n fontFamily: \"BuenosAiresWeb\",\n fontStyle: \"normal\",\n fontWeight: 400,\n src: [\n `url(${Woff2}) format('woff2')`,\n `url(${Woff}) format('woff')`,\n ].join(\",\"),\n unicodeRange: \"U+000D-FB04\",\n};\n\nexport default font;","import Woff from \"./BuenosAiresWeb-RegularItalic.woff\";\nimport Woff2 from \"./BuenosAiresWeb-RegularItalic.woff2\";\n\nconst font = {\n fontFamily: \"BuenosAiresWeb\",\n fontStyle: \"italic\",\n fontWeight: 400,\n src: [\n `url(${Woff2}) format('woff2')`,\n `url(${Woff}) format('woff')`,\n ].join(\",\"),\n unicodeRange: \"U+000D-FB04\",\n};\n\nexport default font;","import Woff from \"./BuenosAiresWeb-Bold.woff\";\nimport Woff2 from \"./BuenosAiresWeb-Bold.woff2\";\n\nconst font = {\n fontFamily: \"BuenosAiresWeb\",\n fontStyle: \"normal\",\n fontWeight: 700,\n src: [\n `url(${Woff2}) format('woff2')`,\n `url(${Woff}) format('woff')`,\n ].join(\",\"),\n unicodeRange: \"U+000D-FB04\",\n};\n\nexport default font;","import Woff from \"./BuenosAiresWeb-BoldItalic.woff\";\nimport Woff2 from \"./BuenosAiresWeb-BoldItalic.woff2\";\n\nconst font = {\n fontFamily: \"BuenosAiresWeb\",\n fontStyle: \"italic\",\n fontWeight: 700,\n src: [\n `url(${Woff2}) format('woff2')`,\n `url(${Woff}) format('woff')`,\n ].join(\",\"),\n unicodeRange: \"U+000D-FB04\",\n};\n\nexport default font;","import Woff from \"./BuenosAiresWeb-Light.woff\";\nimport Woff2 from \"./BuenosAiresWeb-Light.woff2\";\n\nconst font = {\n fontFamily: \"BuenosAiresWeb\",\n fontStyle: \"normal\",\n fontWeight: 300,\n src: [\n `url(${Woff2}) format('woff2')`,\n `url(${Woff}) format('woff')`,\n ].join(\",\"),\n unicodeRange: \"U+000D-FB04\",\n};\n\nexport default font;","import Woff from \"./BuenosAiresWeb-LightItalic.woff\";\nimport Woff2 from \"./BuenosAiresWeb-LightItalic.woff2\";\n\nconst font = {\n fontFamily: \"BuenosAiresWeb\",\n fontStyle: \"italic\",\n fontWeight: 300,\n src: [\n `url(${Woff2}) format('woff2')`,\n `url(${Woff}) format('woff')`,\n ].join(\",\"),\n unicodeRange: \"U+000D-FB04\",\n};\n\nexport default font;","import Woff from \"./BuenosAiresWeb-Thin.woff\";\nimport Woff2 from \"./BuenosAiresWeb-Thin.woff2\";\n\nconst font = {\n fontFamily: \"BuenosAiresWeb\",\n fontStyle: \"normal\",\n fontWeight: 200,\n src: [\n `url(${Woff2}) format('woff2')`,\n `url(${Woff}) format('woff')`,\n ].join(\",\"),\n unicodeRange: \"U+000D-FB04\",\n};\n\nexport default font;","import Woff from \"./BuenosAiresWeb-ThinItalic.woff\";\nimport Woff2 from \"./BuenosAiresWeb-ThinItalic.woff2\";\n\nconst font = {\n fontFamily: \"BuenosAiresWeb\",\n fontStyle: \"italic\",\n fontWeight: 200,\n src: [\n `url(${Woff2}) format('woff2')`,\n `url(${Woff}) format('woff')`,\n ].join(\",\"),\n unicodeRange: \"U+000D-FB04\",\n};\n\nexport default font;","import red from \"@material-ui/core/colors/red\";\nimport { createMuiTheme } from \"@material-ui/core/styles\";\nimport BuenosAiresWeb_Regular from \"./fonts/BuenosAiresWeb-Regular\";\nimport BuenosAiresWeb_RegularItalic from \"./fonts/BuenosAiresWeb-RegularItalic\";\nimport BuenosAiresWeb_Bold from \"./fonts/BuenosAiresWeb-Bold\";\nimport BuenosAiresWeb_BoldItalic from \"./fonts/BuenosAiresWeb-BoldItalic\";\nimport BuenosAiresWeb_Light from \"./fonts/BuenosAiresWeb-Light\";\nimport BuenosAiresWeb_LightItalic from \"./fonts/BuenosAiresWeb-LightItalic\";\nimport BuenosAiresWeb_Thin from \"./fonts/BuenosAiresWeb-Thin\";\nimport BuenosAiresWeb_ThinItalic from \"./fonts/BuenosAiresWeb-ThinItalic\";\n\n// A custom theme for this app\nconst theme = createMuiTheme({\n palette: {\n primary: {\n main: \"#00224D\",\n },\n secondary: {\n main: \"#97B3CD\",\n },\n error: {\n main: red.A400,\n },\n background: {\n default: \"#fff\",\n },\n },\n typography: {\n fontFamily: [\"BuenosAiresWeb\", \"Roboto\", \"Helvetica\", \"Arial\", \"sans-serif\"].join(\",\"),\n },\n overrides: {\n MuiCssBaseline: {\n \"@global\": {\n \"@font-face\": [\n BuenosAiresWeb_Regular,\n BuenosAiresWeb_RegularItalic,\n BuenosAiresWeb_Bold,\n BuenosAiresWeb_BoldItalic,\n BuenosAiresWeb_Light,\n BuenosAiresWeb_LightItalic,\n BuenosAiresWeb_Thin,\n BuenosAiresWeb_ThinItalic,\n ],\n \".MuiButton-label\": {\n textWrap: \"nowrap\",\n },\n },\n },\n },\n});\n\nexport default theme;\n","import { ThemeProvider } from \"@material-ui/styles\";\nimport { ConnectedRouter } from \"connected-react-router\";\nimport { History } from \"history\";\nimport { SnackbarProvider } from \"notistack\";\nimport PropTypes from \"prop-types\";\nimport React, { useState, useEffect } from \"react\";\nimport { Provider } from \"react-redux\";\nimport { AnyAction, Store } from \"redux\";\nimport { ApplicationState } from \".\";\nimport LanguageProvider from \"./components/common/language/LanguageProvider\";\nimport NavContainer from \"./components/layout/NavContainer\";\nimport Notifications from \"./components/layout/Notifications\";\nimport Routes from \"./Routes\";\nimport theme from \"./theme\";\nimport { Configuration, EventMessage, EventType, PublicClientApplication, SilentRequest } from \"@azure/msal-browser\";\nimport { MsalProvider } from \"@azure/msal-react\";\nimport { getLastUserType } from \"./store/session/SessionStore\";\nimport { fetchUiAppRegistration } from \"./api/SettingsApi\";\nimport { LoadingSpinner } from \"./components/common/LoadingSpinner\";\nimport UrlHelper from \"./utils/UrlHelpler\";\nimport { setUpUser } from \"./api/UserApi\";\n\nconst Root = ({ history, store }: { history: History; store: Store }) => {\n const [clientApp, setClientApp] = useState(null);\n let registering = false;\n\n useEffect(() => {\n const type = getLastUserType() ?? \"EXTERNAL\";\n if (!registering) {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n registering = true;\n\n fetchUiAppRegistration(type)\n .then(async (config) => {\n store.dispatch({ type: \"SET_APP_REGISTRATION\", appRegistration: config });\n const configuration: Configuration = {\n auth: {\n authority: config.authority,\n clientId: config.clientId,\n redirectUri: UrlHelper.loginUrl(),\n knownAuthorities: [config.authority.split(\"/\")[2]],\n },\n cache: {\n cacheLocation: \"sessionStorage\",\n },\n };\n const clientApp = new PublicClientApplication(configuration);\n await clientApp.initialize();\n var activeAccount = clientApp.getActiveAccount();\n var allAccounts = clientApp.getAllAccounts();\n\n // To avoid the \"Something went wrong\" error message on new tabs we implemented the following workaround\n // causing the application to authenticate using acquireTokenRedirect as acquireTokenSilent\n // fails on new tabs but without involving the globalErrorHandler.\n const request = {\n scopes: config.scopes,\n account: activeAccount ?? allAccounts.length > 0 ? allAccounts[0] : undefined,\n } as SilentRequest;\n await clientApp.acquireTokenSilent(request)\n .then()\n .catch(async (err) => {\n await clientApp.acquireTokenRedirect(request)\n .then()\n .catch((err) => console.log(\"Error acquireTokenRedirect \", err));\n });\n\n clientApp.addEventCallback(async (message: EventMessage) => {\n if (message.eventType === EventType.LOGIN_SUCCESS && type === \"EXTERNAL\") {\n await setUpUser();\n }\n });\n\n store.dispatch({ type: \"SET_AUTH_CLIENT\", authClient: clientApp });\n setClientApp(clientApp);\n })\n .finally(() => (registering = false));\n }\n }, [store]);\n\n return (\n \n \n {clientApp !== null && (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )}\n {clientApp === null && }\n \n \n );\n};\n\nRoot.propTypes = {\n store: PropTypes.object.isRequired,\n history: PropTypes.object.isRequired,\n};\n\nexport default Root;\n","import Root from \"./Root\";\nimport { createBrowserHistory } from \"history\";\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { configureReduxStore } from \"./store/ApplicationStore\";\n\nconst baseUrl = document.getElementsByTagName(\"base\")[0].getAttribute(\"href\")!;\nconst history = createBrowserHistory({ basename: baseUrl });\nexport const store = configureReduxStore(history);\n\nexport type ApplicationState = ReturnType;\n\nexport type AppDispatch = typeof store.dispatch;\n\nReactDOM.render(, document.querySelector(\"#root\"));\n"],"sourceRoot":""}