{"version":3,"sources":["assets/spinner.svg","assets/illustrations/team-spirit.svg","assets/illustrations/tutorial.svg","assets/illustrations/graduation.svg","assets/illustrations/project-team.svg","assets/illustrations/career-progress.svg","assets/illustrations/certification.svg","assets/form-spinner.svg","assets/mbh-logo.png","assets/illustrations/personal-goals.svg","assets/illustrations/celebration.svg","assets/career-pathways.gif","assets/illustrations/updates.svg","assets/illustrations/shared-goals.svg","assets/illustrations/launching.svg","assets/illustrations/project-completed.svg","assets/brochures/Diploma of Project Management.pdf","assets/brochures/Cert IV Project Management.pdf","assets/illustrations/group.svg","assets/backup_logos/benevolent.PNG","assets/backup_logos/optus.png","assets/backup_logos/smith-family.PNG","assets/backup_logos/uniphi.png","assets/logos/shoalhaven.gif","assets/logos/westpac.gif","assets/backup_logos/CBRE.PNG","assets/illustrations/management.svg","assets/illustrations/certificate.svg","assets/illustrations/university.svg","assets/illustrations/workplace.svg","assets/brochures/Cert II Workplace Skills.pdf","assets/brochures/Cert III Business.pdf","assets/illustrations/stand-out.svg","assets/illustrations/leader.svg","assets/brochures/Cert III Business Administration.pdf","assets/brochures/case-study-design-landscapes.pdf","assets/brochures/case-study-a&b-mylec.pdf","assets/illustrations/task-list.png","assets/illustrations/process.png","assets/illustrations/collaboration.png","assets/illustrations/happygirlwithletter.png","assets/jobtrainer-banner.jpg","components/HomePageButtons/HomePageButtons.jsx","components/Header/Header.jsx","components/Clients/Clients.jsx","components/Value/Value.jsx","components/Testimonials/Testimonials.jsx","pages/Home/Home.jsx","pages/Conditions/Conditions.jsx","pages/Privacy/Privacy.jsx","functions/globalVariables.js","hooks/useDataFetch.js","ThemeContext.js","components/StudentPortalHome/StudentPortalHome.jsx","hooks/useDataPost.js","components/Checkbox/Checkbox.jsx","components/FormTypes/FormTypes.jsx","components/VETForm/VETForm.jsx","functions/setPostageForm.js","functions/updateStudentAddress.js","functions/dateTimeToDateString.js","components/AdministerStudentMenuItems/AdministerStudentMenuItems.jsx","components/StateDropdown/StateDropdown.jsx","components/StudentProfile/StudentProfile.jsx","functions/createVETQuestionObject.js","hooks/useDataFetchRefresh.js","components/DatePickerComp/DatePickerComp.jsx","components/ShowSortArrow/ShowSortArrow.jsx","functions/arrayToObject.js","functions/capitaliseEachWordOfQualName.js","components/StudentQualifications/StudentQualifications.jsx","functions/sortStudentCompetenciesTable.js","components/UneditableTextEditor/UneditableTextEditor.jsx","components/CopyTableHTML/CopyTableHTML.jsx","components/DragDropZone/DragDropZone.jsx","components/TrainingPlanInfoBoxes/TrainingPlanInfoBoxes.jsx","components/TrainingPlanNav/TrainingPlanNav.jsx","components/TextEditor/TextEditor.jsx","components/TrainingPlanComments/TrainingPlanComments.jsx","components/TrainingPlanTable/TrainingPlanTable.jsx","components/TrainingPlanTableContainer/TrainingPlanTableContainer.jsx","hooks/useCurrentQualFetch.js","components/StudentEvents/StudentEvents.jsx","components/StudentTrainingPlan/StudentTrainingPlan.jsx","functions/filterStudentQuals.js","components/SearchBar/SearchBar.jsx","functions/findStudentsWithNatFileErrors.js","components/AdminPortalHome/AdminPortalHome.jsx","functions/handleFilterChanges.js","components/StudentMenu/StudentMenu.jsx","components/AdminMenu/AdminMenu.jsx","components/NatFileErrors/NatFileErrors.jsx","components/DownloadPage/DownloadPage.jsx","functions/filterNatFileErrors.js","components/EditCompetencies/EditCompetencies.jsx","functions/validateCostField.js","components/EditQualifications/EditQualifications.jsx","hooks/useDoubleDataFetch.js","functions/filterCompetencyArrays.js","functions/assigningCompetencies.js","pages/QualCompEdit/QualCompEdit.jsx","components/AddQual/AddQual.jsx","components/AddComp/AddComp.jsx","components/AdministerStudent/AdministerStudent.jsx","components/AdminSettings/AdminSettings.jsx","components/AdminProgramStreams/AdminProgramStreams.jsx","functions/getRegions.js","components/AdminLocationsDelivery/AdminLocationsDelivery.jsx","components/AdminLocationsOffice/AdminLocationsOffice.jsx","components/AdminRegions/AdminRegions.jsx","components/AdminLocations/AdminLocations.jsx","components/AdminUsers/AdminUsers.jsx","components/EventsAddButton/EventsAddButton.jsx","components/EventsSummary/EventsSummary.jsx","components/Events/Events.jsx","components/AdminDuplicates/AdminDuplicates.jsx","components/AdminResults/AdminResults.jsx","components/AdminChangePassword/AdminChangePassword.jsx","pages/ManageFeeWaiverCodes/ManageFeeWaiverCodes.jsx","components/EventsTrainers/EventsTrainers.jsx","components/EventsCalendar/EventsCalendar.jsx","components/EventAddList/EventAddList.jsx","components/EventAttendeeList/EventAttendeeList.jsx","components/EventsCreateNew/EventsCreateNew.jsx","components/EventsEdit/EventsEdit.jsx","components/EventsAttendanceConfirmation/EventsAttendanceConfirmation.jsx","components/EventDetails/EventDetails.jsx","components/EventsCreateType/EventsCreateType.jsx","hooks/useFetchStudents.js","components/EventsAssignQual/EventsAssignQual.jsx","components/EventsGroupDetails/EventsGroupDetails.jsx","components/EventsGroups/EventsGroups.jsx","components/EventsReport/EventsReport.jsx","components/TrainingPlanAcceptanceReport/TrainingPlanAcceptanceReport.jsx","pages/StudentPortal/StudentPortal.jsx","pages/CodeOfPractice/CodeOfPractice.jsx","pages/RegConfirmation/RegConfirmation.jsx","pages/Qualifications/Qualifications.jsx","components/LogIn/LogIn.jsx","components/ContactDetailsForm/ContactDetailsForm.jsx","components/Signature/Signature.jsx","components/StepForm/StepForm.jsx","functions/formValidation.js","components/ViewOtherCourses/ViewOtherCourses.jsx","pages/DiplomaInPM/DiplomaInPM.jsx","pages/ContactUs/ContactUs.jsx","components/NavBar/NavBar.jsx","components/Footer/Footer.jsx","components/NavTiles/NavTiles.jsx","components/Guide/Guide.jsx","components/RenderRoute/RenderRoute.jsx","components/StageOne/StageOne.jsx","components/StageFourDiplomaPM/StageFourDiplomaPM.jsx","components/StageThreeCertIVPM/StageThreeCertIVPM.jsx","components/StageTwoCertIIIBiz/StageTwoCertIIIBiz.jsx","components/PathOneStages/PathOneStages.jsx","components/StageTwoCertIIIBizAdmin/StageTwoCertIIIBizAdmin.jsx","components/PathToUniOrWorkplace/PathToUniOrWorkplace.jsx","pages/CareerPathways/CareerPathways.jsx","pages/CertIIBusiness/CertIIBusiness.jsx","pages/CertIIIBusiness/CertIIIBusiness.jsx","pages/CertIVProjectManagement/CertIVProjectManagement.jsx","pages/WhyMBH/WhyMBH.jsx","pages/SmartAndSkilled/SmartAndSkilled.jsx","pages/CertIIIBizAdmin/CertIIIBizAdmin.jsx","pages/CertIIIBizAdminEdu/CertIIIBizAdminEdu.jsx","pages/CaseStudies/CaseStudies.jsx","pages/SetPassword/SetPassword.jsx","pages/JobTrainer/JobTrainer.jsx","components/ResetTokenNotFound/ResetTokenNotFound.jsx","pages/ResetPassword/ResetPassword.jsx","pages/ForgotPassword/ForgotPassword.jsx","App.js","serviceWorker.js","index.js"],"names":["module","exports","HomePageButtons","history","className","id","onClick","push","Header","src","Group","alt","Clients","Optus","SmithFamily","Uniphi","Shoalhaven","Westpac","CBRE","Benevolent","Value","Management","Testimonials","elems","instance","useEffect","document","querySelector","M","Carousel","init","indicators","duration","numVisible","getInstance","prev","class","href","style","fontSize","next","Home","testimonialsElement","setSelectedTestimonials","useRef","window","location","pathname","scrollTo","current","offsetTop","ref","Conditions","dispatch","target","rel","Privacy","to","baseUrl","useDataFetch","url","token","useState","isLoading","setIsLoading","error","setError","data","setData","undefined","fetch","headers","response","json","value","fetchData","ThemeContext","React","createContext","useThemeContext","useContext","ThemeProvider","children","studentID","parseInt","sessionStorage","getItem","selectedStudentId","authToken","userRole","userEmail","Provider","StudentPortalHome","useHistory","studentUrl","studentDetails","studentQualificationsUrl","studentQualifications","FirstName","Surname","Celebration","length","map","qualification","index","QuoteId","key","Qualification","AntaId","Name","ConfirmedCost","useDataPost","object","submitData","setSubmitData","method","body","JSON","stringify","then","catch","err","Checkboxes","currentQuestion","answersForCurrentQuestion","handleVetChange","answerObject","answer","type","name","Text","data-questionid","Id","defaultChecked","onChange","FormTypes","showQuestion","vetAnswersObject","route","studentVetAnswers","querySelectorAll","FormSelect","questionDisplay","DefaultVisibility","filter","VetQuestionId","i","Answers","VetAnswerId","display","Type","textAlign","Checkbox","e","answers","selectedAnswer","handleChange","disabled","selected","data-answerid","defaultValue","htmlFor","placeholder","VETForm","vetQuestions","vetObject","prevGroup","currAnswer","activatedQuestions","VisibilityActivators","deactivatedQuestions","VisibilityDeactivators","idOfQuestionToChange","getElementById","question","setPostageForm","classList","toggle","stateToCode","dateTimeToDateString","date","format","stringDate","d","Date","year","getFullYear","month","getMonth","day","getDate","zeroM","zeroD","AdministerStudentMenuItems","page","validateNatFormsUrl","validateNatforms","validateSTSUrl","validateSTS","Modal","qual","DOB","StartDate","EndDate","ATSI","ResidencyStatusAnswer","WorkInNSWAnswer","TraineeAnswer","SocialHousingAnswer","LTUAnswer","issue","arr","CompetencyId","Reason","StateDropdown","updateStudentDetails","state","refreshAddressState","setRefreshAddressState","State","StateCode","Description","State_Pos","StudentProfile","currentStudentID","elemDropdown","Tooltip","updateTextFields","DOMContentLoaded_event","createEvent","initEvent","dispatchEvent","stateUrl","isLoadingStudent","VETUrl","VETStudentUrl","setVetObject","tempVetObject","studentId","tempObject","StudentId","createVETQuestionObject","detailsToUpdate","checked","toast","html","innererror","message","displayLength","handleupdateStudentResponse","console","log","areChangesSaved","setAreChangesSaved","showPersonalDetails","setShowPersonalDetails","showVetDetails","setShowVetDetails","Spinner","IsDisabled","Title","Other","minLength","Phone","Mobile","Email","data-error","AltEmail","Organisation","Position","autoComplete","Sex","SaStudentId","onBlur","setTimeout","updateStudentResidentialAddress","AddressBuilding","AddressUnitNo","AddressStreetNo","AddressStreet","Suburb","maxLength","Postcode","getElementsByClassName","AddressBuilding_Pos","updateStudentPostalAddress","AddressUnitNo_Pos","AddressStreetNo_Pos","AddressStreet_Pos","Suburb_Pos","Postcode_Pos","studentQuestionId","studentAnswerId","options","selectedIndex","getAttribute","filteredArray","item","VetQuestionText","useDataFetchRefresh","refreshData","setRefreshData","refreshId","DatePickerComp","tabindex","defaultDate","handleDateUpdate","startDate","setStartDate","startRef","dateFormat","showYearDropdown","showMonthDropdown","obj","handleUpdate","tabIndex","onKeyDown","which","setOpen","handleOnKeyDown","ShowSortArrow","columnFieldName","sortConfig","fieldToSort","direction","arrayToObjectWithKey","array","keyField","reduce","capitaliseEachWordOfQualName","split","word","toUpperCase","charAt","substring","join","StudentQualifications","currentStudentId","elemsModal","qualificationsUrl","qualifications","specificQualUrl","qualSelected","setQualSelected","qualificationDetails","allStudentQualsUrl","isLoadingAll","allQuals","studentPendingUrl","pendingQuals","studentQualUrl","completedQuals","studentCompetetenciesUrl","studentCompletedCompetencies","registeredQuals","CertificateIssued","filteredQuals","includes","deliveryLocationUrl","deliveryLocation","programLocationUrl","programLocation","programStreamsUrl","programStreams","waiverCodesUrl","waiverCodes","filteredWaiverCodes","setFilteredWaiverCodes","allWaiverCodes","filteredCodes","code","WaiverCodeId","WaiverDesc","setSortConfig","sortedCompetencies","setSortedCompetencies","requestSort","handleCancelQuote","reload","handleQualUpdate","Object","entries","Active","parseFloat","handleQualDateUpdate","CertificateAttainedDate","resultsUrl","results","ResultId","ActivityStartDate","ActivityEndDate","qualRegistered","setqualRegistered","sendEmailToAdmins","qualId","CreatedAt","parse","now","studentCompetencies","copyOfStudentCompetencies","slice","sort","a","b","Result","localeCompare","Competency","sortStudentCompetenciesTable","Student","quals","ContractId","TrainingContractId","CertificateId","Funding","WaiverCode","PASNumber","progStream","ID","ProgStreamId","progLoc","OfficeId","TuitionFee","toFixed","Subsidy","OtherSubsidy","TotalFees","loc","DeliveryLocId","DeliveryLocation","deliveryLoc","fontWeight","competency","StudentQualificationId","paddingTop","paddingBottom","CompID","compDsc","result","pending","tuition","quoteID","handleGenerateQuote","dangerouslySetInnerHTML","__html","sId","qId","qualObject","funding","handleRegisterQual","UneditableTextEditor","initValue","textareaName","apiKey","height","menubar","inline","plugins","toolbar","onEditorChange","newText","CopyTableHTML","competencies","tableHTML","setTableHTML","isTableForCertificate","setIsTableForCertificate","resultsToFilterFor","copyTable","tableToCopy","percentWidthOfTable","htmlString","outerHTML","replace","yearCompleted","width","verticalAlign","DragDropZone","studentCoreElective","currentQualification","hoursUnitsObject","setHoursUnitsObject","antaID","qualName","isLoadingDrag","setIsLoadingDrag","hasAcceptedPlan","setHasAcceptedPlan","dateOfAcceptance","setDateOfAcceptance","personWhoAccepted","setPersonWhoAccepted","getFormattedDateOfAcceptance","dayjs","PlanAcceptedAt","elemSelect","PlanAcceptedBy","assign","hours","units","isStandardObj","IsStandard","NomHrs","totalHours","totalUnits","hrsPerUnit","Math","round","calcUnitHours","compObject","reducedStudentCompetencies","coreElectiveObject","compId","QualId","IsCore","getCoreElective","StudentQualification","availableCompUrl","isLoadingAllComp","qualCompetencies","availableCompetencies","comp","draggedElement","setDraggedElement","currentDivId","setCurrentDivId","indexDraggedEl","setIndexDraggedEl","idToDelete","setIdToDelete","onDragStart","ev","dataTransfer","effectAllowed","divId","dataset","idtodelete","onDragOver","preventDefault","onDrop","getData","appendChild","deleteCompetency","splice","addCompetency","handleAcceptTrainingPlan","acceptStatus","AcceptedAt","isDraggable","coreElective","draggable","data-id","data-index","data-idtodelete","fieldToUpdate","textA","textB","TrainingPlanInfoBoxes","currentQual","require","TrainingDeliveryDescription","toString","AssessmentSupportDescription","AssessmentTimeframeDescription","TrainingPlanNav","allStudentQuals","trainingPlanNumber","setTrainingPlanNumber","setCurrentQualId","courseId","useParams","handleTabClick","tabs","classToAdd","contains","remove","add","TextEditor","rowIndex","updateDescriptionField","handleDescriptionChange","descriptionField","addOrEditQual","initialValue","content","TrainingPlanComments","studentQual","handleUpdateComments","editComments","setEditComments","Comments","TrainingPlanTable","deliveryMode","trainers","handleUpdateTrainer","overflow","ContractCreatedAt","DeliveryMode","TrainerID","trainer","Trainer","TrainingPlanTableContainer","currentQualId","useCurrentQualFetch","StudentEvents","studentFirstName","studentEventsUrl","isLoadingStudentEvents","studentEvents","allEventsUrl","isLoadingAllEvents","allEvents","trainersUrl","eventsAttendedByStudent","setEventsAttendedByStudent","upcomingEvents","setUpcomingEvents","pastEvents","setPastEvents","existingEvents","allEventsObj","EventID","isUpcomingEvent","endDateTime","currentDay","currentTime","dayOfEvent","endTimeOfEvent","isAfter","isSame","filterUpcomingEvents","event","EndDateTime","filterPastEvents","StartDateTime","formatEventDate","endDate","typeOfField","toLocaleString","weekday","formattedStartDate","hour","minute","formattedEndDate","displayTrainerName","trainerId","Subject","StudentTrainingPlan","currentStudentQual","setCurrentStudentQual","qualsAwaitingQuotes","setQualsAwaitingQuotes","studentQualsUrl","isLoadingStudentQuals","studentQuals","qualToDisplay","Disabled","getQualsAwaitingQuotes","isLoadingComp","coreElectiveUrl","trainerUrl","isLoadingTrainers","trainersToSelect","setTrainersToSelect","10","20","30","40","SearchBar","active","setActive","setAwaitingQuote","setAwaitingAcceptance","setAcceptedNoContractID","setUnregistered","selectedQualID","setSelectedQualID","setShowNatFileErrors","setIsDisabledStudent","setShowDontKnowYet","setShowSelfFunded","onQualChange","resetQualSelectors","allQualsSelector","filteredQualsSelector","trim","valueToFilterBy","toLowerCase","filteredData","datum","Superseded","arrayToObject","AdminPortalHome","onStudentSelect","isDisabledStudent","isLoadingStudents","allStudents","students","setStudents","studentQualsURL","setStudentQualUrl","isLoadingStudentQualActive","studentQualActive","allActiveStudents","setAllActiveStudents","awaitingQuote","studentsAwaitingQuote","setStudentsAwaitingQuote","awaitingAcceptance","studentsAwaitingAcceptance","setStudentsAwaitingAcceptance","acceptedNoContractID","studentsAcceptedNoContractID","setStudentsAcceptedNoContractID","allStudentsAwaitingQuote","allStudentsAwaitingAcceptance","allStudentsAcceptedNoContractID","unregisteredStudentsURL","unregisteredStudents","unregistered","allUnregisteredStudents","setAllUnregisteredStudents","unregStudents","s","natFileErrorsURL","isLoadingNatFileErrors","natFileErrors","showNatFileErrors","studentsWithNatFileErrors","setStudentsWithNatFileErrors","erroredStudents","self","findIndex","t","createObjectOfStudentsWithNatFileErrors","qualificationsURL","isLoadingQuals","fetchedQuals","setAllQuals","filteredStudentObject","setFilteredStudentObject","showDontKnowYet","showSelfFunded","dontKnowYetStudents","setDontKnowYetStudents","selfFundedStudents","setSelfFundedStudents","handleStudentFiltering","student","dontKnowYetArray","selfFundedArray","filteredStudents","studentObject","handleQualFilterChange","StudentMenu","menuStyle","menuSmall","mbhLogo","clear","AdminMenu","handleMenuClick","NatFileErrors","findStudentsWithNatFileErrors","DownloadPage","setNatFileErrors","stsFileErrors","setSTSNatFileErrors","period","setPeriod","allQualifications","chosenQual","setChosenQual","chosenQualAntaId","setChosenQualAntaId","handleFileSave","filename","link","createElement","setAttribute","downloadUrl","URL","createObjectURL","Blob","click","removeChild","generateExcelFile","activityPeriodId","notification","blob","handleFileSelect","fileSelector","addEventListener","submitFile","uploadMsg","setUploadMsg","stopPropagation","selectedFile","files","formData","FormData","append","qualID","anataID","handleQualChange","filteredErrors","selectedAntaId","natError","filterNatFileErrors","generateNATFiles","handlePeriodChange","RowsUpdated","Message","EditCompetencies","qualCompetenciesUrl","isLoadingQualCompetencies","allQualCompetencies","competenciesUrl","allCompetencies","qualToFilterBy","setQualToFilterBy","showSuperseded","setShowSuperseded","filteredCompetencies","setFilteredCompetencies","setQualifications","indexOf","newCompetenciesArray","qualComp","updateCompetenciesArray","rows","endpoint","currentCompetency","CompeducationId","VetFlag","validateCostField","isNaN","EditQualifications","setFetchData","deleteQual","setDeleteQual","isLoadingQualifications","filteredCompetencyArrays","setFilteredCompetencyArrays","url1","url2","isLoading1","setIsLoading1","isLoading2","setIsLoading2","firstURLData","setfirstURLData","secondURLData","setsecondURLData","useDoubleDataFetch","assignedCompetencies","twoFilteredArrays","filteredAssignedCompetencies","assignedCompetenciesObject","filterCompetencyArrays","updateQualsArray","handleCheckboxChange","compToAdd","addAssignedCompetency","deleteAssignedCompetency","handleDeleteQualResponse","status","messageEl","errorMsg","getStudentNames","textContent","el","studentNames","innerHTML","handleDeleteCompetencyResponse","tempArray","handleDeleteCompetency","reset","onInput","Cost","Package","Level","Electives","ProgramRecognitionId","autocomplete","LevelOfEducationId","FieldOfEducationId","ANZSCO","VETFlag","IsPartQual","handleDeleteQualification","color","CoursesDescription","QualCompEdit","match","useRouteMatch","AddQual","submitted","setSubmitted","isFormValid","classes","handleClick","AddComp","qualCompUrl","isAddingCompetency","setIsAddingCompetency","qualCompObject","setQuals","handleCompQualMapping","createCompetency","mapCompetencyToQual","AdministerStudent","currentStudent","checkIfRegisteredUrl","checkIfRegistered","regEmailSent","setRegEmailSent","checkAPIResponse","AdminSettings","AdminProgramStreams","progUrl","progs","updateProgramStream","prog","ProgStream","title","padding","justifyContent","newProgStream","newProgStreamDescription","userSelect","regionsObject","getIDfromRegion","region","AdminLocationsDelivery","currOffice","officeObj","setOfficeObj","deliveryLocationsUrl","isLoadingLocations","deliveryLocations","trainingRegionsUrl","isLoadingRegions","filteredLocations","setFilteredLocations","filtered","officeLocationsUrl","isLoadingOffice","officeLocations","updateOfficeLocation","addOfficeObj","updateAddOfficeObj","o","VetLoc","office","StateId","Country","TrainingRegionId","keys","data-target","marginLeft","errorString","hasError","addOfficeLocation","AdminLocationsOffice","setCurrOffice","Address","Address2","RegionId","ContactName","Fax","f","deleteOfficeLocation","AdminRegions","trainingRegions","setRegion","showAddForm","setShowAddForm","isUpdatingRegion","setIsUpdatingRegion","setIsCreatingRegion","isDeletingRegion","setIsDeletingRegion","onRegionInfoChange","fieldToChange","newOrCurrentRegion","alignItems","marginRight","VetRef","AdminLocations","scrollIntoView","behavior","AdminUsers","EventsAddButton","Dropdown","dropdown","EventsSummary","setCurrentPage","routingPortal","setIsAttendanceMarked","eventsSummaryUrl","events","todaysEvents","setTodaysEvents","todaysDate","filterTodaysEvents","eventsRegUrl","eventsReg","filteredEventsReg","reg","StudentID","eventsRegIdList","markAttendance","hasAttended","eventId","eventObj","timestamp","regEventObj","HasAttended","Events","AdminDuplicates","duplicateNames","activeStudents","studentToId","studentFromId","mergeObject","AdminResults","updateResult","resultObj","updateResultObj","Mode","VetRefId","Claimable","NotYetStarted","IsCompleted","AdminChangePassword","isChangingPassword","setIsChangingPassword","isPasswordChanged","setIsPasswordChanged","currentPassword","setCurrentPassword","newPassword","setNewPassword","confirmNewPassword","setConfirmNewPassword","setIsFormValid","FormSpinner","checkFormIsValid","OldPassword","NewPassword","ConfirmPassword","ManageFeeWaiverCodes","WaiverStrategy","newCode","setNewCode","codesUrl","updateCode","currentCode","deleteCode","for","min","max","WaiverDescription","Trainers","trainersURL","existingTrainers","setExistingTrainers","deletedTrainers","setDeletedTrainers","toggleIsDisabledFilter","setToggleIsDisabledFilter","hasPayrateError","setHasPayrateError","currentTrainer","setCurrentTrainer","isPayrateFieldValid","Payrate","Qualifications","trainerObj","setTrainerObj","keysLength","tempObj","populateTrainerObj","onTrainerInfoChange","selectedTrainer","resetTrainerObj","localizer","momentLocalizer","moment","EventsCalendar","eventsUrl","eventsArr","eventItem","start","end","toDate","defaultView","onSelectEvent","eventSelected","eventPropGetter","backgroundColor","EventAddList","registrations","attendeeList","setAttendeeList","studentGroupsUrl","isLoadingGroups","studentGroups","listToAdd","setListToAdd","studentsAdded","setStudentsAdded","registrationsObj","checkForDuplicates","studentList","studentObj","handleAttendeeListChange","listWithoutDuplicates","tempAttendeeList","studentsToAdd","Students","group","GroupName","registrationList","attendee","EventAttendeeList","allAttendees","deleteAttendee","isStudentObjectNested","EventsCreateNew","currentPage","typeUrl","types","locationUrl","locations","newEventId","setNewEventId","showAddListForm","setShowAddListForm","newAttendeeList","setNewAttendeeList","appendCurrentTimezone","isDST","initialDateTime","DeliveryLocationID","EventTypeID","SupportID","IsCancelled","setEventObj","tooltippedElems","input","option","surname","firstLetter","handleNameCategorisation","updateeventObj","handleDateChange","newDate","isValid","handleTimeChange","currentDate","sender","postAttendeeList","eventID","formattedList","List","attendeeValue","setAttendeeValue","filteredList","Autocomplete","groupBy","getOptionLabel","renderInput","params","TextField","variant","label","clearOnBlur","clearOnEscape","inputValue","onInputChange","newInputValue","reason","newValue","newStudent","studentToAdd","listObj","marginTop","InputLabelProps","shrink","inputProps","step","EventsEdit","eventUrl","isLoadingEvent","eventObject","eventRegistrationsUrl","firstName","eventHasNoAttendees","setEventHasNoAttendees","attendeeObj","attendees","updateEventObject","saveAttendeeList","studentToDelete","rego","registrationId","tagName","addAttendee","EventsAttendanceConfirmation","isLoadingEventsReg","FullName","AttendanceConfirmed","markAcceptance","EventDetails","isLoadinglocation","eventtypeUrl","isLoadingEventType","eventtype","isLoadingTrainer","supportUrl","isLoadingSupport","support","eventDay","eventTime","startDateTime","EventsCreateType","eventTypesUrl","eventTypes","allTypes","setAllTypes","updateEventType","filteredTypes","deleteEventType","newEventTypeDescription","EventsAssignQual","emailToUse","associatedQuals","setAssociatedQuals","showAssignQualDropdown","setShowAssignQualDropdown","isStudentAdded","setIsStudentAdded","EventsGroupDetails","studentsInGroup","handleQualSelect","filteredStudentQuals","addAllStudentsFromQual","data-position","data-tooltip","email","altEmail","EventsGroups","shouldFetchData","setShouldFetchData","currentGroupIndex","setCurrentGroupIndex","QualificationId","currentGroup","setCurrentGroup","useFetchStudents","showCreateGroupSection","setShowCreateGroupSection","showEditGroupSection","setShowEditGroupSection","setFilteredStudentQuals","handleShowCreateGroupSection","operation","uniqueStudents","currStudent","onGroupNameChange","handleSaveGroup","fetchMethod","groupId","restOfObject","EventsReport","studentsUrl","isLoadingEvents","registrationsUrl","isLoadingRegistrations","studentsObj","setStudentsObj","eventsObj","setEventsObj","eventTypesObj","setEventTypesObj","trainersObj","setTrainersObj","selectedEventID","setSelectedEventID","setSelectedStudents","setFilteredStudents","filteredRegistrations","setFilteredRegistrations","filteredRegistrationsForSpecificEvent","setFilteredRegistrationsForSpecificEvent","filterByEvent","setFilterByEvent","filterByStudent","setFilterByStudent","reportData","setReportData","showReport","setShowReport","studentHasRegistrations","setStudentHasRegistrations","eventFilterValue","setEventFilterValue","isEventSelected","setIsEventSelected","doesEventHaveRegistrations","setDoesEventHaveRegistrations","isArrowVisible","setIsArrowVisible","studentNameAscending","setStudentNameAscending","eventNameAscending","setEventNameAscending","startDateAscending","setStartDateAscending","selectedEventRegistrations","currentAttendees","studentsToFilter","csvReport","handleFilterToggle","filterByColumn","columnToFilterBy","copyOfReportData","firstSurname","studentName","pop","secondSurname","firstEvent","eventName","secondEvent","firstDate","secondDate","ascendingOrder","getTime","descendingOrder","CssTextField","withStyles","root","borderColor","multiple","filterSelectedOptions","values","studentRegistrations","renderOption","props","tableRows","trainerID","supportID","eventType","attendanceMarked","attendanceConfirmed","row","eventDetailsUrl","open","goToEventDetails","TrainingPlanAcceptanceReport","qualsUrl","studentQualsObj","setStudentQualsObj","filterByQual","setFilterByQual","qualFilterValue","setQualFilterValue","selectedStudentsObj","planAcceptedBy","planAcceptedAt","setItem","goToStudentDetails","handleAcceptPlan","StudentPortal","Sidenav","edge","setMenuSmall","btnSize","isAuth","exact","path","render","CodeOfPractice","RegConfirmation","CareerPathways","usemap","top","left","LogIn","isLoggingIn","setIsLoggingIn","redirectUrl","boxShadow","time","password","details","errorMsgEl","crossDomain","qs","access_token","Role","userName","error_description","timeEnd","loginUser","ContactDetailsForm","contactObject","elemDatePicker","Datepicker","yearRange","updateResidentialAddress","copyResidentialIntoPostal","updatePostalAddress","Signature","StepForm","studentQualificationUrl","studentVETUrl","isLoadingQual","isLoadingVET","showStep","setShowStep","showHideSteps","show1","show2","show3","show4","submitQualData","setSubmitQualData","submitStudentVetData","setSubmitStudentVetData","isLoadingStudentId","studentData","isLoadingStudentQual","isLoadingStudentVet","submitVetandQualData","action","formValidation","margin","ViewOtherCourses","DiplomaInPM","Certification","Brochure","Updates","ProjectCompleted","SharedGoals","Launching","ContactUs","setName","setEmail","setMessage","isSending","setIsSending","onSubmit","resetFields","NavBar","imgClass","whiteSpace","Footer","icon","faFacebook","faLinkedin","faBlogger","NavTiles","data-value","Guide","RenderRoute","Component","renderType","componentType","StageOne","YouTubeTutorial","TeamSpirit","Graduation","StageFourDiplomaPM","StageThreeCertIVPM","ProjectTeam","PersonalGoals","Certificate","StageTwoCertIIIBiz","CareerProgress","PathOneStages","StageTwoCertIIIBizAdmin","PathToUniOrWorkplace","University","Workplace","pathOne","pathOneStageOne","pathOneStageTwo","pathOneStageThree","pathOneStageFour","pathTwo","pathTwoStageOne","pathTwoStageTwo","pathTwoStageThree","ScrollSpy","onStageSelect","stageToScrollTo","pathSelected","pathOneStages","pathTwoStages","forEach","stage","showHideSubStages","CertIIBusiness","CertIIIBusiness","CertIVProjectManagement","WhyMBH","StandOut","SmartAndSkilled","Leader","CertIIIBizAdmin","CertIIIBizAdminEdu","CaseStudies","CaseStudy1","CaseStudy2","frameBorder","allow","allowFullScreen","SetPassword","isSuccess","setIsSuccess","url_without_hash","regObject","searchParams","get","validatePassword","password1","password2","postData","JobTrainer","GirlWithLetter","TaskList","Process","Collaboration","ResetPasswordNoTokenFound","ResetPassword","isTokenExpired","setIsTokenExpired","doesEmailExist","setDoesEmailExist","isResettingPassword","setIsResettingPassword","setPassword","confirmPassword","setConfirmPassword","splitUrl","ResetTokenNotFound","validateInfo","Password","Token","ForgotPassword","isSendingLink","setIsSendingLink","sendResetPasswordEmail","App","Boolean","hostname","theme","createMuiTheme","palette","primary","light","main","dark","contrastText","secondary","ReactDOM","StrictMode","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.affbbc94.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/spinner.e29961b9.svg\";","module.exports = __webpack_public_path__ + \"static/media/team-spirit.d0fb61c1.svg\";","module.exports = __webpack_public_path__ + \"static/media/tutorial.cccbdcd9.svg\";","module.exports = __webpack_public_path__ + \"static/media/graduation.2747db51.svg\";","module.exports = __webpack_public_path__ + \"static/media/project-team.4704f6b0.svg\";","module.exports = __webpack_public_path__ + \"static/media/career-progress.e12d295a.svg\";","module.exports = __webpack_public_path__ + \"static/media/certification.701990e8.svg\";","module.exports = __webpack_public_path__ + \"static/media/form-spinner.21493abc.svg\";","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/personal-goals.aac6ed20.svg\";","module.exports = __webpack_public_path__ + \"static/media/celebration.62dd6c8a.svg\";","module.exports = __webpack_public_path__ + \"static/media/career-pathways.cf5c4274.gif\";","module.exports = __webpack_public_path__ + \"static/media/updates.23fdc01d.svg\";","module.exports = __webpack_public_path__ + \"static/media/shared-goals.37e2b950.svg\";","module.exports = __webpack_public_path__ + \"static/media/launching.ceb432f6.svg\";","module.exports = __webpack_public_path__ + \"static/media/project-completed.ad0028b4.svg\";","module.exports = __webpack_public_path__ + \"static/media/Diploma of Project Management.78a6664e.pdf\";","module.exports = __webpack_public_path__ + \"static/media/Cert IV Project Management.137dff6e.pdf\";","module.exports = __webpack_public_path__ + \"static/media/group.f9b5a6c2.svg\";","module.exports = __webpack_public_path__ + \"static/media/benevolent.3350b900.PNG\";","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/smith-family.b1e1d58a.PNG\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEoAAAA2CAYAAABgMA/LAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAABCxSURBVGhD7VoJbFTntUZCqoRUCT1VFSLCCg+RvqqvSZoWlZClEd30CkkIgaRPLH7YxgsGDMEEcCBuaGlIXDDYxg2EPSleAiTB1FAM3sAxtsezeFbP4vG+jPd9G9tfz/nvjGdsz/XS1yauxCdd7vDfe/97z3fP8p3/eg4eYVp4RNQ08YioaeIRUdPEI6KmiUdETROPiJompkXUyMiI69fU4HNncv6/C2bkUcPDw+jt7UV7eztaW1vFvrOzE/39/WPImS5ZfE5fXx8GBgZcI7MX0yKqp6cX9fUNKCuzw2g0Qa830N4Ag0EPk8lE42WoqqpCU1MThoaGXFdNja6uLlRXVwvCZzsmJYqdor29k8goRXGxSmxKpQpqtRrakhKoVDxWTGNKFBUVoYTG2traXFdPDvbO8vJycU1zc7NrdPZiUqKam1uh0xmhUBQTKRpoNFoiiQlSC4KYHN7cvwsKCoR3yYWd93hjYyPNp6G5FaipqXGNzl7IEjU46ITFYiUCFGRQCb15HXmOWhBlMBjpmAV2ux2VlZUifDj0rFYrKioq6NpB1yxj4Saqu7ubQtcoiGJv5LlmErLfBGSJam1tF+So1RrKSUbhUbzZbHZ0dHTB6XS6zvSAjeXEzGElBz7HZrMJL3QTxaQxebMZskRx8uZQ4zBjL1Io+M3bqOr1uc6YGkzY+DB0OBwix3F+Y6I4R/F+toefLFF1dfXQavXCiziJs3e1tk4vUcuBJQVXSibKTRDvCwsLRRVlqTBbIUtUU1PLmJAzm61kSL/r6MzBWoulBCdvJojJchPGFVSv15EX17vOHpv4ZwNkiWpr63ARVUIGaclIi9BTjJnawCFYUVEu8pG3N7kTOesvs9kschUTOhshSxSLQRaWrJvYo9iImRDFHuE+r6WlVXgNz8V7rVYqEkwWywQGV0tO8LNVU8kSxdWJBSEnXaWyWIRGR0eH6+j0wcnfaLQIspkgiSQtzakR5LirJ3sV34sr4myUCrJEMVhlc5iwmOSQqa2tdR2ZHoaHR4iMKrpeEqwcylxJWY9xBe3q8kgC9mD2Nr7PbPSqSYlyexXnEg4Lrkwz0Tv19SwFOOQ4N7lFq4rmMVFr1DEmhDk3cZ7iCsheNZkW+yYwKVEMDjcOO25P2OC6ujrXkcnB+YwVPOsvJsjtSexZLD08JEk/OKexwuf78P3Yw2YTpiSKDeCQ45Bgr2Id5N34+irjQ0NOsdKgJP3FBDFhTFZRkZLGy32qekZLS4t4GZzkqyurZlWu8knUeOO5LeFmlzUQhwaX9J6eHtfRiWCv4xBjD/L2Jm+J4Qs8p4G8ie/DL4TXumYLZD1qPFlshFswsmdZrRafSrq9rV1UNm59NC5lr1CooNMZxJINY6IPSuBmmufleyjVKmprqn167DeBKYmibk3sGR0dvDZlIq8qEKsKHF7eAlEi04hilYIqGMkBTYkglVcfuHd02yxrO43XVJE3FtN1RSqYSLt1dc+OXCWfo2SM4fzEYVFYqBCeYrXahVbiGlVTUwuFkloUdTFMWhUMpL9UJC3KSZUPDHvlG55bZv6mRioeajM0haS3lFrU1dT5IJbvxnnu66uMUyZzX2ij5riUSnxRYTGKFRqhiWqqamGgMU76OtJDBg0lckURnadHd6+Uz9g0GX5G0d3VCwsJVA2FLBcDo9Hso8ecJUSxMVM9QieFodlkI+/xJGsmSU3JW6c1kpFqEXrN1L4weM7JTKOGR+x7ejtgKqU5tay9uH3SUjX85tfUfRLlfl+et+/bD3q6+1BeVgkVhYhYt6K8pDPYYLY6YLc7yMCOUWKGaI7pvP/GJge0JgMs5RUwWyqh15nhqG+iR/D9DL7Aq7MtLW1UNf95i4GyRPFirrdhg9SOWCm88jR6mGk/4DrqqG2FUqFDCSlvHemlPIUBSV/k4/PbBaiqbxHzyJk4PhQH+kh/2evxoMiIT6/dw+Wkv6LgYQlaWzoxNDJMDTS/AJtYdq6h3FVb2yCWg/p6x4Ymt02nT5/DrVt3ZDWbN1i/cd5lvShXZafpUeQ9A05EvR+HJcvX4MCJy2ikCjfkHIbNWI2SYiPlJS15gBUpaVl4/uVwvLgmDMk3s1HuaIWDclpvbxcJSKaXZqeJ+R4DtJdS/Aj6u3tQa6+jnFSHP3+Sgf96Zi2eWrYa5z5OgrsOfPZZMg4f/h2OHDmC6Og/4PB7R3EyNhFJV1JFnnSDw9XfPwgxMcfRO4luc+P69evYuHEjzp8/L6vdZHPUeF67Bofwv+HvYc68ZVj/7mlYHE1oqGtAicICvaIUOvIom92OT65l4vEn12EJGRr/lxsoMNpQpNOj1GxAdU05yYQ6OBqa0dTcBgeFR53DgXrSS3YKNz0ZqNdVIvbCDfg9uQpPLnsZl8+mup5gGAmnTiAkJAj7396P6HeP4F3adu3ci6DAMCLlJCrsleJMbYkeQUGhOHk8Af09U6+apqamErH+gii5FRKfRI3Cyw27BkewKfIE5iz8DVYduoQ8vYU0ExGktMGoskBLSrysshJXM4qx5MebsGTFRnz8RRYUJjvyRVNdBLWqgLYiUQC0BgvUdL1Sq6UKV0Tz5ENL+xKqcrcL1Dh46i849lEyKmwN4v5O5wDi408gODgQZ89eoEJShtqqetz6awaiDkRj88YA3PgyXZyr1xmxNSQc8Sf/jP6+qb9Cc8jl5uYKjSjXjE9OlBe6iSj/A4mY47cGqyLPILNQKySCrsRMBuqhJWHZThUuS10Bv+e2YvGLwUjPN6CDBKPdboWtrAJWEqgmkgtl5GV6YyW+0lqhIMItpRaYqb/TkeZS0jzFJDTLmtrR5eXWAz3dOJ2QiKDQEKR8cR0DTs8nsdTUq3jjjQ24ePFT8X8ztUohweE4QR7ldMr3i7wMxNt0IEMUF+uxVaqH8tEmImqu3yt4PeIksvM09EClVOm0pKcKUWbQifNyDbVYsDwYi54Lxj1lqRgbHh6AlpJ0pooIstagsECPU+fTcOh4Cj48m4Ybd4tg1JXBqi2FnUmjxlltrYCFyOpwJeOhwT6cOXUWW4iA5BvXqUh4kjTnmDff3IBLlz4R/+fvkWFh28gDE6lPdcLhaBRtUUEBf8QwTehTuRVjIT1Z/zopUd4JvZ9y1Kb98Zi76GVBVM5X3OSWQsGfnUiJtzmkDwO5+koseC4EC18IQYbCJMbaSDBujkrAD1dH4vcfpSEw8hiWLvst/J7egMee2oBn1u7F5S/z0NMnvRqNuQI/eT0Uy9/Yjly1UYwNE2FnEs6RR+1E4sULMFCrVFNVjaysHByK/h3lmC1IT78lzuUl7IiI3URUAjIzs/HBBzHYvn0ntm0Lx759UUhKSqZq6VkczM9/iKioKCQnJ8t+CZIlins8b6J6nJSj3k7AHCJqLRGV+1BNJZU/EnDzWoGRIalEP2Cing/GwhVBuFkoGVnf2Yuf+X+AuQt+iyde3ImVG/bBf38cFYc4+C0Pw9zH12J1xHFUUoVk5BntmP/DNVj4o9dxO08txpiocx9dQuj2SETsj8LBd6JxKOpd7NgRQQk+FMePn0R5uSuZU1O+b98BREZGUsJ/D3FxCfj00yuU8I8hPJwJ2yEIdiMj4y4RvRmJiYmyC5MyRA3DSTXZO7pbOvrw5u5YCr3VWLc7HvcfqkiBq6iamShhcuMqhUKuvgILKUctJLLSCiSimnqd+E3oKXzrsUCsD0pAvqYM3f1DlL8G8P7FLMx/KhRPrj+IfOrxGEXmSjHH4pXhyC6UvHKERCQTFRi2G3sPReP3h48i+p3DtP8jUlJSRZ/pBq9URETsIaL2486du2LJmfVRc3OLKAShoeG4du1zIUwZWVlZwtsuXbo0c49igTeaLkecVPprsWbbUSJqFV7bRR6Vp4KNckELL+kKv5PCholasDwAi14Io9CTDG/rHcTqoFjMW7AZp89kizE30vONWPizt7BsfTTySWYw1KZKPP7sVvznygjkFklzsEedjj9Nobcd126lo46kiaOOpEV9g/ibLW9wSxUcHIajR/80urTjRlraTezatQdXr15Hf79kIRMVFhYmiJL7XCbrUVKWYoygq7WRVHcZ1myPoTB5Fa/uOI77X2lEvzcefyuwYsEzAfBbEYY8VZkYa6MS/drWGMz3ewNJKQ/EGGU98e/t/BIs/dUerFh3EA+VEilqUwUWPxuA7zFRpNMYw0NOnIqLg//WQGQX3BdjcuDFwuDgEArHE5SgPSSyV3Ee2707ksTrtdE/JnETdfny5ZkSJZHEW1dnByqtJmh1NvzfwbOUOzbix69EIj2jQJzpDXJCvP/RTXz7+/54YuVekgCSBmohov4n6AjmkbS4eM1tpOT2t/P1eOKXb+En6w8gTyuRUlRaThIjAEtXUjJ3e9TQIBLjY7E5aDNu5UhJW8CdRL3AyTw0dBuOHTs55kvP0NAwbt5MF0SxRw0M/L+JktDNK442M4zaYhgtFXjv43Q89lI45i99FXuiP4ajzSPm+umB0+4W4ge/DsW3lqzDa6GxaHRIKtdBRL0QeBjzFq/FBeoDvXEzzwS/X7yF763fh2zSZIxCImrRs4H4/sodyBslagCn4o8hIDQQGbl3yOc9Omo8+LMXexS3MJ2dnoU/XoPn0Nvz1l7hUf390vNnZmb+o6HHbkrNJTWfCiWp6RJS06Rvvnigx8s7j+HbS9Zg8bKtWB0Sj10xV/F23DUERZ/H0+t2Ye5jL1F+CkDK38jjXMq+ipL5io2HMPc7v8K5FDdRUk778oEO330xDEtf2YWcYilxK40VWPTUZvz3T7eigHIYwzk8iNjYD7HJfyPuZmXSiA9XcoG/Qm/ZEkBExVAV82gjbpBv3LhBlXIHrlxJGiXl3r171PIEUaI/O9NkzotzndRcqlBQlEdkUfuhN6GsoQOZJXYEvnMai34UgDnzf4k5//ELzPnOz2n/PHka9Wev7kLMFao0A56a2dAziFX+72Ded3+OT0ZzlERUOuU6v5e2kJbagUKV5D0lxio8sWwTnv6pPxSk7hlM1ImTMYKAuxlZYkwOvAy9bds2ylHsUZ48yh6Vnp5OFTGCtNSVUaKys7NJYoSIXm9GHsUJUEtxzl+ITaUk7GpqxOIZd/uM8voWEog5OHLqcxz6UwoOfpiM6NhUxF1Io0pnhPvRRkY4PEbQR2X45p08nKFm12KR8hZXUkZ5fRMufXkXybdyUNsg6ajG1i5c/uwuklIz0Ej3YjBRmhKl6MmqK/mjgxj2iYaGBty/f5+qn2bCXxzzZ/y8vDyUlpaOfg7j74k5OTniA6/cXwuOEuVeh+GJa2prYLaUoq6+Fr1d3rKez5E8wRuSyd4gsUokjQgy6MaCMC+IHmtwQp4Rs/vqvWhoeHjiXXzB13qS3BoTY7Jj3hBEeZ/cQzHd1taCQaoyE8HGsWtO9dBOF0nS7wlEEXhdSiJqLPETX8MkmJ6N/xRMCL3xDI/9HxvGRI1fumBSeIyPj396/v9k5vM17mu9wXOOv47nGj//1wPZZO4GPy4FEW0sQtkY3iQD3I/t/fjjzRh/jq/j7Ftuectwj0l3H38Fj/t6If9a+PYofhbXc/DPPnrgAdokgyRIocNj0jnuTfIDb10vjUmES+eMwjUZj4+nRJrPM48HfCZ79ZiZ/uWY0qP4MfmBpc1jjGd9wQM+Jh33/GJIRvs2jc/iWcYf81w9HmPn/rowJVGPwAD+Dmj4vyZdHegaAAAAAElFTkSuQmCC\"","module.exports = \"data:image/gif;base64,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\"","module.exports = \"data:image/gif;base64,R0lGODlhnwAsALMAAMjKy5KXmPDt7f7Ix6mtrUxUVXR6e2BnaP5lYv6ppzdAQtfZ2SkxM/0YE////wAAACwAAAAAnwAsAAAE/9DJSau9OOvNu/9gKI5kaZ5oqq5s675wLM90bd94ru987//AoHBILBqPyKQSiGg4n1CE4AKtOgeXhLWKXf4G2yg1fLVoyY2EN4h2TivtLqWJlq97dLIaXq8I2g13QGdkCBZxFYRhhi8LAI+CHIBvE4hzbXstDJsMAZEbeWGZEpYSf22ULJydnxqKW4yVfROvVrEOAAYFnAcEqRIEupwKBwYADgcHqwXJBxLNvbgGCpsFvhQLAQbKm8TXFtkH1JvFBCinaKmlDqFbewIGq6sKx6a78pye+KsSqwEB+wpQ2jfM3AR4BBk4QwFoVCl0ZLAIuLfJQACKCt5wq/bvwC59Cf/7caKIr8CEbgc6znszUR6zewtPtLNFoVQtKxIAcjLYsqIDAf78DMxXAZ+xXPIMGlhQgcCqevFGpgJg8MTNKpRKzazCaBwDAxScdsO1ysAvCkHRrqrqIKrPDE9/yju7oqGsiHf1kOV09JHYTUy9MlBg7ELak0SxLfPz6FHcv19lbBVDatZVKFMgJ2RwTHM3s2o3eQrNqii/nxcTHtO5ia2Ly0/ybuky+Qkj1ps5S1iwUd5oB4dFirYgz8ECwftWx40BUVRlvA7s7h3eQQABkpvqBQee+OCqAwK8KvgWF/dvGIAYIYJdRu7IEAtIjt6+HbIByEwRZ5/OwKRkQM+FgUXubbFN4FZkGAhw1gJplWVaNZT0lB1ulACwHElgxQAGJtH1kR4F4S0TQGPa0GNhSgAsIAAAJNUj2IgATOESAY+Q5IyFI9F44Fcx4sgLjVQZkKEKBDZgSBzsNfDLcbk5ttmQuHFyTG4QSoDdMPJ0tllMKQhQJHvsIWDHQQEgN9IC8RFkTQVR6uZPm6CZ0lt/VGUpAQBz8vLCAHz26eefgAb6J10VLEDAPzCmsuKh/xCQnwUrNqodUZGOSJehATh6EKMxgggAojQS2goO241qqgelnqoqXN2t6ioGqb4q66y01mrrrbjmquuuvPbqqw8RAAA7\"","module.exports = __webpack_public_path__ + \"static/media/CBRE.9b9f488f.PNG\";","module.exports = __webpack_public_path__ + \"static/media/management.2a4a5ce1.svg\";","module.exports = __webpack_public_path__ + \"static/media/certificate.1548fdaf.svg\";","module.exports = __webpack_public_path__ + \"static/media/university.85ffc903.svg\";","module.exports = __webpack_public_path__ + \"static/media/workplace.aeab9bae.svg\";","module.exports = __webpack_public_path__ + \"static/media/Cert II Workplace Skills.da4eab8b.pdf\";","module.exports = __webpack_public_path__ + \"static/media/Cert III Business.88269633.pdf\";","module.exports = __webpack_public_path__ + \"static/media/stand-out.99df3f4a.svg\";","module.exports = __webpack_public_path__ + \"static/media/leader.f2b4e7a8.svg\";","module.exports = __webpack_public_path__ + \"static/media/Cert III Business Administration.4e442480.pdf\";","module.exports = __webpack_public_path__ + \"static/media/case-study-design-landscapes.50f55aca.pdf\";","module.exports = __webpack_public_path__ + \"static/media/case-study-a&b-mylec.541d4e22.pdf\";","module.exports = __webpack_public_path__ + \"static/media/task-list.2d8f94ee.png\";","module.exports = __webpack_public_path__ + \"static/media/process.75a1e84e.png\";","module.exports = __webpack_public_path__ + \"static/media/collaboration.0d8564f9.png\";","module.exports = __webpack_public_path__ + \"static/media/happygirlwithletter.e32ece31.png\";","module.exports = __webpack_public_path__ + \"static/media/jobtrainer-banner.92ed548c.jpg\";","import React from 'react'\r\n\r\n\r\nconst HomePageButtons = ({ history }) => {\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n )\r\n}\r\n\r\nexport default HomePageButtons\r\n","import React from 'react';\r\nimport './Header.scss';\r\nimport Group from '../../assets/illustrations/group.svg'\r\nimport HomePageButtons from '../HomePageButtons/HomePageButtons';\r\n\r\nconst Header = ({ history })=> {\r\n return(\r\n
\r\n
\r\n
\r\n \"Group\r\n
\r\n
\r\n

Let us guide your career

\r\n
\r\n

\r\n mbh is a registered training provider and has been delivering nationally recognised qualifications to people across all walks of life since 2003.\r\n Come and join us at our locations across the Shoalhaven, Illawarra and Greater Sydney. Check out our history.push('/career-pathways')}>career pathways, call 1300 79 48 68 or history.push('/contact-us')}>contact us for further information.\r\n

\r\n

\r\n mbh is a registered training provider and has been delivering nationally recognised qualifications to a diverse range of people since 2003. \r\n mbh's mission is to grow individual careers. We take people from all walks of life and kick start or re-energise their working life. \r\n

\r\n The pinnacle point of this is project management but you can start with \r\n the fundamentals of business and work your way up. We see managing by project as a way of working \r\n unmatched by other methods and project management as the pinnacle management discipline for achieving \r\n goals. \r\n

Come and join us at our locations across the Shoalhaven, Illawarra and Greater Sydney. Check out our history.push('/career-pathways')}>career pathways, call 1300 79 48 68 or history.push('/contact-us')}>contact us for further information.\r\n

\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default Header;","import React from 'react'\r\nimport Benevolent from '../../assets/backup_logos/benevolent.PNG'\r\nimport Optus from '../../assets/backup_logos/optus.png'\r\nimport SmithFamily from '../../assets/backup_logos/smith-family.PNG'\r\nimport Uniphi from '../../assets/backup_logos/uniphi.png'\r\nimport Shoalhaven from '../../assets/logos/shoalhaven.gif'\r\nimport Westpac from '../../assets/logos/westpac.gif'\r\nimport CBRE from '../../assets/backup_logos/CBRE.PNG'\r\n\r\nimport './Clients.scss'\r\n\r\n\r\nconst Clients = () => {\r\n return (\r\n
\r\n

Our Clients

\r\n
\r\n
\r\n \"Optus\r\n
\r\n
\r\n \"Smith\r\n
\r\n
\r\n \"UniPhi\r\n
\r\n
\r\n \"Shoalhaven\r\n
\r\n
\r\n \"Westpac\r\n
\r\n
\r\n \"CBRE\r\n
\r\n
\r\n \"Benevolent\r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default Clients","import React from 'react';\r\nimport './Value.scss';\r\nimport Management from '../../assets/illustrations/management.svg'\r\nimport HomePageButtons from '../HomePageButtons/HomePageButtons';\r\n\r\n\r\nconst Value = ({ history }) => {\r\n return (\r\n
\r\n

What do we do?

\r\n
\r\n
\r\n

\r\n No job? Not currently working in projects? Don't worry, we work with a variety of industry partners \r\n (e.g. employment agencies, local employers, community groups and associations) to create community \r\n based projects for you to obtain the qualification that gets you in the door and your career on the \r\n upward path. Check out our career pathways or contact us for more.\r\n

\r\n \r\n
\r\n
\r\n \"Management\r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default Value;","import React, {useEffect} from 'react';\r\nimport M from 'materialize-css';\r\nimport './Testimonials.scss';\r\n\r\nconst Testimonials = () => {\r\n var elems;\r\n var instance;\r\n useEffect(()=>{\r\n elems = document.querySelector('.carousel');\r\n var instances = M.Carousel.init(elems, {indicators: true, duration: 200, numVisible: 3});\r\n instance = M.Carousel.getInstance(elems);\r\n });\r\n\r\n return(\r\n
\r\n \r\n

Client Testimonials

\r\n \r\n
\r\n \r\n
\r\n
\r\n

“Working with mbh is a real and enjoyable partnership, the qualification tools are immediately implementable and this has delivered positive outcomes for our organisation”

\r\n

Pam White A&B Mylec | Business Improvement Manager

\r\n
\r\n
\r\n

“In engaging mbh to deliver this training, their expertise in Project Management impressed us. I would highly recommend mbh as a provider of Project Management training”

\r\n

Neva Jones City of Marion | Learning and Development Partner

\r\n
\r\n
\r\n

“The service provided once you have completed the qualification is unquestionable - just being able to pick up the phone when you need clarification speaks for itself”

\r\n

Luisa McKay | Project Manager

\r\n
\r\n
\r\n

“I really appreciated the detailed and constructive feedback on my assessment pieces that was provided with such prompt and thoughtful attention”

\r\n

Laura Hall BUPA | IT Project Office Coordinator

\r\n
\r\n
\r\n

“The qualification was streamlined and less formal than other institutes whilst supporting individuals and the group in developing their skills”

\r\n

John Visser

\r\n
\r\n
\r\n

“Sarah’s ongoing support throughout the training was invaluable – Sarah was able to clarify any questions, be a sounding board to run ideas past and encourage ideas into practice”

\r\n

Donna O'Connor | NSW council employee

\r\n
\r\n
\r\n \r\n
\r\n
\r\n ); \r\n}\r\n\r\nexport default Testimonials;","import React, { useEffect, useRef } from 'react';\r\nimport Header from '../../components/Header/Header';\r\nimport Clients from '../../components/Clients/Clients';\r\nimport Value from '../../components/Value/Value';\r\nimport Testimonials from '../../components/Testimonials/Testimonials';\r\n\r\nconst Home = ({ history, setSelectedTestimonials }) => {\r\n\r\n const testimonialsElement = useRef()\r\n\r\n useEffect(() => {\r\n if (window.location.pathname === '/testimonials') {\r\n window.scrollTo(0, testimonialsElement.current.offsetTop)\r\n } else {\r\n window.scrollTo(0, 0)\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\nexport default Home;","import React from 'react'\r\nimport './Conditions.scss';\r\n\r\nconst Conditions = ({ dispatch, setSelectedTestimonials }) => {\r\n\r\n return (\r\n
\r\n
\r\n

Enrolment Conditions

\r\n
How to Enrol
\r\n

You can register by contacting mbh course co-ordinator on 1300 79 48 68 or register online now

\r\n
Confirmation of Enrolment
\r\n

A confirmation of enrolment will be forwarded to you via email. If you have not received confirmation of your enrolment 5 days before the qualification starts, please contact mbh to ensure that you are enrolled.

\r\n
Cancellations and Reschedules
\r\n

\r\n All monies will be refunded if notice of cancellation of qualification attendance is made one week prior to qualification commencement.\r\n

\r\n If a cancellation is made inside one week then a qualification credit is applied for attendance at a later date. Once qualification attendance has been made, no refunds are applicable if assessments are not completed.\r\n

\r\n
Payment
\r\n

\r\n All prices, unless otherwise stated, include materials, marking of assessments, luncheons and/or teas and coffees for delegates.\r\n

\r\n Payments for the entire qualification fee or a deposit of $1,500 (whichever is the lower) is required up front for all mbh qualifications. Final payments are due immediately following the completion of face to face training.\r\n

\r\n Certificates will not be issued until all outstanding monies have been remitted.\r\n

\r\n Payment can be made by cheque, credit card or direct bank transfer.\r\n

\r\n
Conditions
\r\n

\r\n Unforeseen circumstances may necessitate the appointment of a different lecturer/speaker to those indicated in associated documentation.\r\n

\r\n mbh reserves the right to cancel or discontinue any qualification for whatever reason. In this event, delegates who may have registered for such a qualification will be informed and all fees will be refunded in full. On some qualifications, the number of seats is limited and acceptance will be based on a first-come, first-served basis.\r\n

\r\n mbh reserves the right to make changes to the qualification syllabi, schedules, fees and venues to meet changed circumstances. However, mbh will make every effort to communicate any changes to our clients as early as possible.\r\n

\r\n
Unique Student Identifier (USI)
\r\n

\r\n January 1st 2015 new legislation requires all students who are studying a nationally recognised training in Australia to apply for a Unique Student Identifier (USI).\r\n

\r\n It is a requirement that students provide their USI. RTO's cannot issue your certificate unless you have provided your USI.\r\n

\r\n Your USI will link to an online account where you will be able to access your training records.\r\n

\r\n To obtain your USI go to https://www.usi.gov.au/students/get-a-usi\r\n

\r\n
\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default Conditions\r\n","import React from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport './Privacy.scss';\r\n\r\nconst Privacy = () => {\r\n return (\r\n
\r\n
\r\n

Privacy & Security Statement

\r\n
Encryption
\r\n

\r\n Unencrypted credit card details will not be stored on our server, and will be sent only in encrypted form. We use industry-standard Secure Sockets Layer (SSL) technology to keep your transaction secure.\r\n

\r\n
Your Choice
\r\n

\r\n If you do not wish to place your order over the Internet or still feel it is unsafe to transfer your credit card details over the Internet, we offer you the option of faxing in your order and credit card details, or alternatively we are able to call you during business hours.\r\n

\r\n Phone: 1300 79 48 68\r\n

\r\n
Collecting Anonymous Information
\r\n

\r\n We automatically collect general website traffic information (such as how many people have visited the site, most popular pages etc). This information is collected into aggregate results in order to evaluate our service and business practice in an effort to provide you with a better online experience.\r\n

\r\n
Collecting Personal Information
\r\n

\r\n We collect personal information submitted by you to process and advise you of the status of your order. We do not disclose personal information for any other purpose. Under no circumstances will we sell or receive payment for licensing or disclosing your personal information.\r\n

\r\n
Privacy
\r\n

\r\n Personal information like address, phone, e-mail etc is only accessible by our staff. Any credit card / payment details are erased by our system when the transaction is cleared, your other details will be sent to our archive to keep a record of your results.\r\n

\r\n
Spam
\r\n

\r\n We will never knowingly send you electronic messages without your consent. For more information on the 'Spam Act 2003' please visit the Australian Government's website.\r\n

\r\n
Australian Law
\r\n

\r\n We comply with the Trade Practices Act 1974, state based Fair Trading Acts and Sale of Goods Acts, the Consumer Credit Code, the Electronic Transactions Act 1999 the Information Privacy Principles set out in the Commonwealth Privacy Act 1988; and the Privacy Amendment (Private Sector) Act 2000 (Cth).\r\n

\r\n
Privacy Links
\r\n

\r\n Office of the Australian Information Commissioner (OAIC)
\r\n Australian Government - The Treasury - Guidelines for Electronic Commerce and Australian Consumer Law
\r\n MBH Management Pty Ltd ABN (Australian Business Number): 88 090 244 296\r\n

\r\n
Feedback and Complaints Handling Procedure
\r\n

\r\n We welcome any feedback you have to offer and will attend to all complaints promptly. Please contact us or write to us at Suite 3.02 St Martins Tower Level 3 / 31 Market St\r\nSydney, NSW, 2000.\r\n

\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default Privacy;\r\n","export const baseUrl = \"https://mbhtraining.com.au/backend\";\r\n\r\n","import { useState, useEffect } from 'react'\r\n\r\nexport const useDataFetch = (url, token) => {\r\n\r\n const [isLoading, setIsLoading] = useState(false)\r\n const [error, setError] = useState(null)\r\n const [data, setData] = useState([])\r\n \r\n useEffect(() => {\r\n\r\n if (url === \"\")\r\n return;\r\n // const ac = new AbortController();\r\n\r\n const fetchData = async () => {\r\n \r\n setIsLoading(true)\r\n try {\r\n let response;\r\n if (token !== undefined){\r\n response = await fetch(url, {headers: {'Authorization': `Bearer ${token}`}})\r\n }else\r\n {\r\n response = await fetch(url)\r\n }\r\n \r\n const json = await response.json()\r\n json.value? setData(json.value) : setData(json)\r\n setIsLoading(false)\r\n } catch(error) {\r\n setError(error)\r\n setIsLoading(false)\r\n }\r\n }\r\n fetchData();\r\n // return () => ac.abort(); \r\n }, [url])\r\n\r\n return [ isLoading, data, error ]\r\n\r\n}","import React, { useContext } from 'react'\r\n\r\nconst ThemeContext = React.createContext()\r\n\r\nexport const useThemeContext = () => {\r\n return useContext(ThemeContext)\r\n}\r\n\r\nexport const ThemeProvider = ({ children }) => {\r\n const studentID = parseInt(window.sessionStorage.getItem('mbhStudentId')) // When viewing info as a student\r\n const selectedStudentId = window.sessionStorage.getItem('currentStudent') // When viewing student info as an admin\r\n const authToken = window.sessionStorage.getItem('mbhToken')\r\n const userRole = window.sessionStorage.getItem('mbhUserRole')\r\n const userEmail = window.sessionStorage.getItem('mbhUserName')\r\n\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n}","import React from 'react';\r\nimport { baseUrl } from '../../functions/globalVariables';\r\nimport { useDataFetch } from '../../hooks/useDataFetch';\r\nimport Celebration from '../../assets/illustrations/celebration.svg';\r\nimport './StudentPortalHome.scss';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { useThemeContext } from '../../ThemeContext';\r\n\r\nconst StudentPortalHome = () => {\r\n\r\n let history = useHistory()\r\n const { studentID, authToken } = useThemeContext()\r\n\r\n const studentUrl = `${baseUrl}/api/students/${studentID}`;\r\n const [ isLoading, studentDetails, error ] = useDataFetch(studentUrl, authToken);\r\n\r\n //Check whether there is a pending qualification to display under information\r\n const studentQualificationsUrl = `${baseUrl}/api/studentqualifications?$expand=Qualification&$filter=StudentId eq ${studentID} and CertificateIssued ne 'Yes' and Disabled eq false`;\r\n const [ isLoadingPending, studentQualifications, errorPending ] = useDataFetch(studentQualificationsUrl, authToken);\r\n\r\n return (\r\n
\r\n
\r\n
\r\n

Welcome {studentDetails.FirstName} {studentDetails.Surname}

\r\n

This is your Student Portal.

Come back here anytime to manage your qualifications and personal details.

\r\n
\r\n
\r\n \"Celebration\"\r\n
\r\n
\r\n
\r\n
\r\n

Information:

\r\n
    \r\n {\r\n studentQualifications.length ?\r\n studentQualifications.map((qualification, index) => (\r\n qualification.QuoteId===null?\r\n
  • Your chosen qualification {qualification.Qualification.AntaId} {qualification.Qualification.Name} is awaiting a quote.
  • \r\n :\r\n !qualification.ConfirmedCost?\r\n
  • \r\n The quote for {qualification.Qualification.AntaId} {qualification.Qualification.Name} is available and ready to be accepted in the \r\n history.push('/student-portal/training-plan')}> Training Plan page.\r\n
  • \r\n :\r\n
  • \r\n )):null\r\n }\r\n
\r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default StudentPortalHome\r\n","import { useState, useEffect } from 'react'\r\nimport { baseUrl } from '../functions/globalVariables';\r\nimport { ACTIONS } from '../App';\r\n\r\nexport const useDataPost = (url, object, submitData, setSubmitData, method, history) => {\r\n\r\n const [isLoading, setIsLoading] = useState(false)\r\n const [error, setError] = useState(null)\r\n const [data, setData] = useState([])\r\n\r\n useEffect(() => {\r\n \r\n if (!submitData) return\r\n \r\n setIsLoading(true)\r\n fetch(url, {\r\n method: method,\r\n headers: { 'Content-Type': 'application/json' },\r\n body: url === `${baseUrl}/api/studentvetquestions/addlist` ? JSON.stringify({\"List\": object}) : JSON.stringify(object),\r\n })\r\n .then(response => response.json())\r\n .then(data => {\r\n setData(data);\r\n setIsLoading(false);\r\n setSubmitData(false);\r\n if (history !== undefined) {\r\n history.push('/registration-confirmation')\r\n }\r\n })\r\n .catch(err => {\r\n setError(err);\r\n setIsLoading(false);\r\n setSubmitData(false);\r\n })\r\n }, [url, submitData])\r\n\r\n return [ isLoading, data, error ]\r\n\r\n}\r\n","import React from 'react'\r\n\r\nconst Checkboxes = ({ currentQuestion, answersForCurrentQuestion, handleVetChange, answerObject, answer }) => {\r\n\r\n return (\r\n answersForCurrentQuestion.length ?\r\n \r\n :\r\n \r\n \r\n )\r\n}\r\n\r\nexport default Checkboxes\r\n","import React, {useEffect, useState} from 'react'\r\nimport Checkbox from '../Checkbox/Checkbox'\r\nimport M from 'materialize-css';\r\nimport './FormTypes.scss';\r\n\r\nconst FormTypes = ({ currentQuestion, handleVetChange, showQuestion, vetAnswersObject, route, studentVetAnswers}) => {\r\n \r\n useEffect(()=>{\r\n var elems = document.querySelectorAll('select');\r\n var instances = M.FormSelect.init(elems, {});\r\n })\r\n\r\n // Updating dropdown fields\r\n const handleChange = (e, answers, selectedAnswer, token) => {\r\n showQuestion(answers, selectedAnswer);\r\n handleVetChange(e, token)\r\n }\r\n \r\n \r\n const questionDisplay = (route ==='studentPortal' || currentQuestion.DefaultVisibility) ? 'block' : 'none';\r\n\r\n let answersForCurrentQuestion = []\r\n let answerObject = {}\r\n\r\n if(route === 'studentPortal'){\r\n if (studentVetAnswers.length) {\r\n answersForCurrentQuestion = studentVetAnswers.filter(answer => {\r\n return answer.VetQuestionId === currentQuestion.Id\r\n })\r\n \r\n if (answersForCurrentQuestion.length) {\r\n for (let i = 0; i < answersForCurrentQuestion[0].Answers.length; i++) {\r\n const id = answersForCurrentQuestion[0].Answers[i].VetAnswerId\r\n if (id !== undefined) {\r\n answerObject[id] = true;\r\n }\r\n }\r\n }\r\n }\r\n } \r\n \r\n return (\r\n
\r\n\r\n {/*
*/}\r\n

{currentQuestion.Text}

\r\n {\r\n currentQuestion.Type === 'Checkbox' ?\r\n
\r\n {\r\n currentQuestion.Answers.map((answer, i) => {\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 currentQuestion.Type === 'Dropdown' || currentQuestion.Type === 'Radio' ?\r\n \r\n :\r\n (\r\n currentQuestion.Type === 'Textbox' || currentQuestion.Type === 'Text'?\r\n
\r\n\r\n {\r\n answersForCurrentQuestion.length ?\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 (currentQuestion.Type ==='Date') ?\r\n
\r\n {\r\n answersForCurrentQuestion.length ?\r\n <>\r\n handleVetChange(e, vetAnswersObject, currentQuestion.Id)} data-questionid={answersForCurrentQuestion[0].Id} data-answerid={answersForCurrentQuestion[0].Answers.length?answersForCurrentQuestion[0].Answers[0].Id:\"\"}/>\r\n \r\n \r\n :\r\n <>\r\n handleVetChange(e, vetAnswersObject, currentQuestion.Id)} />\r\n \r\n \r\n }\r\n
\r\n : null\r\n )\r\n )\r\n }\r\n
\r\n )\r\n}\r\n\r\nexport default FormTypes\r\n","import React from 'react'\r\nimport FormTypes from '../FormTypes/FormTypes';\r\nimport './VETForm.scss';\r\n\r\nconst VETForm = ({vetQuestions, vetObject, studentVetAnswers, handleVetChange, route}) => {\r\n\r\n let prevGroup = \"\"\r\n\r\n const showQuestion = (answers, selectedAnswer) => {\r\n \r\n\r\n const answer = answers.filter(currAnswer => currAnswer.Id === +selectedAnswer);\r\n\r\n const activatedQuestions = answer[0].VisibilityActivators\r\n const deactivatedQuestions = answer[0].VisibilityDeactivators\r\n\r\n if (activatedQuestions.length) {\r\n for (let i = 0; i < activatedQuestions.length; i++) {\r\n const idOfQuestionToChange = activatedQuestions[i]; \r\n document.getElementById(`id${idOfQuestionToChange}`).style.display = 'block'\r\n }\r\n }\r\n \r\n if (deactivatedQuestions.length) {\r\n for (let i = 0; i < deactivatedQuestions.length; i++) {\r\n const idOfQuestionToChange = deactivatedQuestions[i]; \r\n document.getElementById(`id${idOfQuestionToChange}`).style.display = 'none'\r\n\r\n }\r\n }\r\n }\r\n\r\n return (\r\n
\r\n {\r\n vetQuestions.map((question, i) => {\r\n return (\r\n
\r\n {\r\n prevGroup !== question.Group.Name &&\r\n
{question.Group.Name}
\r\n }\r\n {\r\n handleVetChange(e, vetObject)} showQuestion={showQuestion} route={route}/>\r\n }\r\n {/* This is just for updating the prevGroup variable */}\r\n
\r\n {\r\n prevGroup = question.Group.Name\r\n }\r\n
\r\n
)\r\n })\r\n }\r\n
\r\n )\r\n}\r\n\r\nexport default VETForm\r\n","export const setPostageForm = () => {\r\n const postalSection = document.getElementById('postalSection')\r\n postalSection.classList.toggle(\"hide\");\r\n}\r\n\r\n\r\n","const stateToCode = {\r\n \"NSW\": \"01\", \r\n \"VIC\": \"02\", \r\n \"QLD\": \"03\", \r\n \"SA\": \"04\",\r\n \"WA\": \"05\",\r\n \"TAS\": \"06\", \r\n \"NT\": \"07\", \r\n \"ACT\": \"08\"\r\n}\r\n\r\n// This is for updating the info from the registration form\r\n\r\nexport const updateResidentialAddress = (contactObject) => {\r\n setTimeout(() => { \r\n const street = document.getElementById('AddressStreet')\r\n \r\n if (street.defaultValue.length) {\r\n contactObject[\"AddressStreet\"] = document.getElementById('AddressStreet').value\r\n contactObject[\"AddressStreetNo\"] = document.getElementById('addressStreetNo').value\r\n contactObject[\"Suburb\"] = document.getElementById('suburb').value\r\n contactObject[\"Postcode\"] = document.getElementById('postcode').value\r\n contactObject[\"AddressUnitNo\"] = document.getElementById('addressUnitNo').value\r\n contactObject[\"State\"] = stateToCode[document.getElementsByClassName('dropdown-trigger')[0].value];\r\n }\r\n\r\n }, 500);\r\n}\r\n\r\nexport const updatePostalAddress = (contactObject) => {\r\n setTimeout(() => { \r\n const postalStreet = document.getElementById('postalAddressStreet')\r\n \r\n if (postalStreet.defaultValue.length) {\r\n\r\n contactObject[\"AddressStreet_Pos\"] = document.getElementById('postalAddressStreet').value\r\n contactObject[\"AddressStreetNo_Pos\"] = document.getElementById('postalAddressStreetNo').value\r\n contactObject[\"Suburb_Pos\"] = document.getElementById('postalSuburb').value\r\n contactObject[\"Postcode_Pos\"] = document.getElementById('postalPostcode').value\r\n contactObject[\"AddressUnitNo_Pos\"] = document.getElementById('postalAddressUnitNo').value\r\n contactObject[\"State_Pos\"] = stateToCode[document.getElementsByClassName('dropdown-trigger')[1].value];\r\n\r\n }\r\n }, 500);\r\n}\r\n\r\nexport const copyResidentialIntoPostal = (contactObject) => {\r\n \r\n const residentialStreet = document.getElementById('AddressStreet')\r\n \r\n if (residentialStreet.defaultValue.length) {\r\n contactObject[\"AddressStreet_Pos\"] = document.getElementById('AddressStreet').value\r\n contactObject[\"AddressStreetNo_Pos\"] = document.getElementById('addressStreetNo').value\r\n contactObject[\"Suburb_Pos\"] = document.getElementById('suburb').value\r\n contactObject[\"Postcode_Pos\"] = document.getElementById('postcode').value\r\n contactObject[\"AddressUnitNo_Pos\"] = document.getElementById('addressUnitNo').value\r\n contactObject[\"State_Pos\"] = stateToCode[document.getElementsByClassName('dropdown-trigger')[0].value];\r\n\r\n }\r\n \r\n}\r\n\r\n\r\n// This is for updating information in the student portal\r\n\r\nexport const updateStudentResidentialAddress = (url, token, detailsToUpdate, setRefreshAddressState) => {\r\n setTimeout(() => { \r\n const residentialStreet = document.getElementById('AddressStreet')\r\n \r\n if (residentialStreet.defaultValue.length) {\r\n detailsToUpdate[\"AddressStreet\"] = document.getElementById('AddressStreet').value\r\n detailsToUpdate[\"AddressStreetNo\"] = document.getElementById('addressStreetNo').value\r\n detailsToUpdate[\"Suburb\"] = document.getElementById('suburb').value\r\n detailsToUpdate[\"Postcode\"] = document.getElementById('postcode').value\r\n detailsToUpdate[\"AddressUnitNo\"] = document.getElementById('addressUnitNo').value\r\n detailsToUpdate[\"State\"] = document.getElementById('HiddenState').value;\r\n \r\n fetch(url, {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${token}`},\r\n body: JSON.stringify(detailsToUpdate)\r\n })\r\n .then(response => response.json())\r\n .catch(err => console.log(err))\r\n\r\n setRefreshAddressState(true)\r\n }\r\n }, 500);\r\n\r\n\r\n}\r\n\r\nexport const updateStudentPostalAddress = (url, token, detailsToUpdate, setRefreshAddressState) => {\r\n setTimeout(() => { \r\n const postalStreet = document.getElementById('postalAddressStreet')\r\n \r\n if (postalStreet.defaultValue.length) {\r\n detailsToUpdate[\"AddressStreet_Pos\"] = document.getElementById('postalAddressStreet').value\r\n detailsToUpdate[\"AddressStreetNo_Pos\"] = document.getElementById('postalAddressStreetNo').value\r\n detailsToUpdate[\"Suburb_Pos\"] = document.getElementById('postalSuburb').value\r\n detailsToUpdate[\"Postcode_Pos\"] = document.getElementById('postalPostcode').value\r\n detailsToUpdate[\"AddressUnitNo_Pos\"] = document.getElementById('postalAddressUnitNo').value\r\n detailsToUpdate[\"State_Pos\"] = document.getElementById('HiddenStatePos').value;\r\n\r\n fetch(url, {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${token}` },\r\n body: JSON.stringify(detailsToUpdate)\r\n })\r\n .then(response => response.json())\r\n .catch(err => console.log(err))\r\n\r\n setRefreshAddressState(true)\r\n }\r\n\r\n }, 500);\r\n}\r\n\r\nexport const copyStudentResidentialIntoPostal = (url, token, detailsToUpdate) => {\r\n const residentialStreet = document.getElementById('AddressStreet')\r\n \r\n if (residentialStreet.defaultValue.length) {\r\n detailsToUpdate[\"AddressStreet_Pos\"] = document.getElementById('AddressStreet').value\r\n detailsToUpdate[\"AddressStreetNo_Pos\"] = document.getElementById('addressStreetNo').value\r\n detailsToUpdate[\"Suburb_Pos\"] = document.getElementById('suburb').value\r\n detailsToUpdate[\"Postcode_Pos\"] = document.getElementById('postcode').value\r\n detailsToUpdate[\"AddressUnitNo_Pos\"] = document.getElementById('addressUnitNo').value\r\n detailsToUpdate[\"State_Pos\"] = stateToCode[document.getElementsByClassName('dropdown-trigger')[0].value];\r\n\r\n fetch(url, {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${token}` },\r\n body: JSON.stringify(detailsToUpdate)\r\n })\r\n .then(response => response.json())\r\n .catch(err => console.log(err))\r\n }\r\n}\r\n","export const dateTimeToDateString = (date, format) => {\r\n let stringDate = \"\";\r\n if(date){ \r\n const d = new Date(date)\r\n const year = d.getFullYear()\r\n const month = d.getMonth()+1\r\n const day = d.getDate()\r\n let zeroM = \"\";\r\n let zeroD = \"\";\r\n if (month < 10){\r\n zeroM = \"0\";\r\n }\r\n if (day < 10){\r\n zeroD = \"0\";\r\n }\r\n\r\n if(format === 1){\r\n stringDate = `${year}-${zeroM}${month}-${zeroD}${day}`;\r\n }else{\r\n stringDate = `${zeroD}${day}-${zeroM}${month}-${year}`;\r\n }\r\n }\r\n return stringDate;\r\n}","import React, { useEffect } from 'react'\r\nimport { useDataFetch } from '../../hooks/useDataFetch';\r\nimport { baseUrl } from '../../functions/globalVariables';\r\nimport M from 'materialize-css';\r\nimport './AdministerStudentMenuItems.scss'\r\nimport { useThemeContext } from '../../ThemeContext';\r\nimport { useHistory } from 'react-router-dom';\r\n\r\n\r\nconst AdministerStudentMenuItems = ({page}) => {\r\n\r\n const { selectedStudentId, authToken } = useThemeContext()\r\n let history = useHistory()\r\n\r\n const validateNatFormsUrl = `${baseUrl}/api/natforms/validatedates/${selectedStudentId}?$orderBy=AntaId`;\r\n const [isLoadingValNat, validateNatforms, errorValNat] = useDataFetch(validateNatFormsUrl, authToken)\r\n\r\n const validateSTSUrl = `${baseUrl}/api/stsbulkquotedata/validatedata/${selectedStudentId}`;\r\n const [isLoadingSTS, validateSTS, errorSTS] = useDataFetch(validateSTSUrl, authToken)\r\n\r\n useEffect(() => {\r\n var elems = document.querySelectorAll('.modal');\r\n var instances = M.Modal.init(elems, {});\r\n })\r\n\r\n return (\r\n <>\r\n
\r\n {history.push('/admin-portal/administer-student/student-profile')}}>person\r\n {history.push('/admin-portal/administer-student/student-training-plan')}}>assignment\r\n {history.push('/admin-portal/administer-student/student-qualifications')}}>school\r\n warning\r\n
\r\n
\r\n
\r\n

Warnings

\r\n {\r\n validateSTS.length ?\r\n <>\r\n
STS File Potential Issues
\r\n {\r\n validateSTS.map((qual, index) => (\r\n
\r\n

Qualification {qual.AntaId}:

\r\n {qual.DOB === null &&

- Date of birth missing

}\r\n {qual.StartDate === null &&

- Start date is missing

}\r\n {qual.EndDate === null &&

- End date is missing

}\r\n {qual.ATSI === null &&

- Aboriginal or Torres Strait Islander field missing

}\r\n {qual.ResidencyStatusAnswer === null &&

- Residency Status missing

}\r\n {qual.WorkInNSWAnswer === null &&

- Do you work in NSW field missing

}\r\n {qual.TraineeAnswer === null &&

- Registered NSW apprentice or trainee field missing

}\r\n {qual.SocialHousingAnswer === null &&

- Social housing field missing

}\r\n {qual.LTUAnswer === null &&

- Unemployed for 52 weeks or more field missing

}\r\n
\r\n
\r\n ))\r\n }\r\n \r\n :\r\n null\r\n }\r\n \r\n {\r\n validateNatforms.length ?\r\n <>\r\n
NAT File potential issues
\r\n {\r\n validateNatforms.map((issue, index, arr)=>(\r\n
\r\n {\r\n index > 0 && issue.AntaId === arr[index-1].AntaId ? null: <>

Qualification {issue.AntaId}:

\r\n }\r\n

{issue.CompetencyId}: {issue.Reason}

\r\n
\r\n ))\r\n }\r\n \r\n :\r\n null\r\n }\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n )\r\n}\r\n\r\nexport default AdministerStudentMenuItems\r\n","import React, {useEffect} from 'react'\r\nimport { useThemeContext } from '../../ThemeContext'\r\n\r\nconst StateDropdown = ({name, updateStudentDetails, studentDetails, studentUrl, state, refreshAddressState, setRefreshAddressState}) => {\r\n\r\n const { authToken } = useThemeContext()\r\n\r\n useEffect(()=>{\r\n setRefreshAddressState(false)\r\n },[refreshAddressState])\r\n \r\n return (\r\n name === \"State\"?\r\n
\r\n \r\n \r\n
\r\n ://\"State_Pos\"\r\n
\r\n \r\n \r\n
\r\n )\r\n}\r\n\r\nexport default StateDropdown\r\n","import React, {useState, useEffect} from 'react';\r\nimport './StudentProfile.scss';\r\nimport { useDataFetch } from '../../hooks/useDataFetch';\r\nimport { useDataPost } from '../../hooks/useDataPost';\r\nimport { baseUrl } from '../../functions/globalVariables';\r\nimport VetForm from '../VETForm/VETForm';\r\nimport M from 'materialize-css';\r\nimport { createVETQuestionObject } from '../../functions/createVETQuestionObject';\r\nimport { setPostageForm } from '../../functions/setPostageForm';\r\nimport { copyStudentResidentialIntoPostal, updateStudentPostalAddress, updateStudentResidentialAddress } from '../../functions/updateStudentAddress';\r\nimport Spinner from '../../assets/spinner.svg'\r\nimport { dateTimeToDateString } from '../../functions/dateTimeToDateString';\r\nimport AdministerStudentMenuItems from '../AdministerStudentMenuItems/AdministerStudentMenuItems';\r\nimport StateDropdown from '../StateDropdown/StateDropdown';\r\nimport { useThemeContext } from '../../ThemeContext';\r\n\r\nconst StudentProfile = ({route}) => {\r\n\r\n const { studentID, selectedStudentId, authToken, userRole } = useThemeContext()\r\n\r\n let currentStudentID = userRole === \"Administrator\" ? selectedStudentId : studentID\r\n\r\n useEffect(() => {\r\n var elems = document.querySelectorAll('.tooltipped');\r\n var instances = M.Tooltip.init(elems, {});\r\n var elemDropdown = document.querySelectorAll('select');\r\n var instancesDropdown = M.FormSelect.init(elemDropdown, {});\r\n M.updateTextFields();\r\n })\r\n\r\n //the below code is for triggering the address finder API code\r\n useEffect(() => {\r\n const DOMContentLoaded_event = document.createEvent(\"Event\")\r\n DOMContentLoaded_event.initEvent(\"DOMContentLoaded\", true, true)\r\n window.document.dispatchEvent(DOMContentLoaded_event)\r\n });\r\n \r\n\r\n const stateUrl = `${baseUrl}/api/states`;\r\n const [ isLoadingState, state, stateError ] = useDataFetch(stateUrl)\r\n\r\n const studentUrl = `${baseUrl}/api/students/${currentStudentID}`;\r\n const [ isLoadingStudent, studentDetails, error ] = useDataFetch(studentUrl, authToken); \r\n \r\n const VETUrl = `${baseUrl}/api/vetquestions?$expand=Group,Answers&$orderBy=OrderIndex`;\r\n const [ isLoadingVET, vetQuestions, vetError ] = useDataFetch(VETUrl, authToken)\r\n\r\n const VETStudentUrl = `${baseUrl}/api/studentVETQuestions?$expand=Answers&$filter=StudentId eq ${currentStudentID}`;\r\n const [ isLoadingStudentVET, studentVetAnswers, studentVetError ] = useDataFetch(VETStudentUrl, authToken)\r\n \r\n const [vetObject, setVetObject] = useState({})\r\n\r\n useEffect(() => {\r\n const tempVetObject = createVETQuestionObject(vetQuestions, currentStudentID)\r\n setVetObject(tempVetObject)\r\n }, [vetQuestions, currentStudentID])\r\n\r\n const handleVetChange = (e) => {\r\n\r\n if (vetObject === undefined) return;\r\n\r\n const { name, value, type, checked } = e.target; \r\n\r\n let studentQuestionId =\"\";\r\n let studentAnswerId = \"\";\r\n if(type ==='select-one'){\r\n studentQuestionId = e.target.options[e.target.selectedIndex].getAttribute(\"data-questionid\");\r\n studentAnswerId = e.target.options[e.target.selectedIndex].getAttribute(\"data-answerid\");\r\n }else{\r\n studentQuestionId = e.target.getAttribute(\"data-questionid\");\r\n studentAnswerId = e.target.getAttribute(\"data-answerid\")\r\n }\r\n\r\n if (type === 'checkbox') {\r\n if (checked) {\r\n vetObject[name].Answers = [...vetObject[name].Answers, { VetAnswerId: parseInt(value), Text: null }]\r\n } else {\r\n const filteredArray = vetObject[name].Answers.filter(item => { return item.VetAnswerId !== +value; })\r\n vetObject[name].Answers = filteredArray\r\n }\r\n\r\n } else if (type === 'text' || type === 'date') {\r\n if(studentAnswerId){\r\n vetObject[name].Answers = [{ Id: parseInt(studentAnswerId), VetAnswerId: null, Text: value }]\r\n }else{\r\n vetObject[name].Answers = [{ VetAnswerId: null, Text: value }]\r\n }\r\n \r\n } else {\r\n if(studentAnswerId){\r\n vetObject[name].Answers = [{ Id: parseInt(studentAnswerId), VetAnswerId: parseInt(value), Text: null }]\r\n }else{\r\n vetObject[name].Answers = [{ VetAnswerId: parseInt(value), Text: null }]\r\n }\r\n \r\n }\r\n\r\n let url = \"\"\r\n let method = \"\"\r\n \r\n if (studentQuestionId) {\r\n url = `${baseUrl}/api/studentvetquestions/${studentQuestionId}`\r\n method = 'PUT'\r\n vetObject[name].Id = studentQuestionId\r\n } else {\r\n url = `${baseUrl}/api/studentvetquestions`\r\n method = 'POST'\r\n }\r\n\r\n vetObject[name].VetQuestionText = name\r\n\r\n fetch(url, {\r\n method: method,\r\n headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${authToken}` },\r\n body: JSON.stringify(vetObject[name])\r\n })\r\n .then(response => response.json())\r\n .catch(err => console.log(err))\r\n };\r\n\r\n //function to check whether USI or email already exists and return error to user.\r\n const handleupdateStudentResponse = (data, name, value) =>{\r\n \r\n if(data.error){\r\n M.toast({html: data.error.innererror.message, displayLength: 2000});\r\n }\r\n }\r\n \r\n const updateStudentDetails = (e, url, token, detailsToUpdate) => {\r\n \r\n const { name, value, type, checked } = e.target;\r\n \r\n let prevValue;\r\n if (type === 'checkbox') {\r\n prevValue=detailsToUpdate[\"IsDisabled\"];\r\n if (checked){//student enabled\r\n detailsToUpdate[\"IsDisabled\"] = false;\r\n }else{//student disabled\r\n detailsToUpdate[\"IsDisabled\"] = true;\r\n }\r\n }\r\n else{\r\n prevValue=detailsToUpdate[name];\r\n detailsToUpdate[name] = value\r\n }\r\n \r\n fetch(url, {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${token}` },\r\n body: JSON.stringify(detailsToUpdate)\r\n })\r\n .then(response => response.json())\r\n .then(data => handleupdateStudentResponse(data, name, prevValue))\r\n .catch(err => console.log(err))\r\n }\r\n\r\n \r\n\r\n const [areChangesSaved, setAreChangesSaved] = useState(false)\r\n const [isLoadingSavedChanges, savedChanges, saveError] = useDataPost(studentUrl, studentDetails, areChangesSaved, setAreChangesSaved, 'PUT')\r\n\r\n const [showPersonalDetails, setShowPersonalDetails] = useState(true);\r\n const [showVetDetails, setShowVetDetails] = useState(false);\r\n\r\n const [refreshAddressState, setRefreshAddressState] = useState(false);\r\n\r\n return (\r\n isLoadingStudent ?\r\n
\r\n

Loading your info...

\r\n \"Spinner\"\r\n
\r\n :\r\n
\r\n {\r\n userRole === 'Administrator'? : null\r\n } \r\n
\r\n
\r\n

Personal Details

\r\n setShowPersonalDetails(!showPersonalDetails)}>\r\n {showPersonalDetails?'arrow_drop_up':'arrow_drop_down'}\r\n \r\n
\r\n {\r\n userRole === 'Administrator'?\r\n
\r\n Disable\r\n \r\n Enable\r\n
\r\n :null\r\n }\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
Contact Details
\r\n
\r\n
\r\n
\r\n updateStudentDetails(e, studentUrl, authToken, studentDetails)} />\r\n \r\n
\r\n
\r\n updateStudentDetails(e, studentUrl, authToken, studentDetails)} />\r\n \r\n
\r\n
\r\n updateStudentDetails(e, studentUrl, authToken, studentDetails)} />\r\n \r\n
\r\n
\r\n updateStudentDetails(e, studentUrl, authToken, studentDetails)} />\r\n \r\n
\r\n
\r\n
\r\n
\r\n updateStudentDetails(e, studentUrl, authToken, studentDetails)} />\r\n \r\n
\r\n
\r\n updateStudentDetails(e, studentUrl, authToken, studentDetails)} />\r\n \r\n
\r\n
\r\n updateStudentDetails(e, studentUrl, authToken, studentDetails)} />\r\n \r\n \r\n
\r\n
\r\n updateStudentDetails(e, studentUrl, authToken, studentDetails)}/>\r\n \r\n \r\n
\r\n
\r\n updateStudentDetails(e, studentUrl, authToken, studentDetails)} />\r\n \r\n
\r\n
\r\n updateStudentDetails(e, studentUrl, authToken, studentDetails)} />\r\n \r\n
\r\n
\r\n updateStudentDetails(e, studentUrl, authToken, studentDetails)} />\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n updateStudentDetails(e, studentUrl, authToken, studentDetails)} />\r\n \r\n
\r\n
\r\n

To obtain a USI, apply for one here

\r\n
\r\n
\r\n \r\n
\r\n
Residential Address
\r\n
\r\n
\r\n
\r\n updateStudentResidentialAddress(studentUrl, authToken, studentDetails, setRefreshAddressState)} />\r\n \r\n
\r\n
\r\n updateStudentDetails(e, studentUrl, authToken, studentDetails)} />\r\n \r\n
\r\n
\r\n updateStudentDetails(e, studentUrl, authToken, studentDetails)} />\r\n \r\n
\r\n
\r\n updateStudentDetails(e, studentUrl, authToken, studentDetails)} />\r\n \r\n
\r\n
\r\n updateStudentDetails(e, studentUrl, authToken, studentDetails)} />\r\n \r\n
\r\n
\r\n updateStudentDetails(e, studentUrl, authToken, studentDetails)} />\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n updateStudentDetails(e, studentUrl, authToken, studentDetails)} />\r\n \r\n
\r\n
\r\n\r\n
\r\n
Postal Address
\r\n
\r\n \r\n

\r\n
\r\n
\r\n updateStudentPostalAddress(studentUrl, authToken, studentDetails, setRefreshAddressState)} />\r\n \r\n
\r\n
\r\n updateStudentDetails(e, studentUrl, authToken, studentDetails)} />\r\n \r\n
\r\n
\r\n updateStudentDetails(e, studentUrl, authToken, studentDetails)} />\r\n \r\n
\r\n
\r\n updateStudentDetails(e, studentUrl, authToken, studentDetails)} />\r\n \r\n
\r\n
\r\n updateStudentDetails(e, studentUrl, authToken, studentDetails)} />\r\n \r\n
\r\n
\r\n updateStudentDetails(e, studentUrl, authToken, studentDetails)} />\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n updateStudentDetails(e, studentUrl, authToken, studentDetails)} />\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n

VET Details

\r\n setShowVetDetails(!showVetDetails)}>\r\n {showVetDetails?'arrow_drop_up':'arrow_drop_down'}\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default StudentProfile\r\n","export const createVETQuestionObject = (vetQuestions, studentId) => {\r\n if (vetQuestions === undefined || studentId === undefined) return\r\n\r\n const tempObject = {}\r\n\r\n for (let i = 0; i < vetQuestions.length; i++) {\r\n const name = vetQuestions[i].Text;\r\n tempObject[name] = {\r\n StudentId: studentId,\r\n VetQuestionId: vetQuestions[i].Id,\r\n Answers: [],\r\n }\r\n }\r\n\r\n return tempObject\r\n}","import { useState, useEffect } from 'react'\r\n\r\nexport const useDataFetchRefresh = (url, token, refreshData, setRefreshData, refreshId) => {\r\n\r\n const [isLoading, setIsLoading] = useState(false)\r\n const [error, setError] = useState(null)\r\n const [data, setData] = useState([])\r\n \r\n useEffect(() => {\r\n\r\n // const ac = new AbortController();\r\n const fetchData = async () => {\r\n setIsLoading(true)\r\n if (refreshId !== undefined) {\r\n }\r\n try {\r\n let response;\r\n if (token !== undefined){\r\n response = await fetch(url, {headers: {'Authorization': `Bearer ${token}`}})\r\n }else\r\n {\r\n response = await fetch(url)\r\n }\r\n \r\n const json = await response.json()\r\n json.value? setData(json.value) : setData(json)\r\n setRefreshData(false)\r\n \r\n } catch(error) {\r\n setError(error)\r\n }\r\n setIsLoading(false)\r\n }\r\n fetchData();\r\n // return () => ac.abort(); \r\n }, [refreshData, refreshId])\r\n\r\n return [ isLoading, data, error ]\r\n\r\n}\r\n","import React, {useState, useRef, useEffect} from 'react'\r\nimport DatePicker from \"react-datepicker\";\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nconst DatePickerComp = ({tabindex, name, defaultDate, handleDateUpdate, object, index}) => {\r\n const [startDate, setStartDate] = useState(defaultDate);\r\n\r\n useEffect(() => {\r\n setStartDate(defaultDate)\r\n }, [defaultDate])\r\n \r\n const handleUpdate = (name, date, obj, index) => {\r\n \r\n setStartDate(date);\r\n if(name === 'certDate'){\r\n handleDateUpdate(date, obj, index);\r\n } else if (name === 'StartDateTime' || name ==='EndDateTime'){\r\n handleDateUpdate(name, date);\r\n }\r\n else{\r\n //competency start and end dates\r\n handleDateUpdate(name, date, obj, index);\r\n }\r\n }\r\n\r\n // Close the calendar when user using 'Tab' key to tab off the custom input\r\n const startRef = useRef();\r\n\r\n const handleOnKeyDown = (e) => {\r\n if (e.which === 9) startRef.current.setOpen(false, true);\r\n }\r\n\r\n\r\n return (\r\n
\r\n { handleUpdate(name, date, object, index);}}\r\n tabIndex={tabindex}\r\n ref={startRef}\r\n onKeyDown = {(e) => handleOnKeyDown(e)}\r\n />\r\n
\r\n )\r\n}\r\n\r\nexport default DatePickerComp","import React from 'react'\r\n\r\nconst ShowSortArrow = ({ columnFieldName, sortConfig }) => {\r\n return (\r\n <>\r\n { \r\n columnFieldName === sortConfig.fieldToSort && sortConfig.direction !== null &&\r\n (\r\n sortConfig.direction === \"ascending\" ?\r\n arrow_drop_down\r\n :\r\n arrow_drop_up\r\n )\r\n\r\n }\r\n \r\n )\r\n}\r\n\r\nexport default ShowSortArrow\r\n","//keyField will be a property from the array object to use as a key, for example the \"Id\"\r\nexport const arrayToObject = (array) =>\r\n array.reduce((obj, item) => {\r\n obj[item.Competency.Id] = item\r\n return obj\r\n}, {})\r\n\r\nexport const arrayToObjectWithKey = (array, keyField) =>\r\n array.reduce((obj, item) => {\r\n obj[item[keyField]] = item\r\n return obj\r\n}, {})","export const capitaliseEachWordOfQualName = (qual) => {\r\n return qual.Name.split(' ').map(word => {\r\n if (word === qual.AntaId || word === 'in' || word === 'of') {\r\n // Word might be the code of the qual, or an unimportant word\r\n return word\r\n } else if(word === 'ii' || word === 'iii' || word === 'iv' || word === 'v') {\r\n // Capitalise entire roman numeral\r\n return word.toUpperCase()\r\n } else {\r\n // Otherwise, just capitalise the first letter\r\n return `${word.charAt(0).toUpperCase()}${word.substring(1)}`\r\n }\r\n // Then, put the sentence back together\r\n }).join(' ')\r\n}","import React, {useState, useEffect} from 'react';\r\nimport { useDataFetch } from '../../hooks/useDataFetch';\r\nimport { baseUrl } from '../../functions/globalVariables';\r\nimport Spinner from '../../assets/spinner.svg';\r\nimport './StudentQualifications.scss';\r\nimport M from 'materialize-css';\r\nimport { useDataFetchRefresh } from '../../hooks/useDataFetchRefresh';\r\nimport { dateTimeToDateString } from '../../functions/dateTimeToDateString';\r\nimport DatePickerComp from '../DatePickerComp/DatePickerComp';\r\nimport AdministerStudentMenuItems from '../AdministerStudentMenuItems/AdministerStudentMenuItems';\r\nimport { sortStudentCompetenciesTable } from '../../functions/sortStudentCompetenciesTable';\r\nimport ShowSortArrow from '../ShowSortArrow/ShowSortArrow';\r\nimport { useThemeContext } from '../../ThemeContext';\r\nimport { arrayToObjectWithKey } from '../../functions/arrayToObject'\r\nimport { capitaliseEachWordOfQualName } from '../../functions/capitaliseEachWordOfQualName';\r\n\r\nconst StudentQualifications = () => {\r\n\r\n const { studentID, selectedStudentId, authToken, userRole } = useThemeContext()\r\n\r\n let currentStudentId = userRole === \"Administrator\" ? selectedStudentId : studentID\r\n \r\n const [refreshData, setRefreshData] = useState(false);\r\n\r\n useEffect(()=>{\r\n var elems = document.querySelectorAll('select');\r\n var instances = M.FormSelect.init(elems, {});\r\n var elemsModal = document.querySelectorAll('.modal');\r\n var instancesModal = M.Modal.init(elemsModal, {});\r\n });\r\n\r\n //fetch qualifications available to register in -FOR REGISTER A NEW QUALIFICATION SECTION\r\n const qualificationsUrl = `${baseUrl}/api/qualifications?$filter=Superseded eq false`;\r\n const [ isLoading, qualifications, error ] = useDataFetch(qualificationsUrl, authToken);\r\n\r\n //fetch details of selected qualification-FOR REGISTER A NEW QUALIFICATION SECTION\r\n let specificQualUrl =\"\";\r\n const [qualSelected, setQualSelected] = useState(\"\");\r\n if(qualSelected !==\"\"){\r\n specificQualUrl = `${baseUrl}/api/qualifications?$filter=Id eq ${qualSelected}`;\r\n }\r\n const [ isLoadingQual, qualificationDetails, qualError ] = useDataFetch(specificQualUrl, authToken);\r\n\r\n //fetch all qualifications that are not disabled\r\n const allStudentQualsUrl = `${baseUrl}/api/studentqualifications?$expand=*&$filter=StudentId eq ${currentStudentId} and Disabled eq false`;\r\n const [ isLoadingAll, allQuals, errorAll ] = useDataFetchRefresh(allStudentQualsUrl, authToken,refreshData, setRefreshData);\r\n \r\n\r\n //fetch pending qualifications\r\n const studentPendingUrl = `${baseUrl}/api/studentqualifications?$expand=Qualification&$filter=StudentId eq ${currentStudentId} and ConfirmedCost eq false and CertificateIssued ne 'Yes' and Disabled eq false`;\r\n const [ isLoadingPending, pendingQuals, errorPending ] = useDataFetchRefresh(studentPendingUrl, authToken,refreshData, setRefreshData);\r\n\r\n //fetch completed qualifications - FOR QUALIFICATION COMPETENCIES SECTION - no longer just completed\r\n // const studentQualUrl = `${baseUrl}/api/studentqualifications?$expand=Qualification&$filter=StudentId eq ${currentStudentId} and CertificateIssued eq 'Yes'`;\r\n const studentQualUrl = `${baseUrl}/api/studentqualifications?$expand=Qualification&$filter=StudentId eq ${currentStudentId} and Disabled eq false`;\r\n const [ isLoadingCompQual, completedQuals, errorCompQual ] = useDataFetchRefresh(studentQualUrl, authToken,refreshData, setRefreshData);\r\n \r\n //fetch compentencies for qualifications - FOR QUALIFICATION COMPETENCIES SECTION - no longer just completed\r\n // const studentCompetetenciesUrl = `${baseUrl}/api/studentcompetencies?$filter=StudentId eq ${currentStudentId} and StudentQualification/CertificateIssued eq 'Yes' & $expand=*`\r\n const studentCompetetenciesUrl = `${baseUrl}/api/studentcompetencies?$filter=StudentId eq ${currentStudentId} & $expand=*`\r\n const [ isLoadingComp, studentCompletedCompetencies, errorComp ] = useDataFetchRefresh(studentCompetetenciesUrl, authToken,refreshData, setRefreshData);\r\n \r\n //Make sure the student can't register for a qual they're already registered in - FOR REGISTER A NEW QUALIFICATION SECTION\r\n const registeredQuals = allQuals.length ? allQuals.filter(qual => qual.CertificateIssued !== \"Withdrawn\").map(qual => qual.Qualification.Id) : [];\r\n const filteredQuals = qualifications.length ? qualifications.filter(qual => !registeredQuals.includes(qual.Id)) : [];\r\n \r\n //Get the delivery location options for the dropdown\r\n const deliveryLocationUrl = `${baseUrl}/api/deliverylocations?&$Filter=IsDisabled ne true&$orderBy=DeliveryLocation`;\r\n const [ isLoadingDL, deliveryLocation, errorDL ] = useDataFetch(deliveryLocationUrl)\r\n\r\n //Get the program location options for the dropdown\r\n const programLocationUrl = `${baseUrl}/api/offices?&$orderBy=Name&$Filter=IsDisabled eq false`;\r\n const [ isLoadingPL, programLocation, errorPL ] = useDataFetch(programLocationUrl)\r\n\r\n //Get the program stream options for the dropdown\r\n const programStreamsUrl = `${baseUrl}/api/progstreams`;\r\n const [ isLoadingPS, programStreams, errorPS ] = useDataFetch(programStreamsUrl)\r\n\r\n const waiverCodesUrl = `${baseUrl}/api/waivercode`\r\n const [ isLoadingCodes, waiverCodes, errorCodes] = useDataFetch(waiverCodesUrl)\r\n\r\n const [filteredWaiverCodes, setFilteredWaiverCodes] = useState([])\r\n\r\n useEffect(() => {\r\n if (waiverCodes.length && allQuals.length) {\r\n const allWaiverCodes = arrayToObjectWithKey(allQuals, \"WaiverCodeId\")\r\n const filteredCodes = waiverCodes.filter(code => {\r\n // If a code has been assigned to a student but is currently disabled, add it to the list with an asterisk\r\n // This will make sure records are always correct\r\n if (!code.IsDisabled) {\r\n return true\r\n } else if (allWaiverCodes[code.WaiverCodeId] !== undefined && code.IsDisabled) {\r\n code.WaiverDesc += \" *\"\r\n return true\r\n }\r\n\r\n return false\r\n })\r\n\r\n setFilteredWaiverCodes(filteredCodes)\r\n }\r\n }, [waiverCodes, allQuals])\r\n\r\n\r\n // This will keep hold of which table column we want to sort\r\n const [sortConfig, setSortConfig] = useState({\r\n fieldToSort: null,\r\n direction: null\r\n });\r\n \r\n const [sortedCompetencies, setSortedCompetencies] = useState([])\r\n\r\n const requestSort = (fieldToSort) => {\r\n let direction = 'ascending';\r\n if (sortConfig.fieldToSort === fieldToSort && sortConfig.direction === 'ascending') {\r\n direction = 'descending';\r\n } else if (sortConfig.fieldToSort === fieldToSort && sortConfig.direction === 'descending') {\r\n direction = null;\r\n }\r\n setSortConfig({ fieldToSort, direction });\r\n\r\n if (direction === null) {\r\n setSortedCompetencies(studentCompletedCompetencies)\r\n }\r\n }\r\n\r\n const handleAcceptQuote = (object) => {\r\n object['ConfirmedCost'] = true;\r\n object['Active'] = true;\r\n \r\n fetch(`${baseUrl}/api/studentqualifications/${object.Id}`, {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n body: JSON.stringify(object)\r\n })\r\n .then(response => {\r\n response.json()\r\n window.location.reload()\r\n })\r\n .catch(err => {\r\n console.log(err)\r\n window.location.reload()\r\n })\r\n }\r\n\r\n const handleCancelQuote = (object) => {\r\n object['Disabled'] = true;\r\n \r\n fetch(`${baseUrl}/api/studentqualifications/${object.Id}`, {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n body: JSON.stringify(object)\r\n })\r\n .then(response => {\r\n response.json()\r\n window.location.reload()\r\n })\r\n .catch(err => {\r\n console.log(err)\r\n window.location.reload()\r\n })\r\n }\r\n\r\n const handleQualChange = e => {\r\n const { name, value } = e.target;\r\n setQualSelected(value);\r\n\r\n if(value>0){\r\n document.getElementById('QualFundingPanel').style.display = 'block';\r\n }\r\n };\r\n\r\n\r\n //handle change to qualification results\r\n const handleQualUpdate = (e, qual, index)=> {\r\n \r\n const {name, value, type, checked} = e.target;\r\n const obj = { \r\n \"TotalFees\": 0,\r\n \"Id\": 0,\r\n \"Active\": false,\r\n \"Disabled\": false,\r\n \"StudentId\": 0,\r\n \"QualId\": 0,\r\n \"SaStudentId\": null,\r\n \"PASNumber\": null,\r\n \"TrainerID\": null,\r\n \"DeliveryLocId\": null,\r\n \"OfficeId\": null,\r\n \"WaiverCodeId\": null,\r\n \"CertificateAttainedDate\": null,\r\n \"CertificateIssued\": \"No\",\r\n \"CertificateId\": null,\r\n \"QuoteId\": null,\r\n \"QuoteCreatedAt\": null,\r\n \"QuoteAcceptedBy\": null,\r\n \"QuoteAcceptedAt\": null,\r\n \"PlanAcceptedBy\": null,\r\n \"PlanAcceptedAt\": null,\r\n \"ContractId\": null,\r\n \"ContractCreatedAt\": null,\r\n \"TrainingContractId\": null,\r\n \"ProgStreamId\": null,\r\n \"Funding\": null,\r\n \"TuitionFee\": null,\r\n \"Subsidy\": null,\r\n \"OtherSubsidy\": null,\r\n \"ConfirmedCost\": false,\r\n \"Comments\": null \r\n } \r\n\r\n for (const [key, value] of Object.entries(obj)) {\r\n obj[key] = qual[key]\r\n }\r\n\r\n if(type ==='select-one'){\r\n obj[name] = value;\r\n allQuals[index][name] = value;\r\n }else if(name ==='Active'){\r\n obj[name] = checked;\r\n allQuals[index].Active = checked;\r\n }else if(name ==='TuitionFee' || name ==='Subsidy' || name ===\"OtherSubsidy\"){\r\n obj[name] = parseFloat(value);\r\n allQuals[index][name] = parseFloat(value);\r\n }else{\r\n obj[name] = value;\r\n allQuals[index][name] = value;\r\n }\r\n\r\n if (obj[\"WaiverCodeId\"] === \"none\") {\r\n obj[\"WaiverCodeId\"] = null\r\n }\r\n\r\n if (value === \"null\") {\r\n obj[name] = null\r\n allQuals[index][name] = null;\r\n }\r\n\r\n if (name === 'CertificateIssued' && value === 'Withdrawn'){\r\n obj[\"Active\"] = false;\r\n }\r\n \r\n fetch(`${baseUrl}/api/studentqualifications/${qual[\"Id\"]}`, {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${authToken}` },\r\n body: JSON.stringify(obj)\r\n })\r\n .then(response => response.json())\r\n .catch(err => console.log(err))\r\n if(name ==='TuitionFee' || name ==='Subsidy' || name ===\"OtherSubsidy\" || name === 'CertificateIssued'){\r\n setRefreshData(true);\r\n }\r\n }\r\n\r\n //handle change to qualification results\r\n const handleQualDateUpdate = (date, qual, index)=> {\r\n \r\n const obj = { \r\n \"TotalFees\": 0,\r\n \"Id\": 0,\r\n \"Active\": false,\r\n \"Disabled\": false,\r\n \"StudentId\": 0,\r\n \"QualId\": 0,\r\n \"SaStudentId\": null,\r\n \"PASNumber\": null,\r\n \"DeliveryLocId\": null,\r\n \"OfficeId\": null,\r\n \"WaiverCodeId\": null,\r\n \"CertificateAttainedDate\": null,\r\n \"CertificateIssued\": \"No\",\r\n \"CertificateId\": null,\r\n \"QuoteId\": null,\r\n \"QuoteCreatedAt\": null,\r\n \"ContractId\": null,\r\n \"ContractCreatedAt\": null,\r\n \"TrainingContractId\": null,\r\n \"ProgStreamId\": null,\r\n \"Funding\": null,\r\n \"TuitionFee\": null,\r\n \"Subsidy\": null,\r\n \"OtherSubsidy\": null,\r\n \"ConfirmedCost\": false,\r\n \"Comments\": null\r\n } \r\n\r\n for (const [key, value] of Object.entries(obj)) {\r\n obj[key] = qual[key]\r\n }\r\n\r\n obj['CertificateAttainedDate'] = date;\r\n allQuals[index].CertificateAttainedDate = date;\r\n \r\n fetch(`${baseUrl}/api/studentqualifications/${qual[\"Id\"]}`, {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${authToken}` },\r\n body: JSON.stringify(obj)\r\n })\r\n .then(response => response.json())\r\n .catch(err => console.log(err))\r\n }\r\n\r\n // for editing competency results\r\n const resultsUrl = `${baseUrl}/api/CompetencyResults`;\r\n const [ isLoadingResults, results, resultsError ] = useDataFetch(resultsUrl)\r\n\r\n const handleChange = (e, date, detailsToUpdate, index) => {\r\n \r\n let type=\"\";\r\n let name=\"\";\r\n let value=\"\";\r\n if(e === 'startDate' || e ==='finishDate'){\r\n name = e;\r\n value = date;\r\n }else{\r\n type = e.target.type;\r\n name = e.target.name;\r\n value = e.target.value;\r\n }\r\n \r\n const obj = { \r\n \"Id\": 0,\r\n \"BookingId\": 0,\r\n \"CourseId\": \"\",\r\n \"StudentId\": 0,\r\n \"CompetencyId\": 0,\r\n \"StudentQualificationId\": 0,\r\n \"ResultId\": 0,\r\n \"SaStudentId\": \"\",\r\n \"PppContract\": \"\",\r\n \"PppCourseSiteId\": null,\r\n \"ActivityStartDate\": null,\r\n \"ActivityEndDate\": null\r\n }\r\n\r\n for (const [key, value] of Object.entries(obj)) {\r\n obj[key] = detailsToUpdate[key]\r\n }\r\n\r\n if(type ==='select-one'){\r\n obj[\"ResultId\"] = parseInt(value);\r\n studentCompletedCompetencies[index].ResultId = value;\r\n }else{\r\n if(name === \"startDate\"){\r\n obj['ActivityStartDate'] = value;\r\n studentCompletedCompetencies[index].ActivityStartDate = value;\r\n }else {\r\n obj['ActivityEndDate'] = value;\r\n studentCompletedCompetencies[index].ActivityEndDate = value;\r\n }\r\n }\r\n\r\n fetch(`${baseUrl}/api/studentcompetencies/${detailsToUpdate[\"Id\"]}`, {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${authToken}` },\r\n body: JSON.stringify(obj)\r\n })\r\n .then(response => response.json())\r\n .catch(err => console.log(err))\r\n }\r\n\r\n const [qualRegistered, setqualRegistered] = useState(false);\r\n\r\n const handleRegisterQual = (sId, qId) => {\r\n \r\n const qualObject = {\r\n \"StudentId\": null,\r\n \"QualId\": null, \r\n \"Funding\": null,\r\n \"Active\": true\r\n }\r\n \r\n const funding = document.getElementById('QualFunding').value;\r\n \r\n if (funding ===\"Choose a Funding Option\"){\r\n M.toast({html: \"Please select a funding option.\", displayLength: 2000});\r\n return;\r\n }\r\n \r\n qualObject[\"StudentId\"] = sId;\r\n qualObject[\"QualId\"] = qId;\r\n qualObject[\"Funding\"] = funding;\r\n\r\n fetch(`${baseUrl}/api/studentqualifications`, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${authToken}` },\r\n body: JSON.stringify(qualObject)\r\n })\r\n .then(() => userRole !== \"Administrator\" && sendEmailToAdmins(qId))\r\n .catch(err => console.log(err))\r\n setRefreshData(true)\r\n setqualRegistered(true)\r\n }\r\n\r\n const handleGenerateQuote = (qual) =>{\r\n const tuition = document.getElementById(\"tuitionFee\").value;\r\n const quoteID = document.getElementById(\"quoteId\").value;\r\n\r\n if(tuition ===\"\" || quoteID===\"\"){\r\n M.toast({html: \"Please fill out both Tuition Fee and Quote ID fields.\", displayLength: 2000});\r\n }else{ \r\n const obj = { \r\n \"TotalFees\": 0,\r\n \"Id\": 0,\r\n \"Active\": false,\r\n \"Disabled\": false,\r\n \"StudentId\": 0,\r\n \"QualId\": 0,\r\n \"SaStudentId\": null,\r\n \"PASNumber\": null,\r\n \"DeliveryLocId\": null,\r\n \"OfficeId\": null,\r\n \"CertificateAttainedDate\": null,\r\n \"CertificateIssued\": \"No\",\r\n \"CertificateId\": null,\r\n \"QuoteId\": null,\r\n \"QuoteCreatedAt\": null,\r\n \"ContractId\": null,\r\n \"ContractCreatedAt\": null,\r\n \"TrainingContractId\": null,\r\n \"ProgStreamId\": null,\r\n \"Funding\": null,\r\n \"TuitionFee\": null,\r\n \"Subsidy\": null,\r\n \"OtherSubsidy\": null,\r\n \"ConfirmedCost\": false,\r\n \"Comments\": null \r\n } \r\n\r\n for (const [key, value] of Object.entries(obj)) {\r\n obj[key] = qual[key]\r\n }\r\n obj[\"TuitionFee\"] = parseFloat(tuition);\r\n obj[\"QuoteId\"] = quoteID;\r\n obj[\"Active\"] = true;\r\n \r\n fetch(`${baseUrl}/api/studentqualifications/${qual.Id}`, {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${authToken}` },\r\n body: JSON.stringify(obj)\r\n })\r\n .then(response => {\r\n response.json()\r\n window.location.reload()\r\n })\r\n .catch(err => {\r\n console.log(err)\r\n window.location.reload()\r\n })\r\n }\r\n }\r\n\r\n const sendEmailToAdmins = (qualId) => {\r\n if (allQuals.length) {\r\n const qual = qualifications.filter(qual => qual.Id === +qualId)[0]\r\n\r\n fetch(`${baseUrl}/api/auth/RegisterStudentQual`, {\r\n method: \"POST\",\r\n headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${authToken}` },\r\n body: JSON.stringify({\r\n StudentId: studentID,\r\n Qualification: `${qual.AntaId} ${capitaliseEachWordOfQualName(qual)}`,\r\n CreatedAt: Date.parse(Date.now())\r\n })\r\n })\r\n .catch(err => {\r\n console.log(err); \r\n M.toast({html: \"An error has occurred\", displayLength: 1500})\r\n })\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (studentCompletedCompetencies.length) {\r\n setSortedCompetencies(studentCompletedCompetencies)\r\n }\r\n }, [studentCompletedCompetencies])\r\n\r\n\r\n useEffect(() => {\r\n if (sortConfig.fieldToSort !== null) {\r\n if (sortConfig.direction !== null) {\r\n setSortedCompetencies(sortStudentCompetenciesTable(studentCompletedCompetencies, sortConfig))\r\n } else {\r\n setSortedCompetencies(studentCompletedCompetencies)\r\n }\r\n }\r\n }, [sortConfig])\r\n \r\n return (\r\n \r\n
\r\n \r\n {\r\n userRole === 'Administrator'? :null\r\n }\r\n \r\n {\r\n allQuals.length?\r\n

Qualifications{userRole==='Administrator'? ` for ${allQuals[0].Student.FirstName} ${allQuals[0].Student.Surname}`: \"\"}

\r\n :

Qualifications

\r\n }\r\n\r\n {/* List all quals for student */}\r\n { \r\n allQuals.length?\r\n
\r\n
Qualifications
\r\n
\r\n Code\r\n Name\r\n Quote Id\r\n Contract Id\r\n TCID\r\n Cert Issued\r\n Cert Id\r\n Cert Date \r\n Active \r\n
\r\n {\r\n allQuals.map((quals, index) => {\r\n \r\n return(\r\n
\r\n {quals.Qualification.AntaId}\r\n {quals.Qualification.Name}\r\n {\r\n userRole === 'Student'?\r\n {quals.QuoteId?quals.QuoteId:\"none\"}\r\n : handleQualUpdate(e, quals, index)}/>\r\n }\r\n {\r\n userRole === 'Student'?\r\n {quals.ContractId?quals.ContractId:\"none\"}\r\n : handleQualUpdate(e, quals, index)}/>\r\n } \r\n {\r\n userRole === 'Student'?\r\n {quals.TrainingContractId?quals.TrainingContractId:\"none\"}\r\n : handleQualUpdate(e, quals, index)}/>\r\n } \r\n {\r\n userRole === 'Student'?\r\n {quals.CertificateIssued}\r\n : \r\n }\r\n {\r\n userRole === 'Student'?\r\n {quals.CertificateId}\r\n : handleQualUpdate(e, quals, index)}/>\r\n }\r\n \r\n {\r\n userRole === 'Student'?\r\n {dateTimeToDateString(quals.CertificateAttainedDate, 2)}\r\n :\r\n }\r\n \r\n {\r\n userRole === 'Student'?\r\n {quals.Active? \"Yes\": \"No\"}\r\n :\r\n }\r\n\r\n\r\n\r\n
\r\n )\r\n })\r\n }\r\n
\r\n :null\r\n }\r\n {/* Funding table */}\r\n { \r\n allQuals.length && userRole === 'Administrator'?\r\n <>\r\n
Funding
\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 allQuals.map((quals, index) => {\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
CodeNameFundingWaiverPAS NumberProgram StreamProgram Location
{quals.Qualification.AntaId}{quals.Qualification.Name}\r\n \r\n \r\n \r\n \r\n handleQualUpdate(e, quals, index)} defaultValue={quals.PASNumber} autoComplete=\"new-password\" name=\"PASNumber\" />\r\n \r\n \r\n \r\n \r\n
\r\n \r\n :null\r\n }\r\n\r\n {/* Fees table */}\r\n { \r\n allQuals.length?\r\n
\r\n
Student Fees
\r\n
\r\n Code\r\n Name\r\n Tuition Fee\r\n Subsidy\r\n Other Subsidy \r\n Total Fees \r\n
\r\n {\r\n allQuals.map((quals, index) => {\r\n \r\n return(\r\n
\r\n {quals.Qualification.AntaId}\r\n {quals.Qualification.Name}\r\n {\r\n userRole === 'Student'?\r\n {quals.TuitionFee?parseFloat(quals.TuitionFee).toFixed(2):\"0\"}\r\n : handleQualUpdate(e, quals, index)}/>\r\n }\r\n {\r\n userRole === 'Student'?\r\n {quals.Subsidy?parseFloat(quals.Subsidy).toFixed(2):\"0\"}\r\n : handleQualUpdate(e, quals, index)}/>\r\n }\r\n {\r\n userRole === 'Student'?\r\n {quals.OtherSubsidy?parseFloat(quals.OtherSubsidy).toFixed(2):\"0\"}\r\n : handleQualUpdate(e, quals, index)}/>\r\n }\r\n \r\n {parseFloat(quals.TotalFees).toFixed(2)}\r\n
\r\n )\r\n })\r\n }\r\n
\r\n :null\r\n }\r\n\r\n {/* Delivery Location table */}\r\n { \r\n allQuals.length?\r\n
\r\n
Delivery Details
\r\n
\r\n Code\r\n Name\r\n \r\n Delivery Location \r\n
\r\n {\r\n allQuals.map((quals, index) => {\r\n \r\n return(\r\n
\r\n {quals.Qualification.AntaId}\r\n {quals.Qualification.Name}\r\n \r\n {\r\n userRole === 'Student'?\r\n \r\n \r\n {\r\n deliveryLocation.map((loc) => {\r\n return quals.DeliveryLocId===loc.Id && loc.DeliveryLocation\r\n })\r\n }\r\n \r\n : \r\n }\r\n \r\n
\r\n )\r\n })\r\n }\r\n
\r\n :null\r\n }\r\n\r\n
\r\n {/*** QUALIFICATION COMPETENCIES ***/}\r\n {\r\n completedQuals.length ?\r\n
\r\n \r\n
Qualification Competencies
\r\n {\r\n completedQuals.map((qualification, index) => {\r\n \r\n return(\r\n
\r\n

\r\n {qualification.Qualification.AntaId} {qualification.Qualification.Name} \r\n {qualification.CertificateId?`Certificate ID: ${qualification.CertificateId}`:\"Certificate not attained yet.\"} {`Issued: ${dateTimeToDateString(qualification.CertificateAttainedDate, 2)}`}\r\n

\r\n
\r\n
\r\n requestSort(\"CompID\")}>Code \r\n requestSort(\"compDsc\")}>Units Enrolled \r\n requestSort(\"ActivityStartDate\")}>Start \r\n requestSort(\"ActivityEndDate\")}>Finish \r\n requestSort(\"Result\")}>Result \r\n
\r\n
\r\n {\r\n sortedCompetencies.map((competency, index) => { \r\n return(\r\n qualification.Id === competency.StudentQualificationId &&\r\n
\r\n {competency.Competency.CompID}\r\n {competency.Competency.compDsc}\r\n {\r\n userRole === 'Student'?\r\n {dateTimeToDateString(competency.ActivityStartDate, 2)}\r\n :\r\n \r\n \r\n }\r\n \r\n {\r\n userRole === 'Student'?\r\n {dateTimeToDateString(competency.ActivityEndDate, 2)}\r\n :\r\n \r\n \r\n\r\n }\r\n {\r\n userRole === 'Student'?\r\n {competency.Result.Result}\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 :null\r\n }\r\n\r\n {/* Pending qualifications - *** only show if there are any */}\r\n \r\n {\r\n pendingQuals.length ?\r\n
\r\n
\r\n
Pending Qualifications
\r\n { \r\n pendingQuals.map((pending, index) => \r\n pending.QuoteId===null?\r\n
\r\n
{pending.Qualification.AntaId} {pending.Qualification.Name} awaiting quote.
\r\n
\r\n {\r\n userRole === 'Administrator'?\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n :null\r\n }\r\n \r\n \r\n
\r\n
\r\n :\r\n
\r\n

The quote for {pending.Qualification.AntaId} {pending.Qualification.Name} is ${pending.TuitionFee ? pending.TuitionFee.toFixed(2) : '0'}

\r\n
\r\n \r\n \r\n
\r\n
\r\n )\r\n }\r\n
\r\n :null\r\n }\r\n\r\n

\r\n\r\n {/*** REGISTER FOR A NEW QUALIFICATION ***/}\r\n {\r\n isLoadingAll?\r\n \"\"/\r\n :\r\n
\r\n
Register a New Qualification
\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 qualificationDetails.length?\r\n
\r\n descriptionDescription\r\n
\r\n
\r\n
Description
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n :null\r\n }\r\n \r\n

\r\n \r\n

\r\n

Qualification now registered and awaiting quote!

\r\n
\r\n } \r\n \r\n
\r\n )\r\n}\r\n\r\nexport default StudentQualifications\r\n","export const sortStudentCompetenciesTable = (studentCompetencies, sortConfig) => {\r\n const copyOfStudentCompetencies = studentCompetencies.slice();\r\n\r\n if (sortConfig.direction === \"ascending\") {\r\n switch(sortConfig.fieldToSort) {\r\n case \"Result\":\r\n return copyOfStudentCompetencies.sort((a, b) => {\r\n return a.Result.Result.localeCompare(b.Result.Result)\r\n })\r\n case \"CompID\":\r\n case \"compDsc\":\r\n return copyOfStudentCompetencies.sort((a, b) => {\r\n return a.Competency[sortConfig.fieldToSort].localeCompare(b.Competency[sortConfig.fieldToSort])\r\n })\r\n case \"AcitivityStartDate\":\r\n case \"ActivityEndDate\":\r\n return copyOfStudentCompetencies.sort((a, b) => {\r\n if (!a[sortConfig.fieldToSort] || !b[sortConfig.fieldToSort]) return 0\r\n return a[sortConfig.fieldToSort].localeCompare(b[sortConfig.fieldToSort])\r\n })\r\n default:\r\n return studentCompetencies\r\n }\r\n } else if (sortConfig.direction === \"descending\") {\r\n switch(sortConfig.fieldToSort) {\r\n case \"Result\":\r\n return copyOfStudentCompetencies.sort((a, b) => {\r\n return b.Result.Result.localeCompare(a.Result.Result)\r\n })\r\n case \"CompID\":\r\n case \"compDsc\":\r\n return copyOfStudentCompetencies.sort((a, b) => {\r\n return b.Competency[sortConfig.fieldToSort].localeCompare(a.Competency[sortConfig.fieldToSort])\r\n })\r\n case \"AcitivityStartDate\":\r\n case \"ActivityEndDate\":\r\n return copyOfStudentCompetencies.sort((a, b) => {\r\n if (!a[sortConfig.fieldToSort] || !b[sortConfig.fieldToSort]) return 0\r\n return b[sortConfig.fieldToSort].localeCompare(a[sortConfig.fieldToSort])\r\n })\r\n default:\r\n return studentCompetencies\r\n }\r\n } else {\r\n return studentCompetencies\r\n }\r\n}","\r\nimport React from 'react'\r\nimport { Editor } from '@tinymce/tinymce-react';\r\n\r\n//This is being used in EditQualifications.jsx to update the qualification description\r\nconst UneditableTextEditor = ({id, name, initValue}) => {\r\n\r\n return (\r\n newText = initValue}\r\n />\r\n )\r\n}\r\n\r\nexport default UneditableTextEditor","import React, { useState } from 'react'\r\nimport { useEffect } from 'react'\r\nimport UneditableTextEditor from '../UneditableTextEditor/UneditableTextEditor'\r\nimport './CopyTableHTML.scss'\r\n\r\nconst CopyTableHTML = ({ competencies }) => {\r\n\r\n const [tableHTML, setTableHTML] = useState(null)\r\n const [isTableForCertificate, setIsTableForCertificate] = useState(true)\r\n\r\n // This will be used in a filter to ensure the correct competencies are collected\r\n const resultsToFilterFor = {\r\n \"Competent\": true,\r\n \"Credit transfer\": true,\r\n \"Recognition of current competency granted\": true,\r\n \"Recognition of prior learning granted\": true\r\n }\r\n\r\n const closeTable = () => setTableHTML(null)\r\n\r\n const toggleTableOutput = () => {\r\n setIsTableForCertificate(!isTableForCertificate)\r\n }\r\n\r\n const copyTable = () => {\r\n let tableToCopy = document.querySelector(\".cert-table\");\r\n let percentWidthOfTable = isTableForCertificate ? 100 : 80\r\n let htmlString = tableToCopy.outerHTML.replace(` class=\"hide cert-table\"`, ` class=\"cert-table\" style=\"width: ${percentWidthOfTable}%; font-size: 11pt\" border=\"0\" cellpadding=\"6\" cellspacing=\"0\" align=\"center\"`)\r\n setTableHTML(htmlString)\r\n }\r\n\r\n // Whenever the toggle is switched, regenerate the table\r\n useEffect(() => {\r\n if (tableHTML) {\r\n copyTable()\r\n }\r\n }, [isTableForCertificate])\r\n\r\n\r\n return (\r\n
\r\n {\r\n !tableHTML ?\r\n \r\n :\r\n \r\n }\r\n {\r\n tableHTML &&\r\n <>\r\n
\r\n

Copy the table below and paste it where needed

\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 isTableForCertificate ?\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n competencies.length &&\r\n competencies.filter(competency => resultsToFilterFor[competency.Result.Result] !== undefined).map(competency => {\r\n let yearCompleted = \"2022\"\r\n if (competency.ActivityEndDate) {\r\n yearCompleted = new Date(competency.ActivityEndDate).getFullYear()\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 competencies.length &&\r\n competencies.filter(competency => resultsToFilterFor[competency.Result.Result] !== undefined).map(competency => {\r\n return (\r\n \r\n \r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n }\r\n
YearCodeUnits EnrolledResult
{yearCompleted}{competency.Competency.CompID}{competency.Competency.compDsc} {competency.Result.Result}
{competency.Competency.CompID}{competency.Competency.compDsc}
\r\n
\r\n )\r\n}\r\n\r\nexport default CopyTableHTML","import React, {useState, useEffect} from 'react'\r\nimport './DragDropZone.scss';\r\nimport { baseUrl } from '../../functions/globalVariables';\r\nimport { useDataFetch } from '../../hooks/useDataFetch';\r\nimport { arrayToObject } from '../../functions/arrayToObject';\r\nimport { capitaliseEachWordOfQualName } from '../../functions/capitaliseEachWordOfQualName';\r\nimport M from 'materialize-css';\r\nimport { dateTimeToDateString } from '../../functions/dateTimeToDateString';\r\nimport DatePickerComp from '../DatePickerComp/DatePickerComp';\r\nimport Spinner from '../../assets/spinner.svg';\r\nimport dayjs from 'dayjs'\r\nimport CopyTableHTML from '../CopyTableHTML/CopyTableHTML';\r\nimport { useThemeContext } from '../../ThemeContext';\r\n\r\nconst DragDropZone = ({studentCompetencies, studentCoreElective, currentQualification, hoursUnitsObject, setHoursUnitsObject, antaID, qualName}) => {\r\n \r\n const { authToken, userRole, studentID, selectedStudentId } = useThemeContext()\r\n\r\n const currentStudentID = userRole === \"Administrator\" ? selectedStudentId : studentID\r\n \r\n const [isLoadingDrag, setIsLoadingDrag] = useState(false)\r\n\r\n const [hasAcceptedPlan, setHasAcceptedPlan] = useState(false)\r\n const [dateOfAcceptance, setDateOfAcceptance] = useState(\"\")\r\n const [personWhoAccepted, setPersonWhoAccepted] = useState(\"\")\r\n\r\n const [showTableToCopy, setShowTableToCopy] = useState(false)\r\n\r\n const getFormattedDateOfAcceptance = () => dayjs(currentQualification.PlanAcceptedAt).format(\"dddd, MMMM D YYYY, h:mm a\")\r\n\r\n const competencyArrayToObject = (array) =>\r\n array.reduce((obj, item) => {\r\n obj[item.CompetencyId] = item\r\n return obj\r\n }, {})\r\n\r\n //calculate Total Number of hours, units and nominal hours per unit\r\n const calcUnitHours = (studentCoreElective) => {\r\n let hours = 0;\r\n let units = 0;\r\n \r\n if (studentCompetencies.length && studentCoreElective.length){\r\n const isStandardObj = competencyArrayToObject(studentCoreElective)\r\n \r\n \r\n for (let i=0; i{\r\n var elemSelect = document.querySelectorAll('select');\r\n var instanceSelect = M.FormSelect.init(elemSelect, {}); \r\n });\r\n\r\n useEffect(() => {\r\n if (currentQualification) {\r\n if (currentQualification.PlanAcceptedBy && currentQualification.PlanAcceptedAt) {\r\n setPersonWhoAccepted(currentQualification.PlanAcceptedBy) \r\n setDateOfAcceptance(getFormattedDateOfAcceptance())\r\n setHasAcceptedPlan(true)\r\n } else {\r\n setPersonWhoAccepted(\"\") \r\n setDateOfAcceptance(\"\")\r\n setHasAcceptedPlan(false)\r\n }\r\n }\r\n }, [currentQualification])\r\n\r\n useEffect(() => {\r\n if (studentCompetencies.length) {\r\n setHoursUnitsObject(Object.assign({}, hoursUnitsObject, {[antaID]: calcUnitHours(studentCoreElective)}))\r\n }\r\n }, [studentCompetencies])\r\n\r\n\r\n //Object used to post an elective competency when it added to the student's competencies.\r\n const compObject = {\r\n \"BookingId\": 0,\r\n \"CourseId\": \"redundant\",\r\n \"StudentId\": 0,\r\n \"CompetencyId\": 0,\r\n \"StudentQualificationId\": 0,\r\n \"ResultId\": 10,\r\n \"SaStudentId\": null,\r\n \"PppContract\": \"No\",\r\n \"PppCourseSiteId\": \"\",\r\n \"ActivityStartDate\": null,\r\n \"ActivityEndDate\": null\r\n } \r\n\r\n const getCoreElective = (qualId, compId) => {\r\n let type;\r\n let IsStandard;\r\n for(let i=0; i {\r\n const coreElectiveObject = getCoreElective(competency.StudentQualification.QualId, competency.Competency.Id)\r\n let object;\r\n if(coreElectiveObject=== undefined){\r\n object = competency;\r\n }else{\r\n object = { ...competency, 'coreElective': coreElectiveObject.type, 'IsStandard': coreElectiveObject.IsStandard }\r\n }\r\n \r\n return object\r\n })\r\n }\r\n \r\n // Grabbing all available competencies for current qual that have not been assigned to the student yet\r\n let availableCompUrl = \"\";\r\n if (currentQualification){\r\n availableCompUrl = `${baseUrl}/api/qualificationcompetencies?$expand=Qualification,Competency&$filter=QualId eq ${currentQualification.QualId}`;\r\n }\r\n const [ isLoadingAllComp, qualCompetencies, errorAllComp ] = useDataFetch(availableCompUrl, authToken);\r\n\r\n const tempObject = arrayToObject(reducedStudentCompetencies)\r\n const availableCompetencies = qualCompetencies.filter(comp => tempObject[comp.CompetencyId] === undefined)\r\n\r\n // Saving dragged element\r\n const [draggedElement, setDraggedElement] = useState(null)\r\n const [currentDivId, setCurrentDivId] = useState(null)\r\n\r\n const [indexDraggedEl, setIndexDraggedEl] = useState(null)\r\n const [idToDelete, setIdToDelete] = useState(null)\r\n\r\n\r\n const resultsUrl = `${baseUrl}/api/CompetencyResults`;\r\n const [ isLoadingResults, results, resultsError ] = useDataFetch(resultsUrl)\r\n \r\n const onDragStart = (ev) => {\r\n ev.dataTransfer.effectAllowed = \"copyMove\";\r\n ev.dataTransfer.setData(\"text\", ev.target.id);\r\n const divId = ev.target.dataset.id;\r\n setIdToDelete(ev.target.dataset.idtodelete)\r\n setIndexDraggedEl(ev.target.dataset.index)\r\n setDraggedElement(ev.target)\r\n setCurrentDivId(divId)\r\n }\r\n\r\n const onDragOver = (ev) => {\r\n ev.preventDefault();\r\n }\r\n\r\n const onDrop = (ev, divId) => {\r\n setIsLoadingDrag(true)\r\n ev.preventDefault();\r\n var data = ev.dataTransfer.getData(\"text\");\r\n const destination = document.getElementById(divId);\r\n destination.appendChild(document.getElementById(data));\r\n \r\n if (currentDivId === 'assigned' && divId === 'div1') { \r\n deleteCompetency(idToDelete); \r\n draggedElement.dataset.id = 'unassigned'\r\n availableCompetencies.push(reducedStudentCompetencies[ev.target.dataset.index])\r\n reducedStudentCompetencies.splice(ev.target.dataset.index, 1);\r\n } else if (currentDivId === 'unassigned' && divId === 'div2') {\r\n //The object for the competency to be added needs the StudentId, CompetencyId and StudentQualificationId\r\n compObject.StudentId = currentStudentID;\r\n if(availableCompetencies.length){\r\n compObject.CompetencyId = availableCompetencies[indexDraggedEl].CompetencyId;\r\n }\r\n if (currentQualification.Id) {\r\n compObject.StudentQualificationId = currentQualification.Id;\r\n }\r\n addCompetency(compObject)\r\n draggedElement.dataset.id = 'assigned'\r\n reducedStudentCompetencies.push(compObject);\r\n availableCompetencies.splice(ev.target.dataset.index, 1)\r\n }\r\n\r\n setIsLoadingDrag(false);\r\n \r\n }\r\n\r\n const addCompetency = (object) =>{\r\n fetch(`${baseUrl}/api/studentcompetencies`, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n body: JSON.stringify(object)\r\n })\r\n .then(response => {\r\n response.json()\r\n window.location.reload()\r\n })\r\n .catch(err => {\r\n console.log(err)\r\n M.toast({html: \"Something went wrong\", displayLength: 2000})\r\n })\r\n }\r\n\r\n const deleteCompetency = (id) => {\r\n fetch(`${baseUrl}/api/studentcompetencies/${id}`, {\r\n method: 'DELETE',\r\n headers: { 'Authorization': `Bearer ${authToken}` }\r\n })\r\n .catch(err => console.log(err))\r\n }\r\n\r\n const handleChange = (e, date, detailsToUpdate, index) => {\r\n \r\n let type=\"\";\r\n let name=\"\";\r\n let value=\"\";\r\n if (e === 'startDate' || e ==='finishDate') {\r\n name = e;\r\n value = date;\r\n } else {\r\n type = e.target.type;\r\n name = e.target.name;\r\n value = e.target.value;\r\n }\r\n \r\n const obj = { \r\n \"Id\": 0,\r\n \"BookingId\": 0,\r\n \"CourseId\": \"\",\r\n \"StudentId\": 0,\r\n \"CompetencyId\": 0,\r\n \"StudentQualificationId\": 0,\r\n \"ResultId\": 0,\r\n \"SaStudentId\": \"\",\r\n \"PppContract\": \"\",\r\n \"PppCourseSiteId\": null,\r\n \"ActivityStartDate\": null,\r\n \"ActivityEndDate\": null\r\n }\r\n for (const [key, value] of Object.entries(obj)) {\r\n obj[key] = detailsToUpdate[key]\r\n }\r\n\r\n if(type ==='select-one'){\r\n obj[\"ResultId\"] = parseInt(value);\r\n reducedStudentCompetencies[index].ResultId = value;\r\n }else{\r\n if(name === \"startDate\"){\r\n obj['ActivityStartDate'] = value;\r\n reducedStudentCompetencies[index].ActivityStartDate = value;\r\n }else {\r\n obj['ActivityEndDate'] = value;\r\n reducedStudentCompetencies[index].ActivityEndDate = value;\r\n }\r\n }\r\n fetch(`${baseUrl}/api/studentcompetencies/${detailsToUpdate[\"Id\"]}`, {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${authToken}` },\r\n body: JSON.stringify(obj)\r\n })\r\n .then(response => response.json())\r\n .catch(err => console.log(err))\r\n }\r\n\r\n const handleAcceptTrainingPlan = (acceptStatus) => {\r\n\r\n if (acceptStatus === \"accepted\") {\r\n currentQualification.PlanAcceptedBy = window.sessionStorage.getItem(\"mbhUserName\")\r\n currentQualification.PlanAcceptedAt = dayjs().format()\r\n setPersonWhoAccepted(currentQualification.PlanAcceptedBy)\r\n setDateOfAcceptance(getFormattedDateOfAcceptance())\r\n } else {\r\n currentQualification.PlanAcceptedBy = null\r\n currentQualification.PlanAcceptedAt = null\r\n setPersonWhoAccepted(\"\")\r\n setDateOfAcceptance(\"\")\r\n }\r\n\r\n fetch(`${baseUrl}/api/studentqualifications/${currentQualification.Id}`, {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${authToken}` },\r\n body: JSON.stringify(currentQualification)\r\n })\r\n .then(() => {\r\n if (acceptStatus === \"accepted\") {\r\n // Only send an email if a student has accepted the training plan\r\n if (userRole !== \"Administrator\") {\r\n sendEmailToAdmins(currentQualification)\r\n }\r\n setHasAcceptedPlan(true)\r\n } else {\r\n setHasAcceptedPlan(false)\r\n }\r\n })\r\n .catch(err => console.log(err))\r\n }\r\n\r\n const sendEmailToAdmins = (qual) => {\r\n fetch(`${baseUrl}/api/auth/AcceptTrainingPlan`, {\r\n method: \"POST\",\r\n headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${authToken}` },\r\n body: JSON.stringify({\r\n StudentId: studentID,\r\n Qualification: `${qual.Qualification.AntaId} ${capitaliseEachWordOfQualName(qual.Qualification)}`,\r\n AcceptedAt: qual.Qualification.AcceptedAt\r\n })\r\n })\r\n .catch(err => {\r\n console.log(err); \r\n M.toast({html: \"An error has occurred\", displayLength: 1500})\r\n })\r\n }\r\n\r\n return (\r\n
\r\n {\r\n isLoadingDrag || isLoadingAllComp ? \"Spinner\"/\r\n :\r\n
\r\n
Summary of Results
\r\n {\r\n userRole === \"Administrator\" &&\r\n \r\n }\r\n
Competencies for {antaID} {qualName}
\r\n
\r\n
\r\n Code\r\n Units Enrolled\r\n Type\r\n Start\r\n Finish\r\n Result\r\n
\r\n
\r\n \r\n {\r\n reducedStudentCompetencies.map((competency, index) => {\r\n \r\n const isDraggable = competency.coreElective === 'Elective' && (competency.Result.Result === \"Continuing enrolment\" || competency.Result.Result === \"Not Yet Started\") ? true : false\r\n\r\n return (\r\n
onDragStart(e)} >\r\n {competency.Competency.CompID}\r\n {competency.Competency.compDsc}\r\n {competency.coreElective}\r\n {\r\n userRole === 'Student' || hasAcceptedPlan ?\r\n {dateTimeToDateString(competency.ActivityStartDate, 2)}\r\n :\r\n }\r\n {\r\n userRole === 'Student' || hasAcceptedPlan ?\r\n {dateTimeToDateString(competency.ActivityEndDate, 2)}\r\n :\r\n \r\n \r\n }\r\n {\r\n userRole === 'Student' || hasAcceptedPlan ?\r\n {competency.Result.Result}\r\n :
\r\n \r\n
\r\n }\r\n {\r\n !hasAcceptedPlan &&\r\n \r\n {\r\n isDraggable &&\r\n open_with\r\n }\r\n \r\n }\r\n
\r\n )\r\n })\r\n }\r\n \r\n
\r\n {\r\n !hasAcceptedPlan &&\r\n
onDragOver(e)} onDrop={(e)=>{onDrop(e, \"div2\")}}>\r\n

DROP COMPETENCY HERE

\r\n
\r\n }\r\n
\r\n
\r\n }\r\n {\r\n !hasAcceptedPlan &&\r\n ( \r\n isLoadingDrag ? \"Spinner\"/\r\n :\r\n <>\r\n
Available Competencies
\r\n
\r\n\r\n
onDragOver(e)} onDrop={(e)=>{onDrop(e, \"div1\")}}>\r\n
\r\n

DROP COMPETENCY HERE

\r\n
\r\n {\r\n availableCompetencies.map((competency, index) => {\r\n return(\r\n
onDragStart(e)} >\r\n {competency.Competency.CompID}\r\n {competency.Competency.compDsc}\r\n {competency.IsCore ? 'Core' : 'Elective'}\r\n {dateTimeToDateString(competency.ActivityStartDate, 2)}\r\n {dateTimeToDateString(competency.ActivityEndDate, 2)}\r\n \r\n open_with\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 !hasAcceptedPlan ?\r\n
\r\n \r\n
\r\n :\r\n <>\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n person\r\n

Approved By:

\r\n

{personWhoAccepted}

\r\n
\r\n
\r\n access_time\r\n

Approved At:

\r\n

{dateOfAcceptance}

\r\n
\r\n
\r\n \r\n }\r\n
\r\n\r\n
\r\n )\r\n}\r\n\r\nexport default DragDropZone\r\n","import React, { useEffect } from 'react'\r\nimport './TrainingPlanInfoBoxes.scss'\r\nimport M from 'materialize-css'\r\n\r\nconst TrainingPlanInfoBoxes = ({ currentQual }) => {\r\n\r\n useEffect(()=>{\r\n var elems = document.querySelectorAll('.modal');\r\n var instances = M.Modal.init(elems, {});\r\n })\r\n\r\n // Parses HTML string to React Elements\r\n var parse = require('html-react-parser');\r\n\r\n return (\r\n
\r\n
\r\n
Training Delivery
\r\n info_outline\r\n
\r\n
\r\n
Training Delivery
\r\n
\r\n
\r\n {\r\n currentQual.TrainingDeliveryDescription !== null \r\n ?\r\n parse(currentQual.TrainingDeliveryDescription.toString())\r\n :\r\n \"No Information Available\"\r\n }\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
Assessment Support
\r\n info_outline\r\n
\r\n
\r\n
Assessment Support
\r\n
\r\n
\r\n {\r\n currentQual.AssessmentSupportDescription !== null \r\n ?\r\n parse(currentQual.AssessmentSupportDescription.toString())\r\n :\r\n \"No Information Available\"\r\n }\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
Assessment Timeframe
\r\n info_outline\r\n
\r\n
\r\n
Assessment Timeframe
\r\n
\r\n
\r\n {\r\n currentQual.AssessmentTimeframeDescription !== null \r\n ?\r\n parse(currentQual.AssessmentTimeframeDescription.toString())\r\n :\r\n \"No Information Available\"\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 TrainingPlanInfoBoxes\r\n","import React, { useEffect } from 'react'\r\nimport { useHistory, useParams } from 'react-router-dom'\r\nimport { capitaliseEachWordOfQualName } from '../../functions/capitaliseEachWordOfQualName'\r\nimport './TrainingPlanNav.scss' \r\n\r\nconst TrainingPlanNav = ({ allStudentQuals, trainingPlanNumber, setTrainingPlanNumber, setCurrentQualId }) => {\r\n\r\n let history = useHistory()\r\n const { courseId } = useParams()\r\n\r\n const handleTabClick = (e) => {\r\n const tabIndex = e.target.dataset.id\r\n setTrainingPlanNumber(tabIndex)\r\n setCurrentQualId(allStudentQuals[tabIndex].QualId)\r\n history.push(`/admin-portal/administer-student/student-training-plan/${allStudentQuals[tabIndex].QualId}`)\r\n }\r\n\r\n useEffect(() => {\r\n const tabs = document.getElementsByClassName(\"training-plan-nav__tab\")\r\n const classToAdd = \"training-plan-nav__active-tab\"\r\n // Clear tab classes so that none are active\r\n for (let i = 0; i < tabs.length; i++) {\r\n if (tabs[i].classList.contains(classToAdd)) {\r\n tabs[i].classList.remove(classToAdd)\r\n }\r\n }\r\n\r\n // Only set the relevant tab to be active\r\n for (let i = 0; i < allStudentQuals.length; i++) {\r\n if (allStudentQuals[i].QualId === +courseId) {\r\n if (!tabs[i].classList.contains(classToAdd)) {\r\n tabs[i].classList.add(classToAdd)\r\n }\r\n break\r\n }\r\n }\r\n })\r\n\r\n return (\r\n
\r\n {\r\n allStudentQuals.map((qual, index) => {\r\n\r\n return trainingPlanNumber === 0 && index === 0 ?\r\n
\r\n

{qual.Qualification.AntaId} {capitaliseEachWordOfQualName(qual.Qualification)}

\r\n
\r\n :\r\n
\r\n

{qual.Qualification.AntaId} {capitaliseEachWordOfQualName(qual.Qualification)}

\r\n
\r\n })\r\n }\r\n
\r\n )\r\n}\r\n\r\nexport default TrainingPlanNav\r\n","\r\nimport React from 'react'\r\nimport { Editor } from '@tinymce/tinymce-react';\r\n\r\n//This is being used in EditQualifications.jsx to update the qualification description\r\nconst TextEditor = ({id, name, initValue, rowIndex, updateDescriptionField, handleDescriptionChange, descriptionField, addOrEditQual, object}) => {\r\n\r\n const handleEditorChange = (content) => {\r\n if (addOrEditQual === 'edit') {\r\n updateDescriptionField(rowIndex, content, descriptionField);\r\n\r\n } else if (addOrEditQual === 'add') {\r\n handleDescriptionChange(name, content)\r\n } else if (addOrEditQual === 'createEvent') {\r\n console.log(name, content)\r\n } else if (addOrEditQual === 'comments'){\r\n handleDescriptionChange(content, object)\r\n }\r\n }\r\n\r\n return (\r\n handleEditorChange(newText)}\r\n />\r\n )\r\n}\r\n\r\nexport default TextEditor","import React, {useState} from 'react'\r\nimport { useThemeContext } from '../../ThemeContext';\r\nimport TextEditor from '../TextEditor/TextEditor';\r\n\r\nconst TrainingPlanComments = ({studentQual, handleUpdateComments}) => {\r\n\r\n const { userRole } = useThemeContext()\r\n\r\n const [editComments, setEditComments] = useState(true);\r\n \r\n return (\r\n
\r\n {\r\n userRole === 'Administrator'?\r\n
{\r\n !editComments?\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 TrainingPlanComments\r\n","import React from 'react'\r\nimport { capitaliseEachWordOfQualName } from '../../functions/capitaliseEachWordOfQualName';\r\nimport { dateTimeToDateString } from '../../functions/dateTimeToDateString';\r\nimport { useThemeContext } from '../../ThemeContext';\r\nimport TrainingPlanComments from '../TrainingPlanComments/TrainingPlanComments';\r\n\r\nconst TrainingPlanTable = ({ studentQual, deliveryMode, hoursUnitsObject, trainers, handleUpdateTrainer, handleUpdateComments }) => {\r\n\r\n const { userRole } = useThemeContext()\r\n\r\n return (\r\n
\r\n <>\r\n
Training Record Plan
\r\n
    \r\n
  • Student Name{studentQual.Student.FirstName} {studentQual.Student.Surname}
  • \r\n
  • Student Identifier{studentQual.Student.SaStudentId}
  • \r\n
  • MBH Student ID{studentQual.Student.Id}
  • \r\n
  • Commitment ID{studentQual.ContractId}
  • \r\n
  • Participating Organisation (if applicable)
  • \r\n
  • Registered Training Organisation (RTO)MBH Management Pty Ltd
  • \r\n
  • National Qualification Code{studentQual.Qualification.AntaId}
  • \r\n
  • Title of Qualification{capitaliseEachWordOfQualName(studentQual.Qualification)}
  • \r\n
  • Training Enrolment Date{dateTimeToDateString(studentQual.ContractCreatedAt)}
  • \r\n
  • Total Fees{studentQual.TotalFees}
  • \r\n
  • Total Number of Hours for Qualification{hoursUnitsObject[studentQual.Qualification.AntaId] ? hoursUnitsObject[studentQual.Qualification.AntaId].totalHours : 0}
  • \r\n
  • Total Number of Units for Qualification{hoursUnitsObject[studentQual.Qualification.AntaId] ? hoursUnitsObject[studentQual.Qualification.AntaId].totalUnits : 0}
  • \r\n
  • Nominal hours per unit{hoursUnitsObject[studentQual.Qualification.AntaId] ? hoursUnitsObject[studentQual.Qualification.AntaId].hrsPerUnit : 0}
  • \r\n
  • Method of delivery {deliveryMode[studentQual.Qualification.DeliveryMode]}
  • \r\n {\r\n userRole === \"Administrator\" ?\r\n <>\r\n
  • \r\n Trainer\r\n \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
  • \r\n \r\n :\r\n <>\r\n
  • \r\n Trainer\r\n {studentQual.Trainer === null ? \"TBD\" : `${studentQual.Trainer.FirstName} ${studentQual.Trainer.Surname}`}\r\n
  • \r\n \r\n }\r\n
  • Comments\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 TrainingPlanTable\r\n","import React, { useEffect } from 'react'\r\nimport { useParams } from 'react-router-dom';\r\nimport { baseUrl } from '../../functions/globalVariables';\r\nimport { useCurrentQualFetch } from '../../hooks/useCurrentQualFetch';\r\nimport { useThemeContext } from '../../ThemeContext';\r\nimport TrainingPlanTable from '../TrainingPlanTable/TrainingPlanTable'\r\n\r\nconst TrainingPlanTableContainer = ({ studentQual, deliveryMode, hoursUnitsObject, trainers, handleUpdateTrainer, handleUpdateComments, currentQualId }) => {\r\n\r\n const { studentID, selectedStudentId, userRole, authToken } = useThemeContext()\r\n\r\n const currentStudentID = userRole === \"Administrator\" ? selectedStudentId : studentID\r\n\r\n const { courseId } = useParams();\r\n\r\n const getCurrentQualificationUrl = `${baseUrl}/api/studentqualifications?$expand=*&$filter=StudentId eq ${currentStudentID} and QualId eq ${courseId}`;\r\n const [isLoading, data, error] = useCurrentQualFetch(getCurrentQualificationUrl, authToken, courseId);\r\n\r\n return (\r\n
\r\n {\r\n isLoading && !data ?

Loading...

\r\n :\r\n \r\n }\r\n
\r\n )\r\n}\r\n\r\nexport default TrainingPlanTableContainer\r\n","import { useState, useEffect } from 'react'\r\n\r\nexport const useCurrentQualFetch = (url, token, currentQualId) => {\r\n\r\n const [isLoading, setIsLoading] = useState(false)\r\n const [error, setError] = useState(null)\r\n const [data, setData] = useState([])\r\n \r\n useEffect(() => {\r\n\r\n // const ac = new AbortController();\r\n \r\n setIsLoading(true)\r\n fetch(url, {\r\n headers: {'Authorization': `Bearer ${token}`}\r\n })\r\n .then(response => response.json())\r\n .then(data => {\r\n setData(data.value)\r\n setIsLoading(false)\r\n })\r\n .catch(err => setError(err))\r\n // return () => ac.abort(); \r\n }, [url, currentQualId])\r\n\r\n return [ isLoading, data, error ]\r\n\r\n}","import dayjs from 'dayjs';\r\nimport React, { useEffect, useState } from 'react'\r\nimport { useHistory } from 'react-router-dom';\r\nimport Spinner from '../../assets/spinner.svg';\r\nimport { arrayToObjectWithKey } from '../../functions/arrayToObject';\r\nimport { baseUrl } from '../../functions/globalVariables';\r\nimport { useDataFetch } from '../../hooks/useDataFetch';\r\nimport { useThemeContext } from '../../ThemeContext';\r\n\r\nimport './StudentEvents.scss'\r\n\r\nconst StudentEvents = ({ studentFirstName }) => {\r\n\r\n let history = useHistory()\r\n const { studentID, selectedStudentId, authToken, userRole } = useThemeContext()\r\n\r\n const currentStudentID = userRole === \"Administrator\" ? selectedStudentId : studentID \r\n\r\n const studentEventsUrl = `${baseUrl}/api/eventregistrations?$filter=StudentID eq ${currentStudentID}`;\r\n const [isLoadingStudentEvents, studentEvents, studentEventsErr] = useDataFetch(studentEventsUrl, authToken)\r\n\r\n const allEventsUrl = `${baseUrl}/api/events`;\r\n const [isLoadingAllEvents, allEvents, allEventsErr] = useDataFetch(allEventsUrl, authToken)\r\n\r\n const trainersUrl = `${baseUrl}/api/trainers`;\r\n const [isLoadingTrainers, trainers, errorTrainers] = useDataFetch(trainersUrl, authToken)\r\n\r\n const [eventsAttendedByStudent, setEventsAttendedByStudent] = useState([])\r\n\r\n const [upcomingEvents, setUpcomingEvents] = useState([])\r\n const [pastEvents, setPastEvents] = useState([])\r\n\r\n useEffect(() => {\r\n const existingEvents = []\r\n\r\n if (studentEvents.length && allEvents.length) {\r\n const allEventsObj = arrayToObjectWithKey(allEvents, \"Id\")\r\n\r\n for (let i = 0; i < studentEvents.length; i++) {\r\n const id = studentEvents[i].EventID\r\n existingEvents.push(allEventsObj[id])\r\n }\r\n }\r\n\r\n setEventsAttendedByStudent(existingEvents)\r\n }, [studentEvents, allEvents])\r\n\r\n const isUpcomingEvent = (endDateTime) => {\r\n const currentDay = dayjs().format(\"YYYY-MM-DD\");\r\n const currentTime = dayjs().format(\"dddd, MMMM D, YYYY h:mm A\");\r\n\r\n const dayOfEvent = dayjs(endDateTime).format(\"YYYY-MM-DD\")\r\n const endTimeOfEvent = dayjs(endDateTime).format(\"dddd, MMMM D, YYYY h:mm A\")\r\n\r\n if (dayjs(currentDay).isAfter(dayOfEvent)) {\r\n return false\r\n } else if (dayjs(currentDay).isSame(dayOfEvent) && dayjs(currentTime).isAfter(endTimeOfEvent)) {\r\n return false\r\n }\r\n\r\n return true\r\n }\r\n\r\n useEffect(() => {\r\n if (eventsAttendedByStudent.length) {\r\n const todaysDate = dayjs().format()\r\n const filterUpcomingEvents = eventsAttendedByStudent.filter(event => isUpcomingEvent(event.EndDateTime));\r\n const filterPastEvents = eventsAttendedByStudent.filter(event => !isUpcomingEvent(event.EndDateTime))\r\n .sort((a, b) => a.StartDateTime < b.StartDateTime)\r\n\r\n setUpcomingEvents(filterUpcomingEvents)\r\n setPastEvents(filterPastEvents)\r\n }\r\n }, [eventsAttendedByStudent])\r\n\r\n const formatEventDate = (startDate, endDate, typeOfField) => {\r\n if (typeOfField === \"Date\") {\r\n return new Date(startDate).toLocaleString('en-US', {\r\n weekday: 'long', // long, short, narrow\r\n day: 'numeric', // numeric, 2-digit\r\n month: 'long', // numeric, 2-digit, long, short, narrow\r\n })\r\n } else if (typeOfField === \"Time\") {\r\n const formattedStartDate = new Date(startDate).toLocaleString('en-US', { hour: 'numeric', minute: 'numeric' })\r\n const formattedEndDate = new Date(endDate).toLocaleString('en-US', { hour: 'numeric', minute: 'numeric' })\r\n\r\n return `${formattedStartDate} - ${formattedEndDate}`\r\n }\r\n }\r\n\r\n const displayTrainerName = (trainerId) => {\r\n if (trainers.length) {\r\n const trainer = trainers.filter(trainer => trainer.Id === trainerId)[0]\r\n return trainer ? `${trainer.FirstName} ${trainer.Surname}` : \"No Trainer Selected\"\r\n } else {\r\n return \"No Trainer Selected\"\r\n }\r\n }\r\n\r\n \r\n\r\n return (\r\n
\r\n {\r\n isLoadingAllEvents || isLoadingStudentEvents ?\r\n \"Spinner\"/\r\n :\r\n (\r\n upcomingEvents.length || pastEvents.length ?\r\n
\r\n
Events for {studentFirstName}
\r\n {\r\n upcomingEvents.length ?\r\n <>\r\n
Upcoming events
\r\n
\r\n {\r\n upcomingEvents.map(event => (\r\n
\r\n
history.push(`/admin-portal/events/event-details/${event.Id}`)}>{event.Subject}
\r\n

Date: {formatEventDate(event.StartDateTime, event.EndDateTime, 'Date')}

\r\n

Time: {formatEventDate(event.StartDateTime, event.EndDateTime, 'Time')}

\r\n

Taught by: {displayTrainerName(event.TrainerID)}

\r\n
\r\n )\r\n )\r\n }\r\n
\r\n \r\n :\r\n
No upcoming events
\r\n }\r\n {\r\n pastEvents.length ?\r\n <>\r\n
\r\n
Past events
\r\n
\r\n
\r\n {\r\n pastEvents.map(event => (\r\n
\r\n
history.push(`/admin-portal/events/event-details/${event.Id}`)}>{event.Subject}
\r\n

Date: {formatEventDate(event.StartDateTime, event.EndDateTime, 'Date')}

\r\n

Time: {formatEventDate(event.StartDateTime, event.EndDateTime, 'Time')}

\r\n

Taught by: {displayTrainerName(event.TrainerID)}

\r\n
\r\n )\r\n )\r\n }\r\n
\r\n \r\n :\r\n
No past events
\r\n }\r\n
\r\n :\r\n
\r\n
Events for {studentFirstName}
\r\n
No events at the moment
\r\n
\r\n )\r\n }\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default StudentEvents\r\n","import React, { useState, useEffect } from 'react'\r\nimport { baseUrl } from '../../functions/globalVariables';\r\nimport { useDataFetch } from '../../hooks/useDataFetch';\r\nimport DragDropZone from '../DragDropZone/DragDropZone';\r\nimport Spinner from '../../assets/spinner.svg';\r\nimport './StudentTrainingPlan.scss';\r\nimport TrainingPlanInfoBoxes from '../TrainingPlanInfoBoxes/TrainingPlanInfoBoxes';\r\nimport AdministerStudentMenuItems from '../AdministerStudentMenuItems/AdministerStudentMenuItems';\r\nimport TrainingPlanNav from '../TrainingPlanNav/TrainingPlanNav';\r\nimport { capitaliseEachWordOfQualName } from '../../functions/capitaliseEachWordOfQualName';\r\nimport TrainingPlanTableContainer from '../TrainingPlanTableContainer/TrainingPlanTableContainer';\r\nimport { getCurrentQual, getQualsAwaitingQuotes } from '../../functions/filterStudentQuals';\r\nimport StudentEvents from '../StudentEvents/StudentEvents';\r\nimport { useThemeContext } from '../../ThemeContext';\r\nimport { useHistory, useParams } from 'react-router-dom';\r\n\r\nconst StudentTrainingPlan = () => {\r\n\r\n let history = useHistory()\r\n const { studentID, selectedStudentId, authToken, userRole } = useThemeContext()\r\n\r\n const { courseId } = useParams()\r\n\r\n let currentStudentID = userRole === \"Administrator\" ? selectedStudentId : studentID\r\n\r\n const [currentQualId, setCurrentQualId] = useState(null)\r\n\r\n const [currentStudentQual, setCurrentStudentQual] = useState(null)\r\n const [qualsAwaitingQuotes, setQualsAwaitingQuotes] = useState([])\r\n\r\n const [trainingPlanNumber, setTrainingPlanNumber] = useState(0)\r\n\r\n const studentQualsUrl = `${baseUrl}/api/studentqualifications?$expand=*&$filter=StudentId eq ${currentStudentID} and Disabled eq false and Active eq true`;\r\n const [ isLoadingStudentQuals, studentQuals, errorStudentQuals ] = useDataFetch(studentQualsUrl, authToken);\r\n\r\n useEffect(() => {\r\n if (studentQuals.length) {\r\n let qualId = courseId === undefined ? studentQuals[0].QualId : courseId\r\n if (courseId === undefined) {\r\n setCurrentStudentQual(studentQuals[0])\r\n \r\n } else {\r\n const qualToDisplay = studentQuals.filter((qual, index) => {\r\n if (qual.QualId === +courseId) {\r\n setTrainingPlanNumber(index)\r\n return true\r\n }\r\n\r\n return false\r\n })[0]\r\n \r\n setCurrentStudentQual(qualToDisplay)\r\n }\r\n\r\n setQualsAwaitingQuotes(getQualsAwaitingQuotes(studentQuals))\r\n\r\n if (userRole === \"Administrator\") {\r\n history.push(`/admin-portal/administer-student/student-training-plan/${qualId}`)\r\n } else {\r\n history.push(`/student-portal/training-plan/${qualId}`)\r\n }\r\n\r\n }\r\n }, [studentQuals])\r\n\r\n\r\n let studentCompetetenciesUrl = \"\"\r\n\r\n if (studentQuals.length) {\r\n studentCompetetenciesUrl = `${baseUrl}/api/studentcompetencies?$filter=StudentQualification/Id eq ${studentQuals[trainingPlanNumber].Id}&$expand=*&$orderBy=Competency/CompID`;\r\n }\r\n const [isLoadingComp, studentCompetencies, errorComp] = useDataFetch(studentCompetetenciesUrl, authToken);\r\n\r\n // Get core/elective data and create competencies object that contains this info\r\n const coreElectiveUrl = `${baseUrl}/api/qualificationcompetencies`;\r\n const [ isLoadingCoreElective, studentCoreElective, errorCoreElective ] = useDataFetch(coreElectiveUrl, authToken);\r\n \r\n\r\n // Grabbing all trainers\r\n const trainerUrl = `${baseUrl}/api/trainers`;\r\n const [isLoadingTrainers, trainers, trainersErr] = useDataFetch(trainerUrl, authToken)\r\n const [trainersToSelect, setTrainersToSelect] = useState([])\r\n\r\n useEffect(() => {\r\n if (trainers.length && studentQuals.length) {\r\n setTrainersToSelect(trainers.filter(trainer => {\r\n if (!trainer.IsDisabled) {\r\n return true\r\n } else if (trainer.IsDisabled && trainer.Id === studentQuals[trainingPlanNumber].TrainerID && userRole === \"Administrator\") {\r\n // Asterisk means trainer is disabled in database\r\n trainer.Surname += \" *\"\r\n return true\r\n }\r\n\r\n return false\r\n }))\r\n }\r\n }, [trainers, studentQuals, trainingPlanNumber])\r\n\r\n const deliveryMode = {\r\n 10: \"Classroom\",\r\n 20: \"Online\",\r\n 30: \"Work-based\",\r\n 40: \"Mixed Mode\"\r\n }\r\n\r\n const handleAcceptQuote = (object) => {\r\n \r\n object['ConfirmedCost'] = true;\r\n fetch(`${baseUrl}/api/studentqualifications/${object.Id}`, {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n body: JSON.stringify(object)\r\n })\r\n .then(response => response.json())\r\n .catch(err => console.log(err))\r\n }\r\n\r\n const handleCancelQuote = (object) => {\r\n object['Disabled'] = true;\r\n \r\n fetch(`${baseUrl}/api/studentqualifications/${object.Id}`, {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n body: JSON.stringify(object)\r\n })\r\n .then(response => response.json())\r\n .catch(err => console.log(err))\r\n }\r\n\r\n const handleUpdateTrainer = (e) => {\r\n\r\n const { value } = e.target\r\n\r\n const selectedTrainer = trainers.filter(trainer => trainer.Id === value)\r\n\r\n fetch(`${baseUrl}/api/studentqualifications/${studentQuals[trainingPlanNumber].Id}`, {\r\n method: 'PUT',\r\n headers: {\r\n 'Content-Type': 'application/json', \r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n body: JSON.stringify({...studentQuals[trainingPlanNumber], TrainerID: value})\r\n })\r\n .then(response => response.json())\r\n .catch(err => console.log(err))\r\n }\r\n\r\n const handleUpdateComments = (value, qual) => {\r\n\r\n const object = { \r\n \"TotalFees\": 0,\r\n \"Id\": 0,\r\n \"Active\": false,\r\n \"Disabled\": false,\r\n \"StudentId\": 0,\r\n \"QualId\": 0,\r\n \"SaStudentId\": null,\r\n \"PASNumber\": null,\r\n \"DeliveryLocId\": null,\r\n \"OfficeId\": null,\r\n \"CertificateAttainedDate\": null,\r\n \"CertificateIssued\": \"No\",\r\n \"CertificateId\": null,\r\n \"QuoteId\": null,\r\n \"QuoteCreatedAt\": null,\r\n \"ContractId\": null,\r\n \"ContractCreatedAt\": null,\r\n \"ProgStreamId\": null,\r\n \"Funding\": null,\r\n \"TuitionFee\": null,\r\n \"Subsidy\": null,\r\n \"OtherSubsidy\": null,\r\n \"ConfirmedCost\": false,\r\n \"Comments\": null\r\n } \r\n\r\n for (const [key, value] of Object.entries(object)) {\r\n object[key] = qual[key]\r\n }\r\n\r\n object['Comments'] = value;\r\n studentQuals[trainingPlanNumber].Comments = value;\r\n \r\n fetch(`${baseUrl}/api/studentqualifications/${object.Id}`, {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n body: JSON.stringify(object)\r\n })\r\n .then(response => response.json())\r\n .catch(err => console.log(err))\r\n }\r\n \r\n const [hoursUnitsObject, setHoursUnitsObject] = useState({})\r\n\r\n return ( \r\n isLoadingStudentQuals || isLoadingComp || isLoadingTrainers ?\"Spinner\"/:\r\n
\r\n {\r\n userRole === 'Administrator'? :null\r\n }\r\n \r\n {\r\n currentStudentQual && userRole==='Administrator'?\r\n

MBH Training Plan for {currentStudentQual.Student.FirstName} {currentStudentQual.Student.Surname}

\r\n :

MBH Training Plan

\r\n }\r\n {\r\n currentStudentQual && userRole==='Administrator'?\r\n
MBH Training Plan for {currentStudentQual.Student.FirstName} {currentStudentQual.Student.Surname}
\r\n :
MBH Training Plan
\r\n }\r\n\r\n {\r\n studentQuals.length ?\r\n <>\r\n {\r\n studentQuals.length > 1 \r\n ?\r\n \r\n :\r\n null\r\n }\r\n

{studentQuals[trainingPlanNumber].Qualification.AntaId} {capitaliseEachWordOfQualName(studentQuals[trainingPlanNumber].Qualification)}

\r\n \r\n \r\n \r\n {\r\n studentCompetencies.length ?\r\n \r\n :\r\n \"Spinner\"\r\n }\r\n \r\n :\r\n qualsAwaitingQuotes.length ?\r\n qualsAwaitingQuotes.map((qualification, index) => (\r\n qualification.QuoteId===null?\r\n
\r\n
Your chosen qualification {qualification.Qualification.AntaId} {qualification.Qualification.Name} is awaiting a quote.
\r\n \r\n
\r\n :\r\n !qualification.ConfirmedCost?\r\n
\r\n
The quote for {qualification.Qualification.AntaId} {qualification.Qualification.Name} is ${qualification.TuitionFee.toFixed(2)}
\r\n
\r\n \r\n \r\n
\r\n
\r\n :\r\n null\r\n ))\r\n :\r\n
Not currently enrolled in a qualification
\r\n }\r\n {\r\n currentStudentQual &&\r\n \r\n }\r\n
\r\n )\r\n}\r\n\r\nexport default StudentTrainingPlan\r\n","export const getCurrentQual = (qualId, studentQuals) => {\r\n const currentQual = studentQuals.filter(qual => qual.QualId === qualId)\r\n\r\n return currentQual[0]\r\n}\r\n\r\nexport const getQualsAwaitingQuotes = (studentQuals) => {\r\n const quals = studentQuals.filter(qual => {\r\n return (\r\n !qual.Qualification.ConfirmedCost \r\n && qual.Qualification.CertificateIssued !== \"Yes\" \r\n && !qual.Qualification.Disabled\r\n )\r\n })\r\n\r\n return\r\n}","import React, { useEffect } from 'react'\r\nimport './SearchBar.scss'\r\nimport M from 'materialize-css'\r\nimport { capitaliseEachWordOfQualName } from '../../functions/capitaliseEachWordOfQualName';\r\n\r\nconst SearchBar = ({ data, setData, active, setActive, setAwaitingQuote, setAwaitingAcceptance, setAcceptedNoContractID, setUnregistered, selectedQualID, setSelectedQualID, setShowNatFileErrors, allQuals, setIsDisabledStudent, setShowDontKnowYet, setShowSelfFunded }) => {\r\n\r\n useEffect(() => {\r\n var elems = document.querySelectorAll('select');\r\n var instances = M.FormSelect.init(elems, {});\r\n }, [])\r\n \r\n const onSearchChange = (e) => {\r\n if (!data.length) return\r\n\r\n const { value } = e.target\r\n if (!value.trim().length) {\r\n setData(data)\r\n return\r\n }\r\n\r\n const valueToFilterBy = value.toLowerCase().trim()\r\n const filteredData = data.filter(datum => {\r\n const studentName = datum.FirstName + \" \" + datum.Surname\r\n return studentName.toLowerCase().includes(valueToFilterBy)\r\n })\r\n\r\n setData(filteredData)\r\n }\r\n\r\n //show only students who have an active qualification\r\n const onActiveChange = (e) => { \r\n if (e.target.checked) {\r\n setActive(true);\r\n } else {\r\n setActive(false);\r\n }\r\n \r\n setSelectedQualID(\"0\")\r\n resetQualSelectors()\r\n\r\n }\r\n\r\n const onAwaitingQuoteChange = (e) => {\r\n if (e.target.checked) {\r\n setAwaitingQuote(true);\r\n } else {\r\n setAwaitingQuote(false);\r\n }\r\n }\r\n\r\n const onAwaitingAcceptanceChange = (e) => {\r\n if (e.target.checked) {\r\n setAwaitingAcceptance(true);\r\n } else {\r\n setAwaitingAcceptance(false);\r\n }\r\n }\r\n\r\n const onAcceptedNoContractIDChange = (e) => {\r\n if (e.target.checked) {\r\n setAcceptedNoContractID(true);\r\n } else {\r\n setAcceptedNoContractID(false);\r\n }\r\n }\r\n\r\n\r\n //show only students who are unregistered\r\n const onUnregChange = (e) => {\r\n if (e.target.checked === true){\r\n setUnregistered(true);\r\n }else{\r\n setUnregistered(false);\r\n }\r\n }\r\n\r\n const onHasNatFileErrorsChange = (e) => {\r\n if (e.target.checked === true){\r\n setShowNatFileErrors(true)\r\n }else{\r\n setShowNatFileErrors(false);\r\n }\r\n }\r\n\r\n const onDeletedStudentChange = (e) => {\r\n if (e.target.checked === true){\r\n setIsDisabledStudent(true)\r\n }else{\r\n setIsDisabledStudent(false);\r\n }\r\n }\r\n\r\n const onDontKnowChange = (e) => {\r\n if (e.target.checked === true){\r\n setShowDontKnowYet(true)\r\n }else{\r\n setShowDontKnowYet(false);\r\n }\r\n }\r\n\r\n const onSelfFundedChange = (e) => {\r\n if (e.target.checked === true){\r\n setShowSelfFunded(true)\r\n }else{\r\n setShowSelfFunded(false);\r\n }\r\n }\r\n\r\n const onQualChange = (e) => {\r\n setSelectedQualID(e.target.value)\r\n }\r\n\r\n // Reset the values of each selector as a qual may be in one list but not the other (i.e. superseded quals)\r\n const resetQualSelectors = () => {\r\n const allQualsSelector = document.querySelector(\"#AllQualsSelector\")\r\n const filteredQualsSelector = document.querySelector(\"#FilteredQualsSelector\")\r\n \r\n if (allQualsSelector) {\r\n allQualsSelector.value = \"0\"\r\n }\r\n\r\n if (filteredQualsSelector) {\r\n filteredQualsSelector.value = \"0\"\r\n }\r\n\r\n var elems = document.querySelectorAll('select');\r\n var instances = M.FormSelect.init(elems, {});\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 Active\r\n
\r\n
\r\n \r\n \r\n Awaiting Quote\r\n
\r\n
\r\n \r\n Awaiting Acceptance\r\n
\r\n
\r\n \r\n Accepted no ContractID\r\n
\r\n
\r\n \r\n Unregistered\r\n
\r\n
\r\n \r\n Has Nat File Errors\r\n
\r\n
\r\n \r\n Deleted Students\r\n
\r\n
\r\n \r\n Funding: Don't Know Yet\r\n
\r\n
\r\n \r\n Funding: Self-Funded\r\n
\r\n
\r\n
\r\n {/* Created two separate qual filters as for some reason this component wouldn't refresh when state changed (i.e. when active changed, the rendering wouldn't refresh) */}\r\n {/* This shows all quals in dropdown */}\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n {/* This shows only superseded quals in dropdown */}\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default SearchBar\r\n","export const findStudentsWithNatFileErrors = (natFileErrors) => {\r\n const students = natFileErrors\r\n .filter((item, index, self) =>\r\n index === self.findIndex((t) => (\r\n t.FirstName === item.FirstName && t.Surname === item.Surname\r\n ))\r\n ).map(student => (\r\n {\r\n Name: `${student.FirstName} ${student.Surname}`,\r\n StudentId: student.StudentId\r\n }\r\n ))\r\n \r\n return students\r\n}\r\n\r\nexport const createObjectOfStudentsWithNatFileErrors = (natFileErrors) => {\r\n const students = natFileErrors\r\n .filter((item, index, self) =>\r\n index === self.findIndex((t) => (\r\n t.FirstName === item.FirstName && t.Surname === item.Surname\r\n ))\r\n )\r\n\r\n return arrayToObject(natFileErrors)\r\n}\r\n\r\nconst arrayToObject = (array) =>\r\n array.reduce((obj, item) => {\r\n obj[item.StudentId] = item\r\n return obj\r\n}, {})","import React, { useState, useEffect } from 'react'\r\nimport { useDataFetch } from '../../hooks/useDataFetch';\r\nimport { baseUrl } from '../../functions/globalVariables';\r\nimport SearchBar from '../SearchBar/SearchBar';\r\nimport './AdminPortalHome.scss'\r\nimport Spinner from '../../assets/spinner.svg';\r\nimport { handleQualFilterChange } from '../../functions/handleFilterChanges';\r\nimport { createObjectOfStudentsWithNatFileErrors } from '../../functions/findStudentsWithNatFileErrors';\r\nimport { arrayToObjectWithKey } from '../../functions/arrayToObject';\r\nimport { useThemeContext } from '../../ThemeContext';\r\n\r\nconst AdminPortalHome = ({ onStudentSelect }) => {\r\n \r\n const { authToken } = useThemeContext()\r\n\r\n const [isDisabledStudent, setIsDisabledStudent] = useState(false);\r\n const studentUrl = `${baseUrl}/api/students?$filter=IsDisabled eq ${isDisabledStudent}&$orderBy=Surname`;\r\n const [isLoadingStudents, allStudents, error] = useDataFetch(studentUrl, authToken)\r\n const [students, setStudents] = useState([])\r\n\r\n const studentQualsURL = `${baseUrl}/api/studentqualifications`;\r\n const [isLoadingStudentQuals, studentQuals, errorStudentQuals] = useDataFetch(studentQualsURL, authToken);\r\n\r\n //get all studentsqualifications that are currently active\r\n const [studentQualUrl, setStudentQualUrl] = useState(`${baseUrl}/api/studentqualifications?$filter=Active eq true and Disabled eq false&$expand=Student`);\r\n const [isLoadingStudentQualActive, studentQualActive, errorSQ] = useDataFetch(studentQualUrl, authToken)\r\n const [active, setActive] = useState(true);\r\n const [allActiveStudents, setAllActiveStudents] = useState([])\r\n \r\n useEffect(() => {\r\n if (studentQualActive.length) {\r\n setAllActiveStudents(arrayToObjectWithKey(studentQualActive, \"StudentId\"))\r\n }\r\n }, [studentQualActive])\r\n\r\n const [awaitingQuote, setAwaitingQuote] = useState(false)\r\n const [studentsAwaitingQuote, setStudentsAwaitingQuote] = useState({})\r\n\r\n const [awaitingAcceptance, setAwaitingAcceptance] = useState(false)\r\n const [studentsAwaitingAcceptance, setStudentsAwaitingAcceptance] = useState({})\r\n\r\n const [acceptedNoContractID, setAcceptedNoContractID] = useState(false)\r\n const [studentsAcceptedNoContractID, setStudentsAcceptedNoContractID] = useState({})\r\n\r\n useEffect(() => {\r\n if (studentQuals.length) {\r\n const allStudentsAwaitingQuote = studentQuals.filter(qual => qual.Active && !qual.Disabled && qual.QuoteId === null)\r\n setStudentsAwaitingQuote(arrayToObjectWithKey(allStudentsAwaitingQuote, \"StudentId\"))\r\n \r\n const allStudentsAwaitingAcceptance = studentQuals.filter(qual => qual.Active && !qual.Disabled && !qual.ConfirmedCost && qual.QuoteId !== null)\r\n setStudentsAwaitingAcceptance(arrayToObjectWithKey(allStudentsAwaitingAcceptance, \"StudentId\"))\r\n\r\n const allStudentsAcceptedNoContractID = studentQuals.filter(qual => qual.Active && !qual.Disabled && qual.ConfirmedCost && qual.QuoteId !== null && qual.ContractId === null)\r\n setStudentsAcceptedNoContractID(arrayToObjectWithKey(allStudentsAcceptedNoContractID, \"StudentId\"))\r\n }\r\n }, [studentQuals])\r\n\r\n\r\n //fetch all unregistered students\r\n const unregisteredStudentsURL = `${baseUrl}/api/students/unregisteredstudents?$filter=CreatedAt ne null`;\r\n const [ isLoadingUnregistered, unregisteredStudents, errorUnregistered ] = useDataFetch(unregisteredStudentsURL, authToken);\r\n const [unregistered, setUnregistered] = useState(false);\r\n const [allUnregisteredStudents, setAllUnregisteredStudents] = useState([])\r\n //create an array of the unregistered student id's\r\n const unregStudents = [];\r\n unregStudents.push(unregisteredStudents.map(s => s.Id))\r\n if(unregStudents.length <1){\r\n unregStudents.push('preventNullError');\r\n }\r\n\r\n useEffect(() => {\r\n if (unregisteredStudents.length) {\r\n setAllUnregisteredStudents(arrayToObjectWithKey(unregisteredStudents, \"Id\"))\r\n }\r\n }, [unregisteredStudents])\r\n\r\n \r\n // Fetch all students with Nat File Errors\r\n const natFileErrorsURL = `${baseUrl}/api/natforms/validatedates`\r\n const [ isLoadingNatFileErrors, natFileErrors, errorNatFileErrors ] = useDataFetch(natFileErrorsURL, authToken);\r\n const [showNatFileErrors, setShowNatFileErrors] = useState(false)\r\n const [studentsWithNatFileErrors, setStudentsWithNatFileErrors] = useState(null)\r\n\r\n useEffect(() => {\r\n if (natFileErrors.length) {\r\n const erroredStudents = createObjectOfStudentsWithNatFileErrors(natFileErrors)\r\n setStudentsWithNatFileErrors(erroredStudents)\r\n }\r\n }, [natFileErrors])\r\n\r\n \r\n // Grabbing all qualifications so that the user can filter students by a particular qualification\r\n const qualificationsURL = `${baseUrl}/api/qualifications`\r\n const [isLoadingQuals, fetchedQuals, errorAllQuals] = useDataFetch(qualificationsURL, authToken);\r\n const [selectedQualID, setSelectedQualID] = useState(\"0\")\r\n const [allQuals, setAllQuals] = useState([]); \r\n \r\n const [filteredStudentObject, setFilteredStudentObject] = useState({});\r\n\r\n // Funding options\r\n const [showDontKnowYet, setShowDontKnowYet] = useState(false)\r\n const [showSelfFunded, setShowSelfFunded] = useState(false)\r\n const [dontKnowYetStudents, setDontKnowYetStudents] = useState({})\r\n const [selfFundedStudents, setSelfFundedStudents] = useState({})\r\n\r\n const handleStudentFiltering = (student) => {\r\n if ((!active || (active && allActiveStudents[student.Id])) &&\r\n (!awaitingQuote || (awaitingQuote && studentsAwaitingQuote[student.Id])) &&\r\n (!awaitingAcceptance || (awaitingAcceptance && studentsAwaitingAcceptance[student.Id])) &&\r\n (!acceptedNoContractID || (acceptedNoContractID && studentsAcceptedNoContractID[student.Id])) &&\r\n (!unregistered || (unregistered && allUnregisteredStudents[student.Id])) &&\r\n (!showNatFileErrors || (showNatFileErrors && studentsWithNatFileErrors[student.Id])) &&\r\n (!showDontKnowYet || (showDontKnowYet && dontKnowYetStudents[student.Id])) &&\r\n (!showSelfFunded || (showSelfFunded && selfFundedStudents[student.Id]))) {\r\n return true\r\n }\r\n \r\n return false\r\n }\r\n\r\n useEffect(() => {\r\n if (showDontKnowYet) {\r\n const dontKnowYetArray = studentQualActive.filter(qual => qual.Funding === \"Don't know yet\")\r\n setDontKnowYetStudents(arrayToObjectWithKey(dontKnowYetArray, \"StudentId\"))\r\n }\r\n\r\n if (showSelfFunded) {\r\n const selfFundedArray = studentQualActive.filter(qual => qual.Funding === \"Self Funded\")\r\n setSelfFundedStudents(arrayToObjectWithKey(selfFundedArray, \"StudentId\"))\r\n }\r\n }, [showDontKnowYet, showSelfFunded])\r\n \r\n useEffect(() => {\r\n if (selectedQualID && selectedQualID !== \"0\") {\r\n setFilteredStudentObject(handleQualFilterChange(selectedQualID, studentQuals, active));\r\n }\r\n }, [selectedQualID, active])\r\n\r\n useEffect(() => {\r\n setStudents(allStudents)\r\n }, [allStudents])\r\n \r\n useEffect(() => {\r\n if (fetchedQuals.length) {\r\n setAllQuals(fetchedQuals)\r\n }\r\n }, [fetchedQuals])\r\n \r\n return (\r\n
\r\n
\r\n

Admin Portal

\r\n {\r\n allQuals.length ?\r\n <>\r\n \r\n \r\n :\r\n null\r\n }\r\n\r\n
\r\n {\r\n isLoadingQuals && isLoadingNatFileErrors || isLoadingStudents || isLoadingStudentQualActive ?\r\n \"Spinner\"/\r\n :\r\n (\r\n students.length ?\r\n (\r\n selectedQualID === \"0\" ?\r\n students\r\n .filter(student => handleStudentFiltering(student))\r\n .map(student => (\r\n

{onStudentSelect(e, 'administerStudent')} }\r\n >\r\n {`${student.FirstName} ${student.Surname}`}\r\n

\r\n ))\r\n :\r\n (\r\n filteredStudentObject !== null ?\r\n students \r\n .filter(student => filteredStudentObject[student.Id] && handleStudentFiltering(student))\r\n .map(student => (\r\n

{onStudentSelect(e, 'administerStudent')}}\r\n >\r\n {`${student.FirstName} ${student.Surname}`}\r\n

\r\n ))\r\n :\r\n

No students found

\r\n )\r\n )\r\n :\r\n

No students found

\r\n )\r\n }\r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default AdminPortalHome\r\n","export const handleQualFilterChange = (qualId, allStudentQuals, active) => {\r\n\r\n\r\n const filteredStudents = allStudentQuals.filter(qual => {\r\n if (active) {\r\n return qual.QualId === +qualId && qual.Active === true && qual.Disabled === false\r\n } else {\r\n return qual.QualId === +qualId && qual.Disabled === false\r\n }\r\n });\r\n\r\n if (!filteredStudents.length) return null;\r\n\r\n const studentObject = {}\r\n for (let i = 0; i < filteredStudents.length; i++) {\r\n const id = filteredStudents[i].StudentId;\r\n studentObject[id] = true;\r\n }\r\n\r\n return studentObject;\r\n}","import React from 'react'\r\nimport mbhLogo from '../../assets/mbh-logo.png';\r\n\r\nconst StudentMenu = ({menuStyle, menuSmall, history}) => {\r\n return (\r\n
\r\n
    \r\n {\r\n !menuSmall ?\r\n
  • \"mbh
  • \r\n :
  • .
  • \r\n }\r\n {/*
  • history.push('/student-portal')}>home{menuSmall? \"\": \" Home\"}
  • */}\r\n
  • history.push('/student-portal/profile')}>person{menuSmall? \"\": \" Profile\"}
  • \r\n
  • history.push('/student-portal/qualifications')}>school{menuSmall? \"\": \" Qualifications\"}
  • \r\n
  • history.push('/student-portal/training-plan')}>assignment{menuSmall? \"\": \" Training Plan\"}
  • \r\n {/*
  • announcement{menuSmall? \"\": \" Notifications\"}
  • */}\r\n
  • history.push('/student-portal/events')}>insert_invitation{menuSmall? \"\": \" Upcoming Events\"}
  • \r\n
  • {history.push('/'); window.sessionStorage.clear()}}>exit_to_app{menuSmall? \"\": \" Logout\"}
  • \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default StudentMenu\r\n","import React from 'react'\r\nimport mbhLogo from '../../assets/mbh-logo.png';\r\nimport { ACTIONS } from '../../App';\r\n\r\nconst AdminMenu = ({menuStyle, menuSmall, history, handleMenuClick}) => {\r\n return (\r\n
\r\n
    \r\n {\r\n !menuSmall ?\r\n
  • \"mbh
  • \r\n :
  • .
  • \r\n }\r\n
  • history.push('/admin-portal')}>home{menuSmall? \"\": \" Home\"}
  • \r\n
  • history.push('/admin-portal/download')}>cloud_download{menuSmall? \"\": \" Upload/Download Files\"}
  • \r\n
  • history.push('/admin-portal/qualifications-and-competencies')}>dvr{menuSmall? \"\": \" Manage Competencies\"}
  • \r\n
  • history.push('/admin-portal/events')}>insert_invitation{menuSmall? \"\": \" Upcoming Events\"}
  • \r\n
  • history.push('/admin-portal/reports')}>assignment{menuSmall? \"\": \" Reports\"}
  • \r\n
  • history.push('/admin-portal/admin')}>settings{menuSmall? \"\": \" Admin\"}
  • \r\n
  • {history.push('/'); window.sessionStorage.clear()}}>exit_to_app{menuSmall? \"\": \" Logout\"}
  • \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default AdminMenu\r\n","import React from 'react'\r\nimport { findStudentsWithNatFileErrors } from '../../functions/findStudentsWithNatFileErrors';\r\nimport './NatFileErrors.scss';\r\n\r\nconst NatFileErrors = ({ natFileErrors, onStudentSelect }) => {\r\n\r\n // Removing duplicate students so that we have a list of all students with errors\r\n const erroredStudents = findStudentsWithNatFileErrors(natFileErrors)\r\n\r\n return (\r\n
\r\n

{`${natFileErrors.length} errors`}

\r\n

{`Select a student for more details:`}

\r\n
    \r\n {\r\n erroredStudents.map(student => (\r\n
  • onStudentSelect(e, \"administerStudent\")}\r\n >\r\n {student.Name}\r\n
  • \r\n ))\r\n }\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default NatFileErrors\r\n","import React, {useState, useEffect} from 'react'\r\nimport './DownloadPage.scss'\r\nimport { baseUrl } from '../../functions/globalVariables';\r\nimport { useDataFetch } from '../../hooks/useDataFetch'\r\nimport * as XLSX from \"xlsx\";\r\nimport M from 'materialize-css'\r\nimport NatFileErrors from '../NatFileErrors/NatFileErrors';\r\nimport { filterNatFileErrors } from '../../functions/filterNatFileErrors';\r\nimport { useThemeContext } from '../../ThemeContext';\r\nimport { useHistory } from 'react-router-dom';\r\n\r\nconst DownloadPage = ({onStudentSelect}) => {\r\n\r\n let history = useHistory()\r\n const { authToken } = useThemeContext()\r\n\r\n useEffect(() => {\r\n var elems = document.querySelectorAll('select');\r\n var instances = M.FormSelect.init(elems, {});\r\n M.updateTextFields();\r\n })\r\n\r\n const [natFileErrors, setNatFileErrors] = useState(null)\r\n const [stsFileErrors, setSTSNatFileErrors] = useState(null)\r\n\r\n const [period, setPeriod] = useState(10);\r\n\r\n const qualificationsUrl = `${baseUrl}/api/qualifications?$filter=Superseded eq false`;\r\n const [isLoadingQualifications, allQualifications, qualsError] = useDataFetch(qualificationsUrl, authToken);\r\n\r\n const validateSTSUrl = `${baseUrl}/api/stsbulkquotedata/validatedata`;\r\n const [isLoadingSTS, validateSTS, errorSTS] = useDataFetch(validateSTSUrl, authToken)\r\n\r\n const [chosenQual, setChosenQual] = useState(-1);\r\n const [chosenQualAntaId, setChosenQualAntaId] = useState(\"\");\r\n\r\n const handleQualChange = (e, qual) => {\r\n const selectedIndex = e.target.options.selectedIndex-1;\r\n const qualID = qual[selectedIndex].Id;\r\n const anataID = qual[selectedIndex].AntaId;\r\n setChosenQual(qualID);\r\n setChosenQualAntaId(anataID);\r\n setNatFileErrors(null)\r\n }\r\n\r\n //*** Used for downloading the files generated from the results of api calls */\r\n const handleFileSave = (response, filename) => {\r\n const link = document.createElement(\"a\");\r\n link.setAttribute(\"download\", filename);\r\n const downloadUrl = window.URL.createObjectURL(new Blob([response]));\r\n link.href = downloadUrl;\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n }\r\n\r\n //*** Generate NAT Files */\r\n const generateNATFiles = () => {\r\n let url;\r\n \r\n if (chosenQual===-1){\r\n url = `${baseUrl}/api/natforms`;\r\n }else{\r\n url = `${baseUrl}/api/natforms/${chosenQual}`;\r\n }\r\n\r\n fetch(url, {\r\n method: 'GET',\r\n headers: { 'Content-Type': 'application/octet-stream',\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n })\r\n .then(response => response.blob())\r\n .then(data => {handleFileSave(data, `NATForms_${chosenQualAntaId}.zip`);})\r\n .catch(err => console.log(\"error\", err)) \r\n }\r\n\r\n const onDownloadNatFiles = () => {\r\n fetch(`${baseUrl}/api/natforms/validatedates`, {\r\n method: 'GET',\r\n headers: { 'Content-Type': 'application/octet-stream',\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n })\r\n .then(response => response.json())\r\n .then(data => {\r\n // if (!data.length) {\r\n // generateNATFiles();\r\n // }\r\n console.log(data)\r\n if (chosenQualAntaId.length) {\r\n const filteredErrors = filterNatFileErrors(data, chosenQualAntaId);\r\n if (!filteredErrors.length) {\r\n setNatFileErrors(null)\r\n } else {\r\n setNatFileErrors(filteredErrors)\r\n }\r\n } else {\r\n setNatFileErrors(data)\r\n }\r\n })\r\n .catch(err => console.log(err))\r\n\r\n generateNATFiles()\r\n }\r\n\r\n //*** Generate either quote or contract file depending on which button is clicked in the Download Pending Qualifications section*/\r\n const generateExcelFile = (filename, activityPeriodId) => {\r\n if(validateSTS.length){\r\n setSTSNatFileErrors(validateSTS)\r\n }\r\n\r\n //if it's an quote is false, otherwise if it's a contract it's true.\r\n let notification = false;\r\n \r\n if(filename === 'contract'){\r\n notification = true;\r\n }\r\n\r\n const url = `${baseUrl}/api/stsbulkquotedata?notification=${notification}&activityPeriodId=${activityPeriodId}`;\r\n\r\n fetch(url, {\r\n method: 'GET',\r\n headers: { 'Content-Type': 'application/octet-stream',\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n })\r\n .then(response => response.blob())\r\n .then(data => {handleFileSave(data, `${filename}.xlsx`);})\r\n .catch(err => console.log(\"error\", err)) \r\n }\r\n\r\n //*** Creates the open dialog to select file and then Upload the STS Documents */\r\n const handleFileSelect = (e) => {\r\n const fileSelector = document.createElement('input');\r\n fileSelector.setAttribute('type', 'file');\r\n fileSelector.setAttribute('name', 'file')\r\n fileSelector.setAttribute('accept', '.xls, .xlsx');\r\n e.preventDefault();\r\n fileSelector.click();\r\n fileSelector.addEventListener(\"change\", submitFile);\r\n // fileSelector.addEventListener(\"change\", readFile);\r\n }\r\n\r\n // used to update message returned from POST of submitFile function\r\n const [uploadMsg, setUploadMsg] = useState(\"\")\r\n //** Submits the selected file to the API */\r\n const submitFile= (e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n setUploadMsg(\"\")\r\n const selectedFile = e.target.files[0];\r\n\r\n const formData = new FormData();\r\n formData.append('file', selectedFile);\r\n \r\n fetch(`${baseUrl}/api/stsbulkquotedata`, {\r\n method: 'POST',\r\n headers: {\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n body: formData\r\n })\r\n .then(response => response.json())\r\n .then(data => {setUploadMsg(data);})\r\n .catch(err => console.log(\"errors\" ,err))\r\n }\r\n\r\n //*** Reads the opened file and converts contents to JSON string. THIS IS NOT BEING USED AS WE'RE SUBMITTING FILE AS IS*/\r\n const readFile = (e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n const selectedFile = e.target.files[0];\r\n\r\n const reader = new FileReader();\r\n \r\n reader.onload = (event) => {\r\n const data = event.target.result;\r\n const workbook = XLSX.read(data, {type: 'binary'});\r\n \r\n workbook.SheetNames.forEach((sheetName) =>{\r\n const XL_row_object = XLSX.utils.sheet_to_row_object_array(workbook.Sheets[sheetName]);\r\n // const json_object = JSON.stringify(XL_row_object);\r\n // const json_parsed = JSON.parse(json_object);\r\n // console.log(\"item: \", XL_row_object[0].National_Provider_ID, \"number of rows:\", XL_row_object.length);\r\n })\r\n };\r\n\r\n reader.onerror = function(event) {\r\n console.error(\"File could not be read! Code \" + event.target.error.code);\r\n };\r\n\r\n reader.readAsBinaryString(selectedFile);\r\n }\r\n\r\n //*** Updates the period state when the number is changed */\r\n const handlePeriodChange = (e) => {\r\n setPeriod(e.target.value);\r\n }\r\n\r\n return (\r\n
\r\n

NAT Files

\r\n
\r\n
\r\n
Generate NAT Files
\r\n
\r\n \r\n
\r\n {\r\n natFileErrors &&\r\n \r\n }\r\n file_downloadDownload\r\n
\r\n
\r\n
Download Pending Qualifications
\r\n {\r\n stsFileErrors? : null\r\n }\r\n \r\n \r\n
\r\n
\r\n
Upload STS Document
\r\n \r\n {\r\n uploadMsg.RowsUpdated > 0?\r\n

{uploadMsg.RowsUpdated} record(s) have been updated.

\r\n :\r\n

{uploadMsg.Message}

\r\n }\r\n \r\n
\r\n
\r\n\r\n
\r\n )\r\n}\r\n\r\nexport default DownloadPage\r\n","export const filterNatFileErrors = (natFileErrors, selectedAntaId) => {\r\n const filteredErrors = natFileErrors.filter(natError => natError.AntaId === selectedAntaId)\r\n\r\n return filteredErrors\r\n}","import React from 'react'\r\nimport { useEffect, useState } from 'react'\r\nimport { useDataFetch } from '../../hooks/useDataFetch'\r\nimport './EditCompetencies.scss'\r\nimport M from 'materialize-css'\r\nimport { baseUrl } from '../../functions/globalVariables'\r\nimport Spinner from '../../assets/spinner.svg';\r\nimport { capitaliseEachWordOfQualName } from '../../functions/capitaliseEachWordOfQualName'\r\nimport { useThemeContext } from '../../ThemeContext'\r\n\r\nconst EditCompetencies = () => {\r\n\r\n const { authToken } = useThemeContext()\r\n\r\n const qualCompetenciesUrl = `${baseUrl}/api/qualificationcompetencies?$expand=Qualification,Competency`\r\n const [isLoadingQualCompetencies, allQualCompetencies, error] = useDataFetch(qualCompetenciesUrl, authToken)\r\n\r\n const competenciesUrl = `${baseUrl}/api/competencies`\r\n const [isLoadingCompetencies, allCompetencies, competenciesError] = useDataFetch(competenciesUrl, authToken)\r\n\r\n\r\n const [qualToFilterBy, setQualToFilterBy] = useState('Choose')\r\n const [showSuperseded, setShowSuperseded] = useState(false)\r\n const [filteredCompetencies, setFilteredCompetencies] = useState([])\r\n \r\n // Holds the individual qualifications that competencies can be filtered by\r\n const [qualifications, setQualifications] = useState([])\r\n\r\n useEffect(() => {\r\n if (allQualCompetencies.length) {\r\n setFilteredCompetencies(allQualCompetencies)\r\n \r\n const quals = allQualCompetencies.map(comp => `${comp.Qualification.AntaId} ${capitaliseEachWordOfQualName(comp.Qualification)}`)\r\n const filteredQuals = quals.filter((comp, i) => quals.indexOf(comp) === i)\r\n setQualifications(filteredQuals)\r\n }\r\n }, [allQualCompetencies])\r\n\r\n useEffect(() => {\r\n var elems = document.querySelectorAll('select');\r\n var instances = M.FormSelect.init(elems, {});\r\n })\r\n\r\n useEffect(() => {\r\n\r\n if (allQualCompetencies.length) {\r\n\r\n let newCompetenciesArray = allQualCompetencies.filter(qualComp => {\r\n console.log(qualComp.Competency.Superseded, showSuperseded)\r\n return qualComp?.Competency?.Superseded === showSuperseded\r\n })\r\n \r\n if (qualToFilterBy !== 'Choose') {\r\n newCompetenciesArray = newCompetenciesArray.filter(competency => `${competency.Qualification.AntaId} ${capitaliseEachWordOfQualName(competency.Qualification)}` === qualToFilterBy)\r\n }\r\n\r\n setFilteredCompetencies(newCompetenciesArray)\r\n }\r\n\r\n \r\n }, [allQualCompetencies, qualToFilterBy, showSuperseded])\r\n\r\n const updateCompetenciesArray = (e, rowIndex) => {\r\n\r\n const { type, name, value } = e.target;\r\n\r\n const rows = document.getElementById('competenciesTable').rows;\r\n const currentRow = rows[rowIndex + 1]\r\n\r\n let url = ''\r\n let endpoint = ''\r\n let currentCompetency = null\r\n\r\n if (type === 'select-one') {\r\n if (name === 'Superseded' || name === 'VetFlag') {\r\n const compId = filteredCompetencies[rowIndex].CompetencyId\r\n currentCompetency = allCompetencies.filter(comp => comp.Id === compId)\r\n if (name === 'Superseded') {\r\n currentCompetency[0][name] = value === 'true' ? true : false;\r\n // filteredCompetencies[rowIndex].Superseded = value === 'true' ? true : false;\r\n } else {\r\n currentCompetency[0][name] = value\r\n // filteredCompetencies[rowIndex].VetFlag = value\r\n }\r\n url = `${baseUrl}/api/competencies/${compId}`\r\n endpoint = 'competencies'\r\n\r\n } else if (name === 'IsCore' || name === 'IsStandard') {\r\n const compId = filteredCompetencies[rowIndex].Id\r\n filteredCompetencies[rowIndex][name] = value === 'true' ? true : false;\r\n url = `${baseUrl}/api/qualificationcompetencies/${compId}`\r\n endpoint = 'qualCompetencies'\r\n }\r\n\r\n } else {\r\n const compId = filteredCompetencies[rowIndex].CompetencyId\r\n currentCompetency = allCompetencies.filter(comp => comp.Id === compId)\r\n currentCompetency[0][name] = value\r\n url = `${baseUrl}/api/competencies/${compId}`\r\n endpoint = 'competencies'\r\n }\r\n\r\n fetch(url, {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n body: endpoint === 'qualCompetencies' ? JSON.stringify(filteredCompetencies[rowIndex]) : JSON.stringify(currentCompetency[0])\r\n })\r\n .then(response => response.json())\r\n .catch(err => console.log(err))\r\n\r\n }\r\n\r\n return (\r\n
\r\n {\r\n isLoadingQualCompetencies ? \"Spinner\"/\r\n :\r\n <>\r\n

Edit Competencies

\r\n
\r\n

Filter Competencies by Qualification (add/remove a competency to a qualification in the Edit Qualifications page)

\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 filteredCompetencies.map((competency, index) => (\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
CompIDCompDscCompEducationIdCore/ElectiveIsStandardNominalHoursVetFlagSuperseded
updateCompetenciesArray(e, index, competency)} /> updateCompetenciesArray(e, index, competency)} /> updateCompetenciesArray(e, index, competency)} />\r\n \r\n \r\n \r\n updateCompetenciesArray(e, index, competency)} />\r\n \r\n \r\n \r\n {competency.Qualification.Superseded.toString()}
\r\n
\r\n \r\n }\r\n
\r\n )\r\n}\r\n\r\nexport default EditCompetencies\r\n","import M from 'materialize-css'\r\n\r\nexport const validateCostField = (e) => {\r\n const { value } = e.target;\r\n\r\n if (isNaN(value)) {\r\n M.toast({html: 'Numerical values only!'})\r\n }\r\n}","import React, { useState, useEffect } from 'react'\r\nimport { baseUrl } from '../../functions/globalVariables'\r\nimport { useDataFetchRefresh } from '../../hooks/useDataFetchRefresh';\r\nimport { useDoubleDataFetch } from '../../hooks/useDoubleDataFetch'\r\nimport {validateCostField} from '../../functions/validateCostField'\r\nimport M from 'materialize-css'\r\nimport './EditQualifications.scss'\r\nimport { addAssignedCompetency, deleteAssignedCompetency } from '../../functions/assigningCompetencies'\r\nimport { filterCompetencyArrays } from '../../functions/filterCompetencyArrays'\r\nimport TextEditor from '../TextEditor/TextEditor';\r\nimport { capitaliseEachWordOfQualName } from '../../functions/capitaliseEachWordOfQualName';\r\nimport Spinner from '../../assets/spinner.svg'\r\nimport { useThemeContext } from '../../ThemeContext';\r\n\r\nconst EditQualifications = () => {\r\n\r\n const { authToken } = useThemeContext()\r\n\r\n const [fetchData, setFetchData] = useState(true);\r\n const [deleteQual, setDeleteQual] = useState(true);\r\n \r\n const qualificationsUrl = `${baseUrl}/api/qualifications`;\r\n const [isLoadingQualifications, allQualifications, qualsError] = useDataFetchRefresh(qualificationsUrl, authToken, deleteQual, setDeleteQual);\r\n\r\n const [chosenQual, setChosenQual] = useState(-1);\r\n const [filteredCompetencyArrays, setFilteredCompetencyArrays] = useState([])\r\n\r\n const competenciesUrl = `${baseUrl}/api/qualificationcompetencies?$expand=Competency`;\r\n const allCompetenciesUrl = `${baseUrl}/api/competencies`;\r\n const [isLoadingComp, assignedCompetencies, allCompetencies, compError] = useDoubleDataFetch(competenciesUrl, allCompetenciesUrl, fetchData, setFetchData, authToken);\r\n \r\n useEffect(() => {\r\n var elems = document.querySelectorAll('select');\r\n var instances = M.FormSelect.init(elems, {});\r\n M.updateTextFields();\r\n })\r\n\r\n useEffect(() => {\r\n if (chosenQual >= 0) {\r\n const twoFilteredArrays = filterCompetencyArrays(assignedCompetencies, allCompetencies, allQualifications[chosenQual].Id)\r\n setFilteredCompetencyArrays(twoFilteredArrays)\r\n }\r\n setFetchData(true)\r\n }, [chosenQual])\r\n\r\n useEffect(() => {\r\n console.log(\"All qualifications fetched\")\r\n }, [allQualifications])\r\n \r\n\r\n const handleQualChange = (e) => {\r\n if(document.getElementById(\"addQualForm\")){\r\n document.getElementById(\"addQualForm\").reset();\r\n }\r\n if(document.getElementById(\"editCompsForm\")){\r\n document.getElementById(\"editCompsForm\").reset();\r\n }\r\n if( document.getElementById(\"deleteQualMsg\")){\r\n document.getElementById(\"deleteQualMsg\").textContent = \"\";\r\n }\r\n \r\n setChosenQual(e.target.options.selectedIndex-1);\r\n setFetchData(true);\r\n }\r\n\r\n const updateQualsArray = (e, rowIndex) => {\r\n const { name, value, checked } = e.target;\r\n\r\n if (name === 'Superseded') {\r\n if(!fetchData){\r\n allQualifications[rowIndex].Superseded = value === 'true' ? true : false;\r\n }\r\n } else if(name === 'DeliveryMode'){\r\n if(!fetchData){\r\n allQualifications[rowIndex].DeliveryMode = parseInt(value);\r\n }\r\n } else if (name === \"IsPartQual\") {\r\n if (checked) {\r\n allQualifications[rowIndex][name] = true;\r\n } else {\r\n allQualifications[rowIndex][name] = false;\r\n }\r\n }else {\r\n allQualifications[rowIndex][name] = value;\r\n }\r\n\r\n const id = allQualifications[rowIndex].Id\r\n \r\n fetch(`${qualificationsUrl}/${id}`, {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n body: JSON.stringify(allQualifications[rowIndex])\r\n })\r\n .then(response => response.json())\r\n .catch(err => console.log(err))\r\n }\r\n\r\n //This is to update the API with the description field that uses the tinymce plugin\r\n const updateDescriptionField = (rowIndex, content, descriptionField) => {\r\n \r\n if(content=== undefined || content===\"\") return;\r\n\r\n allQualifications[rowIndex][descriptionField] = content;\r\n const id = allQualifications[rowIndex].Id\r\n \r\n fetch(`${qualificationsUrl}/${id}`, {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n body: JSON.stringify(allQualifications[rowIndex])\r\n })\r\n .then(response => response.json())\r\n .catch(err => console.log(err))\r\n }\r\n\r\n const handleCheckboxChange = (e, compObject, qualId) => {\r\n\r\n const { checked } = e.target;\r\n\r\n if (checked) {\r\n addAssignedCompetency(`${baseUrl}/api/qualificationcompetencies`, compObject, qualId, authToken)\r\n } else {\r\n deleteAssignedCompetency(`${baseUrl}/api/qualificationcompetencies/${compObject.Id}`, authToken)\r\n }\r\n }\r\n\r\n const handleDeleteQualResponse = (id, data, status) => {\r\n const messageEl = document.getElementById(\"deleteQualMsg\");\r\n let errorMsg =\"\";\r\n \r\n if (status === 204){ \r\n setChosenQual(-1);\r\n setDeleteQual(true);\r\n document.getElementById(\"chooseQualDropDown\").value=-1;\r\n }else{\r\n if (data.error){\r\n errorMsg = data.error.message;\r\n\r\n fetch(`${baseUrl}/api/studentqualifications?$filter=QualId eq ${id} &$expand=Student`, {\r\n method: 'GET',\r\n headers: { 'Authorization': `Bearer ${authToken}` }\r\n })\r\n .then(response => {\r\n \r\n return response.json();\r\n })\r\n .then(data => {getStudentNames(data, messageEl, errorMsg);})\r\n .catch(err => console.log(\"error\", err))\r\n }\r\n\r\n\r\n }\r\n\r\n messageEl.textContent = errorMsg;\r\n }\r\n\r\n const handleDeleteQualification = (e, qual) => {\r\n e.preventDefault(); \r\n let status;\r\n let id = qual.Id;\r\n \r\n fetch(`${baseUrl}/api/qualifications/${id}`, {\r\n method: 'DELETE',\r\n headers: { 'Authorization': `Bearer ${authToken}` }\r\n })\r\n .then(response => {\r\n status = response.status;\r\n handleDeleteQualResponse(id, \"status\", status);\r\n return response.json();\r\n })\r\n .then(data => handleDeleteQualResponse(id, data, status))\r\n .catch(err => console.log(\"error\", err))\r\n }\r\n\r\n const getStudentNames = (data, el, errorMsg) =>\r\n {\r\n let studentNames = \"\";\r\n for (let i=0; i\"+ \"\" + studentNames + \"\"; \r\n }\r\n const handleDeleteCompetencyResponse = (id, data, status, type) => {\r\n const messageEl = document.getElementById(`deleteCompMsg${id}`);\r\n let errorMsg =\"\";\r\n \r\n if (status === 204){\r\n let tempArray;\r\n if (type === \"available\"){\r\n tempArray = filteredCompetencyArrays[1].filter(comp => comp.Id !== id );\r\n filteredCompetencyArrays[1] = tempArray;\r\n }else{\r\n tempArray = filteredCompetencyArrays[0].filter(comp => comp.Competency.Id !== id );\r\n filteredCompetencyArrays[0] = tempArray;\r\n }\r\n \r\n setFetchData(true);\r\n }else{\r\n if (data.error){\r\n errorMsg = data.error.message;\r\n\r\n fetch(`${baseUrl}/api/studentcompetencies?$filter=CompetencyId eq ${id} &$expand=Student`, {\r\n method: 'GET',\r\n headers: { 'Authorization': `Bearer ${authToken}` }\r\n })\r\n .then(response => {\r\n \r\n return response.json();\r\n })\r\n .then(data => {getStudentNames(data, messageEl, errorMsg);})\r\n .catch(err => console.log(\"error\", err))\r\n }\r\n }\r\n\r\n messageEl.textContent = errorMsg;\r\n }\r\n\r\n const handleDeleteCompetency = (e, comp, type) => {\r\n e.preventDefault();\r\n let status;\r\n let id;\r\n if(type === \"available\"){\r\n id = comp.Id;\r\n }else{\r\n id = comp.Competency.Id;\r\n }\r\n \r\n fetch(`${baseUrl}/api/competencies/${id}`, {\r\n method: 'DELETE',\r\n headers: { 'Authorization': `Bearer ${authToken}` }\r\n })\r\n .then(response => {\r\n status = response.status;\r\n handleDeleteCompetencyResponse(id, \"status\", status, type);\r\n return response.json();\r\n })\r\n .then(data => handleDeleteCompetencyResponse(id, data, status, type))\r\n .catch(err => console.log(\"error\", err))\r\n }\r\n\r\n return (\r\n
\r\n

Edit Qualifications

\r\n {\r\n isLoadingQualifications ?\r\n \"Spinner\"\r\n :\r\n
\r\n
Choose Qualification to Edit
\r\n \r\n
\r\n }\r\n

\r\n
\r\n {\r\n (allQualifications.length && chosenQual !== -1) &&\r\n
\r\n
Edit Selected Qualification
\r\n
\r\n
\r\n
\r\n updateQualsArray(e, chosenQual)} />\r\n \r\n
\r\n
\r\n
\r\n
\r\n updateQualsArray(e, chosenQual)} />\r\n \r\n
\r\n
\r\n {updateQualsArray(e, chosenQual); validateCostField(e)}} />\r\n \r\n
\r\n
\r\n
\r\n
\r\n updateQualsArray(e, chosenQual)} />\r\n \r\n
\r\n
\r\n {updateQualsArray(e, chosenQual); validateCostField(e)}} />\r\n \r\n
\r\n
\r\n
\r\n
\r\n {updateQualsArray(e, chosenQual); validateCostField(e)}} />\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 updateQualsArray(e, chosenQual)} />\r\n \r\n
\r\n
\r\n
\r\n
\r\n updateQualsArray(e, chosenQual)} />\r\n \r\n
\r\n
\r\n updateQualsArray(e, chosenQual)} />\r\n \r\n
\r\n
\r\n
\r\n
\r\n updateQualsArray(e, chosenQual)} />\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

Description

\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n

Qualification Description

\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n

Training Delivery Description

\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n

Assessment Support Description

\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n

Assessment Timeframe Description

\r\n \r\n
\r\n
\r\n
\r\n
\r\n }\r\n
\r\n {\r\n (allQualifications.length && chosenQual !== -1) &&\r\n
\r\n
Qualification's Competencies
\r\n
\r\n { \r\n filteredCompetencyArrays.length &&\r\n filteredCompetencyArrays[0].map((comp, index) => (\r\n
\r\n \r\n {\r\n comp.Competency.Superseded === false &&\r\n
\r\n \r\n \r\n
\r\n }\r\n \r\n
\r\n ))\r\n }\r\n
Available Competencies
\r\n {\r\n filteredCompetencyArrays.length &&\r\n filteredCompetencyArrays[1].map((comp, index) => (\r\n
\r\n \r\n {\r\n comp.Superseded === 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 EditQualifications\r\n","import { useState, useEffect } from 'react'\r\n\r\nexport const useDoubleDataFetch = (url1, url2, fetchData, setFetchData, token) => {\r\n\r\n const [isLoading1, setIsLoading1] = useState(false)\r\n const [isLoading2, setIsLoading2] = useState(false)\r\n const [error, setError] = useState(null)\r\n const [firstURLData, setfirstURLData] = useState([])\r\n const [secondURLData, setsecondURLData] = useState([])\r\n\r\n useEffect(() => {\r\n\r\n if(!fetchData) return;\r\n \r\n setIsLoading1(true)\r\n fetch(url1, {headers: {'Authorization': `Bearer ${token}`}})\r\n .then(response => response.json())\r\n .then(data => {setfirstURLData(data.value);setFetchData(false);setIsLoading1(false)})\r\n .catch(error => {console.log(error);setIsLoading1(false)})\r\n \r\n setIsLoading2(true)\r\n fetch(url2, {headers: {'Authorization': `Bearer ${token}`}})\r\n .then(response => response.json())\r\n .then(data => {setsecondURLData(data.value);setFetchData(false);setIsLoading2(false)})\r\n .catch(error => {console.log(error);setIsLoading2(false)}) \r\n\r\n }, [fetchData])\r\n\r\n const isLoading = !isLoading1 && !isLoading2? false: true;\r\n return [ isLoading, firstURLData, secondURLData, error ]\r\n\r\n}","export const filterCompetencyArrays = (assignedCompetencies, allCompetencies, qualId) => {\r\n const filteredAssignedCompetencies = assignedCompetencies.filter(comp => comp.QualId === qualId)\r\n\r\n const assignedCompetenciesObject = {}\r\n for (let i = 0; i < filteredAssignedCompetencies.length; i++) {\r\n const compId = filteredAssignedCompetencies[i].Competency.CompID\r\n assignedCompetenciesObject[compId] = true\r\n }\r\n\r\n const filteredAllCompetencies = allCompetencies.filter(comp => assignedCompetenciesObject[comp.CompID] === undefined)\r\n\r\n return [filteredAssignedCompetencies, filteredAllCompetencies]\r\n}","export const addAssignedCompetency = (url, compObject, qualId, authToken) => {\r\n\r\n const id = compObject.CompID ? compObject.Id : compObject.CompetencyId\r\n\r\n const compToAdd = {\r\n \"IsCore\": true,\r\n \"IsStandard\": true,\r\n \"QualId\": qualId,\r\n \"CompetencyId\": id,\r\n }\r\n\r\n fetch(`${url}`, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${authToken}` },\r\n body: JSON.stringify(compToAdd)\r\n })\r\n .then(response => response.json())\r\n .catch(err => console.log(err))\r\n}\r\n\r\nexport const deleteAssignedCompetency = (url, authToken) => {\r\n fetch(url, {\r\n method: 'DELETE',\r\n headers: { 'Authorization': `Bearer ${authToken}` }\r\n })\r\n .then(response => response.json())\r\n .catch(err => console.log(err))\r\n}","import React from 'react';\r\nimport { useHistory, useRouteMatch } from 'react-router-dom';\r\nimport './QualCompEdit.scss';\r\n\r\nconst QualCompEdit = () => {\r\n\r\n let history = useHistory()\r\n let match = useRouteMatch()\r\n\r\n return (\r\n
\r\n

Select an Option

\r\n
\r\n
history.push(`${match.url}/add-qualification`)}>\r\n

Add New Qualification

\r\n
\r\n
history.push(`${match.url}/edit-qualifications`)}>\r\n

Edit Qualifications

\r\n
\r\n
history.push(`${match.url}/add-competency`)}>\r\n

Add New Competency

\r\n
\r\n
history.push(`${match.url}/edit-competencies`)}>\r\n

Edit Competencies

\r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default QualCompEdit\r\n","import React, {useState, useEffect} from 'react'\r\nimport './AddQual.scss';\r\nimport { baseUrl } from '../../functions/globalVariables'\r\nimport {validateCostField} from '../../functions/validateCostField'\r\nimport M from 'materialize-css'\r\nimport TextEditor from '../TextEditor/TextEditor';\r\nimport { useThemeContext } from '../../ThemeContext';\r\n\r\nconst AddQual = () => {\r\n\r\n const { authToken } = useThemeContext()\r\n\r\n const qualificationsUrl = `${baseUrl}/api/qualifications`\r\n \r\n const qualObject = {\r\n \"Name\": \"\",\r\n \"AntaId\": \"\",\r\n \"Description\": \"\",\r\n \"Cost\": null,\r\n \"Package\": null,\r\n \"Level\": null,\r\n \"IsPartQual\": false,\r\n \"Electives\": null,\r\n \"Superseded\": false,\r\n \"DeliveryMode\": null,\r\n \"CoursesDescription\": null,\r\n \"AssessmentSupportDescription\": null,\r\n \"AssessmentTimeframeDescription\": null,\r\n \"TrainingDeliveryDescription\": null,\r\n \"ProgramRecognitionId\": null,\r\n \"LevelOfEducationId\": null,\r\n \"ANZSCO\": null,\r\n \"VETFlag\": null\r\n }\r\n\r\n const [submitted, setSubmitted] = useState(false);\r\n \r\n useEffect(() => {\r\n var elems = document.querySelectorAll('select');\r\n var instances = M.FormSelect.init(elems, {});\r\n })\r\n\r\n useEffect(() => {\r\n document.getElementById(\"addQualForm\").reset();\r\n }, [submitted])\r\n\r\n const handleChange= (e) => {\r\n const {name, value, checked} = e.target;\r\n\r\n if (name === \"IsPartQual\") {\r\n if (checked) {\r\n qualObject[name] = true;\r\n } else {\r\n qualObject[name] = false;\r\n }\r\n } else {\r\n qualObject[name] = value;\r\n }\r\n }\r\n\r\n const handleDescriptionChange = (textareaName, content) => {\r\n qualObject[textareaName] = content;\r\n }\r\n\r\n const handleClick = (qualObject) => {\r\n let isFormValid = true;\r\n if(qualObject.Name.trim() === \"\"){\r\n M.toast({html: 'Qualification must have a name.'})\r\n isFormValid = false;\r\n }\r\n if(isNaN(qualObject.Cost) || qualObject.Cost === null){\r\n M.toast({html: 'Cost must be a Numerical value.'})\r\n isFormValid = false;\r\n }\r\n if(isNaN(qualObject.Level)|| qualObject.Level === null){\r\n M.toast({html: 'Level must be a Numerical value.'})\r\n isFormValid = false;\r\n }\r\n if(isNaN(qualObject.Electives)|| qualObject.Electives === null){\r\n M.toast({html: 'Electives must be a Numerical value.'})\r\n isFormValid = false;\r\n }\r\n\r\n if(isFormValid){\r\n fetch(qualificationsUrl, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n body: JSON.stringify(qualObject)\r\n })\r\n .then(response => response.json())\r\n .then(data => {setSubmitted(true);M.toast({html: 'Qualification Created!', classes: 'mbh-green'});setSubmitted(false);})\r\n .catch(err => console.log(err))\r\n }\r\n }\r\n\r\n return (\r\n
\r\n

Add Qualification

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n handleChange(e)} />\r\n \r\n
\r\n
\r\n
\r\n
\r\n handleChange(e)} />\r\n \r\n
\r\n
\r\n {handleChange(e); validateCostField(e)}} />\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n {handleChange(e); validateCostField(e)}} />\r\n \r\n
\r\n
\r\n
\r\n
\r\n {handleChange(e); validateCostField(e)}} />\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

Description

\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n

Courses Description

\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n

Training Delivery Description

\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n

Assessment Support Description

\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n

Assessment Timeframe Description

\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 AddQual","import React, {useState, useEffect} from 'react'\r\nimport './AddComp.scss';\r\nimport { baseUrl } from '../../functions/globalVariables'\r\nimport {validateCostField} from '../../functions/validateCostField'\r\nimport M from 'materialize-css'\r\nimport { useDataFetch } from '../../hooks/useDataFetch';\r\nimport { capitaliseEachWordOfQualName } from '../../functions/capitaliseEachWordOfQualName';\r\nimport { useThemeContext } from '../../ThemeContext';\r\n\r\nconst AddComp = () => {\r\n\r\n const { authToken } = useThemeContext()\r\n\r\n const competenciesUrl = `${baseUrl}/api/competencies`\r\n const qualCompUrl = `${baseUrl}/api/qualificationcompetencies`\r\n \r\n const qualificationsUrl = `${baseUrl}/api/qualifications`\r\n const [isLoadingQuals, allQuals, qualsError] = useDataFetch(qualificationsUrl, authToken)\r\n\r\n const [isAddingCompetency, setIsAddingCompetency] = useState(false)\r\n \r\n const compObject = {\r\n \"CompID\": \"\",\r\n \"compDsc\": \"\",\r\n \"CompeducationId\": \"\",\r\n \"VetFlag\": \"Y\",\r\n \"NomHrs\": null,\r\n \"Superseded\": false\r\n }\r\n\r\n const qualCompObject = {\r\n \"IsCore\": true,\r\n \"IsStandard\": true,\r\n \"QualId\": null,\r\n \"CompetencyId\": null\r\n }\r\n\r\n const [quals, setQuals] = useState([])\r\n \r\n useEffect(() => {\r\n if (allQuals.length) {\r\n setQuals(allQuals)\r\n }\r\n }, [allQuals])\r\n\r\n useEffect(() => {\r\n var elems = document.querySelectorAll('select');\r\n var instances = M.FormSelect.init(elems, {});\r\n })\r\n\r\n const [submitted, setSubmitted] = useState(false);\r\n\r\n useEffect(() => {\r\n document.getElementById(\"addCompForm\").reset();\r\n }, [submitted])\r\n\r\n const handleChange= (e) => {\r\n const {name, value} = e.target;\r\n compObject[name] = value;\r\n }\r\n\r\n const handleCompQualMapping = (e) => {\r\n const {name, value} = e.target;\r\n qualCompObject[name] = value;\r\n }\r\n\r\n const handleClick = (compObject) => {\r\n let isFormValid = true;\r\n \r\n if(compObject.CompID.trim() === \"\"){\r\n M.toast({html: 'Competency must have an ID.', displayLength: '1000'})\r\n isFormValid = false;\r\n }\r\n \r\n if(isNaN(compObject.NomHrs)){\r\n M.toast({html: 'Nominal Hours must be a Numerical value.', displayLength: '1000'})\r\n isFormValid = false;\r\n }\r\n \r\n if(isFormValid){\r\n setIsAddingCompetency(true)\r\n createCompetency(competenciesUrl)\r\n } else {\r\n setIsAddingCompetency(false)\r\n }\r\n }\r\n\r\n const createCompetency = (url) => {\r\n\r\n if (qualCompObject[\"QualId\"] === null) {\r\n M.toast({html: 'Choose a qualification to map to', displayLength: '1000'});\r\n setIsAddingCompetency(false)\r\n return;\r\n }\r\n\r\n fetch(url, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n body: JSON.stringify(compObject)\r\n })\r\n .then(response => response.json())\r\n .then(data => {\r\n setSubmitted(true); \r\n mapCompetencyToQual(qualCompUrl, data.Id);\r\n setIsAddingCompetency(false)\r\n })\r\n .catch(err => {\r\n console.log(err)\r\n setIsAddingCompetency(false)\r\n })\r\n }\r\n\r\n const mapCompetencyToQual = (url, compId) => {\r\n qualCompObject[\"CompetencyId\"] = compId\r\n\r\n fetch(url, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n body: JSON.stringify(qualCompObject)\r\n })\r\n .then(response => response.json())\r\n .then(data => {\r\n M.toast({html: 'Competency Created!', classes: 'mbh-green', displayLength: '1000'}); \r\n setSubmitted(false);\r\n })\r\n .catch(err => console.log(err))\r\n }\r\n\r\n return (\r\n
\r\n

Add Competency

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n handleChange(e)} />\r\n \r\n
\r\n
\r\n handleChange(e)} />\r\n \r\n
\r\n
\r\n
\r\n
\r\n handleChange(e) } />\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 {handleChange(e); validateCostField(e)}} />\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 AddComp\r\n","import React, {useState} from 'react'\r\nimport './AdministerStudent.scss'\r\nimport { baseUrl } from '../../functions/globalVariables';\r\nimport { useDataFetch } from '../../hooks/useDataFetch';\r\nimport M from 'materialize-css'\r\nimport { useHistory } from 'react-router-dom';\r\nimport { useThemeContext } from '../../ThemeContext';\r\n\r\nconst AdministerStudent = () => {\r\n\r\n let history = useHistory()\r\n const { selectedStudentId, authToken } = useThemeContext()\r\n \r\n const studentUrl = `${baseUrl}/api/students/${selectedStudentId}`;\r\n const [isLoadingStudents, currentStudent, error] = useDataFetch(studentUrl, authToken)\r\n\r\n const checkIfRegisteredUrl = `${baseUrl}/api/students/isstudentregistered(Id=${selectedStudentId})`;\r\n const [isLoadingCheck, checkIfRegistered, errorCheck] = useDataFetch(checkIfRegisteredUrl, authToken)\r\n\r\n const validateNatFormsUrl = `${baseUrl}/api/natforms/validatedates/${selectedStudentId}?$orderBy=AntaId`;\r\n const [isLoadingValNat, validateNatforms, errorValNat] = useDataFetch(validateNatFormsUrl, authToken)\r\n\r\n const validateSTSUrl = `${baseUrl}/api/stsbulkquotedata/validatedata/${selectedStudentId}`;\r\n const [isLoadingSTS, validateSTS, errorSTS] = useDataFetch(validateSTSUrl, authToken)\r\n\r\n const [regEmailSent, setRegEmailSent] = useState(false);\r\n \r\n const studentObject = {\r\n \"StudentId\": selectedStudentId\r\n }\r\n\r\n const checkAPIResponse = (data, status) => {\r\n if (status === 200){\r\n if (data !==\"status\"){\r\n M.toast({html: data, classes: 'mbh-green', displayLength: 2000}); \r\n } \r\n }else{\r\n if(data.Message){\r\n M.toast({html: data.Message, displayLength: 2000});\r\n }\r\n }\r\n }\r\n\r\n const sendSetPasswordEmail = () => {\r\n if (!regEmailSent){\r\n setRegEmailSent(true)\r\n \r\n let status;\r\n document.getElementById(\"sendRegEmailBtn\").classList.remove(\"administer-student__card--red\");\r\n document.getElementById(\"sendRegEmailBtn\").classList.add(\"administer-student__card--grey\");\r\n\r\n fetch(`${baseUrl}/api/auth/registerstudent`, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n body: JSON.stringify(studentObject)\r\n })\r\n .then(response => {\r\n status = response.status;\r\n checkAPIResponse(\"status\", status)\r\n return response.json()\r\n })\r\n .then(data => checkAPIResponse(data, status))\r\n .catch(err => console.log(\"Error: \", err)) \r\n\r\n setTimeout(function() {\r\n document.getElementById(\"sendRegEmailBtn\").classList.remove(\"administer-student__card--grey\");\r\n document.getElementById(\"sendRegEmailBtn\").classList.add(\"administer-student__card--red\");\r\n setRegEmailSent(false);\r\n }, 2000);\r\n }\r\n }\r\n\r\n return (\r\n
\r\n

Actions for student {currentStudent.FirstName} {currentStudent.Surname}

\r\n
\r\n\r\n
{history.push('/admin-portal/administer-student/student-profile')}}>personView Student Details
\r\n
{history.push('/admin-portal/administer-student/student-training-plan')}}>assignmentView Training Plan
\r\n
{history.push('/admin-portal/administer-student/student-qualifications')}}>schoolView Qualifications
\r\n \r\n {/*** registration email ***/}\r\n {\r\n checkIfRegistered === true?\r\n null\r\n :
emailSend Registration Email
\r\n }\r\n
\r\n\r\n {/*** warning messages ***/}\r\n { (validateNatforms.length || validateSTS.length) ? \r\n
\r\n
\r\n
\r\n warningWarnings\r\n
\r\n \r\n {\r\n validateSTS.length ?\r\n
\r\n
STS File potential issues
\r\n {\r\n validateSTS.map((qual, index) => (\r\n
\r\n

Qualification {qual.AntaId}:

\r\n {qual.DOB === null &&

- Date of birth missing

}\r\n {qual.StartDate === null &&

- Start date is missing

}\r\n {qual.EndDate === null &&

- End date is missing

}\r\n {qual.ATSI === null &&

- Aboriginal or Torres Strait Islander field missing

}\r\n {qual.ResidencyStatusAnswer === null &&

- Residency Status missing

}\r\n {qual.WorkInNSWAnswer === null &&

- Do you work in NSW field missing

}\r\n {qual.TraineeAnswer === null &&

- Registered NSW apprentice or trainee field missing

}\r\n {qual.SocialHousingAnswer === null &&

- Social housing field missing

}\r\n {qual.LTUAnswer === null &&

- Unemployed for 52 weeks or more field missing

}\r\n
\r\n
\r\n ))\r\n }\r\n
\r\n :null\r\n }\r\n\r\n { \r\n validateNatforms.length ?\r\n
\r\n
NAT File potential issues
\r\n {\r\n validateNatforms.map((issue, index, arr)=>(\r\n
\r\n {\r\n index > 0 && issue.AntaId === arr[index-1].AntaId ? null:

Qualification {issue.AntaId}:

\r\n }\r\n

{issue.CompetencyId}: {issue.Reason}

\r\n
\r\n ))\r\n }\r\n
\r\n
\r\n :null\r\n }\r\n\r\n \r\n
\r\n
\r\n :null\r\n }\r\n\r\n
\r\n )\r\n}\r\n\r\nexport default AdministerStudent\r\n","import React from 'react'\r\nimport { useHistory } from 'react-router-dom'\r\nimport './AdminSettings.scss'\r\n\r\nconst AdminSettings = () => {\r\n\r\n let history = useHistory()\r\n \r\n return (\r\n
\r\n

Admin

\r\n
history.push('/admin-portal/admin/locations')}>location_cityLocations & Program Streams
\r\n
history.push('/admin-portal/admin/results')}>assessmentEdit Result List
\r\n
history.push('/admin-portal/admin/manage-waiver-codes')}>assignmentManage Waiver Codes
\r\n
{history.push('/admin-portal/admin/users')}}>personAdd/Remove User
\r\n
{history.push('/admin-portal/admin/duplicates')}}>peopleDuplicate Students
\r\n
{history.push('/admin-portal/admin/change-password')}}>lockChange Password
\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default AdminSettings\r\n","import React, {useState} from 'react'\r\nimport './AdminProgramStreams.scss'\r\nimport { baseUrl } from '../../functions/globalVariables';\r\nimport { useDataFetchRefresh } from '../../hooks/useDataFetchRefresh';\r\nimport M from 'materialize-css';\r\n\r\nconst AdminProgramStreams = ({authToken}) => {\r\n\r\n const [refreshData, setRefreshData] = useState(false);\r\n\r\n const progUrl = `${baseUrl}/api/progstreams`;\r\n const [isLoading, progs, error] = useDataFetchRefresh(progUrl, authToken, refreshData, setRefreshData);\r\n\r\n const updateProgramStream = (e, obj) => {\r\n \r\n const {name, value} = e.target;\r\n obj[name] = value;\r\n \r\n fetch(`${baseUrl}/api/progstreams/${obj['ID']}`, {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n body: JSON.stringify(obj)\r\n })\r\n .then(response => response.json())\r\n .catch(err => console.log(err))\r\n }\r\n\r\n const addProgramStream = () => {\r\n\r\n const newProgStream = document.getElementById(\"newProgStream\").value;\r\n const newProgStreamDescription = document.getElementById(\"newProgStreamDescription\").value;\r\n\r\n if(isNaN(newProgStream)){\r\n M.toast({html: \"ID must be a numeric value\", displayLength: 2000});\r\n }else if(newProgStream.trim() !== \"\" && newProgStreamDescription.trim() != \"\"){\r\n \r\n const obj={\r\n \"ProgStream\": newProgStream,\r\n \"Description\": newProgStreamDescription\r\n }\r\n \r\n fetch(`${baseUrl}/api/progstreams`, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n body: JSON.stringify(obj)\r\n })\r\n .then(response => response.json())\r\n .catch(err => console.log(err))\r\n\r\n document.getElementById(\"newProgStream\").value = \"\";\r\n document.getElementById(\"newProgStreamDescription\").value=\"\";\r\n setRefreshData(true);\r\n }else{\r\n M.toast({html: \"Please provide both an ID and a Description\", displayLength: 2000});\r\n }\r\n }\r\n\r\n const deleteProgramStream = (obj) => {\r\n fetch(`${baseUrl}/api/progstreams/${obj['ID']}`, {\r\n method: 'DELETE',\r\n headers: { 'Authorization': `Bearer ${authToken}` }\r\n })\r\n .then(response => response.json())\r\n .catch(err => console.log(err))\r\n\r\n setRefreshData(true);\r\n }\r\n\r\n return (\r\n
\r\n
Program Streams
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n progs.map((prog, index) => (\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
IdDescription
updateProgramStream(e, prog)} /> updateProgramStream(e, prog)} /> deleteProgramStream(prog)}>delete
add
\r\n
\r\n )\r\n}\r\n\r\nexport default AdminProgramStreams\r\n","\texport const regionsObject = {\r\n\t\"\":0,\r\n \"Capital Region\":1,\r\n \"Central Coast\":2,\r\n\t\"Central West\":3,\r\n\t\"Coffs Harbour - Grafton\":4,\r\n\t\"Far West Orana\":5,\r\n\t\"Hunter Valley excluding Newcastle\":6,\r\n\t\"Illawarra\":7,\r\n\t\"Mid North Coast\":8,\r\n\t\"Murray\":9,\r\n\t\"New England and North West\":10,\r\n\t\"Newcastle and Lake Macquarie\":11,\r\n\t\"Richmond - Tweed\":12,\r\n\t\"Riverina\":13,\r\n\t\"Southern Highlands and Shoalhaven\":14,\r\n\t\"Sydney\":15\r\n\t};\r\n\r\n export const getIDfromRegion = (region) => {\r\n return regionsObject[region];\r\n }\r\n\r\n export const getRegionfromID = (regionID) => {\r\n return Object.keys(regionsObject).find(key => regionsObject[key] === regionID);\r\n }","import React, {useState, useEffect} from 'react'\r\nimport './AdminLocationsDelivery.scss'\r\nimport { baseUrl } from '../../functions/globalVariables';\r\nimport { useDataFetchRefresh } from '../../hooks/useDataFetchRefresh';\r\nimport { useDataFetch } from '../../hooks/useDataFetch';\r\nimport {regionsObject, getIDfromRegion, getRegionfromID} from '../../functions/getRegions';\r\nimport M from 'materialize-css';\r\nimport Spinner from '../../assets/spinner.svg'\r\n\r\nconst AdminLocationsDelivery = ({authToken, currOffice}) => {\r\n \r\n useEffect(() => {\r\n var elems = document.querySelectorAll('select');\r\n var instances = M.FormSelect.init(elems, {});\r\n M.updateTextFields();\r\n\r\n var elemsModal = document.querySelectorAll('.modal');\r\n var instancesModal = M.Modal.init(elemsModal, {});\r\n })\r\n\r\n\r\n const [refreshData, setRefreshData] = useState(false);\r\n const [officeObj, setOfficeObj] = useState({});\r\n const deliveryLocationsUrl = `${baseUrl}/api/deliverylocations?&$Filter=IsDisabled ne true&$orderBy=DeliveryLocation`;\r\n const [isLoadingLocations, deliveryLocations, error] = useDataFetchRefresh(deliveryLocationsUrl, authToken, refreshData, setRefreshData);\r\n\r\n // Grabbing all training regions to fill a dropdown list\r\n const trainingRegionsUrl = `${baseUrl}/api/trainingregions?$orderBy=Name asc`;\r\n const [isLoadingRegions, trainingRegions, errorRegions] = useDataFetch(trainingRegionsUrl, authToken);\r\n\r\n const [filteredLocations, setFilteredLocations] = useState([]);\r\n\r\n useEffect(() => {\r\n if (deliveryLocations.length) {\r\n setFilteredLocations(deliveryLocations)\r\n }\r\n }, [deliveryLocations])\r\n\r\n useEffect(() => {\r\n if (currOffice !== undefined && currOffice > 0) {\r\n const filtered = deliveryLocations.filter(location => location.OfficeId == currOffice)\r\n setFilteredLocations(filtered)\r\n }\r\n\r\n if (currOffice == \"choose\") {\r\n setFilteredLocations(deliveryLocations)\r\n }\r\n }, [currOffice])\r\n\r\n const stateUrl = `${baseUrl}/api/states`;\r\n const [ isLoadingState, state, stateError ] = useDataFetch(stateUrl)\r\n\r\n const officeLocationsUrl = `${baseUrl}/api/offices?&$Filter=IsDisabled eq false&$orderBy=Name`;\r\n const [isLoadingOffice, officeLocations, errorOffice] = useDataFetch(officeLocationsUrl);\r\n\r\n const onChooseOffice = (e) => {\r\n if(document.getElementById(\"updateDeliveryLocation\")){\r\n document.getElementById(\"updateDeliveryLocation\").reset();\r\n }\r\n\r\n if(document.getElementById(\"UpdateDeliveryOfficeSection\")){\r\n document.getElementById(\"UpdateDeliveryOfficeSection\").classList.remove(\"hide\");\r\n }\r\n\r\n if (e.target.value > 0){\r\n let obj = filteredLocations.filter(o => o.Id == e.target.value);\r\n setOfficeObj(obj)\r\n }else{\r\n if(document.getElementById(\"updateDeliveryLocation\")){\r\n document.getElementById(\"updateDeliveryLocation\").reset();\r\n }\r\n }\r\n }\r\n const addNewDelOfficeForm = (e) => {\r\n if(document.getElementById(\"SelectDeliveryOfficeSection\")){\r\n document.getElementById(\"SelectDeliveryOfficeSection\").classList.add(\"hide\");\r\n }\r\n if(document.getElementById(\"UpdateDeliveryOfficeSection\")){\r\n document.getElementById(\"UpdateDeliveryOfficeSection\").classList.add(\"hide\");\r\n }\r\n if(document.getElementById(\"AddDeliveryOfficeSection\")){\r\n document.getElementById(\"AddDeliveryOfficeSection\").classList.remove(\"hide\");\r\n }\r\n }\r\n\r\n const cancelAddNewOfficeForm = (e) => {\r\n if(document.getElementById(\"SelectDeliveryOfficeSection\")){\r\n document.getElementById(\"SelectDeliveryOfficeSection\").classList.remove(\"hide\");\r\n }\r\n if(document.getElementById(\"UpdateDeliveryOfficeSection\")){\r\n document.getElementById(\"UpdateDeliveryOfficeSection\").classList.remove(\"hide\");\r\n }\r\n if(document.getElementById(\"AddDeliveryOfficeSection\")){\r\n document.getElementById(\"AddDeliveryOfficeSection\").classList.add(\"hide\");\r\n }\r\n\r\n if(document.getElementById(\"addDeliveryOfficeLocation\")){\r\n document.getElementById(\"addDeliveryOfficeLocation\").reset();\r\n }\r\n }\r\n\r\n const updateOfficeLocation = (e, obj) =>{\r\n const { name, value } = e.target; \r\n \r\n obj[0][name] = value\r\n \r\n fetch(`${baseUrl}/api/deliverylocations/${obj[0].Id}`, {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n body: JSON.stringify(obj[0])\r\n })\r\n .then(response => response.json())\r\n .catch(err => console.log(err))\r\n }\r\n\r\n const addOfficeObj = {\r\n \"DeliveryLocation\": \"\",\r\n \"OfficeId\": 0,\r\n \"Suburb\": \"\",\r\n \"Postcode\": \"\",\r\n \"Country\": \"\",\r\n \"VetLoc\": \"\",\r\n \"TrainingRegionId\": 0,\r\n \"IsDisabled\":false,\r\n \"StateId\": \"\"\r\n }\r\n const updateAddOfficeObj = (e) => {\r\n const { name, value } = e.target;\r\n addOfficeObj[name] = value;\r\n }\r\n\r\n const addOfficeLocation = (e) =>{\r\n\r\n let errorString = \"Please Enter values for: \";\r\n let hasError = false;\r\n\r\n if (document.getElementById(\"OfficeName2\").value == \"\"){\r\n errorString += \"Name \";\r\n hasError = true;\r\n }\r\n if (document.getElementById(\"Office2\").value == \"\"){\r\n errorString += \"Office \";\r\n hasError = true;\r\n }\r\n if (document.getElementById(\"OfficeSuburb2\").value == \"\"){\r\n errorString += \"Suburb \";\r\n hasError = true;\r\n }\r\n if (document.getElementById(\"OfficeStateId2\").value == \"\"){\r\n errorString += \"State \";\r\n hasError = true;\r\n }\r\n if (document.getElementById(\"OfficePostcode2\").value == \"\"){\r\n errorString += \"Postcode \";\r\n hasError = true;\r\n }\r\n if (document.getElementById(\"OfficeRegionId2\").value == \"\"){\r\n errorString += \"Region \";\r\n hasError = true;\r\n } \r\n\r\n if(hasError){\r\n M.toast({html: errorString})\r\n }\r\n else{\r\n fetch(`${baseUrl}/api/deliverylocations`, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n body: JSON.stringify(addOfficeObj)\r\n })\r\n .then(response => {response.json(); window.location.reload();})\r\n .catch(err => {console.log(err); window.location.reload();})\r\n\r\n if(document.getElementById(\"SelectDeliveryOfficeSection\")){\r\n document.getElementById(\"SelectDeliveryOfficeSection\").classList.remove(\"hide\");\r\n }\r\n if(document.getElementById(\"UpdateDeliveryOfficeSection\")){\r\n document.getElementById(\"UpdateDeliveryOfficeSection\").classList.remove(\"hide\");\r\n }\r\n if(document.getElementById(\"AddDeliveryOfficeSection\")){\r\n document.getElementById(\"AddDeliveryOfficeSection\").classList.add(\"hide\");\r\n }\r\n if(document.getElementById(\"addDeliveryOfficeLocation\")){\r\n document.getElementById(\"addDeliveryOfficeLocation\").reset();\r\n }\r\n \r\n setRefreshData(true)\r\n }\r\n }\r\n\r\n \r\n const deleteOfficeLocation = (e, obj) =>{\r\n obj[0][\"IsDisabled\"] = true;\r\n \r\n fetch(`${baseUrl}/api/deliverylocations/${obj[0].Id}`, {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n body: JSON.stringify(obj[0])\r\n })\r\n .then(response => response.json())\r\n .catch(err => console.log(err))\r\n\r\n if(document.getElementById(\"UpdateDeliveryOfficeSection\")){\r\n document.getElementById(\"UpdateDeliveryOfficeSection\").classList.add(\"hide\");\r\n }\r\n\r\n document.getElementById(\"chooseDelOfficeDropDown\").value = \"choose\";\r\n setRefreshData(true)\r\n }\r\n\r\n return (\r\n
\r\n {\r\n isLoadingRegions || isLoadingLocations ?\r\n \"Spinner\"\r\n :\r\n <>\r\n
Delivery Locations
\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n add\r\n \r\n
\r\n
\r\n {\r\n officeObj[0] != undefined && !isLoadingOffice &&\r\n
\r\n
\r\n
\r\n
\r\n updateOfficeLocation(e, officeObj)} />\r\n \r\n
\r\n
\r\n updateOfficeLocation(e, officeObj)} />\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n updateOfficeLocation(e, officeObj)} />\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n updateOfficeLocation(e, officeObj)} />\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

Are you sure you want to delete this Office?

\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
\r\n \r\n
\r\n\r\n \r\n }\r\n
\r\n )\r\n}\r\n\r\nexport default AdminLocationsDelivery\r\n","import React, {useState, useEffect} from 'react'\r\nimport './AdminLocationsOffice.scss'\r\nimport { baseUrl } from '../../functions/globalVariables';\r\nimport { useDataFetchRefresh } from '../../hooks/useDataFetchRefresh';\r\nimport { useDataFetch } from '../../hooks/useDataFetch';\r\nimport {regionsObject, getIDfromRegion} from '../../functions/getRegions';\r\n\r\nimport M from 'materialize-css';\r\n\r\nconst AdminLocationsOffice = ({authToken, setCurrOffice}) => {\r\n\r\n useEffect(() => {\r\n var elems = document.querySelectorAll('select');\r\n var instances = M.FormSelect.init(elems, {});\r\n var elemsModal = document.querySelectorAll('.modal');\r\n var instancesModal = M.Modal.init(elemsModal, {});\r\n M.updateTextFields();\r\n })\r\n\r\n const [refreshData, setRefreshData] = useState(false);\r\n const [officeObj, setOfficeObj] = useState({});\r\n\r\n const stateUrl = `${baseUrl}/api/states`;\r\n const [ isLoadingState, state, stateError ] = useDataFetch(stateUrl)\r\n\r\n const officeLocationsUrl = `${baseUrl}/api/offices?&$orderBy=Name&$Filter=IsDisabled eq false`;\r\n const [isLoading, officeLocations, error] = useDataFetchRefresh(officeLocationsUrl, authToken, refreshData, setRefreshData);\r\n\r\n const deliveryLocationsUrl = `${baseUrl}/api/deliverylocations`;\r\n const [isLoadingDel, deliveryLocations, errorDel] = useDataFetchRefresh(deliveryLocationsUrl, authToken, refreshData, setRefreshData);\r\n\r\n const onChooseOffice = (e) => {\r\n \r\n if(document.getElementById(\"UpdateOfficeSection\")){\r\n document.getElementById(\"UpdateOfficeSection\").classList.remove(\"hide\");\r\n }\r\n if(document.getElementById(\"updateOfficeLocation\")){\r\n document.getElementById(\"updateOfficeLocation\").reset();\r\n }\r\n\r\n if (e.target.value > 0){\r\n let obj = officeLocations.filter(o => o.OfficeId == e.target.value)\r\n setOfficeObj(obj)\r\n }else{\r\n if(document.getElementById(\"updateOfficeLocation\")){\r\n document.getElementById(\"updateOfficeLocation\").reset();\r\n }\r\n }\r\n\r\n setCurrOffice(e.target.value)\r\n }\r\n\r\n const addNewOfficeForm = (e) => {\r\n if(document.getElementById(\"SelectOfficeSection\")){\r\n document.getElementById(\"SelectOfficeSection\").classList.add(\"hide\");\r\n }\r\n if(document.getElementById(\"UpdateOfficeSection\")){\r\n document.getElementById(\"UpdateOfficeSection\").classList.add(\"hide\");\r\n }\r\n if(document.getElementById(\"AddOfficeSection\")){\r\n document.getElementById(\"AddOfficeSection\").classList.remove(\"hide\");\r\n }\r\n }\r\n\r\n const cancelAddNewOfficeForm = (e) => {\r\n if(document.getElementById(\"SelectOfficeSection\")){\r\n document.getElementById(\"SelectOfficeSection\").classList.remove(\"hide\");\r\n }\r\n if(document.getElementById(\"UpdateOfficeSection\")){\r\n document.getElementById(\"UpdateOfficeSection\").classList.remove(\"hide\");\r\n }\r\n if(document.getElementById(\"AddOfficeSection\")){\r\n document.getElementById(\"AddOfficeSection\").classList.add(\"hide\");\r\n }\r\n\r\n if(document.getElementById(\"addOfficeLocation\")){\r\n document.getElementById(\"addOfficeLocation\").reset();\r\n }\r\n }\r\n\r\n const updateOfficeLocation = (e, obj) =>{\r\n const { name, value } = e.target;\r\n obj[0][name] = value\r\n\r\n fetch(`${baseUrl}/api/offices/${obj[0].OfficeId}`, {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n body: JSON.stringify(obj[0])\r\n })\r\n .then(response => response.json())\r\n .catch(err => console.log(err))\r\n }\r\n\r\n const addOfficeObj = {\r\n \"CompanyId\": null,\r\n \"Name\": \"\",\r\n \"Address\": \"\",\r\n \"Address2\": \"\",\r\n \"Suburb\": \"\",\r\n \"StateId\": \"\",\r\n \"Postcode\": 0,\r\n \"ContactName\": \"\",\r\n \"Phone\": \"\",\r\n \"Fax\": \"\",\r\n \"Email\": \"\",\r\n \"IsDisabled\":false,\r\n \"RegionId\": 0\r\n }\r\n const updateAddOfficeObj = (e) => {\r\n const { name, value } = e.target;\r\n addOfficeObj[name] = value;\r\n }\r\n\r\n const addOfficeLocation = (e) =>{\r\n\r\n let errorString = \"Please Enter values for: \";\r\n let hasError = false;\r\n if (document.getElementById(\"OfficeName\").value == \"\"){\r\n errorString += \"Name \";\r\n hasError = true;\r\n }\r\n if (document.getElementById(\"OfficeAddress\").value == \"\"){\r\n errorString += \"Address \";\r\n hasError = true;\r\n }\r\n if (document.getElementById(\"OfficeSuburb\").value == \"\"){\r\n errorString += \"Suburb \";\r\n hasError = true;\r\n }\r\n if (document.getElementById(\"OfficeStateId\").value == \"\"){\r\n errorString += \"State \";\r\n hasError = true;\r\n }\r\n if (document.getElementById(\"OfficePostcode\").value == \"\"){\r\n errorString += \"Postcode \";\r\n hasError = true;\r\n }\r\n if (document.getElementById(\"OfficeRegionId\").value == \"\"){\r\n errorString += \"Region \";\r\n hasError = true;\r\n } \r\n\r\n if(hasError){\r\n M.toast({html: errorString})\r\n }\r\n else{\r\n fetch(`${baseUrl}/api/offices`, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n body: JSON.stringify(addOfficeObj)\r\n })\r\n .then(response => response.json())\r\n .catch(err => {console.log(err); })\r\n\r\n if(document.getElementById(\"SelectOfficeSection\")){\r\n document.getElementById(\"SelectOfficeSection\").classList.remove(\"hide\");\r\n }\r\n if(document.getElementById(\"AddOfficeSection\")){\r\n document.getElementById(\"AddOfficeSection\").classList.add(\"hide\");\r\n }\r\n if(document.getElementById(\"addOfficeLocation\")){\r\n document.getElementById(\"addOfficeLocation\").reset();\r\n }\r\n \r\n setRefreshData(true)\r\n window.location.reload();\r\n }\r\n }\r\n\r\n const deleteOfficeLocation = (obj) =>{\r\n obj[0][\"IsDisabled\"] = true;\r\n\r\n fetch(`${baseUrl}/api/offices/${obj[0].OfficeId}`, {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n body: JSON.stringify(obj[0])\r\n })\r\n .then(response => response.json())\r\n .catch(err => console.log(err))\r\n\r\n if(document.getElementById(\"UpdateOfficeSection\")){\r\n document.getElementById(\"UpdateOfficeSection\").classList.add(\"hide\");\r\n }\r\n\r\n // document.getElementById(\"chooseOfficeDropDown\").value = \"choose\";\r\n // document.getElementById(\"chooseDelOfficeDropDown\").value = \"choose\";\r\n setRefreshData(true);\r\n \r\n let filtered = deliveryLocations.filter(location => location.OfficeId == obj[0].OfficeId)\r\n\r\n if (filtered.length>0){\r\n filtered.map(f => {\r\n \r\n f[\"IsDisabled\"] = true;\r\n \r\n fetch(`${baseUrl}/api/deliverylocations/${f.Id}`, {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n body: JSON.stringify(f)\r\n })\r\n .then(response => response.json())\r\n .catch(err => console.log(err))\r\n })\r\n }\r\n\r\n window.location.reload();\r\n }\r\n\r\n return (\r\n
\r\n
Program Locations
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n add\r\n \r\n
\r\n
\r\n \r\n {\r\n officeObj[0] != undefined && \r\n
\r\n
\r\n
\r\n
\r\n updateOfficeLocation(e, officeObj)} />\r\n \r\n
\r\n
\r\n updateOfficeLocation(e, officeObj)} />\r\n \r\n
\r\n
\r\n updateOfficeLocation(e, officeObj)} />\r\n \r\n
\r\n
\r\n
\r\n
\r\n updateOfficeLocation(e, officeObj)} />\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n updateOfficeLocation(e, officeObj)} />\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n updateOfficeLocation(e, officeObj)} />\r\n \r\n
\r\n
\r\n updateOfficeLocation(e, officeObj)} />\r\n \r\n
\r\n \r\n
\r\n updateOfficeLocation(e, officeObj)} />\r\n \r\n
\r\n
\r\n updateOfficeLocation(e, officeObj)} />\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 \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

Are you sure you want to delete this Office?

\r\n
\r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default AdminLocationsOffice\r\n","import React, { useState, useEffect } from 'react'\r\nimport { baseUrl } from '../../functions/globalVariables';\r\nimport Spinner from '../../assets/spinner.svg'\r\nimport { useDataFetch } from '../../hooks/useDataFetch';\r\nimport M from 'materialize-css';\r\n\r\nconst AdminRegions = ({ authToken }) => {\r\n\r\n useEffect(() => {\r\n var elems = document.querySelectorAll('select');\r\n var instances = M.FormSelect.init(elems, {});\r\n M.updateTextFields();\r\n })\r\n \r\n // Grabbing all training regions to fill a dropdown list\r\n const trainingRegionsUrl = `${baseUrl}/api/trainingregions?$orderBy=Name asc`;\r\n const [isLoadingRegions, trainingRegions, errorRegions] = useDataFetch(trainingRegionsUrl, authToken);\r\n\r\n const [region, setRegion] = useState(null)\r\n const [showAddForm, setShowAddForm] = useState(false)\r\n\r\n const [isUpdatingRegion, setIsUpdatingRegion] = useState(false)\r\n const [isCreatingRegion, setIsCreatingRegion] = useState(false)\r\n const [isDeletingRegion, setIsDeletingRegion] = useState(false)\r\n\r\n const onRegionSelect = (e) => setRegion(trainingRegions[e.target.value])\r\n\r\n const onRegionInfoChange = (e, fieldToChange, newOrCurrentRegion) => {\r\n setRegion({...region, [fieldToChange]: e.target.value})\r\n }\r\n \r\n const createRegion = () => {\r\n setIsCreatingRegion(false)\r\n fetch(`${baseUrl}/api/trainingregions`, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n body: JSON.stringify({ Name: region.Name , VetRef: region.VetRef })\r\n })\r\n .then(response => {response.json(); setIsCreatingRegion(false); setShowAddForm(false); setRegion(null); window.location.reload()})\r\n .catch(err => {console.log(err); setIsCreatingRegion(false); setShowAddForm(false); setRegion(null); window.location.reload()})\r\n }\r\n\r\n const updateRegion = () => {\r\n setIsUpdatingRegion(true)\r\n fetch(`${baseUrl}/api/trainingregions/${region.Id}`, {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n body: JSON.stringify(region)\r\n })\r\n .then(response => {response.json(); setIsUpdatingRegion(false); setRegion(null); window.location.reload()})\r\n .catch(err => {console.log(err); setIsUpdatingRegion(false); setRegion(null); window.location.reload()})\r\n }\r\n\r\n const deleteRegion = () => {\r\n setIsDeletingRegion(true)\r\n fetch(`${baseUrl}/api/trainingregions/${region.Id}`, {\r\n method: 'DELETE',\r\n headers: { 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n body: JSON.stringify({ Name: region.Name , VetRef: region.VetRef })\r\n })\r\n .then(response => {response.json(); setIsDeletingRegion(false); setRegion(null); window.location.reload()})\r\n .catch(err => {console.log(err); setIsDeletingRegion(false); setRegion(null); window.location.reload()})\r\n }\r\n\r\n\r\n\r\n return (\r\n
\r\n
Regions
\r\n {\r\n isLoadingRegions || !trainingRegions.length ?\r\n \"Spinner\"\r\n :\r\n <>\r\n {\r\n !showAddForm &&\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n }\r\n {\r\n showAddForm &&\r\n <>\r\n
New Region
\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
VetRefName
\r\n onRegionInfoChange(e, \"VetRef\", \"new-region\")}\r\n />\r\n \r\n onRegionInfoChange(e, \"Name\", \"new-region\")}\r\n />\r\n \r\n save\r\n {setRegion(null); setShowAddForm(false)}}>cancel\r\n
\r\n \r\n }\r\n {\r\n isUpdatingRegion || isDeletingRegion ?\r\n \"Spinner\"\r\n :\r\n (\r\n region && !showAddForm &&\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
VetRefName
\r\n onRegionInfoChange(e, \"VetRef\", \"current-region\")}\r\n />\r\n \r\n onRegionInfoChange(e, \"Name\", \"current-region\")}\r\n />\r\n \r\n save\r\n delete\r\n
\r\n )\r\n \r\n }\r\n \r\n }\r\n
\r\n )\r\n}\r\n\r\nexport default AdminRegions\r\n","import React, { useState } from 'react'\r\nimport './AdminLocations.scss'\r\nimport AdminProgramStreams from '../AdminProgramStreams/AdminProgramStreams';\r\nimport AdminLocationsDelivery from '../AdminLocationsDelivery/AdminLocationsDelivery';\r\nimport AdminLocationsOffice from '../AdminLocationsOffice/AdminLocationsOffice';\r\nimport AdminRegions from '../AdminRegions/AdminRegions';\r\nimport { useThemeContext } from '../../ThemeContext';\r\n\r\nconst AdminLocations = () => {\r\n\r\n const { authToken } = useThemeContext()\r\n\r\n const [currOffice, setCurrOffice] = useState(0);\r\n\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport default AdminLocations\r\n","import React from 'react'\r\nimport './AdminUsers.scss'\r\n\r\nconst AdminUsers = () => {\r\n return (\r\n
\r\n

Coming Soon...

\r\n
\r\n )\r\n}\r\n\r\nexport default AdminUsers\r\n","import React, { useEffect } from 'react'\r\nimport M from 'materialize-css';\r\n\r\n\r\nconst EventsAddButton = ({ history }) => {\r\n\r\n useEffect(() => {\r\n var elems = document.querySelectorAll('.dropdown-trigger');\r\n var instances = M.Dropdown.init(elems, {});\r\n })\r\n\r\n const enlargeDropdown = () => {\r\n const dropdown = document.getElementById(\"create-options\")\r\n dropdown.style.width = \"140px\"\r\n dropdown.style.height = \"auto\"\r\n\r\n }\r\n\r\n return (\r\n <>\r\n more_vert\r\n \r\n \r\n )\r\n}\r\n\r\nexport default EventsAddButton\r\n","import React, { useState } from 'react'\r\nimport { baseUrl } from '../../functions/globalVariables'\r\nimport { useDataFetch } from '../../hooks/useDataFetch'\r\nimport EventsAddButton from '../EventsAddButton/EventsAddButton'\r\nimport Spinner from '../../assets/spinner.svg'\r\nimport './EventsSummary.scss'\r\nimport dayjs from 'dayjs'\r\nimport { useEffect } from 'react'\r\nimport { useHistory } from 'react-router-dom'\r\nimport { useThemeContext } from '../../ThemeContext'\r\n\r\nconst EventsSummary = ({ setCurrentPage }) => {\r\n\r\n let history = useHistory()\r\n const { authToken, userRole } = useThemeContext()\r\n\r\n let routingPortal = \"admin-portal\";\r\n if (userRole === \"Student\")\r\n routingPortal = \"student-portal\";\r\n\r\n const [isAttendanceMarked, setIsAttendanceMarked] = useState(false)\r\n\r\n const eventsSummaryUrl = `${baseUrl}/api/events?$orderBy=StartDateTime&$filter=IsCancelled eq false`;\r\n const [isLoading, events, error] = useDataFetch(eventsSummaryUrl, authToken)\r\n\r\n const trainersUrl = `${baseUrl}/api/trainers`;\r\n const [isLoadingTrainers, trainers, errorTrainers] = useDataFetch(trainersUrl, authToken)\r\n\r\n // Go here to learn more about formatting dates with an object: https://www.tabnine.com/academy/javascript/how-to-format-date/\r\n\r\n const [todaysEvents, setTodaysEvents] = useState([])\r\n const [upcomingEvents, setUpcomingEvents] = useState([])\r\n \r\n useEffect(() => {\r\n if (events.length) {\r\n const todaysDate = dayjs().format()\r\n const filterTodaysEvents = events.filter(event => dayjs(event.StartDateTime).format(\"YYYY-MM-DD\") === todaysDate.substring(0, 10));\r\n const filterUpcomingEvents = events.filter(event => dayjs(event.StartDateTime).isAfter(todaysDate, 'day'));\r\n\r\n setTodaysEvents(filterTodaysEvents)\r\n setUpcomingEvents(filterUpcomingEvents)\r\n }\r\n }, [events])\r\n \r\n let eventsRegUrl =\"\";\r\n if (userRole === 'Student' && events.length > 0)\r\n eventsRegUrl = `${baseUrl}/api/eventregistrations`;\r\n const [isLoadingEventsReg, eventsReg, eventsRegErr] = useDataFetch(eventsRegUrl, authToken);\r\n \r\n const studentId = parseInt(window.sessionStorage.getItem('mbhStudentId'));\r\n const filteredEventsReg = eventsReg.filter(reg => reg.StudentID === studentId);\r\n \r\n let eventsRegIdList=[];\r\n filteredEventsReg.map(reg => eventsRegIdList.push(reg.EventID)) \r\n\r\n const formatEventDate = (startDate, endDate, typeOfField) => {\r\n if (typeOfField === \"Date\") {\r\n return new Date(startDate).toLocaleString('en-US', {\r\n weekday: 'long', // long, short, narrow\r\n day: 'numeric', // numeric, 2-digit\r\n month: 'long', // numeric, 2-digit, long, short, narrow\r\n })\r\n } else if (typeOfField === \"Time\") {\r\n const formattedStartDate = new Date(startDate).toLocaleString('en-US', { hour: 'numeric', minute: 'numeric' })\r\n const formattedEndDate = new Date(endDate).toLocaleString('en-US', { hour: 'numeric', minute: 'numeric' })\r\n\r\n return `${formattedStartDate} - ${formattedEndDate}`\r\n }\r\n }\r\n\r\n const displayTrainerName = (trainerId) => {\r\n const trainer = trainers.filter(trainer => trainer.Id === trainerId)[0]\r\n return trainer ? `${trainer.FirstName} ${trainer.Surname}` : \"No Trainer Selected\"\r\n }\r\n\r\n const markAttendance = (hasAttended, eventId) =>{\r\n\r\n let eventObj = filteredEventsReg.filter(event => event.EventID === eventId)[0];\r\n\r\n let timestamp = null;\r\n if (hasAttended)\r\n timestamp = dayjs().format();\r\n\r\n eventObj[\"HasAttended\"] = hasAttended;\r\n eventObj[\"AttendanceDate\"] = timestamp;\r\n\r\n fetch(`${baseUrl}/api/eventregistrations/${eventObj.Id}`, {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n body: JSON.stringify(eventObj)\r\n })\r\n .then(response => response.json())\r\n .catch(err => console.log(err))\r\n\r\n setIsAttendanceMarked(hasAttended);\r\n }\r\n\r\n return (\r\n
\r\n {\r\n isLoading || isLoadingTrainers || !trainers.length ?\r\n \"Spinner\"\r\n :\r\n <>\r\n \r\n {/* for Students, check if they are registered in any of today's events. If so, check if they've marked attendance already or not */}\r\n { userRole === 'Student'?\r\n todaysEvents.length ?\r\n todaysEvents.map((event, i) => {\r\n let regEventObj = filteredEventsReg.filter(f => f.EventID === event.Id)[0];\r\n return( \r\n
\r\n { \r\n regEventObj !== undefined?\r\n
\r\n
\r\n
{event.Subject}
\r\n

Date: {formatEventDate(event.StartDateTime, event.EndDateTime, 'Date')}

\r\n

Time: {formatEventDate(event.StartDateTime, event.EndDateTime, 'Time')}

\r\n

Taught by: {displayTrainerName(event.TrainerID)}

\r\n
\r\n {\r\n regEventObj.HasAttended?\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
There are no events on today
\r\n
\r\n
\r\n \r\n }\r\n
\r\n )\r\n })\r\n :\r\n <>\r\n
There are no events on today
\r\n
\r\n
\r\n \r\n :\r\n
\r\n { \r\n //administrator\r\n todaysEvents.length ?\r\n todaysEvents.map((event, i) => {\r\n return( \r\n
\r\n
{ setCurrentPage(\"summary\"); history.push(`/admin-portal/events/event-details/${event.Id}`)}}>\r\n
\r\n
{event.Subject}
\r\n

Date: {formatEventDate(event.StartDateTime, event.EndDateTime, 'Date')}

\r\n

Time: {formatEventDate(event.StartDateTime, event.EndDateTime, 'Time')}

\r\n {/*

Taught by: {displayTrainerName(event.TrainerID)}

*/}\r\n
\r\n
\r\n \r\n
\r\n )\r\n })\r\n :\r\n <>\r\n
There are no events on today
\r\n
\r\n
\r\n \r\n }\r\n
\r\n }\r\n\r\n {/* upcoming events */}\r\n

Upcoming Events

\r\n
\r\n { \r\n upcomingEvents.length ?\r\n upcomingEvents.map((event, i) => {\r\n if (userRole === 'Student' && !eventsRegIdList.includes(event.Id)) \r\n return\r\n\r\n return (\r\n
{ setCurrentPage(\"summary\"); history.push(`/${routingPortal}/events/event-details/${event.Id}`)}}>\r\n
{event.Subject}
\r\n

Date: {formatEventDate(event.StartDateTime, event.EndDateTime, 'Date')}

\r\n

Time: {formatEventDate(event.StartDateTime, event.EndDateTime, 'Time')}

\r\n {userRole === 'Student'?

Taught by: {displayTrainerName(event.TrainerID)}

:null}\r\n
\r\n )\r\n })\r\n :\r\n
There are no upcoming events
\r\n }\r\n
\r\n \r\n }\r\n
\r\n )\r\n}\r\n\r\nexport default EventsSummary\r\n","import React from 'react'\r\nimport EventsSummary from '../EventsSummary/EventsSummary'\r\nimport './Events.scss'\r\n\r\nconst Events = ({setCurrentPage}) => {\r\n\r\n return (\r\n
\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default Events\r\n","import React, {useState} from 'react'\r\nimport './AdminDuplicates.scss'\r\nimport { useDataFetch } from '../../hooks/useDataFetch';\r\nimport { useDataFetchRefresh } from '../../hooks/useDataFetchRefresh';\r\nimport { baseUrl } from '../../functions/globalVariables';\r\nimport Spinner from '../../assets/spinner.svg';\r\nimport { dateTimeToDateString } from '../../functions/dateTimeToDateString';\r\nimport M from 'materialize-css';\r\nimport { useThemeContext } from '../../ThemeContext';\r\n\r\nconst AdminDuplicates = () => {\r\n\r\n const { authToken } = useThemeContext()\r\n\r\n const [refreshData, setRefreshData] = useState(false);\r\n\r\n const studentUrl = `${baseUrl}/api/students?$filter=IsDisabled eq false&$orderBy=Surname`;\r\n //const [isLoadingStudents, allStudents, error] = useDataFetch(studentUrl, authToken);\r\n const [isLoadingStudents, allStudents, error] = useDataFetchRefresh(studentUrl, authToken, refreshData, setRefreshData);\r\n \r\n //create an array of student name objects?\r\n const studentNames = [];\r\n studentNames.push(allStudents.map(s=>(s.FirstName.trim() + \" \" + s.Surname.trim())));\r\n\r\n //create an array of duplicate student names\r\n const duplicateNames = [];\r\n for (let i=0; i s.StudentId))\r\n\r\n function onDragStart(e) {\r\n e.dataTransfer.setData(\"studentFromId\", e.target.id);\r\n }\r\n\r\n const onDragOver = (e) => {\r\n e.preventDefault();\r\n }\r\n\r\n\r\n const checkAPIResponse = (data, status) => {\r\n if (status === 200){\r\n if(data.value !== undefined){\r\n M.toast({html: data.value, classes: 'mbh-green', displayLength: 1000});\r\n setRefreshData(true);\r\n \r\n }\r\n }\r\n }\r\n\r\n const onDrop = (e, studentToId) => {\r\n e.preventDefault();\r\n \r\n const studentFromId = e.dataTransfer.getData(\"studentFromId\");\r\n const destination = document.getElementById(studentToId);\r\n destination.appendChild(document.getElementById(studentFromId));\r\n\r\n const mergeObject = {\r\n \"FromID\": null,\r\n \"ToID\": null\r\n }\r\n\r\n mergeObject[\"FromID\"] = +studentFromId;\r\n mergeObject[\"ToID\"] = studentToId;\r\n \r\n let status;\r\n fetch(`${baseUrl}/api/students/mergestudents`, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${authToken}` },\r\n body: JSON.stringify(mergeObject)\r\n })\r\n .then(response => {\r\n status = response.status;\r\n checkAPIResponse(\"\", status)\r\n return response.json()\r\n })\r\n .then(data => checkAPIResponse(data, status))\r\n .catch(err => console.log(\"errors\" ,err))\r\n\r\n \r\n }\r\n\r\n return (\r\n
\r\n

Merge Duplicate Students

\r\n
Drag the student you want to merge from to the student you want to merge to.
\r\n
\r\n
\r\n {\r\n allStudents.length ?\r\n allStudents.map((student, index) => (\r\n
onDragStart(e)}\r\n onDrop={(e) => onDrop(e, student.Id)}\r\n onDragOver={onDragOver} \r\n >\r\n {student.FirstName} {student.Surname}\r\n {student.Id}\r\n {student.Email}\r\n {dateTimeToDateString(student.DOB, 2)}\r\n * Active Qualification * \r\n
\r\n ))\r\n : isLoadingStudents?\"Spinner\"/:

No students found

\r\n } \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default AdminDuplicates\r\n","import React, {useState} from 'react'\r\nimport './AdminResults.scss'\r\nimport { baseUrl } from '../../functions/globalVariables';\r\nimport { useDataFetchRefresh } from '../../hooks/useDataFetchRefresh';\r\nimport M from 'materialize-css';\r\nimport { useThemeContext } from '../../ThemeContext';\r\n\r\nconst AdminResults = () => {\r\n\r\n const { authToken } = useThemeContext()\r\n\r\n const [refreshData, setRefreshData] = useState(false);\r\n\r\n const resultsUrl = `${baseUrl}/api/competencyResults`;\r\n const [isLoading, results, error] = useDataFetchRefresh(resultsUrl, authToken, refreshData, setRefreshData);\r\n\r\n const updateResult = (e, obj) => {\r\n const { name, value, checked } = e.target;\r\n if (name === \"Claimable\" || name === \"NotYetStarted\" || name ===\"IsCompleted\"){\r\n obj[name] = checked;\r\n }else{\r\n obj[name] = value;\r\n }\r\n \r\n fetch(`${baseUrl}/api/competencyResults/${obj['Id']}`, {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n body: JSON.stringify(obj)\r\n })\r\n .then(response => response.json())\r\n .catch(err => console.log(err))\r\n }\r\n\r\n const resultObj = {\r\n \"Claimable\": false,\r\n \"Result\": \"\",\r\n \"Mode\": \"\",\r\n \"VetRefId\": \"\",\r\n \"NotYetStarted\": false,\r\n \"IsCompleted\": false\r\n }\r\n const updateResultObj = (e) => {\r\n const { name, value, checked } = e.target;\r\n if (name === \"Claimable\" || name === \"NotYetStarted\" || name ===\"IsCompleted\"){\r\n resultObj[name] = checked;\r\n }else{\r\n resultObj[name] = value;\r\n }\r\n }\r\n\r\n const addResult = () => {\r\n \r\n if(document.getElementById(\"newResult\").value.trim() !== \"\"){\r\n fetch(`${baseUrl}/api/competencyResults`, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n body: JSON.stringify(resultObj)\r\n })\r\n .then(response => response.json())\r\n .catch(err => console.log(err))\r\n\r\n if(document.getElementById(\"addNewResultForm\")){\r\n document.getElementById(\"addNewResultForm\").reset();\r\n }\r\n \r\n setRefreshData(true);\r\n }else{\r\n M.toast({html: \"Please provide the result description\", displayLength: 2000});\r\n }\r\n }\r\n\r\n const deleteResult = (obj) => {\r\n fetch(`${baseUrl}/api/competencyResults/${obj['Id']}`, {\r\n method: 'DELETE',\r\n headers: { 'Authorization': `Bearer ${authToken}` }\r\n })\r\n .then(response => response.json())\r\n .catch(err => console.log(err))\r\n\r\n setRefreshData(true);\r\n }\r\n\r\n return (\r\n
\r\n
Result List
\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 results.map((result, index) => (\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
ResultMode (NAT)VetRefId (NAT)ClaimableNot Yet StartedCompletedDelete
updateResult(e, result)} /> updateResult(e, result)} /> updateResult(e, result)} />\r\n \r\n \r\n \r\n \r\n \r\n deleteResult(result)}>delete
\r\n

\r\n
Add New Result
\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
ResultMode (NAT)Vet Ref Id (NAT)ClaimableNot Yet StartedCompleted
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n add
\r\n
\r\n





\r\n
\r\n )\r\n}\r\n\r\nexport default AdminResults\r\n","import React, {useState, useEffect} from 'react'\r\nimport { baseUrl } from '../../functions/globalVariables';\r\nimport FormSpinner from '../../assets/form-spinner.svg'\r\nimport './AdminChangePassword.scss'\r\nimport { useThemeContext } from '../../ThemeContext';\r\n\r\nconst AdminChangePassword = () => {\r\n\r\n const { authToken } = useThemeContext()\r\n\r\n const [isChangingPassword, setIsChangingPassword] = useState(false)\r\n const [isPasswordChanged, setIsPasswordChanged] = useState(false)\r\n\r\n const [currentPassword, setCurrentPassword] = useState(\"\")\r\n const [newPassword, setNewPassword] = useState(\"\")\r\n const [confirmNewPassword, setConfirmNewPassword] = useState(\"\")\r\n\r\n const [isFormValid, setIsFormValid] = useState(true)\r\n\r\n // When editing fields, the error messages becomes hidden again\r\n const onCurrentPasswordChange = (e) => { setCurrentPassword(e.target.value); setIsFormValid(true); setIsPasswordChanged(false) }\r\n const onNewPasswordChange = (e) => { setNewPassword(e.target.value); setIsFormValid(true) }\r\n const onConfirmNewPasswordChange = (e) => { setConfirmNewPassword(e.target.value); setIsFormValid(true); setIsPasswordChanged(false) }\r\n\r\n const checkFormIsValid = (e) => {\r\n e.preventDefault()\r\n\r\n if (newPassword !== confirmNewPassword) {\r\n setIsFormValid(false)\r\n return false\r\n } else if (!newPassword.trim().length || !confirmNewPassword.trim().length) {\r\n setIsFormValid(false)\r\n return false\r\n }\r\n\r\n setIsFormValid(true)\r\n return true\r\n }\r\n\r\n const onPasswordSubmit = (e) => {\r\n if (!checkFormIsValid(e)) return\r\n\r\n setIsChangingPassword(true)\r\n fetch(`${baseUrl}/api/auth/changepassword`, {\r\n method: \"POST\",\r\n headers: { 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${authToken}`\r\n } ,\r\n body: JSON.stringify({ \r\n OldPassword: currentPassword,\r\n NewPassword: newPassword,\r\n ConfirmPassword: confirmNewPassword\r\n })\r\n })\r\n .then(response => {\r\n setIsChangingPassword(false); \r\n setIsPasswordChanged(true); \r\n return response.json()\r\n })\r\n .catch(err => {\r\n setIsChangingPassword(false);\r\n setIsPasswordChanged(true);\r\n return console.log(err)\r\n })\r\n }\r\n\r\n return (\r\n
\r\n
\r\n

Change Password

\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 !isFormValid &&\r\n

New password fields must match

\r\n }\r\n {\r\n isPasswordChanged &&\r\n

Password has been successfully changed!

\r\n }\r\n
\r\n
\r\n {\r\n isChangingPassword ?\r\n
\r\n \"Form\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 AdminChangePassword\r\n","import React, { useState } from 'react'\r\nimport './ManageFeeWaiverCodes.scss'\r\nimport Spinner from '../../assets/spinner.svg'\r\nimport { useDataFetch } from '../../hooks/useDataFetch'\r\nimport { baseUrl } from '../../functions/globalVariables'\r\nimport M from 'materialize-css'\r\nimport { useThemeContext } from '../../ThemeContext'\r\nimport { useHistory } from 'react-router-dom'\r\n\r\nconst ManageFeeWaiverCodes = () => {\r\n\r\n let history = useHistory()\r\n\r\n const { authToken } = useThemeContext()\r\n\r\n const [newCode, setNewCode] = useState({\r\n WaiverCode: \"\",\r\n WaiverStrategy: 0,\r\n WaiverDesc: \"\",\r\n IsDisabled: false\r\n })\r\n\r\n const codesUrl = `${baseUrl}/api/waivercode?$filter=IsDisabled eq false`\r\n const [isLoading, waiverCodes, error] = useDataFetch(codesUrl)\r\n\r\n if (error) {\r\n return <>Network Error\r\n }\r\n\r\n const addCode = (e) => {\r\n e.preventDefault()\r\n fetch(`${baseUrl}/api/waivercode`, {\r\n method: \"POST\",\r\n headers: { \r\n 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n body: JSON.stringify(newCode)\r\n })\r\n .then(response => {response.json(); window.location.reload()})\r\n .catch(err => {\r\n console.log(err);\r\n M.toast({ html: \"Error adding a new code\", displayLength: 2000 })\r\n })\r\n }\r\n\r\n const updateCode = (e) => {\r\n const { name, value } = e.target\r\n const index = e.target.dataset.index\r\n let currentCode = { ...waiverCodes[index], [name]: value }\r\n\r\n console.log(JSON.stringify(currentCode))\r\n\r\n fetch(`${baseUrl}/api/waivercode/${currentCode.WaiverCodeId}`, {\r\n method: \"PUT\",\r\n headers: { \r\n 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n body: JSON.stringify(currentCode)\r\n })\r\n .catch(err => {\r\n console.log(err);\r\n M.toast({ html: \"Error updating code\", displayLength: 2000 })\r\n })\r\n }\r\n\r\n const deleteCode = (e) => {\r\n e.preventDefault()\r\n const index = e.target.dataset.index\r\n let currentCode = waiverCodes[index]\r\n currentCode.IsDisabled = true\r\n \r\n fetch(`${baseUrl}/api/waivercode/${currentCode.WaiverCodeId}`, {\r\n method: \"PUT\",\r\n headers: { \r\n 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n body: JSON.stringify(currentCode)\r\n })\r\n .then(response => {response.json(); window.location.reload()})\r\n .catch(err => {\r\n console.log(err);\r\n M.toast({ html: \"Error deleting code\", displayLength: 2000 })\r\n })\r\n }\r\n\r\n return (\r\n isLoading ?\r\n \"Spinner\"\r\n :\r\n
\r\n \r\n {\r\n waiverCodes.length ?\r\n
\r\n
\r\n {\r\n waiverCodes.map((code, index) => (\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 null\r\n }\r\n
\r\n
\r\n
\r\n
\r\n
\r\n setNewCode(prev => ({ ...prev, WaiverCode: e.target.value }))} />\r\n \r\n
\r\n
\r\n setNewCode(prev => ({ ...prev, WaiverStrategy: e.target.value }))} />\r\n \r\n
\r\n
\r\n setNewCode(prev => ({ ...prev, WaiverDesc: e.target.value }))} />\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 ManageFeeWaiverCodes\r\n","import React, { useEffect, useState } from 'react'\r\nimport { baseUrl } from '../../functions/globalVariables';\r\nimport { useDataFetch } from '../../hooks/useDataFetch';\r\nimport Spinner from '../../assets/spinner.svg'\r\nimport M from 'materialize-css';\r\nimport './EventsTrainers.scss'\r\nimport { useHistory } from 'react-router-dom';\r\nimport { useThemeContext } from '../../ThemeContext';\r\n\r\nconst Trainers = ({ setCurrentPage }) => {\r\n\r\n let history = useHistory()\r\n const { authToken } = useThemeContext()\r\n\r\n useEffect(() => {\r\n var elems = document.querySelectorAll('select');\r\n var instances = M.FormSelect.init(elems, {});\r\n M.updateTextFields();\r\n })\r\n \r\n const trainersURL = `${baseUrl}/api/trainers`;\r\n const [ isLoading, trainers, error ] = useDataFetch(trainersURL, authToken);\r\n const [existingTrainers, setExistingTrainers] = useState([])\r\n const [deletedTrainers, setDeletedTrainers] = useState([])\r\n\r\n const [toggleIsDisabledFilter, setToggleIsDisabledFilter] = useState(false)\r\n const [showAddForm, setShowAddForm] = useState(false)\r\n const [hasPayrateError, setHasPayrateError] = useState(false)\r\n\r\n\r\n const [currentTrainer, setCurrentTrainer] = useState(null)\r\n\r\n\r\n useEffect(() => {\r\n if (trainers.length) {\r\n if (toggleIsDisabledFilter) {\r\n setDeletedTrainers(trainers.filter(trainer => trainer.IsDisabled))\r\n } else {\r\n setExistingTrainers(trainers.filter(trainer => !trainer.IsDisabled))\r\n }\r\n }\r\n }, [trainers, toggleIsDisabledFilter])\r\n\r\n\r\n const handleIsDisabledToggle = () => {\r\n setToggleIsDisabledFilter(!toggleIsDisabledFilter)\r\n setShowAddForm(false)\r\n setCurrentTrainer(null)\r\n }\r\n\r\n const isPayrateFieldValid = () => {\r\n if (hasPayrateError) {\r\n M.toast({html: 'Payrate must be a number'})\r\n return false\r\n }\r\n\r\n return true\r\n }\r\n\r\n const [trainerObj, setTrainerObj] = useState({\r\n Title: null,\r\n FirstName: null,\r\n Surname: null,\r\n Email: null,\r\n Address: null,\r\n Mobile: null,\r\n Phone: null,\r\n Payrate: null,\r\n Qualifications: null,\r\n IsDisabled: false,\r\n })\r\n\r\n const populateTrainerObj = () => {\r\n const keys = Object.keys(trainerObj)\r\n const keysLength = keys.length\r\n\r\n const tempObj = {}\r\n for (let i = 0; i < keysLength; i++) {\r\n tempObj[keys[i]] = currentTrainer[keys[i]]\r\n }\r\n\r\n setTrainerObj(tempObj)\r\n }\r\n\r\n const resetTrainerObj = () => {\r\n if (currentTrainer) {\r\n const keys = Object.keys(trainerObj)\r\n const keysLength = keys.length\r\n \r\n for(let i = 0; i < keysLength; i++) {\r\n trainerObj[keys[i]] = null\r\n }\r\n \r\n setCurrentTrainer(null)\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (currentTrainer) {\r\n populateTrainerObj()\r\n }\r\n }, [currentTrainer])\r\n\r\n const onTrainerSelect = (e) => {\r\n const trainerId = e.target.value\r\n let selectedTrainer = []\r\n if (toggleIsDisabledFilter) {\r\n selectedTrainer = deletedTrainers.filter(trainer => trainer.Id == trainerId)\r\n if (selectedTrainer.length) {\r\n setCurrentTrainer(selectedTrainer[0])\r\n }\r\n } else {\r\n selectedTrainer = existingTrainers.filter(trainer => trainer.Id == trainerId)\r\n if (selectedTrainer.length) {\r\n setCurrentTrainer(selectedTrainer[0])\r\n }\r\n }\r\n }\r\n\r\n const onTrainerInfoChange = (e) => {\r\n const { name, value } = e.target\r\n if (name === \"Payrate\") {\r\n if (isNaN(value)) {\r\n M.toast({html: 'Payrate must be number'})\r\n setHasPayrateError(true)\r\n return\r\n }\r\n setHasPayrateError(false)\r\n setTrainerObj(prev => ({...prev, [name]: +value }))\r\n } else {\r\n setTrainerObj(prev => ({...prev, [name]: value }))\r\n }\r\n }\r\n\r\n const handleEnableTrainer = (e) => {\r\n const { name, checked } = e.target\r\n setTrainerObj(prev => ({...prev, [name]: !checked }))\r\n }\r\n\r\n console.log(trainerObj)\r\n\r\n const createNewTrainer = () => {\r\n if (!isPayrateFieldValid()) return\r\n\r\n fetch(`${baseUrl}/api/trainers`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n body: JSON.stringify(trainerObj)\r\n })\r\n .then(response => { response.json(); setShowAddForm(false); window.location.reload()})\r\n .catch(err => { console.log(err); setShowAddForm(false); window.location.reload()})\r\n }\r\n\r\n const saveTrainer = () => {\r\n if (!isPayrateFieldValid()) return\r\n\r\n fetch(`${baseUrl}/api/trainers/${currentTrainer.Id}`, {\r\n method: 'PUT',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n body: JSON.stringify({\r\n Id: currentTrainer.Id,\r\n ...trainerObj\r\n })\r\n })\r\n .then(response => { response.json(); setCurrentTrainer(null); window.location.reload()})\r\n .catch(err => { console.log(err); setCurrentTrainer(null); window.location.reload()})\r\n }\r\n\r\n const deleteTrainer = () => {\r\n fetch(`${baseUrl}/api/trainers/${currentTrainer.Id}`, {\r\n method: 'PUT',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n body: JSON.stringify({...trainerObj, IsDisabled: true, Id: currentTrainer.Id})\r\n })\r\n .then(response => { response.json(); setCurrentTrainer(null); window.location.reload()})\r\n .catch(err => { console.log(err); setCurrentTrainer(null); window.location.reload()})\r\n }\r\n\r\n\r\n\r\n return (\r\n
\r\n \r\n\r\n {\r\n isLoading ?\r\n \"Spinner\"\r\n :\r\n (\r\n !showAddForm &&\r\n <>\r\n
\r\n \r\n Show Deleted Trainers\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 currentTrainer && !showAddForm &&\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 currentTrainer.IsDisabled &&\r\n
\r\n

\r\n \r\n

\r\n
\r\n }\r\n
\r\n
\r\n {\r\n !currentTrainer.IsDisabled &&\r\n delete\r\n }\r\n \r\n save\r\n
\r\n \r\n }\r\n {\r\n showAddForm &&\r\n <>\r\n

New Trainer

\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 )\r\n}\r\n\r\nexport default Trainers\r\n","import React, {useState, useEffect} from 'react'\r\nimport { useDataFetch } from '../../hooks/useDataFetch';\r\nimport { baseUrl } from '../../functions/globalVariables';\r\nimport { Calendar, momentLocalizer } from 'react-big-calendar'\r\nimport moment from 'moment'\r\n\r\nimport './EventsCalendar.scss'\r\nimport \"react-big-calendar/lib/css/react-big-calendar.css\";\r\nimport { useHistory } from 'react-router-dom';\r\nimport { useThemeContext } from '../../ThemeContext';\r\n\r\nconst localizer = momentLocalizer(moment)\r\n\r\nconst EventsCalendar = ({setCurrentPage}) => {\r\n\r\n let history = useHistory()\r\n const { authToken, userRole } = useThemeContext()\r\n\r\n const eventsUrl = `${baseUrl}/api/events?$filter=IsCancelled eq false`;\r\n const [isLoadingEvents, events, eventsErr] = useDataFetch(eventsUrl, authToken);\r\n\r\n let eventsRegUrl =\"\";\r\n if (userRole === 'Student' && events.length > 0)\r\n eventsRegUrl = `${baseUrl}/api/eventregistrations`;\r\n const [isLoadingEventsReg, eventsReg, eventsRegErr] = useDataFetch(eventsRegUrl, authToken);\r\n \r\n const studentId = parseInt(window.sessionStorage.getItem('mbhStudentId'));\r\n const filteredEventsReg = eventsReg.filter(reg => reg.StudentID === studentId);\r\n \r\n let eventsRegIdList=[];\r\n filteredEventsReg.map(reg => eventsRegIdList.push(reg.EventID)) \r\n\r\n let eventsArr=[]\r\n\r\n events.map(event => {\r\n if (userRole !== 'Student' || eventsRegIdList.includes(event.Id)){\r\n let eventItem = {\r\n id:null,\r\n start: null,\r\n end: null,\r\n title: \"\"\r\n }\r\n \r\n eventItem[\"id\"] = event.Id;\r\n eventItem[\"start\"] = moment(event.StartDateTime).toDate();//dates need to be a date object or calendar crashes on week and day view\r\n eventItem[\"end\"] = moment(event.EndDateTime).toDate();//dates need to be a date object or calendar crashes on week and day view\r\n eventItem[\"title\"] = event.Subject;\r\n \r\n eventsArr.push(eventItem);\r\n }\r\n });\r\n \r\n const eventSelected = (e) => {\r\n setCurrentPage(\"calendar\"); \r\n \r\n if (userRole === \"Administrator\"){\r\n history.push(`/admin-portal/events/edit/${e.id}`);\r\n }\r\n else{\r\n history.push(`/student-portal/events/event-details/${e.id}`);\r\n }\r\n \r\n }\r\n\r\n const eventStyleGetter = (e) => {\r\n var style = {\r\n backgroundColor: '#00703c',\r\n color: 'white',\r\n fontSize: '0.8rem',\r\n textAlign: 'center',\r\n paddingTop:'5px',\r\n height: '30px'\r\n };\r\n return {\r\n style: style\r\n };\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n eventSelected(e)}\r\n eventPropGetter={(e) => eventStyleGetter(e)}\r\n /> \r\n {/* Find documentation here: https://jquense.github.io/react-big-calendar/examples/index.html */}\r\n
\r\n\r\n
\r\n )\r\n}\r\n\r\nexport default EventsCalendar\r\n","import React, { useState, useEffect } from 'react'\r\nimport M from 'materialize-css';\r\nimport { useDataFetch } from '../../hooks/useDataFetch';\r\nimport { baseUrl } from '../../functions/globalVariables';\r\nimport Spinner from '../../assets/spinner.svg'\r\nimport { arrayToObjectWithKey } from '../../functions/arrayToObject';\r\nimport FormSpinner from '../../assets/form-spinner.svg'\r\nimport './EventAddList.scss'\r\n\r\n\r\nconst EventAddList = ({ registrations, eventId, attendeeList, setAttendeeList, authToken }) => {\r\n\r\n useEffect(() => {\r\n var elems = document.querySelectorAll('select');\r\n var instances = M.FormSelect.init(elems, {});\r\n })\r\n\r\n const studentGroupsUrl = `${baseUrl}/api/studentgroups?$expand=Students`;\r\n const [isLoadingGroups, studentGroups, errorGroups] = useDataFetch(studentGroupsUrl, authToken)\r\n\r\n const [listToAdd, setListToAdd] = useState(null)\r\n const [studentsAdded, setStudentsAdded] = useState(false)\r\n \r\n let registrationsObj = {}\r\n if (registrations) {\r\n registrationsObj = arrayToObjectWithKey(registrations, \"StudentID\")\r\n }\r\n \r\n const handleGroupSelect = (e) => {\r\n if (studentGroups[e.target.value]) {\r\n const studentsToAdd = checkForDuplicates(studentGroups[e.target.value].Students)\r\n setListToAdd(studentsToAdd)\r\n }\r\n }\r\n\r\n const checkForDuplicates = (studentList) => {\r\n if (!attendeeList) {\r\n return studentList\r\n } \r\n\r\n const studentObj = arrayToObjectWithKey(attendeeList, \"Id\")\r\n return studentList.filter(student => studentObj[student.Id] === undefined)\r\n }\r\n\r\n const handleAttendeeListChange = (listToAdd) => {\r\n const listWithoutDuplicates = checkForDuplicates(listToAdd)\r\n\r\n if (!listWithoutDuplicates.length) {\r\n M.toast({html: `These students are already attending`, displayLength: 1000})\r\n setStudentsAdded(true)\r\n return;\r\n }\r\n\r\n const tempAttendeeList = attendeeList === null ? [] : attendeeList\r\n\r\n setAttendeeList([...tempAttendeeList, ...listWithoutDuplicates])\r\n setStudentsAdded(true)\r\n M.toast({html: `Students have been added`, classes: \"mbh-green\", displayLength: 2000})\r\n }\r\n\r\n const addListOfStudents = () => {\r\n // Remove students already in the list so they don't get added twice\r\n let combinedListToAdd = []\r\n if (attendeeList && attendeeList.length) {\r\n combinedListToAdd = [...attendeeList, ...listToAdd]\r\n } else {\r\n combinedListToAdd = listToAdd\r\n }\r\n \r\n const registrationList = combinedListToAdd.filter(attendee => registrationsObj[attendee.Id] === undefined)\r\n\r\n handleAttendeeListChange(registrationList)\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
Add a List of Students
\r\n
\r\n {\r\n isLoadingGroups ?\r\n \"Spinner\"\r\n :\r\n
\r\n \r\n \r\n
\r\n }\r\n {\r\n listToAdd && listToAdd.length && !studentsAdded ?\r\n
\r\n {\r\n registrations ?\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 EventAddList","import React from 'react'\r\nimport './EventAttendeeList.scss'\r\n\r\nconst EventAttendeeList = ({ allAttendees, deleteAttendee }) => {\r\n\r\n return (\r\n
\r\n
\r\n
Current Attendees ({allAttendees.length && allAttendees.length})
\r\n
\r\n {\r\n allAttendees.length && \r\n allAttendees\r\n .map(attendee => {\r\n const isStudentObjectNested = attendee.Student !== undefined ? true : false\r\n if (isStudentObjectNested) {\r\n console.log(attendee)\r\n }\r\n return (\r\n
\r\n {\r\n isStudentObjectNested ?\r\n <>\r\n {`${attendee.Student.FirstName} ${attendee.Student.Surname}`}\r\n deleteAttendee(attendee.Student.Id)}>delete\r\n \r\n :\r\n <>\r\n {`${attendee.FirstName} ${attendee.Surname}`}\r\n deleteAttendee(attendee.Id)}>delete\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 EventAttendeeList\r\n","import React, {useState, useEffect} from 'react'\r\nimport { useDataFetch } from '../../hooks/useDataFetch';\r\nimport { baseUrl } from '../../functions/globalVariables';\r\nimport './EventsCreateNew.scss'\r\nimport M from 'materialize-css';\r\nimport DatePickerComp from '../DatePickerComp/DatePickerComp';\r\nimport TextEditor from '../TextEditor/TextEditor';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport Autocomplete from '@material-ui/lab/Autocomplete';\r\nimport moment from 'moment'\r\nimport dayjs from 'dayjs'\r\nimport EventAddList from '../EventAddList/EventAddList';\r\nimport EventAttendeeList from '../EventAttendeeList/EventAttendeeList';\r\nimport { arrayToObjectWithKey } from '../../functions/arrayToObject';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { useThemeContext } from '../../ThemeContext';\r\n\r\nconst EventsCreateNew = ({currentPage}) => {\r\n\r\n let history = useHistory()\r\n const { authToken } = useThemeContext()\r\n\r\n const studentUrl = `${baseUrl}/api/students?$filter=IsDisabled eq false`;\r\n const [isLoadingStudents, students, studentsErr] = useDataFetch(studentUrl, authToken)\r\n\r\n const trainerUrl = `${baseUrl}/api/trainers?$filter=IsDisabled eq false`;\r\n const [isLoadingTrainers, trainers, trainersErr] = useDataFetch(trainerUrl, authToken)\r\n\r\n const typeUrl = `${baseUrl}/api/eventtypes`;\r\n const [isLoadingTypes, types, typesErr] = useDataFetch(typeUrl, authToken)\r\n\r\n const locationUrl = `${baseUrl}/api/deliverylocations?&$Filter=IsDisabled ne true&$orderBy=DeliveryLocation`;\r\n const [isLoadingLocation, locations, locationsErr] = useDataFetch(locationUrl, authToken)\r\n\r\n const [newEventId, setNewEventId] = useState(null)\r\n\r\n const [showAddListForm, setShowAddListForm] = useState(false)\r\n\r\n const [newAttendeeList, setNewAttendeeList] = useState(null)\r\n\r\n const appendCurrentTimezone = () => {\r\n // Checks if it is currently daylight saving time (DST)\r\n if (moment().isDST()) {\r\n return \":00+11:00\"\r\n } else {\r\n return \":00+10:00\"\r\n }\r\n }\r\n\r\n //initial dates should default to tomorrow at 8:30am\r\n const initialDateTime = dayjs().add(1, 'day').format().substring(0,11)+ \"08:30\" + appendCurrentTimezone();\r\n \r\n const [eventObj, setEventObj] = useState({\r\n Subject: \"\",\r\n Description: \"\",\r\n StartDateTime: initialDateTime,\r\n EndDateTime: initialDateTime,\r\n DeliveryLocationID: null,\r\n EventTypeID:null,\r\n TrainerID:null,\r\n SupportID:null,\r\n IsCancelled:false\r\n }) \r\n \r\n useEffect(() => {\r\n var elems = document.querySelectorAll('select');\r\n var instances = M.FormSelect.init(elems, {});\r\n M.updateTextFields();\r\n\r\n var tooltippedElems = document.querySelectorAll('.tooltipped');\r\n var tooltippedInstances = M.Tooltip.init(tooltippedElems, {});\r\n })\r\n\r\n //this is to get rid of the unnoying underline in the attendees box \r\n useEffect(() => {\r\n const input = document.getElementById(\"grouped-demo\");\r\n if (input && !input.classList.contains(\"browser-default\")) {\r\n input.classList.add(\"browser-default\");\r\n }\r\n });\r\n\r\n useEffect(() => {\r\n setShowAddListForm(false)\r\n }, [newAttendeeList])\r\n\r\n const handleNameCategorisation = (option) => {\r\n const surname = option.Student ? option.Student.Surname.trim() : option.Surname.trim()\r\n if (surname.length) {\r\n let firstLetter = surname.charAt(0).toUpperCase()\r\n if (firstLetter.toLowerCase() != firstLetter.toUpperCase()) {\r\n return {\r\n firstLetter: firstLetter,\r\n ...option,\r\n };\r\n }\r\n \r\n return {\r\n firstLetter: \"Other\",\r\n ...option,\r\n };\r\n }\r\n }\r\n \r\n let options = students\r\n .sort((a, b) => a.Surname.trim() > b.Surname.trim())\r\n .map(option => handleNameCategorisation(option))\r\n .filter(option => option !== undefined)\r\n \r\n\r\n const onCloseEventCreation = () => {\r\n if (currentPage === \"summary\") {\r\n history.push('/admin-portal/events')\r\n } else {\r\n history.push('/admin-portal/events/calendar')\r\n }\r\n }\r\n\r\n const updateeventObj=(e) => {\r\n const {name, value} = e.target;\r\n setEventObj(prev => ({...prev, [name]: value }))\r\n }\r\n\r\n const handleAttendeeListChange = (newStudent) => {\r\n const studentToAdd = newStudent.Student ? newStudent.Student : newStudent\r\n\r\n if (!studentToAdd.firstLetter) {\r\n studentToAdd.firstLetter = studentToAdd.Surname.charAt(0)\r\n }\r\n\r\n if (!newAttendeeList) {\r\n setNewAttendeeList([studentToAdd])\r\n } else {\r\n const listObj = arrayToObjectWithKey(newAttendeeList, \"Id\")\r\n if (studentToAdd!==undefined && listObj[studentToAdd.Id] !== undefined) {\r\n M.toast({html: \"Student(s) is already attending\", displayLength: 2000});\r\n return; \r\n }\r\n setNewAttendeeList(prev => ([...prev, studentToAdd]))\r\n }\r\n }\r\n\r\n const handleDateChange = (e, date) => {\r\n \r\n const dateString = dayjs(date).format(\"YYYY-MM-DD\"); \r\n const currentDate = eventObj[e]\r\n let newDate = dateString + currentDate.substring(10,25)\r\n if (dayjs(newDate).isValid()){\r\n setEventObj(prev => ({...prev, [e]: newDate }))\r\n }\r\n else{\r\n M.toast({html: \"Please select a valid Date\", displayLength: 1000});\r\n }\r\n }\r\n\r\n const handleTimeChange = (e) => {\r\n const {name, value} = e.target;\r\n\r\n let currentDate; \r\n let newDate;\r\n\r\n if (name === \"startTime\"){\r\n currentDate = eventObj[\"StartDateTime\"];\r\n newDate = currentDate.substring(0,11)+ value + appendCurrentTimezone();\r\n setEventObj(prev => ({...prev, \"StartDateTime\": newDate }))\r\n }\r\n if (name === \"endTime\"){\r\n currentDate = eventObj[\"EndDateTime\"];\r\n newDate = currentDate.substring(0,11)+ value + appendCurrentTimezone();\r\n setEventObj(prev => ({...prev, \"EndDateTime\": newDate }))\r\n }\r\n\r\n }\r\n \r\n const handleDescriptionChange = (name, content) =>{\r\n setEventObj(prev => ({...prev, [name]: content }))\r\n }\r\n\r\n const checkAPIResponse = (data, status, sender) => {\r\n\r\n if (status === 200 || status === 201){\r\n if (sender === 'createevent' && data.Id !== undefined){\r\n setNewEventId(data.Id)\r\n }else{\r\n history.push('/admin-portal/events/calendar')\r\n }\r\n }else{\r\n if(data.Message){\r\n M.toast({html: data.Message, displayLength: 2000});\r\n }\r\n }\r\n }\r\n\r\n const validateEventDetails = () => {\r\n //validation\r\n if (eventObj[\"Subject\"].trim() === \"\"){\r\n M.toast({html: \"Please enter a subject for the event\", displayLength: 1000});\r\n return false\r\n }\r\n if (!moment(eventObj[\"StartDateTime\"]).isValid()){\r\n M.toast({html: \"Please enter a valid Date and Time\", displayLength: 1000});\r\n return false\r\n }\r\n if(moment(eventObj[\"StartDateTime\"]) > moment(eventObj[\"EndDateTime\"])){\r\n M.toast({html: \"Event cannot end before it begins :-p\", displayLength: 1000});\r\n return false\r\n }\r\n\r\n return true\r\n }\r\n\r\n const onCreateEvent = () => {\r\n let status;\r\n \r\n if (validateEventDetails()){\r\n fetch(`${baseUrl}/api/events`, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${authToken}` },\r\n body: JSON.stringify(eventObj)\r\n })\r\n .then(response => {\r\n status = response.status;\r\n checkAPIResponse(\"\", status, \"createevent\")\r\n return response.json()\r\n })\r\n .then(data => {\r\n if (newAttendeeList) {\r\n postAttendeeList(data.Id, status)\r\n }\r\n })\r\n .catch(err => console.log(\"Error: \", err)) \r\n }\r\n }\r\n \r\n const postAttendeeList = (eventID, status) => {\r\n const formattedList = newAttendeeList.map(attendee => ({\r\n EventID: +eventID,\r\n StudentID: attendee.Student ? attendee.Student.Id : attendee.Id\r\n }))\r\n\r\n fetch(`${baseUrl}/api/eventregistrations/addlist`, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${authToken}` },\r\n body: JSON.stringify({List: formattedList})\r\n })\r\n .then(response => {\r\n status = response.status;\r\n checkAPIResponse(\"\", status, \"post-attendees\")\r\n return response.json()\r\n })\r\n }\r\n\r\n const deleteAttendee = (id) => {\r\n\r\n const filteredList = newAttendeeList\r\n .filter(attendee => attendee.Student ? attendee.Student.Id !== id : attendee.Id !== id)\r\n .sort((a, b) => {\r\n const firstSurname = a.Student ? a.Student.Surname : a.Surname\r\n const secondSurname = b.Student ? b.Student.Surname : b.Surname\r\n \r\n return firstSurname > secondSurname\r\n })\r\n if (filteredList.length) {\r\n setNewAttendeeList(filteredList)\r\n } else {\r\n setNewAttendeeList(null)\r\n }\r\n }\r\n \r\n const [attendeeValue, setAttendeeValue] = useState(\"\")\r\n\r\n return (\r\n
\r\n\r\n
\r\n

Create Event

\r\n
\r\n save\r\n close \r\n
\r\n
\r\n {\r\n newAttendeeList &&\r\n \r\n }\r\n
\r\n
\r\n
\r\n -b.firstLetter.localeCompare(a.firstLetter))}\r\n groupBy={(option) => option.firstLetter}\r\n getOptionLabel={(option) => `${option.FirstName.trim()} ${option.Surname.trim()}`}\r\n renderInput={(params) => }\r\n clearOnBlur={true}\r\n clearOnEscape={true}\r\n inputValue={attendeeValue}\r\n onInputChange={(event, newInputValue, reason) => {\r\n if (reason === 'reset') {\r\n setAttendeeValue('')\r\n return\r\n } else {\r\n setAttendeeValue(newInputValue)\r\n }\r\n }}\r\n onChange={(event, newValue) => {\r\n if (newValue !== null){\r\n handleAttendeeListChange(newValue);\r\n }\r\n }}\r\n />\r\n
\r\n
\r\n {\r\n showAddListForm ?\r\n \r\n :\r\n \r\n }\r\n
\r\n
\r\n {\r\n showAddListForm &&\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 \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 EventsCreateNew\r\n","import React, {useState, useEffect} from 'react'\r\nimport { useDataFetch } from '../../hooks/useDataFetch';\r\nimport { baseUrl } from '../../functions/globalVariables';\r\nimport './EventsEdit.scss'\r\nimport M from 'materialize-css';\r\nimport DatePickerComp from '../DatePickerComp/DatePickerComp';\r\nimport TextEditor from '../TextEditor/TextEditor';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport Autocomplete from '@material-ui/lab/Autocomplete';\r\nimport moment from 'moment'\r\nimport { useHistory, useParams } from 'react-router-dom';\r\nimport Spinner from '../../assets/spinner.svg'\r\nimport EventAttendeeList from '../EventAttendeeList/EventAttendeeList';\r\nimport { arrayToObjectWithKey } from '../../functions/arrayToObject';\r\nimport EventAddList from '../EventAddList/EventAddList';\r\nimport { useThemeContext } from '../../ThemeContext';\r\n\r\nconst EventsEdit = () => {\r\n\r\n let history = useHistory()\r\n const { authToken } = useThemeContext()\r\n\r\n //if in edit mode get the event details\r\n const { eventId } = useParams();\r\n const eventUrl = `${baseUrl}/api/events/${eventId}`;\r\n const [isLoadingEvent, eventObject, eventErr] = useDataFetch(eventUrl, authToken);\r\n\r\n const studentUrl = `${baseUrl}/api/students`;\r\n const [isLoadingStudents, students, studentsErr] = useDataFetch(studentUrl, authToken)\r\n\r\n const trainerUrl = `${baseUrl}/api/trainers`;\r\n const [isLoadingTrainers, trainers, trainersErr] = useDataFetch(trainerUrl, authToken)\r\n\r\n const [trainersToSelect, setTrainersToSelect] = useState([])\r\n\r\n useEffect(() => {\r\n if (trainers.length && eventObject !== undefined) {\r\n setTrainersToSelect(trainers.filter(trainer => {\r\n if (!trainer.IsDisabled) {\r\n return true\r\n } else if (trainer.IsDisabled && trainer.Id === eventObject.TrainerID) {\r\n // Asterisk means trainer is disabled in database\r\n trainer.Surname += \" *\"\r\n return true\r\n }\r\n\r\n return false\r\n }))\r\n }\r\n }, [trainers, eventObject])\r\n\r\n const typeUrl = `${baseUrl}/api/eventtypes`;\r\n const [isLoadingTypes, types, typesErr] = useDataFetch(typeUrl, authToken)\r\n\r\n const locationUrl = `${baseUrl}/api/deliverylocations?&$Filter=IsDisabled ne true&$orderBy=DeliveryLocation`;\r\n const [isLoadingLocation, locations, locationsErr] = useDataFetch(locationUrl, authToken)\r\n\r\n const eventRegistrationsUrl = `${baseUrl}/api/eventregistrations?$filter=EventID eq ${eventId}`;\r\n const [isLoadingRegistrations, registrations, registrationsErr] = useDataFetch(eventRegistrationsUrl, authToken)\r\n \r\n useEffect(() => {\r\n var elems = document.querySelectorAll('select');\r\n var instances = M.FormSelect.init(elems, {});\r\n M.updateTextFields();\r\n })\r\n\r\n //this is to get rid of the unnoying underline in the attendees box \r\n useEffect(() => {\r\n const input = document.getElementById(\"grouped-demo\");\r\n if (input && !input.classList.contains(\"browser-default\")) {\r\n input.classList.add(\"browser-default\");\r\n }\r\n })\r\n\r\n const handleNameCategorisation = (option) => {\r\n const firstName = option.Surname.trim()\r\n if (firstName.length) {\r\n let firstLetter = firstName.charAt(0).toUpperCase()\r\n if (firstLetter.toLowerCase() != firstLetter.toUpperCase()) {\r\n return {\r\n firstLetter: firstLetter,\r\n ...option,\r\n };\r\n }\r\n \r\n return {\r\n firstLetter: \"Other\",\r\n ...option,\r\n };\r\n }\r\n }\r\n \r\n let options = students\r\n .sort((a, b) => a.Surname.trim() > b.Surname.trim())\r\n .map(option => handleNameCategorisation(option))\r\n .filter(option => option !== undefined && !option.IsDisabled) \r\n\r\n \r\n const [attendeeList, setAttendeeList] = useState(null)\r\n const [eventHasNoAttendees, setEventHasNoAttendees] = useState(false)\r\n \r\n useEffect(() => {\r\n if (registrations.length && students.length) {\r\n const attendeeObj = arrayToObjectWithKey(registrations, \"StudentID\")\r\n const attendees = students.filter(student => attendeeObj[student.Id] !== undefined)\r\n setEventHasNoAttendees(false)\r\n setAttendeeList(attendees)\r\n } else if (!registrations.length && students.length) {\r\n setEventHasNoAttendees(true)\r\n }\r\n }, [registrations, students])\r\n\r\n useEffect(() => {\r\n if (attendeeList !== null && attendeeList.length) {\r\n setEventHasNoAttendees(false)\r\n } else {\r\n setEventHasNoAttendees(true)\r\n }\r\n\r\n setShowAddListForm(false)\r\n }, [attendeeList])\r\n \r\n const addAttendee = (studentToAdd) => {\r\n let listObj = {}\r\n\r\n if (attendeeList) {\r\n listObj = arrayToObjectWithKey(attendeeList, \"Id\")\r\n }\r\n \r\n // Find if this student already exists\r\n if (listObj[studentToAdd.Id] !== undefined) {\r\n M.toast({html: \"Student is already attending\", displayLength: 2000});\r\n return;\r\n }\r\n\r\n if (!attendeeList) {\r\n setAttendeeList([studentToAdd])\r\n } else {\r\n setAttendeeList(prev => ([...prev, studentToAdd]))\r\n }\r\n setEventHasNoAttendees(false)\r\n }\r\n\r\n const deleteAttendee = (id) => {\r\n const studentToDelete = registrations.filter(rego => rego.StudentID === id)\r\n const filteredList = attendeeList.filter(attendee => attendee.Id !== id)\r\n\r\n if (studentToDelete.length) {\r\n const registrationId = studentToDelete[0].Id\r\n fetch(`${baseUrl}/api/eventregistrations/${registrationId}`, {\r\n method: 'DELETE',\r\n headers: { \r\n 'Content-Type': 'application/json', \r\n 'Authorization': `Bearer ${authToken}` \r\n }\r\n })\r\n .then(response => {\r\n setAttendeeList(filteredList)\r\n if (!filteredList.length) {\r\n setEventHasNoAttendees(true)\r\n }\r\n return response.json() \r\n })\r\n .catch(err => console.log(err))\r\n } else {\r\n setAttendeeList(filteredList)\r\n if (!filteredList.length) {\r\n setEventHasNoAttendees(true)\r\n }\r\n }\r\n }\r\n\r\n const onCloseEditEvent = () => {\r\n history.push('/admin-portal/events/calendar')\r\n }\r\n\r\n const updateEventObject=(e) => {\r\n const {name, value} = e.target;\r\n eventObject[name] = value;\r\n }\r\n\r\n const onViewEventDetails = () => {\r\n history.push(`/admin-portal/events/event-details/${eventId}`)\r\n }\r\n\r\n const handleDateChange = (e, date) => {\r\n const dateString = moment(date).format(\"YYYY-MM-DD\"); \r\n const currentDate = eventObject[e]\r\n let newDate = dateString + currentDate.substring(10,25)\r\n if (moment(newDate).isValid()){\r\n eventObject[e] = newDate;\r\n }\r\n else{\r\n M.toast({html: \"Please select a valid Date\", displayLength: 1000});\r\n }\r\n }\r\n\r\n const appendCurrentTimezone = () => {\r\n // Checks if it is currently daylight saving time (DST)\r\n if (moment().isDST()) {\r\n return \":00+11:00\"\r\n } else {\r\n return \":00+10:00\"\r\n }\r\n }\r\n\r\n const handleTimeChange = (e) => {\r\n const {name, value} = e.target;\r\n\r\n let currentDate; \r\n let newDate;\r\n\r\n if (name === \"startTime\"){\r\n currentDate = eventObject[\"StartDateTime\"];\r\n newDate = currentDate.substring(0,11)+ value + appendCurrentTimezone();\r\n eventObject[\"StartDateTime\"] = newDate;\r\n }\r\n if (name === \"endTime\"){\r\n currentDate = eventObject[\"EndDateTime\"];\r\n newDate = currentDate.substring(0,11)+ value + appendCurrentTimezone();\r\n eventObject[\"EndDateTime\"] = newDate;\r\n }\r\n }\r\n \r\n const handleDescriptionChange = (name, content) =>{\r\n eventObject[name] = content;\r\n }\r\n\r\n const checkAPIResponse = (data, status, sender) => {\r\n\r\n if (status >= 200 && status < 300){\r\n if (sender === 'cancelevent'){\r\n history.push('/admin-portal/events/calendar')\r\n }else{\r\n history.push('/admin-portal/events/calendar')\r\n }\r\n }else{\r\n if(data.Message){\r\n M.toast({html: data.Message, displayLength: 2000});\r\n }\r\n }\r\n }\r\n\r\n const onCancelEvent = () => {\r\n\r\n eventObject[\"IsCancelled\"] = true;\r\n let status;\r\n\r\n fetch(`${baseUrl}/api/events/${eventId}`, {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${authToken}` },\r\n body: JSON.stringify(eventObject)\r\n })\r\n .then(response => {\r\n status = response.status;\r\n checkAPIResponse(\"\", status, \"cancelevent\")\r\n return response.json()\r\n })\r\n .then(data => checkAPIResponse(data, status, \"cancelevent\"))\r\n .catch(err => console.log(\"Error: \", err)) \r\n }\r\n\r\n const validateEventDetails = () => {\r\n //validation\r\n if (eventObject[\"Subject\"].trim() === \"\"){\r\n M.toast({html: \"Please enter a subject for the event\", displayLength: 1000});\r\n return false\r\n }\r\n if (!moment(eventObject[\"StartDateTime\"]).isValid()){\r\n M.toast({html: \"Please enter a valid Date and Time\", displayLength: 1000});\r\n return false\r\n }\r\n if(moment(eventObject[\"StartDateTime\"]) > moment(eventObject[\"EndDateTime\"])){\r\n M.toast({html: \"Event cannot end before it begins :-p\", displayLength: 1000});\r\n return false\r\n }\r\n\r\n return true\r\n }\r\n\r\n const onSaveEvent = () => {\r\n let status;\r\n\r\n if (validateEventDetails()){\r\n saveAttendeeList()\r\n\r\n fetch(`${baseUrl}/api/events/${eventId}`, {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${authToken}` },\r\n body: JSON.stringify(eventObject)\r\n })\r\n .then(response => {\r\n status = response.status;\r\n checkAPIResponse(\"\", status, \"updateevent\")\r\n return response.json()\r\n })\r\n .then(data => checkAPIResponse(data, status, \"updateevent\"))\r\n .catch(err => console.log(\"Error: \", err)) \r\n }\r\n }\r\n\r\n const saveAttendeeList = async () => {\r\n const registrationsObj = arrayToObjectWithKey(registrations, \"StudentID\")\r\n\r\n const formattedList = attendeeList.filter(attendee => registrationsObj[attendee.Id] === undefined).map(attendee => {\r\n return ({\r\n EventID: +eventId,\r\n StudentID: attendee.Id\r\n })\r\n })\r\n\r\n try {\r\n fetch(`${baseUrl}/api/eventregistrations/addlist`, {\r\n method: \"POST\",\r\n headers: { \"Content-Type\": \"application/json\", \"Authorization\": `Bearer ${authToken}` },\r\n body: JSON.stringify({List: formattedList})\r\n })\r\n } catch(err) {\r\n console.log(err)\r\n M.toast(\"An error occurred\")\r\n }\r\n }\r\n\r\n const [showAddListForm, setShowAddListForm] = useState(false)\r\n\r\n return (\r\n isLoadingEvent ?\r\n \"Spinner\"\r\n :\r\n
\r\n
\r\n

Edit Event

\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n {\r\n !attendeeList && !eventHasNoAttendees ?\r\n \"Spinner\"\r\n :\r\n (\r\n eventHasNoAttendees ?\r\n
There are no attendees
\r\n :\r\n \r\n\r\n )\r\n }\r\n
\r\n
\r\n
\r\n -b.firstLetter.localeCompare(a.firstLetter))}\r\n groupBy={(option) => option.firstLetter}\r\n getOptionLabel={(option) => `${option.FirstName.trim()} ${option.Surname.trim()}`}\r\n renderInput={(params) => }\r\n onChange={(event, newValue) => {\r\n // Only triggers the add function when a student is selected from the dropdown\r\n // and not when we remove a student from this dropdown selector\r\n if (event.target.tagName === \"LI\") {\r\n addAttendee(newValue)\r\n }\r\n }}\r\n />\r\n
\r\n
\r\n {\r\n showAddListForm ?\r\n \r\n :\r\n \r\n }\r\n
\r\n
\r\n {\r\n showAddListForm &&\r\n <>\r\n \r\n
\r\n
\r\n \r\n }\r\n

Event Details

\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
\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 EventsEdit\r\n","import React, {useState} from 'react'\r\nimport { useDataFetch } from '../../hooks/useDataFetch';\r\nimport { baseUrl } from '../../functions/globalVariables';\r\nimport './EventsAttendanceConfirmation.scss'\r\nimport moment from 'moment'\r\n\r\nconst EventsAttendanceConfirmation = ({eventId, authToken}) => {\r\n\r\n const eventsRegUrl = `${baseUrl}/api/eventregistrations?$filter=EventID eq ${eventId}`;\r\n const [isLoadingEventsReg, eventsReg, eventsRegErr] = useDataFetch(eventsRegUrl, authToken);\r\n\r\n const studentUrl = `${baseUrl}/api/students`;\r\n const [isLoadingStudents, students, error] = useDataFetch(studentUrl, authToken) \r\n\r\n const markAttendance = (e, id) =>{\r\n\r\n let eventObj = eventsReg.filter(event => event.Id === id)[0];\r\n \r\n let timestamp = null;\r\n if (e.target.checked === true)\r\n timestamp = moment().format();\r\n\r\n eventObj[\"HasAttended\"] = e.target.checked;\r\n eventObj[\"AttendanceDate\"] = timestamp;\r\n\r\n fetch(`${baseUrl}/api/eventregistrations/${eventObj.Id}`, {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n body: JSON.stringify(eventObj)\r\n })\r\n .then(response => response.json())\r\n .catch(err => console.log(err))\r\n }\r\n\r\n const markAcceptance = (e, id) =>{\r\n\r\n console.log(e.target.checked)\r\n let eventObj = eventsReg.filter(event => event.Id === id)[0];\r\n \r\n let timestamp = null;\r\n \r\n\r\n eventObj[\"AttendanceConfirmed\"] = e.target.checked;\r\n\r\n fetch(`${baseUrl}/api/eventregistrations/${eventObj.Id}`, {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n body: JSON.stringify(eventObj)\r\n })\r\n .then(response => response.json())\r\n .catch(err => console.log(err))\r\n }\r\n \r\n return (\r\n
\r\n
\r\n
Attendance
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n !isLoadingEventsReg && !isLoadingStudents && eventsReg.length?\r\n eventsReg.map((event, index) => {\r\n let currentStudent = students.filter(student => student.Id === event.StudentID);\r\n let FullName = currentStudent[0].FirstName + \" \" + currentStudent[0].Surname;\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 null\r\n }\r\n \r\n \r\n
Student NameAttendance MarkedConfirm Attendance
{FullName}\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default EventsAttendanceConfirmation\r\n","import React from 'react'\r\nimport { useDataFetch } from '../../hooks/useDataFetch';\r\nimport { baseUrl } from '../../functions/globalVariables';\r\nimport { useHistory, useParams } from 'react-router-dom';\r\nimport './EventDetails.scss'\r\nimport Spinner from '../../assets/spinner.svg';\r\nimport moment from 'moment'\r\nimport EventsAttendanceConfirmation from '../EventsAttendanceConfirmation/EventsAttendanceConfirmation';\r\nimport { useThemeContext } from '../../ThemeContext';\r\n\r\nconst EventDetails = ({currentPage, setCurrentPage}) => {\r\n\r\n let history = useHistory()\r\n const { authToken, userRole } = useThemeContext()\r\n\r\n let routingPortal = \"admin-portal\";\r\n if (userRole === \"Student\")\r\n routingPortal = \"student-portal\";\r\n\r\n const { eventId } = useParams();\r\n\r\n const eventUrl = `${baseUrl}/api/events/${eventId}`;\r\n const [isLoadingEvent, event, eventErr] = useDataFetch(eventUrl, authToken)\r\n \r\n const locationUrl = `${baseUrl}/api/deliverylocations/${event.DeliveryLocationID}`;\r\n const [isLoadinglocation, location, locationErr] = useDataFetch(locationUrl, authToken)\r\n \r\n const eventtypeUrl = `${baseUrl}/api/eventtypes/${event.EventTypeID}`;\r\n const [isLoadingEventType, eventtype, eventTypeErr] = useDataFetch(eventtypeUrl, authToken)\r\n \r\n const trainerUrl = `${baseUrl}/api/trainers/${event.TrainerID}`;\r\n const [isLoadingTrainer, trainer, trainerTypeErr] = useDataFetch(trainerUrl, authToken)\r\n\r\n const supportUrl = `${baseUrl}/api/trainers/${event.SupportID}`;\r\n const [isLoadingSupport, support, supportTypeErr] = useDataFetch(supportUrl, authToken)\r\n\r\n let eventDay = \"\";\r\n let eventTime = \"\";\r\n\r\n if (!isLoadingEvent){\r\n const startDateTime = event.StartDateTime;\r\n const endDateTime = event.EndDateTime;\r\n\r\n eventDay = moment(startDateTime).format('dddd, Do MMMM YYYY'); \r\n eventTime = moment(startDateTime).format('LT') + \" - \" + moment(endDateTime).format('LT'); \r\n }\r\n \r\n return (\r\n isLoadingEvent || isLoadinglocation || isLoadingEventType || isLoadingTrainer || isLoadingSupport?\"Spinner\"/:\r\n
\r\n\r\n \r\n\r\n
\r\n
\r\n
\r\n
{event.Subject}
\r\n
\r\n
\r\n
\r\n
\r\n date_range\r\n {eventDay}\r\n
\r\n
\r\n access_time\r\n {eventTime}\r\n
\r\n
\r\n location_on\r\n {location.DeliveryLocation}\r\n
\r\n
\r\n
\r\n
\r\n

Trainer: {trainer.FirstName} {trainer.Surname}

\r\n
\r\n {\r\n event.SupportID !== null?\r\n
\r\n

Support: {support.FirstName} {support.Surname}

\r\n
\r\n :null\r\n }\r\n
\r\n
\r\n
\r\n

Type: {eventtype.Type}

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {\r\n userRole === \"Administrator\"?\r\n \r\n :null\r\n }\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default EventDetails\r\n","import React, { useEffect, useState } from 'react'\r\nimport { baseUrl } from '../../functions/globalVariables';\r\nimport { useDataFetch } from '../../hooks/useDataFetch';\r\nimport Spinner from '../../assets/spinner.svg'\r\nimport M from 'materialize-css';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { useThemeContext } from '../../ThemeContext';\r\n\r\n\r\nconst EventsCreateType = ({ setCurrentPage }) => {\r\n\r\n let history = useHistory()\r\n const { authToken } = useThemeContext()\r\n\r\n const eventTypesUrl = `${baseUrl}/api/eventtypes`;\r\n const [isLoading, eventTypes, error] = useDataFetch(eventTypesUrl, authToken)\r\n\r\n const [allTypes, setAllTypes] = useState(null)\r\n\r\n useEffect(() => {\r\n if (eventTypes.length && !allTypes) {\r\n setAllTypes(eventTypes)\r\n }\r\n }, [eventTypes])\r\n\r\n const updateEventType = (e, obj) => {\r\n \r\n obj.Type = e.target.value;\r\n \r\n fetch(`${baseUrl}/api/eventtypes/${obj.Id}`, {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n body: JSON.stringify(obj)\r\n })\r\n .then(response => response.json())\r\n .catch(err => console.log(err))\r\n }\r\n\r\n const addEventType = () => {\r\n\r\n const newEventTypeDescription = document.getElementById(\"newEventTypeDescription\").value;\r\n\r\n if(newEventTypeDescription.trim() != \"\"){\r\n \r\n fetch(`${baseUrl}/api/eventtypes`, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n body: JSON.stringify({ Type: newEventTypeDescription })\r\n })\r\n .then(response => response.json())\r\n .then(data => setAllTypes([...allTypes, { Id: data.Id, Type: newEventTypeDescription }]))\r\n .catch(err => console.log(err))\r\n\r\n \r\n\r\n\r\n document.getElementById(\"newEventTypeDescription\").value=\"\";\r\n } else {\r\n M.toast({html: \"Please provide a description\", displayLength: 2000});\r\n }\r\n }\r\n\r\n const deleteEventType = (obj) => {\r\n\r\n const filteredTypes = allTypes.filter(type => type.Type !== obj.Type)\r\n setAllTypes(filteredTypes)\r\n\r\n fetch(`${baseUrl}/api/eventtypes/${obj.Id}`, {\r\n method: 'DELETE',\r\n headers: { 'Authorization': `Bearer ${authToken}` }\r\n })\r\n .then(response => response.json())\r\n .catch(err => console.log(err))\r\n }\r\n\r\n return (\r\n
\r\n \r\n {\r\n isLoading ?\r\n \"Spinner\"\r\n :\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n { \r\n allTypes &&\r\n allTypes.map((type) => (\r\n \r\n \r\n \r\n \r\n ))\r\n }\r\n \r\n \r\n \r\n \r\n \r\n
Description
updateEventType(e, type)} /> deleteEventType(type)}>delete
add
\r\n }\r\n
\r\n )\r\n}\r\n\r\nexport default EventsCreateType\r\n","import { useState, useEffect } from 'react'\r\n\r\nexport const useFetchStudents = (url, token, shouldFetchData) => {\r\n\r\n const [isLoading, setIsLoading] = useState(false)\r\n const [error, setError] = useState(null)\r\n const [data, setData] = useState([])\r\n \r\n useEffect(() => {\r\n\r\n if (!shouldFetchData) {\r\n return;\r\n }\r\n\r\n const fetchData = async () => {\r\n \r\n setIsLoading(true)\r\n try {\r\n let response;\r\n if (token !== undefined){\r\n response = await fetch(url, {headers: {'Authorization': `Bearer ${token}`}})\r\n }else\r\n {\r\n response = await fetch(url)\r\n }\r\n \r\n const json = await response.json()\r\n json.value? setData(json.value) : setData(json)\r\n setIsLoading(false)\r\n } catch(error) {\r\n setError(error)\r\n setIsLoading(false)\r\n }\r\n }\r\n fetchData();\r\n // return () => ac.abort(); \r\n }, [url])\r\n\r\n return [ isLoading, data, error ]\r\n\r\n}","import React, { useState, useEffect } from 'react'\r\nimport { capitaliseEachWordOfQualName } from '../../functions/capitaliseEachWordOfQualName'\r\nimport M from 'materialize-css';\r\n\r\nconst EventsAssignQual = ({ qual, emailToUse, studentQuals, onStudentSelect }) => {\r\n\r\n const [associatedQuals, setAssociatedQuals] = useState([])\r\n const [showAssignQualDropdown, setShowAssignQualDropdown] = useState(false)\r\n const [isStudentAdded, setIsStudentAdded] = useState(false)\r\n\r\n useEffect(() => {\r\n if (studentQuals.length) {\r\n const studentId = qual.Student.Id\r\n const filteredArray = studentQuals.filter(qual => qual.Student.Id === studentId)\r\n setAssociatedQuals(filteredArray)\r\n }\r\n }, [studentQuals])\r\n\r\n // Initialise dropdown\r\n useEffect(() => {\r\n var elems = document.querySelectorAll('select');\r\n var instances = M.FormSelect.init(elems, {});\r\n });\r\n\r\n const handleAssignQual = () => setShowAssignQualDropdown(!showAssignQualDropdown)\r\n\r\n return (\r\n
\r\n {\r\n isStudentAdded ?\r\n \r\n :\r\n \r\n\r\n }\r\n
\r\n
{`${qual.Student.FirstName} ${qual.Student.Surname}`}
\r\n

{emailToUse ? `<${emailToUse}>` : \"No Email Provided\"}

\r\n
\r\n \r\n { \r\n
\r\n {\r\n associatedQuals.length ?\r\n (\r\n associatedQuals.length === 1 ?\r\n
\r\n
Associated Qual:
\r\n
\r\n

{associatedQuals[0].Qualification.AntaId} {capitaliseEachWordOfQualName(associatedQuals[0].Qualification)}

\r\n
\r\n :\r\n (\r\n !showAssignQualDropdown ?\r\n \r\n :\r\n (\r\n <>\r\n
Associated Qual:
\r\n
\r\n \r\n
\r\n \r\n )\r\n )\r\n )\r\n :\r\n

No associated quals

\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 EventsAssignQual\r\n","import React, { useEffect } from 'react'\r\nimport EventAttendeeList from '../EventAttendeeList/EventAttendeeList'\r\nimport Spinner from '../../assets/spinner.svg'\r\nimport EventsAssignQual from '../EventsAssignQual/EventsAssignQual'\r\nimport { capitaliseEachWordOfQualName } from '../../functions/capitaliseEachWordOfQualName'\r\nimport M from 'materialize-css';\r\nimport './EventsGroupDetails.scss'\r\n\r\n\r\nconst EventsGroupDetails = ({\r\n studentsInGroup, \r\n deleteAttendee, \r\n handleQualSelect, \r\n currentQualId, \r\n isLoadingQuals,\r\n quals, \r\n isLoadingStudentQuals, \r\n filteredStudentQuals,\r\n studentQuals,\r\n onStudentSelect,\r\n addAllStudentsFromQual\r\n}) => {\r\n\r\n useEffect(() => {\r\n var elems = document.querySelectorAll('.tooltipped');\r\n var instances = M.Tooltip.init(elems, {});\r\n })\r\n\r\n useEffect(() => {\r\n if (studentsInGroup) {\r\n console.log(studentsInGroup)\r\n }\r\n }, [studentsInGroup])\r\n\r\n console.log(filteredStudentQuals)\r\n\r\n return (\r\n
\r\n {\r\n studentsInGroup && studentsInGroup.length ?\r\n <>\r\n
\r\n \r\n

\r\n \r\n :\r\n null\r\n }\r\n {\r\n isLoadingQuals ?\r\n \"Spinner\"\r\n :\r\n <>\r\n {\r\n quals.length ?\r\n
\r\n
\r\n
Add Students
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n :\r\n

There are currently no qualifications

\r\n }\r\n \r\n }\r\n\r\n {\r\n currentQualId &&\r\n (\r\n isLoadingStudentQuals || !filteredStudentQuals ?\r\n \"Spinner\"\r\n :\r\n (\r\n filteredStudentQuals && !filteredStudentQuals.length ?\r\n

No students found

\r\n :\r\n
\r\n {\r\n filteredStudentQuals\r\n .sort((a, b) => {\r\n const firstSurname = a.Student ? a.Student.Surname.trim() : a.Surname.trim()\r\n const secondSurname = b.Student ? b.Student.Surname.trim() : b.Surname.trim()\r\n\r\n return firstSurname > secondSurname\r\n })\r\n .map(qual => {\r\n const email = !qual.Student.Email || !qual.Student.Email.trim().length ? null : qual.Student.Email\r\n const altEmail = !qual.Student.AltEmail || !qual.Student.AltEmail.trim().length ? null : qual.Student.AltEmail\r\n\r\n let emailToUse = \"\"\r\n\r\n if (!email && !altEmail) {\r\n emailToUse = null\r\n } else if (email) {\r\n emailToUse = email.trim()\r\n } else {\r\n emailToUse = altEmail.trim()\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\nexport default EventsGroupDetails\r\n","import React, { useState, useEffect } from 'react'\r\nimport { baseUrl } from '../../functions/globalVariables';\r\nimport M from 'materialize-css';\r\nimport Spinner from '../../assets/spinner.svg'\r\nimport { useDataFetch } from '../../hooks/useDataFetch';\r\nimport { useFetchStudents } from '../../hooks/useFetchStudents';\r\nimport EventsGroupDetails from '../EventsGroupDetails/EventsGroupDetails';\r\n\r\nimport './EventsGroups.scss'\r\nimport { arrayToObjectWithKey } from '../../functions/arrayToObject';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { useThemeContext } from '../../ThemeContext';\r\n\r\nconst EventsGroups = ({setCurrentPage}) => {\r\n\r\n let history = useHistory()\r\n const { authToken } = useThemeContext()\r\n\r\n const [shouldFetchData, setShouldFetchData] = useState(false)\r\n\r\n const [currentQualId, setCurrentQualId] = useState(null)\r\n const [currentGroupIndex, setCurrentGroupIndex] = useState(null)\r\n\r\n // Keeps track of whether is currently being created or edited\r\n const [currentGroupOperation, setCurrentGroupOperation] = useState(null)\r\n\r\n const [currentGroup, setCurrentGroup] = useState({\r\n Id: null,\r\n GroupName: \"\",\r\n QualificationId: null,\r\n Students: []\r\n })\r\n\r\n const resetCurrentGroupObject = () => setCurrentGroup({\r\n id: null,\r\n GroupName: \"\",\r\n QualificationId: null,\r\n Students: []\r\n })\r\n\r\n const fetchUrl = `${baseUrl}/api/studentqualifications?$expand=*&$filter=QualId eq ${currentQualId} and Active eq true and Disabled eq false`\r\n const [isLoadingStudentQuals, studentQuals, errorStudentQuals] = useFetchStudents(fetchUrl, authToken, shouldFetchData)\r\n\r\n const qualificationsUrl = `${baseUrl}/api/qualifications?$filter=Superseded eq false`\r\n const [isLoadingQuals, quals, errorQuals] = useDataFetch(qualificationsUrl, authToken)\r\n\r\n const studentGroupsUrl = `${baseUrl}/api/studentgroups?$expand=Students`\r\n const [isLoadingGroups, studentGroups, errorGroups] = useDataFetch(studentGroupsUrl, authToken)\r\n\r\n const [showCreateGroupSection, setShowCreateGroupSection] = useState(false)\r\n const [showEditGroupSection, setShowEditGroupSection] = useState(false)\r\n \r\n const [filteredStudentQuals, setFilteredStudentQuals] = useState(null)\r\n\r\n useEffect(() => {\r\n if (studentQuals.length && currentQualId) {\r\n const filteredArray = studentQuals.filter(qual => qual.QualId === +currentQualId)\r\n setFilteredStudentQuals(filteredArray)\r\n setShouldFetchData(false)\r\n } else if (!studentQuals.length) {\r\n setFilteredStudentQuals([])\r\n }\r\n }, [studentQuals, currentQualId])\r\n\r\n const handleQualSelect = (e) => {\r\n setCurrentQualId(e.target.value)\r\n setShouldFetchData(true)\r\n }\r\n\r\n const handleGroupSelect = (e) => {\r\n const {value} = e.target\r\n setCurrentGroupIndex(value)\r\n setShowCreateGroupSection(false)\r\n setShowEditGroupSection(true)\r\n setCurrentGroup(prev => ({\r\n ...prev,\r\n Id: studentGroups[value].Id,\r\n GroupName: studentGroups[value].GroupName, \r\n QualificationId: studentGroups[value].QualificationId,\r\n Students: studentGroups[value].Students\r\n }))\r\n }\r\n\r\n const handleShowCreateGroupSection = () => {\r\n setShowCreateGroupSection(!showCreateGroupSection)\r\n setShowEditGroupSection(false)\r\n resetCurrentGroupObject()\r\n }\r\n\r\n const onStudentSelect = (e, studentToAdd, setIsStudentAdded, operation) => {\r\n let listObj = {}\r\n\r\n if (!currentGroup.Students) {\r\n listObj = arrayToObjectWithKey(currentGroup.Students, \"Id\")\r\n }\r\n\r\n if (listObj[studentToAdd.Id] !== undefined) {\r\n M.toast({html: \"Student is already attending\", displayLength: 2000});\r\n return;\r\n }\r\n\r\n if (operation === 'add') {\r\n if (!currentGroup.Students) {\r\n setCurrentGroup(prev => ({...prev, Students: [studentToAdd]}))\r\n } else {\r\n setCurrentGroup(prev => ({...prev, Students: [...prev.Students, studentToAdd]}))\r\n }\r\n setIsStudentAdded(true)\r\n } else {\r\n deleteAttendee(studentToAdd.Id)\r\n setIsStudentAdded(false)\r\n }\r\n }\r\n\r\n const getStudentIdObject = () => {\r\n if (currentGroup.Students.length) {\r\n console.log(currentGroup.Students)\r\n return arrayToObjectWithKey(currentGroup.Students, \"Id\")\r\n }\r\n \r\n return {}\r\n }\r\n\r\n // By default, currentGroup.Students is passed so that I don't have to pass it \r\n // down to the component just for adding as a parameter\r\n const addAllStudentsFromQual = (studentsToAdd) => {\r\n if (!studentsToAdd.length) {\r\n return;\r\n }\r\n // Create object of all student ids to mke filtering easier\r\n const listObj = getStudentIdObject()\r\n const uniqueStudents = studentsToAdd\r\n .filter(student => listObj[student.Student.Id] === undefined)\r\n .map(currStudent => currStudent.Student)\r\n\r\n console.log(uniqueStudents)\r\n\r\n // If all students being added exist already, don't add them again\r\n if (!uniqueStudents.length) {\r\n M.toast({html: \"Students are already attending\", displayLength: 2000});\r\n return;\r\n }\r\n\r\n if (currentGroup.Students.length) {\r\n setCurrentGroup(prev => ({...prev, Students: [...prev.Students, ...uniqueStudents]}))\r\n } else {\r\n setCurrentGroup(prev => ({...prev, Students: uniqueStudents}))\r\n }\r\n\r\n\r\n } \r\n\r\n const onGroupNameChange = (e) => {\r\n const { value } = e.target\r\n setCurrentGroup(prev => ({...prev, GroupName: value}))\r\n }\r\n\r\n const handleSaveGroup = (fetchMethod, groupId) => {\r\n\r\n if (!currentGroup.GroupName.length) {\r\n M.toast({html: \"Please add a group name\", displayLength: 1000})\r\n return\r\n }\r\n\r\n const url = fetchMethod === 'PUT' ? `${baseUrl}/api/studentgroups/${groupId}` : `${baseUrl}/api/studentgroups/`\r\n\r\n // When posting, we don't want an id in the object\r\n // This code removes grabs all the attributes of currentGroup, except for id\r\n // Now, restOfObject can be used as a normal variable\r\n const { id, ...restOfObject } = currentGroup\r\n\r\n console.log(currentGroup, restOfObject)\r\n\r\n fetch(url, {\r\n method: fetchMethod,\r\n headers: {'Content-Type': 'application/json', 'Authorization': `Bearer ${authToken}`},\r\n body: fetchMethod === 'PUT' ? JSON.stringify(currentGroup) : JSON.stringify(restOfObject)\r\n })\r\n .then(response => {\r\n response.json()\r\n window.location.reload()\r\n })\r\n .catch(err => console.log(err))\r\n }\r\n\r\n const handleDeleteGroup = (groupId) => {\r\n fetch(`${baseUrl}/api/studentgroups/${groupId}`, {\r\n method: 'DELETE',\r\n headers: {'Content-Type': 'application/json', 'Authorization': `Bearer ${authToken}`},\r\n })\r\n .then(response => {\r\n response.json()\r\n window.location.reload()\r\n })\r\n .catch(err => console.log(err))\r\n }\r\n\r\n const deleteAttendee = (id) => {\r\n\r\n if (!currentGroup.Students) {\r\n return\r\n }\r\n\r\n const filteredList = currentGroup.Students\r\n .filter(attendee => attendee.Student ? attendee.Student.Id !== id : attendee.Id !== id)\r\n .sort((a, b) => {\r\n const firstSurname = a.Student ? a.Student.Surname : a.Surname\r\n const secondSurname = b.Student ? b.Student.Surname : b.Surname\r\n \r\n return firstSurname > secondSurname\r\n })\r\n\r\n if (filteredList.length) {\r\n setCurrentGroup(prev => ({...prev, Students: filteredList}))\r\n } else {\r\n setCurrentGroup(prev => ({...prev, Students: []}))\r\n }\r\n }\r\n\r\n // Initialise dropdown and modal\r\n useEffect(() => {\r\n var elems = document.querySelectorAll('select');\r\n var instances = M.FormSelect.init(elems, {});\r\n\r\n var elemsModal = document.querySelectorAll('.modal');\r\n var instancesModal = M.Modal.init(elemsModal, {});\r\n });\r\n\r\n return (\r\n\r\n
\r\n
\r\n

Manage Groups

\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n {\r\n isLoadingGroups ?\r\n \"Spinner\"\r\n :\r\n
\r\n {\r\n studentGroups ?\r\n
\r\n \r\n
\r\n :\r\n

Could find any student groups

\r\n }\r\n
\r\n {\r\n showCreateGroupSection ?\r\n \r\n :\r\n \r\n\r\n }\r\n
\r\n
\r\n }\r\n\r\n {\r\n showEditGroupSection &&\r\n <>\r\n
\r\n

Edit Group

\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 showCreateGroupSection &&\r\n <>\r\n
\r\n

Create a Group

\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
Are you sure you want to delete this group?
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default EventsGroups\r\n","import React, { useState, useEffect } from 'react'\r\nimport { baseUrl } from '../../functions/globalVariables'\r\nimport { useDataFetch } from '../../hooks/useDataFetch'\r\nimport { CSVLink } from \"react-csv\";\r\nimport M from 'materialize-css'\r\nimport { arrayToObjectWithKey } from '../../functions/arrayToObject';\r\nimport dayjs from 'dayjs';\r\nimport TextField from '@mui/material/TextField';\r\nimport Autocomplete from '@mui/material/Autocomplete';\r\nimport Spinner from '../../assets/spinner.svg';\r\nimport { withStyles } from \"@mui/styles\";\r\nimport './EventsReport.scss'\r\nimport { useHistory } from 'react-router-dom';\r\nimport { useThemeContext } from '../../ThemeContext';\r\n\r\nconst EventsReport = () => {\r\n\r\n let history = useHistory()\r\n const { authToken } = useThemeContext()\r\n\r\n const studentsUrl = `${baseUrl}/api/students?$select=Id,FirstName,Surname,IsDisabled&$orderBy=Surname`;\r\n const [isLoadingStudents, students, errStudents] = useDataFetch(studentsUrl, authToken)\r\n\r\n const trainersUrl = `${baseUrl}/api/trainers`;\r\n const [isLoadingTrainers, trainers, errTrainers] = useDataFetch(trainersUrl, authToken)\r\n\r\n const eventsUrl = `${baseUrl}/api/events?$filter=IsCancelled eq false`;\r\n const [isLoadingEvents, events, errEvents] = useDataFetch(eventsUrl, authToken)\r\n\r\n const eventTypesUrl = `${baseUrl}/api/eventtypes`;\r\n const [isLoadingEventTypes, eventTypes, errEventTypes] = useDataFetch(eventTypesUrl, authToken)\r\n\r\n const registrationsUrl = `${baseUrl}/api/eventregistrations`;\r\n const [isLoadingRegistrations, registrations, errRegistrations] = useDataFetch(registrationsUrl, authToken)\r\n \r\n // These will hold object form of students and events arrays to make filtering faster\r\n const [studentsObj, setStudentsObj] = useState({})\r\n const [eventsObj, setEventsObj] = useState({})\r\n const [eventTypesObj, setEventTypesObj] = useState({})\r\n const [trainersObj, setTrainersObj] = useState({})\r\n\r\n const [selectedEventID, setSelectedEventID] = useState(null)\r\n const [selectedStudents, setSelectedStudents] = useState({})\r\n\r\n const [filteredStudents, setFilteredStudents] = useState([])\r\n const [filteredRegistrations, setFilteredRegistrations] = useState([])\r\n const [filteredRegistrationsForSpecificEvent, setFilteredRegistrationsForSpecificEvent] = useState([])\r\n\r\n const [filterByEvent, setFilterByEvent] = useState(true)\r\n const [filterByStudent, setFilterByStudent] = useState(false)\r\n\r\n const [reportData, setReportData] = useState([])\r\n const [showReport, setShowReport] = useState(false)\r\n const [studentHasRegistrations, setStudentHasRegistrations] = useState(true)\r\n\r\n const [eventFilterValue, setEventFilterValue] = useState(\"Choose\")\r\n const [isEventSelected, setIsEventSelected] = useState(true)\r\n const [doesEventHaveRegistrations, setDoesEventHaveRegistrations] = useState(true)\r\n\r\n // Each item of arrow array relates to the three sortable columns (i.e. studentName, eventName, startDate)\r\n const [isArrowVisible, setIsArrowVisible] = useState([false, false, false])\r\n\r\n const [studentNameAscending, setStudentNameAscending] = useState(true)\r\n const [eventNameAscending, setEventNameAscending] = useState(true)\r\n const [startDateAscending, setStartDateAscending] = useState(true)\r\n\r\n useEffect(() => {\r\n var elems = document.querySelectorAll('select');\r\n var instances = M.FormSelect.init(elems, {});\r\n\r\n var tooltippedElems = document.querySelectorAll('.tooltipped');\r\n var tooltippedInstances = M.Tooltip.init(tooltippedElems, {});\r\n })\r\n\r\n useEffect(() => {\r\n if (students.length) {\r\n setStudentsObj(arrayToObjectWithKey(students, \"Id\"))\r\n setFilteredStudents(students)\r\n }\r\n }, [students])\r\n\r\n useEffect(() => {\r\n if (events.length) {\r\n setEventsObj(arrayToObjectWithKey(events, \"Id\"))\r\n }\r\n }, [events])\r\n\r\n useEffect(() => {\r\n if (eventTypes.length) {\r\n setEventTypesObj(arrayToObjectWithKey(eventTypes, \"Id\"))\r\n }\r\n }, [eventTypes])\r\n\r\n useEffect(() => {\r\n if (trainers.length) {\r\n setTrainersObj(arrayToObjectWithKey(trainers, \"Id\"))\r\n }\r\n }, [trainers])\r\n\r\n useEffect(() => {\r\n if (students.length) {\r\n if (selectedEventID) {\r\n const selectedEventRegistrations = registrations.filter(reg => reg.EventID.toString() === selectedEventID)\r\n setFilteredRegistrations(selectedEventRegistrations)\r\n\r\n let currentAttendees = {}\r\n const studentsToFilter = selectedEventRegistrations.map(reg => {\r\n currentAttendees = { ...currentAttendees, [reg.StudentID]: studentsObj[reg.StudentID] }\r\n return studentsObj[reg.StudentID]\r\n })\r\n\r\n setSelectedStudents(currentAttendees)\r\n setFilteredStudents(studentsToFilter)\r\n }\r\n }\r\n }, [selectedEventID])\r\n\r\n // Column headings for the report\r\n const headers = [\r\n { label: \"Student Name\", key: \"studentName\" },\r\n { label: \"Event Name\", key: \"eventName\" },\r\n { label: \"Event Type\", key: \"eventType\" },\r\n { label: \"Start Date Time\", key: \"startDateTime\" },\r\n { label: \"End Date Time\", key: \"endDateTime\" },\r\n { label: \"Att. Marked\", key: \"attendanceMarked\" },\r\n { label: \"Att. Confirmed\", key: \"attendanceConfirmed\" },\r\n { label: \"Trainer\", key: \"trainer\" },\r\n { label: \"Support\", key: \"support\" }\r\n ];\r\n \r\n // Config for exporting report\r\n const csvReport = {\r\n data: reportData,\r\n headers: headers,\r\n filename: selectedEventID ? `${eventsObj[selectedEventID].Subject}.csv` : \"events-report.csv\"\r\n }\r\n\r\n const handleEventSelect = (e) => {\r\n const eventId = e.target.value\r\n setShowReport(false)\r\n setSelectedEventID(eventId)\r\n setEventFilterValue(eventId)\r\n setIsEventSelected(true)\r\n setDoesEventHaveRegistrations(true)\r\n }\r\n\r\n \r\n const handleFilterToggle = () => {\r\n setFilterByStudent(!filterByStudent)\r\n setFilterByEvent(!filterByEvent)\r\n reset()\r\n }\r\n\r\n const reset = () => {\r\n setShowReport(false)\r\n setFilteredRegistrations([])\r\n setFilteredStudents(students)\r\n setSelectedEventID(null)\r\n setEventFilterValue(\"Choose\")\r\n setDoesEventHaveRegistrations(true)\r\n setStudentHasRegistrations(true)\r\n }\r\n \r\n const handleStudentFilterSelect = (event, values) => {\r\n if (!registrations.length || !values.length) {\r\n setFilteredRegistrations([])\r\n setShowReport(false)\r\n return\r\n }\r\n \r\n const studentsToFilter = arrayToObjectWithKey(values, \"Id\")\r\n const studentRegistrations = registrations.filter(reg => studentsToFilter[reg.StudentID])\r\n\r\n setStudentHasRegistrations(studentRegistrations.length > 0)\r\n setFilteredRegistrations(studentRegistrations)\r\n setShowReport(false)\r\n }\r\n \r\n const handleStudentSelectForSpecificEvent = (event, values) => {\r\n if (!filteredRegistrations.length || !values.length) {\r\n setFilteredRegistrationsForSpecificEvent([])\r\n setShowReport(false)\r\n return\r\n }\r\n \r\n const studentsToAdd = arrayToObjectWithKey(values, \"Id\")\r\n const studentRegistrations = filteredRegistrations.filter(reg => studentsToAdd[reg.StudentID])\r\n setFilteredRegistrationsForSpecificEvent(studentRegistrations)\r\n setShowReport(false)\r\n }\r\n\r\n const getRequiredRegistrations = () => {\r\n if (filterByEvent && filteredRegistrationsForSpecificEvent.length) {\r\n return filteredRegistrationsForSpecificEvent\r\n } else {\r\n return filteredRegistrations\r\n }\r\n }\r\n\r\n const isDataInvalid = () => {\r\n if (filterByEvent && !selectedEventID) {\r\n setIsEventSelected(false)\r\n return true\r\n } else if (filterByStudent && !filteredRegistrations.length) {\r\n setStudentHasRegistrations(false)\r\n return true\r\n }else if (!filteredRegistrations.length) {\r\n setDoesEventHaveRegistrations(false)\r\n return true\r\n }\r\n\r\n return false\r\n }\r\n\r\n const generateReportData = () => {\r\n if(isDataInvalid()) return\r\n\r\n setIsArrowVisible([false, false, false])\r\n\r\n let listOfRegistrations = getRequiredRegistrations()\r\n\r\n const tableRows = listOfRegistrations\r\n .filter(reg => eventsObj[reg.EventID] !== undefined)\r\n .map(reg => {\r\n\r\n const student = studentsObj[reg.StudentID]\r\n const trainerID = eventsObj[reg.EventID].TrainerID\r\n const trainer = trainerID ? trainersObj[trainerID] : null\r\n const supportID = eventsObj[reg.EventID].SupportID\r\n const support = supportID ? trainersObj[supportID] : null\r\n const event = eventsObj[reg.EventID]\r\n const eventTypeID = eventTypesObj[event.EventTypeID]\r\n const eventType = eventTypeID ? eventTypesObj[event.EventTypeID] : null\r\n\r\n const rowOfTable = {\r\n eventId: reg.EventID,\r\n studentName: `${student.FirstName} ${student.Surname}`,\r\n eventName: event.Subject,\r\n eventType: eventType ? eventType.Type : \"None\",\r\n startDateTime: dayjs(event.StartDateTime).format('MMM D, YYYY h:mm A'),\r\n endDateTime: dayjs(event.EndDateTime).format('MMM D, YYYY h:mm A'),\r\n attendanceMarked: reg.HasAttended ? \"Yes\" : \"No\",\r\n attendanceConfirmed: reg.AttendanceConfirmed ? \"Yes\" : \"No\",\r\n trainer: trainer ? `${trainer.FirstName} ${trainer.Surname}` : \"None\",\r\n support: support ? `${support.FirstName} ${support.Surname}` : \"None\"\r\n }\r\n\r\n return rowOfTable\r\n })\r\n .sort((a, b) => {\r\n const firstSurname = a.studentName.split(\" \").slice(-1).pop();\r\n const secondSurname = b.studentName.split(\" \").slice(-1).pop();\r\n\r\n return firstSurname < secondSurname\r\n })\r\n\r\n setReportData(tableRows)\r\n setShowReport(true)\r\n }\r\n\r\n const filterByColumn = (columnToFilterBy) => {\r\n if (reportData.length <= 1) return\r\n\r\n const copyOfReportData = reportData.slice();\r\n\r\n switch(columnToFilterBy) {\r\n case \"studentName\":\r\n copyOfReportData.sort((a, b) => {\r\n const firstSurname = a.studentName.split(\" \").slice(-1).pop()\r\n const secondSurname = b.studentName.split(\" \").slice(-1).pop()\r\n\r\n return studentNameAscending ? firstSurname.localeCompare(secondSurname) : secondSurname.localeCompare(firstSurname)\r\n })\r\n setStudentNameAscending(!studentNameAscending)\r\n setIsArrowVisible([true, false, false])\r\n break\r\n case \"eventName\":\r\n copyOfReportData.sort((a, b) => {\r\n const firstEvent = a.eventName\r\n const secondEvent = b.eventName\r\n\r\n return eventNameAscending ? firstEvent.localeCompare(secondEvent) : secondEvent.localeCompare(firstEvent)\r\n })\r\n setEventNameAscending(!eventNameAscending)\r\n setIsArrowVisible([false, true, false])\r\n break\r\n case \"startDateTime\":\r\n if (filterByEvent) break\r\n\r\n copyOfReportData.sort((a, b) => {\r\n const firstDate = new Date(a.startDateTime)\r\n const secondDate = new Date(b.startDateTime)\r\n\r\n const ascendingOrder = firstDate.getTime() - secondDate.getTime()\r\n const descendingOrder = secondDate.getTime() - firstDate.getTime()\r\n\r\n return startDateAscending ? ascendingOrder : descendingOrder\r\n })\r\n setStartDateAscending(!startDateAscending)\r\n setIsArrowVisible([false, false, true])\r\n break\r\n default:\r\n return\r\n }\r\n\r\n setReportData(copyOfReportData)\r\n }\r\n\r\n const goToEventDetails = (eventId) => {\r\n const eventDetailsUrl = `/#/admin-portal/events/event-details/${eventId}`\r\n window.open(eventDetailsUrl, \"_blank\") \r\n }\r\n\r\n // Apply mbh colours to student selector\r\n const CssTextField = withStyles({\r\n root: {\r\n '& label.Mui-focused': {\r\n color: '#00703c',\r\n },\r\n '& .MuiOutlinedInput-root': {\r\n '& fieldset': {\r\n borderColor: '#8C8C8C',\r\n },\r\n '&:hover fieldset': {\r\n borderColor: 'black',\r\n },\r\n '&.Mui-focused fieldset': {\r\n borderColor: '#00703c',\r\n },\r\n },\r\n },\r\n })(TextField);\r\n \r\n return (\r\n
\r\n {\r\n isLoadingEvents || isLoadingRegistrations || isLoadingStudents || isLoadingTrainers ?\r\n \"Spinner\"\r\n :\r\n <>\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n {\r\n filterByEvent &&\r\n <>\r\n
\r\n \r\n \r\n
\r\n
\r\n !student.IsDisabled)}\r\n getOptionLabel={(option) => `${option.FirstName.trim()} ${option.Surname.trim()}`}\r\n filterSelectedOptions\r\n onChange={handleStudentSelectForSpecificEvent}\r\n renderOption={(props, option) => {\r\n return (\r\n
  • \r\n {option.FirstName.trim() + \" \" + option.Surname.trim()}\r\n
  • \r\n )\r\n }}\r\n renderInput={(params) => (\r\n \r\n )}\r\n />\r\n
    \r\n \r\n }\r\n {\r\n filterByStudent &&\r\n
    \r\n !student.IsDisabled)}\r\n getOptionLabel={(option) => `${option.FirstName.trim()} ${option.Surname.trim()}`}\r\n filterSelectedOptions\r\n onChange={handleStudentFilterSelect}\r\n renderOption={(props, option) => {\r\n return (\r\n
  • \r\n {option.FirstName.trim() + \" \" + option.Surname.trim()}\r\n
  • \r\n )\r\n }}\r\n renderInput={(params) => (\r\n \r\n )}\r\n />\r\n
    \r\n }\r\n
    \r\n \r\n {\r\n showReport &&\r\n \r\n }\r\n
    \r\n
    \r\n {\r\n !isEventSelected &&\r\n

    Please select an event

    \r\n }\r\n {\r\n !studentHasRegistrations &&\r\n

    No registrations exist for the student(s) selected

    \r\n }\r\n {\r\n !doesEventHaveRegistrations &&\r\n

    No registrations exist for this event

    \r\n }\r\n {\r\n showReport &&\r\n
    \r\n \r\n \r\n \r\n \r\n {\r\n filterByStudent ?\r\n \r\n :\r\n null\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 reportData.map(row => (\r\n \r\n \r\n {\r\n filterByStudent &&\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
    filterByColumn(\"studentName\")}>\r\n
    \r\n Student Name\r\n {\r\n isArrowVisible[0] &&\r\n \r\n {\r\n studentNameAscending ? \"arrow_drop_down\" : \"arrow_drop_up\"\r\n }\r\n \r\n }\r\n
    \r\n
    filterByColumn(\"eventName\")}>\r\n
    \r\n Event Name\r\n {\r\n isArrowVisible[1] &&\r\n \r\n {\r\n eventNameAscending ? \"arrow_drop_down\" : \"arrow_drop_up\"\r\n }\r\n \r\n }\r\n
    \r\n
    Event Type filterByColumn(\"startDateTime\")}>\r\n
    \r\n Start Date Time\r\n {\r\n isArrowVisible[2] &&\r\n \r\n {\r\n startDateAscending ? \"arrow_drop_down\" : \"arrow_drop_up\"\r\n }\r\n \r\n }\r\n
    \r\n
    End Date TimeAtt. MarkedAtt. ConfirmedTrainerSupport
    {row.studentName} goToEventDetails(row.eventId)}>{row.eventName}{row.eventType}{row.startDateTime}{row.endDateTime}\r\n {row.attendanceMarked === \"Yes\" ? \"done\" : \"close\"}\r\n \r\n {row.attendanceConfirmed === \"Yes\" ? \"done\" : \"close\"}\r\n {row.trainer}{row.support}
    \r\n
    \r\n }\r\n \r\n }\r\n
    \r\n )\r\n}\r\n\r\nexport default EventsReport\r\n","import React, { useState, useEffect } from 'react'\r\nimport { baseUrl } from '../../functions/globalVariables'\r\nimport { useDataFetch } from '../../hooks/useDataFetch'\r\nimport { CSVLink } from \"react-csv\";\r\nimport M from 'materialize-css'\r\nimport { arrayToObjectWithKey } from '../../functions/arrayToObject';\r\nimport dayjs from 'dayjs';\r\nimport TextField from '@mui/material/TextField';\r\nimport Autocomplete from '@mui/material/Autocomplete';\r\nimport Spinner from '../../assets/spinner.svg';\r\nimport { withStyles } from \"@mui/styles\";\r\nimport './TrainingPlanAcceptanceReport.scss'\r\nimport { useHistory } from 'react-router-dom';\r\nimport { useThemeContext } from '../../ThemeContext';\r\nimport { capitaliseEachWordOfQualName } from '../../functions/capitaliseEachWordOfQualName';\r\n\r\nconst TrainingPlanAcceptanceReport = () => {\r\n\r\n let history = useHistory()\r\n const { authToken, userEmail } = useThemeContext()\r\n\r\n const studentQualsUrl = `${baseUrl}/api/studentqualifications?$expand=Student, Qualification&$filter=Active eq true and Disabled eq false`\r\n const [isLoadingStudentQuals, studentQuals, errorStudentQuals] = useDataFetch(studentQualsUrl, authToken)\r\n \r\n const studentsUrl = `${baseUrl}/api/students?$filter=IsDisabled eq false`\r\n const [isLoadingStudents, students, errorStudents] = useDataFetch(studentsUrl, authToken)\r\n \r\n const qualsUrl = `${baseUrl}/api/qualifications?$filter=Superseded eq false`\r\n const [isLoadingQuals, quals, errorQuals] = useDataFetch(qualsUrl, authToken)\r\n \r\n const trainersUrl = `${baseUrl}/api/trainers`\r\n const [isLoadingTrainers, trainers, errorTrainers] = useDataFetch(trainersUrl, authToken)\r\n \r\n // These will hold object form of students and events arrays to make filtering faster\r\n const [studentQualsObj, setStudentQualsObj] = useState({})\r\n const [trainersObj, setTrainersObj] = useState({})\r\n\r\n const [reportData, setReportData] = useState([])\r\n const [showReport, setShowReport] = useState(false)\r\n\r\n const [filterByQual, setFilterByQual] = useState(true)\r\n const [filterByStudent, setFilterByStudent] = useState(false)\r\n\r\n const [qualFilterValue, setQualFilterValue] = useState(\"Any\")\r\n\r\n // This will hold the filtered data when filtering by qual or student\r\n const [filteredStudentQuals, setFilteredStudentQuals] = useState([])\r\n\r\n // Each item of arrow array relates to the three sortable columns (i.e. studentName, eventName, startDate)\r\n const [isArrowVisible, setIsArrowVisible] = useState([false, false, false])\r\n\r\n const [studentNameAscending, setStudentNameAscending] = useState(true)\r\n\r\n useEffect(() => {\r\n var elems = document.querySelectorAll('select');\r\n var instances = M.FormSelect.init(elems, {});\r\n\r\n var tooltippedElems = document.querySelectorAll('.tooltipped');\r\n var tooltippedInstances = M.Tooltip.init(tooltippedElems, {});\r\n })\r\n\r\n useEffect(() => {\r\n if (studentQuals.length) {\r\n setFilteredStudentQuals(studentQuals)\r\n setStudentQualsObj(arrayToObjectWithKey(studentQuals, \"Id\"))\r\n }\r\n }, [studentQuals])\r\n\r\n useEffect(() => {\r\n if (trainers.length) {\r\n setTrainersObj(arrayToObjectWithKey(trainers, \"Email\"))\r\n }\r\n }, [trainers])\r\n\r\n // Column headings for the report\r\n const headers = [\r\n { label: \"Student Name\", key: \"studentName\" },\r\n { label: \"Qualification\", key: \"qualification\" },\r\n { label: \"Plan Accepted By\", key: \"planAcceptedBy\" },\r\n { label: \"Plan Accepted At\", key: \"planAcceptedAt\" },\r\n ];\r\n \r\n // Config for exporting report\r\n const csvReport = {\r\n data: reportData,\r\n headers: headers,\r\n filename: \"training-plan-acceptance-report.csv\"\r\n }\r\n\r\n const handleQualSelect = (e) => {\r\n const qualId = e.target.value\r\n if (qualId === \"Any\") {\r\n reset()\r\n return\r\n }\r\n setQualFilterValue(qualId)\r\n // When the qual filter is changed, the acceptance filter resets so that, when changed, it applies to results related to the current qual selection\r\n const filteredQuals = studentQuals.filter(qual => qual.QualId === +qualId)\r\n setFilteredStudentQuals(filteredQuals)\r\n setShowReport(false)\r\n }\r\n\r\n const handleStudentSelect = (event, values) => {\r\n if (!values.length) {\r\n reset()\r\n return\r\n }\r\n const selectedStudentsObj = arrayToObjectWithKey(values, \"Id\")\r\n const filteredStudents = studentQuals.filter(qual => selectedStudentsObj[qual.StudentId])\r\n setFilteredStudentQuals(filteredStudents)\r\n setShowReport(false)\r\n }\r\n \r\n const handleFilterToggle = () => {\r\n setFilterByQual(!filterByQual)\r\n setFilterByStudent(!filterByStudent)\r\n reset()\r\n }\r\n\r\n const handleAcceptPlan = (e, qualId) => {\r\n const qual = studentQualsObj[qualId]\r\n console.log(e.target.checked)\r\n if (e.target.checked) {\r\n qual.PlanAcceptedBy = userEmail\r\n qual.PlanAcceptedAt = dayjs().format()\r\n } else {\r\n qual.PlanAcceptedBy = null\r\n qual.PlanAcceptedAt = null\r\n }\r\n\r\n fetch(`${baseUrl}/api/studentqualifications/${qualId}`, {\r\n method: \"PUT\",\r\n headers: { \r\n 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${authToken}`\r\n },\r\n body: JSON.stringify(qual)\r\n })\r\n }\r\n\r\n const reset = () => {\r\n setFilteredStudentQuals(studentQuals)\r\n setQualFilterValue(\"Any\")\r\n setShowReport(false)\r\n }\r\n\r\n const generateReportData = () => {\r\n const tableRows = filteredStudentQuals\r\n .map(qual => {\r\n\r\n const student = qual.Student\r\n const studentQual = qual.Qualification\r\n\r\n let personWhoAccepted = \"\"\r\n\r\n if (qual.PlanAcceptedBy) {\r\n if (trainersObj[qual.PlanAcceptedBy]) {\r\n personWhoAccepted = `${trainersObj[qual.PlanAcceptedBy].FirstName} ${trainersObj[qual.PlanAcceptedBy].Surname}`\r\n } else if (qual.PlanAcceptedBy === qual.Student.Email || qual.PlanAcceptedBy === qual.Student.AltEmail) {\r\n personWhoAccepted = `${student.FirstName} ${student.Surname}`\r\n } else {\r\n personWhoAccepted = qual.PlanAcceptedBy\r\n }\r\n }\r\n\r\n const rowOfTable = {\r\n qualId: qual.Id,\r\n studentName: `${student.FirstName} ${student.Surname}`,\r\n qualification: `${studentQual.AntaId} ${capitaliseEachWordOfQualName(studentQual)}`,\r\n planAcceptedBy: personWhoAccepted,\r\n planAcceptedAt: qual.PlanAcceptedAt ? dayjs(qual.PlanAcceptedAt).format('ddd, D MMM YYYY ') : \"\",\r\n }\r\n\r\n return rowOfTable\r\n })\r\n .sort((a, b) => {\r\n const firstSurname = a.studentName.toLowerCase().split(\" \").slice(-1).pop();\r\n const secondSurname = b.studentName.toLowerCase().split(\" \").slice(-1).pop();\r\n\r\n return firstSurname.localeCompare(secondSurname)\r\n })\r\n\r\n setReportData(tableRows)\r\n setShowReport(true)\r\n }\r\n\r\n const goToStudentDetails = (studentId) => {\r\n window.sessionStorage.setItem('currentStudent', studentId)\r\n const studentDetailsUrl = `/#/admin-portal/administer-student`\r\n window.open(studentDetailsUrl, \"_blank\") \r\n }\r\n\r\n // Apply mbh colours to student selector\r\n const CssTextField = withStyles({\r\n root: {\r\n '& label.Mui-focused': {\r\n color: '#00703c',\r\n },\r\n '& .MuiOutlinedInput-root': {\r\n '& fieldset': {\r\n borderColor: '#8C8C8C',\r\n },\r\n '&:hover fieldset': {\r\n borderColor: 'black',\r\n },\r\n '&.Mui-focused fieldset': {\r\n borderColor: '#00703c',\r\n },\r\n },\r\n },\r\n })(TextField);\r\n\r\n return (\r\n
    \r\n {\r\n isLoadingStudentQuals || isLoadingQuals || isLoadingTrainers || students === undefined ?\r\n \"Spinner\"\r\n :\r\n <>\r\n \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n {\r\n filterByQual &&\r\n <>\r\n
    \r\n \r\n \r\n
    \r\n \r\n }\r\n {\r\n filterByStudent &&\r\n
    \r\n -b.Surname.trim().localeCompare(a.Surname.trim()))}\r\n getOptionLabel={(option) => `${option.FirstName.trim()} ${option.Surname.trim()}`}\r\n groupBy={(option) => option.Surname.charAt(0).toUpperCase()}\r\n filterSelectedOptions\r\n renderOption={(props, option) => {\r\n return (\r\n
  • \r\n {option.FirstName.trim() + \" \" + option.Surname.trim()}\r\n
  • \r\n )\r\n }}\r\n onChange={handleStudentSelect}\r\n renderInput={(params) => (\r\n \r\n )}\r\n />\r\n
    \r\n }\r\n
    \r\n \r\n {\r\n showReport &&\r\n \r\n }\r\n
    \r\n
    \r\n \r\n {\r\n showReport &&\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 reportData.map(row => (\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 Student Name\r\n {\r\n isArrowVisible[0] &&\r\n \r\n {\r\n studentNameAscending ? \"arrow_drop_down\" : \"arrow_drop_up\"\r\n }\r\n \r\n }\r\n
    \r\n
    QualificationPlan Accepted ByPlan Accepted AtAccept Plan
    goToStudentDetails(studentQualsObj[row.qualId].Student.Id)}>{row.studentName}{row.qualification}{row.planAcceptedBy}{row.planAcceptedAt}\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 TrainingPlanAcceptanceReport\r\n","import React, {useState, useEffect} from 'react';\r\nimport { Redirect, Route, Switch, useHistory } from 'react-router-dom';\r\nimport './StudentPortal.scss';\r\nimport M from \"materialize-css\";\r\nimport StudentPortalHome from '../../components/StudentPortalHome/StudentPortalHome';\r\nimport StudentProfile from '../../components/StudentProfile/StudentProfile';\r\nimport StudentQualifications from '../../components/StudentQualifications/StudentQualifications';\r\nimport StudentTrainingPlan from '../../components/StudentTrainingPlan/StudentTrainingPlan';\r\nimport AdminPortalHome from '../../components/AdminPortalHome/AdminPortalHome';\r\nimport StudentMenu from '../../components/StudentMenu/StudentMenu';\r\nimport AdminMenu from '../../components/AdminMenu/AdminMenu';\r\nimport DownloadPage from '../../components/DownloadPage/DownloadPage';\r\nimport EditCompetencies from '../../components/EditCompetencies/EditCompetencies';\r\nimport EditQualifications from '../../components/EditQualifications/EditQualifications';\r\nimport QualCompEdit from '../QualCompEdit/QualCompEdit';\r\nimport AddQual from '../../components/AddQual/AddQual';\r\nimport AddComp from '../../components/AddComp/AddComp';\r\nimport AdministerStudent from '../../components/AdministerStudent/AdministerStudent';\r\nimport AdminSettings from '../../components/AdminSettings/AdminSettings';\r\nimport AdminLocations from '../../components/AdminLocations/AdminLocations';\r\nimport AdminUsers from '../../components/AdminUsers/AdminUsers';\r\nimport Events from '../../components/Events/Events';\r\nimport AdminDuplicates from '../../components/AdminDuplicates/AdminDuplicates';\r\nimport AdminResults from '../../components/AdminResults/AdminResults';\r\nimport AdminChangePassword from '../../components/AdminChangePassword/AdminChangePassword';\r\nimport ManageFeeWaiverCodes from '../../pages/ManageFeeWaiverCodes/ManageFeeWaiverCodes';\r\nimport EventsTrainers from '../../components/EventsTrainers/EventsTrainers';\r\nimport EventsCalendar from '../../components/EventsCalendar/EventsCalendar';\r\nimport EventsCreateNew from '../../components/EventsCreateNew/EventsCreateNew';\r\nimport EventsEdit from '../../components/EventsEdit/EventsEdit';\r\nimport EventDetails from '../../components/EventDetails/EventDetails';\r\nimport EventsCreateType from '../../components/EventsCreateType/EventsCreateType';\r\nimport EventsGroups from '../../components/EventsGroups/EventsGroups';\r\nimport EventsReport from '../../components/EventsReport/EventsReport';\r\nimport { useThemeContext } from '../../ThemeContext';\r\nimport TrainingPlanAcceptanceReport from '../../components/TrainingPlanAcceptanceReport/TrainingPlanAcceptanceReport';\r\n\r\nconst StudentPortal = ({route}) => {\r\n\r\n let history = useHistory()\r\n const { userRole } = useThemeContext()\r\n\r\n useEffect(() => {\r\n var elems = document.querySelectorAll('.sidenav');\r\n var instances = M.Sidenav.init(elems, { edge: 'right' });\r\n }, [])\r\n\r\n const [menuSmall, setMenuSmall] = useState(true);\r\n\r\n const handleMenuState = () => {\r\n setMenuSmall(!menuSmall);\r\n }\r\n\r\n const onStudentSelect = (e, page) => {\r\n //open student in new tab\r\n if(page === 'administerStudent'){\r\n const studentId = e.target.dataset.id;\r\n const newPageUrl = \"/#/admin-portal/administer-student\";\r\n window.sessionStorage.setItem('currentStudent', studentId);\r\n window.open(newPageUrl, \"_blank\") \r\n }\r\n }\r\n\r\n const menuStyle = menuSmall? \"student-portal__nav--small\" : \"student-portal__nav--big\";\r\n const btnSize = menuSmall? \"btn-small\" : \"btn-large\";\r\n\r\n // Tries to grab authorization token if it exists\r\n const isAuth = !!sessionStorage.getItem('mbhToken')\r\n\r\n // When adding a new event, this keeps track of \r\n const [currentPage, setCurrentPage] = useState(\"summary\")\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n {\r\n !isAuth ?\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\nexport default StudentPortal\r\n","import React from 'react'\r\nimport './CodeOfPractice.scss'\r\n\r\nconst CodeOfPractice = () => {\r\n return (\r\n
    \r\n

    Code Of Practice

    \r\n
    \r\n\r\n

    At mbh, our training qualification adhere to the following standards that have been drafted by AQTF. There are systems in place to ensure quality control is maintained throughout the company to deliver quality services to our clients

    \r\n\r\n
    Systems for quality training and assessment
    \r\n\r\n

    Continuous improvement is an integral part of mbh with systems and procedures in place to ensure communication from clients and staff are captured and reviewed ongoing. Quality control is maintained throughout the company for all areas of the business and all training material and assessments are created using defined learning strategies that are inline with Adult Education principles, industry best practices and AQTF standards.\r\n

    \r\n\r\n
    Compliance with legislative responsibilities
    \r\n\r\n

    mbh is committed to ensuring the health, safety and welfare of its employees and all other persons. We aim to fulfil our statutory duties with regard to legislation.\r\n

    \r\n\r\n
    Effective financial management
    \r\n\r\n

    We have in place secure financial practices to ensure the protection of clients and any funds that are paid in advance. mbh complete an annual audit by a qualified CPA

    \r\n\r\n
    Effective administration and records management
    \r\n\r\n

    \r\n All student records are deemed confidential and cannot be released to anyone other than the student. However, where a company or entities has paid for the qualification and the student has signed a declaration to give authorisation they may be released. Student data is collected in accordance with AVETMISS and AQTF requirements.\r\n \r\n Confidentiality is a priority of mbh and all records are maintained in a secure location. Training records are kept for a period of 30 years.\r\n

    \r\n\r\n
    Recognition of qualifications issued by other RTO’s
    \r\n\r\n

    mbh will recognise other qualifications that have been issued be other RTO’s through out Australia , evidence must be provided and mbh reserve the right to contact the RTO to gain authentication.\r\n

    \r\n\r\n
    Recognition of prior learning
    \r\n\r\n

    Recognition of Prior Learning can be achieved if a participant can provide the relevant certificates or experiences that cover the competencies that mbh are offering on completion of the qualification and can successfully complete mbh competency tests relating to that qualification.\r\n

    \r\n\r\n
    Access and equity and client service
    \r\n\r\n

    mbh will where possible ensure access is available to all people regardless of their age, gender, culture and background. Some qualification at mbh require a minimum of HSC level English or equivalent and a high level of numeracy , we may reserve the right to forward you onto other agencies if these standards are not successfully met.\r\n \r\n\r\n mbh will ensure that clients receive a training booklet that provides information relevant to the qualification and the competencies that can be achieved, including a desired pathway to achieve Certificates and Diplomas in certain areas.\r\n\r\n mbh understand the importance of ensuring the welfare of our clients and staff , we endeavour to provide the following services:\r\n

      \r\n
    • - Client support
    • \r\n
    • - Grievance and disciplinary procedures
    • \r\n
    • - Special need support will be provided to students and staff where applicable
    • \r\n
    \r\n\r\n

    \r\n
    The competence of RTO staff
    \r\n\r\n

    Our training staff are assessed on a regular basis to ensure compliance to the training packages and continuing staff development is maintained to the levels of the qualification/assessments they train.\r\n

    \r\n \r\n
    Issuing AQF qualifications and statements of attainments
    \r\n\r\n

    Statement of attainments and certificates will be issued only on successful completion of qualification and assessments as specified by the training packages the RTO adhere to.\r\n

    \r\n \r\n
    Use of national state territory logos
    \r\n\r\n

    These are adhered to by mbh and will only be used as specified by the rules of usage from the company, department or government industry body who issues them.\r\n

    \r\n\r\n
    Ethical marketing and advertising
    \r\n\r\n

    mbh adhere to the requirements of the AQTF with regards to the advertising material, we are a company that prides itself on it ethical beliefs and our vision.\r\n

    \r\n
    \r\n
    \r\n )\r\n}\r\n\r\nexport default CodeOfPractice\r\n","import React from 'react'\r\nimport './RegConfirmation.scss'\r\nimport Celebration from '../../assets/illustrations/celebration.svg';\r\n\r\nconst RegConfirmation = () => {\r\n return (\r\n
    \r\n

    \r\n

    Thank you for registering! We will get in touch soon.

    \r\n
    Thank you for registering!
    \r\n
    We will get in touch soon.
    \r\n

    \r\n
    \r\n \"Celebration\"\r\n
    \r\n
    \r\n )\r\n}\r\n\r\nexport default RegConfirmation\r\n","import React from 'react';\r\nimport './Qualifications.scss';\r\nimport CareerPathways from '../../assets/career-pathways.gif'\r\nimport { Route, Switch } from 'react-router-dom';\r\nimport Testimonials from '../../components/Testimonials/Testimonials';\r\n\r\nconst Qualifications = ({ history }) => {\r\n\r\n return (\r\n
    \r\n \r\n \r\n
    \r\n

    Qualifications

    \r\n
    \r\n \"Career\r\n {/* First bubble */}\r\n
    history.push('/qualifications/certificate-II-in-workplace-skills')}>
    \r\n\r\n {/* Pathway to uni or workplace training */}\r\n
    history.push('/qualifications/certificate-III-in-business')}>
    \r\n {/*
    history.push('/career-pathways')}>
    \r\n
    history.push('/career-pathways')}>
    */}\r\n\r\n {/* Pathway to project management glory */}\r\n
    history.push('/qualifications/certificate-III-in-business')}>
    \r\n
    history.push('/qualifications/certificate-IV-in-project-management')}>
    \r\n
    history.push('/qualifications/diploma-of-project-management')}>
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n )\r\n}\r\n\r\nexport default Qualifications\r\n","import React, {useState, useEffect} from 'react'\r\nimport './LogIn.scss';\r\nimport { baseUrl } from '../../functions/globalVariables';\r\nimport { Redirect } from 'react-router-dom';\r\nimport FormSpinner from '../../assets/form-spinner.svg'\r\nimport qs from 'qs'\r\n\r\nconst LogIn = ({ history }) => {\r\n\r\n const [isLoggingIn, setIsLoggingIn] = useState(false)\r\n\r\n const [hasUserForgottenPassword, setHasUserForgttenPassword] = useState(false)\r\n\r\n const isAuth = !!sessionStorage.getItem('mbhToken')\r\n let redirectUrl = '/student-portal'\r\n const userRole = window.sessionStorage.getItem('mbhUserRole')\r\n\r\n if (userRole === 'Administrator') {\r\n redirectUrl = '/admin-portal'\r\n } else {\r\n redirectUrl = '/student-portal'\r\n }\r\n\r\n const loginUser = (e) => {\r\n\r\n console.time(\"loginUser\")\r\n\r\n e.preventDefault();\r\n\r\n const email = document.getElementById('email').value\r\n const password = document.getElementById('password').value\r\n\r\n if (!email.trim().length || !password.trim().length) {\r\n setIsLoggingIn(false)\r\n return;\r\n }\r\n \r\n var details = {\r\n 'username': email,\r\n 'password': password,\r\n 'grant_type': 'password'\r\n };\r\n\r\n const errorMsgEl = document.getElementById(\"logInErrorMsg\");\r\n \r\n fetch(`${baseUrl}/api/auth/token`, {\r\n crossDomain: true,\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\r\n body: qs.stringify(details)\r\n })\r\n .then(response => response.json())\r\n .then(data => {\r\n //if there is no error, save the studentid and token to sessionStorage and redirect to student portal. Otherwise show error.\r\n \r\n if(data.error === undefined){\r\n window.sessionStorage.setItem('mbhToken', data.access_token);\r\n window.sessionStorage.setItem('mbhStudentId', data.StudentId);\r\n window.sessionStorage.setItem('mbhUserRole', data.Role);\r\n window.sessionStorage.setItem('mbhUserName', data.userName);\r\n errorMsgEl.style.display = \"none\";\r\n\r\n if (window.sessionStorage.getItem('mbhUserRole') === 'Administrator') {\r\n redirectUrl = '/admin-portal'\r\n history.push(redirectUrl)\r\n } else {\r\n redirectUrl = '/student-portal/training-plan'\r\n history.push(redirectUrl)\r\n }\r\n \r\n setIsLoggingIn(false)\r\n \r\n\r\n } else{\r\n errorMsgEl.style.display = \"block\";\r\n errorMsgEl.textContent = data.error_description;\r\n setIsLoggingIn(false)\r\n }\r\n\r\n console.timeEnd(\"loginUser\")\r\n })\r\n .catch(err => {\r\n console.log(err);\r\n errorMsgEl.style.display = \"block\";\r\n errorMsgEl.textContent = \"Something went wrong\";\r\n setIsLoggingIn(false);\r\n\r\n })\r\n }\r\n\r\n return (\r\n \r\n isAuth ? \r\n \r\n : \r\n
    \r\n
    \r\n
    \r\n

    Don't have an account?

    \r\n \r\n
    \r\n

    Log In

    \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 Error text\r\n
    \r\n
    \r\n {\r\n isLoggingIn ?\r\n
    \r\n \"Form\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 LogIn\r\n","import React, { useEffect, useState} from 'react';\r\nimport './ContactDetailsForm.scss';\r\nimport { useDataFetch } from '../../hooks/useDataFetch';\r\nimport { baseUrl } from '../../functions/globalVariables';\r\nimport { setPostageForm } from '../../functions/setPostageForm';\r\nimport M from 'materialize-css';\r\nimport { copyResidentialIntoPostal, updatePostalAddress, updateResidentialAddress } from '../../functions/updateStudentAddress';\r\n\r\n\r\nconst ContactDetailsForm = ({ contactObject, handleChange }) => {\r\n\r\n useEffect(()=>{\r\n var elemSelect = document.querySelectorAll('select');\r\n var instanceSelect = M.FormSelect.init(elemSelect, {});\r\n var elemDatePicker = document.querySelectorAll('.datepicker');\r\n var instancesDatePicker = M.Datepicker.init(elemDatePicker, {format: 'dd/mm/yyyy', yearRange: 80});\r\n \r\n }, []);\r\n \r\n useEffect(() => {\r\n const DOMContentLoaded_event = document.createEvent(\"Event\")\r\n DOMContentLoaded_event.initEvent(\"DOMContentLoaded\", true, true)\r\n window.document.dispatchEvent(DOMContentLoaded_event)\r\n }, []);\r\n\r\n \r\n const stateUrl = `${baseUrl}/api/states`;\r\n const [ isLoadingState, state, stateError ] = useDataFetch(stateUrl)\r\n \r\n\r\n return(\r\n
    \r\n
    Personal Details
    \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

    * To obtain a USI, apply for one here

    \r\n
    \r\n
    \r\n \r\n
    Contact Details
    \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
    Residential Address
    \r\n
    \r\n
    \r\n updateResidentialAddress(contactObject)} />\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
    Postal Address
    \r\n \r\n

    \r\n
    \r\n
    \r\n updatePostalAddress(contactObject)} />\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\nexport default ContactDetailsForm;","import React, { useEffect } from 'react';\r\nimport M from 'materialize-css';\r\nimport './Signature.scss';\r\n\r\n\r\nconst Signature = () => {\r\n\r\n useEffect(() => {\r\n var elems = document.querySelectorAll('.modal');\r\n var instances = M.Modal.init(elems, {});\r\n })\r\n \r\n return (\r\n
    \r\n
    Student Declaration and Consent
    \r\n

    Please check the box to confirm your consent

    \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

    Privacy Notice & Student Declaration

    \r\n
    Privacy Notice
    \r\n

    \r\n Under the Data Provision Requirements 2012, M.B.H Management Pty Ltd is required to collect\r\n personal information about you and to disclose that personal information to the National Centre\r\n for Vocational Education Research Ltd (NCVER).\r\n
    \r\n
    \r\n Your personal information (including the personal information contained on this enrolment form\r\n and your training activity data) may be used or disclosed by M.B.H Management Pty Ltd for\r\n statistical, regulatory and research purposes. M.B.H Management Pty Ltd may disclose your\r\n personal information for these purposes to third parties, including:\r\n

    \r\n
    \r\n
      \r\n
    • School- if you are a secondary student undertaking VET, including a school-based apprenticeship or traineeship
    • \r\n
    \r\n
    \r\n

    Employer - if you are enrolled in training paid by your employer:

    \r\n
    \r\n
      \r\n
    • Commonwealth and State or Territory government departments and authorised agencies
    • \r\n
    • Organisations conducting student surveys: and researchers
    • \r\n
    \r\n
    \r\n

    NCVER

    \r\n

    Personal information disclosed to NCVER may be used or disclosed for the following purposes:

    \r\n
    \r\n
      \r\n
    • Issuing statements of attainment or qualification, and populating authenticated VET transcripts
    • \r\n
    • Facilitating statistics and research relating to education, including surveys
    • \r\n
    • Understanding how the VET market operates, for policy, workforce planning and consumer information; and administering VET, including programme administration, regulation, monitoring and evaluation.
    • \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n )\r\n}\r\n\r\nexport default Signature\r\n","import React, {useState, useEffect} from 'react';\r\nimport './StepForm.scss';\r\nimport ContactDetailsForm from '../ContactDetailsForm/ContactDetailsForm';\r\nimport VETForm from '../VETForm/VETForm';\r\nimport Signature from '../Signature/Signature';\r\nimport Spinner from '../../assets/spinner.svg';\r\nimport { useDataFetch } from '../../hooks/useDataFetch';\r\nimport { useDataPost } from '../../hooks/useDataPost';\r\nimport { formValidation } from '../../functions/formValidation';\r\nimport { baseUrl } from '../../functions/globalVariables';\r\nimport M from 'materialize-css';\r\nimport { capitaliseEachWordOfQualName } from '../../functions/capitaliseEachWordOfQualName';\r\n\r\nconst StepForm = ({history}) => {\r\n\r\n useEffect(()=>{\r\n var elems = document.querySelectorAll('select');\r\n var instances = M.FormSelect.init(elems, {});\r\n \r\n });\r\n\r\n\r\n const studentsUrl = `${baseUrl}/api/students`;\r\n const VETUrl = `${baseUrl}/api/vetquestions?$expand=Group,Answers&$orderBy=OrderIndex`;\r\n const qualificationsUrl = `${baseUrl}/api/qualifications?$filter=Superseded eq false`;\r\n const studentQualificationUrl = `${baseUrl}/api/studentqualifications`;\r\n const studentVETUrl = `${baseUrl}/api/studentvetquestions/addlist`;\r\n\r\n const [ isLoadingQual, qualifications, qualError ] = useDataFetch(qualificationsUrl)\r\n const [ isLoadingVET, vetQuestions, vetError ] = useDataFetch(VETUrl)\r\n\r\n \r\n const [showStep, setShowStep] = useState([true, false, false, false]);\r\n \r\n const showHideSteps = (show1, show2, show3, show4) => {\r\n setShowStep([show1, show2, show3, show4]);\r\n }\r\n \r\n //State for Qualification the student has selected\r\n const[qualObject, setQualObject] = useState({\r\n StudentId: null,\r\n QualId: null,\r\n Funding: null,\r\n Active: true\r\n });\r\n\r\n \r\n // State for ContactDetailsForm\r\n const [contactObject, setContactObject] = useState({ \r\n \"Id\": 0,\r\n \"SaStudentId\": \"\",\r\n \"Title\": \"\",\r\n \"FirstName\": \"\",\r\n \"Surname\": \"\",\r\n \"Organisation\": \"\",\r\n \"Position\": \"\",\r\n \"Address\": \"\",\r\n \"AddressBuilding\": null,\r\n \"AddressUnitNo\": null,\r\n \"AddressStreetNo\": \"\",\r\n \"AddressStreet\": null,\r\n \"AddressPOBox\": null,\r\n \"Address2\": null,\r\n \"Suburb\": \"\",\r\n \"State\": \"\",\r\n \"Postcode\": \"\",\r\n \"Address_Pos\": null,\r\n \"AddressBuilding_Pos\": null,\r\n \"AddressUnitNo_Pos\": null,\r\n \"AddressStreetNo_Pos\": null,\r\n \"AddressStreet_Pos\": null,\r\n \"AddressPOBox_Pos\": null,\r\n \"Address2_Pos\": null,\r\n \"Suburb_Pos\": null,\r\n \"State_Pos\": null,\r\n \"Postcode_Pos\": null,\r\n \"HomePhone\": null,\r\n \"Phone\": \"\",\r\n \"Mobile\": \"\",\r\n \"Fax\": \"\",\r\n \"Email\": \"\",\r\n \"AltEmail\": \"\",\r\n \"DOB\": null,\r\n \"Sex\": null,\r\n \"Location\": null,\r\n \"Other\": null,\r\n \"AvetmissDate\": null,\r\n \"CountryId\": null,\r\n \"PppBookingId\": null,\r\n \"TuitionFee\": null,\r\n \"Consent\": true,\r\n \"UniqueIdentifier\": null,\r\n \"CreatedAt\": null \r\n });\r\n\r\n const handleChange = e => {\r\n const { name, value, checked } = e.target;\r\n contactObject[name] = value\r\n };\r\n\r\n \r\n\r\n const [submitData, setSubmitData] = useState(false)\r\n const [submitQualData, setSubmitQualData] = useState(false)\r\n const [submitStudentVetData, setSubmitStudentVetData] = useState(false)\r\n\r\n // State for VETForm\r\n\r\n const tempVetObject = {}\r\n const [vetObject, setVetObject] = useState({})\r\n\r\n //Contact Detail Post\r\n const [isLoadingStudentId, studentData, errorStudentData] = useDataPost(studentsUrl, contactObject, submitData, setSubmitData, 'POST')\r\n //Qualification Post\r\n const [isLoadingStudentQual, studentQualification, errorStudentQualification] = useDataPost(studentQualificationUrl, qualObject, submitQualData, setSubmitQualData, 'POST')\r\n //VET Questions Post\r\n const [isLoadingStudentVet, studentVETData, errorStudentVETData] = useDataPost(studentVETUrl, Object.values(vetObject), submitStudentVetData, setSubmitStudentVetData, 'POST', history)\r\n\r\n const studentId = studentData.Id;\r\n\r\n //If email or USI already exists the POST will return an error\r\n //the below captures it, returns message and allows user to try again\r\n useEffect(()=>{\r\n if(studentData.error){\r\n M.toast({html: studentData.error.innererror.message, displayLength: 2000});\r\n showHideSteps(true, false, false, false);\r\n document.getElementById(\"createStudentBtn\").disabled = false;\r\n }else{\r\n if(studentData.Id!==undefined){\r\n showHideSteps(false, true, false, false);\r\n }\r\n }\r\n },[studentData])\r\n\r\n const handleQualChange = e => {\r\n if (studentData.Id === undefined) return\r\n\r\n const { name, value } = e.target;\r\n \r\n if (name === 'qualName'){\r\n qualObject.QualId = value;\r\n qualObject.StudentId = studentData.Id; \r\n if(value>0){\r\n document.getElementById('QualFundingPanel').style.display = 'block';\r\n }\r\n }\r\n if (name === 'qualFunding'){\r\n qualObject.Funding = value;\r\n }\r\n \r\n };\r\n\r\n const validateQualObject = () => {\r\n if (qualObject.QualId === null) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n const validateConsent = () => {\r\n if(document.getElementById(\"consent1\").checked && document.getElementById(\"consent2\").checked && document.getElementById(\"consent3\").checked){\r\n return true;\r\n }else{\r\n return false;\r\n }\r\n }\r\n \r\n const submitVetandQualData = (e) => {\r\n e.preventDefault();\r\n \r\n const hasConsented = validateConsent();\r\n if (hasConsented){\r\n document.getElementById(\"finishRegistrationBtn\").disabled = true;\r\n validateQualObject() && setSubmitQualData(true)\r\n setSubmitStudentVetData(true);\r\n }else{\r\n M.toast({html: 'Please consent to all 3 terms', displayLength: 2000});\r\n }\r\n \r\n }\r\n\r\n useEffect(() => {\r\n if (vetQuestions === undefined || studentData.Id === undefined) return\r\n\r\n for (let i = 0; i < vetQuestions.length; i++) {\r\n const name = vetQuestions[i].Text;\r\n tempVetObject[name] = {\r\n StudentId: studentData.Id,\r\n VetQuestionId: vetQuestions[i].Id,\r\n Answers: [],\r\n }\r\n }\r\n\r\n setVetObject(tempVetObject)\r\n }, [vetQuestions, studentId])\r\n \r\n\r\n const handleVetChange = (e, vetObject) => {\r\n\r\n if (vetObject === undefined) return\r\n\r\n const { name, value, type, checked } = e.target;\r\n \r\n if (type === 'checkbox') {\r\n if (checked) {\r\n vetObject[name].Answers = [...vetObject[name].Answers, { VetAnswerId: value, Text: null }]\r\n } else {\r\n const filteredArray = vetObject[name].Answers.filter(item => item.VetAnswerId !== value)\r\n vetObject[name].Answers = filteredArray\r\n }\r\n\r\n } else if (type === 'text' || type === 'date') {\r\n vetObject[name].Answers = [{ VetAnswerId: null, Text: value }]\r\n } else {\r\n vetObject[name].Answers = [{ VetAnswerId: value, Text: null }]\r\n }\r\n };\r\n\r\n \r\n \r\n return(\r\n
    \r\n

    Registration

    \r\n

    Register for one of our qualifications by filling out the form below.

    \r\n
    \r\n \r\n
    \r\n
    \r\n );\r\n}\r\n\r\nexport default StepForm;","import M from 'materialize-css';\r\n\r\nexport const formValidation = (contactObject) => {\r\n if (contactObject.FirstName.trim() ===\"\" || contactObject.Surname.trim() ===\"\" || (contactObject.Email.trim() ===\"\" && contactObject.AltEmail.trim() ===\"\")) {\r\n if(contactObject.FirstName.trim() ===\"\"){\r\n M.toast({html: 'Please provide your first name', displayLength: 2000});\r\n }\r\n if(contactObject.Surname.trim() ===\"\"){\r\n M.toast({html: 'Please provide your surname', displayLength: 2000});\r\n }\r\n if(contactObject.Email.trim() ===\"\" && contactObject.AltEmail.trim() ===\"\"){\r\n M.toast({html: 'Please provide your email', displayLength: 2000});\r\n } \r\n return false;\r\n }else{\r\n return true;\r\n }\r\n}\r\n\r\n","import React from 'react'\r\nimport './ViewOtherCourses.scss'\r\n\r\nconst ViewOtherCourses = ({ history }) => {\r\n return (\r\n
    \r\n
    \r\n

    This qualification wasn't for you?

    \r\n

    Check out our other qualifications

    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n )\r\n}\r\n\r\nexport default ViewOtherCourses\r\n","import React from 'react'\r\nimport Certification from '../../assets/illustrations/certification.svg'\r\nimport ViewOtherCourses from '../../components/ViewOtherCourses/ViewOtherCourses'\r\nimport Updates from '../../assets/illustrations/updates.svg'\r\nimport SharedGoals from '../../assets/illustrations/shared-goals.svg'\r\nimport Launching from '../../assets/illustrations/launching.svg'\r\nimport ProjectCompleted from '../../assets/illustrations/project-completed.svg'\r\nimport Brochure from '../../assets/brochures/Diploma of Project Management.pdf'\r\nimport './DiplomaInPM.scss'\r\n\r\nconst DiplomaInPM = ({ history }) => {\r\n return (\r\n
    \r\n

    BSB50820 Diploma of Project Management

    \r\n
    \r\n
    \r\n \"Certification\r\n
    \r\n
    \r\n

    This qualification is the pinnacle qualification at mbh and is not for the feint hearted. We push beyond the training \r\n competencies to develop your skills and knowledge of all the things that really matter as a fully fledged \r\n project manager.\r\n

    \r\n
    \r\n \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n Download Brochure\r\n
    \r\n
    \r\n

    What does it involve?

    \r\n

    \r\n Our approach goes beyond the functional areas of project management and on a journey through the project management lifecycle. \r\n

    \r\n Drawing on the three spheres of Managing by Project - change management, investment management and project management - this qualification aims to develop the broad range of skills and expertise required of a modern day project manager.\r\n
    \r\n
    \r\n Download Brochure\r\n

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \"Updates\"\r\n
    \r\n
    \r\n

    Attend diploma qualification delivered by trainers who have been there done that

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n

    Lead a project to successful delivery

    \r\n
    \r\n
    \r\n \"Project\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \"Shared\r\n
    \r\n
    \r\n

    Be mentored by our experienced PM consultants

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n

    Gain your Diploma of Project Management and start running projects every day

    \r\n
    \r\n
    \r\n \"Launching\"\r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n )\r\n}\r\n\r\nexport default DiplomaInPM\r\n","import React, { useState, useEffect } from 'react'\r\nimport './ContactUs.scss';\r\nimport M from 'materialize-css';\r\nimport { baseUrl } from '../../functions/globalVariables';\r\nimport Spinner from '../../assets/spinner.svg';\r\n\r\n\r\nconst ContactUs = ({ history }) => {\r\n\r\n const [name, setName] = useState(\"\")\r\n const [email, setEmail] = useState(\"\")\r\n const [message, setMessage] = useState(\"\")\r\n\r\n const [isSending, setIsSending] = useState(false)\r\n\r\n useEffect(() => {\r\n var elems = document.querySelectorAll('.tooltipped');\r\n var instances = M.Tooltip.init(elems, {});\r\n }, [])\r\n\r\n const validateFields = () => {\r\n if (!name.trim().length || !email.trim().length || !message.trim().length) {\r\n return false\r\n }\r\n\r\n return true\r\n }\r\n\r\n const onSubmit = (e) => {\r\n e.preventDefault()\r\n if (!validateFields()) {\r\n M.toast({ html: \"Please fill in all fields\", displayLength: 2000 })\r\n setIsSending(false)\r\n return\r\n }\r\n\r\n fetch(`${baseUrl}/api/auth/ContactUs`, {\r\n method: \"POST\",\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify({\r\n Name: name,\r\n Email: email,\r\n Message: message\r\n })\r\n })\r\n .then(() => {\r\n M.toast({ html: \"Success! Thank you for contacting mbh training. We will be in contact shortly.\", displayLength: 2000, classes: 'mbh-green', })\r\n resetFields()\r\n M.updateTextFields()\r\n setIsSending(false)\r\n })\r\n .catch(() => {\r\n M.toast({ html: \"An error has occurred\", displayLength: 1500 })\r\n setIsSending(false)\r\n })\r\n }\r\n\r\n const resetFields = () => {\r\n setName(\"\")\r\n setEmail(\"\")\r\n setMessage(\"\");\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n

    Contact Us

    \r\n
    \r\n
    \r\n
    \r\n setName(e.target.value)} />\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n setEmail(e.target.value)} />\r\n \r\n
    \r\n
    \r\n \r\n {\r\n isSending ?\r\n
    \r\n \"Spinner\"\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 ContactUs\r\n","import React, {useEffect} from 'react'\r\nimport './NavBar.scss';\r\nimport mbhLogo from '../../assets/mbh-logo.png'\r\nimport { ACTIONS } from '../../App';\r\nimport M from 'materialize-css';\r\n\r\nconst NavBar = ({ history }) => {\r\n\r\n useEffect(() => {\r\n var elems = document.querySelectorAll('.sidenav');\r\n var instances = M.Sidenav.init(elems, { edge: 'right' });\r\n }, [])\r\n\r\n const imgClass = window.location.pathname !== \"/mark-attendance\" ? \"navBar__logo\" : 'navBar__logo-attendance'\r\n return (\r\n
    \r\n
    \r\n \"mbh history.push('/')} />\r\n
    \r\n {\r\n //don't show menu items when on mark attendance page\r\n window.location.pathname !==\"markAttendance\" &&\r\n \r\n }\r\n {\r\n //don't show menu items when on mark attendance page\r\n window.location.pathname !==\"markAttendance\" &&\r\n
      \r\n
    • history.push('/')}>Home
    • \r\n
    • history.push('/qualifications')}>Qualifications
    • \r\n \r\n {\r\n window.location.pathname === '/login' ?\r\n
    • history.push('/register')}>Register
    • \r\n :\r\n
    • history.push('/login')}>Student Portal
    • \r\n\r\n }\r\n
    \r\n }\r\n
    \r\n )\r\n}\r\n\r\nexport default NavBar;\r\n","import React, {useEffect} from 'react';\r\nimport './Footer.scss';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport { faLinkedin, faFacebook, faBlogger } from '@fortawesome/free-brands-svg-icons'\r\nimport {\r\n HashRouter as Router,\r\n } from \"react-router-dom\";\r\n\r\nconst Footer = ({ history }) => {\r\n\r\n useEffect(()=>{\r\n if (window.location.pathname !== 'testimonials') {\r\n window.scrollTo(0, 0)\r\n }\r\n })\r\n\r\n return(\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n

    history.push('/')}>Home

    \r\n

    history.push('/about-us')}>About Us

    \r\n

    history.push('/register')} className=\"footer__link\">Book Online

    \r\n
    \r\n
    \r\n

    history.push('/qualifications')} className=\"footer__link\">Qualifications

    \r\n

    history.push('/testimonials')} className=\"footer__link\">Testimonials

    \r\n

    history.push('/conditions')} className=\"footer__link\">Enrolment Conditions

    \r\n

    history.push('/privacy')}>Privacy

    \r\n \r\n
    \r\n
    \r\n

    history.push('/code-of-practice')} className=\"footer__link\">Code of Practice

    \r\n

    history.push('/case-studies')} className=\"footer__link\">Case Studies

    \r\n Smart & Skilled NSW\r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n

    copyright 2014, mbh training, ph: 1300 79 48 68, info@mbhtraining.com.au

    \r\n

    M.B.H Management Pty Ltd, RTO ID: 90884

    \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n )\r\n \r\n}\r\n\r\nexport default Footer;","import React from 'react'\r\nimport './NavTiles.scss'\r\n\r\nconst NavTiles = ({ history }) => {\r\n\r\n return (\r\n
    \r\n
    history.push('/register')}>\r\n assignment_ind\r\n

    Book Online

    \r\n
    \r\n
    history.push('/about-us')}>\r\n people\r\n

    About Us

    \r\n
    \r\n
    history.push('/qualifications')}>\r\n assignment\r\n

    Qualifications

    \r\n
    \r\n
    history.push('/case-studies')}>\r\n book\r\n

    Case Studies

    \r\n
    \r\n
    history.push('/testimonials')}>\r\n rate_review\r\n

    Testimonials

    \r\n
    \r\n
    history.push('/smart-and-skilled')}>\r\n grade\r\n

    Smart & Skilled

    \r\n
    \r\n
    \r\n )\r\n}\r\n\r\nexport default NavTiles\r\n","import React from 'react';\r\nimport './Guide.scss';\r\nimport NavTiles from '../NavTiles/NavTiles';\r\n\r\nconst Guide = ({ history }) => {\r\n\r\n return (\r\n
    \r\n

    Let us guide you

    \r\n \r\n
    \r\n );\r\n\r\n}\r\n\r\nexport default Guide;","import React from 'react'\r\nimport NavBar from '../../components/NavBar/NavBar';\r\nimport Footer from '../Footer/Footer'\r\nimport Guide from '../Guide/Guide';\r\n\r\nconst RenderRoute = ({ Component, history, renderType, componentType }) => {\r\n return (\r\n <>\r\n {\r\n renderType === 'All' ?\r\n <>\r\n \r\n {/* This will turn into whatever component gets passed in */}\r\n {\r\n Component\r\n }\r\n \r\n