{"version":3,"file":"ui/app.405519b762bd404f9ee5.js","mappings":"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","sources":["webpack://apps/./App/content/icons/ sync ^\\.\\/.*$","webpack://apps/./App/content/img/ sync ^\\.\\/.*$","webpack://apps/./App/app/vendor.ts","webpack://apps/./App/app/app.module.ts","webpack://apps/./App/app/config.http.ts","webpack://apps/./App/app/accessibility/accessibility.ts","webpack://apps/./App/app/models/enums.ts","webpack://apps/./App/app/addStudent/addStudent.ts","webpack://apps/./App/app/tools/outageChecker.ts","webpack://apps/./App/app/alert/alert.ts","webpack://apps/./App/app/attendance/attendance.ts","webpack://apps/./App/app/services/dateHelper.ts","webpack://apps/./App/app/services/dayHelper.ts","webpack://apps/./App/app/attendance/reportAbsence.ts","webpack://apps/./App/app/attendance/reportReason.ts","webpack://apps/./App/app/behaviour/behaviour.ts","webpack://apps/./App/app/enrolmentHistory/enrolmentHistory.ts","webpack://apps/./App/app/error/error.ts","webpack://apps/./App/app/featureUnavailable/featureUnavailable.ts","webpack://apps/./App/app/home/home.ts","webpack://apps/./App/app/home/homeInitialise.ts","webpack://apps/./App/app/student/enrolmentStatus.ts","webpack://apps/./App/app/home/studentList.ts","webpack://apps/./App/app/home/parentCentricSummary/consentSummary/consentSummaryWidget.ts","webpack://apps/./App/app/home/parentCentricSummary/absenceSummary/absenceSummaryWidget.ts","webpack://apps/./App/app/home/parentCentricSummary/upcomingEventsSummary/upcomingEventsSummaryWidget.ts","webpack://apps/./App/app/home/parentCentricSummary/paymentsSummary/paymentsSummaryWidget.ts","webpack://apps/./App/app/home/parentCentricSummary/qlearnSummary/qlearnSummaryWidget.ts","webpack://apps/./App/app/landingPage/landing-page.ts","webpack://apps/./App/app/landingPage/register-link/register-link.ts","webpack://apps/./App/app/landingPage/landing-page-section/landing-page-section.ts","webpack://apps/./App/app/landingPage/landing-page-section/app-download-section/app-download-section.ts","webpack://apps/./App/app/landingPage/landing-page-section/user-reviews-section/user-reviews-section.ts","webpack://apps/./App/app/landingPage/landing-page-section/one-place-section/one-place-section.ts","webpack://apps/./App/app/landingPage/landing-page-section/safe-private-section/safe-private-section.ts","webpack://apps/./App/app/landingPage/landing-page-section/connect-share-section/connect-share-section.ts","webpack://apps/./App/app/landingPage/landing-page-section/children-grow-section/children-grow-section.ts","webpack://apps/./App/app/landingPage/landing-page-section/process-guide-section/process-guide-section.ts","webpack://apps/./App/app/landingPage/landing-page-section/functionality-section/functionality-section.ts","webpack://apps/./App/app/landingPage/landing-page-section/overview-section/overview-section.ts","webpack://apps/./App/app/landingPage/landing-page-section/lives-easier-section/lives-easier-section.ts","webpack://apps/./App/app/login/mobile-app-message.ts","webpack://apps/./App/app/login/qLearnAppMessage/qLearnAppMessage.ts","webpack://apps/./App/app/login-form/loginForm.ts","webpack://apps/./App/app/login/login.ts","webpack://apps/./App/app/login/forgotPassword/forgotPassword.ts","webpack://apps/./App/app/login/forgotPassword/changeForgottenPassword.ts","webpack://apps/./App/app/login/forgotPassword/confirmResetPassword.ts","webpack://apps/./App/app/outage/outage.ts","webpack://apps/./App/app/payment/payment.ts","webpack://apps/./App/app/payment/processPayment.ts","webpack://apps/./App/app/photo/schoolPhoto.ts","webpack://apps/./App/app/photo/upload.ts","webpack://apps/./App/app/privacy/privacy.ts","webpack://apps/./App/app/profile/biometrics.ts","webpack://apps/./App/app/profile/push-notification-settings.ts","webpack://apps/./App/app/profile/profile.ts","webpack://apps/./App/app/profile/changePassword.ts","webpack://apps/./App/app/profile/email.ts","webpack://apps/./App/app/profile/mobile.ts","webpack://apps/./App/app/profile/other.ts","webpack://apps/./App/app/registration/accountOwner/invitation.ts","webpack://apps/./App/app/registration/accountOwner/register.ts","webpack://apps/./App/app/registration/accountOwner/registerInitialise.ts","webpack://apps/./App/app/registration/accountOwner/verify.ts","webpack://apps/./App/app/registration/accountOwner/verifyInitialise.ts","webpack://apps/./App/app/registration/delegatedViewer/invitation.ts","webpack://apps/./App/app/registration/delegatedViewer/invitationInitialise.ts","webpack://apps/./App/app/registration/delegatedViewer/register.ts","webpack://apps/./App/app/registration/delegatedViewer/verify.ts","webpack://apps/./App/app/reports/reports.ts","webpack://apps/./App/app/reports/archive.ts","webpack://apps/./App/app/consent/consent.ts","webpack://apps/./App/app/consent/request.ts","webpack://apps/./App/app/consent/responseSubmitted.ts","webpack://apps/./App/app/student/studentSidebar.ts","webpack://apps/./App/app/student/studentHeader.ts","webpack://apps/./App/app/student/studentFooter.ts","webpack://apps/./App/app/student/widgets/attendanceWidget.ts","webpack://apps/./App/app/student/widgets/behaviourWidget.ts","webpack://apps/./App/app/student/widgets/downloadWidget.ts","webpack://apps/./App/app/student/widgets/paymentWidget.ts","webpack://apps/./App/app/student/widgets/reportWidget.ts","webpack://apps/./App/app/student/widgets/timetableWidget.ts","webpack://apps/./App/app/tools/dates.ts","webpack://apps/./App/app/services/timeHelper.ts","webpack://apps/./App/app/student/widgets/upcomingEventsWidget.ts","webpack://apps/./App/app/student/widgets/widgetFeatureUnavailable.ts","webpack://apps/./App/app/student/student.ts","webpack://apps/./App/app/student/studentPhoto.ts","webpack://apps/./App/app/studentDetails/studentDetails.ts","webpack://apps/./App/app/studentDetails/studentMedicalConditions.ts","webpack://apps/./App/app/studentNotFound/studentNotFound.ts","webpack://apps/./App/app/termsAndConditions/termsAndConditions.ts","webpack://apps/./App/app/timetable/timetable.ts","webpack://apps/./App/app/update/update.ts","webpack://apps/./App/app/tools/array.ts","webpack://apps/./App/app/viewer/addViewer.ts","webpack://apps/./App/app/viewer/viewer.ts","webpack://apps/./App/app/admin-view/admin-view-logout.ts","webpack://apps/./App/app/admin-view/admin-view-context-error.ts","webpack://apps/./App/app/admin-view/admin-view-inactive-error.ts","webpack://apps/./App/app/attendance/reportMultipleAbsences/reportMultipleAbsences.ts","webpack://apps/./App/app/parentCentric/combinedUpcomingEvents/combinedUpcomingEvents.ts","webpack://apps/./App/app/parentCentric/combinedPayments/combinedPayments.ts","webpack://apps/./App/app/consent/consentRequestSummary/consentRequestSummary.ts","webpack://apps/./App/app/consent/consentRequestList/consentRequestList.ts","webpack://apps/./App/app/parentCentric/combinedConsentRequests/combinedConsentRequests.ts","webpack://apps/./App/app/config.routes.ts","webpack://apps/./App/app/services/common.ts","webpack://apps/./App/app/config.ts","webpack://apps/./App/app/services/preferencesService.ts","webpack://apps/./App/app/services/deviceServiceProvider.ts","webpack://apps/./App/app/services/apiServiceProvider.ts","webpack://apps/./App/app/services/pushNotificationsService.ts","webpack://apps/./App/app/services/adminViewRedirectService.ts","webpack://apps/./App/app/services/assetService.ts","webpack://apps/./App/app/services/authorisationService.ts","webpack://apps/./App/app/services/blobService.ts","webpack://apps/./App/app/services/urlResolver.ts","webpack://apps/./App/app/services/contextLoader.ts","webpack://apps/./App/app/services/creditCardService.ts","webpack://apps/./App/app/models/financeRecord.ts","webpack://apps/./App/app/models/enrolment.ts","webpack://apps/./App/app/models/student.ts","webpack://apps/./App/app/models/user.ts","webpack://apps/./App/app/services/dataContext.ts","webpack://apps/./App/app/services/delegateViewer.ts","webpack://apps/./App/app/services/featuresService.ts","webpack://apps/./App/app/services/focusService.ts","webpack://apps/./App/app/services/invitationService.ts","webpack://apps/./App/app/services/phoneService.ts","webpack://apps/./App/app/services/photoService.ts","webpack://apps/./App/app/services/platformService.ts","webpack://apps/./App/app/services/processPaymentService.ts","webpack://apps/./App/app/services/routeService.ts","webpack://apps/./App/app/services/networkService.ts","webpack://apps/./App/app/services/csrfTokenService.ts","webpack://apps/./App/app/services/recaptchaService.ts","webpack://apps/./App/app/services/loginService.ts","webpack://apps/./App/app/services/cookieService.ts","webpack://apps/./App/app/services/consentService.ts","webpack://apps/./App/app/services/qLearnService.ts","webpack://apps/./App/app/services/pushNotificationsRegistrationService.ts","webpack://apps/./App/app/services/nativeSettingsLauncherService.ts","webpack://apps/./App/app/services/nativeSettingsService.ts","webpack://apps/./App/app/services/errorLoggingService.ts","webpack://apps/./App/app/services/exceptionHandler.ts","webpack://apps/./App/app/services/errorReporting.ts","webpack://apps/./App/app/services/calendarService.ts","webpack://apps/./App/app/admin-view/adminViewDomainFactory.ts","webpack://apps/./App/app/layout/shell.ts","webpack://apps/./App/app/directives/cardExpiry.ts","webpack://apps/./App/app/directives/checkList.ts","webpack://apps/./App/app/directives/creditCardNumber.ts","webpack://apps/./App/app/directives/currency.ts","webpack://apps/./App/app/directives/currentLink.ts","webpack://apps/./App/app/directives/digitsOnly.ts","webpack://apps/./App/app/directives/externalFileDownloadLink.ts","webpack://apps/./App/app/directives/focus.ts","webpack://apps/./App/app/directives/greaterThanDate.ts","webpack://apps/./App/app/directives/isChanged.ts","webpack://apps/./App/app/directives/isDate.ts","webpack://apps/./App/app/directives/isPastDate.ts","webpack://apps/./App/app/directives/loadingPane.ts","webpack://apps/./App/app/directives/match.ts","webpack://apps/./App/app/directives/matchCaseInsensitive.ts","webpack://apps/./App/app/directives/minDate.ts","webpack://apps/./App/app/directives/mobileNumber.ts","webpack://apps/./App/app/directives/parentOnly.ts","webpack://apps/./App/app/directives/password.ts","webpack://apps/./App/app/directives/absenceDateValidation.ts","webpack://apps/./App/app/directives/phoneNumber.ts","webpack://apps/./App/app/directives/tooltip.ts","webpack://apps/./App/app/App.ts","webpack://apps/./App/app/configuration.ts","webpack://apps/./App/app/ie8Polyfills/filter.ts","webpack://apps/./App/app/ie8Polyfills/find.ts","webpack://apps/./App/app/ie8Polyfills/forEach.ts","webpack://apps/./App/app/ie8Polyfills/indexOf.ts","webpack://apps/./App/app/accessibility/accessibility.html","webpack://apps/./App/app/addStudent/addStudent.html","webpack://apps/./App/app/admin-view/admin-view-context-error.html","webpack://apps/./App/app/admin-view/admin-view-inactive-error.html","webpack://apps/./App/app/admin-view/admin-view-logout.html","webpack://apps/./App/app/alert/alert.html","webpack://apps/./App/app/attendance/attendance.html","webpack://apps/./App/app/attendance/reportAbsence.html","webpack://apps/./App/app/attendance/reportMultipleAbsences/reportMultipleAbsences.html","webpack://apps/./App/app/attendance/reportReason.html","webpack://apps/./App/app/behaviour/behaviour.html","webpack://apps/./App/app/consent/consent.html","webpack://apps/./App/app/consent/consentRequestList/consentRequestList.html","webpack://apps/./App/app/consent/consentRequestSummary/consentRequestSummary.html","webpack://apps/./App/app/consent/request.html","webpack://apps/./App/app/consent/responseSubmitted.html","webpack://apps/./App/app/enrolmentHistory/enrolmentHistory.html","webpack://apps/./App/app/error/error.html","webpack://apps/./App/app/featureUnavailable/featureUnavailable.html","webpack://apps/./App/app/home/home.html","webpack://apps/./App/app/home/parentCentricSummary/absenceSummary/absenceSummaryWidget.html","webpack://apps/./App/app/home/parentCentricSummary/consentSummary/consentSummaryWidget.html","webpack://apps/./App/app/home/parentCentricSummary/paymentsSummary/paymentsSummaryWidget.html","webpack://apps/./App/app/home/parentCentricSummary/qlearnSummary/qlearnSummaryWidget.html","webpack://apps/./App/app/home/parentCentricSummary/upcomingEventsSummary/upcomingEventsSummaryWidget.html","webpack://apps/./App/app/home/studentList.html","webpack://apps/./App/app/landingPage/landing-page-section/app-download-section/app-download-section.html","webpack://apps/./App/app/landingPage/landing-page-section/children-grow-section/children-grow-section.html","webpack://apps/./App/app/landingPage/landing-page-section/connect-share-section/connect-share-section.html","webpack://apps/./App/app/landingPage/landing-page-section/functionality-section/functionality-section.html","webpack://apps/./App/app/landingPage/landing-page-section/landing-page-section.html","webpack://apps/./App/app/landingPage/landing-page-section/lives-easier-section/lives-easier-section.html","webpack://apps/./App/app/landingPage/landing-page-section/one-place-section/one-place-section.html","webpack://apps/./App/app/landingPage/landing-page-section/overview-section/overview-section.html","webpack://apps/./App/app/landingPage/landing-page-section/process-guide-section/process-guide-section.html","webpack://apps/./App/app/landingPage/landing-page-section/safe-private-section/safe-private-section.html","webpack://apps/./App/app/landingPage/landing-page-section/user-reviews-section/user-reviews-section.html","webpack://apps/./App/app/landingPage/landing-page.html","webpack://apps/./App/app/landingPage/register-link/register-link.html","webpack://apps/./App/app/layout/shell.html","webpack://apps/./App/app/login-form/loginForm.html","webpack://apps/./App/app/login/forgotPassword/changeForgottenPassword.html","webpack://apps/./App/app/login/forgotPassword/confirmResetPassword.html","webpack://apps/./App/app/login/forgotPassword/forgotPassword.html","webpack://apps/./App/app/login/login.html","webpack://apps/./App/app/login/mobile-app-message.html","webpack://apps/./App/app/login/qLearnAppMessage/qLearnAppMessage.html","webpack://apps/./App/app/outage/outage.html","webpack://apps/./App/app/parentCentric/combinedConsentRequests/combinedConsentRequests.html","webpack://apps/./App/app/parentCentric/combinedPayments/combinedPayments.html","webpack://apps/./App/app/parentCentric/combinedUpcomingEvents/combinedUpcomingEvents.html","webpack://apps/./App/app/payment/payment.html","webpack://apps/./App/app/payment/processPayment.html","webpack://apps/./App/app/photo/schoolPhoto.html","webpack://apps/./App/app/photo/upload.html","webpack://apps/./App/app/privacy/privacy.html","webpack://apps/./App/app/profile/biometrics.html","webpack://apps/./App/app/profile/changePassword.html","webpack://apps/./App/app/profile/email.html","webpack://apps/./App/app/profile/mobile.html","webpack://apps/./App/app/profile/other.html","webpack://apps/./App/app/profile/profile.html","webpack://apps/./App/app/profile/push-notification-settings.html","webpack://apps/./App/app/registration/accountOwner/invitation.html","webpack://apps/./App/app/registration/accountOwner/register.html","webpack://apps/./App/app/registration/accountOwner/verify.html","webpack://apps/./App/app/registration/delegatedViewer/invitation.html","webpack://apps/./App/app/registration/delegatedViewer/register.html","webpack://apps/./App/app/registration/delegatedViewer/verify.html","webpack://apps/./App/app/reports/archive.html","webpack://apps/./App/app/reports/reports.html","webpack://apps/./App/app/studentDetails/studentDetails.html","webpack://apps/./App/app/studentDetails/studentMedicalConditions.html","webpack://apps/./App/app/studentNotFound/studentNotFound.html","webpack://apps/./App/app/student/enrolmentStatus.html","webpack://apps/./App/app/student/student.html","webpack://apps/./App/app/student/studentFooter.html","webpack://apps/./App/app/student/studentHeader.html","webpack://apps/./App/app/student/studentPhoto.html","webpack://apps/./App/app/student/studentSidebar.html","webpack://apps/./App/app/student/widgets/attendanceWidget.html","webpack://apps/./App/app/student/widgets/behaviourWidget.html","webpack://apps/./App/app/student/widgets/downloadWidget.html","webpack://apps/./App/app/student/widgets/paymentWidget.html","webpack://apps/./App/app/student/widgets/reportWidget.html","webpack://apps/./App/app/student/widgets/timetableWidget.html","webpack://apps/./App/app/student/widgets/upcomingEventsWidget.html","webpack://apps/./App/app/student/widgets/widgetFeatureUnavailable.html","webpack://apps/./App/app/termsAndConditions/termsAndConditions.html","webpack://apps/./App/app/timetable/timetable.html","webpack://apps/./App/app/update/update.html","webpack://apps/./App/app/viewer/addViewer.html","webpack://apps/./App/app/viewer/viewer.html"],"sourcesContent":["var map = {\n\t\"./birthday-card.svg\": 45728,\n\t\"./calendar-outline.svg\": 25405,\n\t\"./child.svg\": 16539,\n\t\"./computer.svg\": 80698,\n\t\"./connectstudent.svg\": 11677,\n\t\"./customer.svg\": 40223,\n\t\"./events.svg\": 59212,\n\t\"./pay.svg\": 97394,\n\t\"./reportcard.svg\": 22847,\n\t\"./roster.svg\": 96555,\n\t\"./school.svg\": 58579,\n\t\"./sick.svg\": 13640,\n\t\"./signin.svg\": 30212,\n\t\"./student.svg\": 20863\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 15602;","var map = {\n\t\"./avatar.png\": 93647,\n\t\"./avatarNoPhoto.png\": 23619,\n\t\"./bpoint.png\": 98785,\n\t\"./commonwealth-bank.png\": 26332,\n\t\"./favicon.ico\": 41351,\n\t\"./landingPage/app-example-images.svg\": 98081,\n\t\"./landingPage/behaviours.svg\": 23244,\n\t\"./landingPage/events.svg\": 45312,\n\t\"./landingPage/image_1.svg\": 60832,\n\t\"./landingPage/image_2.svg\": 70375,\n\t\"./landingPage/image_3.svg\": 49874,\n\t\"./landingPage/image_4.svg\": 43893,\n\t\"./landingPage/image_5.svg\": 51084,\n\t\"./landingPage/image_6.svg\": 42474,\n\t\"./landingPage/reports.svg\": 99909,\n\t\"./main-heading-unauthenticated.jpg\": 44542,\n\t\"./mastercard.png\": 75395,\n\t\"./mobileapplogo.png\": 9596,\n\t\"./qLearnLogo.png\": 69751,\n\t\"./spinner.gif\": 4899,\n\t\"./splash.png\": 89843,\n\t\"./visa.png\": 58666\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 3881;","import \"angular\";\r\nimport \"angular-animate\";\r\nimport \"angular-route\";\r\nimport \"angular-cookies\";\r\nimport \"angular-resource\";\r\nimport \"angular-sanitize\";\r\nimport \"angular-local-storage\";\r\nimport \"angular-loading-bar\";\r\nimport \"moment\";\r\nimport \"pikaday\";\r\nimport \"angular-scroll\";\r\nimport \"angular-toastr\";\r\n\r\nrequire(\"../../node_modules/angularjs-toaster/toaster.js\");\r\n\r\nrequire(\"../vendor/angular-pikaday/angular-pikaday.js\");\r\nrequire(\"../vendor/angular-mask/mask.js\");\r\n\r\nrequire(\"../vendor/angular-highcharts/highcharts-ng.js\");\r\n\r\nrequire(\"../vendor/isteven-multi-select/isteven-multi-select.js\");\r\n\r\nrequire(\"../vendor/modernizr/modernizr.min.js\");\r\n","import angular from \"angular\";\r\n\r\nexport const app = angular.module(\"app\", [\r\n // Angular modules\r\n \"ngAnimate\",\r\n \"ngRoute\",\r\n \"ngSanitize\",\r\n \"ngCookies\",\r\n \"ngResource\",\r\n\r\n // 3rd Party Modules\r\n \"LocalStorageModule\",\r\n \"chieffancypants.loadingBar\",\r\n \"toaster\",\r\n \"highcharts-ng\",\r\n \"angularPikaday\",\r\n\r\n \"duScroll\",\r\n \"ui.mask\",\r\n \"toastr\",\r\n\r\n \"isteven-multi-select\"\r\n]);\r\n","import angular, { ILogService } from \"angular\";\r\nimport { app } from \"./app.module\";\r\nimport { CSRF_HEADER_NAME } from \"./configuration\";\r\nimport { IUrlResolver } from \"./services/urlResolver\";\r\nimport { IDeviceService } from \"./services/deviceServiceProvider\";\r\n\r\napp.config(httpConfigurator);\r\n\r\nfunction httpConfigurator($httpProvider: angular.IHttpProvider) {\r\n \"ngInject\";\r\n if (!$httpProvider.defaults.headers.get) {\r\n $httpProvider.defaults.headers.get = {};\r\n }\r\n\r\n $httpProvider.defaults.withCredentials = true;\r\n $httpProvider.defaults.xsrfCookieName = CSRF_HEADER_NAME;\r\n $httpProvider.defaults.xsrfHeaderName = CSRF_HEADER_NAME;\r\n\r\n $httpProvider.interceptors.push(clientTypeInterceptor);\r\n}\r\n\r\nfunction clientTypeInterceptor($rootScope, csrfTokenProvider, $log: ILogService, deviceService: IDeviceService, urlResolver: IUrlResolver) {\r\n \"ngInject\";\r\n return {\r\n request: async function (config) {\r\n const isApiCall = config.url.indexOf(\"api/\") === 0 || config.url.indexOf(\"/api/\") === 0;\r\n if (!isApiCall) {\r\n return config;\r\n }\r\n\r\n $log.debug(\"Configure Client Type Interceptor.\");\r\n\r\n const crsfToken = csrfTokenProvider.getCsrfToken();\r\n const headers = await getHttpHeaders($rootScope.userSessionId, deviceService, crsfToken);\r\n\r\n for (const [key, value] of headers) {\r\n if (!config.headers[key]) {\r\n config.headers[key] = value;\r\n }\r\n }\r\n\r\n if (deviceService.isMobileApp) {\r\n if (isApiCall) {\r\n config.url = urlResolver.resolve(config.url);\r\n }\r\n }\r\n\r\n $log.debug(`Client Type Interceptor Url : ${config.url}`);\r\n\r\n return config;\r\n }\r\n };\r\n}\r\n\r\nexport async function getHttpHeaders(userSessionId: any, deviceService: IDeviceService, crsfToken?: string) {\r\n const device = await deviceService.getDeviceInfo();\r\n const uuid = await deviceService.getDeviceId();\r\n const appInfo = await deviceService.getAppInfo();\r\n const headers = [\r\n [\"Accept\", \"application/json, text/plain, */*\"],\r\n [\"If-Modified-Since\", \"0\"],\r\n [\"Client-SessionId\", userSessionId],\r\n [\"Content-Type\", \"application/json\"]\r\n ];\r\n\r\n if (crsfToken) {\r\n headers.push([CSRF_HEADER_NAME, crsfToken]);\r\n }\r\n\r\n if (device) {\r\n headers.push([\"Client-Device\", device.model]);\r\n headers.push([\"Client-Platform\", device.platform]);\r\n headers.push([\"Client-Uuid\", uuid]);\r\n headers.push([\"Client-OS-Version\", device.osVersion]);\r\n headers.push([\"Client-App-Version\", appInfo.version]);\r\n } else {\r\n headers.push([\"Client-Platform\", \"Web\"]);\r\n }\r\n\r\n return headers;\r\n}\r\n","import {app} from '../app.module';\r\n\r\nconst templateUrl = require('./accessibility.html');\r\n\r\napp.directive('accessibilityComponent', ()=>({\r\n templateUrl,\r\n scope: true,\r\n replace: true,\r\n restrict: 'E'\r\n}));","export enum VerifyAccountOwnerInvitationCodeResultStatusCode {\r\n Valid = 0,\r\n Invalid = 1,\r\n AlreadyUsed = 2,\r\n AlreadyRegistered = 3\r\n}\r\nexport function verifyAccountOwnerInvitationCodeResultStatusCodeDescription(value: VerifyAccountOwnerInvitationCodeResultStatusCode) {\r\n switch (value) {\r\n case VerifyAccountOwnerInvitationCodeResultStatusCode.Valid:\r\n return `Valid`;\r\n case VerifyAccountOwnerInvitationCodeResultStatusCode.Invalid:\r\n return `Invalid`;\r\n case VerifyAccountOwnerInvitationCodeResultStatusCode.AlreadyUsed:\r\n return `AlreadyUsed`;\r\n case VerifyAccountOwnerInvitationCodeResultStatusCode.AlreadyRegistered:\r\n return `AlreadyRegistered`;\r\n }\r\n}\r\nexport interface IVerifyAccountOwnerInvitationCodeResultStatusCodeDescriptor { value: VerifyAccountOwnerInvitationCodeResultStatusCode; name: string; description: string; }\r\nexport var allVerifyAccountOwnerInvitationCodeResultStatusCode: IVerifyAccountOwnerInvitationCodeResultStatusCodeDescriptor[] = [\r\n { value: VerifyAccountOwnerInvitationCodeResultStatusCode.Valid, name: `Valid`, description: `Valid` },\r\n { value: VerifyAccountOwnerInvitationCodeResultStatusCode.Invalid, name: `Invalid`, description: `Invalid` },\r\n { value: VerifyAccountOwnerInvitationCodeResultStatusCode.AlreadyUsed, name: `AlreadyUsed`, description: `AlreadyUsed` },\r\n { value: VerifyAccountOwnerInvitationCodeResultStatusCode.AlreadyRegistered, name: `AlreadyRegistered`, description: `AlreadyRegistered` }\r\n];\r\n\r\nexport function getVerifyAccountOwnerInvitationCodeResultStatusCodeDescriptor(value: VerifyAccountOwnerInvitationCodeResultStatusCode) {\r\n switch (value) {\r\n case VerifyAccountOwnerInvitationCodeResultStatusCode.Valid:\r\n return { value: VerifyAccountOwnerInvitationCodeResultStatusCode.Valid, name: `Valid`, description: `Valid` };\r\n case VerifyAccountOwnerInvitationCodeResultStatusCode.Invalid:\r\n return { value: VerifyAccountOwnerInvitationCodeResultStatusCode.Invalid, name: `Invalid`, description: `Invalid` };\r\n case VerifyAccountOwnerInvitationCodeResultStatusCode.AlreadyUsed:\r\n return { value: VerifyAccountOwnerInvitationCodeResultStatusCode.AlreadyUsed, name: `AlreadyUsed`, description: `AlreadyUsed` };\r\n case VerifyAccountOwnerInvitationCodeResultStatusCode.AlreadyRegistered:\r\n return { value: VerifyAccountOwnerInvitationCodeResultStatusCode.AlreadyRegistered, name: `AlreadyRegistered`, description: `AlreadyRegistered` };\r\n }\r\n}\r\nexport enum ContactType {\r\n PhoneWork = 0,\r\n PhoneHome = 1,\r\n MobilePersonal = 2,\r\n MobileWork = 3,\r\n Fax = 4,\r\n PhoneInternational = 5,\r\n Email = 6,\r\n NullableMobilePersonal = 7\r\n}\r\nexport function contactTypeDescription(value: ContactType) {\r\n switch (value) {\r\n case ContactType.PhoneWork:\r\n return `Phone Work`;\r\n case ContactType.PhoneHome:\r\n return `Phone Home`;\r\n case ContactType.MobilePersonal:\r\n return `Mobile`;\r\n case ContactType.MobileWork:\r\n return `Mobile Work`;\r\n case ContactType.Fax:\r\n return `Fax`;\r\n case ContactType.PhoneInternational:\r\n return `Phone International`;\r\n case ContactType.Email:\r\n return `Email`;\r\n case ContactType.NullableMobilePersonal:\r\n return `Mobile`;\r\n }\r\n}\r\nexport interface IContactTypeDescriptor { value: ContactType; name: string; description: string; }\r\nexport var allContactType: IContactTypeDescriptor[] = [\r\n { value: ContactType.PhoneWork, name: `PhoneWork`, description: `Phone Work` },\r\n { value: ContactType.PhoneHome, name: `PhoneHome`, description: `Phone Home` },\r\n { value: ContactType.MobilePersonal, name: `MobilePersonal`, description: `Mobile` },\r\n { value: ContactType.MobileWork, name: `MobileWork`, description: `Mobile Work` },\r\n { value: ContactType.Fax, name: `Fax`, description: `Fax` },\r\n { value: ContactType.PhoneInternational, name: `PhoneInternational`, description: `Phone International` },\r\n { value: ContactType.Email, name: `Email`, description: `Email` },\r\n { value: ContactType.NullableMobilePersonal, name: `NullableMobilePersonal`, description: `Mobile` }\r\n];\r\n\r\nexport function getContactTypeDescriptor(value: ContactType) {\r\n switch (value) {\r\n case ContactType.PhoneWork:\r\n return { value: ContactType.PhoneWork, name: `PhoneWork`, description: `Phone Work` };\r\n case ContactType.PhoneHome:\r\n return { value: ContactType.PhoneHome, name: `PhoneHome`, description: `Phone Home` };\r\n case ContactType.MobilePersonal:\r\n return { value: ContactType.MobilePersonal, name: `MobilePersonal`, description: `Mobile` };\r\n case ContactType.MobileWork:\r\n return { value: ContactType.MobileWork, name: `MobileWork`, description: `Mobile Work` };\r\n case ContactType.Fax:\r\n return { value: ContactType.Fax, name: `Fax`, description: `Fax` };\r\n case ContactType.PhoneInternational:\r\n return { value: ContactType.PhoneInternational, name: `PhoneInternational`, description: `Phone International` };\r\n case ContactType.Email:\r\n return { value: ContactType.Email, name: `Email`, description: `Email` };\r\n case ContactType.NullableMobilePersonal:\r\n return { value: ContactType.NullableMobilePersonal, name: `NullableMobilePersonal`, description: `Mobile` };\r\n }\r\n}\r\nexport enum EnrolmentStatus {\r\n Active = 0,\r\n Deceased = 1,\r\n Exempt = 2,\r\n Future = 3,\r\n Inactive = 4,\r\n Left = 5,\r\n NonAttendee = 6\r\n}\r\nexport function enrolmentStatusDescription(value: EnrolmentStatus) {\r\n switch (value) {\r\n case EnrolmentStatus.Active:\r\n return `A`;\r\n case EnrolmentStatus.Deceased:\r\n return `D`;\r\n case EnrolmentStatus.Exempt:\r\n return `E`;\r\n case EnrolmentStatus.Future:\r\n return `F`;\r\n case EnrolmentStatus.Inactive:\r\n return `I`;\r\n case EnrolmentStatus.Left:\r\n return `L`;\r\n case EnrolmentStatus.NonAttendee:\r\n return `N`;\r\n }\r\n}\r\nexport interface IEnrolmentStatusDescriptor { value: EnrolmentStatus; name: string; description: string; }\r\nexport var allEnrolmentStatus: IEnrolmentStatusDescriptor[] = [\r\n { value: EnrolmentStatus.Active, name: `Active`, description: `A` },\r\n { value: EnrolmentStatus.Deceased, name: `Deceased`, description: `D` },\r\n { value: EnrolmentStatus.Exempt, name: `Exempt`, description: `E` },\r\n { value: EnrolmentStatus.Future, name: `Future`, description: `F` },\r\n { value: EnrolmentStatus.Inactive, name: `Inactive`, description: `I` },\r\n { value: EnrolmentStatus.Left, name: `Left`, description: `L` },\r\n { value: EnrolmentStatus.NonAttendee, name: `NonAttendee`, description: `N` }\r\n];\r\n\r\nexport function getEnrolmentStatusDescriptor(value: EnrolmentStatus) {\r\n switch (value) {\r\n case EnrolmentStatus.Active:\r\n return { value: EnrolmentStatus.Active, name: `Active`, description: `A` };\r\n case EnrolmentStatus.Deceased:\r\n return { value: EnrolmentStatus.Deceased, name: `Deceased`, description: `D` };\r\n case EnrolmentStatus.Exempt:\r\n return { value: EnrolmentStatus.Exempt, name: `Exempt`, description: `E` };\r\n case EnrolmentStatus.Future:\r\n return { value: EnrolmentStatus.Future, name: `Future`, description: `F` };\r\n case EnrolmentStatus.Inactive:\r\n return { value: EnrolmentStatus.Inactive, name: `Inactive`, description: `I` };\r\n case EnrolmentStatus.Left:\r\n return { value: EnrolmentStatus.Left, name: `Left`, description: `L` };\r\n case EnrolmentStatus.NonAttendee:\r\n return { value: EnrolmentStatus.NonAttendee, name: `NonAttendee`, description: `N` };\r\n }\r\n}\r\nexport enum EventType {\r\n Exam = 0,\r\n Assessment = 1,\r\n Excursion = 2,\r\n School = 3\r\n}\r\nexport function eventTypeDescription(value: EventType) {\r\n switch (value) {\r\n case EventType.Exam:\r\n return `Exam`;\r\n case EventType.Assessment:\r\n return `Assessment`;\r\n case EventType.Excursion:\r\n return `Excursion`;\r\n case EventType.School:\r\n return `School`;\r\n }\r\n}\r\nexport interface IEventTypeDescriptor { value: EventType; name: string; description: string; }\r\nexport var allEventType: IEventTypeDescriptor[] = [\r\n { value: EventType.Exam, name: `Exam`, description: `Exam` },\r\n { value: EventType.Assessment, name: `Assessment`, description: `Assessment` },\r\n { value: EventType.Excursion, name: `Excursion`, description: `Excursion` },\r\n { value: EventType.School, name: `School`, description: `School` }\r\n];\r\n\r\nexport function getEventTypeDescriptor(value: EventType) {\r\n switch (value) {\r\n case EventType.Exam:\r\n return { value: EventType.Exam, name: `Exam`, description: `Exam` };\r\n case EventType.Assessment:\r\n return { value: EventType.Assessment, name: `Assessment`, description: `Assessment` };\r\n case EventType.Excursion:\r\n return { value: EventType.Excursion, name: `Excursion`, description: `Excursion` };\r\n case EventType.School:\r\n return { value: EventType.School, name: `School`, description: `School` };\r\n }\r\n}\r\nexport enum MfaMedium {\r\n SMS = 1,\r\n Email = 2\r\n}\r\nexport function mfaMediumDescription(value: MfaMedium) {\r\n switch (value) {\r\n case MfaMedium.SMS:\r\n return `SMS`;\r\n case MfaMedium.Email:\r\n return `Email`;\r\n }\r\n}\r\nexport interface IMfaMediumDescriptor { value: MfaMedium; name: string; description: string; }\r\nexport var allMfaMedium: IMfaMediumDescriptor[] = [\r\n { value: MfaMedium.SMS, name: `SMS`, description: `SMS` },\r\n { value: MfaMedium.Email, name: `Email`, description: `Email` }\r\n];\r\n\r\nexport function getMfaMediumDescriptor(value: MfaMedium) {\r\n switch (value) {\r\n case MfaMedium.SMS:\r\n return { value: MfaMedium.SMS, name: `SMS`, description: `SMS` };\r\n case MfaMedium.Email:\r\n return { value: MfaMedium.Email, name: `Email`, description: `Email` };\r\n }\r\n}\r\nexport enum Feature {\r\n EnrolmentHistory = 0,\r\n Behaviour = 1,\r\n Attendance = 2,\r\n Timetable = 3,\r\n Finance = 4,\r\n AcademicReports = 5,\r\n StudentDetails = 6,\r\n StudentPhoto = 7,\r\n AssessmentPlanner = 8,\r\n ExamTimetable = 9,\r\n UpcomingEvents = 10,\r\n ConsentManagement = 11\r\n}\r\nexport function featureDescription(value: Feature) {\r\n switch (value) {\r\n case Feature.EnrolmentHistory:\r\n return `Enrolment History`;\r\n case Feature.Behaviour:\r\n return `Behaviour`;\r\n case Feature.Attendance:\r\n return `Attendance`;\r\n case Feature.Timetable:\r\n return `Timetable`;\r\n case Feature.Finance:\r\n return `Finance`;\r\n case Feature.AcademicReports:\r\n return `Academic Reports`;\r\n case Feature.StudentDetails:\r\n return `Student Details`;\r\n case Feature.StudentPhoto:\r\n return `Student Photo`;\r\n case Feature.AssessmentPlanner:\r\n return `Assessment Planner`;\r\n case Feature.ExamTimetable:\r\n return `Exam Timetable`;\r\n case Feature.UpcomingEvents:\r\n return `Upcoming Events`;\r\n case Feature.ConsentManagement:\r\n return `Consent Requests`;\r\n }\r\n}\r\nexport interface IFeatureDescriptor { value: Feature; name: string; description: string; }\r\nexport var allFeature: IFeatureDescriptor[] = [\r\n { value: Feature.EnrolmentHistory, name: `EnrolmentHistory`, description: `Enrolment History` },\r\n { value: Feature.Behaviour, name: `Behaviour`, description: `Behaviour` },\r\n { value: Feature.Attendance, name: `Attendance`, description: `Attendance` },\r\n { value: Feature.Timetable, name: `Timetable`, description: `Timetable` },\r\n { value: Feature.Finance, name: `Finance`, description: `Finance` },\r\n { value: Feature.AcademicReports, name: `AcademicReports`, description: `Academic Reports` },\r\n { value: Feature.StudentDetails, name: `StudentDetails`, description: `Student Details` },\r\n { value: Feature.StudentPhoto, name: `StudentPhoto`, description: `Student Photo` },\r\n { value: Feature.AssessmentPlanner, name: `AssessmentPlanner`, description: `Assessment Planner` },\r\n { value: Feature.ExamTimetable, name: `ExamTimetable`, description: `Exam Timetable` },\r\n { value: Feature.UpcomingEvents, name: `UpcomingEvents`, description: `Upcoming Events` },\r\n { value: Feature.ConsentManagement, name: `ConsentManagement`, description: `Consent Requests` }\r\n];\r\n\r\nexport function getFeatureDescriptor(value: Feature) {\r\n switch (value) {\r\n case Feature.EnrolmentHistory:\r\n return { value: Feature.EnrolmentHistory, name: `EnrolmentHistory`, description: `Enrolment History` };\r\n case Feature.Behaviour:\r\n return { value: Feature.Behaviour, name: `Behaviour`, description: `Behaviour` };\r\n case Feature.Attendance:\r\n return { value: Feature.Attendance, name: `Attendance`, description: `Attendance` };\r\n case Feature.Timetable:\r\n return { value: Feature.Timetable, name: `Timetable`, description: `Timetable` };\r\n case Feature.Finance:\r\n return { value: Feature.Finance, name: `Finance`, description: `Finance` };\r\n case Feature.AcademicReports:\r\n return { value: Feature.AcademicReports, name: `AcademicReports`, description: `Academic Reports` };\r\n case Feature.StudentDetails:\r\n return { value: Feature.StudentDetails, name: `StudentDetails`, description: `Student Details` };\r\n case Feature.StudentPhoto:\r\n return { value: Feature.StudentPhoto, name: `StudentPhoto`, description: `Student Photo` };\r\n case Feature.AssessmentPlanner:\r\n return { value: Feature.AssessmentPlanner, name: `AssessmentPlanner`, description: `Assessment Planner` };\r\n case Feature.ExamTimetable:\r\n return { value: Feature.ExamTimetable, name: `ExamTimetable`, description: `Exam Timetable` };\r\n case Feature.UpcomingEvents:\r\n return { value: Feature.UpcomingEvents, name: `UpcomingEvents`, description: `Upcoming Events` };\r\n case Feature.ConsentManagement:\r\n return { value: Feature.ConsentManagement, name: `ConsentManagement`, description: `Consent Requests` };\r\n }\r\n}\r\nexport enum OneSchoolPaymentStatus {\r\n Open = 0,\r\n Closed = 1\r\n}\r\nexport function oneSchoolPaymentStatusDescription(value: OneSchoolPaymentStatus) {\r\n switch (value) {\r\n case OneSchoolPaymentStatus.Open:\r\n return `Open`;\r\n case OneSchoolPaymentStatus.Closed:\r\n return `Closed`;\r\n }\r\n}\r\nexport interface IOneSchoolPaymentStatusDescriptor { value: OneSchoolPaymentStatus; name: string; description: string; }\r\nexport var allOneSchoolPaymentStatus: IOneSchoolPaymentStatusDescriptor[] = [\r\n { value: OneSchoolPaymentStatus.Open, name: `Open`, description: `Open` },\r\n { value: OneSchoolPaymentStatus.Closed, name: `Closed`, description: `Closed` }\r\n];\r\n\r\nexport function getOneSchoolPaymentStatusDescriptor(value: OneSchoolPaymentStatus) {\r\n switch (value) {\r\n case OneSchoolPaymentStatus.Open:\r\n return { value: OneSchoolPaymentStatus.Open, name: `Open`, description: `Open` };\r\n case OneSchoolPaymentStatus.Closed:\r\n return { value: OneSchoolPaymentStatus.Closed, name: `Closed`, description: `Closed` };\r\n }\r\n}\r\nexport enum ConsentResponseState {\r\n Pending = 1,\r\n Granted = 2,\r\n Denied = 3,\r\n Mixed = 4,\r\n Withdrawn = 5,\r\n Expired = 6\r\n}\r\nexport function consentResponseStateDescription(value: ConsentResponseState) {\r\n switch (value) {\r\n case ConsentResponseState.Pending:\r\n return `Pending`;\r\n case ConsentResponseState.Granted:\r\n return `Granted`;\r\n case ConsentResponseState.Denied:\r\n return `Denied`;\r\n case ConsentResponseState.Mixed:\r\n return `Mixed`;\r\n case ConsentResponseState.Withdrawn:\r\n return `Withdrawn`;\r\n case ConsentResponseState.Expired:\r\n return `Expired`;\r\n }\r\n}\r\nexport interface IConsentResponseStateDescriptor { value: ConsentResponseState; name: string; description: string; }\r\nexport var allConsentResponseState: IConsentResponseStateDescriptor[] = [\r\n { value: ConsentResponseState.Pending, name: `Pending`, description: `Pending` },\r\n { value: ConsentResponseState.Granted, name: `Granted`, description: `Granted` },\r\n { value: ConsentResponseState.Denied, name: `Denied`, description: `Denied` },\r\n { value: ConsentResponseState.Mixed, name: `Mixed`, description: `Mixed` },\r\n { value: ConsentResponseState.Withdrawn, name: `Withdrawn`, description: `Withdrawn` },\r\n { value: ConsentResponseState.Expired, name: `Expired`, description: `Expired` }\r\n];\r\n\r\nexport function getConsentResponseStateDescriptor(value: ConsentResponseState) {\r\n switch (value) {\r\n case ConsentResponseState.Pending:\r\n return { value: ConsentResponseState.Pending, name: `Pending`, description: `Pending` };\r\n case ConsentResponseState.Granted:\r\n return { value: ConsentResponseState.Granted, name: `Granted`, description: `Granted` };\r\n case ConsentResponseState.Denied:\r\n return { value: ConsentResponseState.Denied, name: `Denied`, description: `Denied` };\r\n case ConsentResponseState.Mixed:\r\n return { value: ConsentResponseState.Mixed, name: `Mixed`, description: `Mixed` };\r\n case ConsentResponseState.Withdrawn:\r\n return { value: ConsentResponseState.Withdrawn, name: `Withdrawn`, description: `Withdrawn` };\r\n case ConsentResponseState.Expired:\r\n return { value: ConsentResponseState.Expired, name: `Expired`, description: `Expired` };\r\n }\r\n}\r\nexport enum ResultStatusCode {\r\n Valid = 0,\r\n Invalid = 1,\r\n CodeAlreadyUsed = 2,\r\n UserNotAccountOwner = 3\r\n}\r\nexport function resultStatusCodeDescription(value: ResultStatusCode) {\r\n switch (value) {\r\n case ResultStatusCode.Valid:\r\n return `Valid`;\r\n case ResultStatusCode.Invalid:\r\n return `Invalid`;\r\n case ResultStatusCode.CodeAlreadyUsed:\r\n return `CodeAlreadyUsed`;\r\n case ResultStatusCode.UserNotAccountOwner:\r\n return `UserNotAccountOwner`;\r\n }\r\n}\r\nexport interface IResultStatusCodeDescriptor { value: ResultStatusCode; name: string; description: string; }\r\nexport var allResultStatusCode: IResultStatusCodeDescriptor[] = [\r\n { value: ResultStatusCode.Valid, name: `Valid`, description: `Valid` },\r\n { value: ResultStatusCode.Invalid, name: `Invalid`, description: `Invalid` },\r\n { value: ResultStatusCode.CodeAlreadyUsed, name: `CodeAlreadyUsed`, description: `CodeAlreadyUsed` },\r\n { value: ResultStatusCode.UserNotAccountOwner, name: `UserNotAccountOwner`, description: `UserNotAccountOwner` }\r\n];\r\n\r\nexport function getResultStatusCodeDescriptor(value: ResultStatusCode) {\r\n switch (value) {\r\n case ResultStatusCode.Valid:\r\n return { value: ResultStatusCode.Valid, name: `Valid`, description: `Valid` };\r\n case ResultStatusCode.Invalid:\r\n return { value: ResultStatusCode.Invalid, name: `Invalid`, description: `Invalid` };\r\n case ResultStatusCode.CodeAlreadyUsed:\r\n return { value: ResultStatusCode.CodeAlreadyUsed, name: `CodeAlreadyUsed`, description: `CodeAlreadyUsed` };\r\n case ResultStatusCode.UserNotAccountOwner:\r\n return { value: ResultStatusCode.UserNotAccountOwner, name: `UserNotAccountOwner`, description: `UserNotAccountOwner` };\r\n }\r\n}\r\nexport enum StudentState {\r\n Invalid = 0,\r\n MatchAcceptedApprovalPending = 1,\r\n AlreadyMatchedAndApproved = 2,\r\n AlreadyMatchedApprovalPending = 3\r\n}\r\nexport function studentStateDescription(value: StudentState) {\r\n switch (value) {\r\n case StudentState.Invalid:\r\n return `Invalid`;\r\n case StudentState.MatchAcceptedApprovalPending:\r\n return `MatchAcceptedApprovalPending`;\r\n case StudentState.AlreadyMatchedAndApproved:\r\n return `AlreadyMatchedAndApproved`;\r\n case StudentState.AlreadyMatchedApprovalPending:\r\n return `AlreadyMatchedApprovalPending`;\r\n }\r\n}\r\nexport interface IStudentStateDescriptor { value: StudentState; name: string; description: string; }\r\nexport var allStudentState: IStudentStateDescriptor[] = [\r\n { value: StudentState.Invalid, name: `Invalid`, description: `Invalid` },\r\n { value: StudentState.MatchAcceptedApprovalPending, name: `MatchAcceptedApprovalPending`, description: `MatchAcceptedApprovalPending` },\r\n { value: StudentState.AlreadyMatchedAndApproved, name: `AlreadyMatchedAndApproved`, description: `AlreadyMatchedAndApproved` },\r\n { value: StudentState.AlreadyMatchedApprovalPending, name: `AlreadyMatchedApprovalPending`, description: `AlreadyMatchedApprovalPending` }\r\n];\r\n\r\nexport function getStudentStateDescriptor(value: StudentState) {\r\n switch (value) {\r\n case StudentState.Invalid:\r\n return { value: StudentState.Invalid, name: `Invalid`, description: `Invalid` };\r\n case StudentState.MatchAcceptedApprovalPending:\r\n return { value: StudentState.MatchAcceptedApprovalPending, name: `MatchAcceptedApprovalPending`, description: `MatchAcceptedApprovalPending` };\r\n case StudentState.AlreadyMatchedAndApproved:\r\n return { value: StudentState.AlreadyMatchedAndApproved, name: `AlreadyMatchedAndApproved`, description: `AlreadyMatchedAndApproved` };\r\n case StudentState.AlreadyMatchedApprovalPending:\r\n return { value: StudentState.AlreadyMatchedApprovalPending, name: `AlreadyMatchedApprovalPending`, description: `AlreadyMatchedApprovalPending` };\r\n }\r\n}\r\n","import { ILocationService, ILogService, IQService } from \"angular\";\r\nimport { app } from \"../app.module\";\r\nimport { YEAR_LEVELS } from \"../configuration\";\r\nimport { ICommonService } from \"../services/common\";\r\nimport { IDataContext } from \"../services/dataContext\";\r\nimport templateUrl from \"./addStudent.html\";\r\nimport { StudentState } from \"../models/enums\";\r\n\r\nconst controllerId = \"addStudent\";\r\n\r\napp.directive(`${controllerId}Component`, () => ({\r\n templateUrl,\r\n scope: true,\r\n controller: addStudent,\r\n controllerAs: \"vm\",\r\n restrict: \"E\",\r\n replace: true\r\n}));\r\n\r\nfunction addStudent(common: ICommonService, dataContext: IDataContext, $scope, $q: IQService, $location: ILocationService, $log: ILogService) {\r\n \"ngInject\";\r\n var vm = this,\r\n user = null;\r\n\r\n vm.eqid = \"\";\r\n vm.schools = [];\r\n vm.selectedSchool = null;\r\n vm.YEAR_LEVELS = YEAR_LEVELS;\r\n vm.selectedYearLevel = null;\r\n vm.save = save;\r\n vm.cancel = cancel;\r\n vm.addAnotherStudent = addAnotherStudent;\r\n vm.busy = false;\r\n vm.showWelcomeText = false;\r\n vm.error = false;\r\n vm.submitted = false;\r\n vm.alreadyApproved = false;\r\n vm.alreadyPending = false;\r\n\r\n common.activateController([initialiseUser()], controllerId).then(function () {});\r\n\r\n function initialiseUser() {\r\n return dataContext.getData().then(function (data) {\r\n user = data;\r\n vm.schools = data.schools;\r\n vm.showWelcomeText = wasAutoRedirectedToThisPage();\r\n });\r\n }\r\n\r\n function wasAutoRedirectedToThisPage() {\r\n return user.redirectToAddStudentPage;\r\n }\r\n\r\n function setInitialFocus() {\r\n document.getElementById(\"eqid\").focus();\r\n }\r\n\r\n function save(form) {\r\n if (!form.$valid) return;\r\n if (vm.busy) return;\r\n\r\n const deferred = $q.defer();\r\n\r\n vm.busy = true;\r\n vm.error = false;\r\n vm.submitted = false;\r\n vm.alreadyApproved = false;\r\n vm.alreadyPending = false;\r\n\r\n dataContext\r\n .saveStudentRelation({\r\n eqid: vm.eqid,\r\n schoolId: vm.selectedSchool.id,\r\n yearLevel: vm.selectedYearLevel\r\n })\r\n .then(responseData => {\r\n vm.studentName = responseData.name;\r\n vm.submitted = responseData.state === StudentState.MatchAcceptedApprovalPending;\r\n vm.alreadyApproved = responseData.state === StudentState.AlreadyMatchedAndApproved;\r\n vm.alreadyPending = responseData.state === StudentState.AlreadyMatchedApprovalPending;\r\n dontAutoRedirectToAddStudent();\r\n\r\n if (responseData.state !== StudentState.MatchAcceptedApprovalPending) {\r\n return;\r\n }\r\n if (!user.pendingStudents) {\r\n user.pendingStudents = [];\r\n }\r\n user.pendingStudents.push({\r\n id: vm.eqid,\r\n name: responseData.name,\r\n schoolName: vm.selectedSchool.name,\r\n yearLevelName: vm.selectedYearLevel\r\n });\r\n })\r\n .catch(response => {\r\n vm.error = true;\r\n $log.error(\"Error adding a new student\", response);\r\n })\r\n .finally(() => {\r\n vm.busy = false;\r\n deferred.resolve();\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n function addAnotherStudent() {\r\n vm.eqid = \"\";\r\n vm.selectedSchool = null;\r\n vm.selectedYearLevel = null;\r\n vm.submitted = false;\r\n vm.showWelcomeText = false;\r\n\r\n dontAutoRedirectToAddStudent();\r\n\r\n $scope.addForm.$setPristine();\r\n\r\n setInitialFocus();\r\n }\r\n\r\n function cancel() {\r\n dontAutoRedirectToAddStudent();\r\n $location.path(\"/\");\r\n }\r\n\r\n function dontAutoRedirectToAddStudent() {\r\n user.cancelRedirectToAddStudentPage();\r\n }\r\n}\r\n","import { ILocationService, ILogService, IPromise, IQService } from \"angular\";\r\nimport { IApiService } from \"../services/apiServiceProvider\";\r\nimport { IDeviceService } from \"../services/deviceServiceProvider\";\r\nimport { ILocalStorageService } from \"angular-local-storage\";\r\n\r\nexport interface ICheckerService {\r\n check(modules: string[], type: \"outage\" | \"alert\"): IPromise;\r\n getOutage(id: string): IPromise;\r\n}\r\n\r\nexport function check($location: ILocationService, $log: ILogService, $q: IQService, $routeParams: angular.route.IRouteParamsService, apiService: IApiService, deviceService: IDeviceService,\r\n localStorageService: ILocalStorageService) : ICheckerService {\r\n const platform = deviceService.getPlatform();\r\n const outages = {};\r\n const checkerStatus = { checking: false };\r\n\r\n return {\r\n check: (modules: string[], type: \"outage\" | \"alert\") => {\r\n const locationUrl: string = $location.absUrl();\r\n if (checkerStatus.checking) {\r\n $log.info(`Outage location url: ${locationUrl}, not further redirect required.`);\r\n return;\r\n }\r\n const hasModulesToCheck = modules && modules.length > 0;\r\n checkerStatus.checking = hasModulesToCheck;\r\n const future = $q.defer();\r\n\r\n if (hasModulesToCheck) {\r\n const promises = modules.map(\r\n module => type === \"outage\"\r\n ? apiService.getOutage(platform, module)\r\n : apiService.getAlert(platform, module));\r\n\r\n $q.all(promises).then(\r\n responses => {\r\n var outage = modules\r\n .map(module =>\r\n responses\r\n .map(response => response.data)\r\n .filter(data => data)\r\n .find(data => data.moduleName === module)\r\n )\r\n .filter(data => data)[0];\r\n if (outage) {\r\n if (type === \"alert\" && localStorageService.get(outage.id)) {\r\n $log.info(`User has seen system alert ${outage.id} already`);\r\n } else {\r\n outages[outage.id] = outage;\r\n let search: { id; studentId } | { id };\r\n if ($routeParams.studentId) {\r\n search = { id: outage.id, studentId: $routeParams.studentId };\r\n } else {\r\n search = { id: outage.id };\r\n }\r\n\r\n checkerStatus.checking = false;\r\n if(type === \"outage\") {\r\n $location.path(\"/outage\").search(search);\r\n } else {\r\n $location.path(\"/notice\").search(search);\r\n }\r\n }\r\n }\r\n checkerStatus.checking = false;\r\n future.resolve({});\r\n },\r\n () => {\r\n checkerStatus.checking = false;\r\n future.resolve({});\r\n }\r\n );\r\n } else {\r\n future.resolve({});\r\n }\r\n\r\n return future.promise;\r\n },\r\n getOutage: id => {\r\n var future = $q.defer();\r\n\r\n if (outages[id]) {\r\n future.resolve(outages[id]);\r\n } else {\r\n apiService.getOutageById(id).then(response => {\r\n outages[id] = response.data;\r\n future.resolve(response.data);\r\n });\r\n }\r\n\r\n return future.promise;\r\n }\r\n };\r\n}\r\n","import { ILocationService, ILogService, IQService, route } from \"angular\";\r\nimport { app } from \"../app.module\";\r\nimport { ICheckerService, check } from \"../tools/outageChecker\";\r\nimport { IDeviceService } from \"../services/deviceServiceProvider\";\r\nimport { IApiService } from \"../services/apiServiceProvider\";\r\nimport templateUrl from \"./alert.html\";\r\nimport { ILocalStorageService } from \"angular-local-storage\";\r\n\r\napp.factory(\"systemAlertChecker\", systemAlertCheckerFactory);\r\n\r\nfunction systemAlertCheckerFactory($q: IQService, $location: ILocationService, $log: ILogService, $routeParams: route.IRouteParamsService, deviceService: IDeviceService, apiService: IApiService, localStorageService: ILocalStorageService) {\r\n \"ngInject\";\r\n return check($location, $log, $q, $routeParams, apiService, deviceService, localStorageService);\r\n}\r\n\r\napp.directive(\"systemAlertComponent\", () => ({\r\n templateUrl,\r\n controller: systemAlert,\r\n controllerAs: \"vm\",\r\n restrict: \"E\",\r\n replace: true,\r\n scope: true\r\n}));\r\n\r\nfunction systemAlert($routeParams: angular.route.IRouteParamsService, systemAlertChecker: ICheckerService, $location: ILocationService, localStorageService: ILocalStorageService) {\r\n const id = $routeParams.id;\r\n\r\n this.studentId = $routeParams.studentId;\r\n\r\n systemAlertChecker.getOutage(id).then(data => {\r\n this.data = data;\r\n });\r\n\r\n this.next = () => {\r\n localStorageService.set(id, true);\r\n $location.url($routeParams.next || \"/\");\r\n };\r\n}\r\n","import { app } from \"../app.module\";\r\nimport { FEATURES } from \"../configuration\";\r\nimport { Enrolment } from \"../models/enrolment\";\r\nimport { EnrolmentStatus } from \"../models/enums\";\r\nimport { Student } from \"../models/student\";\r\nimport { User } from \"../models/user\";\r\nimport { AuthorisationService } from \"../services/authorisationService\";\r\nimport { IContextLoader, StudentContext } from \"../services/contextLoader\";\r\n\r\nimport templateUrl from \"./attendance.html\";\r\n\r\nconst controllerId = \"attendance\";\r\napp.directive(`${controllerId}Component`, () => ({\r\n templateUrl,\r\n controller: AttendanceComponent,\r\n controllerAs: \"vm\",\r\n restrict: \"E\",\r\n scope: true,\r\n replace: false\r\n}));\r\n\r\nclass AttendanceComponent implements StudentContext {\r\n user: User;\r\n student: Student;\r\n enrolment: Enrolment;\r\n\r\n chartConfig: any;\r\n absenceTotal: number[];\r\n showAttendanceRecord: boolean;\r\n isFeatureAvailable: boolean;\r\n\r\n constructor(\r\n $routeParams: angular.route.IRouteParamsService,\r\n contextLoader: IContextLoader,\r\n authorisationService: AuthorisationService,\r\n private $filter: ng.IFilterService\r\n ) {\r\n \"ngInject\";\r\n this.showAttendanceRecord = false;\r\n this.isFeatureAvailable = true;\r\n\r\n contextLoader.load(this, $routeParams, \"student\").then(() => {\r\n if (!authorisationService.hasFeatureAccess(this, FEATURES.ATTENDANCE)) {\r\n this.isFeatureAvailable = false;\r\n return;\r\n }\r\n\r\n this.absenceTotal = this.enrolment.absenceTotals.map(_ => _.daysAbsent);\r\n\r\n this.showAttendanceRecord = this.enrolment.attendancePercentageThisCalendarYear != null;\r\n\r\n // FutureStudentNoAbsence - Currently, Absence cannot be recorded for Future Student\r\n this.isFeatureAvailable = this.enrolment?.enrolmentStatus === EnrolmentStatus.Active;\r\n\r\n this.initializeChart();\r\n });\r\n }\r\n\r\n initializeChart() {\r\n var self = this;\r\n this.chartConfig = {\r\n options: {\r\n chart: {\r\n type: \"column\",\r\n margin: [50, 50, 70, 50]\r\n },\r\n tooltip: {\r\n formatter: function () {\r\n return self.chartTooltip(this);\r\n },\r\n useHTML: true,\r\n shared: true\r\n },\r\n legend: {\r\n enabled: false\r\n }\r\n },\r\n series: [\r\n {\r\n name: \"Absence\",\r\n data: this.absenceTotal\r\n }\r\n ],\r\n xAxis: {\r\n categories: [\"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\"]\r\n },\r\n yAxis: {\r\n title: {\r\n text: \"\"\r\n },\r\n allowDecimals: false\r\n },\r\n title: {\r\n text: \"\"\r\n },\r\n loading: false\r\n };\r\n }\r\n\r\n getDayOfWeek(name) {\r\n switch (name) {\r\n case \"Monday\":\r\n return 1;\r\n case \"Tuesday\":\r\n return 2;\r\n case \"Wednesday\":\r\n return 3;\r\n case \"Thursday\":\r\n return 4;\r\n case \"Friday\":\r\n return 5;\r\n default:\r\n return 0;\r\n }\r\n }\r\n\r\n chartTooltip(point) {\r\n var dayOfWeek = this.getDayOfWeek(point.x),\r\n totalDays = 0,\r\n tooltip = $('
    ');\r\n\r\n this.enrolment.absenceRecords.forEach(record => {\r\n // TODO: this probably should not be hard-coded\r\n const late = \"Late (NP)\";\r\n const early = \"Early (NP)\";\r\n\r\n // NOT SURE WHY but dayOfWeek is a string\r\n if (parseInt(record.dayOfWeek) != dayOfWeek) {\r\n return;\r\n }\r\n\r\n // when a student came late or left early, it does not count as an absence\r\n // when aggregating by days (they could have been late only 10 minutes)\r\n if (record.absencePeriod !== late && record.absencePeriod !== early) {\r\n // add date to the tooltip\r\n var day = $(\"
  • \").html(this.$filter(\"date\")(record.absenceDate, \"dd/MM/yyyy\"));\r\n\r\n tooltip.find(\"ul.days\").append(day);\r\n\r\n // increase absent days count\r\n totalDays += record.isFullDay ? 1 : 0.5;\r\n }\r\n });\r\n\r\n tooltip.find(\".header\").html(totalDays + (totalDays == 1 ? \" day\" : \" days\"));\r\n\r\n return tooltip.wrap(\"
    \").parent().html();\r\n }\r\n\r\n toggle(absenceRecord, expand) {\r\n this.enrolment.absenceRecords.forEach((x: any) => (x.expanded = false));\r\n absenceRecord.expanded = expand;\r\n }\r\n\r\n loadImage(imagePath: string) {\r\n return require(\"../../content/img/\" + imagePath);\r\n }\r\n}\r\n","import moment, { Moment } from \"moment\";\r\n\r\nexport const isoDateFormat = \"YYYY-MM-DD\";\r\nexport const auDateFormat = \"DD/MM/YYYY\";\r\n\r\nexport function parseDate(date) {\r\n if (date == null) return null;\r\n let utcFormatRegex = new RegExp(\"\\\\d{4}-[01]\\\\d-[0-3]\\\\dT[0-2]\\\\d:[0-5]\\\\d:[0-5]\\\\d\\\\.\\\\d+([+-][0-2]\\\\d:[0-5]\\\\d|Z)\");\r\n\r\n let parsedDate: moment.Moment;\r\n\r\n if (typeof date === \"object\") {\r\n parsedDate = moment(date);\r\n } else if (typeof date === \"string\") {\r\n let trimmedDate = date;\r\n\r\n while (trimmedDate[0] === '\"') {\r\n trimmedDate = trimmedDate.substring(1);\r\n }\r\n\r\n while (trimmedDate[trimmedDate.length - 1] === '\"') {\r\n trimmedDate = trimmedDate.substring(0, trimmedDate.length - 1);\r\n }\r\n\r\n if (utcFormatRegex.test(trimmedDate)) {\r\n // date in long UTC format (e.g. 2019-11-20T14:00:00.00Z), we just need the date part\r\n parsedDate = moment.utc(trimmedDate);\r\n } else {\r\n // date in short ISO or AU format\r\n parsedDate = moment(trimmedDate, [isoDateFormat, auDateFormat]);\r\n }\r\n }\r\n\r\n if (parsedDate && parsedDate.isValid()) {\r\n return parsedDate;\r\n } else {\r\n return null;\r\n }\r\n}\r\n\r\nexport function formatDateToShortMonthDay(date) {\r\n return moment(date).format(\"D MMM\");\r\n}\r\n\r\nexport function formatDateTimeMomentToIcsDate(dateTimeMoment: Moment) {\r\n return dateTimeMoment.utc(false).format(\"YYYYMMDDTHHmmss[Z]\");\r\n}\r\n\r\nexport function formatDateTimeToIcsDate(date: Date, time: string) {\r\n const timeMoment = moment(time, \"hh:mm A\");\r\n const dateMoment = moment(date);\r\n\r\n const dateTimeMoment = dateMoment.set({\r\n hour: timeMoment.hour(),\r\n minute: timeMoment.minute(),\r\n second: timeMoment.second()\r\n });\r\n\r\n return formatDateTimeMomentToIcsDate(dateTimeMoment);\r\n}\r\n","import moment from \"moment\";\r\n\r\nconst DAYS = [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"];\r\n\r\nexport function isWeekend() {\r\n var dayOfWeek = getDayOfTheWeek();\r\n return dayOfWeek === \"Saturday\" || dayOfWeek === \"Sunday\";\r\n}\r\n\r\nexport function getToday() {\r\n var d = new Date();\r\n d.setHours(0, 0, 0, 0);\r\n return d;\r\n}\r\n\r\nexport function isToday(date) {\r\n var today = getToday();\r\n return date.getTime() === today.getTime();\r\n}\r\n\r\nexport function isTomorrow(date) {\r\n var today = getToday();\r\n var tomorrow = new Date(today.getTime() + 24 * 60 * 60 * 1000);\r\n return date.getTime() === tomorrow.getTime();\r\n}\r\n\r\nexport function getDayOfTheWeek(date?: Date) {\r\n var todaysDayIndex = getDayOfTheWeekIndex(date);\r\n return DAYS[todaysDayIndex];\r\n}\r\n\r\nexport function getDayOfTheWeekIndex(date?: Date) {\r\n var todaysDayIndex = (date || new Date()).getDay();\r\n return todaysDayIndex;\r\n}\r\n\r\nexport function getDayOfWeekLabel(day) {\r\n var date = new Date(day.date);\r\n if (isToday(date)) return \"Today\";\r\n if (isTomorrow(date)) return \"Tomorrow\";\r\n return getDayOfTheWeek(date);\r\n}\r\n\r\nexport function getTimeOptions(intervalInMinutes: number = 15) {\r\n const startDate = moment().startOf(\"day\").hour(7);\r\n const endDate = moment().startOf(\"day\").hour(17);\r\n const options: Date[] = [];\r\n\r\n let currentDate = moment(startDate);\r\n\r\n while (currentDate.isSameOrBefore(endDate)) {\r\n options.push(currentDate.toDate());\r\n currentDate.add(intervalInMinutes, \"minutes\");\r\n }\r\n return options;\r\n}\r\n","import { app } from \"../app.module\";\r\nimport { FEATURES } from \"../configuration\";\r\nimport { Enrolment } from \"../models/enrolment\";\r\nimport { Student } from \"../models/student\";\r\nimport { User } from \"../models/user\";\r\nimport { AuthorisationService } from \"../services/authorisationService\";\r\nimport { IContextLoader, StudentContext } from \"../services/contextLoader\";\r\nimport angular, { ILogService } from \"angular\";\r\nimport { ReportAbsenceWriteModel } from \"@/app/models/api\";\r\nimport templateUrl from \"./reportAbsence.html\";\r\nimport { IDeviceService } from \"../services/deviceServiceProvider\";\r\nimport { IApiService } from \"../services/apiServiceProvider\";\r\nimport { parseDate } from \"../services/dateHelper\";\r\nimport { getToday, getTimeOptions } from \"../services/dayHelper\";\r\nimport { EnrolmentStatus } from \"../models/enums\";\r\n\r\nconst controllerId = \"reportAbsence\";\r\napp.directive(`${controllerId}Component`, () => ({\r\n templateUrl,\r\n controller: ReportAbsenceComponent,\r\n controllerAs: \"vm\",\r\n restrict: \"E\",\r\n scope: true,\r\n replace: false\r\n}));\r\n\r\nconst REASON_MAXLENGTH = 89;\r\n\r\ninterface IReportAbsenceScope extends angular.IScope {\r\n submitAbsenceForm: angular.IFormController;\r\n}\r\n\r\nclass ReportAbsenceComponent implements StudentContext {\r\n user: User;\r\n student: Student;\r\n enrolment: Enrolment;\r\n isMobileApp: boolean;\r\n today: Date;\r\n timeOptions: Date[];\r\n reason: string;\r\n reasonCharactersRemaining: number;\r\n allDay: boolean;\r\n dateFrom: Date;\r\n dateTo: Date;\r\n timeFrom: string;\r\n timeTo: string;\r\n absenceSubmitted: boolean;\r\n busy: boolean;\r\n error: boolean;\r\n isFeatureAvailable: boolean;\r\n\r\n constructor(\r\n $routeParams: angular.route.IRouteParamsService,\r\n contextLoader: IContextLoader,\r\n authorisationService: AuthorisationService,\r\n deviceService: IDeviceService,\r\n private apiService: IApiService,\r\n private $location: angular.ILocationService,\r\n private $timeout: angular.ITimeoutService,\r\n private $document: angular.IDocumentService,\r\n private $scope: IReportAbsenceScope,\r\n private $q: angular.IQService,\r\n private $log: ILogService\r\n ) {\r\n \"ngInject\";\r\n\r\n this.isFeatureAvailable = true;\r\n contextLoader.load(this, $routeParams, controllerId).then(() => {\r\n if (!authorisationService.hasFeatureAccess(this, FEATURES.ATTENDANCE) || this.isDelegatedViewer()) {\r\n this.isFeatureAvailable = false;\r\n return;\r\n }\r\n\r\n // FutureStudentNoAbsence - Currently, Absence cannot be recorded for Future Student\r\n if (this.enrolment?.enrolmentStatus !== EnrolmentStatus.Active) {\r\n this.isFeatureAvailable = false;\r\n return;\r\n }\r\n\r\n this.today = getToday();\r\n this.timeOptions = getTimeOptions();\r\n this.onReasonChange(false);\r\n });\r\n\r\n this.isMobileApp = deviceService.isMobileApp;\r\n $(\"#dateFrom\").trigger(\"focus\");\r\n }\r\n\r\n onReasonChange(hasReachedMaxlength) {\r\n if (hasReachedMaxlength) {\r\n this.reasonCharactersRemaining = -1;\r\n } else {\r\n var reasonLength = this.reason ? this.reason.length : 0;\r\n this.reasonCharactersRemaining = REASON_MAXLENGTH - reasonLength;\r\n }\r\n }\r\n\r\n isDelegatedViewer() {\r\n if (!this.student.isUserPPAOForStudent) {\r\n var newPath = \"/featureUnavailable\";\r\n this.$location.path(newPath);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n onAllDayChecked(isAllDay) {\r\n if (isAllDay && this.dateFrom && !this.dateTo) {\r\n const date = parseDate(this.dateFrom);\r\n\r\n if (date) {\r\n this.dateTo = date.toDate();\r\n }\r\n } else if (isAllDay && !this.dateFrom && this.dateTo) {\r\n const date = parseDate(this.dateTo);\r\n\r\n if (date) {\r\n this.dateFrom = date.toDate();\r\n }\r\n }\r\n if (!isAllDay && this.timeFrom && this.timeTo) {\r\n this.$scope.submitAbsenceForm.timeFrom.$setDirty();\r\n this.$scope.submitAbsenceForm.timeTo.$setDirty();\r\n }\r\n }\r\n\r\n submitAbsence() {\r\n this.setFormFieldsDirty();\r\n\r\n if (this.busy || !this.$scope.submitAbsenceForm.$valid || !this.student.isUserPPAOForStudent) return;\r\n\r\n const deferred = this.$q.defer();\r\n\r\n this.busy = true;\r\n this.absenceSubmitted = false;\r\n this.error = false;\r\n\r\n const data: ReportAbsenceWriteModel = {\r\n eQId: this.student.oneSchoolId,\r\n allDay: this.allDay,\r\n dateAbsentFrom: this.dateFrom,\r\n dateAbsentTo: this.dateTo,\r\n timeFrom: this.allDay ? \"\" : this.timeFrom,\r\n timeTo: this.allDay ? \"\" : this.timeTo,\r\n schoolCode: this.enrolment.schoolCode,\r\n reason: this.reason\r\n };\r\n\r\n this.apiService\r\n .reportAbsence(data)\r\n .then(response => {\r\n this.absenceSubmitted = true;\r\n\r\n this.$timeout(() => {\r\n var successDiv = angular.element(document.getElementById(\"success\"));\r\n (this.$document).scrollToElement(successDiv, 0, 0);\r\n }, 100);\r\n })\r\n .catch(response => {\r\n this.error = true;\r\n this.$log.error(\"Error reporting absence for student\", response);\r\n })\r\n .finally(() => {\r\n this.busy = false;\r\n deferred.resolve();\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n setFormFieldsDirty() {\r\n this.$scope.submitAbsenceForm.dateTo.$setDirty();\r\n this.$scope.submitAbsenceForm.dateFrom.$setDirty();\r\n this.$scope.submitAbsenceForm.reason.$setDirty();\r\n if (this.$scope.submitAbsenceForm.timeFrom) {\r\n this.$scope.submitAbsenceForm.timeFrom.$setDirty();\r\n }\r\n if (this.$scope.submitAbsenceForm.timeTo) {\r\n this.$scope.submitAbsenceForm.timeTo.$setDirty();\r\n }\r\n }\r\n\r\n public alignStartAndEndDate() {\r\n try {\r\n if (this.dateFrom && this.dateTo) {\r\n if (this.dateFrom > this.dateTo) {\r\n this.dateTo = this.dateFrom;\r\n }\r\n }\r\n } catch (err) {}\r\n }\r\n\r\n loadImage(imagePath: string) {\r\n return require(\"../../content/img/\" + imagePath);\r\n }\r\n}\r\n","import { app } from \"../app.module\";\r\nimport { FEATURES } from \"../configuration\";\r\nimport { StudentContext, IContextLoader } from \"../services/contextLoader\";\r\nimport { User } from \"../models/user\";\r\nimport { Student } from \"../models/student\";\r\nimport { Enrolment } from \"../models/enrolment\";\r\nimport { AuthorisationService } from \"../services/authorisationService\";\r\nimport { AbsenceRecordViewModel, SubmitReasonWriteModel } from \"../models/api\";\r\nimport { IApiService } from \"../services/apiServiceProvider\";\r\nimport templateUrl from \"./reportReason.html\";\r\nimport { EnrolmentStatus } from \"../models/enums\";\r\n\r\nconst REASON_MAXLENGTH = 89;\r\n\r\nconst controllerId = \"reportReason\";\r\napp.directive(`${controllerId}Component`, () => ({\r\n templateUrl,\r\n controller: ReportReasonComponent,\r\n controllerAs: \"vm\",\r\n restrict: \"E\",\r\n scope: true,\r\n replace: false\r\n}));\r\n\r\ninterface IReportReasonScope {\r\n form: ng.IFormController;\r\n}\r\n\r\nclass ReportReasonComponent implements StudentContext {\r\n user: User;\r\n student: Student;\r\n enrolment: Enrolment;\r\n absenceRecord: AbsenceRecordViewModel;\r\n reasonCharactersRemaining: number;\r\n reason: string;\r\n busy: boolean;\r\n reasonSubmitted: boolean;\r\n isFeatureAvailable: boolean;\r\n\r\n constructor(\r\n $routeParams: angular.route.IRouteParamsService,\r\n contextLoader: IContextLoader,\r\n authorisationService: AuthorisationService,\r\n private apiService: IApiService,\r\n private $location: ng.ILocationService,\r\n private $timeout: ng.ITimeoutService,\r\n private $scope: IReportReasonScope,\r\n private $q: ng.IQService\r\n ) {\r\n \"ngInject\";\r\n const absenceId = $routeParams.absenceId;\r\n\r\n this.isFeatureAvailable = true;\r\n\r\n contextLoader.load(this, $routeParams, \"reportReason\").then(() => {\r\n if (!authorisationService.hasFeatureAccess(this, FEATURES.ATTENDANCE) || this.isDelegatedViewer()) {\r\n this.isFeatureAvailable = false;\r\n return;\r\n }\r\n\r\n // FutureStudentNoAbsence - Currently, Absence cannot be recorded for Future Student\r\n if (this.enrolment?.enrolmentStatus !== EnrolmentStatus.Active) {\r\n this.isFeatureAvailable = false;\r\n return;\r\n }\r\n\r\n this.absenceRecord = this.enrolment.getAbsenceRecordForId(absenceId);\r\n if (this.redirectIfAbsenceRecordNull()) {\r\n this.isFeatureAvailable = false;\r\n return;\r\n }\r\n\r\n this.setInitialFocus();\r\n this.onreasonChange(false);\r\n });\r\n }\r\n\r\n isDelegatedViewer() {\r\n if (!this.student.isUserPPAOForStudent) {\r\n var newPath = \"/featureUnavailable\";\r\n this.$location.path(newPath);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n redirectIfAbsenceRecordNull() {\r\n if (this.absenceRecord == null) {\r\n var newPath = `/attendance/${this.student.oneSchoolId}/${this.enrolment.schoolCode}`;\r\n this.$location.path(newPath);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n setInitialFocus() {\r\n this.$timeout(function () {\r\n document.getElementById(\"reason\").focus();\r\n }, 100);\r\n }\r\n\r\n onreasonChange(hasReachedMaxlength) {\r\n if (hasReachedMaxlength) {\r\n this.reasonCharactersRemaining = -1;\r\n } else {\r\n var reasonLength = this.reason ? this.reason.length : 0;\r\n this.reasonCharactersRemaining = REASON_MAXLENGTH - reasonLength;\r\n }\r\n }\r\n\r\n submitReason(reason) {\r\n if (this.$scope.form.$invalid) return;\r\n if (this.busy) return;\r\n\r\n const deferred = this.$q.defer();\r\n this.busy = true;\r\n\r\n const data: SubmitReasonWriteModel = {\r\n eQId: this.student.oneSchoolId,\r\n studentAbsenceId: this.absenceRecord.studentAbsenceId,\r\n absenceDate: this.absenceRecord.absenceDate,\r\n reason: reason\r\n };\r\n\r\n this.apiService\r\n .submitAbsenceReason(data)\r\n .then(() => {\r\n this.reasonSubmitted = true;\r\n this.absenceRecord.reasonAwaitingApproval = true;\r\n })\r\n .finally(() => {\r\n this.busy = false;\r\n deferred.resolve();\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n loadImage(imagePath: string) {\r\n return require(\"../../content/img/\" + imagePath);\r\n }\r\n}\r\n","import { app } from \"../app.module\";\r\nimport { FEATURES } from \"../configuration\";\r\nimport { User } from \"../models/user\";\r\nimport { StudentContext, IContextLoader } from \"../services/contextLoader\";\r\nimport { Student } from \"../models/student\";\r\nimport { Enrolment } from \"../models/enrolment\";\r\nimport { AuthorisationService } from \"../services/authorisationService\";\r\nimport templateUrl from \"./behaviour.html\";\r\nconst controllerId = \"behaviour\";\r\napp.directive(`${controllerId}Component`, () => ({\r\n templateUrl,\r\n controller: BehaviourComponent,\r\n controllerAs: \"vm\",\r\n restrict: \"E\",\r\n scope: true,\r\n replace: false\r\n}));\r\n\r\nclass BehaviourComponent implements StudentContext {\r\n user: User;\r\n student: Student;\r\n enrolment: Enrolment;\r\n\r\n constructor($routeParams: angular.route.IRouteParamsService, contextLoader: IContextLoader, authorisationService: AuthorisationService) {\r\n \"ngInject\";\r\n contextLoader.load(this, $routeParams, controllerId).then(() => {\r\n if (!authorisationService.hasFeatureAccess(this, FEATURES.BEHAVIOUR)) return;\r\n });\r\n }\r\n\r\n loadImage(imagePath: string) {\r\n return require(\"../../content/img/\" + imagePath);\r\n }\r\n}\r\n","import { app } from \"../app.module\";\r\nimport { FEATURES } from \"../configuration\";\r\nimport { StudentContext, IContextLoader } from \"../services/contextLoader\";\r\nimport { User } from \"../models/user\";\r\nimport { Student } from \"../models/student\";\r\nimport { Enrolment } from \"../models/enrolment\";\r\nimport { AuthorisationService } from \"../services/authorisationService\";\r\nimport templateUrl from \"./enrolmentHistory.html\";\r\n\r\nconst controllerId = \"enrolmentHistory\";\r\napp.directive(`${controllerId}Component`, () => ({\r\n templateUrl,\r\n controller: EnrolmentHistoryComponent,\r\n controllerAs: \"vm\",\r\n restrict: \"E\",\r\n scope: true,\r\n replace: false\r\n}));\r\n\r\nclass EnrolmentHistoryComponent implements StudentContext {\r\n user: User;\r\n student: Student;\r\n enrolment: Enrolment;\r\n\r\n constructor($routeParams: angular.route.IRouteParamsService, contextLoader: IContextLoader, authorisationService: AuthorisationService) {\r\n \"ngInject\";\r\n contextLoader.load(this, $routeParams, controllerId).then(() => {\r\n if (!authorisationService.hasStudentFeatureAccess(this, FEATURES.ENROLMENT_HISTORY)) return;\r\n });\r\n }\r\n}\r\n","import { app } from \"../app.module\";\r\nimport { IDeviceService } from \"../services/deviceServiceProvider\";\r\nimport { IAssetService } from \"../services/assetService\";\r\n\r\nimport templateUrl from \"./error.html\";\r\nimport { IUrlResolver } from \"../services/urlResolver\";\r\n\r\napp.directive(\"errorComponent\", () => ({\r\n templateUrl,\r\n restrict: \"E\",\r\n controller: error,\r\n controllerAs: \"vm\",\r\n scope: true,\r\n replace: true\r\n}));\r\n\r\nfunction error(deviceService: IDeviceService, assetService: IAssetService, urlResolver: IUrlResolver) {\r\n \"ngInject\";\r\n var vm = this;\r\n vm.openHelpInSystemBrowser = openHelpInSystemBrowser;\r\n\r\n function openHelpInSystemBrowser($event: Event) {\r\n if (!deviceService.isMobileApp) return; // just use the href\r\n $event.preventDefault();\r\n assetService.mobileOpenFile(urlResolver.resolve(\"#/help\"), false);\r\n }\r\n}\r\n","import { app } from \"../app.module\";\r\nimport { ICommonService } from \"../services/common\";\r\n\r\nconst controllerId = \"featureUnavailable\";\r\nconst templateUrl = require(\"./featureUnavailable.html\");\r\n\r\napp.directive(`${controllerId}Component`, () => ({\r\n templateUrl,\r\n scope: true,\r\n controller: featureUnavailable,\r\n controllerAs: \"vm\",\r\n restrict: \"E\",\r\n replace: true\r\n}));\r\n\r\nclass featureUnavailable {\r\n constructor(common: ICommonService) {\r\n \"ngInject\";\r\n common.activateController([], controllerId);\r\n }\r\n}\r\n","import { app } from \"../app.module\";\r\nimport { User } from \"../models/user\";\r\nimport { IDataContext } from \"../services/dataContext\";\r\n\r\nimport templateUrl from \"./home.html\";\r\n\r\napp.component(\"homeComponent\", {\r\n templateUrl: templateUrl,\r\n controller: home,\r\n controllerAs: \"vm\"\r\n});\r\n\r\ninterface IHomeViewModel {\r\n user: User;\r\n}\r\n\r\nfunction home(dataContext: IDataContext, $rootScope) {\r\n \"ngInject\";\r\n var vm: IHomeViewModel = this;\r\n vm.user = null;\r\n\r\n initialise();\r\n\r\n function initialise() {\r\n dataContext\r\n .getData()\r\n .then(function (data) {\r\n vm.user = data;\r\n })\r\n .finally(function () {\r\n $rootScope.hideFullScreenLoadingPane();\r\n });\r\n }\r\n}\r\n","import { ILocationService } from \"angular\";\r\nimport { app } from \"../app.module\";\r\nimport { REDIRECT_PHOTO_COOKIE_NAME } from \"../configuration\";\r\nimport { IDataContext } from \"../services/dataContext\";\r\n\r\napp.factory(\"homeInitialise\", homeInitialise);\r\n\r\nfunction homeInitialise($location: ILocationService, $cookies: ng.cookies.ICookiesService, dataContext: IDataContext) {\r\n \"ngInject\";\r\n\r\n function doesCookieExist(cookieName) {\r\n var cookieValue = $cookies.get(cookieName);\r\n return cookieValue !== undefined;\r\n }\r\n\r\n function shouldRedirectToPhotoPreview() {\r\n return doesCookieExist(REDIRECT_PHOTO_COOKIE_NAME);\r\n }\r\n\r\n function redirectToPhotoPreview() {\r\n // ie8 doesn't support 3xx redirects to locations with fragments (it strips the fragment)\r\n // so we had to set a cookie server side which we check client side and do the redirection. *sigh*\r\n // see: http://blogs.msdn.com/b/ieinternals/archive/2011/05/17/url-fragments-and-redirects-anchor-hash-missing.aspx\r\n // and LegacyUploadPhoto in StudentPhotoModule\r\n\r\n var studentIdToRedirectToPhotoPreviewPageFor = $cookies.get(REDIRECT_PHOTO_COOKIE_NAME);\r\n $cookies.remove(REDIRECT_PHOTO_COOKIE_NAME);\r\n\r\n $location.path(\"studentPhoto/legacyupload/\" + studentIdToRedirectToPhotoPreviewPageFor).search(\"preview\", \"true\");\r\n }\r\n\r\n function shouldRedirectToAddStudent(user) {\r\n return user.shouldRedirectToAddStudentPage();\r\n }\r\n\r\n function redirectToAddStudent() {\r\n $location.path(\"addStudent\");\r\n }\r\n\r\n function checkIfRedirectRequired(user) {\r\n if (shouldRedirectToPhotoPreview()) {\r\n redirectToPhotoPreview();\r\n } else if (shouldRedirectToAddStudent(user)) {\r\n redirectToAddStudent();\r\n }\r\n }\r\n\r\n return function () {\r\n return dataContext.getData().then(checkIfRedirectRequired);\r\n };\r\n}\r\n","import { app } from \"../app.module\";\r\nimport templateUrl from \"./enrolmentStatus.html\";\r\n\r\nrequire(\"./enrolmentStatus.less\");\r\n\r\nconst controllerId = \"enrolmentStatus\";\r\n\r\napp.component(`${controllerId}Component`, {\r\n templateUrl: templateUrl,\r\n controller: enolmentStatusController,\r\n bindings: {\r\n enrolment: \"<\"\r\n },\r\n controllerAs: \"vm\"\r\n});\r\n\r\nfunction enolmentStatusController() {}\r\n","import { app } from \"../app.module\";\r\nimport { Enrolment } from \"../models/enrolment\";\r\nimport templateUrl from \"./studentList.html\";\r\nimport { IDataContext } from \"../services/dataContext\";\r\nimport \"../student/enrolmentStatus\";\r\n\r\nconst controllerId = \"studentList\";\r\napp.component(`${controllerId}Component`, {\r\n templateUrl: templateUrl,\r\n bindings: {\r\n students: \"<\"\r\n },\r\n controller: StudentsListComponent,\r\n controllerAs: \"vm\"\r\n});\r\n\r\nfunction StudentsListComponent(dataContext: IDataContext) {\r\n \"ngInject\";\r\n var vm = this;\r\n vm.adminViewData = null;\r\n\r\n // Use $onInit lifecycle hook instead of constructor\r\n vm.$onInit = function () {\r\n dataContext.getData().then(function (d) {\r\n vm.adminViewData = d.adminViewDetails;\r\n });\r\n };\r\n\r\n vm.canAccess = function (enrolment: Enrolment) {\r\n return vm.adminViewData == null || vm.adminViewData.centreCode.toString() === enrolment.schoolCode;\r\n };\r\n}\r\n","import { app } from \"../../../app.module\";\r\nimport { IDataContext } from \"../../../services/dataContext\";\r\nimport { FEATURES } from \"../../../configuration\";\r\nimport { ConsentService } from \"../../../services/consentService\";\r\nimport { ConsentSummaryViewModel } from \"@/app/models/api\";\r\n\r\nrequire(\"../parentCentricSummary.less\");\r\nrequire(\"./consentSummaryWidget.less\");\r\nimport templateUrl from \"./consentSummaryWidget.html\";\r\napp.directive(\"consentSummaryWidget\", () => ({\r\n templateUrl,\r\n controller: ConsentSummaryWidget,\r\n controllerAs: \"vm\",\r\n scope: true,\r\n restrict: \"A\"\r\n}));\r\n\r\nclass ConsentSummaryWidget {\r\n consentSummary: ConsentSummaryViewModel;\r\n consentFeatureTurnedOffForAllStudents: boolean;\r\n consentLoadedSuccessfully: boolean;\r\n consentLoading: boolean;\r\n consentRequestsEnabled: boolean;\r\n\r\n constructor(private dataContext: IDataContext, consentService: ConsentService) {\r\n \"ngInject\";\r\n this.dataContext.getData().then(user => {\r\n this.consentFeatureTurnedOffForAllStudents = !user.students.some(student => student.isFeatureAvailable(FEATURES.CONSENT_REQUESTS));\r\n this.consentLoading = true;\r\n this.consentRequestsEnabled = user.consentRequestsEnabled;\r\n\r\n consentService\r\n .getConsentRequestSummary(user)\r\n .then(summary => {\r\n this.consentSummary = summary;\r\n this.consentLoadedSuccessfully = summary.loadedSuccessfully;\r\n })\r\n .catch(e => {\r\n this.consentLoadedSuccessfully = false;\r\n })\r\n .finally(() => {\r\n this.consentLoading = false;\r\n });\r\n });\r\n }\r\n}\r\n","import { IDataContext } from \"../../../services/dataContext\";\r\nimport { app } from \"../../../app.module\";\r\nimport { FEATURES } from \"../../../configuration\";\r\nimport { AbsenceSummaryViewModel } from \"@/app/models/api\";\r\n\r\nrequire(\"../parentCentricSummary.less\");\r\nrequire(\"./absenceSummaryWidget.less\");\r\nimport templateUrl from \"./absenceSummaryWidget.html\";\r\nimport { EnrolmentStatus } from \"../../../models/enums\";\r\n\r\napp.directive(\"absenceSummaryWidget\", () => ({\r\n templateUrl,\r\n controller: AbsenceSummaryWidget,\r\n controllerAs: \"vm\",\r\n scope: true,\r\n restrict: \"A\"\r\n}));\r\n\r\nclass AbsenceSummaryWidget {\r\n absenceSummary: AbsenceSummaryViewModel;\r\n absenceFeatureTurnedOffForAllStudents: boolean;\r\n constructor(private dataContext: IDataContext) {\r\n \"ngInject\";\r\n this.dataContext.getData().then(user => {\r\n this.absenceSummary = user.absenceSummary;\r\n this.absenceFeatureTurnedOffForAllStudents = !user.students.some(\r\n student =>\r\n student.features.some(feature => feature.toString() === FEATURES.ATTENDANCE.toString()) &&\r\n // FutureStudentNoAbsence - Currently, Absence cannot be recorded for Future Student\r\n student.enrolments.some(enrolment => enrolment?.enrolmentStatus === EnrolmentStatus.Active)\r\n );\r\n });\r\n }\r\n}\r\n","import { IDataContext } from \"../../../services/dataContext\";\r\nimport { app } from \"../../../app.module\";\r\nimport { FEATURES } from \"../../../configuration\";\r\nimport { UpcomingEventsSummaryViewModel } from \"@/app/models/api\";\r\n\r\nrequire(\"../parentCentricSummary.less\");\r\nrequire(\"./upcomingEventsSummaryWidget.less\");\r\nimport templateUrl from \"./upcomingEventsSummaryWidget.html\";\r\napp.directive(\"upcomingEventsSummaryWidget\", () => ({\r\n templateUrl,\r\n controller: UpcomingEventsSummaryWidget,\r\n controllerAs: \"vm\",\r\n scope: true,\r\n restrict: \"A\"\r\n}));\r\n\r\nclass UpcomingEventsSummaryWidget {\r\n upcomingEventsSummary: UpcomingEventsSummaryViewModel;\r\n upcomingEventsFeatureTurnedOffForAllStudents: boolean;\r\n\r\n constructor(private dataContext: IDataContext) {\r\n \"ngInject\";\r\n\r\n this.dataContext.getData().then(user => {\r\n this.upcomingEventsFeatureTurnedOffForAllStudents = !user.students.some(student => student.features.some(feature => feature.toString() === FEATURES.UPCOMING_EVENTS.toString()));\r\n this.upcomingEventsSummary = user.upcomingEventsSummary;\r\n });\r\n }\r\n}\r\n","import { IDataContext } from \"../../../services/dataContext\";\r\nimport { app } from \"../../../app.module\";\r\nimport { FEATURES } from \"../../../configuration\";\r\nimport { PaymentsSummaryViewModel } from \"@/app/models/api\";\r\n\r\nrequire(\"../parentCentricSummary.less\");\r\nrequire(\"./paymentsSummaryWidget.less\");\r\nimport templateUrl from \"./paymentsSummaryWidget.html\";\r\napp.directive(\"paymentsSummaryWidget\", () => ({\r\n templateUrl,\r\n controller: paymentsSummaryWidget,\r\n controllerAs: \"vm\",\r\n scope: true,\r\n restrict: \"A\"\r\n}));\r\n\r\nclass paymentsSummaryWidget {\r\n paymentsSummary: PaymentsSummaryViewModel;\r\n paymentsFeatureTurnedOffForAllStudents: boolean;\r\n constructor(private dataContext: IDataContext) {\r\n \"ngInject\";\r\n this.dataContext.getData().then(user => {\r\n this.paymentsSummary = user.paymentsSummary;\r\n this.paymentsFeatureTurnedOffForAllStudents = !user.students.some(student => student.features.some(feature => feature.toString() === FEATURES.FINANCE.toString()));\r\n });\r\n }\r\n}\r\n","import { app } from \"../../../app.module\";\r\nimport { QLearnService } from \"../../../services/qLearnService\";\r\nimport { QLearnLinkModel } from \"@/app/models/api\";\r\n\r\nrequire(\"../parentCentricSummary.less\");\r\nrequire(\"./qlearnSummaryWidget.less\");\r\nimport templateUrl from \"./qlearnSummaryWidget.html\";\r\napp.directive(\"qLearnSummaryWidget\", () => ({\r\n templateUrl,\r\n controller: QLearnSummaryWidget,\r\n controllerAs: \"vm\",\r\n scope: true,\r\n restrict: \"A\"\r\n}));\r\n\r\nclass QLearnSummaryWidget {\r\n public link: QLearnLinkModel;\r\n\r\n constructor(qLearnService: QLearnService) {\r\n \"ngInject\";\r\n qLearnService.getQLearnLink().then(response => (this.link = response));\r\n }\r\n}\r\n","import { app } from \"../app.module\";\r\nimport templateUrl from \"./landing-page.html\";\r\n\r\nexport interface ILandingPageContentWithImage {\r\n title: string\r\n description: string\r\n iconSrc: string\r\n}\r\n\r\napp.component(\"landingPageComponent\", {\r\n templateUrl: templateUrl,\r\n controller: landingPage,\r\n controllerAs: \"vm\"\r\n});\r\n\r\nfunction landingPage() { }","import { app } from \"../../app.module\";\r\nimport templateUrl from \"./register-link.html\";\r\nimport \"./register-link.less\";\r\nimport { IDeviceService } from \"@/app/services/deviceServiceProvider\";\r\nimport { IAssetService } from \"@/app/services/assetService\";\r\nimport { IUrlResolver } from \"@/app/services/urlResolver\";\r\n\r\napp.component(\"registerLinkComponent\", {\r\n templateUrl: templateUrl,\r\n controller: registerLink,\r\n controllerAs: \"vm\"\r\n});\r\n\r\nfunction registerLink(assetService: IAssetService, deviceService: IDeviceService, urlResolver: IUrlResolver) {\r\n \"ngInject\";\r\n const vm = this;\r\n vm.redirectUser = function ($event) {\r\n if (!deviceService.isMobileApp) {\r\n return true;\r\n }\r\n\r\n $event.preventDefault();\r\n assetService.mobileOpenFile(urlResolver.resolve(\"/#/registration/account-owner/invitation/\"), false);\r\n\r\n return false;\r\n };\r\n}\r\n","import { app } from \"../../app.module\";\r\nimport templateUrl from \"./landing-page-section.html\";\r\nimport \"./landing-page-section.less\";\r\n\r\napp.component(\"landingPageSectionComponent\", {\r\n templateUrl: templateUrl,\r\n bindings: {\r\n sectionclass: \"@\"\r\n },\r\n controller: landingPageSection,\r\n controllerAs: \"vm\",\r\n transclude: true\r\n});\r\n\r\nfunction landingPageSection() { }","import { app } from \"../../../app.module\";\r\nimport templateUrl from \"./app-download-section.html\";\r\nimport \"./app-download-section.less\";\r\n\r\napp.component(\"appDownloadSectionComponent\", {\r\n templateUrl: templateUrl,\r\n controller: appDownloadSection,\r\n controllerAs: \"vm\"\r\n});\r\n\r\nfunction appDownloadSection() {\r\n var vm = this;\r\n\r\n vm.loadImage = function(imagePath) {\r\n return require('../../../../content/img/' + imagePath);\r\n };\r\n}","\r\nimport angular from \"angular\";\r\nimport { app } from \"../../../app.module\";\r\nimport templateUrl from \"./user-reviews-section.html\";\r\nimport \"./user-reviews-section.less\";\r\n\r\ninterface IUserReview {\r\n name: string\r\n review: string\r\n imageSrc: string\r\n}\r\n\r\nconst userReviews: IUserReview[] = [\r\n {\r\n name: 'Michelle L., Bardon State School',\r\n review: '\"We started using QParents two years ago, and now I can\\'t imagine our week without it. So much time saved not waiting on the phone, or on last minute trips to the school get a payment for an excursion.\"',\r\n imageSrc: 'avatarNoPhoto.png',\r\n },\r\n {\r\n name: 'Blake L., Bardon State School',\r\n review: '\"We started using QParents two years ago, and now I can\\'t imagine our week without it. So much time saved not waiting on the phone, or on last minute trips to the school get a payment for an excursion.\"',\r\n imageSrc: 'avatarNoPhoto.png',\r\n },\r\n {\r\n name: 'Jason L., Bardon State School',\r\n review: '\"We started using QParents two years ago, and now I can\\'t imagine our week without it. So much time saved not waiting on the phone, or on last minute trips to the school get a payment for an excursion.\"',\r\n imageSrc: 'avatarNoPhoto.png',\r\n },\r\n {\r\n name: 'Ripley L., Bardon State School',\r\n review: '\"We started using QParents two years ago, and now I can\\'t imagine our week without it. So much time saved not waiting on the phone, or on last minute trips to the school get a payment for an excursion.\"',\r\n imageSrc: 'avatarNoPhoto.png',\r\n }\r\n]\r\n\r\napp.component(\"userReviewsSectionComponent\", {\r\n templateUrl: templateUrl,\r\n controller: userReviewsSection,\r\n controllerAs: \"vm\"\r\n});\r\n\r\nfunction userReviewsSection($timeout) {\r\n \"ngInject\";\r\n var vm = this;\r\n vm.slideIndex = 0;\r\n vm.userReviews = userReviews;\r\n\r\n let timer = null;\r\n\r\n vm.carouselScrollEventHandler = function() {\r\n if(timer !== null) {\r\n clearTimeout(timer); \r\n }\r\n timer = setTimeout(function() {\r\n document.getElementById('navButton-' + vm.slideIndex).classList.remove('selected');\r\n var carousel = document.getElementById('review-carousel');\r\n var width = carousel.scrollWidth;\r\n var numOfElements = vm.userReviews.length;\r\n var scrollLeft = Math.round(carousel.scrollLeft);\r\n var slideIndex = Math.round(scrollLeft / width * numOfElements);\r\n \r\n document.getElementById('navButton-' + slideIndex).classList.add('selected');\r\n vm.slideIndex = slideIndex;\r\n }, 100);\r\n }\r\n\r\n vm.$postLink = function () {\r\n\r\n $timeout(function() {\r\n document\r\n .getElementById('review-carousel')\r\n .addEventListener('scroll', vm.carouselScrollEventHandler, false);\r\n });\r\n };\r\n\r\n vm.loadImage = function(imagePath) {\r\n return require('../../../../content/img/' + imagePath);\r\n };\r\n\r\n vm.moveSlider = function(index: number){\r\n const reviewElement = angular.element(document.getElementById(\"review-\" + index));\r\n reviewElement[0].scrollIntoView({ behavior: \"smooth\", block: \"start\", inline: \"start\" });\r\n }\r\n}","import { app } from \"../../../app.module\";\r\nimport templateUrl from \"./one-place-section.html\";\r\nimport \"./one-place-section.less\";\r\n\r\napp.component(\"onePlaceSectionComponent\", {\r\n templateUrl: templateUrl,\r\n controller: onePlaceSection,\r\n controllerAs: \"vm\"\r\n});\r\n\r\nfunction onePlaceSection() {\r\n var vm = this;\r\n\r\n vm.loadImage = function(imagePath) {\r\n return require('../../../../content/img/' + imagePath);\r\n };\r\n}","import { app } from \"../../../app.module\";\r\nimport templateUrl from \"./safe-private-section.html\";\r\nimport \"./safe-private-section.less\";\r\n\r\napp.component(\"safePrivateSectionComponent\", {\r\n templateUrl: templateUrl,\r\n controller: safePrivateSection,\r\n controllerAs: \"vm\"\r\n});\r\n\r\nfunction safePrivateSection() {\r\n var vm = this;\r\n\r\n vm.loadImage = function(imagePath) {\r\n return require('../../../../content/img/' + imagePath);\r\n };\r\n}","import { app } from \"../../../app.module\";\r\nimport templateUrl from \"./connect-share-section.html\";\r\nimport \"./connect-share-section.less\";\r\n\r\napp.component(\"connectShareSectionComponent\", {\r\n templateUrl: templateUrl,\r\n controller: connectShareSection,\r\n controllerAs: \"vm\"\r\n});\r\n\r\nfunction connectShareSection() {\r\n var vm = this;\r\n\r\n vm.loadImage = function(imagePath) {\r\n return require('../../../../content/img/' + imagePath);\r\n };\r\n}","import { app } from \"../../../app.module\";\r\nimport templateUrl from \"./children-grow-section.html\";\r\nimport \"./children-grow-section.less\";\r\n\r\napp.component(\"childrenGrowSectionComponent\", {\r\n templateUrl: templateUrl,\r\n controller: childrenGrowSection,\r\n controllerAs: \"vm\"\r\n});\r\n\r\nfunction childrenGrowSection() {\r\n var vm = this;\r\n\r\n vm.loadImage = function(imagePath) {\r\n return require('../../../../content/img/' + imagePath);\r\n };\r\n}","import { app } from \"../../../app.module\";\r\nimport { ILandingPageContentWithImage } from \"../../landing-page\";\r\nimport templateUrl from \"./process-guide-section.html\";\r\nimport \"./process-guide-section.less\";\r\n\r\nconst processGuide: ILandingPageContentWithImage[] = [\r\n {\r\n title: 'Get your invitation',\r\n description: 'Your school will provide your invitation code to start the process.',\r\n iconSrc: 'birthday-card.svg',\r\n },\r\n {\r\n title: 'Register as a parent',\r\n description: 'Only parents and caregivers can be account owners.',\r\n iconSrc: 'customer.svg',\r\n },\r\n {\r\n title: 'Connect to your Student',\r\n description: 'Locate your children and request access from the School.',\r\n iconSrc: 'student.svg',\r\n },\r\n {\r\n title: 'View your child\\'s information',\r\n description: 'Your children\\'s school information available in the one place, even if they attend different state schools.',\r\n iconSrc: 'connectstudent.svg',\r\n }\r\n]\r\n\r\napp.component(\"processGuideSectionComponent\", {\r\n templateUrl: templateUrl,\r\n controller: processGuideSection,\r\n controllerAs: \"vm\"\r\n});\r\n\r\nfunction processGuideSection() {\r\n var vm = this;\r\n vm.processGuide = processGuide;\r\n\r\n vm.loadIcon = function(iconPath) {\r\n return require('../../../../content/icons/' + iconPath);\r\n };\r\n}","import { app } from \"../../../app.module\";\r\nimport { ILandingPageContentWithImage } from \"../../landing-page\";\r\nimport templateUrl from \"./functionality-section.html\";\r\nimport \"./functionality-section.less\";\r\n\r\nconst functions: ILandingPageContentWithImage[] = [\r\n {\r\n title: 'Sign-in securely',\r\n description: 'All information is always kept private and only visible to those you choose.',\r\n iconSrc: 'signin.svg',\r\n },\r\n {\r\n title: 'Provide consent',\r\n description: 'Respond to requests for consent for things like excursions, photos, etc.',\r\n iconSrc: 'computer.svg',\r\n },\r\n {\r\n title: 'Make payments online',\r\n description: 'Make payments and view all your invoices in one place.',\r\n iconSrc: 'pay.svg',\r\n },\r\n {\r\n title: 'View academic reports',\r\n description: 'View and download all report cards.',\r\n iconSrc: 'reportcard.svg',\r\n },\r\n {\r\n title: 'Inform attendance',\r\n description: 'Let the school know about any absences from school.',\r\n iconSrc: 'sick.svg',\r\n },\r\n {\r\n title: 'See upcoming events',\r\n description: 'Never miss a date - see all upcoming school events.',\r\n iconSrc: 'events.svg',\r\n },\r\n {\r\n title: 'Check timetables',\r\n description: 'Know what learning is scheduled each day.',\r\n iconSrc: 'roster.svg',\r\n },\r\n {\r\n title: 'Access enrolment history',\r\n description: 'See historical enrolment details.',\r\n iconSrc: 'school.svg',\r\n },\r\n {\r\n title: 'Update details',\r\n description: 'Easily update parent and student details such as contact and medical information from wherever you are at any time.',\r\n iconSrc: 'child.svg',\r\n }\r\n]\r\n\r\napp.component(\"functionalitySectionComponent\", {\r\n templateUrl: templateUrl,\r\n controller: functionalitySection,\r\n controllerAs: \"vm\"\r\n});\r\n\r\nfunction functionalitySection() {\r\n var vm = this;\r\n vm.functions = functions;\r\n\r\n vm.loadIcon = function(iconPath) {\r\n return require('../../../../content/icons/' + iconPath);\r\n };\r\n}","import { app } from \"../../../app.module\";\r\nimport templateUrl from \"./overview-section.html\";\r\n\r\napp.component(\"overviewSectionComponent\", {\r\n templateUrl: templateUrl,\r\n controller: overviewSection,\r\n controllerAs: \"vm\"\r\n});\r\n\r\nfunction overviewSection() {\r\n var vm = this;\r\n\r\n vm.loadImage = function(imagePath) {\r\n return require('../../../../content/img/' + imagePath);\r\n };\r\n}","import { app } from \"../../../app.module\";\r\nimport templateUrl from \"./lives-easier-section.html\";\r\nimport \"./lives-easier-section.less\";\r\n\r\napp.component(\"livesEasierSectionComponent\", {\r\n templateUrl: templateUrl,\r\n controller: livesEasierSection,\r\n controllerAs: \"vm\"\r\n});\r\n\r\nfunction livesEasierSection() {\r\n var vm = this;\r\n\r\n vm.loadImage = function(imagePath) {\r\n return require('../../../../content/img/' + imagePath);\r\n };\r\n}","import { app } from \"../app.module\";\r\n\r\nimport templateUrl from \"./mobile-app-message.html\";\r\nimport \"./mobile-app-message.less\";\r\n\r\napp.directive(\"mobileAppMessage\", function () {\r\n return {\r\n restrict: \"E\",\r\n templateUrl,\r\n scope: true\r\n };\r\n});\r\n","import { app } from \"../../app.module\";\r\n\r\nimport templateUrl from \"./qLearnAppMessage.html\";\r\nimport \"./qLearnAppMessage.less\";\r\nimport { QLearnService } from \"../../services/qLearnService\";\r\nimport { QLearnLinkModel } from \"@/app/models/api\";\r\n\r\napp.directive(\"qLearnAppMessage\", function () {\r\n return {\r\n restrict: \"E\",\r\n templateUrl,\r\n scope: true,\r\n controller: QLearnAppMessage,\r\n controllerAs: \"vm\"\r\n };\r\n});\r\n\r\nclass QLearnAppMessage {\r\n public link: QLearnLinkModel;\r\n\r\n constructor(qLearnService: QLearnService) {\r\n \"ngInject\";\r\n qLearnService.getQLearnLink().then(response => (this.link = response));\r\n }\r\n}\r\n","import angular, { ILocationService, ILogService, IQService } from \"angular\";\r\nimport { app } from \"../app.module\";\r\nimport template from \"./loginForm.html\";\r\n\r\nimport \"./loginForm.less\";\r\nimport { IUrlResolver } from \"../services/urlResolver\";\r\nimport { REMEMBER_EMAIL_KEY } from \"../configuration\";\r\nimport { recaptchaService } from \"../services/recaptchaService\";\r\nimport { IDeviceService } from \"../services/deviceServiceProvider\";\r\nimport { LoginResponse } from \"../models/api\";\r\nimport { ILoginService, UserLogin } from \"../services/loginService\";\r\nimport { IPreferencesService } from \"../services/preferencesService\";\r\nimport { Dialog } from \"@capacitor/dialog\";\r\nimport { MfaMedium, mfaMediumDescription } from \"../models/enums\";\r\nimport { ICsrfTokenService } from \"../services/csrfTokenService\";\r\nimport { ILocalStorageService } from \"angular-local-storage\";\r\n\r\napp.directive(\"loginForm\", () => ({\r\n restrict: \"E\",\r\n templateUrl: template,\r\n controller: loginForm,\r\n controllerAs: \"vm\",\r\n scope: {\r\n onCancel: \"&\",\r\n onLoginComplete: \"&\"\r\n },\r\n link: function (scope: any, element, attrs) {\r\n scope.isOnCancelDefined = angular.isUndefined(attrs[\"onCancel\"]) === false;\r\n scope.isOnLoginCompleteDefined = angular.isUndefined(attrs[\"onLoginComplete\"]) === false;\r\n }\r\n}));\r\n\r\nfunction loginForm(\r\n $scope,\r\n $log: ILogService,\r\n $route,\r\n $location: ILocationService,\r\n localStorageService: ILocalStorageService,\r\n deviceService: IDeviceService,\r\n preferencesService: IPreferencesService,\r\n csrfTokenService: ICsrfTokenService,\r\n $q: IQService,\r\n recaptchaService: recaptchaService,\r\n loginService: ILoginService,\r\n urlResolver: IUrlResolver\r\n) {\r\n \"ngInject\";\r\n let vm = this;\r\n\r\n vm.mfaMedium = MfaMedium;\r\n vm.mfaMediumDescription = mfaMediumDescription;\r\n vm.mfaSessionId = null;\r\n vm.busy = false;\r\n vm.login = {\r\n email: localStorageService.get(REMEMBER_EMAIL_KEY),\r\n isNewDevice: true,\r\n mfaMedium: null\r\n };\r\n vm.showLoginFailed = false;\r\n vm.showToken = false;\r\n vm.message = null;\r\n vm.invalidToken = false;\r\n\r\n vm.doLogin = doLogin;\r\n vm.cancel = cancel;\r\n vm.retryMfa = retryMfa;\r\n\r\n initialise();\r\n\r\n function initialise() {\r\n setFocus(\"email\");\r\n\r\n autoLoginAttempt();\r\n }\r\n\r\n function retryMfa(mfaMedium) {\r\n vm.login.mfaMedium = mfaMedium;\r\n vm.login.token = null;\r\n vm.mfaSessionId = null;\r\n doLogin(vm.login);\r\n }\r\n\r\n function cancel() {\r\n if ($scope.isOnCancelDefined) {\r\n $scope.onCancel();\r\n }\r\n }\r\n\r\n function doLogin(login) {\r\n if ($scope.form.$invalid && login.mfaMedium === null) return;\r\n if (vm.busy) return;\r\n\r\n var deferred = $q.defer();\r\n\r\n loginAttempt(login).finally(() => {\r\n deferred.resolve();\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n function handleSuccessfulLogin() {\r\n if ($scope.isOnLoginCompleteDefined) {\r\n $scope.onLoginComplete();\r\n } else {\r\n $location.search(\"logout\", null);\r\n $location.path(\"/\");\r\n $route.reload();\r\n }\r\n }\r\n\r\n function autoLoginAttempt() {\r\n var queryParams = $location.search();\r\n\r\n if (queryParams.logout === \"true\") {\r\n // Do not attempt to auto login from log out\r\n return;\r\n }\r\n\r\n var deferred = $q.defer();\r\n\r\n if (deviceService.isMobileApp) {\r\n loginService\r\n .loadBiometricCredential()\r\n .then(userInfo => {\r\n if (userInfo) {\r\n vm.login.email = userInfo.username;\r\n vm.login.password = userInfo.password;\r\n\r\n loginAttempt(vm.login).finally(() => {\r\n deferred.resolve();\r\n });\r\n } else {\r\n deferred.resolve();\r\n }\r\n })\r\n .catch(() => {\r\n vm.showLoginFailed = true;\r\n vm.message = \"Biometrics login failed - please enter your email and password\";\r\n deferred.reject();\r\n });\r\n } else {\r\n deferred.resolve();\r\n }\r\n\r\n return deferred.promise;\r\n }\r\n\r\n function loginAttempt(login) {\r\n login.mfaSessionId = vm.mfaSessionId;\r\n\r\n var deferred = $q.defer();\r\n\r\n vm.busy = true;\r\n\r\n vm.showLoginFailed = false;\r\n vm.message = null;\r\n vm.invalidToken = false;\r\n\r\n // redirect to TRAIN for iOS test account (App Store approval account)\r\n handleMobileLoginAccount(login)\r\n .then(() =>\r\n loginService\r\n .login(login)\r\n .then(() => {\r\n vm.mfaSessionId = null;\r\n\r\n saveBiometricCredential({\r\n username: login.email,\r\n password: login.password\r\n }).finally(() => {\r\n vm.busy = false;\r\n deferred.resolve();\r\n\r\n handleSuccessfulLogin();\r\n });\r\n })\r\n .catch(response => {\r\n $log.error(\"Login failed\", angular.toJson(response));\r\n loginFailed(response);\r\n\r\n vm.busy = false;\r\n deferred.reject();\r\n })\r\n )\r\n .catch(() => {\r\n vm.busy = false;\r\n vm.login.mfaMedium = null;\r\n deferred.reject();\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n function loginFailed(response: any) {\r\n const data = response.data as LoginResponse;\r\n if (response.status === 401) {\r\n vm.showLoginFailed = true;\r\n vm.message = data?.message;\r\n } else if (response.status === 420 && data?.invalidCode) {\r\n vm.invalidToken = true;\r\n setFocus(\"token\");\r\n return;\r\n } else if (response.status === 420) {\r\n vm.mfaSessionId = data?.mfaSessionId;\r\n vm.login.isNewDevice = data?.isNewDevice;\r\n vm.showToken = true;\r\n vm.message = data?.message;\r\n vm.login.mfaMedium = data?.mfaMedium;\r\n\r\n recaptchaService.initialize().then(() => {\r\n setFocus(\"token\");\r\n }); // initialise the reCaptcha service when the login risky\r\n return;\r\n } else {\r\n vm.showLoginFailed = true;\r\n vm.message = \"Something went wrong\";\r\n }\r\n\r\n // Refresh the NCSRF\r\n csrfTokenService.ensureCsrfToken();\r\n }\r\n\r\n function handleMobileLoginAccount(login) {\r\n var deferred = $q.defer();\r\n\r\n if (deviceService.isMobileApp) {\r\n if (isMobileTestAccount(login)) {\r\n urlResolver.setBaseUrl(\"https://train.qparents.qld.edu.au\");\r\n }\r\n\r\n csrfTokenService\r\n .ensureCsrfToken()\r\n .then(function () {\r\n deferred.resolve();\r\n })\r\n .catch(() => {\r\n deferred.reject();\r\n });\r\n } else {\r\n deferred.resolve();\r\n }\r\n return deferred.promise;\r\n }\r\n\r\n function isMobileTestAccount(login) {\r\n return login !== undefined && login.email === \"qparentsapp@gmail.com\";\r\n }\r\n\r\n function setFocus(field) {\r\n // HACK: We hide the feedback widget on input focus for devices that\r\n // match the tablet media query (see TABLET BREAKPOINT in site.less)\r\n // however this will only work if we dont set the initial focus for these\r\n // devices. To detect these devices the media query css wil set the visibilty\r\n // of the #js-media-query-test div from 'hidden' to 'visible'\r\n // Sorry!\r\n var areWeOnATabletDeviceOrSmaller = $(\"#js-media-query-test\").css(\"visibility\") === \"visible\";\r\n\r\n if (areWeOnATabletDeviceOrSmaller === false) {\r\n $(\"#\" + field).trigger(\"focus\");\r\n }\r\n }\r\n\r\n function saveBiometricCredential(userLogin: UserLogin) {\r\n const deferred = $q.defer();\r\n loginService\r\n .checkIfBiometricAvailable()\r\n .then(biometricResult => {\r\n if (!biometricResult.isAvailable) {\r\n deferred.resolve();\r\n return;\r\n }\r\n preferencesService\r\n .getIsCredentialPrompted()\r\n .then(isCredentialPrompted => {\r\n if (!isCredentialPrompted) {\r\n promptToSaveCredential(userLogin, biometricResult.description)\r\n .then(() => {\r\n deferred.resolve();\r\n })\r\n .catch(response => {\r\n deferred.reject(response);\r\n });\r\n } else {\r\n promptToUpdateCredential(userLogin, biometricResult.description)\r\n .then(() => {\r\n deferred.resolve();\r\n })\r\n .catch(response => {\r\n deferred.reject(response);\r\n });\r\n }\r\n })\r\n .catch(response => {\r\n deferred.reject(response);\r\n });\r\n })\r\n .catch(response => {\r\n deferred.reject(response);\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n function promptToSaveCredential(userLogin: UserLogin, availableBiometryTypeDescription: string) {\r\n $log.debug(\"Prompting user if the user intend to save the biometrics login.\");\r\n const deferred = $q.defer();\r\n\r\n $q.when(\r\n Dialog.confirm({\r\n title: \"Register for Biometrics Login\",\r\n message: `Would you like to store your login details for accessing QParents and set up ${availableBiometryTypeDescription} login?`,\r\n okButtonTitle: \"Yes\",\r\n cancelButtonTitle: \"No\"\r\n })\r\n )\r\n .then(confirmResult => {\r\n if (confirmResult.value) {\r\n $log.debug(\"User intend to register for biometrics login.\");\r\n\r\n // Save Credentials\r\n saveCredential(userLogin, deferred);\r\n } else {\r\n preferencesService.setIsCredentialPrompted(true);\r\n deferred.resolve();\r\n }\r\n })\r\n .catch(response => {\r\n deferred.reject(response);\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n function promptToUpdateCredential(userLogin: UserLogin, availableBiometryTypeDescription: string) {\r\n const deferred = $q.defer();\r\n\r\n preferencesService\r\n .getIsCredentialSaved()\r\n .then(isCredentialSaved => {\r\n if (!isCredentialSaved) {\r\n deferred.resolve();\r\n return;\r\n }\r\n\r\n loginService\r\n .checkIfMatchingCredentialExist(userLogin)\r\n .then(checkMatchResult => {\r\n if (checkMatchResult?.passwordMatch && checkMatchResult?.usernameMatch) {\r\n deferred.resolve();\r\n return;\r\n }\r\n $log.debug(\"Prompting user if the user intend to update the login details.\");\r\n $q.when(\r\n Dialog.confirm({\r\n title: \"Have your login details changed?\",\r\n message: `It looks like your login details have changed since last time. Please update them to continue using ${availableBiometryTypeDescription}`,\r\n okButtonTitle: \"Yes\",\r\n cancelButtonTitle: \"No\"\r\n })\r\n )\r\n .then(confirmResult => {\r\n if (confirmResult.value) {\r\n updateCredential(userLogin, deferred);\r\n }\r\n })\r\n .catch(response => {\r\n deferred.reject(response);\r\n });\r\n })\r\n .catch(response => {\r\n deferred.reject(response);\r\n });\r\n })\r\n .catch(response => {\r\n deferred.reject(response);\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n function updateCredential(userLogin: UserLogin, deferred: angular.IDeferred) {\r\n $log.debug(\"User intend to update the login details.\");\r\n loginService\r\n .deleteBiometricCredential()\r\n .then(() => {\r\n saveCredential(userLogin, deferred);\r\n })\r\n .catch(response => {\r\n deferred.reject(response);\r\n });\r\n }\r\n\r\n function saveCredential(userLogin: UserLogin, deferred: angular.IDeferred) {\r\n loginService\r\n .saveBiometricCredential(userLogin)\r\n .finally(() => {\r\n preferencesService.setIsCredentialPrompted(true);\r\n deferred.resolve();\r\n })\r\n .catch(response => {\r\n deferred.reject(response);\r\n });\r\n }\r\n}\r\n","import { app } from \"../app.module\";\r\nimport \"./mobile-app-message\";\r\nimport \"./qLearnAppMessage/qLearnAppMessage\";\r\nimport \"../login-form/loginForm\";\r\nimport templateUrl from \"./login.html\";\r\n\r\nimport \"./login.less\";\r\nimport { ConnectionStatus } from \"@capacitor/network\";\r\nimport { INetworkService } from \"../services/networkService\";\r\nimport { IDeviceService } from \"../services/deviceServiceProvider\";\r\nimport { platformService } from \"../services/platformService\";\r\n\r\napp.component(\"loginComponent\", {\r\n templateUrl: templateUrl,\r\n controller: login,\r\n controllerAs: \"vm\"\r\n});\r\n\r\nfunction login($routeParams: angular.route.IRouteParamsService, platformService: platformService, networkService: INetworkService, deviceService: IDeviceService) {\r\n \"ngInject\";\r\n var vm = this;\r\n vm.reloadApp = reloadApp;\r\n vm.onNetworkStatusChanged = onNetworkStatusChangedHandler;\r\n vm.showEmailValidatedSuccess = false;\r\n vm.showEmailValidatedError = false;\r\n vm.isOffline = !networkService.isOnline();\r\n vm.isMobileApp = deviceService.isMobileApp;\r\n\r\n initialise();\r\n\r\n function initialise() {\r\n vm.showEmailValidatedSuccess = $routeParams.emailConfirmed === \"true\";\r\n vm.showEmailValidatedError = $routeParams.emailConfirmed === \"false\";\r\n\r\n // On capacitor apps, this will check the API to ensure that App version is compatible\r\n // It will navigate to an 'upgrade the app' page if not suitable.\r\n if (vm.isMobileApp) {\r\n networkService.getNetworkStatus().then(function (status) {\r\n vm.onNetworkStatusChanged(status);\r\n });\r\n }\r\n if (!vm.isOffline) {\r\n networkService.onNetworkStatusChanged(onNetworkStatusChangedHandler);\r\n vm.$onDestroy = function () {\r\n networkService.removeOnNetworkStatusChanged();\r\n };\r\n }\r\n }\r\n\r\n function onNetworkStatusChangedHandler(status: ConnectionStatus) {\r\n if (status.connected) {\r\n networkService.getIsMaintenance().then(isMaintenance => {\r\n vm.isMaintenance = isMaintenance;\r\n if (!isMaintenance) {\r\n platformService.checkVersion();\r\n }\r\n });\r\n }\r\n }\r\n\r\n function reloadApp() {\r\n window.location.reload();\r\n }\r\n}\r\n","import { IApiService } from \"@/app/services/apiServiceProvider\";\r\nimport { app } from \"../../app.module\";\r\nimport { IQService } from \"angular\";\r\n\r\nconst templateUrl = require(\"./forgotPassword.html\");\r\nconst controllerId = \"forgotPassword\";\r\n\r\napp.directive(`${controllerId}Component`, () => ({\r\n templateUrl,\r\n controller: forgotPassword,\r\n controllerAs: \"vm\",\r\n restrict: \"E\",\r\n replace: true,\r\n scope: true\r\n}));\r\n\r\nfunction forgotPassword(apiService: IApiService, $q: IQService, $scope) {\r\n \"ngInject\";\r\n var vm = this;\r\n vm.email = null;\r\n vm.save = save;\r\n vm.error = null;\r\n vm.emailSent = false;\r\n\r\n function save() {\r\n if ($scope.editEmail.$invalid) return;\r\n\r\n if (vm.busy) return;\r\n const deferred = $q.defer();\r\n\r\n vm.busy = true;\r\n\r\n var newEmail = vm.email;\r\n\r\n apiService\r\n .forgotPasswordRequest({\r\n email: newEmail\r\n })\r\n .then(function successCallback() {\r\n vm.emailSent = true;\r\n })\r\n .finally(function () {\r\n vm.busy = false;\r\n deferred.resolve();\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n}\r\n","import { IApiService } from \"@/app/services/apiServiceProvider\";\r\nimport { app } from \"../../app.module\";\r\n\r\nconst templateUrl = require(\"./changeForgottenPassword.html\");\r\nconst controllerId = \"changeForgottenPassword\";\r\n\r\napp.directive(`${controllerId}Component`, () => ({\r\n templateUrl,\r\n controller: changeForgottenPassword,\r\n controllerAs: \"vm\",\r\n restrict: \"E\",\r\n replace: true,\r\n scope: true\r\n}));\r\n\r\nfunction changeForgottenPassword($routeParams: angular.route.IRouteParamsService, apiService: IApiService) {\r\n \"ngInject\";\r\n var vm = this;\r\n vm.busy = false;\r\n vm.email = null;\r\n vm.save = save;\r\n vm.confirmationToken = $routeParams.ct;\r\n vm.confirmationTokenValid = $routeParams.resetPasswordConfirmed === \"true\";\r\n vm.newPassword = null;\r\n vm.newPasswordConfirmation = null;\r\n vm.success = null;\r\n vm.reason = \"\";\r\n\r\n function save() {\r\n if (vm.busy) return;\r\n vm.busy = true;\r\n\r\n apiService\r\n .forgotPasswordSubmit({\r\n email: vm.email,\r\n confirmationToken: vm.confirmationToken,\r\n password: vm.newPassword\r\n })\r\n .then(function successCallback(response) {\r\n const data: PasswordResetResponse = response.data;\r\n vm.success = data.success;\r\n vm.reason = data.reason;\r\n })\r\n .finally(function () {\r\n vm.busy = false;\r\n });\r\n }\r\n}\r\n\r\ninterface PasswordResetResponse {\r\n success: boolean;\r\n reason?: string;\r\n}\r\n","import { app } from \"../../app.module\";\r\nimport { recaptchaService } from \"../../services/recaptchaService\";\r\n\r\nconst templateUrl = require(\"./confirmResetPassword.html\");\r\nconst controllerId = \"confirmResetPassword\";\r\n\r\napp.directive(`${controllerId}Component`, () => ({\r\n templateUrl,\r\n controller: confirmResetPassword,\r\n controllerAs: \"vm\",\r\n restrict: \"E\",\r\n replace: true,\r\n scope: true\r\n}));\r\n\r\nfunction confirmResetPassword($routeParams: angular.route.IRouteParamsService, recaptchaService: recaptchaService) {\r\n \"ngInject\";\r\n var vm = this;\r\n vm.busy = true;\r\n vm.confirmationToken = $routeParams.ct;\r\n recaptchaService\r\n .execute({ action: \"login\" })\r\n .then(() => {\r\n window.location.href = `api/forgot-password/confirm-reset-password/${vm.confirmationToken}`;\r\n })\r\n .catch(err => {\r\n vm.busy = false;\r\n });\r\n}\r\n","import { ILocationService, ILogService, IQService } from \"angular\";\r\nimport { app } from \"../app.module\";\r\nimport { IApiService } from \"../services/apiServiceProvider\";\r\nimport { IDeviceService } from \"../services/deviceServiceProvider\";\r\nimport { ICheckerService, check } from \"../tools/outageChecker\";\r\nimport templateUrl from \"./outage.html\";\r\nimport { ILocalStorageService } from \"angular-local-storage\";\r\n\r\napp.factory(\"outageChecker\", outageCheckerFactory);\r\n\r\nfunction outageCheckerFactory($q: IQService, $location: ILocationService, $log: ILogService, $routeParams: angular.route.IRouteParamsService, deviceService: IDeviceService, apiService: IApiService, localStorageService: ILocalStorageService) {\r\n \"ngInject\";\r\n return check($location, $log, $q, $routeParams, apiService, deviceService, localStorageService);\r\n}\r\n\r\napp.directive(\"outageComponent\", () => ({\r\n templateUrl,\r\n controller: outage,\r\n controllerAs: \"vm\",\r\n restrict: \"E\",\r\n replace: true,\r\n scope: true\r\n}));\r\n\r\nfunction outage($routeParams: angular.route.IRouteParamsService, outageChecker: ICheckerService, $location: ILocationService) {\r\n this.studentId = $routeParams.studentId;\r\n outageChecker.getOutage($routeParams.id).then(data => {\r\n this.data = data;\r\n });\r\n this.goHome = () => {\r\n $location.path(\"/\");\r\n };\r\n}\r\n","import { app } from \"../app.module\";\r\nimport { FEATURES, ADMIN_VIEW_COOKIES } from \"../configuration\";\r\nimport { AuthorisationService } from \"../services/authorisationService\";\r\nimport { StudentContext, IContextLoader } from \"../services/contextLoader\";\r\nimport { User } from \"../models/user\";\r\nimport { Student } from \"../models/student\";\r\nimport { Enrolment } from \"../models/enrolment\";\r\nimport { FinanceRecord } from \"../models/financeRecord\";\r\nimport { IUrlResolver } from \"../services/urlResolver\";\r\nimport { IDataContext } from \"../services/dataContext\";\r\nimport { InvoiceModel, FinanceRecordViewModel } from \"../models/api\";\r\nimport templateUrl from \"./payment.html\";\r\nconst controllerId = \"payment\";\r\napp.directive(`${controllerId}Component`, () => ({\r\n templateUrl,\r\n controller: PaymentComponent,\r\n controllerAs: \"vm\",\r\n restrict: \"E\",\r\n scope: true,\r\n replace: false\r\n}));\r\n\r\nclass PaymentComponent implements StudentContext {\r\n user: User;\r\n student: Student;\r\n enrolment: Enrolment;\r\n\r\n constructor(\r\n $routeParams: angular.route.IRouteParamsService,\r\n contextLoader: IContextLoader,\r\n authorisationService: AuthorisationService,\r\n private dataContext: IDataContext,\r\n private urlResolver: IUrlResolver\r\n ) {\r\n \"ngInject\";\r\n contextLoader.load(this, $routeParams, controllerId).then(() => {\r\n if (!authorisationService.hasFeatureAccess(this, FEATURES.FINANCE)) return;\r\n if (Array.isArray(this.enrolment.financeRecordsDue) && this.enrolment.financeRecordsDue.length) {\r\n this.enrolment.financeRecordsDue.forEach(f => {\r\n if (f.paymentAmount > f.amountOwing) {\r\n f.paymentAmount = f.amountOwing;\r\n f.isSelectedForPayment = false;\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n paymentUrl(payment: FinanceRecord) {\r\n const params: InvoiceModel = {\r\n oneSchoolPpaoId: this.user.oneSchoolParentId,\r\n studentEqId: this.student.oneSchoolId,\r\n schoolId: this.enrolment.schoolCode,\r\n invoiceNumber: payment.invoiceNumber,\r\n schoolUserId: \"\"\r\n };\r\n\r\n if (this.dataContext.isAdminView()) {\r\n params.schoolUserId = sessionStorage.getItem(ADMIN_VIEW_COOKIES.SCHOOL_USER_ID);\r\n }\r\n const url = this.urlResolver.resolve(`/api/invoice?${this.paramsToQueryString(params)}`);\r\n return url;\r\n }\r\n\r\n toggle(financeRecord: FinanceRecordViewModel & { expanded: boolean }) {\r\n financeRecord.expanded = financeRecord.expanded ? false : true;\r\n }\r\n\r\n paramsToQueryString(params) {\r\n return Object.keys(params)\r\n .map(key => {\r\n return encodeURIComponent(key) + \"=\" + encodeURIComponent(params[key]);\r\n })\r\n .join(\"&\");\r\n }\r\n\r\n showPaymentButton() {\r\n if (this.enrolment != null)\r\n return (\r\n this.enrolment.getFinanceRecordsSelectedForPayment().length > 0 &&\r\n this.enrolment.getFinanceRecordsSelectedForPaymentTotal() > 0 &&\r\n !this.enrolment.getFinanceRecordsWithPaymentAmountGreaterThanAmountOwing().length\r\n );\r\n return false;\r\n }\r\n\r\n selectedForPaymentToggled(payment: FinanceRecord) {\r\n if (!payment.isSelectedForPayment && payment.paymentAmount > payment.amountOwing) {\r\n payment.paymentAmount = payment.amountOwing;\r\n }\r\n }\r\n}\r\n","import { app } from \"../app.module\";\r\nimport angular from \"angular\";\r\nimport { FEATURES } from \"../configuration\";\r\nimport { StudentContext, IContextLoader } from \"../services/contextLoader\";\r\nimport { User } from \"../models/user\";\r\nimport { Student } from \"../models/student\";\r\nimport { Enrolment } from \"../models/enrolment\";\r\nimport { AuthorisationService } from \"../services/authorisationService\";\r\nimport { ProcessPaymentService, ProcessPaymentResult } from \"../services/processPaymentService\";\r\nimport \"./processPayment.less\";\r\nimport { BPointVerifyBatchResultViewModel, BPointClientPaymentResponse } from \"../models/api\";\r\n\r\nimport templateUrl from \"./processPayment.html\";\r\nconst controllerId = \"processPayment\";\r\n\r\napp.directive(`${controllerId}Component`, () => ({\r\n templateUrl,\r\n controller: ProcessPaymentComponent,\r\n controllerAs: \"vm\",\r\n restrict: \"E\",\r\n scope: true,\r\n replace: false\r\n}));\r\n\r\nclass ProcessPaymentComponent implements StudentContext {\r\n user: User;\r\n student: Student;\r\n enrolment: Enrolment;\r\n totalPaymentValue: number;\r\n busy: boolean;\r\n paymentRequestEnded: boolean;\r\n paymentCompletelyFailed: boolean;\r\n\r\n // Warning: Not sure why there's payment and payments here, but I'm\r\n // doing a big refactor and don't want to risk changing it.\r\n paymentResult: string;\r\n paymentsResult: string;\r\n creditCardNumber: string;\r\n creditCardExpiry: string;\r\n creditCardCvv: string;\r\n verifiedPaymentResponses: BPointVerifyBatchResultViewModel;\r\n\r\n constructor(\r\n $routeParams: angular.route.IRouteParamsService,\r\n contextLoader: IContextLoader,\r\n authorisationService: AuthorisationService,\r\n private $location: ng.ILocationService,\r\n private $rootScope: any,\r\n private $q: ng.IQService,\r\n private processPaymentService: ProcessPaymentService,\r\n private $document: ng.IDocumentService\r\n ) {\r\n \"ngInject\";\r\n this.busy = false;\r\n this.verifiedPaymentResponses = null;\r\n this.paymentRequestEnded = false;\r\n this.paymentCompletelyFailed = false;\r\n\r\n contextLoader.load(this, $routeParams, controllerId).then(() => {\r\n this.totalPaymentValue = this.enrolment.getFinanceRecordsSelectedForPaymentTotal();\r\n\r\n if (!authorisationService.hasFeatureAccess(this, FEATURES.FINANCE)) return;\r\n if (!this.student.isUserPPAOForStudent || this.enrolment.getFinanceRecordsSelectedForPayment().length === 0) {\r\n $location.path(`/payment/${this.student.oneSchoolId}/${this.enrolment.schoolCode}`);\r\n }\r\n });\r\n }\r\n\r\n submitPayment(form) {\r\n if (!form.$valid) return;\r\n\r\n var deferred = this.$q.defer();\r\n\r\n this.$rootScope.showFullScreenLoadingPane(\"Please wait while BPoint processes your payment\");\r\n\r\n this.getPrePaymentAuthenticationTokens()\r\n .then(\r\n p => this.sendPayment(),\r\n f => this.getPrePaymentAuthTokensFailure()\r\n )\r\n .then(\r\n p => this.verifyPayments(p),\r\n f => this.sendPaymentFailure()\r\n )\r\n .then(\r\n p => this.showOutcome(p),\r\n f => this.showErrorOutcome()\r\n )\r\n .finally(() => {\r\n this.$rootScope.hideFullScreenLoadingPane();\r\n\r\n var successDiv = angular.element(document.getElementById(\"main-content\"));\r\n (this.$document).scrollToElement(successDiv, 0, 0);\r\n\r\n deferred.resolve();\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n getPrePaymentAuthTokensFailure() {\r\n this.paymentCompletelyFailed = true;\r\n return this.$q.reject();\r\n }\r\n\r\n sendPaymentFailure() {\r\n return this.$q.reject();\r\n }\r\n\r\n verifyPayments(paymentResponses: BPointClientPaymentResponse[]) {\r\n return this.processPaymentService.verifyPaymentResponse(paymentResponses);\r\n }\r\n\r\n showOutcome(data: BPointVerifyBatchResultViewModel) {\r\n this.verifiedPaymentResponses = data;\r\n\r\n var hasSuccessfulPayments = this.verifiedPaymentResponses.successfulPayments.length > 0;\r\n var hasFailedPayments = this.verifiedPaymentResponses.failedPayments.length > 0;\r\n var hasUnknownOutcomePayments = this.verifiedPaymentResponses.unknownOutcomePayments && this.verifiedPaymentResponses.unknownOutcomePayments.length > 0;\r\n\r\n if (hasUnknownOutcomePayments) this.paymentResult = \"Unknown\";\r\n else if (hasSuccessfulPayments && !hasFailedPayments) this.paymentsResult = \"Success\";\r\n else if (hasSuccessfulPayments && hasFailedPayments) this.paymentsResult = \"Partial Success\";\r\n else if (!hasSuccessfulPayments && hasFailedPayments) this.paymentsResult = \"Failure\";\r\n\r\n this.markSuccessfulPaymentsAsInProgress(this.verifiedPaymentResponses);\r\n\r\n this.paymentRequestEnded = true;\r\n }\r\n\r\n showErrorOutcome() {\r\n this.paymentRequestEnded = true;\r\n }\r\n\r\n sendPayment() {\r\n var deferred = this.$q.defer();\r\n\r\n if (this.paymentCompletelyFailed) {\r\n deferred.reject();\r\n return deferred.promise;\r\n }\r\n\r\n var processPaymentPromises: ng.IPromise[] = [];\r\n\r\n this.enrolment.getFinanceRecordsSelectedForPayment().forEach((financeRecord, index) => {\r\n var promise = this.processPaymentService.sendPayment(financeRecord, this.creditCardNumber, this.creditCardExpiry, this.creditCardCvv, index);\r\n processPaymentPromises.push(promise);\r\n });\r\n\r\n this.$q.all(processPaymentPromises).then(values => {\r\n deferred.resolve(values);\r\n this.clearSelectedPayments();\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n getPrePaymentAuthenticationTokens() {\r\n return this.processPaymentService.getPaymentAuthenticationTokens(this.enrolment.financeRecordsDue).then(data => {\r\n this.enrolment.financeRecordsDue = data;\r\n });\r\n }\r\n\r\n back() {\r\n this.cancel();\r\n }\r\n\r\n cancel() {\r\n this.clearSelectedPayments();\r\n this.$location.path(`/payment/${this.student.oneSchoolId}/${this.enrolment.schoolCode}`);\r\n }\r\n\r\n clearSelectedPayments() {\r\n this.enrolment.getFinanceRecordsSelectedForPayment().forEach(financeRecord => {\r\n financeRecord.isSelectedForPayment = false;\r\n financeRecord.paymentAmount = financeRecord.amountOwing;\r\n });\r\n }\r\n\r\n getTotalReceiptValue() {\r\n if (!this.verifiedPaymentResponses || !this.verifiedPaymentResponses.successfulPayments) return 0;\r\n\r\n var amount = this.verifiedPaymentResponses.successfulPayments.reduce((sum, payment) => {\r\n return sum + payment.amount;\r\n }, 0);\r\n\r\n return amount;\r\n }\r\n\r\n markSuccessfulPaymentsAsInProgress(response) {\r\n this.enrolment.recordCurrentPayments(response.paymentDateTime, response.successfulPayments);\r\n }\r\n}\r\n","import { app } from \"../app.module\";\r\nimport { SPINNER_URL, AVATAR_NOPHOTO_URL } from \"../configuration\";\r\nimport { StudentContext, IContextLoader } from \"../services/contextLoader\";\r\nimport { User } from \"../models/user\";\r\nimport { Student } from \"../models/student\";\r\nimport { Enrolment } from \"../models/enrolment\";\r\nimport { PhotoService } from \"../services/photoService\";\r\nimport { IDataContext } from \"../services/dataContext\";\r\n\r\nconst controllerId = \"schoolPhoto\";\r\nimport templateUrl from \"./schoolPhoto.html\";\r\nimport { ILogService } from \"angular\";\r\nimport { IDeviceService } from \"../services/deviceServiceProvider\";\r\nimport { IUrlResolver } from \"../services/urlResolver\";\r\n\r\napp.directive(`${controllerId}Component`, () => ({\r\n templateUrl,\r\n scope: true,\r\n controller: SchoolPhotoComponent,\r\n controllerAs: \"vm\",\r\n restrict: \"E\",\r\n replace: false\r\n}));\r\n\r\nclass SchoolPhotoComponent implements StudentContext {\r\n user: User;\r\n student: Student;\r\n enrolment: Enrolment;\r\n schoolPhotoUrl: string;\r\n photoRetrieved: boolean;\r\n busy: boolean;\r\n SPINNER_URL: string;\r\n\r\n constructor(\r\n $routeParams: angular.route.IRouteParamsService,\r\n contextLoader: IContextLoader,\r\n private $log: ILogService,\r\n private $location: ng.ILocationService,\r\n private urlResolver: IUrlResolver,\r\n private photoService: PhotoService,\r\n private deviceService: IDeviceService,\r\n private dataContext: IDataContext\r\n ) {\r\n \"ngInject\";\r\n this.student = null;\r\n this.photoRetrieved = false;\r\n this.busy = null;\r\n this.schoolPhotoUrl = null;\r\n\r\n this.SPINNER_URL = SPINNER_URL;\r\n\r\n contextLoader.load(this, $routeParams, controllerId).then(() => {\r\n if (this.isDelegatedViewer()) return;\r\n if (this.schoolDoesntHavePhoto()) return;\r\n if (this.dataContext.isAdminView()) {\r\n this.photoRetrieved = true;\r\n this.schoolPhotoUrl = AVATAR_NOPHOTO_URL;\r\n return;\r\n }\r\n\r\n this.retrieveSchoolPhoto();\r\n });\r\n }\r\n\r\n isDelegatedViewer() {\r\n if (!this.student.isUserPPAOForStudent) {\r\n var newPath = \"/\";\r\n this.$location.path(newPath);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n schoolDoesntHavePhoto() {\r\n if (!this.student.hasSchoolPhoto) {\r\n this.$log.debug(\"schoolPhoto - School has no photo\");\r\n var newPath = `/studentPhoto/${this.student.oneSchoolId}/${this.enrolment.schoolCode}`;\r\n this.$location.path(newPath);\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n retrieveSchoolPhoto() {\r\n this.$log.debug(\"schoolPhoto - Retrieving School Photo\");\r\n this.photoService\r\n .retrieveSchoolPhoto(this.student.oneSchoolId)\r\n .then(schoolPhotoUrl => {\r\n if (this.deviceService.isMobileApp) {\r\n this.photoService.downloadPhoto(this.urlResolver.resolve(schoolPhotoUrl)).then(result => {\r\n this.schoolPhotoUrl = result;\r\n });\r\n } else {\r\n this.schoolPhotoUrl = schoolPhotoUrl;\r\n }\r\n this.$log.debug(`schoolPhoto - School Photo Retrieved at ${schoolPhotoUrl}`);\r\n })\r\n .finally(() => {\r\n this.photoRetrieved = true;\r\n });\r\n }\r\n\r\n accept() {\r\n this.busy = true;\r\n\r\n this.photoService\r\n .promotePhoto(this.student.oneSchoolId, \"school\")\r\n .then(photoUrl => {\r\n this.student.photoUrl = photoUrl;\r\n this.student.photoContentUrl = this.schoolPhotoUrl;\r\n\r\n this.$log.debug(\"schoolPhoto - School Photo has been promoted\");\r\n })\r\n .finally(() => {\r\n this.busy = false;\r\n this.$location.path(`/student/${this.student.oneSchoolId}/${this.enrolment.schoolCode}`);\r\n });\r\n }\r\n\r\n navigateBack() {\r\n window.history.back();\r\n }\r\n}\r\n","import { app } from \"../app.module\";\r\nimport { StudentContext, IContextLoader } from \"../services/contextLoader\";\r\nimport { User } from \"../models/user\";\r\nimport { Student } from \"../models/student\";\r\nimport { Enrolment } from \"../models/enrolment\";\r\nimport { PhotoService } from \"../services/photoService\";\r\nimport angular from \"angular\";\r\nimport { IDeviceService } from \"../services/deviceServiceProvider\";\r\n\r\nconst controllerId = \"upload\";\r\nimport templateUrl from \"./upload.html\";\r\nimport \"./upload.less\";\r\n\r\ninterface InputFileEvent extends Event {\r\n target: HTMLInputElement;\r\n}\r\n\r\napp.directive(`${controllerId}Component`, () => ({\r\n templateUrl,\r\n scope: true,\r\n controller: UploadComponent,\r\n controllerAs: \"vm\",\r\n restrict: \"E\",\r\n replace: false\r\n}));\r\n\r\n/* const DefaultImageOptions: ImageOptions = {\r\n quality: 50,\r\n height: 150,\r\n width: 150,\r\n saveToGallery: true,\r\n correctOrientation: true,\r\n resultType: CameraResultType.DataUrl\r\n}; */\r\n\r\nclass UploadComponent implements StudentContext {\r\n user: User;\r\n student: Student;\r\n enrolment: Enrolment;\r\n busy: boolean;\r\n newPhoto: { dataUrl?: string; format?: string }; // from input-image\r\n isMobileApp: boolean;\r\n uploaded: boolean;\r\n error: boolean;\r\n capture: \"environment\" | null;\r\n\r\n constructor(\r\n $routeParams: angular.route.IRouteParamsService,\r\n contextLoader: IContextLoader,\r\n private $q: angular.IQService,\r\n private $location: angular.ILocationService,\r\n private photoService: PhotoService,\r\n private $anchorScroll: angular.IAnchorScrollService,\r\n private $log: angular.ILogService,\r\n deviceService: IDeviceService\r\n ) {\r\n \"ngInject\";\r\n this.isMobileApp = deviceService.isMobileApp;\r\n this.newPhoto = {};\r\n contextLoader\r\n .load(this, $routeParams, controllerId)\r\n .then(() => {\r\n if (this.isDelegatedViewer()) return;\r\n })\r\n .then(() => {\r\n this.$anchorScroll(\"upload-a-photo-heading\");\r\n });\r\n }\r\n\r\n isDelegatedViewer() {\r\n if (!this.student.isUserPPAOForStudent) {\r\n var newPath = \"/\";\r\n this.$location.path(newPath);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n takePhoto() {\r\n return this.handleFileInputEvent(\"#inputTakePhoto\");\r\n }\r\n\r\n fromGallery() {\r\n return this.handleFileInputEvent(\"#inputUploadFile\");\r\n }\r\n\r\n handleFileInputEvent(id: string) {\r\n const deferred = this.$q.defer();\r\n\r\n this.error = false;\r\n\r\n $(id).trigger(\"click\");\r\n\r\n $(id).on(\"change\", event => {\r\n this.busy = true;\r\n this.uploadAttachment(event.originalEvent)\r\n .then(result => {\r\n this.newPhoto.dataUrl = result.dataUrl;\r\n this.newPhoto.format = result.mimeType;\r\n this.uploaded = true;\r\n })\r\n .catch(response => {\r\n this.error = true;\r\n this.$log.error(\"Error uploading attachment\", response);\r\n })\r\n .finally(() => {\r\n deferred.resolve();\r\n this.busy = false;\r\n });\r\n });\r\n\r\n $(id).on(\"blur\", event => {\r\n deferred.resolve();\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n uploadAttachment(e: Event) {\r\n const deferred = this.$q.defer<{ dataUrl: string; mimeType: string }>();\r\n\r\n const fileInput = (e as InputFileEvent).target;\r\n const fileInputFiles = fileInput.files ?? [];\r\n\r\n // upload attachments\r\n if (fileInputFiles.length > 0) {\r\n const file = fileInputFiles[0];\r\n const reader = new FileReader();\r\n\r\n reader.onload = e => {\r\n const img = document.createElement(\"img\");\r\n const dataUrl = e.target.result as string;\r\n const mimeType = dataUrl.split(\";\")[0].split(\":\")[1];\r\n\r\n img.onload = e => {\r\n const resizedDataUrl = this.resizeImage(img, mimeType);\r\n\r\n // Show resized image in preview element\r\n deferred.resolve({\r\n dataUrl: resizedDataUrl,\r\n mimeType: mimeType\r\n });\r\n\r\n img.onload = null;\r\n };\r\n img.src = dataUrl;\r\n };\r\n\r\n reader.readAsDataURL(file);\r\n }\r\n // reset input\r\n fileInput.value = fileInput.defaultValue;\r\n\r\n return deferred.promise;\r\n }\r\n\r\n resizeImage(img: HTMLImageElement, mimeType: string) {\r\n const maxWidth = 300;\r\n const maxHeight = 300;\r\n\r\n const canvas = document.createElement(\"canvas\");\r\n const ctx = canvas.getContext(\"2d\");\r\n\r\n let width = img.width;\r\n let height = img.height;\r\n\r\n // Calculate proportional dimensions\r\n if (width > maxWidth || height > maxHeight) {\r\n const ratio = Math.min(maxWidth / width, maxHeight / height);\r\n width = Math.floor(width * ratio);\r\n height = Math.floor(height * ratio);\r\n }\r\n\r\n canvas.width = width;\r\n canvas.height = height;\r\n ctx.drawImage(img, 0, 0, width, height);\r\n\r\n const resizedDataUrl = canvas.toDataURL(mimeType);\r\n return resizedDataUrl;\r\n }\r\n\r\n accept() {\r\n if (this.busy) return;\r\n const deferred = this.$q.defer();\r\n\r\n this.busy = true;\r\n this.error = false;\r\n\r\n var resizedImage = this.newPhoto.dataUrl;\r\n\r\n this.photoService\r\n .uploadPhoto(this.student.oneSchoolId, resizedImage)\r\n .then(photoUrl => {\r\n this.student.photoUrl = photoUrl;\r\n this.student.photoContentUrl = resizedImage;\r\n this.$location.path(`/student/${this.student.oneSchoolId}/${this.enrolment.schoolCode}`);\r\n })\r\n .catch(response => {\r\n this.error = true;\r\n this.$log.error(\"Error uploading photo\", response);\r\n })\r\n .finally(() => {\r\n this.busy = false;\r\n deferred.resolve();\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n navigateBack() {\r\n window.history.back();\r\n }\r\n\r\n /* Enable this for Native Camera Functionality \r\n Current Issue: \r\n - Limited Access Photo Library Require Manual Implementation https://github.com/ionic-team/capacitor/issues/3841\r\n private takePhotoUsingNative() {\r\n const deferred = this.$q.defer();\r\n this.$q.when(Camera.checkPermissions()).then(permissionStatus => {\r\n if (permissionStatus.camera === \"prompt\" || permissionStatus.camera === \"prompt-with-rationale\") {\r\n Camera.requestPermissions({ permissions: [\"camera\"] }).then(requestPermissionResult => {\r\n this.getPhotoFromNativeCamera(deferred, requestPermissionResult);\r\n });\r\n return;\r\n }\r\n this.getPhotoFromNativeCamera(deferred, permissionStatus);\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n private getPhotoFromNativeCamera(deferred: IDeferred, permissionStatus: PermissionStatus) {\r\n if (permissionStatus.camera === \"granted\" || permissionStatus.camera === \"limited\") {\r\n Camera.getPhoto({ ...DefaultImageOptions, source: CameraSource.Camera, direction: CameraDirection.Rear })\r\n .then(photo => {\r\n this.getNativeCameraSuccesHandler(photo);\r\n deferred.resolve();\r\n })\r\n .catch(error => {\r\n this.$log.warn(`Error taking picture with camera: ${error}`);\r\n deferred.reject(error);\r\n })\r\n .finally(() => {\r\n this.busy = false;\r\n });\r\n } else {\r\n deferred.reject(\"Permission to access camera not granted\");\r\n this.busy = false;\r\n }\r\n }\r\n\r\n private fromGalleryUsingNative() {\r\n const deferred = this.$q.defer();\r\n\r\n this.$q.when(Camera.checkPermissions()).then(permissionStatus => {\r\n if (permissionStatus.photos === \"prompt\" || permissionStatus.photos === \"prompt-with-rationale\") {\r\n Camera.requestPermissions({ permissions: [\"photos\"] }).then(requestPermissionResult => {\r\n this.getPhotoFromNativeGallery(deferred, requestPermissionResult);\r\n });\r\n return;\r\n }\r\n this.getPhotoFromNativeGallery(deferred, permissionStatus);\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n private getPhotoFromNativeGallery(deferred: IDeferred, permissionStatus: PermissionStatus) {\r\n if (permissionStatus.photos === \"granted\" || permissionStatus.photos === \"limited\") {\r\n Camera.getPhoto({ ...DefaultImageOptions, source: CameraSource.Photos })\r\n .then(photo => {\r\n this.getNativeCameraSuccesHandler(photo);\r\n deferred.resolve();\r\n })\r\n .catch(error => {\r\n this.$log.warn(`Error getting picture from gallery: ${error}`);\r\n deferred.reject(error);\r\n })\r\n .finally(() => {\r\n this.busy = false;\r\n });\r\n } else {\r\n deferred.reject(\"Permission to access library not granted\");\r\n this.busy = false;\r\n }\r\n }\r\n\r\n getNativeCameraSuccesHandler(photo: Photo) {\r\n this.newPhoto.dataUrl = photo.dataUrl;\r\n this.newPhoto.format = photo.format;\r\n }*/\r\n}\r\n","import { app } from \"../app.module\";\r\n\r\nimport templateUrl from \"./privacy.html\";\r\n\r\napp.directive(\"privacyComponent\", () => ({\r\n templateUrl,\r\n scope: true,\r\n replace: true,\r\n restrict: \"E\"\r\n}));\r\n","import { app } from \"../app.module\";\r\nimport { AuthorisationService } from \"../services/authorisationService\";\r\nimport { ILoginService } from \"../services/loginService\";\r\nimport { IPreferencesService } from \"../services/preferencesService\";\r\nimport { Dialog } from \"@capacitor/dialog\";\r\n\r\nconst controllerId = \"biometrics\";\r\nimport templateUrl from \"./biometrics.html\";\r\nimport angular from \"angular\";\r\n\r\napp.component(`${controllerId}Component`, {\r\n templateUrl,\r\n controller: biometricsController,\r\n controllerAs: \"vm\"\r\n});\r\n\r\nfunction biometricsController($q: angular.IQService, $log: angular.ILogService, preferencesService: IPreferencesService, loginService: ILoginService, authorisationService: AuthorisationService) {\r\n \"ngInject\";\r\n var vm = this;\r\n\r\n vm.isBiometricsRegistered = false;\r\n vm.isBiometricAvailable = false;\r\n vm.availableBiometryTypeDescription = \"\";\r\n vm.submit = submit;\r\n\r\n initialise();\r\n\r\n function initialise() {\r\n vm.busy = true;\r\n\r\n loginService\r\n .checkIfBiometricAvailable()\r\n .then(result => {\r\n if (result.isAvailable) {\r\n $log.debug(\"biometrics - Biometrics is available.\");\r\n vm.isBiometricAvailable = true;\r\n vm.availableBiometryTypeDescription = result.description;\r\n\r\n preferencesService\r\n .getIsCredentialSaved()\r\n .then(result => {\r\n vm.isBiometricsRegistered = result;\r\n })\r\n .finally(() => {\r\n vm.busy = false;\r\n });\r\n } else {\r\n $log.debug(\"biometrics - Biometrics is unavailable.\");\r\n vm.isBiometricAvailable = false;\r\n vm.busy = false;\r\n }\r\n })\r\n .catch(error => {\r\n vm.busy = false;\r\n $log.error(\"biometrics - Unexpected error checking Biometrics\", angular.toJson(error));\r\n });\r\n }\r\n\r\n function submit() {\r\n if (vm.busy) return;\r\n\r\n var deferred = $q.defer();\r\n\r\n if (vm.isBiometricsRegistered) {\r\n vm.busy = true;\r\n $log.debug(\"biometrics - Removing Biometrics\");\r\n removeBiometrics(deferred);\r\n } else {\r\n $log.debug(\"biometrics - Registering Biometrics\");\r\n vm.busy = true;\r\n $q.when(\r\n Dialog.confirm({\r\n title: \"Confirmation\",\r\n message: \"Please confirm that you wish to be logged out to register for biometrics\"\r\n })\r\n )\r\n .then(confirmResult => {\r\n if (confirmResult.value) {\r\n registerBiometrics(deferred);\r\n } else {\r\n vm.busy = false;\r\n deferred.resolve();\r\n }\r\n })\r\n .catch(() => {\r\n vm.busy = false;\r\n deferred.resolve();\r\n });\r\n }\r\n\r\n return deferred.promise;\r\n }\r\n\r\n function registerBiometrics(deferred) {\r\n preferencesService.setIsCredentialPrompted(false).then(() => {\r\n $log.debug(\"biometrics - Logging out the user\");\r\n authorisationService.logout().finally(() => {\r\n vm.busy = false;\r\n deferred.resolve();\r\n });\r\n });\r\n }\r\n\r\n function removeBiometrics(deferred) {\r\n preferencesService\r\n .setIsCredentialSaved(false)\r\n .then(() => {\r\n $log.debug(\"biometrics - Removing the biometrics\");\r\n loginService\r\n .deleteBiometricCredential()\r\n .then(result => {\r\n if (result) {\r\n vm.isBiometricsRegistered = false;\r\n }\r\n })\r\n .finally(() => {\r\n vm.busy = false;\r\n deferred.resolve();\r\n });\r\n })\r\n .catch(() => {\r\n vm.busy = false;\r\n deferred.resolve();\r\n });\r\n }\r\n}\r\n","import { app } from \"../app.module\";\r\nimport { IDeviceService } from \"../services/deviceServiceProvider\";\r\nimport { INativeSettingsLauncherService } from \"../services/nativeSettingsLauncherService\";\r\n\r\nimport templateUrl from \"./push-notification-settings.html\";\r\nimport \"./push-notification-settings.less\";\r\nimport { INativeSettingsService } from \"../services/nativeSettingsService\";\r\n\r\nconst controllerId = \"pushNotificationSettings\";\r\napp.directive(`${controllerId}Component`, () => ({\r\n templateUrl,\r\n scope: true,\r\n controller: PushNotificationsComponent,\r\n controllerAs: \"vm\",\r\n restrict: \"E\",\r\n replace: true\r\n}));\r\n\r\nclass PushNotificationsComponent {\r\n busy: boolean;\r\n error: boolean;\r\n isFeatureAvailable: boolean;\r\n isPushNotificationEnabled: boolean;\r\n pushNotificationSetting: { receiveNewConsentRequestNotification: boolean };\r\n\r\n constructor(\r\n deviceService: IDeviceService,\r\n private nativeSettingsService: INativeSettingsService,\r\n private nativeSettingsLauncherService: INativeSettingsLauncherService\r\n ) {\r\n \"ngInject\";\r\n\r\n this.isFeatureAvailable = deviceService.isMobileApp;\r\n this.nativeSettingsService.isRemoteNotificationEnabled().then(result => {\r\n this.isPushNotificationEnabled = result;\r\n });\r\n\r\n this.pushNotificationSetting = {\r\n receiveNewConsentRequestNotification: true\r\n };\r\n }\r\n\r\n openPushNotificationSettings() {\r\n this.nativeSettingsLauncherService.openPushNotificationSettings().then(result => {\r\n return result;\r\n });\r\n }\r\n}\r\n","import { app } from \"../app.module\";\r\nimport { User } from \"../models/user\";\r\nimport { IDataContext } from \"../services/dataContext\";\r\nimport { IDeviceService } from \"../services/deviceServiceProvider\";\r\nimport { INativeSettingsLauncherService } from \"../services/nativeSettingsLauncherService\";\r\n\r\nconst controllerId = \"profile\";\r\nimport templateUrl from \"./profile.html\";\r\nimport \"./biometrics\";\r\nimport \"./push-notification-settings\";\r\n\r\napp.directive(`${controllerId}Component`, () => ({\r\n templateUrl,\r\n scope: true,\r\n controller: ProfileComponent,\r\n controllerAs: \"vm\",\r\n restrict: \"E\",\r\n replace: true\r\n}));\r\n\r\ntype ParentViewInfo =\r\n | { isRedacted: true }\r\n | {\r\n emailAddress: string;\r\n pendingEmailAddress: string;\r\n mobileNumber: string;\r\n };\r\n\r\nclass ProfileComponent {\r\n emailWasConfirmed: boolean;\r\n isMobileApp: boolean;\r\n parent: ParentViewInfo;\r\n\r\n constructor(\r\n $routeParams: angular.route.IRouteParamsService,\r\n private $location: ng.ILocationService,\r\n private dataContext: IDataContext,\r\n private deviceService: IDeviceService,\r\n private nativeSettingsLauncherService: INativeSettingsLauncherService\r\n ) {\r\n \"ngInject\";\r\n this.emailWasConfirmed = $routeParams.emailConfirmed === \"true\";\r\n this.isMobileApp = deviceService.isMobileApp;\r\n\r\n this.dataContext.getData().then(user => {\r\n if (this.isUnauthorised(user)) return;\r\n\r\n if (this.dataContext.isAdminView()) {\r\n this.parent = {\r\n isRedacted: true\r\n };\r\n return;\r\n }\r\n\r\n this.parent = {\r\n emailAddress: user.emailAddress,\r\n mobileNumber: user.mobileNumber,\r\n pendingEmailAddress: user.pendingEmailAddress\r\n };\r\n\r\n if (this.emailWasConfirmed === true && this.parent.pendingEmailAddress) {\r\n this.parent.emailAddress = this.parent.pendingEmailAddress;\r\n this.parent.pendingEmailAddress = null;\r\n }\r\n });\r\n }\r\n\r\n isUnauthorised(user: User) {\r\n if (!user.isActive) {\r\n this.$location.path(\"/featureUnavailable\");\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n","import { ILocationService, ILogService, IQService } from \"angular\";\r\nimport { app } from \"../app.module\";\r\nimport { IApiService } from \"../services/apiServiceProvider\";\r\n\r\nconst controllerId = \"changePassword\";\r\nimport templateUrl from \"./changePassword.html\";\r\nimport { ICommonService } from \"../services/common\";\r\n\r\napp.directive(`${controllerId}Component`, () => ({\r\n templateUrl,\r\n scope: true,\r\n controller: changePassword,\r\n controllerAs: \"vm\",\r\n restrict: \"E\",\r\n replace: true\r\n}));\r\n\r\nfunction changePassword(common: ICommonService, $location: ILocationService, $q: IQService, apiService: IApiService, $log: ILogService, $scope) {\r\n \"ngInject\";\r\n var vm = this;\r\n\r\n vm.oldPassword = null;\r\n vm.newPassword = null;\r\n vm.newPasswordConfirmation = null;\r\n vm.error = null;\r\n vm.save = save;\r\n\r\n common.activateController([], controllerId).then(function () {});\r\n\r\n function save() {\r\n if ($scope.form.$invalid) return;\r\n\r\n if (vm.busy) return;\r\n vm.busy = true;\r\n vm.error = null;\r\n\r\n var deferred = $q.defer();\r\n apiService\r\n .changePassword({\r\n OldPassword: vm.oldPassword,\r\n NewPassword: vm.newPassword,\r\n NewPasswordConfirmation: vm.newPasswordConfirmation\r\n })\r\n .then(response => {\r\n const data = response.data;\r\n if (data.success) {\r\n $location.path(\"/profile\").hash(\"submitted\");\r\n } else {\r\n vm.error = data.errorMessage;\r\n vm.oldPassword = null;\r\n }\r\n })\r\n .catch(response => {\r\n vm.error = \"Your request could not be updated due to a system failure.\";\r\n $log.error(\"Error changing the password\", response);\r\n })\r\n .finally(() => {\r\n vm.busy = false;\r\n deferred.resolve();\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n}\r\n","import { ILogService, IQService } from \"angular\";\r\nimport { app } from \"../app.module\";\r\nimport { IApiService } from \"../services/apiServiceProvider\";\r\nimport { IDataContext } from \"../services/dataContext\";\r\n\r\nconst controllerId = \"email\";\r\nimport templateUrl from \"./email.html\";\r\nimport { ICommonService } from \"../services/common\";\r\n\r\napp.directive(`${controllerId}Component`, () => ({\r\n templateUrl,\r\n scope: true,\r\n controller: email,\r\n controllerAs: \"vm\",\r\n restrict: \"E\",\r\n replace: true\r\n}));\r\n\r\nfunction email(common: ICommonService, dataContext: IDataContext, $q: IQService, $log: ILogService, $timeout, apiService: IApiService, $scope) {\r\n \"ngInject\";\r\n var vm = this;\r\n var userToUpdate = null;\r\n vm.password = null;\r\n vm.email = null;\r\n vm.newEmail = null;\r\n vm.save = save;\r\n vm.error = false;\r\n vm.busy = false;\r\n\r\n common.activateController([getProfile()], controllerId).then(function () {});\r\n\r\n function getProfile() {\r\n return dataContext.getData().then(function (user) {\r\n userToUpdate = user;\r\n vm.email = dataContext.isAdminView() ? \"Unavailable in QParents Administration View\" : user.emailAddress;\r\n vm.submitted = false;\r\n vm.submittedEmail = null;\r\n setInitialFocus();\r\n });\r\n }\r\n\r\n function setInitialFocus() {\r\n $timeout(function () {\r\n $(\"#email\").trigger(\"focus\");\r\n }, 100);\r\n }\r\n\r\n function save() {\r\n if ($scope.editEmail.$invalid) return;\r\n if (vm.busy) return;\r\n\r\n vm.busy = true;\r\n vm.error = false;\r\n\r\n var deferred = $q.defer();\r\n var newEmail = vm.newEmail;\r\n var confirmEmail = vm.confirmEmail;\r\n var password = vm.password;\r\n\r\n apiService\r\n .changeEmail({\r\n email: newEmail,\r\n confirmEmail: confirmEmail,\r\n password: password\r\n })\r\n .then(response => {\r\n const data = response.data;\r\n if (data.success) {\r\n userToUpdate.pendingEmailAddress = newEmail;\r\n vm.submittedEmail = newEmail;\r\n vm.submitted = true;\r\n } else {\r\n vm.error = true;\r\n }\r\n })\r\n .catch(response => {\r\n vm.error = true;\r\n $log.error(\"Error changing the email\", response);\r\n })\r\n .finally(() => {\r\n vm.busy = false;\r\n deferred.resolve();\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n}\r\n","import { ILogService, IQService } from \"angular\";\r\nimport { app } from \"../app.module\";\r\nimport { ICommonService } from \"../services/common\";\r\nimport { IDataContext } from \"../services/dataContext\";\r\n\r\nconst controllerId = \"mobile\";\r\nimport templateUrl from \"./mobile.html\";\r\nimport { IApiService } from \"../services/apiServiceProvider\";\r\n\r\napp.directive(`${controllerId}Component`, () => ({\r\n templateUrl,\r\n scope: true,\r\n controller: mobile,\r\n controllerAs: \"vm\",\r\n restrict: \"E\",\r\n replace: true\r\n}));\r\n\r\nfunction mobile(common: ICommonService, dataContext: IDataContext, $q: IQService, apiService: IApiService, $log: ILogService, $scope) {\r\n \"ngInject\";\r\n var vm = this;\r\n var userToUpdate = null;\r\n\r\n vm.mobile = null;\r\n vm.save = save;\r\n vm.submitted = false;\r\n vm.busy = false;\r\n vm.error = false;\r\n\r\n common.activateController([getProfile()], controllerId).then(function () {});\r\n\r\n function getProfile() {\r\n return dataContext.getData().then(function (user) {\r\n userToUpdate = user;\r\n vm.mobile = dataContext.isAdminView() ? \"Unavailable in QParents Administration View\" : user.mobileNumber;\r\n });\r\n }\r\n\r\n function save() {\r\n if ($scope.editMobile.$invalid) return;\r\n\r\n vm.busy = true;\r\n vm.error = false;\r\n\r\n var deferred = $q.defer();\r\n var newMobile = vm.mobile;\r\n\r\n apiService\r\n .changeMobile({\r\n mobile: newMobile\r\n })\r\n .then(() => {\r\n userToUpdate.mobileNumber = newMobile;\r\n vm.submitted = true;\r\n })\r\n .catch(response => {\r\n vm.error = true;\r\n $log.error(\"Error changing the mobile\", response);\r\n })\r\n .finally(() => {\r\n vm.busy = false;\r\n deferred.resolve();\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n}\r\n","import angular, { ILocationService, ILogService, IQService } from \"angular\";\r\nimport { app } from \"../app.module\";\r\n\r\nconst controllerId = \"other\";\r\nimport templateUrl from \"./other.html\";\r\nimport { IDataContext } from \"../services/dataContext\";\r\nimport { User } from \"../models/user\";\r\nimport { ICommonService } from \"../services/common\";\r\n\r\napp.directive(`${controllerId}Component`, () => ({\r\n templateUrl,\r\n scope: true,\r\n controller: other,\r\n controllerAs: \"vm\",\r\n restrict: \"E\",\r\n replace: true\r\n}));\r\n\r\nfunction other(common: ICommonService, dataContext: IDataContext, $location: ILocationService, STATES, $q: IQService, $log: ILogService, $timeout) {\r\n \"ngInject\";\r\n var vm = this;\r\n var originalParent: User = null;\r\n\r\n vm.STATES = STATES;\r\n\r\n vm.parent = null;\r\n vm.postalAddressIsSameAsResidential = false;\r\n\r\n vm.save = save;\r\n vm.clearPostalAddress = clearPostalAddress;\r\n vm.busy = false;\r\n vm.error = false;\r\n\r\n common.activateController([getProfile()], controllerId).then(function () {});\r\n\r\n function getProfile() {\r\n return dataContext.getData().then(function (user) {\r\n if (isUnauthorised(user)) return;\r\n\r\n originalParent = user;\r\n vm.parent = angular.copy(originalParent);\r\n\r\n setIfPostalAddressIsSameAsResidential();\r\n setInitialFocus();\r\n });\r\n }\r\n\r\n function isUnauthorised(user: User) {\r\n if (!user.isPpao) {\r\n $location.path(\"/featureUnavailable\");\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n function setInitialFocus() {\r\n $timeout(function () {\r\n $(\"#residentialLine1\").trigger(\"focus\");\r\n }, 100);\r\n }\r\n\r\n function clearPostalAddress(shouldClear) {\r\n if (shouldClear) {\r\n angular.forEach(vm.parent.postalAddress, function (_, key) {\r\n vm.parent.postalAddress[key] = \"\";\r\n });\r\n }\r\n }\r\n\r\n function setIfPostalAddressIsSameAsResidential() {\r\n vm.postalAddressIsSameAsResidential = vm.parent.postalAddress.line1 === \"\";\r\n }\r\n\r\n function save() {\r\n if (vm.busy) return;\r\n\r\n var deferred = $q.defer();\r\n vm.busy = true;\r\n vm.error = false;\r\n\r\n dataContext\r\n .saveParentDetails(vm.parent)\r\n .then(function () {\r\n populateUpdatedDetails(originalParent, vm);\r\n $location.path(\"/profile\").hash(\"submitted\");\r\n })\r\n .catch(response => {\r\n vm.error = true;\r\n $log.error(\"Error changing the other details\", response);\r\n })\r\n .finally(() => {\r\n vm.busy = false;\r\n deferred.resolve();\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n function populateUpdatedDetails(originalParent: User, vm) {\r\n const parent: User = vm.parent;\r\n originalParent.updatedDetails = {\r\n oneSchoolParentId: parent.oneSchoolParentId,\r\n timestamp: new Date(),\r\n residentialAddress: angular.copy(parent.residentialAddress),\r\n contacts: angular.copy(parent.contacts),\r\n postalAddress: vm.postalAddressIsSameAsResidential ? null : angular.copy(parent.postalAddress)\r\n };\r\n }\r\n}\r\n","import { app } from \"../../app.module\";\r\nimport { IUrlResolver } from \"@/app/services/urlResolver\";\r\nimport { SESSION_AO_CODE_KEY, TERMS_AND_CONDITION_LABELS } from \"../../configuration\";\r\nimport { platformService } from \"../../services/platformService\";\r\nimport \"./invitation.less\";\r\n\r\nconst controllerId = \"accountOwnerInvitation\";\r\nimport templateUrl from \"./invitation.html\";\r\nimport { IDataContext } from \"@/app/services/dataContext\";\r\nimport { ILocalStorageService } from \"angular-local-storage\";\r\nimport { ILocationService, ISCEService } from \"angular\";\r\nimport { IValidateInvitationCodeResponse } from \"@/app/services/invitationService\";\r\n\r\napp.component(`${controllerId}Component`, {\r\n templateUrl: templateUrl,\r\n controller: accountOwnerInvitation,\r\n controllerAs: \"vm\",\r\n bindings: {} // Add any bindings here\r\n});\r\n\r\nfunction accountOwnerInvitation(\r\n $routeParams: angular.route.IRouteParamsService,\r\n $sce: ISCEService,\r\n $location: ILocationService,\r\n localStorageService: ILocalStorageService,\r\n invitationService,\r\n dataContext: IDataContext,\r\n authorisationService,\r\n platformService: platformService,\r\n urlResolver: IUrlResolver\r\n) {\r\n \"ngInject\";\r\n var vm = this;\r\n var sessionId = null;\r\n\r\n vm.busy = false;\r\n\r\n vm.code = null;\r\n vm.validationResponse = null;\r\n\r\n vm.disableCodeInput = false;\r\n vm.showNext = true;\r\n vm.showTryAgain = false;\r\n vm.showAccept = false;\r\n\r\n vm.pendingTermsAndConditions = [];\r\n vm.acceptedAllTermsAndConditions = false;\r\n vm.hasTermsAndConditions = false;\r\n\r\n vm.validateInvitationCode = validateInvitationCode;\r\n vm.checkIfAllTermsAndConditionsAccepted = checkIfAllTermsAndConditionsAccepted;\r\n vm.navigateToNameVerificationIfNotBusy = navigateToNameVerificationIfNotBusy;\r\n vm.hideErrorMessage = hideErrorMessage;\r\n\r\n initialise();\r\n\r\n function initialise() {\r\n clearSessionInvitationCode();\r\n\r\n if (dataContext.isAuthenticated()) {\r\n authorisationService.logout($location.url());\r\n return;\r\n }\r\n vm.IsOutDatedBrowser = platformService.isSafariBrowserAndVersionIsLessThanOrEqualTo12();\r\n vm.code = $routeParams.code;\r\n }\r\n\r\n function validateInvitationCode(code) {\r\n if (vm.busy) return;\r\n if (vm.form.$invalid) return;\r\n vm.busy = true;\r\n\r\n return invitationService\r\n .validateInvitationCode(code)\r\n .then(refreshPage)\r\n .finally(function () {\r\n vm.busy = false;\r\n });\r\n }\r\n\r\n function refreshPage(validationResponse: IValidateInvitationCodeResponse) {\r\n vm.validationResponse = validationResponse;\r\n vm.showNext = false;\r\n vm.showTryAgain = !validationResponse.valid;\r\n vm.showAccept = validationResponse.valid;\r\n\r\n sessionId = validationResponse.sessionId;\r\n\r\n if (validationResponse.valid) {\r\n vm.disableCodeInput = true;\r\n showAnyPendingTermsAndConditions(validationResponse.pendingTermsAndConditionsKeys);\r\n }\r\n }\r\n\r\n function navigateToNameVerificationIfNotBusy() {\r\n if (vm.busy) return;\r\n vm.busy = true;\r\n\r\n navigateToNameVerification();\r\n }\r\n\r\n function navigateToNameVerification() {\r\n localStorageService.set(SESSION_AO_CODE_KEY, sessionId);\r\n $location.path(\"/registration/account-owner/verify\");\r\n }\r\n\r\n function showAnyPendingTermsAndConditions(pendingTermsAndConditionsKeys: string[]) {\r\n vm.hasTermsAndConditions = pendingTermsAndConditionsKeys.length > 0;\r\n vm.acceptedAllTermsAndConditions = !vm.hasTermsAndConditions;\r\n\r\n if (vm.acceptedAllTermsAndConditions) {\r\n navigateToNameVerification();\r\n return;\r\n }\r\n\r\n vm.pendingTermsAndConditions = pendingTermsAndConditionsKeys.map(function (key) {\r\n return {\r\n url: $sce.trustAsResourceUrl(urlResolver.resolve(\"/api/termsandconditions/\" + key)),\r\n checked: false,\r\n key: key,\r\n label: getCheckboxLabelForTermsAndCondition(key)\r\n };\r\n });\r\n }\r\n\r\n function getCheckboxLabelForTermsAndCondition(key: string) {\r\n var type = key.split(\"-\")[0].toUpperCase();\r\n return TERMS_AND_CONDITION_LABELS[type];\r\n }\r\n\r\n function checkIfAllTermsAndConditionsAccepted(pendingTermsAndConditions) {\r\n vm.acceptedAllTermsAndConditions = pendingTermsAndConditions.every(function (tc) {\r\n return tc.checked;\r\n });\r\n }\r\n\r\n function hideErrorMessage() {\r\n vm.validationResponse = null;\r\n }\r\n\r\n function clearSessionInvitationCode() {\r\n localStorageService.remove(SESSION_AO_CODE_KEY);\r\n }\r\n}\r\n","import { RegisterRequest, RegisterResponse } from \"@/app/models/api\";\r\nimport { app } from \"../../app.module\";\r\nimport { SESSION_AO_CODE_KEY } from \"../../configuration\";\r\nimport \"./register.less\";\r\n\r\nconst controllerId = \"accountOwnerRegister\";\r\nimport templateUrl from \"./register.html\";\r\nimport { IApiService } from \"@/app/services/apiServiceProvider\";\r\nimport { ILocationService, ILogService, IQService } from \"angular\";\r\nimport { ILocalStorageService } from \"angular-local-storage\";\r\n\r\napp.controller(controllerId, accountOwnerRegister);\r\n\r\napp.component(`${controllerId}Component`, {\r\n templateUrl: templateUrl,\r\n bindings: {\r\n registrationContext: \"=\"\r\n },\r\n controller: controllerId,\r\n controllerAs: \"vm\"\r\n});\r\n\r\nfunction accountOwnerRegister(\r\n $rootScope,\r\n $log: ILogService,\r\n $route: angular.route.IRouteService,\r\n $window,\r\n $location: ILocationService,\r\n $q: IQService,\r\n apiService: IApiService,\r\n localStorageService: ILocalStorageService\r\n) {\r\n \"ngInject\";\r\n var vm = this;\r\n var sessionId = null;\r\n\r\n vm.registrationContext = $route.current.locals.registrationContext;\r\n vm.mfaSessionId = null;\r\n vm.verified = false;\r\n vm.message = null;\r\n\r\n vm.registerBusy = false;\r\n vm.registration = {};\r\n vm.showConfirmationMessage = false;\r\n vm.showEmailAlreadyRegistered = false;\r\n vm.submitButtonText = \"Submit\";\r\n vm.showToken = false;\r\n vm.statusMessage = \"\";\r\n vm.errorMessage = \"\";\r\n\r\n vm.showRegister = false;\r\n vm.showAlreadyLoggedInMessage = false;\r\n vm.showAlreadyRegisteredAccountOwner = false;\r\n\r\n vm.cancel = cancel;\r\n vm.submit = submit;\r\n vm.navigateHome = navigateHome;\r\n vm.retryMfa = retryMfa;\r\n\r\n initialise();\r\n\r\n function initialise() {\r\n var sessionToken = getSessionToken();\r\n if (!sessionToken) {\r\n $location.path(\"/\");\r\n return;\r\n }\r\n\r\n sessionId = sessionToken;\r\n\r\n if (vm.registrationContext.verified && vm.registrationContext.wasLoggedIn) {\r\n vm.showAlreadyLoggedInMessage = true;\r\n vm.heading = \"Congratulations\";\r\n vm.verified = vm.registrationContext.verified;\r\n\r\n removeSessionToken();\r\n } else {\r\n vm.verified = vm.registrationContext.verified;\r\n vm.message = vm.registrationContext.message;\r\n vm.showRegister = true;\r\n vm.heading = \"Create an account\";\r\n }\r\n\r\n $rootScope.hideFullScreenLoadingPane();\r\n }\r\n\r\n function retryMfa() {\r\n vm.mfaSessionId = null;\r\n submit(vm.registration);\r\n }\r\n\r\n function cancel() {\r\n removeSessionToken();\r\n $location.path(\"/\");\r\n }\r\n\r\n function submit(registration: RegisterRequest) {\r\n if (vm.registerBusy) return;\r\n const deferred = $q.defer();\r\n\r\n vm.registerBusy = true;\r\n \r\n // R Check registration.mfaCode , Coluld not locate assignment of registration.mfaCode\r\n console.log('Submit Registration')\r\n\r\n vm.showEmailAlreadyRegistered = false;\r\n registration.sessionId = sessionId;\r\n registration.mfaSessionId = vm.mfaSessionId;\r\n\r\n vm.statusMessage = \"\";\r\n apiService\r\n .accountOwnerRegister(registration)\r\n .then(function (response) {\r\n const data = response.data as RegisterResponse;\r\n if (data.emailAlreadyRegistered) {\r\n vm.showEmailAlreadyRegistered = true;\r\n vm.submitButtonText = \"Retry\";\r\n } else if (data.mfaRequired) {\r\n vm.mfaSessionId = data.mfaSessionId;\r\n vm.showToken = true;\r\n vm.statusMessage = data.statusMessage;\r\n vm.errorMessage = data.errorMessage;\r\n } else {\r\n vm.mfaSessionId = null;\r\n vm.showToken = false;\r\n\r\n removeSessionToken();\r\n\r\n vm.showConfirmationMessage = true;\r\n }\r\n })\r\n .catch(response => {\r\n $log.error(\"Registration Failure\", response);\r\n deferred.reject();\r\n })\r\n .finally(function () {\r\n vm.registerBusy = false;\r\n deferred.resolve();\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n function getSessionToken() {\r\n return localStorageService.get(SESSION_AO_CODE_KEY);\r\n }\r\n\r\n function removeSessionToken() {\r\n localStorageService.remove(SESSION_AO_CODE_KEY);\r\n }\r\n\r\n function navigateHome() {\r\n removeSessionToken();\r\n $window.location = \"/\";\r\n }\r\n}\r\n","import { IApiService } from \"@/app/services/apiServiceProvider\";\r\nimport { app } from \"../../app.module\";\r\nimport { SESSION_AO_CODE_KEY } from \"../../configuration\";\r\nimport { ICsrfTokenService } from \"@/app/services/csrfTokenService\";\r\n\r\nconst serviceId = \"accountOwnerRegisterInitialise\";\r\n\r\napp.factory(serviceId, accountOwnerRegisterInitialise);\r\n\r\nfunction accountOwnerRegisterInitialise(\r\n $q,\r\n $route,\r\n $location,\r\n $rootScope,\r\n apiService: IApiService,\r\n localStorageService,\r\n csrfTokenService: ICsrfTokenService\r\n) {\r\n \"ngInject\";\r\n return function () {\r\n var deferred = $q.defer();\r\n\r\n var dvsUserId = $route.current.params.userId;\r\n var sessionId = localStorageService.get(SESSION_AO_CODE_KEY);\r\n\r\n if (!dvsUserId || !sessionId) {\r\n $location.path(\"/\");\r\n deferred.reject();\r\n } else {\r\n $rootScope.showFullScreenLoadingPane();\r\n\r\n csrfTokenService\r\n .ensureCsrfToken()\r\n .then(() => apiService\r\n .accountOwnerActivate({ sessionId: sessionId, userId: dvsUserId }))\r\n .then(response => {\r\n deferred.resolve(response.data);\r\n })\r\n .catch(() => {\r\n deferred.reject();\r\n })\r\n .finally(() => {\r\n $rootScope.hideFullScreenLoadingPane();\r\n });\r\n }\r\n\r\n return deferred.promise;\r\n };\r\n}\r\n","import { app } from \"../../app.module\";\r\nimport { SESSION_AO_CODE_KEY } from \"../../configuration\";\r\nimport { IAssociateAdditionalRegistration } from \"../../services/dataContext\";\r\n\r\nconst controllerId = \"accountOwnerVerify\";\r\nimport templateUrl from \"./verify.html\";\r\n\r\napp.controller(controllerId, accountOwnerVerify);\r\n\r\napp.component(`${controllerId}Component`, {\r\n templateUrl: templateUrl,\r\n controller: controllerId,\r\n controllerAs: \"vm\",\r\n bindings: {\r\n dvsContext: \"=\"\r\n }\r\n});\r\n\r\nfunction accountOwnerVerify($location, $sce, $route, localStorageService, dataContext) {\r\n \"ngInject\";\r\n var vm = this;\r\n\r\n vm.isThisYou = null;\r\n vm.hasExistingLogin = null;\r\n\r\n vm.busy = false;\r\n\r\n vm.dvs = $route.current.locals.dvsContext;\r\n vm.dvsUrl = null;\r\n\r\n vm.cancel = cancel;\r\n vm.dvsSubmit = dvsSubmit;\r\n vm.onLogin = onLogin;\r\n\r\n vm.associateAdditionalRegistrationResponse = null;\r\n\r\n initialise();\r\n\r\n function initialise() {\r\n vm.dvsUrl = $sce.trustAsResourceUrl(vm.dvs.dvsUrl);\r\n }\r\n\r\n function cancel() {\r\n localStorageService.remove(SESSION_AO_CODE_KEY);\r\n $location.path(\"/\");\r\n }\r\n\r\n function dvsSubmit() {\r\n if (vm.busy) return;\r\n vm.busy = true;\r\n\r\n document.forms[\"dvsForm\"].submit();\r\n }\r\n\r\n function onLogin() {\r\n if (vm.busy) return;\r\n\r\n vm.busy = true;\r\n vm.hasAssociateRegError = false;\r\n vm.associateRegError = null;\r\n\r\n dataContext.associateAdditionalRegistration(getSessionToken()).then(\r\n function (data: IAssociateAdditionalRegistration) {\r\n vm.busy = false;\r\n vm.associateAdditionalRegistrationResponse = data;\r\n vm.associateRegError = data.errorMessage;\r\n\r\n if (data.valid) {\r\n $location.path(\"/addStudent\");\r\n } else if (data.userNotAccountOwner) {\r\n dvsSubmit();\r\n }\r\n },\r\n function (data) {\r\n vm.associateAdditionalRegistrationResponse = data;\r\n vm.busy = false;\r\n }\r\n );\r\n }\r\n\r\n function getSessionToken() {\r\n return localStorageService.get(SESSION_AO_CODE_KEY);\r\n }\r\n}\r\n","import { IApiService } from \"@/app/services/apiServiceProvider\";\r\nimport { app } from \"../../app.module\";\r\nimport { SESSION_AO_CODE_KEY } from \"../../configuration\";\r\n\r\nconst serviceId = \"accountOwnerVerifyInitialise\";\r\n\r\napp.factory(serviceId, accountOwnerVerifyInitialise);\r\n\r\nfunction accountOwnerVerifyInitialise($q, $location, apiService: IApiService, localStorageService) {\r\n \"ngInject\";\r\n return function () {\r\n var deferred = $q.defer();\r\n var sessionId = localStorageService.get(SESSION_AO_CODE_KEY);\r\n if (!sessionId) {\r\n $location.path(\"/\");\r\n deferred.reject();\r\n } else {\r\n apiService.getAccountOwnerVerification(sessionId).then(\r\n function successCallback(response) {\r\n deferred.resolve(response.data);\r\n },\r\n function errorCallback() {\r\n deferred.reject();\r\n }\r\n );\r\n }\r\n\r\n return deferred.promise;\r\n };\r\n}\r\n","import { app } from \"../../app.module\";\r\nimport { IUrlResolver } from \"@/app/services/urlResolver\";\r\nimport { SESSION_DV_CODE_KEY, TERMS_AND_CONDITION_LABELS } from \"../../configuration\";\r\n\r\nconst controllerId = \"delegatedViewerInvitation\";\r\nimport templateUrl from \"./invitation.html\";\r\nimport { ILocationService, ISCEService } from \"angular\";\r\nimport { ILocalStorageService } from \"angular-local-storage\";\r\napp.controller(controllerId, delegatedViewerInvitation);\r\n\r\napp.component(`${controllerId}Component`, {\r\n templateUrl: templateUrl,\r\n bindings: {\r\n invitationContext: \"=\"\r\n },\r\n controller: controllerId,\r\n controllerAs: \"vm\"\r\n});\r\n\r\nfunction delegatedViewerInvitation($sce: ISCEService, $location: ILocationService, localStorageService: ILocalStorageService, $route, urlResolver: IUrlResolver) {\r\n \"ngInject\";\r\n var vm = this;\r\n var invitationContext = $route.current.locals.invitationContext;\r\n\r\n var fullName = invitationContext.delegatedViewerFullName;\r\n\r\n vm.busy = false;\r\n\r\n vm.showInvalidCodeError = false;\r\n vm.showAcceptingOwnInvitationMessageError = false;\r\n vm.showTermsAndConditions = false;\r\n\r\n vm.pendingTermsAndConditions = [];\r\n vm.acceptedAllTermsAndConditions = false;\r\n vm.hasTermsAndConditions = false;\r\n\r\n vm.checkIfAllTermsAndConditionsAccepted = checkIfAllTermsAndConditionsAccepted;\r\n vm.navigateToNameVerification = navigateToNameVerification;\r\n\r\n initialise();\r\n\r\n function initialise() {\r\n clearSessionInvitationCode();\r\n\r\n var validCode = invitationContext.validCode;\r\n vm.showTermsAndConditions = validCode;\r\n vm.showAcceptingOwnInvitationMessageError = !validCode && invitationContext.acceptingOwnInvitation;\r\n vm.showInvalidCodeError = !validCode && !invitationContext.acceptingOwnInvitation;\r\n\r\n if (invitationContext.validCode) {\r\n showAnyPendingTermsAndConditions(invitationContext.pendingTermsAndConditionsKeys);\r\n }\r\n }\r\n\r\n function navigateToNameVerification() {\r\n if (vm.busy) return;\r\n vm.busy = true;\r\n\r\n localStorageService.set(SESSION_DV_CODE_KEY, {\r\n sessionId: invitationContext.sessionId,\r\n name: fullName\r\n });\r\n\r\n $location.path(\"/registration/delegated-viewer/verify\");\r\n }\r\n\r\n function showAnyPendingTermsAndConditions(pendingTermsAndConditionsKeys) {\r\n vm.hasTermsAndConditions = pendingTermsAndConditionsKeys.length > 0;\r\n vm.acceptedAllTermsAndConditions = !vm.hasTermsAndConditions;\r\n vm.pendingTermsAndConditions = pendingTermsAndConditionsKeys.map(function (key) {\r\n return {\r\n url: $sce.trustAsResourceUrl(urlResolver.resolve(\"/api/termsandconditions/\" + key)),\r\n checked: false,\r\n key: key,\r\n label: getCheckboxLabelForTermsAndCondition(key)\r\n };\r\n });\r\n }\r\n\r\n function getCheckboxLabelForTermsAndCondition(key) {\r\n var type = key.split(\"-\")[0].toUpperCase();\r\n return TERMS_AND_CONDITION_LABELS[type];\r\n }\r\n\r\n function checkIfAllTermsAndConditionsAccepted(pendingTermsAndConditions) {\r\n vm.acceptedAllTermsAndConditions = pendingTermsAndConditions.every(function (tc) {\r\n return tc.checked;\r\n });\r\n }\r\n\r\n function clearSessionInvitationCode() {\r\n localStorageService.remove(SESSION_DV_CODE_KEY);\r\n }\r\n}\r\n","import { IApiService } from \"@/app/services/apiServiceProvider\";\r\nimport { app } from \"../../app.module\";\r\nimport { SESSION_DV_CODE_KEY } from \"../../configuration\";\r\nimport { AuthorisationService } from \"../../services/authorisationService\";\r\nimport { ILocationService, ILogService, IQService } from \"angular\";\r\nimport { ILocalStorageService } from \"angular-local-storage\";\r\n\r\nconst serviceId = \"delegatedViewerInvitationInitialise\";\r\n\r\napp.factory(serviceId, delegatedViewerInvitationInitialise);\r\n\r\nfunction delegatedViewerInvitationInitialise(\r\n $q: IQService,\r\n $location: ILocationService,\r\n $log: ILogService,\r\n $route,\r\n localStorageService: ILocalStorageService,\r\n apiService: IApiService,\r\n authorisationService: AuthorisationService\r\n) {\r\n \"ngInject\";\r\n return function () {\r\n var deferred = $q.defer();\r\n var code = $route.current.params.code;\r\n\r\n if (!code) {\r\n $location.path(\"/\");\r\n deferred.reject();\r\n } else {\r\n apiService\r\n .getDelegatedViewerInvitation(code)\r\n .then(function successCallback(response) {\r\n const data = response.data;\r\n // if no pending terms and conditions then\r\n // skip the accept terms and conditions\r\n if (data.validCode && data.pendingTermsAndConditionsKeys.length === 0) {\r\n localStorageService.set(SESSION_DV_CODE_KEY, {\r\n sessionId: data.sessionId,\r\n name: data.delegatedViewerFullName\r\n });\r\n\r\n $location.path(\"/registration/delegated-viewer/verify\");\r\n deferred.reject();\r\n } else {\r\n deferred.resolve(data);\r\n }\r\n })\r\n .catch(response => {\r\n $log.error(\"invitationInitialise - Error initialising the invitation\", response);\r\n deferred.reject();\r\n })\r\n .finally(function () {\r\n // If user is already logged in, then log them out as a security precaution\r\n // this will prevent the case where the DV accepts the invitation on a computer, where someone\r\n // else is logged into QParents and we automatically add the delegated student to the wrong account\r\n authorisationService.clearAuthenticationCookieWithoutPublishing();\r\n });\r\n }\r\n\r\n return deferred.promise;\r\n };\r\n}\r\n","import { IApiService } from \"@/app/services/apiServiceProvider\";\r\nimport { app } from \"../../app.module\";\r\nimport { SESSION_DV_CODE_KEY } from \"../../configuration\";\r\nimport { ILocationService, ILogService, IQService } from \"angular\";\r\nimport { ILocalStorageService } from \"angular-local-storage\";\r\nimport { IDataContext } from \"@/app/services/dataContext\";\r\n\r\nconst controllerId = \"delegatedViewerRegister\";\r\nconst templateUrl = require(\"./register.html\");\r\n\r\napp.directive(`${controllerId}Component`, () => ({\r\n templateUrl,\r\n scope: true,\r\n controller: delegatedViewerRegister,\r\n controllerAs: \"vm\",\r\n restrict: \"E\",\r\n replace: true\r\n}));\r\n\r\nfunction delegatedViewerRegister(\r\n $window,\r\n $location: ILocationService,\r\n localStorageService: ILocalStorageService,\r\n apiService: IApiService,\r\n dataContext: IDataContext,\r\n $log: ILogService,\r\n $q: IQService\r\n) {\r\n \"ngInject\";\r\n var vm = this;\r\n var sessionId = null;\r\n\r\n vm.loginBusy = false;\r\n vm.login = {};\r\n vm.showLoginFailed = false;\r\n vm.showLoginSucceeded = false;\r\n vm.showAcceptingOwnInvitationMessageError = false;\r\n vm.showStudentHasAlreadyBeenDelegatedToYouError = false;\r\n\r\n vm.registerBusy = false;\r\n vm.registration = {};\r\n vm.showConfirmationMessage = false;\r\n vm.showEmailAlreadyRegistered = false;\r\n vm.submitButtonText = \"Submit\";\r\n\r\n vm.showRegister = false;\r\n vm.showLogin = false;\r\n vm.showAlreadyLoggedInMessage = false;\r\n vm.showAcceptingOwnInvitationMessage = false;\r\n\r\n vm.heading = null;\r\n\r\n vm.cancel = cancel;\r\n vm.submit = submit;\r\n vm.doLogin = doLogin;\r\n vm.navigateHome = navigateHome;\r\n\r\n initialise();\r\n\r\n function initialise() {\r\n var sessionToken = getSessionToken();\r\n\r\n if (!sessionToken) {\r\n $location.path(\"/\");\r\n return;\r\n }\r\n\r\n sessionId = sessionToken.sessionId;\r\n\r\n vm.showRegister = true;\r\n vm.showLogin = true;\r\n vm.heading = \"Create an account or login\";\r\n }\r\n\r\n function submit(registration) {\r\n if (vm.registerBusy) return;\r\n var deferred = $q.defer();\r\n\r\n vm.registerBusy = true;\r\n vm.showEmailAlreadyRegistered = false;\r\n registration.sessionId = sessionId;\r\n\r\n apiService\r\n .delegatedViewerRegister(registration)\r\n .then(function successCallback(response) {\r\n const data = response.data;\r\n if (data.emailAlreadyRegistered) {\r\n vm.showEmailAlreadyRegistered = true;\r\n vm.submitButtonText = \"Retry\";\r\n } else {\r\n removeSessionToken();\r\n\r\n vm.showConfirmationMessage = true;\r\n vm.showLogin = false;\r\n }\r\n })\r\n .finally(function () {\r\n vm.registerBusy = false;\r\n deferred.resolve();\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n function doLogin(login) {\r\n if (vm.loginBusy) return;\r\n var deferred = $q.defer();\r\n\r\n vm.loginBusy = true;\r\n login.sessionId = sessionId;\r\n\r\n dataContext.preSignIn();\r\n apiService\r\n .delegatedViewerLogin(login)\r\n .then(response => {\r\n const data = response.data;\r\n $log.debug(\"Login success. Retrieving user\");\r\n dataContext.flagSignedIn(login.email);\r\n dataContext.verifyAuthenticated().then(function () {\r\n if (data.acceptingOwnInvitation) {\r\n vm.showAcceptingOwnInvitationMessageError = true;\r\n vm.showLogin = false;\r\n } else if (data.alreadyHasDelegatedStudent) {\r\n vm.showStudentHasAlreadyBeenDelegatedToYouError = true;\r\n vm.showLogin = false;\r\n } else {\r\n vm.showLoginSucceeded = true;\r\n }\r\n\r\n vm.showRegister = false;\r\n removeSessionToken();\r\n });\r\n })\r\n .catch(response => {\r\n if (response.status === 401) {\r\n vm.showLoginFailed = true;\r\n vm.message = response.data?.message;\r\n }\r\n })\r\n .finally(function () {\r\n vm.loginBusy = false;\r\n deferred.resolve();\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n function getSessionToken() {\r\n return localStorageService.get(SESSION_DV_CODE_KEY);\r\n }\r\n\r\n function cancel() {\r\n removeSessionToken();\r\n $location.path(\"/\");\r\n }\r\n\r\n function navigateHome() {\r\n removeSessionToken();\r\n $window.location = \"/\";\r\n }\r\n\r\n function removeSessionToken() {\r\n localStorageService.remove(SESSION_DV_CODE_KEY);\r\n }\r\n}\r\n","import {app} from '../../app.module';\r\nimport { SESSION_DV_CODE_KEY } from '../../configuration';\r\n\r\nconst controllerId = 'delegatedViewerVerify';\r\nconst templateUrl = require('./verify.html');\r\n\r\napp.directive(`${controllerId}Component`, () => ({\r\n templateUrl,\r\n scope: true,\r\n controller: delegatedViewerVerify,\r\n controllerAs: 'vm',\r\n restrict: 'E',\r\n replace: true\r\n}));\r\n\r\nfunction delegatedViewerVerify($location, localStorageService) {\r\n \"ngInject\";\r\n var vm = this;\r\n\r\n vm.fullname = null;\r\n vm.isThisYou = null;\r\n vm.busy = false;\r\n\r\n vm.cancel = cancel;\r\n vm.navigateToRegister = navigateToRegister;\r\n\r\n initialise();\r\n\r\n function initialise() {\r\n\r\n var sessionToken = getSessionToken();\r\n\r\n if (!sessionToken) {\r\n $location.path('/');\r\n return;\r\n }\r\n\r\n vm.fullname = sessionToken.name;\r\n }\r\n\r\n function getSessionToken() {\r\n return localStorageService.get(SESSION_DV_CODE_KEY);\r\n }\r\n\r\n function cancel() {\r\n localStorageService.remove(SESSION_DV_CODE_KEY);\r\n $location.path('/');\r\n }\r\n\r\n function navigateToRegister() {\r\n if (vm.busy) return;\r\n vm.busy = true;\r\n\r\n $location.path('/registration/delegated-viewer/register');\r\n }\r\n}","import moment from \"moment\";\r\nimport { app } from \"../app.module\";\r\nimport templateUrl from \"./reports.html\";\r\nimport \"./reports.less\";\r\nimport { FEATURES, ADMIN_VIEW_COOKIES } from \"../configuration\";\r\nimport { StudentContext, IContextLoader } from \"../services/contextLoader\";\r\nimport { User } from \"../models/user\";\r\nimport { Student } from \"../models/student\";\r\nimport { Enrolment } from \"../models/enrolment\";\r\nimport { AuthorisationService } from \"../services/authorisationService\";\r\nimport { IDataContext } from \"../services/dataContext\";\r\nimport { AcademicResultViewModel } from \"../models/api\";\r\n\r\nconst controllerId = \"reports\";\r\napp.directive(`${controllerId}Component`, () => ({\r\n templateUrl,\r\n controller: ReportsComponent,\r\n controllerAs: \"vm\",\r\n restrict: \"E\",\r\n scope: true,\r\n replace: false\r\n}));\r\n\r\nclass ReportsComponent implements StudentContext {\r\n user: User;\r\n student: Student;\r\n enrolment: Enrolment;\r\n academicResults: AcademicResultViewModel[];\r\n currentResult: AcademicResultViewModel;\r\n hasAcademicResults: boolean;\r\n hasArchiveReports: boolean;\r\n isLoading: boolean;\r\n\r\n constructor(\r\n $routeParams: angular.route.IRouteParamsService,\r\n contextLoader: IContextLoader,\r\n authorisationService: AuthorisationService,\r\n private $timeout: ng.ITimeoutService,\r\n private dataContext: IDataContext\r\n ) {\r\n \"ngInject\";\r\n this.academicResults = [];\r\n this.currentResult = null;\r\n this.hasAcademicResults = false;\r\n this.hasArchiveReports = false;\r\n\r\n contextLoader.load(this, $routeParams, controllerId).then(() => {\r\n if (!authorisationService.hasFeatureAccess(this, FEATURES.ACADEMIC_REPORTS)) {\r\n return;\r\n }\r\n\r\n this.academicResults = this.enrolment.academicResults.sort((a, b) => moment(b.endDate).diff(moment(a.endDate)));\r\n\r\n this.currentResult = this.academicResults[0];\r\n\r\n this.hasAcademicResults = !!this.academicResults.length;\r\n this.hasArchiveReports = !!this.student.academicYearArchives.length;\r\n });\r\n }\r\n\r\n fakeLoading() {\r\n this.isLoading = true;\r\n this.$timeout(() => (this.isLoading = false), 300);\r\n }\r\n\r\n getReportLink() {\r\n let url = \"/api/academic/report\" + `?EqId=${this.student.oneSchoolId}&ReportingPeriodId=${this.currentResult.reportingPeriodId}&SchoolCode=${this.currentResult.schoolCode}`;\r\n\r\n if (this.dataContext.isAdminView()) {\r\n let schoolUserId = sessionStorage.getItem(ADMIN_VIEW_COOKIES.SCHOOL_USER_ID);\r\n let ppaoId = sessionStorage.getItem(ADMIN_VIEW_COOKIES.PARENT_ID);\r\n url += `&AdminPPAOId=${ppaoId}&AdminSchoolUserId=${schoolUserId}`;\r\n }\r\n\r\n return url;\r\n }\r\n\r\n loadImage(imagePath: string) {\r\n return require(\"../../content/img/\" + imagePath);\r\n }\r\n}\r\n","import { app } from \"../app.module\";\r\nimport { FEATURES } from \"../configuration\";\r\nimport { StudentContext, IContextLoader } from \"../services/contextLoader\";\r\nimport { User } from \"../models/user\";\r\nimport { Student } from \"../models/student\";\r\nimport { Enrolment } from \"../models/enrolment\";\r\nimport { AuthorisationService } from \"../services/authorisationService\";\r\nimport { IDataContext } from \"../services/dataContext\";\r\nimport { AcademicYearArchiveViewModel } from \"../models/api\";\r\nimport templateUrl from \"./archive.html\";\r\n\r\nconst controllerId = \"archive\";\r\napp.directive(`${controllerId}Component`, () => ({\r\n templateUrl,\r\n controller: ArchiveComponent,\r\n controllerAs: \"vm\",\r\n restrict: \"E\",\r\n scope: true,\r\n replace: false\r\n}));\r\n\r\nclass ArchiveComponent implements StudentContext {\r\n user: User;\r\n student: Student;\r\n enrolment: Enrolment;\r\n hasArchiveReports: boolean;\r\n archiveReports: AcademicYearArchiveViewModel[];\r\n busy: boolean;\r\n submitted: boolean;\r\n studentNotFound: boolean;\r\n\r\n constructor($routeParams: angular.route.IRouteParamsService, contextLoader: IContextLoader, authorisationService: AuthorisationService, private dataContext: IDataContext) {\r\n \"ngInject\";\r\n contextLoader.load(this, $routeParams, controllerId).then(() => {\r\n if (!authorisationService.hasFeatureAccess(this, FEATURES.ACADEMIC_REPORTS)) return;\r\n\r\n this.hasArchiveReports = !!this.student.academicYearArchives.length;\r\n this.archiveReports = this.student.academicYearArchives.sort((a, b) => parseInt(a.academicYear) - parseInt(b.academicYear));\r\n });\r\n }\r\n\r\n emailAcademicReportArchive(model: AcademicYearArchiveViewModel) {\r\n this.busy = true;\r\n\r\n this.dataContext\r\n .emailAcademicReportArchive(this.student.oneSchoolId, model.academicYear)\r\n .then(r => {\r\n if (r && r === \"StudentNotFound\") {\r\n this.studentNotFound = true;\r\n } else {\r\n this.submitted = true;\r\n }\r\n })\r\n .finally(() => {\r\n this.busy = false;\r\n });\r\n }\r\n}\r\n","import { app } from \"../app.module\";\r\nimport { IContextLoader, StudentContext } from \"../services/contextLoader\";\r\nimport { Enrolment } from \"../models/enrolment\";\r\nimport { Student } from \"../models/student\";\r\nimport { User } from \"../models/user\";\r\nimport { FEATURES } from \"../configuration\";\r\nimport { AuthorisationService } from \"../services/authorisationService\";\r\nimport { ConsentResponseState } from \"../models/enums\";\r\nimport \"./consent.less\";\r\nimport { ConsentRequest } from \"./consentRequestSummary/consentRequestSummary\";\r\nimport { ConsentService } from \"../services/consentService\";\r\nimport { ConsentRequestSummaryViewModel } from \"../models/api\";\r\n\r\nimport templateUrl from \"./consent.html\";\r\n\r\nconst controllerId = \"consent\";\r\napp.directive(`${controllerId}Component`, () => ({\r\n templateUrl,\r\n controller: ConsentComponent,\r\n controllerAs: \"vm\",\r\n restrict: \"E\",\r\n scope: true,\r\n replace: false\r\n}));\r\n\r\nclass ConsentComponent implements StudentContext {\r\n user: User;\r\n student: Student;\r\n enrolment: Enrolment;\r\n allEnrolments: Enrolment[];\r\n\r\n pendingRequests: ConsentRequest[] = [];\r\n pastRequests: ConsentRequest[] = [];\r\n consentLoadedSuccessfully: boolean;\r\n consentLoading: boolean;\r\n\r\n constructor($routeParams: angular.route.IRouteParamsService, contextLoader: IContextLoader, authorisationService: AuthorisationService, consentService: ConsentService) {\r\n \"ngInject\";\r\n contextLoader.load(this, $routeParams, controllerId).then(() => {\r\n if (!authorisationService.hasStudentFeatureAccess(this, FEATURES.CONSENT_REQUESTS)) return;\r\n\r\n this.consentLoading = true;\r\n consentService\r\n .getConsentRequestSummary(this.user)\r\n .then(summary => {\r\n const allRequestsForThisStudent = summary.consentRequests.filter(s => s.eqId === this.student.oneSchoolId && s.schoolCode === $routeParams.centreCode);\r\n this.pendingRequests = allRequestsForThisStudent.filter(r => r.state === ConsentResponseState.Pending).map(this.consentRequestMapper);\r\n this.pastRequests = allRequestsForThisStudent.filter(r => r.state !== ConsentResponseState.Pending).map(this.consentRequestMapper);\r\n this.consentLoadedSuccessfully = summary.loadedSuccessfully;\r\n })\r\n .catch(e => {\r\n this.consentLoadedSuccessfully = false;\r\n })\r\n .finally(() => {\r\n this.consentLoading = false;\r\n });\r\n\r\n return;\r\n });\r\n }\r\n\r\n consentRequestMapper = (request: ConsentRequestSummaryViewModel): ConsentRequest => {\r\n const enrolment = this.student.enrolments.find(e => e.schoolCode === request.schoolCode);\r\n return {\r\n id: request.id,\r\n title: request.title,\r\n dueDate: request.dueDate,\r\n responseDate: request.responseDate,\r\n withdrawnDate: request.withdrawnDate,\r\n schoolCode: request.schoolCode,\r\n state: request.state,\r\n schoolName: !!enrolment ? enrolment.school : undefined,\r\n studentFullName: this.student.fullName,\r\n studentId: this.student.oneSchoolId\r\n };\r\n };\r\n}\r\n","import { app } from \"../app.module\";\r\nimport { IContextLoader, StudentContext } from \"../services/contextLoader\";\r\nimport { User } from \"../models/user\";\r\nimport { Student } from \"../models/student\";\r\nimport { Enrolment } from \"../models/enrolment\";\r\nimport { AuthorisationService } from \"../services/authorisationService\";\r\nimport { FEATURES } from \"../configuration\";\r\nimport { Formio } from \"formiojs\";\r\nimport uswds from \"@formio/uswds\";\r\nimport { ConsentService } from \"../services/consentService\";\r\nimport { ConsentResponseState } from \"../models/enums\";\r\nimport { ConsentRequest } from \"./consentRequestSummary/consentRequestSummary\";\r\nimport { ConsentRequestViewModel } from \"@/app/models/api\";\r\n\r\nimport templateUrl from \"./request.html\";\r\n\r\nconst controllerId = \"request\";\r\napp.directive(`${controllerId}Component`, () => ({\r\n templateUrl,\r\n controller: RequestComponent,\r\n controllerAs: \"vm\",\r\n restrict: \"E\",\r\n scope: true,\r\n replace: false\r\n}));\r\n\r\nclass RequestComponent implements StudentContext {\r\n user: User;\r\n student: Student;\r\n enrolment: Enrolment;\r\n email: {\r\n to: string;\r\n subject: string;\r\n body: string;\r\n };\r\n isEditable: boolean;\r\n hasResponse: boolean;\r\n request: ConsentRequest;\r\n loadingConsent: boolean;\r\n\r\n constructor(\r\n $routeParams: angular.route.IRouteParamsService,\r\n contextLoader: IContextLoader,\r\n authorisationService: AuthorisationService,\r\n consentService: ConsentService,\r\n $location: ng.ILocationService\r\n ) {\r\n \"ngInject\";\r\n this.loadingConsent = true;\r\n contextLoader.load(this, $routeParams, controllerId).then(() => {\r\n if (!authorisationService.hasStudentFeatureAccess(this, FEATURES.CONSENT_REQUESTS)) {\r\n this.loadingConsent = false;\r\n return;\r\n }\r\n\r\n consentService.getConsentRequest(this.student.oneSchoolId, $routeParams.requestId, $routeParams.centreCode).then((data: ConsentRequestViewModel) => {\r\n this.loadingConsent = false;\r\n this.email = {\r\n to: data.contactEmail,\r\n subject: `[Consent change] ${this.student.fullName} | ${data.title}`,\r\n body: `Dear ${data.contactName},%0D%0A%0D%0A(Please provide details of the any changes to consent you wish to make)%0D%0A%0D%0A${data.reference ? `Ref: ${data.reference}` : \"\"}`\r\n };\r\n this.hasResponse = data.consentState !== ConsentResponseState.Pending;\r\n this.request = {\r\n id: $routeParams.requestId,\r\n title: data.title,\r\n state: data.consentState,\r\n schoolName: !!this.enrolment ? this.enrolment.school : undefined,\r\n withdrawnDate: data.withdrawnDate,\r\n dueDate: data.dueDate,\r\n responseDate: data.responseDate,\r\n studentId: this.student.oneSchoolId,\r\n studentFullName: this.student.fullName,\r\n schoolCode: !!this.enrolment ? this.enrolment.schoolCode : $routeParams.centreCode\r\n };\r\n this.isEditable = data.consentState !== ConsentResponseState.Pending && data.consentState !== ConsentResponseState.Expired && data.consentState !== ConsentResponseState.Withdrawn;\r\n // @ts-ignore\r\n Formio.license = true;\r\n Formio.use(uswds);\r\n Formio.createForm(document.getElementById(\"consent-formio\"), data.formTemplate, {\r\n readOnly: data.consentState !== ConsentResponseState.Pending,\r\n disableAlerts: true,\r\n noAlerts: true,\r\n highlightErrors: false\r\n }).then(form => {\r\n form.submission = {\r\n data: {\r\n ...data.formData,\r\n context: \"preview\",\r\n ...(this.hasResponse\r\n ? {}\r\n : {\r\n parentName: `${this.user.firstName} ${this.user.lastName}`,\r\n studentName: `${this.student.firstName()} ${this.student.lastName}`,\r\n parentPhoneNumber: this.user.mobileNumber,\r\n parentEmailAddress: this.user.emailAddress\r\n })\r\n }\r\n };\r\n\r\n form.nosubmit = true;\r\n\r\n form.on(\"submitError\", () => {\r\n focusFirstError();\r\n });\r\n\r\n form.on(\"submit\", submission => {\r\n consentService.sendConsentResponse(submission, this.request.id, this.student.oneSchoolId, this.request.schoolCode).then(_ => {\r\n const state = ConsentResponseState[submission.data.consentState as string];\r\n const responseDate = new Date(Date.now()).toISOString();\r\n\r\n form.emit(\"submitDone\", submission);\r\n\r\n consentService.getConsentRequestSummary(this.user).then(summary => {\r\n summary.pendingRequestsCount -= 1;\r\n summary.consentRequests = summary.consentRequests.map(cr =>\r\n cr.id === this.request.id && cr.eqId === this.student.oneSchoolId\r\n ? {\r\n ...cr,\r\n state,\r\n responseDate\r\n }\r\n : cr\r\n );\r\n\r\n $location.path(`/consent-request/${this.student.oneSchoolId}/${this.request.id}/${this.request.schoolCode}/submitted`).replace();\r\n });\r\n });\r\n });\r\n });\r\n });\r\n });\r\n }\r\n}\r\n\r\n// .is-invalid is used by formio\r\nconst errorClass = \"is-invalid\";\r\n\r\nconst focusFirstError = () => {\r\n const firstError = document.querySelector(`.${errorClass} input, input.${errorClass}, textarea.${errorClass}`) as HTMLElement | null;\r\n\r\n if (firstError) firstError.focus();\r\n};\r\n","import { app } from \"../app.module\";\r\nimport { IContextLoader, StudentContext } from \"../services/contextLoader\";\r\nimport { User } from \"../models/user\";\r\nimport { Student } from \"../models/student\";\r\nimport { Enrolment } from \"../models/enrolment\";\r\nimport { AuthorisationService } from \"../services/authorisationService\";\r\nimport { FEATURES } from \"../configuration\";\r\nimport { ConsentRequest } from \"./consentRequestSummary/consentRequestSummary\";\r\nimport { ConsentService } from \"../services/consentService\";\r\nimport { ConsentRequestSummaryViewModel } from \"../models/api\";\r\n\r\nimport templateUrl from \"./responseSubmitted.html\";\r\n\r\nconst controllerId = \"responseSubmitted\";\r\napp.directive(`${controllerId}Component`, () => ({\r\n templateUrl,\r\n controller: ResponseSubmittedComponent,\r\n controllerAs: \"vm\",\r\n restrict: \"E\",\r\n scope: true,\r\n replace: false\r\n}));\r\n\r\nclass ResponseSubmittedComponent implements StudentContext {\r\n user: User;\r\n student: Student;\r\n enrolment: Enrolment;\r\n request: ConsentRequest;\r\n\r\n constructor(\r\n $routeParams: angular.route.IRouteParamsService,\r\n contextLoader: IContextLoader,\r\n authorisationService: AuthorisationService,\r\n consentService: ConsentService,\r\n private $location: ng.ILocationService\r\n ) {\r\n \"ngInject\";\r\n contextLoader.load(this, $routeParams, controllerId).then(() => {\r\n if (!authorisationService.hasStudentFeatureAccess(this, FEATURES.CONSENT_REQUESTS)) {\r\n return;\r\n }\r\n\r\n consentService.getConsentRequestSummary(this.user).then(summary => {\r\n const request = summary.consentRequests.find((c: ConsentRequestSummaryViewModel) => c.id === $routeParams.requestId && c.eqId === this.student.oneSchoolId);\r\n this.request = {\r\n id: request.id,\r\n studentFullName: this.student.fullName,\r\n title: request.title,\r\n withdrawnDate: request.withdrawnDate,\r\n dueDate: request.dueDate,\r\n responseDate: new Date().toDateString(),\r\n state: request.state,\r\n studentId: this.student.oneSchoolId,\r\n schoolCode: request.schoolCode,\r\n schoolName: this.enrolment.school\r\n };\r\n });\r\n });\r\n }\r\n\r\n viewConsentRequest(requestId: string, schoolCode: string) {\r\n const path = `/consent-request/${this.student.oneSchoolId}/${requestId}/${schoolCode}`;\r\n this.$location.path(path).replace();\r\n }\r\n}\r\n","import { ILocationService } from \"angular\";\r\nimport { app } from \"../app.module\";\r\nimport templateUrl from \"./studentSidebar.html\";\r\nimport { IContextLoader } from \"../services/contextLoader\";\r\n\r\nconst controllerId = \"studentSidebar\";\r\n\r\napp.directive(`${controllerId}Component`, () => ({\r\n restrict: \"A\",\r\n replace: false,\r\n templateUrl,\r\n controller: studentSidebarLoad,\r\n controllerAs: \"vm\",\r\n scope: true\r\n}));\r\n\r\nfunction studentSidebarLoad($routeParams: angular.route.IRouteParamsService, $location: ILocationService, contextLoader: IContextLoader) {\r\n \"ngInject\";\r\n const vm = this;\r\n vm.user = null;\r\n vm.student = null;\r\n vm.enrolment = null;\r\n\r\n contextLoader.load(vm, $routeParams, controllerId);\r\n\r\n vm.isActive = function (path) {\r\n return $location.path().startsWith(path);\r\n };\r\n}\r\n","import { app } from \"../app.module\";\r\nimport { IDeviceService } from \"../services/deviceServiceProvider\";\r\nimport templateUrl from \"./studentHeader.html\";\r\nimport \"./enrolmentStatus\";\r\n\r\napp.directive(\"studentHeaderComponent\", () => ({\r\n templateUrl,\r\n controller: studentHeaderLoad,\r\n scope: false,\r\n restrict: \"A\"\r\n}));\r\n\r\nfunction studentHeaderLoad(deviceService: IDeviceService) {\r\n \"ngInject\";\r\n\r\n this.isMobileApp = deviceService.isMobileApp;\r\n}\r\n","import { app } from \"../app.module\";\r\n\r\nimport templateUrl from \"./studentFooter.html\";\r\n\r\napp.directive(\"studentFooterComponent\", () => ({\r\n templateUrl,\r\n scope: false,\r\n restrict: \"A\"\r\n}));\r\n","import { app } from \"../../app.module\";\r\nimport { IContextLoader, StudentContext } from \"../../services/contextLoader\";\r\nimport { User } from \"../../models/user\";\r\nimport { Student } from \"../../models/student\";\r\nimport { Enrolment } from \"../../models/enrolment\";\r\nimport templateUrl from \"./attendanceWidget.html\";\r\nrequire(\"./attendanceWidget.less\");\r\nconst controllerId = \"attendanceWidget\";\r\n\r\napp.directive(controllerId, () => ({\r\n templateUrl,\r\n controller: AttendanceWidget,\r\n controllerAs: \"vm\",\r\n scope: true,\r\n restrict: \"A\"\r\n}));\r\n\r\nclass AttendanceWidget implements StudentContext {\r\n user: User;\r\n student: Student;\r\n enrolment: Enrolment;\r\n\r\n showAttendanceRecord: boolean = false;\r\n\r\n constructor($routeParams: angular.route.IRouteParamsService, contextLoader: IContextLoader) {\r\n \"ngInject\";\r\n contextLoader.load(this, $routeParams, controllerId).then(() => {\r\n this.showAttendanceRecord = this.enrolment.attendancePercentageThisCalendarYear != null;\r\n });\r\n }\r\n}\r\n","import moment from \"moment\";\r\nimport { app } from \"../../app.module\";\r\nimport { StudentContext, IContextLoader } from \"../../services/contextLoader\";\r\nimport { User } from \"../../models/user\";\r\nimport { Student } from \"../../models/student\";\r\nimport { Enrolment } from \"../../models/enrolment\";\r\nimport templateUrl from \"./behaviourWidget.html\";\r\nrequire(\"./behaviourWidget.less\");\r\nconst controllerId = \"behaviourWidget\";\r\napp.directive(controllerId, () => ({\r\n templateUrl,\r\n controller: BehaviourWidget,\r\n controllerAs: \"vm\",\r\n scope: true,\r\n restrict: \"A\"\r\n}));\r\n\r\ninterface IBehaviour {\r\n incidentId: number;\r\n incidentDate: string;\r\n incidentType: string;\r\n incidentCategories: string;\r\n schoolName: string;\r\n}\r\n\r\nclass BehaviourWidget implements StudentContext {\r\n user: User;\r\n student: Student;\r\n enrolment: Enrolment;\r\n\r\n behaviour: IBehaviour;\r\n behaviourCategories: string;\r\n totalEvents: number;\r\n studentName: string;\r\n newEvents: number;\r\n\r\n constructor($routeParams: angular.route.IRouteParamsService, contextLoader: IContextLoader) {\r\n \"ngInject\";\r\n contextLoader.load(this, $routeParams, controllerId).then(() => {\r\n this.behaviour = this.enrolment.behaviours.sort((a, b) => moment(b.incidentDate).diff(moment(a.incidentDate)))[0];\r\n\r\n this.behaviourCategories = \"\";\r\n\r\n if (this.behaviour?.incidentCategories) {\r\n this.behaviourCategories = this.behaviour.incidentCategories.length > 30 ? this.behaviour.incidentCategories.substr(0, 17) + \"...\" : this.behaviour.incidentCategories;\r\n }\r\n\r\n this.totalEvents = this.enrolment.behaviours.length;\r\n this.studentName = this.student.firstName();\r\n\r\n let recentDate = this.getRecentDate();\r\n this.newEvents = this.enrolment.behaviours.filter(event => {\r\n return new Date(event.incidentDate) >= recentDate;\r\n }).length;\r\n });\r\n }\r\n\r\n getRecentDate() {\r\n let m = moment();\r\n m.add(moment.duration(-14, \"days\"));\r\n return m.toDate();\r\n }\r\n\r\n getBehaviourIconClass() {\r\n return this.totalEvents === 0 ? \"fa-check-square\" : this.behaviour && this.behaviour.incidentType === \"Positive\" ? \"fa-check-square\" : \"fa-exclamation-triangle\";\r\n }\r\n}\r\n","import { app } from \"../../app.module\";\r\nimport { IUrlResolver } from \"@/app/services/urlResolver\";\r\nimport { ADMIN_VIEW_COOKIES } from \"../../configuration\";\r\nimport { StudentContext, IContextLoader } from \"../../services/contextLoader\";\r\nimport { User } from \"../../models/user\";\r\nimport { Student } from \"../../models/student\";\r\nimport { Enrolment } from \"../../models/enrolment\";\r\nimport { IDataContext } from \"../../services/dataContext\";\r\nimport { FileDownloadOptions } from \"@/app/models/api\";\r\nimport templateUrl from \"./downloadWidget.html\";\r\nimport { IDeviceService } from \"@/app/services/deviceServiceProvider\";\r\nimport { IAssetService } from \"@/app/services/assetService\";\r\nrequire(\"./downloadWidget.less\");\r\n\r\nvar controllerId = \"downloadWidget\";\r\napp.directive(controllerId, () => ({\r\n templateUrl,\r\n controller: DownloadWidget,\r\n controllerAs: \"vm\",\r\n scope: true,\r\n restrict: \"A\"\r\n}));\r\n\r\nclass DownloadWidget implements StudentContext {\r\n user: User;\r\n student: Student;\r\n enrolment: Enrolment;\r\n\r\n downloads: { name: string; href: string }[];\r\n isMobileApp: boolean;\r\n\r\n constructor(\r\n $routeParams: angular.route.IRouteParamsService,\r\n contextLoader: IContextLoader,\r\n private assetService: IAssetService,\r\n private dataContext: IDataContext,\r\n private urlResolver: IUrlResolver,\r\n deviceService: IDeviceService\r\n ) {\r\n \"ngInject\";\r\n this.isMobileApp = deviceService.isMobileApp;\r\n contextLoader.load(this, $routeParams, controllerId).then(() => {\r\n this.refreshDownloads();\r\n });\r\n }\r\n\r\n refreshDownloads() {\r\n this.downloads = this.mapModels(this.enrolment.examTimetables, \"exam-timetable\")\r\n .concat(this.mapModels(this.enrolment.assessmentPlanners, \"assessment-planner\"))\r\n .sort((a, b) => {\r\n return a.name < b.name ? -1 : a.name === b.name ? 0 : 1;\r\n });\r\n }\r\n\r\n mapModels(models, type) {\r\n return models.map(d => {\r\n return this.buildDownloadModel(d, type);\r\n });\r\n }\r\n\r\n paramsToQueryString(params) {\r\n return Object.keys(params)\r\n .map(key => {\r\n return `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`;\r\n })\r\n .join(\"&\");\r\n }\r\n\r\n buildDownloadModel(downloadInfo, type) {\r\n var params: FileDownloadOptions = {\r\n fileId: downloadInfo.id,\r\n fileName: downloadInfo.name,\r\n pPAO: this.user.oneSchoolParentId,\r\n studentId: this.student.oneSchoolId,\r\n schoolCode: this.enrolment.schoolCode,\r\n schoolUserId: \"\"\r\n };\r\n\r\n if (this.dataContext.isAdminView()) {\r\n params.schoolUserId = sessionStorage.getItem(ADMIN_VIEW_COOKIES.SCHOOL_USER_ID);\r\n }\r\n\r\n const url = this.urlResolver.resolve(`/api/file-download/${type}?${this.paramsToQueryString(params)}`);\r\n return {\r\n name: downloadInfo.name,\r\n href: url\r\n };\r\n }\r\n\r\n openFile(file) {\r\n if (!this.isMobileApp) {\r\n this.assetService.openFile(file.href);\r\n } else {\r\n this.assetService.mobileOpenFile(file.href, true);\r\n }\r\n }\r\n}\r\n","import { app } from \"../../app.module\";\r\nimport { StudentContext, IContextLoader } from \"../../services/contextLoader\";\r\nimport { User } from \"../../models/user\";\r\nimport { Student } from \"../../models/student\";\r\nimport { Enrolment } from \"../../models/enrolment\";\r\nconst templateUrl = require(\"./paymentWidget.html\");\r\nrequire(\"./paymentWidget.less\");\r\nconst controllerId = \"paymentWidget\";\r\napp.directive(controllerId, () => ({\r\n templateUrl,\r\n controller: PaymentWidget,\r\n controllerAs: \"vm\",\r\n scope: true,\r\n restrict: \"A\"\r\n}));\r\n\r\nclass PaymentWidget implements StudentContext {\r\n user: User;\r\n student: Student;\r\n enrolment: Enrolment;\r\n\r\n numberOfDuePayments: number;\r\n outstandingInvoicesTotal: number;\r\n hasOutstandingInvoices: boolean;\r\n\r\n constructor($routeParams: angular.route.IRouteParamsService, contextLoader: IContextLoader) {\r\n \"ngInject\";\r\n contextLoader.load(this, $routeParams, controllerId).then(() => {\r\n this.numberOfDuePayments = this.enrolment.getNumberOfOutstandingInvoices();\r\n\r\n this.outstandingInvoicesTotal = this.enrolment.getOutstandingInvoicesTotal();\r\n this.hasOutstandingInvoices = this.outstandingInvoicesTotal !== 0;\r\n });\r\n }\r\n\r\n getPaymentIconClass() {\r\n return this.hasOutstandingInvoices ? \"fa-exclamation-triangle\" : \"fa-check-square\";\r\n }\r\n}\r\n","import { app } from \"../../app.module\";\r\nimport { StudentContext, IContextLoader } from \"../../services/contextLoader\";\r\nimport { User } from \"../../models/user\";\r\nimport { Student } from \"../../models/student\";\r\nimport { Enrolment } from \"../../models/enrolment\";\r\nimport { AcademicResultViewModel } from \"@/app/models/api\";\r\nimport templateUrl from \"./reportWidget.html\";\r\nimport { getToday } from \"../../services/dayHelper\";\r\nrequire(\"./reportWidget.less\");\r\n\r\nvar controllerId = \"reportWidget\";\r\napp.directive(controllerId, () => ({\r\n templateUrl,\r\n controller: ReportWidget,\r\n controllerAs: \"vm\",\r\n scope: true,\r\n restrict: \"A\"\r\n}));\r\n\r\nclass ReportWidget implements StudentContext {\r\n user: User;\r\n student: Student;\r\n enrolment: Enrolment;\r\n\r\n newReports: number;\r\n latestReport: AcademicResultViewModel;\r\n\r\n constructor($routeParams: angular.route.IRouteParamsService, contextLoader: IContextLoader) {\r\n \"ngInject\";\r\n contextLoader.load(this, $routeParams, controllerId).then(() => {\r\n var orderedReports = this.enrolment.academicResults;\r\n\r\n var today = getToday();\r\n var recentDate = new Date(today.getFullYear(), today.getMonth(), today.getDate() - 14);\r\n\r\n this.newReports = orderedReports.filter(function (report) {\r\n return new Date(report.endDate) >= recentDate;\r\n }).length;\r\n\r\n this.latestReport = orderedReports[0];\r\n });\r\n }\r\n}\r\n","import { app } from \"../../app.module\";\r\nimport { isWeekend } from \"../../services/dayHelper\";\r\nimport { StudentContext, IContextLoader } from \"../../services/contextLoader\";\r\nimport { User } from \"../../models/user\";\r\nimport { Student } from \"../../models/student\";\r\nimport { Enrolment } from \"../../models/enrolment\";\r\nimport { DayViewModel } from \"@/app/models/api\";\r\nimport templateUrl from \"./timetableWidget.html\";\r\nrequire(\"./timetableWidget.less\");\r\n\r\nvar controllerId = \"timetableWidget\";\r\napp.directive(controllerId, () => ({\r\n templateUrl,\r\n controller: TimetableWidget,\r\n controllerAs: \"vm\",\r\n scope: true,\r\n restrict: \"A\"\r\n}));\r\n\r\nclass TimetableWidget implements StudentContext {\r\n user: User;\r\n student: Student;\r\n enrolment: Enrolment;\r\n\r\n todaysTimetable: DayViewModel;\r\n studentFirstname: string;\r\n canShowTimetable: boolean;\r\n isWeekend: boolean;\r\n\r\n constructor($routeParams: angular.route.IRouteParamsService, contextLoader: IContextLoader) {\r\n \"ngInject\";\r\n contextLoader.load(this, $routeParams, controllerId).then(() => {\r\n this.todaysTimetable = this.enrolment.getTodaysTimetableOrMondaysIfWeekend();\r\n this.studentFirstname = this.student.firstName();\r\n const timetableIsNoLongerThanOneWeek = this.enrolment.timetable && this.enrolment.timetable.days && this.enrolment.timetable.days.length <= 5;\r\n this.canShowTimetable = this.todaysTimetable && timetableIsNoLongerThanOneWeek;\r\n this.isWeekend = isWeekend();\r\n });\r\n }\r\n}\r\n","import moment from \"moment\";\r\n\r\nexport function enumerateDaysBetweenDates(startDate: Date, endDate: Date): Date[] {\r\n var dates = [startDate];\r\n\r\n var currDate = moment(startDate).startOf('day');\r\n var lastDate = moment(endDate).endOf('day');\r\n\r\n while (currDate.add(1, 'days').diff(lastDate) < 0) {\r\n dates.push(currDate.clone().toDate());\r\n }\r\n\r\n return dates;\r\n}","import { formatDateToShortMonthDay } from \"./dateHelper\";\r\n\r\ninterface DateTimeInfo {\r\n date: Date;\r\n time: string;\r\n}\r\n\r\nexport function getFormattedTimeRange(start: DateTimeInfo, end: DateTimeInfo) {\r\n const startDate = new Date(start.date);\r\n const endDate = new Date(end.date);\r\n var startDateInfo = \"\";\r\n var endDateInfo = \"\";\r\n if (startDate.toDateString() !== endDate.toDateString()) {\r\n startDateInfo = \" (\" + formatDateToShortMonthDay(startDate) + \")\";\r\n endDateInfo = \" (\" + formatDateToShortMonthDay(endDate) + \")\";\r\n }\r\n\r\n return stripSeconds(start.time) + startDateInfo + \" - \" + stripSeconds(end.time) + endDateInfo;\r\n}\r\n\r\nfunction stripSeconds(time: string) {\r\n if (!time) return time;\r\n // Show only hh:mm tt, with tt optionally.\r\n return time.replace(/(\\d{1,2}:\\d{2})(:[:\\d]{0,})(\\W{0,}[^\\d]{0,}){0,1}/, \"$1$3\");\r\n}\r\n","import \"./upcomingEventsWidget.less\";\r\nimport moment from \"moment\";\r\n\r\nimport { IContextLoader, StudentContext } from \"../../services/contextLoader\";\r\nimport { getDayOfWeekLabel } from \"../../services/dayHelper\";\r\n\r\nimport { Enrolment } from \"../../models/enrolment\";\r\nimport { Student } from \"../../models/student\";\r\nimport { User } from \"../../models/user\";\r\nimport { app } from \"../../app.module\";\r\nimport { enumerateDaysBetweenDates } from \"../../tools/dates\";\r\nimport { EventViewModel } from \"@/app/models/api\";\r\n\r\nimport templateUrl from \"./upcomingEventsWidget.html\";\r\nimport { formatDateTimeToIcsDate, formatDateToShortMonthDay } from \"../../services/dateHelper\";\r\nimport { getFormattedTimeRange } from \"../../services/timeHelper\";\r\nimport { ICalendarData, ICalendarService } from \"../../services/calendarService\";\r\n\r\nconst controllerId = \"upcomingEventsWidget\";\r\napp.directive(controllerId, () => ({\r\n templateUrl,\r\n controller: UpcomingEventsWidget,\r\n controllerAs: \"vm\",\r\n scope: true,\r\n restrict: \"A\"\r\n}));\r\n\r\nvar eventTypes = {\r\n Exam: 0,\r\n Assessment: 1,\r\n Excursion: 2,\r\n School: 3\r\n};\r\n\r\nvar eventTypeNames = {\r\n 0: \"Exams\",\r\n 1: \"Assessments\",\r\n 2: \"Excursions\",\r\n 3: \"School events\"\r\n};\r\n\r\nvar eventTypePrefixes = {\r\n 0: \"E\",\r\n 1: \"A\",\r\n 2: \"X\",\r\n 3: \"V\"\r\n};\r\n\r\nclass UpcomingEventsWidget implements StudentContext {\r\n user: User;\r\n student: Student;\r\n enrolment: Enrolment;\r\n\r\n upcomingEvents: EventViewModel[];\r\n allEvents: EventViewModel[];\r\n eventsByDay: { date: moment.Moment; agenda: EventViewModel[] }[];\r\n filterOptions: { value: number; text: any; active: boolean }[];\r\n isWeekend: boolean;\r\n\r\n constructor(private $routeParams: angular.route.IRouteParamsService, contextLoader: IContextLoader, private calendarService: ICalendarService) {\r\n \"ngInject\";\r\n this.upcomingEvents = null;\r\n this.isWeekend = false;\r\n\r\n this.filterOptions = Object.keys(eventTypes)\r\n .map(x => x)\r\n .map(x => eventTypes[x])\r\n .map(function (value) {\r\n return {\r\n value: value,\r\n text: eventTypeNames[value],\r\n active: true\r\n };\r\n });\r\n\r\n this.eventsByDay = [];\r\n this.allEvents = [];\r\n\r\n contextLoader.load(this, $routeParams, controllerId).then(() => {\r\n this.allEvents = this.enrolment.upcomingEvents;\r\n this.refilterEvents();\r\n });\r\n }\r\n\r\n toggleFilter(filter) {\r\n filter.active = !filter.active;\r\n this.refilterEvents();\r\n }\r\n\r\n formatDate(date) {\r\n return formatDateToShortMonthDay(date);\r\n }\r\n\r\n getDayLabel(day) {\r\n return getDayOfWeekLabel(day);\r\n }\r\n\r\n getTimeLabel(upcomingEvent: EventViewModel) {\r\n return getFormattedTimeRange({ date: upcomingEvent.startDate, time: upcomingEvent.startTime }, { date: upcomingEvent.endDate, time: upcomingEvent.endTime });\r\n }\r\n\r\n getEventTypePrefix(eventType) {\r\n return eventTypePrefixes[eventType];\r\n }\r\n\r\n refilterEvents() {\r\n var startDatesOfEvents = this.allEvents.map(e => moment(new Date(e.startDate)));\r\n var endDatesOfEvents = this.allEvents.map(e => moment(new Date(e.endDate)));\r\n var minStartDateOfEvent = moment.min(startDatesOfEvents);\r\n var maxEndDateOfEvent = moment.max(endDatesOfEvents);\r\n\r\n var allEventsDateRange = enumerateDaysBetweenDates(minStartDateOfEvent.toDate(), maxEndDateOfEvent.toDate());\r\n\r\n var filteredEvents = this.allEvents.filter(ev => this.isInActiveFilter(ev));\r\n this.eventsByDay = allEventsDateRange\r\n .map(key => {\r\n var items = filteredEvents.filter(e => moment(key).isBetween(moment(e.startDate).startOf(\"day\"), moment(e.endDate).endOf(\"day\"), undefined, \"[]\"));\r\n return {\r\n date: moment(key),\r\n agenda: items.sort((a, b) => moment(a.startDate).diff(moment(b.startDate)))\r\n };\r\n })\r\n .filter(e => e.agenda.length > 0);\r\n\r\n this.eventsByDay = this.eventsByDay.sort((a, b) => moment(a.date).diff(moment(b.date)));\r\n }\r\n\r\n isInActiveFilter(upcomingEvent: EventViewModel) {\r\n return (\r\n this.filterOptions.filter(fo => {\r\n return fo.active && fo.value === upcomingEvent.eventType;\r\n }).length > 0\r\n );\r\n }\r\n\r\n loadImage(imagePath: string) {\r\n return require(\"../../../content/img/\" + imagePath);\r\n }\r\n\r\n openEventInCalendar(event: EventViewModel) {\r\n const icsEvent = this.createIcsEvent(event);\r\n\r\n const icsEventBlob = this.calendarService.createIcsFile([icsEvent]);\r\n\r\n if (icsEventBlob) {\r\n this.calendarService.openIcsFile(icsEventBlob);\r\n }\r\n }\r\n\r\n createIcsEvent(event: EventViewModel): ICalendarData {\r\n var studentId = this.$routeParams.studentId;\r\n var centreCode = this.$routeParams.centreCode;\r\n\r\n return {\r\n id: `${studentId}||${centreCode}||${event.eventType}||${formatDateTimeToIcsDate(event.startDate, event.startTime)}||${formatDateTimeToIcsDate(event.endDate, event.endTime)}`,\r\n startDate: event.startDate,\r\n startTime: event.startTime,\r\n endDate: event.endDate,\r\n endTime: event.endTime,\r\n summary: `${studentId} - ${event.displayName}`,\r\n description: event.detail\r\n };\r\n }\r\n\r\n loadCalendarIcon() {\r\n return require(\"../../../content/icons/calendar-outline.svg\");\r\n }\r\n}\r\n","import { app } from \"../../app.module\";\r\nrequire(\"./widgetFeatureUnavailable.less\");\r\nimport templateUrl from \"./widgetFeatureUnavailable.html\";\r\n\r\napp.directive(\"widgetFeatureUnavailable\", function () {\r\n return {\r\n restrict: \"A\",\r\n templateUrl,\r\n scope: {\r\n featureName: \"@\"\r\n }\r\n };\r\n});\r\n","import { app } from \"../app.module\";\r\nimport templateUrl from \"./student.html\";\r\nimport \"./studentSidebar\";\r\nimport \"./studentHeader\";\r\nimport \"./studentFooter\";\r\nimport \"./widgets\";\r\nimport \"./student.less\";\r\nimport { IContextLoader } from \"../services/contextLoader\";\r\n\r\nconst controllerId = \"student\";\r\n\r\napp.directive(`${controllerId}Component`, () => ({\r\n templateUrl,\r\n controller: studentLoad,\r\n controllerAs: \"vm\",\r\n restrict: \"E\",\r\n replace: true,\r\n scope: true\r\n}));\r\n\r\nfunction studentLoad($routeParams: angular.route.IRouteParamsService, contextLoader: IContextLoader) {\r\n \"ngInject\";\r\n const vm = this;\r\n vm.user = null;\r\n vm.student = null;\r\n vm.enrolment = null;\r\n\r\n contextLoader.load(vm, $routeParams, controllerId);\r\n}\r\n","import { app } from \"../app.module\";\r\nimport { StudentContext, IContextLoader } from \"../services/contextLoader\";\r\nimport { Student } from \"../models/student\";\r\nimport { Enrolment } from \"../models/enrolment\";\r\nimport { User } from \"../models/user\";\r\nimport { IDataContext } from \"../services/dataContext\";\r\n\r\nimport templateUrl from \"./studentPhoto.html\";\r\nimport { IApiService } from \"../services/apiServiceProvider\";\r\nimport { BlobService } from \"../services/blobService\";\r\nimport { IUrlResolver } from \"../services/urlResolver\";\r\nimport { IQService } from \"angular\";\r\n\r\nclass StudentPhotoComponent implements StudentContext {\r\n user: User;\r\n student: Student;\r\n enrolment: Enrolment;\r\n selectedOption: string;\r\n\r\n busy: boolean;\r\n acceptedTermsAndConditions: boolean;\r\n termsAndConditions: { key: string; url: string; checked: boolean };\r\n\r\n constructor(\r\n $routeParams: angular.route.IRouteParamsService,\r\n contextLoader: IContextLoader,\r\n private $location: ng.ILocationService,\r\n $sce: ng.ISCEService,\r\n private blobService: BlobService,\r\n private apiService: IApiService,\r\n private dataContext: IDataContext,\r\n private $window: ng.IWindowService,\r\n private $anchorScroll: ng.IAnchorScrollService,\r\n private $log: ng.ILogService,\r\n private $q: IQService,\r\n urlResolver: IUrlResolver\r\n ) {\r\n \"ngInject\";\r\n this.termsAndConditions = { key: undefined, url: undefined, checked: false };\r\n this.busy = false;\r\n contextLoader\r\n .load(this, $routeParams, \"studentPhoto\")\r\n .then(() => {\r\n if (this.isDelegatedViewer(this.student)) return;\r\n\r\n this.acceptedTermsAndConditions = this.user.studentPhotosEnabled || this.user.studentPhotosTermsAndConditionsKey == null;\r\n if (!this.acceptedTermsAndConditions) {\r\n this.termsAndConditions.key = this.user.studentPhotosTermsAndConditionsKey;\r\n this.termsAndConditions.url = $sce.trustAsResourceUrl(urlResolver.resolve(\"api/termsandconditions/\" + this.user.studentPhotosTermsAndConditionsKey));\r\n this.termsAndConditions.checked = false;\r\n }\r\n })\r\n .then(() => {\r\n this.$anchorScroll(\"main-content\");\r\n });\r\n }\r\n\r\n isAdminView() {\r\n return this.dataContext.isAdminView();\r\n }\r\n\r\n canSubmit() {\r\n return !this.dataContext.isAdminView() || this.selectedOption != \"none\";\r\n }\r\n\r\n isDelegatedViewer(student: Student) {\r\n if (!student.isUserPPAOForStudent) {\r\n var newPath = \"/\";\r\n this.$location.path(newPath);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n acceptTermsAndConditions() {\r\n if (this.busy) return;\r\n const data = { ids: [this.termsAndConditions.key] };\r\n const deferred = this.$q.defer();\r\n this.busy = true;\r\n\r\n this.apiService\r\n .acceptTermsAndConditions(data)\r\n .then(() => {\r\n this.acceptedTermsAndConditions = true;\r\n this.user.studentPhotosEnabled = true;\r\n })\r\n .catch(response => {\r\n this.$log.error(\"Error accepting terms and conditions\", response);\r\n })\r\n .finally(() => {\r\n this.busy = false;\r\n deferred.resolve();\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n removePhoto() {\r\n if (this.isAdminView()) return;\r\n if (this.busy) return;\r\n const deferred = this.$q.defer();\r\n this.busy = true;\r\n this.apiService\r\n .removeStudentPhoto(this.student.oneSchoolId)\r\n .then(() => {\r\n this.student.photoUrl = null;\r\n this.blobService\r\n .createBlobFromDataUrl(this.student.photoUrlOrPlaceholder(), \"image/png\")\r\n .then(blob => {\r\n this.blobService\r\n .getPhotoContentUrl(blob)\r\n .then(url => {\r\n this.student.photoContentUrl = url;\r\n })\r\n .catch(blobResponse => {\r\n this.$log.error(\"Error Getting Photo Content Failed\", blobResponse);\r\n })\r\n .finally(() => {\r\n this.busy = false;\r\n deferred.resolve();\r\n });\r\n })\r\n .catch(response => {\r\n this.$log.error(\"Error creating blob from data url\", response);\r\n this.busy = false;\r\n deferred.resolve();\r\n });\r\n })\r\n .catch(response => {\r\n this.$log.error(\"Error removing student photo\", response);\r\n this.busy = false;\r\n deferred.resolve();\r\n });\r\n return deferred.promise;\r\n }\r\n\r\n navigateBack() {\r\n this.$window.history.back();\r\n }\r\n\r\n navigate($event: Event, selectedOption: string): void {\r\n $event.preventDefault();\r\n\r\n switch (selectedOption.toLowerCase()) {\r\n case \"school\":\r\n this.$location.path(`/studentPhoto/school/${this.student.oneSchoolId}/${this.enrolment.schoolCode}`);\r\n break;\r\n case \"upload\":\r\n this.$location.path(`/studentPhoto/upload/${this.student.oneSchoolId}/${this.enrolment.schoolCode}`);\r\n break;\r\n case \"none\":\r\n this.removePhoto();\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n}\r\n\r\napp.directive(\"studentPhotoComponent\", () => ({\r\n templateUrl,\r\n restrict: \"E\",\r\n scope: true,\r\n controller: StudentPhotoComponent,\r\n controllerAs: \"vm\"\r\n}));\r\n","import angular, { ILogService, IQService } from \"angular\";\r\nimport { app } from \"../app.module\";\r\nimport { STATES, FEATURES } from \"../configuration\";\r\nimport { StudentContext, IContextLoader } from \"../services/contextLoader\";\r\nimport { User } from \"../models/user\";\r\nimport { Student } from \"../models/student\";\r\nimport { Enrolment } from \"../models/enrolment\";\r\nimport { IDataContext } from \"../services/dataContext\";\r\nimport { AuthorisationService } from \"../services/authorisationService\";\r\nimport { DelegateViewerViewModel, MedicalConditionType } from \"../models/api\";\r\n\r\nconst controllerId = \"studentDetails\";\r\nimport templateUrl from \"./studentDetails.html\";\r\nimport { IDeviceService } from \"@/app/services/deviceServiceProvider\";\r\nimport { IApiService } from \"../services/apiServiceProvider\";\r\n\r\napp.directive(`${controllerId}Component`, () => ({\r\n templateUrl,\r\n scope: true,\r\n controller: StudentDetailsComponent,\r\n controllerAs: \"vm\",\r\n restrict: \"E\",\r\n replace: false\r\n}));\r\n\r\nclass StudentDetailsComponent implements StudentContext {\r\n user: User;\r\n student: Student;\r\n enrolment: Enrolment;\r\n delegatedViewers: DelegateViewerViewModel[];\r\n editStudentDetails: boolean;\r\n showSuccessHeading: boolean;\r\n originalStudent: Student;\r\n postalAddressIsSameAsResidential: boolean;\r\n medicalConditionTypes: any;\r\n STATES: string[];\r\n busy: boolean;\r\n error: boolean;\r\n isMobileApp: boolean;\r\n\r\n constructor(\r\n $routeParams: angular.route.IRouteParamsService,\r\n contextLoader: IContextLoader,\r\n deviceService: IDeviceService,\r\n apiService: IApiService,\r\n private $location: ng.ILocationService,\r\n private $timeout: ng.ITimeoutService,\r\n private dataContext: IDataContext,\r\n private $q: IQService,\r\n private $log: ILogService,\r\n authorisationService: AuthorisationService\r\n ) {\r\n \"ngInject\";\r\n this.busy = false;\r\n this.error = false;\r\n\r\n this.STATES = STATES;\r\n this.student = null;\r\n this.editStudentDetails = false;\r\n this.postalAddressIsSameAsResidential = false;\r\n this.showSuccessHeading = false;\r\n this.delegatedViewers = null;\r\n this.isMobileApp = deviceService.isMobileApp;\r\n\r\n contextLoader\r\n .load(this, $routeParams, controllerId)\r\n .then(() => {\r\n this.originalStudent = this.student;\r\n\r\n if (!authorisationService.hasStudentFeatureAccess(this, FEATURES.STUDENT_DETAILS)) return;\r\n\r\n this.student = angular.copy(this.originalStudent);\r\n this.setIfPostalAddressIsSameAsResidential();\r\n\r\n this.delegatedViewers = this.student.delegateViewers;\r\n })\r\n .then(() => {\r\n return apiService.getStudentMedicalConditionTypes().then(response => {\r\n this.medicalConditionTypes = response.data;\r\n });\r\n });\r\n }\r\n\r\n clearPostalAddress(shouldClear) {\r\n if (shouldClear) {\r\n this.student.postalAddress.line1 = \"\";\r\n this.student.postalAddress.line2 = \"\";\r\n this.student.postalAddress.suburb = \"\";\r\n this.student.postalAddress.state = \"\";\r\n this.student.postalAddress.postcode = \"\";\r\n }\r\n }\r\n\r\n edit() {\r\n this.editStudentDetails = true;\r\n this.showSuccessHeading = false;\r\n\r\n this.$timeout(() => {\r\n if (this.student.residesWithParent) document.getElementById(\"residentialLine1\").focus();\r\n }, 100);\r\n }\r\n\r\n resetScreen() {\r\n this.student = angular.copy(this.originalStudent);\r\n this.editStudentDetails = false;\r\n this.setIfPostalAddressIsSameAsResidential();\r\n }\r\n\r\n cancel() {\r\n this.resetScreen();\r\n }\r\n\r\n setIfPostalAddressIsSameAsResidential() {\r\n if (this.student.residesWithParent === false) return;\r\n this.postalAddressIsSameAsResidential = this.student.postalAddress.line1 === \"\";\r\n }\r\n\r\n save() {\r\n if (this.busy) return;\r\n\r\n const deferred = this.$q.defer();\r\n\r\n this.busy = true;\r\n this.error = false;\r\n\r\n this.dataContext\r\n .saveStudentDetails(this.student)\r\n .then(() => {\r\n this.populateUpdatedDetails(this.originalStudent);\r\n this.resetScreen();\r\n\r\n this.showSuccessHeading = true;\r\n })\r\n .catch(response => {\r\n this.error = true;\r\n this.$log.error(\"Error changing the student details\", response);\r\n })\r\n .finally(() => {\r\n this.busy = false;\r\n deferred.resolve();\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n populateUpdatedDetails(student: Student) {\r\n student.updatedDetails = {\r\n timestamp: new Date().toString()\r\n };\r\n\r\n // clear student addresses for privacy reasons\r\n student.residentialAddress = { line1: \"\", line2: \"\", suburb: \"\", postcode: \"\", state: \"\" };\r\n student.postalAddress = { line1: \"\", line2: \"\", suburb: \"\", postcode: \"\", state: \"\" };\r\n }\r\n\r\n manageMedicalConditions() {\r\n this.$location.path(`/studentMedicalConditions/${this.student.oneSchoolId}/${this.enrolment.schoolCode}`);\r\n }\r\n}\r\n","import angular, { ILogService, IQService } from \"angular\";\r\nimport { app } from \"../app.module\";\r\nimport { FEATURES } from \"../configuration\";\r\nimport { StudentContext, IContextLoader } from \"../services/contextLoader\";\r\nimport { User } from \"../models/user\";\r\nimport { Student } from \"../models/student\";\r\nimport { Enrolment } from \"../models/enrolment\";\r\nimport { AuthorisationService } from \"../services/authorisationService\";\r\nimport { IDataContext } from \"../services/dataContext\";\r\n\r\nconst controllerId = \"studentMedicalConditions\";\r\nimport templateUrl from \"./studentMedicalConditions.html\";\r\nimport { MedicalConditionViewModel, MedicalConditionType } from \"../models/api\";\r\nimport { IApiService } from \"../services/apiServiceProvider\";\r\nconst ALERGYDETAILS_MAXLENGTH: number = 20;\r\n\r\napp.directive(`${controllerId}Component`, () => ({\r\n templateUrl,\r\n scope: true,\r\n controller: StudentMedicalConditionsComponent,\r\n controllerAs: \"vm\",\r\n restrict: \"E\",\r\n replace: false\r\n}));\r\n\r\nclass StudentMedicalConditionsComponent implements StudentContext {\r\n user: User;\r\n student: Student;\r\n enrolment: Enrolment;\r\n\r\n originalMedicalConditions: MedicalConditionViewModel[];\r\n medicalConditions: MedicalConditionViewModel[];\r\n medicalConditionTypes: MedicalConditionType[];\r\n medicalConditionsUpdated: boolean = false;\r\n detailsSubmitted: boolean;\r\n busy: boolean;\r\n error: boolean;\r\n\r\n constructor(\r\n $routeParams: angular.route.IRouteParamsService,\r\n contextLoader: IContextLoader,\r\n authorisationService: AuthorisationService,\r\n private $log: ILogService,\r\n private apiService: IApiService,\r\n private $q: IQService,\r\n private $location: angular.ILocationService,\r\n private dataContext: IDataContext\r\n ) {\r\n \"ngInject\";\r\n this.busy = false;\r\n this.error = false;\r\n contextLoader\r\n .load(this, $routeParams, controllerId)\r\n .then(() => {\r\n if (!authorisationService.hasStudentFeatureAccess(this, FEATURES.STUDENT_DETAILS)) return;\r\n\r\n this.originalMedicalConditions = this.student.medicalConditions.slice(0);\r\n this.medicalConditions = angular.copy(this.originalMedicalConditions);\r\n })\r\n .then(() => {\r\n return this.apiService.getStudentMedicalConditionTypes().then(response => {\r\n this.medicalConditionTypes = response.data;\r\n });\r\n });\r\n }\r\n\r\n hasAllergyDetails(medicalCondition: MedicalConditionViewModel) {\r\n var condition = this.getMedicalCondition(medicalCondition);\r\n if (!condition) return false;\r\n\r\n return condition.requiresAllergyDetails;\r\n }\r\n\r\n alergyDetailsCharactersRemaining(medicalCondition: MedicalConditionViewModel): number {\r\n if (!medicalCondition.alergyDetails) return ALERGYDETAILS_MAXLENGTH;\r\n return ALERGYDETAILS_MAXLENGTH - medicalCondition.alergyDetails.length;\r\n }\r\n\r\n get AlergyDetailsMaxLength() {\r\n return ALERGYDETAILS_MAXLENGTH;\r\n }\r\n\r\n getMedicalCondition(medicalCondition: MedicalConditionViewModel): MedicalConditionType {\r\n if (!medicalCondition.medicalConditionId) return;\r\n return this.medicalConditionTypes?.find(condition => condition.id === medicalCondition.medicalConditionId);\r\n }\r\n\r\n isUsed(medicalConditionTypeId: number, currentMedicalConditionTypeId: number | null): boolean {\r\n const medicalConditionType = this.medicalConditionTypes?.find(x => x.id === medicalConditionTypeId);\r\n const medicalConditionAlreadyInUse = this.medicalConditions?.filter(c => c.medicalConditionId !== currentMedicalConditionTypeId).some(c => c.medicalConditionId === medicalConditionTypeId);\r\n\r\n return medicalConditionAlreadyInUse && !medicalConditionType.requiresAllergyDetails;\r\n }\r\n\r\n back() {\r\n this.$location.path(`/studentDetails/${this.student.oneSchoolId}/${this.enrolment.schoolCode}`);\r\n }\r\n\r\n addMedicalCondition() {\r\n this.medicalConditions.push({\r\n id: null,\r\n medicalConditionId: null,\r\n isNew: true,\r\n isCurrent: true,\r\n advisedDate: new Date(), // Sorry, reusing API types in views something something\r\n alergyDetails: null,\r\n description: null\r\n });\r\n }\r\n\r\n submit(medicalConditionsForm) {\r\n if (this.busy || !this.student.isUserPPAOForStudent || !medicalConditionsForm.$valid) {\r\n return;\r\n }\r\n\r\n const deferred = this.$q.defer();\r\n\r\n this.busy = true;\r\n this.error = false;\r\n this.detailsSubmitted = false;\r\n\r\n angular.forEach(this.medicalConditions, medicalCondition => {\r\n if (medicalCondition.isNew && !medicalCondition.isCurrent) {\r\n var index = this.medicalConditions.indexOf(medicalCondition);\r\n this.medicalConditions.splice(index);\r\n }\r\n // remove allergy details that migth have been entered\r\n // if this type has no allergy details\r\n if (!this.hasAllergyDetails(medicalCondition)) {\r\n medicalCondition.alergyDetails = \"\";\r\n }\r\n });\r\n\r\n var data = {\r\n oneSchoolId: this.student.oneSchoolId,\r\n oneSchoolParentId: this.user.oneSchoolParentId,\r\n medicalConditions: this.medicalConditions\r\n };\r\n\r\n this.dataContext\r\n .saveStudentMedicalConditions(data)\r\n .then(() => {\r\n this.medicalConditionsUpdated = true;\r\n\r\n this.student.updatedMedicalConditions = {\r\n timestamp: new Date()\r\n };\r\n\r\n const updatedMedicalConditions = this.medicalConditions\r\n .filter(medicalCondition => medicalCondition.isCurrent)\r\n .map(medicalCondition => {\r\n return {\r\n ...medicalCondition,\r\n isNew: false\r\n } as MedicalConditionViewModel;\r\n });\r\n\r\n this.medicalConditions = updatedMedicalConditions;\r\n this.originalMedicalConditions = angular.copy(updatedMedicalConditions);\r\n\r\n medicalConditionsForm.$setPristine();\r\n })\r\n .catch(response => {\r\n this.error = true;\r\n this.$log.error(\"Error changing the student medical conditions details\", response);\r\n })\r\n .finally(() => {\r\n this.busy = false;\r\n deferred.resolve();\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n}\r\n","import { app } from \"../app.module\";\r\nimport { ICommonService } from \"../services/common\";\r\n\r\nconst controllerId = \"studentNotFound\";\r\nconst templateUrl = require(\"./studentNotFound.html\");\r\n\r\napp.directive(`${controllerId}Component`, () => ({\r\n templateUrl,\r\n scope: true,\r\n controller: studentNotFound,\r\n controllerAs: \"vm\",\r\n restrict: \"E\",\r\n replace: true\r\n}));\r\n\r\nclass studentNotFound {\r\n constructor(common: ICommonService) {\r\n \"ngInject\";\r\n common.activateController([], controllerId);\r\n }\r\n}\r\n","import { app } from \"../app.module\";\r\nimport { IUrlResolver } from \"../services/urlResolver\";\r\nimport { TERMS_AND_CONDITION_LABELS } from \"../configuration\";\r\nimport { AdminViewRedirectService } from \"../services/adminViewRedirectService\";\r\nimport { IDeviceService } from \"../services/deviceServiceProvider\";\r\nimport { IApiService } from \"../services/apiServiceProvider\";\r\n\r\nconst controllerId = \"termsAndConditions\";\r\nimport templateUrl from \"./termsAndConditions.html\";\r\nimport { ICommonService } from \"../services/common\";\r\nimport { ILocationService, ISCEService } from \"angular\";\r\nimport { IDataContext } from \"../services/dataContext\";\r\n\r\napp.directive(`${controllerId}Component`, () => ({\r\n templateUrl,\r\n scope: true,\r\n controller: termsAndConditions,\r\n controllerAs: \"vm\",\r\n restrict: \"E\",\r\n replace: true\r\n}));\r\n\r\nfunction termsAndConditions(\r\n common: ICommonService,\r\n dataContext: IDataContext,\r\n $sce: ISCEService,\r\n $location: ILocationService,\r\n adminViewRedirectService: AdminViewRedirectService,\r\n apiService: IApiService,\r\n deviceService: IDeviceService,\r\n urlResolver: IUrlResolver\r\n) {\r\n \"ngInject\";\r\n var vm = this;\r\n vm.declineTermsAndConditions = declineTermsAndConditions;\r\n vm.pendingTermsAndConditions = [];\r\n vm.acceptedAll = false;\r\n vm.isMobileApp = deviceService.isMobileApp;\r\n vm.checkIfAllAccepted = checkIfAllAccepted;\r\n vm.acceptTermsAndConditions = acceptTermsAndConditions;\r\n\r\n common.activateController([getUser()], controllerId).then(function () {});\r\n\r\n function getUser() {\r\n return dataContext.getData().then(function (user) {\r\n vm.pendingTermsAndConditions = user.pendingTermsAndConditions.map(function (key) {\r\n return {\r\n url: $sce.trustAsResourceUrl(urlResolver.resolve(\"/api/termsandconditions/\" + key)),\r\n checked: false,\r\n key: key,\r\n label: getCheckboxLabelForTermsAndCondition(key)\r\n };\r\n });\r\n if (vm.isMobileApp) {\r\n fetchTermsAndConditions();\r\n }\r\n });\r\n }\r\n\r\n function getCheckboxLabelForTermsAndCondition(key) {\r\n var type = key.split(\"-\")[0].toUpperCase();\r\n return TERMS_AND_CONDITION_LABELS[type];\r\n }\r\n\r\n function checkIfAllAccepted() {\r\n vm.acceptedAll = vm.pendingTermsAndConditions.every(function (tc: any) {\r\n return tc.checked;\r\n });\r\n }\r\n\r\n function acceptTermsAndConditions() {\r\n apiService.acceptPendingTermsAndConditions().then(function successCallback() {\r\n dataContext.verifyAuthenticated().then(function () {\r\n $location.path(\"/\");\r\n });\r\n });\r\n }\r\n\r\n function declineTermsAndConditions() {\r\n return dataContext.flagSignedOut(false);\r\n }\r\n\r\n function fetchTermsAndConditions() {\r\n vm.pendingTermsAndConditions.forEach(function (toc) {\r\n apiService.getTermsAndConditions(toc.key).then(function successCallback(resp) {\r\n toc.content = resp.data;\r\n });\r\n });\r\n }\r\n}\r\n","import { app } from \"../app.module\";\r\nimport { FEATURES, ADMIN_VIEW_COOKIES } from \"../configuration\";\r\nimport { StudentContext, IContextLoader } from \"../services/contextLoader\";\r\nimport { User } from \"../models/user\";\r\nimport { Student } from \"../models/student\";\r\nimport { Enrolment } from \"../models/enrolment\";\r\nimport { AuthorisationService } from \"../services/authorisationService\";\r\nimport { IDataContext } from \"../services/dataContext\";\r\nimport { DayViewModel } from \"../models/api\";\r\nimport templateUrl from \"./timetable.html\";\r\n\r\nconst controllerId = \"timetable\";\r\napp.directive(`${controllerId}Component`, () => ({\r\n templateUrl,\r\n controller: TimetableComponent,\r\n controllerAs: \"vm\",\r\n restrict: \"E\",\r\n scope: true,\r\n replace: false\r\n}));\r\n\r\nconst HEIGHT_MULTIPLIER = 2.4;\r\n\r\nclass TimetableComponent implements StudentContext {\r\n user: User;\r\n student: Student;\r\n enrolment: Enrolment;\r\n firstWeekDays: DayViewModel[];\r\n secondWeekDays: DayViewModel[];\r\n anyTimetableInformation: boolean;\r\n\r\n constructor($routeParams: angular.route.IRouteParamsService, contextLoader: IContextLoader, authorisationService: AuthorisationService, private dataContext: IDataContext) {\r\n \"ngInject\";\r\n this.anyTimetableInformation = false;\r\n\r\n this.firstWeekDays = [];\r\n this.secondWeekDays = [];\r\n\r\n contextLoader.load(this, $routeParams, controllerId).then(() => {\r\n if (!authorisationService.hasFeatureAccess(this, FEATURES.TIMETABLE)) {\r\n return;\r\n }\r\n\r\n this.firstWeekDays = this.enrolment.timetable.days.filter(function (day) {\r\n return day.dayOfWeekOrder <= 5;\r\n });\r\n this.secondWeekDays = this.enrolment.timetable.days.filter(function (day) {\r\n return day.dayOfWeekOrder > 5 && day.dayOfWeekOrder <= 10;\r\n });\r\n this.anyTimetableInformation = this.enrolment.timetable.days.length > 0;\r\n });\r\n }\r\n\r\n toggle(timetableDay) {\r\n timetableDay.expanded = timetableDay.expanded ? false : true;\r\n }\r\n\r\n toggleToolTip(period) {\r\n var showTooltip = true;\r\n if (period.showTooltip && period.showTooltip == true) {\r\n showTooltip = false;\r\n }\r\n\r\n this.hideAllTooltips();\r\n\r\n period.showTooltip = showTooltip;\r\n }\r\n\r\n hideAllTooltips() {\r\n this.enrolment.timetable.days.forEach(function (day: any) {\r\n day.periods.forEach(function (periodItem: any) {\r\n if (periodItem.showTooltip) periodItem.showTooltip = false;\r\n });\r\n });\r\n }\r\n\r\n dayHeight(day) {\r\n return day.range * HEIGHT_MULTIPLIER + \"px\";\r\n }\r\n\r\n periodTop(period) {\r\n return period.startTimeMinuteOffset * HEIGHT_MULTIPLIER + \"px\";\r\n }\r\n\r\n periodHeight(period) {\r\n return period.lengthInMinutes * HEIGHT_MULTIPLIER + \"px\";\r\n }\r\n\r\n periodRollCall(period) {\r\n if (period.lengthInMinutes > 20) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n getTimetableLink() {\r\n let url = `/api/timetable/${this.student.oneSchoolId}/${this.enrolment.schoolCode}`;\r\n\r\n if (this.dataContext.isAdminView()) {\r\n let schoolUserId = sessionStorage.getItem(ADMIN_VIEW_COOKIES.SCHOOL_USER_ID);\r\n let ppaoId = sessionStorage.getItem(ADMIN_VIEW_COOKIES.PARENT_ID);\r\n url += `?AdminPPAOId=${ppaoId}&AdminSchoolUserId=${schoolUserId}`;\r\n }\r\n\r\n return url;\r\n }\r\n\r\n loadImage(imagePath: string) {\r\n return require(\"../../content/img/\" + imagePath);\r\n }\r\n}\r\n","import { app } from \"../app.module\";\r\nimport { GOOGLE_PLAY_APP_PAGE, APPLE_STORE_APP_PAGE } from \"../configuration\";\r\n\r\nimport templateUrl from \"./update.html\";\r\nimport { IDeviceService } from \"../services/deviceServiceProvider\";\r\nimport { IApiService } from \"../services/apiServiceProvider\";\r\n\r\nclass updateAppController {\r\n currentVersion: string;\r\n targetVersion: string;\r\n appUrlInTheStore: string;\r\n\r\n constructor($routeParams: angular.route.IRouteParamsService, apiService: IApiService, deviceService: IDeviceService) {\r\n \"ngInject\";\r\n let versionParts = $routeParams.versionInfo.split(\"|\");\r\n\r\n this.currentVersion = versionParts[0];\r\n this.targetVersion = versionParts[1];\r\n\r\n if (deviceService.isIOs()) {\r\n this.appUrlInTheStore = APPLE_STORE_APP_PAGE;\r\n }\r\n\r\n if (deviceService.isAndroid()) {\r\n this.appUrlInTheStore = GOOGLE_PLAY_APP_PAGE;\r\n }\r\n\r\n let versionInfo = { currentVersion: this.currentVersion, targetVersion: this.targetVersion };\r\n\r\n apiService.recordMobileAppNeedsUpgrade(versionInfo);\r\n }\r\n}\r\n\r\napp.directive(\"updateComponent\", () => ({\r\n templateUrl,\r\n controller: updateAppController,\r\n controllerAs: \"vm\",\r\n scope: true,\r\n restrict: \"E\"\r\n}));\r\n","export function distinctFilter(value, index, self) {\r\n return self.indexOf(value) === index;\r\n}","import { app } from \"../app.module\";\r\nimport { FEATURES } from \"../configuration\";\r\nimport { StudentContext, IContextLoader } from \"../services/contextLoader\";\r\nimport { User } from \"../models/user\";\r\nimport { Student } from \"../models/student\";\r\nimport { Enrolment } from \"../models/enrolment\";\r\nimport { AuthorisationService } from \"../services/authorisationService\";\r\nimport { DelegateViewerService } from \"../services/delegateViewer\";\r\nimport { distinctFilter } from \"../tools/array\";\r\nimport { NewDelegateViewerWriteModel } from \"../models/api\";\r\nimport templateUrl from \"./addViewer.html\";\r\nconst controllerId = \"addViewer\";\r\napp.directive(`${controllerId}Component`, () => ({\r\n templateUrl,\r\n controller: AddViewerComponent,\r\n controllerAs: \"vm\",\r\n restrict: \"E\",\r\n scope: true,\r\n replace: false\r\n}));\r\n\r\nclass AddViewerComponent implements StudentContext {\r\n user: User;\r\n student: Student;\r\n enrolment: Enrolment;\r\n busy: boolean;\r\n error: boolean;\r\n\r\n // There's major differences between this VM and the what the client\r\n // is using. Let's see if this works?\r\n viewer: NewDelegateViewerWriteModel & {\r\n allFeatures: string[];\r\n };\r\n delegateViewerAdded: boolean;\r\n\r\n constructor(\r\n $routeParams: angular.route.IRouteParamsService,\r\n contextLoader: IContextLoader,\r\n authorisationService: AuthorisationService,\r\n private delegateViewer: DelegateViewerService,\r\n private $location: ng.ILocationService,\r\n private $q: ng.IQService,\r\n private $log: ng.ILogService\r\n ) {\r\n \"ngInject\";\r\n this.busy = false;\r\n this.error = false;\r\n contextLoader.load(this, $routeParams, controllerId).then(() => {\r\n if (!authorisationService.hasStudentFeatureAccess(this, FEATURES.STUDENT_DETAILS)) return;\r\n if (this.isDelegatedViewer()) return;\r\n\r\n let combinedFeatures = (this.student.features).concat(this.enrolment.features);\r\n combinedFeatures = combinedFeatures.filter(distinctFilter);\r\n let availableViewerFeatures = combinedFeatures.filter(x => x !== FEATURES.CONSENT_REQUESTS.toString() && x !== FEATURES.STUDENT_DETAILS.toString());\r\n\r\n this.viewer = {\r\n studentId: this.student.oneSchoolId,\r\n features: [],\r\n allFeatures: availableViewerFeatures,\r\n parentQId: null,\r\n firstName: null,\r\n lastName: null,\r\n email: null\r\n };\r\n });\r\n }\r\n\r\n isDelegatedViewer() {\r\n if (!this.student.isUserPPAOForStudent) {\r\n var newPath = \"/featureUnavailable\";\r\n this.$location.path(newPath);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n save() {\r\n if (this.busy) return;\r\n\r\n const deferred = this.$q.defer();\r\n this.busy = true;\r\n this.error = false;\r\n\r\n this.delegateViewer\r\n .sendInvite(this.viewer)\r\n .then(newViewer => {\r\n this.student.delegateViewers.push(newViewer);\r\n this.delegateViewerAdded = true;\r\n })\r\n .catch(response => {\r\n this.error = true;\r\n this.$log.error(\"Error sending invitation\", response);\r\n })\r\n .finally(() => {\r\n this.busy = false;\r\n deferred.resolve();\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n anyFeaturesSelected() {\r\n return this.viewer.features.length != 0;\r\n }\r\n}\r\n","import angular from \"angular\";\r\nimport { app } from \"../app.module\";\r\nimport { FEATURES } from \"../configuration\";\r\nimport { StudentContext, IContextLoader } from \"../services/contextLoader\";\r\nimport { User } from \"../models/user\";\r\nimport { Student } from \"../models/student\";\r\nimport { Enrolment } from \"../models/enrolment\";\r\nimport { AuthorisationService } from \"../services/authorisationService\";\r\nimport { DelegateViewerService } from \"../services/delegateViewer\";\r\nimport { DelegateViewerViewModel } from \"../models/api\";\r\nimport templateUrl from \"./viewer.html\";\r\nimport { IApiService } from \"../services/apiServiceProvider\";\r\nconst controllerId = \"viewer\";\r\napp.directive(`${controllerId}Component`, () => ({\r\n templateUrl,\r\n controller: ViewerComponent,\r\n controllerAs: \"vm\",\r\n restrict: \"E\",\r\n scope: true,\r\n replace: false\r\n}));\r\n\r\ntype Viewer = DelegateViewerViewModel & { registeredEmail?: string };\r\n\r\nclass ViewerComponent implements StudentContext {\r\n user: User;\r\n student: Student;\r\n enrolment: Enrolment;\r\n viewerId: string;\r\n\r\n originalViewer: Viewer;\r\n // Honestly unsure why this registered email is here instead of just email\r\n viewer: Viewer;\r\n editingInformation: boolean;\r\n editingStatus: boolean;\r\n showEditInformation: boolean;\r\n showResendInvitation: boolean;\r\n showEditStatus: boolean;\r\n canEditContactDetails: boolean;\r\n canEditFeatures: boolean;\r\n busy: boolean;\r\n message: { header: string; body: string };\r\n confirmRemove: boolean;\r\n error: boolean;\r\n\r\n constructor(\r\n $routeParams: angular.route.IRouteParamsService,\r\n contextLoader: IContextLoader,\r\n authorisationService: AuthorisationService,\r\n private apiService: IApiService,\r\n private $location: ng.ILocationService,\r\n private $timeout: ng.ITimeoutService,\r\n private $q: ng.IQService,\r\n private $log: ng.ILogService,\r\n private delegateViewer: DelegateViewerService\r\n ) {\r\n \"ngInject\";\r\n this.viewerId = $routeParams.viewerId;\r\n\r\n this.message = null;\r\n this.showEditInformation = true;\r\n this.showResendInvitation = true;\r\n this.showEditStatus = true;\r\n this.editingInformation = false;\r\n this.editingStatus = false;\r\n this.canEditContactDetails = false;\r\n this.canEditFeatures = false;\r\n this.confirmRemove = false;\r\n this.busy = false;\r\n this.error = false;\r\n\r\n contextLoader.load(this, $routeParams, controllerId).then(() => {\r\n if (!authorisationService.hasStudentFeatureAccess(this, FEATURES.STUDENT_DETAILS)) return;\r\n if (this.isDelegatedViewer()) return;\r\n\r\n this.originalViewer = this.student.delegateViewers.find(viewer => viewer.token === this.viewerId);\r\n this.viewer = angular.copy(this.originalViewer);\r\n\r\n if (this.viewer.qId == null) {\r\n this.viewer.registeredEmail = \"\";\r\n } else {\r\n this.getDelegatedViewerDetails(this.viewer.qId).then(result => {\r\n this.viewer.registeredEmail = result.emailAddress;\r\n });\r\n }\r\n\r\n this.resetPage(this.viewer);\r\n });\r\n }\r\n\r\n getDelegatedViewerDetails(qId) {\r\n return this.apiService.getUserEmail(qId).then(response => response.data);\r\n }\r\n\r\n displayRemoveConfirmation() {\r\n return this.viewer.status === \"Remove\";\r\n }\r\n\r\n isDelegatedViewer() {\r\n if (!this.student.isUserPPAOForStudent) {\r\n var newPath = \"/featureUnavailable\";\r\n this.$location.path(newPath);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n resetPage(originalViewer: Viewer) {\r\n originalViewer.allFeatures = originalViewer.allFeatures.filter(function (feature) {\r\n return feature !== FEATURES.STUDENT_DETAILS && feature !== FEATURES.CONSENT_REQUESTS;\r\n });\r\n\r\n originalViewer.features = originalViewer.features.filter(function (feature) {\r\n return feature !== FEATURES.STUDENT_DETAILS && feature !== FEATURES.CONSENT_REQUESTS;\r\n });\r\n\r\n this.viewer = angular.copy(originalViewer);\r\n\r\n if (this.viewer.qId == null || this.viewer.status === \"Remove\") {\r\n this.viewer.registeredEmail = \"\";\r\n } else {\r\n this.getDelegatedViewerDetails(this.viewer.qId).then(result => {\r\n this.viewer.registeredEmail = result.emailAddress;\r\n });\r\n }\r\n\r\n this.editingInformation = false;\r\n this.editingStatus = false;\r\n\r\n var isViewerBlocked = this.viewer.status === \"Blocked\" || this.viewer.status === \"Remove\";\r\n var isViewerDeleted = this.viewer.status === \"Remove\";\r\n var isPending = this.viewer.status === \"Invited\";\r\n\r\n this.showEditInformation = !isViewerDeleted;\r\n this.showResendInvitation = isPending;\r\n this.showEditStatus = !isViewerDeleted;\r\n this.canEditContactDetails = isPending;\r\n this.canEditFeatures = !isViewerBlocked;\r\n }\r\n\r\n edit() {\r\n this.message = null;\r\n this.editingInformation = true;\r\n this.setFocus(\"firstName\");\r\n }\r\n\r\n editStatus() {\r\n this.message = null;\r\n this.editingStatus = true;\r\n this.setFocus(\"status\");\r\n }\r\n\r\n cancel() {\r\n this.resetPage(this.originalViewer);\r\n }\r\n\r\n setFocus(elementId) {\r\n this.$timeout(() => {\r\n $(\"#\" + elementId).trigger(\"focus\");\r\n }, 100);\r\n }\r\n\r\n resendInvite() {\r\n if (this.busy) return;\r\n const deferred = this.$q.defer();\r\n this.busy = true;\r\n this.error = false;\r\n\r\n this.delegateViewer\r\n .resendInvite(this.viewer)\r\n .then(() => {\r\n this.setMessage(\"SUCCESS!\", \"An invitation has been sent to \" + this.viewer.fullName + \" at the email address of \" + this.viewer.email + \".\");\r\n })\r\n .catch(response => {\r\n this.error = true;\r\n this.$log.error(\"Error resending invitation\", response);\r\n })\r\n .finally(() => {\r\n this.busy = false;\r\n deferred.resolve();\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n save() {\r\n if (this.busy) return;\r\n const deferred = this.$q.defer();\r\n this.busy = true;\r\n this.error = false;\r\n\r\n var detailsChanged = this.haveDetailsChanged(this.originalViewer, this.viewer);\r\n var statusChanged = this.hasStatusChanged(this.originalViewer, this.viewer);\r\n\r\n if (detailsChanged && statusChanged) {\r\n this.updateViewer()\r\n .then(() => this.updateStatus())\r\n .then(viewers => this.refreshPage(viewers))\r\n .catch(response => {\r\n this.error = true;\r\n this.$log.error(\"Error updating viewer and status\", response);\r\n })\r\n .finally(() => {\r\n this.busy = false;\r\n deferred.resolve();\r\n });\r\n } else if (detailsChanged) {\r\n this.updateViewer()\r\n .then(viewers => this.refreshPage(viewers))\r\n .catch(response => {\r\n this.error = true;\r\n this.$log.error(\"Error updating viewer\", response);\r\n })\r\n .finally(() => {\r\n this.busy = false;\r\n deferred.resolve();\r\n });\r\n } else if (statusChanged) {\r\n this.updateStatus()\r\n .then(viewers => this.refreshPage(viewers))\r\n .catch(response => {\r\n this.error = true;\r\n this.$log.error(\"Error updating status\", response);\r\n })\r\n .finally(() => {\r\n this.busy = false;\r\n deferred.resolve();\r\n });\r\n }\r\n\r\n return deferred.promise;\r\n }\r\n\r\n canSave() {\r\n var detailsChanged = this.haveDetailsChanged(this.originalViewer, this.viewer);\r\n var statusChanged = this.hasStatusChanged(this.originalViewer, this.viewer);\r\n\r\n return (detailsChanged || statusChanged) && this.anyFeaturesSelected() && this.anyRemoveApproved();\r\n }\r\n\r\n updateViewer() {\r\n return this.delegateViewer.updateViewer(this.viewer, this.student.oneSchoolId);\r\n }\r\n\r\n updateStatus() {\r\n return this.delegateViewer.updateStatus(this.viewer.token, this.student.oneSchoolId, this.viewer.status);\r\n }\r\n\r\n anyRemoveApproved() {\r\n if (this.displayRemoveConfirmation()) {\r\n return this.confirmRemove;\r\n }\r\n return true;\r\n }\r\n\r\n refreshPage(updatedDelegatedViewers: DelegateViewerViewModel[]) {\r\n this.student.delegateViewers = updatedDelegatedViewers;\r\n this.originalViewer = updatedDelegatedViewers.find(viewer => viewer.token === this.viewerId);\r\n\r\n if (this.originalViewer == null) {\r\n // status was updated to remove, so it doesn't exist in\r\n // the delegated viewer array anymore\r\n this.originalViewer = this.viewer;\r\n }\r\n\r\n this.resetPage(this.originalViewer);\r\n\r\n this.setMessage(\"Success!\", \"Thank you for updating \" + this.viewer.fullName + \"'s details. All details have been successfully saved.\");\r\n }\r\n\r\n hasStatusChanged(originalViewer: DelegateViewerViewModel, newViewer: DelegateViewerViewModel) {\r\n return originalViewer.status !== newViewer.status;\r\n }\r\n\r\n haveDetailsChanged(originalViewer: DelegateViewerViewModel, newViewer: DelegateViewerViewModel) {\r\n var haveFeaturesChanged = !angular.equals(newViewer.features.sort(), originalViewer.features.sort());\r\n\r\n return originalViewer.firstName !== newViewer.firstName || originalViewer.lastName !== newViewer.lastName || originalViewer.email !== newViewer.email || haveFeaturesChanged;\r\n }\r\n\r\n displayStatus(viewer: DelegateViewerViewModel) {\r\n if (!viewer) return \"\";\r\n if (viewer.status === \"Remove\") return \"Removed\";\r\n return viewer.status;\r\n }\r\n\r\n setMessage(header: string, body: string) {\r\n this.message = {\r\n header: header,\r\n body: body\r\n };\r\n }\r\n\r\n approveDelegatedViewer() {\r\n if (this.busy) return;\r\n const deferred = this.$q.defer();\r\n this.busy = true;\r\n this.error = false;\r\n\r\n this.delegateViewer\r\n .approve(this.student.oneSchoolId, this.viewer)\r\n .then(v => this.refreshPage(v))\r\n .catch(response => {\r\n this.error = true;\r\n this.$log.error(\"Error approving delegate viewer\", response);\r\n })\r\n .finally(() => {\r\n this.busy = false;\r\n deferred.resolve();\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n anyFeaturesSelected() {\r\n return this.viewer.features.length != 0;\r\n }\r\n}\r\n","import { app } from \"../app.module\";\r\nconst templateUrl = require(\"./admin-view-logout.html\");\r\n\r\napp.directive(\"adminViewLogoutComponent\", () => ({\r\n templateUrl,\r\n restrict: \"E\",\r\n scope: true,\r\n replace: true\r\n}));\r\n","import { app } from \"../app.module\";\r\nconst templateUrl = require(\"./admin-view-context-error.html\");\r\n\r\napp.directive(\"adminViewContextErrorComponent\", () => ({\r\n templateUrl,\r\n restrict: \"E\",\r\n scope: true,\r\n replace: true\r\n}));\r\n","import { app } from \"../app.module\";\r\nconst templateUrl = require(\"./admin-view-inactive-error.html\");\r\n\r\napp.directive(\"adminViewInactiveErrorComponent\", () => ({\r\n templateUrl,\r\n restrict: \"E\",\r\n scope: true,\r\n replace: true\r\n}));\r\n","import { app } from \"../../app.module\";\r\nimport { FEATURES } from \"../../configuration\";\r\nimport { User } from \"../../models/user\";\r\nimport { IDataContext } from \"../../services/dataContext\";\r\nimport { IDeviceService } from \"@/app/services/deviceServiceProvider\";\r\nimport angular, { ILogService } from \"angular\";\r\nimport { AbsentStudentModel, ReportMultipleAbsencesWriteModel } from \"@/app/models/api\";\r\nimport templateUrl from \"./reportMultipleAbsences.html\";\r\nimport { IApiService } from \"../../services/apiServiceProvider\";\r\nimport { parseDate } from \"../../services/dateHelper\";\r\nimport { getToday, getTimeOptions } from \"../../services/dayHelper\";\r\nimport { EnrolmentStatus } from \"../../models/enums\";\r\n\r\nrequire(\"./reportMultipleAbsences.less\");\r\n\r\nconst controllerId = \"reportMultipleAbsences\";\r\n\r\napp.directive(`${controllerId}Component`, () => ({\r\n templateUrl,\r\n controller: ReportMultipleAbsencesComponent,\r\n controllerAs: \"vm\",\r\n restrict: \"E\",\r\n scope: true,\r\n replace: false\r\n}));\r\n\r\nconst REASON_MAXLENGTH = 89;\r\n\r\ninterface IReportMultipleAbsencesScope extends angular.IScope {\r\n submitMultipleAbsencesForm: ng.IFormController;\r\n}\r\n\r\nexport class ReportMultipleAbsencesComponent {\r\n absences: {\r\n id: number | null;\r\n students: {\r\n studentId: string;\r\n name: string;\r\n schoolName: string;\r\n centerCode: string;\r\n }[];\r\n selectedStudents: {\r\n studentId: string;\r\n name: string;\r\n schoolName: string;\r\n centerCode: string;\r\n }[];\r\n dateFrom: Date;\r\n allDay: boolean;\r\n timeFrom: string;\r\n dateTo: Date;\r\n timeTo: string;\r\n reason: string;\r\n }[];\r\n timeOptions: Date[];\r\n today: Date;\r\n user: User;\r\n absenceSubmitted: boolean;\r\n absenceFeatureTurnedOffForAllStudents: boolean;\r\n studentsWithoutAttendanceFeature: {\r\n name: string;\r\n schoolName: string;\r\n }[];\r\n isMobileApp: boolean;\r\n busy: boolean;\r\n error: boolean;\r\n\r\n constructor(\r\n deviceService: IDeviceService,\r\n private apiService: IApiService,\r\n private dataContext: IDataContext,\r\n private $scope: IReportMultipleAbsencesScope,\r\n private $timeout: ng.ITimeoutService,\r\n private $document: ng.IDocumentService,\r\n private $q: ng.IQService,\r\n private $log: ILogService\r\n ) {\r\n \"ngInject\";\r\n this.studentsWithoutAttendanceFeature = [];\r\n this.dataContext.getData().then(user => {\r\n this.user = user;\r\n this.absenceFeatureTurnedOffForAllStudents = !user.students.some(\r\n student =>\r\n student.features.some(feature => feature.toString() === FEATURES.ATTENDANCE.toString()) &&\r\n // FutureStudentNoAbsence - Currently, Absence cannot be recorded for Future Student\r\n student.enrolments.some(enrolment => enrolment.enrolmentStatus === EnrolmentStatus.Active)\r\n );\r\n this.user.students.map(student => {\r\n student.enrolments.map(enrolment => {\r\n enrolment.features.findIndex(feature => feature === FEATURES.ATTENDANCE.toString()) === -1 &&\r\n // FutureStudentNoAbsence - Currently, Absence cannot be recorded for Future Student\r\n enrolment.enrolmentStatus !== EnrolmentStatus.Active\r\n ? this.studentsWithoutAttendanceFeature.push({ name: student.fullName, schoolName: enrolment.school })\r\n : null;\r\n });\r\n });\r\n this.absences = [];\r\n this.addAbsence();\r\n });\r\n\r\n this.timeOptions = getTimeOptions();\r\n this.isMobileApp = deviceService.isMobileApp;\r\n this.today = getToday();\r\n $(\"#studentAndSchool\").trigger(\"focus\");\r\n }\r\n\r\n remove(index: number) {\r\n this.absences.splice(index, 1);\r\n }\r\n\r\n addAbsence() {\r\n var studentList = [];\r\n this.user.students.map(student => {\r\n student.enrolments.map(enrolment => {\r\n enrolment.features.findIndex(feature => feature === FEATURES.ATTENDANCE.toString()) > -1 &&\r\n // FutureStudentNoAbsence - Currently, Absence cannot be recorded for Future Student\r\n enrolment.enrolmentStatus === EnrolmentStatus.Active\r\n ? studentList.push({\r\n name: student.fullName,\r\n schoolName: enrolment.school,\r\n caption: `${student.fullName} - ${enrolment.school}`,\r\n studentId: student.oneSchoolId,\r\n centerCode: enrolment.schoolCode\r\n })\r\n : null;\r\n });\r\n });\r\n this.absences.push({\r\n students: studentList,\r\n selectedStudents: [],\r\n id: null,\r\n dateFrom: null,\r\n allDay: false,\r\n dateTo: null,\r\n timeFrom: \"\",\r\n timeTo: \"\",\r\n reason: \"\"\r\n });\r\n }\r\n\r\n reasonCharactersRemaining(reason, hasReachedMaxlength) {\r\n if (hasReachedMaxlength) {\r\n return -1;\r\n }\r\n var reasonLength = reason ? reason.length : 0;\r\n return REASON_MAXLENGTH - reasonLength;\r\n }\r\n\r\n onAllDayChecked(allDay: boolean, index: number) {\r\n if (allDay && this.absences[index].dateFrom && !this.absences[index].dateTo) {\r\n const date = parseDate(this.absences[index].dateFrom);\r\n\r\n if (date) {\r\n this.absences[index].dateTo = date.toDate();\r\n }\r\n }\r\n\r\n if (allDay && !this.absences[index].dateFrom && this.absences[index].dateTo) {\r\n const date = parseDate(this.absences[index].dateTo);\r\n\r\n if (date) {\r\n this.absences[index].dateFrom = date.toDate();\r\n }\r\n }\r\n }\r\n\r\n submitMultipleAbsences() {\r\n this.setFormFieldsDirty();\r\n\r\n if (this.busy || !this.$scope.submitMultipleAbsencesForm.$valid || this.absences.some(a => a.selectedStudents.length == 0)) return;\r\n\r\n const deferred = this.$q.defer();\r\n\r\n this.busy = true;\r\n this.absenceSubmitted = false;\r\n this.error = false;\r\n\r\n var futureAbsences = this.absences.map(\r\n absence =>\r\n ({\r\n students: absence.selectedStudents.map(\r\n student =>\r\n ({\r\n eqId: student.studentId,\r\n schoolCode: student.centerCode\r\n }) as AbsentStudentModel\r\n ),\r\n allDay: absence.allDay,\r\n dateAbsentFrom: absence.dateFrom,\r\n dateAbsentTo: absence.dateTo,\r\n timeFrom: absence.allDay ? \"\" : absence.timeFrom,\r\n timeTo: absence.allDay ? \"\" : absence.timeTo,\r\n reason: absence.reason\r\n }) as ReportMultipleAbsencesWriteModel\r\n );\r\n\r\n this.apiService\r\n .reportMultipleAbsences(futureAbsences)\r\n .then(response => {\r\n this.absenceSubmitted = true;\r\n\r\n this.$timeout(() => {\r\n var successDiv = angular.element(document.getElementById(\"success\"));\r\n (this.$document).scrollToElement(successDiv, 0, 0);\r\n }, 100);\r\n })\r\n .catch(response => {\r\n this.error = true;\r\n this.$log.error(\"Error reporting absence for multiple student\", response);\r\n })\r\n .finally(() => {\r\n this.busy = false;\r\n deferred.resolve();\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n setFormFieldsDirty() {\r\n for (var i = 0; i < this.absences.length; i++) {\r\n var dateToField = \"dateTo\" + i;\r\n var dateFromField = \"dateFrom\" + i;\r\n var timeFromField = \"timeFrom\" + i;\r\n var timeToField = \"timeTo\" + i;\r\n var reasonField = \"reason\" + i;\r\n\r\n this.$scope.submitMultipleAbsencesForm[dateToField].$setDirty();\r\n this.$scope.submitMultipleAbsencesForm[dateFromField].$setDirty();\r\n this.$scope.submitMultipleAbsencesForm[reasonField].$setDirty();\r\n\r\n if (this.$scope.submitMultipleAbsencesForm[timeFromField]) {\r\n this.$scope.submitMultipleAbsencesForm[timeFromField].$setDirty();\r\n }\r\n\r\n if (this.$scope.submitMultipleAbsencesForm[timeToField]) {\r\n this.$scope.submitMultipleAbsencesForm[timeToField].$setDirty();\r\n }\r\n }\r\n }\r\n\r\n public alignStartAndEndDate(absence: { dateFrom: Date | null; dateTo: Date | null }) {\r\n try {\r\n if (absence.dateFrom && absence.dateTo) {\r\n if (absence.dateFrom > absence.dateTo) {\r\n absence.dateTo = absence.dateFrom;\r\n }\r\n }\r\n } catch (err) {}\r\n }\r\n}\r\n","import \"./combinedUpcomingEvents.less\";\r\n\r\nimport moment from \"moment\";\r\n\r\nimport { FEATURES } from \"../../configuration\";\r\nimport { getDayOfWeekLabel } from \"../../services/dayHelper\";\r\n\r\nimport { IDataContext } from \"../../services/dataContext\";\r\nimport { app } from \"../../app.module\";\r\nimport { enumerateDaysBetweenDates } from \"../../tools/dates\";\r\n\r\nimport templateUrl from \"./combinedUpcomingEvents.html\";\r\nimport { IDeviceService } from \"@/app/services/deviceServiceProvider\";\r\nimport { formatDateTimeToIcsDate, formatDateToShortMonthDay } from \"../../services/dateHelper\";\r\nimport { getFormattedTimeRange } from \"../../services/timeHelper\";\r\nimport { EventViewModel } from \"@/app/models/api\";\r\nimport { ICalendarData, ICalendarService } from \"../..//services/calendarService\";\r\n\r\nconst controllerId = \"combinedUpcomingEvents\";\r\n\r\napp.directive(`${controllerId}Component`, () => ({\r\n templateUrl,\r\n controller: CombinedUpcomingEventsComponent,\r\n controllerAs: \"vm\",\r\n restrict: \"E\",\r\n scope: true,\r\n replace: false\r\n}));\r\n\r\nvar eventTypePrefixes = {\r\n 0: \"E\",\r\n 1: \"A\",\r\n 2: \"X\",\r\n 3: \"V\"\r\n};\r\n\r\ninterface StudentEventViewModel extends EventViewModel {\r\n studentId: string;\r\n studentName: string;\r\n schoolName: string;\r\n schoolCode: string;\r\n}\r\n\r\ninterface eventType {\r\n name: string;\r\n displayName: string;\r\n ticked: boolean;\r\n}\r\n\r\ninterface studentDetails {\r\n name: string;\r\n id: string;\r\n ticked: boolean;\r\n}\r\n\r\ninterface schoolDetails {\r\n name: string;\r\n code: string;\r\n ticked: boolean;\r\n}\r\n\r\nexport class CombinedUpcomingEventsComponent {\r\n combinedUpcomingEvents: StudentEventViewModel[];\r\n eventsByDay: { date: moment.Moment; agenda: StudentEventViewModel[] }[];\r\n userHasDelegatedStudents: boolean;\r\n isMobileApp: boolean;\r\n eventTypes: eventType[] = [\r\n { displayName: \"Exams (E)\", name: \"Exams\", ticked: true },\r\n { displayName: \"Assessments (A)\", name: \"Assessments\", ticked: true },\r\n { displayName: \"Excursions (X)\", name: \"Excursions\", ticked: true },\r\n { displayName: \"School Events (V)\", name: \"School Events\", ticked: true }\r\n ];\r\n students: studentDetails[];\r\n schools: schoolDetails[];\r\n upcomingEventsFeatureTurnedOffForAllStudents: boolean;\r\n studentsWithoutUpcomingEventsFeature: {\r\n name: string;\r\n schoolName: string;\r\n }[];\r\n filter: {\r\n startDate: Date;\r\n endDate: Date;\r\n selectedStudents: studentDetails[];\r\n selectedSchools: schoolDetails[];\r\n selectedEventTypes: eventType[];\r\n };\r\n\r\n constructor(\r\n private dataContext: IDataContext,\r\n private calendarService: ICalendarService,\r\n deviceService: IDeviceService\r\n ) {\r\n \"ngInject\";\r\n this.combinedUpcomingEvents = [];\r\n this.studentsWithoutUpcomingEventsFeature = [];\r\n this.students = [];\r\n this.schools = [];\r\n this.isMobileApp = deviceService.isMobileApp;\r\n\r\n this.dataContext.getData().then(user => {\r\n this.userHasDelegatedStudents = user.delegatedStudents.length > 0;\r\n this.upcomingEventsFeatureTurnedOffForAllStudents = !user.students.some(student => student.features.some(feature => feature.toString() === FEATURES.UPCOMING_EVENTS.toString()));\r\n user.students.forEach(student => {\r\n student.enrolments.forEach(enrolment => {\r\n if (!enrolment.features.some(feature => feature.toString() === FEATURES.UPCOMING_EVENTS)) {\r\n this.studentsWithoutUpcomingEventsFeature.push({ name: student.fullName, schoolName: enrolment.school });\r\n } else {\r\n this.students.findIndex(s => s.id === student.oneSchoolId) === -1 ? this.students.push({ name: student.fullName, id: student.oneSchoolId, ticked: true }) : null;\r\n\r\n this.schools.findIndex(s => s.code === enrolment.schoolCode) === -1 ? this.schools.push({ name: enrolment.school, code: enrolment.schoolCode, ticked: true }) : null;\r\n\r\n this.filter = {\r\n selectedStudents: this.students,\r\n selectedSchools: this.schools,\r\n selectedEventTypes: this.eventTypes,\r\n startDate: null,\r\n endDate: null\r\n };\r\n\r\n enrolment.upcomingEvents.forEach(upcomingEvent =>\r\n this.combinedUpcomingEvents.push({\r\n studentId: student.oneSchoolId,\r\n studentName: student.fullName,\r\n schoolCode: enrolment.schoolCode,\r\n schoolName: enrolment.school,\r\n displayName: upcomingEvent.displayName,\r\n detail: upcomingEvent.detail,\r\n eventType: upcomingEvent.eventType,\r\n startDate: moment(upcomingEvent.startDate).toDate(),\r\n startTime: upcomingEvent.startTime,\r\n endDate: moment(upcomingEvent.endDate).toDate(),\r\n endTime: upcomingEvent.endTime\r\n })\r\n );\r\n }\r\n });\r\n });\r\n\r\n this.filterEvents();\r\n });\r\n\r\n this.filterEvents();\r\n }\r\n\r\n getDayLabel(day) {\r\n return getDayOfWeekLabel(day);\r\n }\r\n\r\n formatDate(date) {\r\n return formatDateToShortMonthDay(date);\r\n }\r\n\r\n getEventTypePrefix(eventType) {\r\n return eventTypePrefixes[eventType];\r\n }\r\n\r\n getEventType(eventType) {\r\n return this.eventTypes[eventType].name;\r\n }\r\n\r\n filterEvents() {\r\n var startDatesOfEvents = this.combinedUpcomingEvents.map(e => moment(e.startDate));\r\n var endDatesOfEvents = this.combinedUpcomingEvents.map(e => moment(e.endDate));\r\n var minStartDateOfEvent = moment.min(startDatesOfEvents);\r\n var startDateFilter = this.filter && this.filter.startDate && moment(this.filter.startDate).isValid() ? moment(this.filter.startDate).startOf(\"day\") : minStartDateOfEvent;\r\n var maxEndDateOfEvent = moment.max(endDatesOfEvents);\r\n var endDateFilter = this.filter && this.filter.endDate && moment(this.filter.endDate).isValid() ? moment(this.filter.endDate).endOf(\"day\") : maxEndDateOfEvent;\r\n\r\n const isBetween = (start: moment.Moment, end: moment.Moment, valueToCheck: Date): boolean => {\r\n if (!valueToCheck || !moment(valueToCheck).isValid()) {\r\n return true;\r\n }\r\n if (!start || (!start.isValid() && !end) || !end.isValid()) {\r\n return true;\r\n }\r\n if (!start || !start.isValid()) {\r\n return moment(valueToCheck).isBefore(end);\r\n } else if (!end || !end.isValid()) {\r\n return moment(valueToCheck).isAfter(start);\r\n }\r\n return moment(valueToCheck).isAfter(start) || moment(valueToCheck).isBefore(end);\r\n };\r\n\r\n var filteredEvents = this.combinedUpcomingEvents.filter(e => {\r\n var dateOverlapsWithDateFilter = isBetween(startDateFilter, endDateFilter, e.startDate) || isBetween(startDateFilter, endDateFilter, e.endDate);\r\n\r\n return (\r\n this.filter.selectedEventTypes.findIndex(selectedEvent => selectedEvent.name === this.getEventType(e.eventType)) > -1 &&\r\n this.filter.selectedSchools.findIndex(selectedSchool => selectedSchool.name === e.schoolName) > -1 &&\r\n this.filter.selectedStudents.findIndex(selectedStudent => selectedStudent.name === e.studentName) > -1 &&\r\n dateOverlapsWithDateFilter\r\n );\r\n });\r\n\r\n var allEventsDateRange = enumerateDaysBetweenDates(minStartDateOfEvent.toDate(), maxEndDateOfEvent.toDate());\r\n var dateRange = allEventsDateRange.filter(\r\n d =>\r\n this.filter &&\r\n startDateFilter &&\r\n startDateFilter.isValid() &&\r\n moment(d).isSameOrAfter(startDateFilter) &&\r\n endDateFilter &&\r\n endDateFilter.isValid() &&\r\n moment(d).isSameOrBefore(endDateFilter)\r\n );\r\n\r\n this.eventsByDay = dateRange\r\n .map(key => {\r\n var items = filteredEvents.filter(e => moment(key).isSameOrAfter(moment(e.startDate).startOf(\"day\")) && moment(key).isSameOrBefore(moment(e.endDate).endOf(\"day\")));\r\n return {\r\n date: moment(key),\r\n agenda: items.sort((a, b) => moment(a.startDate).diff(moment(b.startDate)))\r\n };\r\n })\r\n .filter(e => e.agenda.length > 0);\r\n this.eventsByDay = this.eventsByDay.sort((a, b) => moment(a.date).diff(moment(b.date)));\r\n }\r\n\r\n getTimeLabel(upcomingEvent: StudentEventViewModel) {\r\n return getFormattedTimeRange({ date: upcomingEvent.startDate, time: upcomingEvent.startTime }, { date: upcomingEvent.endDate, time: upcomingEvent.endTime });\r\n }\r\n\r\n loadImage(imagePath: string) {\r\n return require(\"../../../content/img/\" + imagePath);\r\n }\r\n\r\n openEventInCalendar(event: StudentEventViewModel) {\r\n const icsEvent = this.createIcsEvent(event);\r\n\r\n const icsEventBlob = this.calendarService.createIcsFile([icsEvent]);\r\n\r\n if (icsEventBlob) {\r\n this.calendarService.openIcsFile(icsEventBlob);\r\n }\r\n }\r\n\r\n createIcsEvent(event: StudentEventViewModel): ICalendarData {\r\n var studentId = event.studentId;\r\n var centreCode = event.schoolCode;\r\n\r\n return {\r\n id: `${studentId}||${centreCode}||${event.eventType}||${formatDateTimeToIcsDate(event.startDate, event.startTime)}||${formatDateTimeToIcsDate(event.endDate, event.endTime)}`,\r\n startDate: event.startDate,\r\n startTime: event.startTime,\r\n endDate: event.endDate,\r\n endTime: event.endTime,\r\n summary: `${studentId} - ${event.displayName}`,\r\n description: event.detail\r\n };\r\n }\r\n\r\n loadCalendarIcon() {\r\n return require(\"../../../content/icons/calendar-outline.svg\");\r\n }\r\n}\r\n","import { app } from \"../../app.module\";\r\nimport { IDataContext } from \"../../services/dataContext\";\r\nimport { CombinedFinanceRecord } from \"../../models/combinedFinanceRecord\";\r\nimport { PaymentsFilter } from \"../../models/paymentsFilter\";\r\nimport { ADMIN_VIEW_COOKIES, FEATURES } from \"../../configuration\";\r\nimport moment from \"moment\";\r\n\r\nimport \"./combinedPayments.less\";\r\nimport templateUrl from \"./combinedPayments.html\";\r\nimport { IDeviceService } from \"@/app/services/deviceServiceProvider\";\r\nconst controllerId = \"combinedPayments\";\r\n\r\napp.directive(`${controllerId}Component`, () => ({\r\n templateUrl,\r\n controller: CombinedPaymentsComponent,\r\n controllerAs: \"vm\",\r\n restrict: \"E\",\r\n scope: true,\r\n replace: false\r\n}));\r\n\r\nexport class CombinedPaymentsComponent {\r\n userHasDelegatedStudents: boolean;\r\n financeRecordsDue: CombinedFinanceRecord[];\r\n filteredFinanceRecordsDue: CombinedFinanceRecord[];\r\n financeRecordsPaid: CombinedFinanceRecord[];\r\n filteredFinanceRecordsPaid: CombinedFinanceRecord[];\r\n oneSchoolParentId: number;\r\n paymentsFeatureTurnedOffForAllStudents: boolean;\r\n isMobileApp: boolean;\r\n studentsWithoutPaymentFeature: {\r\n name: string;\r\n schoolName: string;\r\n }[];\r\n outstandingPaymentsFilter: PaymentsFilter;\r\n paymentHistoryFilter: PaymentsFilter;\r\n studentListForOutstandingPaymentsFilter: {\r\n studentName: string;\r\n studentId: string;\r\n ticked: boolean;\r\n }[];\r\n schoolListForOutstandingPaymentsFilter: {\r\n schoolCode: string;\r\n schoolName: string;\r\n ticked: boolean;\r\n }[];\r\n studentListForPaymentHistoryFilter: {\r\n studentName: string;\r\n studentId: string;\r\n ticked: boolean;\r\n }[];\r\n schoolListForPaymentHistoryFilter: {\r\n schoolCode: string;\r\n schoolName: string;\r\n ticked: boolean;\r\n }[];\r\n schoolUserId: string;\r\n\r\n constructor(private dataContext: IDataContext, deviceService: IDeviceService) {\r\n \"ngInject\";\r\n this.financeRecordsDue = [];\r\n this.filteredFinanceRecordsDue = [];\r\n this.financeRecordsPaid = [];\r\n this.filteredFinanceRecordsPaid = [];\r\n this.studentsWithoutPaymentFeature = [];\r\n this.schoolListForOutstandingPaymentsFilter = [];\r\n this.schoolListForPaymentHistoryFilter = [];\r\n this.studentListForOutstandingPaymentsFilter = [];\r\n this.studentListForPaymentHistoryFilter = [];\r\n this.isMobileApp = deviceService.isMobileApp;\r\n\r\n this.dataContext.getData().then(user => {\r\n this.userHasDelegatedStudents = user.delegatedStudents.length > 0;\r\n this.oneSchoolParentId = user.oneSchoolParentId;\r\n this.paymentsFeatureTurnedOffForAllStudents = !user.students.some(student => student.features.some(feature => feature.toString() === FEATURES.FINANCE.toString()));\r\n\r\n if (this.dataContext.isAdminView()) {\r\n this.schoolUserId = sessionStorage.getItem(ADMIN_VIEW_COOKIES.SCHOOL_USER_ID);\r\n }\r\n\r\n user.students.forEach(student => {\r\n student.enrolments.forEach(enrolment => {\r\n if (!enrolment.features.some(feature => feature === FEATURES.FINANCE.toString())) {\r\n this.studentsWithoutPaymentFeature.push({ name: student.fullName, schoolName: enrolment.school });\r\n } else {\r\n enrolment.financeRecordsDue.forEach(financeRecordDue => {\r\n var combinedFinanceRecord: CombinedFinanceRecord = {\r\n schoolName: enrolment.school,\r\n bPointPaymentUrl: financeRecordDue.bPointPaymentUrl,\r\n amountOwing: financeRecordDue.amountOwing,\r\n originalAmount: financeRecordDue.originalAmount,\r\n transactionDate: financeRecordDue.transactionDate,\r\n status: financeRecordDue.status,\r\n invoiceNumber: financeRecordDue.invoiceNumber,\r\n paymentRef: financeRecordDue.paymentRef,\r\n dueDate: financeRecordDue.dueDate,\r\n description: financeRecordDue.description,\r\n pdfExists: financeRecordDue.pdfExists,\r\n customerReferenceNumber: financeRecordDue.customerReferenceNumber,\r\n paymentsAreInProgress: financeRecordDue.paymentsAreInProgress,\r\n isInvoice: financeRecordDue.isInvoice,\r\n isPayment: financeRecordDue.isPayment,\r\n pendingPayments: financeRecordDue.pendingPayments,\r\n paymentReceiptNumber: financeRecordDue.paymentReceiptNumber,\r\n typeDescription: financeRecordDue.typeDescription,\r\n studentName: financeRecordDue.studentName,\r\n isSelectedForPayment: financeRecordDue.isSelectedForPayment,\r\n paymentAmount: financeRecordDue.paymentAmount,\r\n paymentAuthToken: financeRecordDue.paymentAuthToken,\r\n merchantNumber: financeRecordDue.merchantNumber,\r\n billerCode: financeRecordDue.billerCode,\r\n schoolCode: enrolment.schoolCode,\r\n studentEqId: student.oneSchoolId\r\n };\r\n this.financeRecordsDue.push(combinedFinanceRecord);\r\n });\r\n\r\n enrolment.financeRecordsPaid.forEach(financeRecordPaid => {\r\n var combinedFinanceRecord: CombinedFinanceRecord = {\r\n schoolName: enrolment.school,\r\n bPointPaymentUrl: financeRecordPaid.bPointPaymentUrl,\r\n amountOwing: financeRecordPaid.amountOwing,\r\n originalAmount: financeRecordPaid.originalAmount,\r\n transactionDate: financeRecordPaid.transactionDate,\r\n status: financeRecordPaid.status,\r\n invoiceNumber: financeRecordPaid.invoiceNumber,\r\n paymentRef: financeRecordPaid.paymentRef,\r\n dueDate: financeRecordPaid.dueDate,\r\n description: financeRecordPaid.description,\r\n pdfExists: financeRecordPaid.pdfExists,\r\n customerReferenceNumber: financeRecordPaid.customerReferenceNumber,\r\n paymentsAreInProgress: financeRecordPaid.paymentsAreInProgress,\r\n isInvoice: financeRecordPaid.isInvoice,\r\n isPayment: financeRecordPaid.isPayment,\r\n pendingPayments: financeRecordPaid.pendingPayments,\r\n paymentReceiptNumber: financeRecordPaid.paymentReceiptNumber,\r\n typeDescription: financeRecordPaid.typeDescription,\r\n studentName: financeRecordPaid.studentName,\r\n isSelectedForPayment: financeRecordPaid.isSelectedForPayment,\r\n paymentAmount: financeRecordPaid.paymentAmount,\r\n paymentAuthToken: financeRecordPaid.paymentAuthToken,\r\n merchantNumber: financeRecordPaid.merchantNumber,\r\n billerCode: financeRecordPaid.billerCode,\r\n schoolCode: enrolment.schoolCode,\r\n studentEqId: student.oneSchoolId\r\n };\r\n this.financeRecordsPaid.push(combinedFinanceRecord);\r\n });\r\n\r\n this.studentListForOutstandingPaymentsFilter.findIndex(s => s.studentId === student.oneSchoolId) === -1\r\n ? this.studentListForOutstandingPaymentsFilter.push({ studentName: student.fullName, studentId: student.oneSchoolId, ticked: true })\r\n : null;\r\n\r\n this.schoolListForOutstandingPaymentsFilter.findIndex(s => s.schoolCode === enrolment.schoolCode) === -1\r\n ? this.schoolListForOutstandingPaymentsFilter.push({ schoolName: enrolment.school, schoolCode: enrolment.schoolCode, ticked: true })\r\n : null;\r\n\r\n this.studentListForPaymentHistoryFilter.findIndex(s => s.studentId === student.oneSchoolId) === -1\r\n ? this.studentListForPaymentHistoryFilter.push({ studentName: student.fullName, studentId: student.oneSchoolId, ticked: true })\r\n : null;\r\n\r\n this.schoolListForPaymentHistoryFilter.findIndex(s => s.schoolCode === enrolment.schoolCode) === -1\r\n ? this.schoolListForPaymentHistoryFilter.push({ schoolName: enrolment.school, schoolCode: enrolment.schoolCode, ticked: true })\r\n : null;\r\n\r\n this.outstandingPaymentsFilter = {\r\n selectedSchools: this.schoolListForOutstandingPaymentsFilter,\r\n selectedStudents: this.studentListForOutstandingPaymentsFilter,\r\n startDate: null,\r\n endDate: null\r\n };\r\n\r\n this.paymentHistoryFilter = {\r\n selectedSchools: this.schoolListForPaymentHistoryFilter,\r\n selectedStudents: this.studentListForPaymentHistoryFilter,\r\n startDate: null,\r\n endDate: null\r\n };\r\n }\r\n });\r\n });\r\n this.filterOutstandingPayments();\r\n this.filterPaymentHistory();\r\n });\r\n }\r\n\r\n toggle(financeRecord: CombinedFinanceRecord & { expanded: boolean }) {\r\n financeRecord.expanded = financeRecord.expanded ? false : true;\r\n }\r\n\r\n filterOutstandingPayments() {\r\n this.filteredFinanceRecordsDue = this.filter(this.financeRecordsDue, this.outstandingPaymentsFilter);\r\n this.filteredFinanceRecordsDue = this.filteredFinanceRecordsDue.sort((a, b) => moment(a.dueDate).diff(moment(b.dueDate)));\r\n }\r\n\r\n filterPaymentHistory() {\r\n this.filteredFinanceRecordsPaid = this.filter(this.financeRecordsPaid, this.paymentHistoryFilter);\r\n this.filteredFinanceRecordsPaid = this.filteredFinanceRecordsPaid.sort((a, b) => moment(a.dueDate).diff(moment(b.dueDate)));\r\n }\r\n\r\n filter(payments: CombinedFinanceRecord[], filter: PaymentsFilter) {\r\n if (!filter) {\r\n return payments;\r\n } else {\r\n return payments.filter(e => {\r\n return (\r\n (filter.selectedSchools.length == 0 || filter.selectedSchools.findIndex(selectedSchool => selectedSchool.schoolCode === e.schoolCode) > -1) &&\r\n (filter.selectedStudents.length == 0 || filter.selectedStudents.findIndex(selectedStudent => selectedStudent.studentId === e.studentEqId) > -1) &&\r\n (filter.startDate && moment(filter.startDate).isValid() ? moment(e.dueDate).isSameOrAfter(filter.startDate) : true) &&\r\n (filter.endDate && moment(filter.endDate).isValid() ? moment(e.dueDate).isSameOrBefore(filter.endDate) : true)\r\n );\r\n });\r\n }\r\n }\r\n}\r\n","import {app} from \"../../app.module\";\r\nimport {ConsentResponseState, consentResponseStateDescription} from \"../../models/enums\";\r\nimport templateUrl from \"./consentRequestSummary.html\";\r\n\r\nexport type ConsentRequest = {\r\n id: string;\r\n studentFullName: string;\r\n title: string;\r\n withdrawnDate: string;\r\n dueDate: string;\r\n responseDate: string;\r\n state: ConsentResponseState;\r\n schoolName: string;\r\n studentId: string;\r\n schoolCode: string;\r\n};\r\n\r\nexport class ConsentRequestSummary {\r\n chipBackgroundColor\r\n stateDescription\r\n state: ConsentResponseState\r\n isPending: boolean\r\n withdrawnDate: string\r\n dueDate: string\r\n responseDate: string\r\n date: string\r\n goToRequest?: () => void\r\n clickable: boolean\r\n\r\n constructor() {\r\n \"ngInject\";\r\n this.update()\r\n }\r\n\r\n $onChanges() {\r\n this.update()\r\n }\r\n\r\n private update() {\r\n this.chipBackgroundColor = getBackgroundColorFromState(this.state)\r\n this.stateDescription = consentResponseStateDescription(this.state)\r\n this.isPending = this.state === ConsentResponseState.Pending\r\n this.date = this.state === ConsentResponseState.Withdrawn\r\n ? this.withdrawnDate\r\n : this.state === ConsentResponseState.Expired || this.state === ConsentResponseState.Pending\r\n ? this.dueDate\r\n : this.responseDate\r\n }\r\n}\r\n\r\n\r\nconst controllerId = \"consentRequestSummary\"\r\napp.component(`${controllerId}Component`, {\r\n templateUrl,\r\n controller: ConsentRequestSummary,\r\n controllerAs: \"vm\",\r\n bindings: {\r\n id: '@',\r\n studentName: \"@\",\r\n schoolName: \"@\",\r\n requestTitle: \"@\",\r\n withdrawnDate: \"<\",\r\n dueDate: \"<\",\r\n responseDate: \"<\",\r\n state: \"<\",\r\n goToRequest: \"&\",\r\n clickable: \"<\"\r\n }\r\n});\r\n\r\nexport const getBackgroundColorFromState = (state: ConsentResponseState) => {\r\n switch (state) {\r\n case ConsentResponseState.Pending:\r\n return \"pending\";\r\n case ConsentResponseState.Granted:\r\n return \"granted\";\r\n case ConsentResponseState.Denied:\r\n return \"denied\";\r\n case ConsentResponseState.Mixed:\r\n return \"mixed\";\r\n case ConsentResponseState.Expired:\r\n return \"expired\";\r\n case ConsentResponseState.Withdrawn:\r\n return \"withdrawn\";\r\n }\r\n}\r\n","import {app} from \"../../app.module\";\r\nimport {ConsentRequest} from \"../consentRequestSummary/consentRequestSummary\";\r\nimport \"../consentRequestSummary/consentRequestSummary\"\r\nimport templateUrl from \"./consentRequestList.html\";\r\nimport ng from \"angular\"\r\n\r\nexport class ConsentRequestList {\r\n requests: ConsentRequest[]\r\n type: 'Pending' | 'History'\r\n\r\n constructor(private $location: ng.ILocationService) {\r\n \"ngInject\";\r\n }\r\n\r\n viewConsentRequest(request: ConsentRequest) {\r\n const path = `/consent-request/${request.studentId}/${request.id}/${request.schoolCode}`;\r\n this.$location.path(path);\r\n }\r\n}\r\n\r\nconst controllerId = \"consentRequestList\"\r\napp.component(`${controllerId}Component`, {\r\n templateUrl,\r\n controller: ConsentRequestList,\r\n controllerAs: \"vm\",\r\n bindings: {\r\n requests: '<',\r\n type: '@'\r\n }\r\n});\r\n","import { app } from \"../../app.module\";\r\nimport { IDataContext } from \"../../services/dataContext\";\r\nimport \"../../consent/consentRequestSummary/consentRequestSummary\";\r\nimport \"../../consent/consentRequestList/consentRequestList\";\r\nimport { ConsentResponseState } from \"../../models/enums\";\r\nimport { ConsentRequest } from \"../../consent/consentRequestSummary/consentRequestSummary\";\r\nimport moment from \"moment\";\r\nimport { ConsentService } from \"@/app/services/consentService\";\r\nimport templateUrl from \"./combinedConsentRequests.html\";\r\nimport { IDeviceService } from \"@/app/services/deviceServiceProvider\";\r\nimport { FEATURES } from \"../../configuration\";\r\n\r\nconst controllerId = \"combinedConsentRequests\";\r\n\r\napp.directive(`${controllerId}Component`, () => ({\r\n templateUrl,\r\n controller: CombinedConsentRequestsComponent,\r\n controllerAs: \"vm\",\r\n restrict: \"E\",\r\n scope: true,\r\n replace: false\r\n}));\r\n\r\ninterface studentDetails {\r\n name: string;\r\n id: string;\r\n ticked: boolean;\r\n}\r\n\r\nexport class CombinedConsentRequestsComponent {\r\n allRequests: ConsentRequest[];\r\n pendingRequests: ConsentRequest[];\r\n pastRequests: ConsentRequest[];\r\n consentFeatureTurnedOffForAllStudents: boolean;\r\n students: studentDetails[];\r\n filter: {\r\n selectedStudents: studentDetails[];\r\n };\r\n consentLoadedSuccessfully: boolean;\r\n consentLoading: boolean;\r\n isMobileApp: boolean;\r\n\r\n constructor(private dataContext: IDataContext, private $location: ng.ILocationService, private consentService: ConsentService, deviceService: IDeviceService) {\r\n \"ngInject\";\r\n this.isMobileApp = deviceService.isMobileApp;\r\n this.dataContext.getData().then(user => {\r\n this.consentFeatureTurnedOffForAllStudents = !user.students.some(student => student.isFeatureAvailable(FEATURES.CONSENT_REQUESTS));\r\n\r\n this.students = user.students\r\n .filter(s => s.isFeatureAvailable(FEATURES.CONSENT_REQUESTS))\r\n .map(s => ({\r\n name: s.fullName,\r\n id: s.oneSchoolId,\r\n ticked: true\r\n }));\r\n this.filter = { selectedStudents: [...this.students] };\r\n\r\n this.consentLoading = true;\r\n this.consentService\r\n .getConsentRequestSummary(user)\r\n .then(summary => {\r\n this.consentLoadedSuccessfully = summary.loadedSuccessfully;\r\n this.allRequests = summary.consentRequests\r\n .map(\r\n r =>\r\n ({\r\n id: r.id,\r\n title: r.title,\r\n state: r.state,\r\n withdrawnDate: r.withdrawnDate,\r\n dueDate: r.dueDate,\r\n responseDate: r.responseDate,\r\n schoolName: user.schools.filter(s => s.id === r.schoolCode)[0].name,\r\n studentFullName: user.students.find(s => s.oneSchoolId === r.eqId).fullName,\r\n studentId: r.eqId,\r\n schoolCode: user.schools.filter(s => s.id === r.schoolCode)[0].id\r\n } as ConsentRequest)\r\n )\r\n .sort(sortRequests);\r\n this.filterRequests();\r\n })\r\n .catch(e => {\r\n this.consentLoadedSuccessfully = false;\r\n })\r\n .finally(() => {\r\n this.consentLoading = false;\r\n });\r\n });\r\n }\r\n\r\n filterRequests() {\r\n this.pendingRequests = this.allRequests.filter(r => r.state === ConsentResponseState.Pending).filter(r => this.filter.selectedStudents.some(s => s.id === r.studentId));\r\n this.pastRequests = this.allRequests.filter(r => r.state !== ConsentResponseState.Pending).filter(r => this.filter.selectedStudents.some(s => s.id === r.studentId));\r\n }\r\n\r\n viewConsentRequest(request: ConsentRequest) {\r\n const path = `/consent-request/${request.studentId}/${request.id}/${request.schoolCode}`;\r\n this.$location.path(path);\r\n }\r\n}\r\n\r\nconst sortRequests = (a: ConsentRequest, b: ConsentRequest): number => {\r\n const aDate = getDate(a);\r\n const bDate = getDate(b);\r\n return aDate > bDate ? -1 : aDate < bDate ? 1 : 0;\r\n};\r\n\r\nconst getDate = (request: ConsentRequest) => {\r\n if (request.withdrawnDate !== null && request.withdrawnDate !== undefined && request.withdrawnDate !== \"\") return moment(request.withdrawnDate);\r\n\r\n if (request.responseDate !== null && request.responseDate !== undefined && request.responseDate !== \"\") return moment(request.responseDate);\r\n\r\n return moment(request.dueDate);\r\n};\r\n","import angular, { IQService } from \"angular\";\r\nimport { app } from \"./app.module\";\r\nimport { ICheckerService } from \"./tools/outageChecker\";\r\n\r\nimport \"./accessibility/accessibility\";\r\nimport \"./addStudent/addStudent\";\r\n\r\nimport \"./alert/alert\";\r\n\r\nimport \"./attendance/attendance\";\r\nimport \"./attendance/reportAbsence\";\r\nimport \"./attendance/reportReason\";\r\nimport \"./behaviour/behaviour\";\r\n\r\nimport \"./enrolmentHistory/enrolmentHistory\";\r\nimport \"./error/error\";\r\nimport \"./featureUnavailable/featureUnavailable\";\r\n\r\nimport \"./home\";\r\nimport \"./landingPage\";\r\nimport \"./login/login\";\r\nimport \"./login/forgotPassword/forgotPassword\";\r\nimport \"./login/forgotPassword/changeForgottenPassword\";\r\nimport \"./login/forgotPassword/confirmResetPassword\";\r\n\r\nimport \"./outage/outage\";\r\n\r\nimport \"./payment/payment\";\r\nimport \"./payment/processPayment\";\r\nimport \"./photo/schoolPhoto\";\r\nimport \"./photo/upload\";\r\n\r\nimport \"./privacy/privacy\";\r\nimport \"./profile/profile\";\r\nimport \"./profile/changePassword\";\r\nimport \"./profile/email\";\r\nimport \"./profile/mobile\";\r\nimport \"./profile/other\";\r\nimport \"./registration\";\r\nimport \"./reports/reports\";\r\nimport \"./reports/archive\";\r\nimport \"./consent/consent\";\r\nimport \"./consent/request\";\r\nimport \"./consent/responseSubmitted\";\r\nimport \"./student/student\";\r\nimport \"./student/studentPhoto\";\r\nimport \"./studentDetails/studentDetails\";\r\nimport \"./studentDetails/studentMedicalConditions\";\r\nimport \"./studentNotFound/studentNotFound\";\r\nimport \"./termsAndConditions/termsAndConditions\";\r\nimport \"./timetable/timetable\";\r\nimport \"./update/update\";\r\nimport \"./viewer/addViewer\";\r\nimport \"./viewer/viewer\";\r\n\r\nimport \"./admin-view/admin-view-logout\";\r\nimport \"./admin-view/admin-view-context-error\";\r\nimport \"./admin-view/admin-view-inactive-error\";\r\n\r\nimport \"./attendance/reportMultipleAbsences/reportMultipleAbsences\";\r\nimport \"./parentCentric/combinedUpcomingEvents/combinedUpcomingEvents\";\r\nimport \"./parentCentric/combinedPayments/combinedPayments\";\r\nimport \"./parentCentric/combinedConsentRequests/combinedConsentRequests\";\r\n\r\n// Collect the routes\r\napp.constant(\"routes\", getRoutes());\r\n\r\napp.factory(\"appInit\", appInitFactory);\r\nfunction appInitFactory($q: IQService) {\r\n \"ngInject\";\r\n return $q.defer();\r\n}\r\n\r\n// Configure the routes and route resolvers\r\napp.config(routeConfigurator);\r\n\r\nfunction routeConfigurator($routeProvider: angular.route.IRouteProvider, routes: IRoute[]) {\r\n \"ngInject\";\r\n routes.forEach(function (r) {\r\n $routeProvider.when(r.url, extend(r.config));\r\n });\r\n $routeProvider.otherwise({ redirectTo: \"/\" });\r\n\r\n function extend(routeConfig: IRouteConfig) {\r\n let resolve = routeConfig.resolve || {};\r\n resolve = angular.extend(resolve, {\r\n init: [\r\n \"appInit\",\r\n function (appInit) {\r\n return appInit.promise;\r\n }\r\n ]\r\n });\r\n resolve = angular.extend(resolve, {\r\n __outageChecker: [\r\n \"outageChecker\",\r\n \"appInit\",\r\n function (outageChecker: ICheckerService, appInit) {\r\n appInit.promise.then(function () {\r\n outageChecker.check(routeConfig.modules, \"outage\");\r\n });\r\n }\r\n ],\r\n\r\n __systemAlertChecker: [\r\n \"systemAlertChecker\",\r\n \"appInit\",\r\n function (systemAlertChecker: ICheckerService, appInit) {\r\n appInit.promise.then(function () {\r\n systemAlertChecker.check(routeConfig.modules, \"alert\");\r\n });\r\n }\r\n ]\r\n });\r\n\r\n routeConfig.resolve = resolve;\r\n\r\n return routeConfig;\r\n }\r\n}\r\n\r\nexport interface IRoute {\r\n url: string;\r\n config: IRouteConfig;\r\n}\r\nexport interface IRouteConfig {\r\n key: string;\r\n template: string;\r\n title: string;\r\n isAnonymous?: boolean;\r\n resolve?: any;\r\n hideHeader?: boolean;\r\n controller?: string | ((...args: any[]) => any);\r\n controllerAs?: string;\r\n modules?: OutageModules[];\r\n params?: any;\r\n}\r\n\r\nexport type OutageModules = \"System\" | \"Student\" | \"Timetable\" | \"Attendance\" | \"Behaviour\" | \"Payments\" | \"Reports\" | \"EnrolmentHistory\";\r\n\r\n// Define the routes\r\nfunction getRoutes(): IRoute[] {\r\n return [\r\n {\r\n url: \"/\",\r\n config: {\r\n key: \"home\",\r\n template: \"\",\r\n title: \"QParents\",\r\n modules: [\"System\"],\r\n resolve: {\r\n checkForRedirectsBeforeLoadingView: function (homeInitialise) {\r\n \"ngInject\";\r\n return homeInitialise();\r\n }\r\n }\r\n }\r\n },\r\n {\r\n url: \"/landing\",\r\n config: {\r\n key: \"landing\",\r\n template: \"\",\r\n title: \"Landing Page\",\r\n isAnonymous: true,\r\n modules: [\"System\"]\r\n }\r\n },\r\n {\r\n url: \"/login\",\r\n config: {\r\n key: \"login\",\r\n template: \"\",\r\n title: \"Login\",\r\n isAnonymous: true,\r\n modules: [\"System\"]\r\n }\r\n },\r\n {\r\n url: \"/login/forgotPassword\",\r\n config: {\r\n key: \"forgotPassword\",\r\n template: \"\",\r\n title: \"Forgotten Password\",\r\n isAnonymous: true,\r\n modules: [\"System\"]\r\n }\r\n },\r\n {\r\n url: \"/login/changeForgottenPassword\",\r\n config: {\r\n key: \"changeForgottenPassword\",\r\n template: \"\",\r\n title: \"Change Forgotten Password\",\r\n isAnonymous: true,\r\n modules: [\"System\"]\r\n }\r\n },\r\n {\r\n url: \"/login/confirmResetPassword\",\r\n config: {\r\n key: \"confirmResetPassword\",\r\n template: \"\",\r\n title: \"Reset Password\",\r\n isAnonymous: true,\r\n modules: [\"System\"]\r\n }\r\n },\r\n {\r\n url: \"/profile\",\r\n config: {\r\n key: \"profile\",\r\n template: \"\",\r\n title: \"My Profile\",\r\n modules: [\"System\"]\r\n }\r\n },\r\n {\r\n url: \"/profile/other\",\r\n config: {\r\n key: \"profile-other\",\r\n template: \"\",\r\n title: \"My Profile - Edit Other\",\r\n modules: [\"System\"]\r\n }\r\n },\r\n {\r\n url: \"/profile/mobile\",\r\n config: {\r\n key: \"profile-mobile\",\r\n template: \"\",\r\n title: \"My Profile - Edit mobile number\",\r\n modules: [\"System\"]\r\n }\r\n },\r\n {\r\n url: \"/profile/email\",\r\n config: {\r\n key: \"profile-email\",\r\n template: \"\",\r\n title: \"My Profile - Edit email address\",\r\n modules: [\"System\"]\r\n }\r\n },\r\n {\r\n url: \"/profile/password\",\r\n config: {\r\n key: \"profile-password\",\r\n template: \"\",\r\n title: \"My Profile - Change password\",\r\n modules: [\"System\"]\r\n }\r\n },\r\n {\r\n url: \"/student/:studentId/:centreCode\",\r\n config: {\r\n key: \"student\",\r\n template: \"\",\r\n title: \"Student\",\r\n modules: [\"System\", \"Student\"]\r\n }\r\n },\r\n {\r\n url: \"/addStudent\",\r\n config: {\r\n key: \"addStudent\",\r\n template: \"\",\r\n title: \"Add Student\",\r\n modules: [\"System\", \"Student\"]\r\n }\r\n },\r\n {\r\n url: \"/enrolmentHistory/:studentId/:centreCode\",\r\n config: {\r\n key: \"enrolmentHistory\",\r\n template: \"\",\r\n title: \"Enrolment History\",\r\n modules: [\"System\", \"Student\", \"EnrolmentHistory\"]\r\n }\r\n },\r\n {\r\n url: \"/consent/:studentId/:centreCode\",\r\n config: {\r\n key: \"consentRequests\",\r\n template: \"\",\r\n title: \"Consent Requests\",\r\n modules: [\"System\", \"Student\"]\r\n }\r\n },\r\n {\r\n url: \"/consent-request/:studentId/:requestId/:centreCode\",\r\n config: {\r\n key: \"consentRequest\",\r\n template: \"\",\r\n title: \"Consent Request\",\r\n modules: [\"System\", \"Student\"]\r\n }\r\n },\r\n {\r\n url: \"/consent-request/:studentId/:requestId/:centreCode/submitted\",\r\n config: {\r\n key: \"consentResponseSubmitted\",\r\n template: \"\",\r\n title: \"Consent Response Submitted\",\r\n modules: [\"System\", \"Student\"]\r\n }\r\n },\r\n {\r\n url: \"/attendance/:studentId/:centreCode\",\r\n config: {\r\n key: \"attendance\",\r\n template: \"\",\r\n title: \"Attendance\",\r\n modules: [\"System\", \"Student\", \"Attendance\"]\r\n }\r\n },\r\n {\r\n url: \"/attendance/:studentId/:centreCode/report-absence\",\r\n config: {\r\n key: \"reportAbsence\",\r\n template: \"\",\r\n title: \"Report Absence\",\r\n modules: [\"System\", \"Student\", \"Attendance\"]\r\n }\r\n },\r\n {\r\n url: \"/attendance/:studentId/:centreCode/report-reason/:absenceId\",\r\n config: {\r\n key: \"attendance-report-reason\",\r\n template: \"\",\r\n title: \"Attendance - Submit Reason\",\r\n modules: [\"System\", \"Student\", \"Attendance\"]\r\n }\r\n },\r\n {\r\n url: \"/addViewer/:studentId/:centreCode\",\r\n config: {\r\n key: \"addViewer\",\r\n template: \"\",\r\n title: \"Add Viewer\",\r\n modules: [\"System\", \"Student\"]\r\n }\r\n },\r\n {\r\n url: \"/viewer/:viewerId/:studentId/:centreCode\",\r\n config: {\r\n key: \"viewer\",\r\n template: \"\",\r\n title: \"Viewer\",\r\n modules: [\"System\", \"Student\"]\r\n }\r\n },\r\n {\r\n url: \"/featureUnavailable\",\r\n config: {\r\n key: \"featureUnavailable\",\r\n template: \"\",\r\n title: \"Feature Unavailable\"\r\n }\r\n },\r\n {\r\n url: \"/studentDetails/:studentId/:centreCode\",\r\n config: {\r\n key: \"studentDetails\",\r\n template: \"\",\r\n title: \"Student Details\",\r\n modules: [\"System\", \"Student\"]\r\n }\r\n },\r\n {\r\n url: \"/studentPhoto/:studentId/:centreCode\",\r\n config: {\r\n key: \"studentPhoto\",\r\n template: \"\",\r\n title: \"Student Photo\",\r\n modules: [\"System\", \"Student\"]\r\n }\r\n },\r\n {\r\n url: \"/studentPhoto/school/:studentId/:centreCode\",\r\n config: {\r\n key: \"student-photo-school\",\r\n template: \"\",\r\n title: \"Student Photo\",\r\n modules: [\"System\", \"Student\"]\r\n }\r\n },\r\n {\r\n url: \"/studentPhoto/upload/:studentId/:centreCode\",\r\n config: {\r\n key: \"student-photo-upload\",\r\n template: \"\",\r\n title: \"Upload Photo\",\r\n modules: [\"System\", \"Student\"]\r\n }\r\n },\r\n {\r\n url: \"/behaviour/:studentId/:centreCode\",\r\n config: {\r\n key: \"behaviour\",\r\n template: \"\",\r\n title: \"Behaviour Reports\",\r\n modules: [\"System\", \"Student\", \"Behaviour\"]\r\n }\r\n },\r\n {\r\n url: \"/payment/:studentId/:centreCode\",\r\n config: {\r\n key: \"payment\",\r\n template: \"\",\r\n title: \"Payments\",\r\n modules: [\"System\", \"Student\", \"Payments\"]\r\n }\r\n },\r\n {\r\n url: \"/payment/process/:studentId/:centreCode\",\r\n config: {\r\n key: \"payment\",\r\n template: \"\",\r\n title: \"Process payment\",\r\n modules: [\"System\", \"Student\", \"Payments\"]\r\n }\r\n },\r\n {\r\n url: \"/studentMedicalConditions/:studentId/:centreCode\",\r\n config: {\r\n key: \"studentMedicalConditions\",\r\n template: \"\",\r\n title: \"Student Medical Conditions\",\r\n modules: [\"System\", \"Student\"]\r\n }\r\n },\r\n {\r\n url: \"/studentNotFound\",\r\n config: {\r\n key: \"studentNotFound\",\r\n template: \"\",\r\n title: \"Student not found\"\r\n }\r\n },\r\n {\r\n url: \"/timetable/:studentId/:centreCode\",\r\n config: {\r\n key: \"timetable\",\r\n template: \"\",\r\n title: \"Timetable\",\r\n modules: [\"System\", \"Student\", \"Timetable\"]\r\n }\r\n },\r\n {\r\n url: \"/reports/:studentId/:centreCode\",\r\n config: {\r\n key: \"reports\",\r\n template: \"\",\r\n title: \"Academic Reports\",\r\n modules: [\"System\", \"Student\", \"Reports\"]\r\n }\r\n },\r\n {\r\n url: \"/reports-archive/:studentId/:centreCode\",\r\n config: {\r\n key: \"reports-archive\",\r\n template: \"\",\r\n title: \"Academic Reports Archive\",\r\n modules: [\"System\", \"Student\", \"Reports\"]\r\n }\r\n },\r\n {\r\n url: \"/error\",\r\n config: {\r\n key: \"error\",\r\n template: \"\",\r\n title: \"Error\",\r\n isAnonymous: true\r\n }\r\n },\r\n {\r\n url: \"/termsAndConditions\",\r\n config: {\r\n key: \"temsAndConditions\",\r\n template: \"\",\r\n title: \"Terms and Conditions\",\r\n hideHeader: true,\r\n modules: [\"System\"]\r\n }\r\n },\r\n {\r\n url: \"/accessibility\",\r\n config: {\r\n key: \"accessibility\",\r\n template: \"\",\r\n title: \"Accessibility\",\r\n isAnonymous: true\r\n }\r\n },\r\n {\r\n url: \"/privacy\",\r\n config: {\r\n key: \"privacy\",\r\n template: \"\",\r\n title: \"privacy\",\r\n isAnonymous: true\r\n }\r\n },\r\n {\r\n url: \"/registration/account-owner/invitation/:code?\",\r\n config: {\r\n key: \"registration-account-owner-invitation-with-code\",\r\n template: \"\",\r\n title: \"Enter your invitation code\",\r\n isAnonymous: true,\r\n modules: [\"System\"]\r\n }\r\n },\r\n {\r\n url: \"/registration/account-owner/verify\",\r\n config: {\r\n key: \"registration-account-owner-verify\",\r\n template: \"\",\r\n title: \"Verify your identity\",\r\n isAnonymous: true,\r\n controller: \"accountOwnerVerify\",\r\n controllerAs: \"vm\",\r\n modules: [\"System\"],\r\n resolve: {\r\n dvsContext: function (accountOwnerVerifyInitialise) {\r\n \"ngInject\";\r\n return accountOwnerVerifyInitialise();\r\n }\r\n }\r\n }\r\n },\r\n {\r\n url: \"/registration/account-owner/register\",\r\n config: {\r\n key: \"registration-account-owner-register\",\r\n template: \"\",\r\n title: \"Register\",\r\n isAnonymous: true,\r\n controller: \"accountOwnerRegister\",\r\n controllerAs: \"vm\",\r\n modules: [\"System\"],\r\n resolve: {\r\n registrationContext: function (accountOwnerRegisterInitialise) {\r\n \"ngInject\";\r\n return accountOwnerRegisterInitialise();\r\n }\r\n }\r\n }\r\n },\r\n {\r\n url: \"/registration/delegated-viewer/invitation/:code\",\r\n config: {\r\n key: \"registration-delegated-viewer-invitation\",\r\n template: \"\",\r\n title: \"Invitation\",\r\n isAnonymous: true,\r\n controller: \"delegatedViewerInvitation\",\r\n controllerAs: \"vm\",\r\n modules: [\"System\"],\r\n resolve: {\r\n invitationContext: function (delegatedViewerInvitationInitialise) {\r\n \"ngInject\";\r\n return delegatedViewerInvitationInitialise();\r\n }\r\n }\r\n }\r\n },\r\n {\r\n url: \"/registration/delegated-viewer/verify\",\r\n config: {\r\n key: \"registration-delegated-viewer-verify\",\r\n template: \"\",\r\n title: \"Invitation\",\r\n modules: [\"System\"],\r\n isAnonymous: true\r\n }\r\n },\r\n {\r\n url: \"/registration/delegated-viewer/register\",\r\n config: {\r\n key: \"registration-delegated-viewer-register\",\r\n template: \"\",\r\n title: \"Register\",\r\n modules: [\"System\"],\r\n isAnonymous: true\r\n }\r\n },\r\n {\r\n url: \"/update/:versionInfo\",\r\n config: {\r\n key: \"update\",\r\n template: \"\",\r\n title: \"Update\",\r\n isAnonymous: true\r\n }\r\n },\r\n {\r\n url: \"/outage\",\r\n config: {\r\n key: \"outage\",\r\n template: \"\",\r\n title: \"Outage\",\r\n isAnonymous: true\r\n }\r\n },\r\n {\r\n url: \"/notice\",\r\n config: {\r\n key: \"notice\",\r\n template: \"\",\r\n title: \"Notice\",\r\n isAnonymous: true\r\n }\r\n },\r\n {\r\n url: \"/admin-view/logout\",\r\n config: {\r\n key: \"admin-view-logout\",\r\n template: \"\",\r\n title: \"Logout\",\r\n isAnonymous: true,\r\n modules: [\"System\"]\r\n }\r\n },\r\n {\r\n url: \"/admin-view/context-error\",\r\n config: {\r\n key: \"admin-view-context-error\",\r\n template: \"\",\r\n title: \"Error\",\r\n isAnonymous: true\r\n }\r\n },\r\n {\r\n url: \"/admin-view/inactive-error\",\r\n config: {\r\n key: \"admin-view-inactive-error\",\r\n template: \"\",\r\n title: \"Error\",\r\n isAnonymous: true\r\n }\r\n },\r\n {\r\n url: \"/attendance/report-absences\",\r\n config: {\r\n key: \"reportMultipleAbsences\",\r\n template: \"\",\r\n title: \"Report Multiple Absences\",\r\n modules: [\"System\", \"Student\", \"Attendance\"]\r\n }\r\n },\r\n {\r\n url: \"/combined-upcoming-events\",\r\n config: {\r\n key: \"combinedUpcomingEvents\",\r\n template: \"\",\r\n title: \"Combined Upcoming Events\",\r\n modules: [\"System\", \"Student\"]\r\n }\r\n },\r\n {\r\n url: \"/parent-centric/combined-consent-requests\",\r\n config: {\r\n key: \"combinedConsentRequests\",\r\n template: \"\",\r\n title: \"Combined Consent Requests\",\r\n modules: [\"System\", \"Student\"]\r\n }\r\n },\r\n {\r\n url: \"/parent-centric/combined-payments\",\r\n config: {\r\n key: \"combinedPayments\",\r\n template: \"\",\r\n title: \"Combined Payments\",\r\n modules: [\"System\", \"Student\"]\r\n }\r\n }\r\n ];\r\n}\r\n","import { app as services } from \"../app.module\";\r\nimport angular, { IPromise } from \"angular\";\r\nimport { v4 as uuidv4 } from \"uuid\";\r\n\r\n// Must configure the common service and set its\r\n// events via the commonConfigProvider\r\nclass CommonConfigProvider {\r\n config: any;\r\n\r\n constructor() {\r\n this.config = {\r\n // These are the properties we need to set\r\n //controllerActivatedEvent: '',\r\n //spinnerToggleEvent: ''\r\n };\r\n }\r\n\r\n $get() {\r\n return {\r\n config: this.config\r\n };\r\n }\r\n}\r\n\r\nexport function guid() {\r\n return uuidv4();\r\n}\r\n\r\nservices.provider(\"commonConfig\", CommonConfigProvider);\r\n\r\nservices.factory(\"common\", common);\r\n\r\nexport interface ICommonService {\r\n activateController(promises: IPromise[], controllerId: string): IPromise;\r\n broadcast(name: string, ...args: any[]): void;\r\n}\r\n\r\nexport function common($q: angular.IQService, $rootScope: angular.IRootScopeService, commonConfig: CommonConfigProvider): ICommonService {\r\n \"ngInject\";\r\n return {\r\n activateController: activateController,\r\n broadcast: $broadcast\r\n };\r\n\r\n function activateController(promises, controllerId) {\r\n var data = { controllerId: controllerId };\r\n $broadcast(commonConfig.config.controllerActivatingEvent, data);\r\n return $q.all(promises).then(function (eventArgs) {\r\n $broadcast(commonConfig.config.controllerActivatedEvent, data);\r\n });\r\n }\r\n\r\n function $broadcast(name: string, ...args: any[]) {\r\n return $rootScope.$broadcast.apply($rootScope, [name, ...args]);\r\n }\r\n}\r\n","// import * as _ from 'underscore';\r\nimport { app } from \"./app.module\";\r\nimport \"./services/common\";\r\nimport { ENABLE_CONSOLE_LOGGING } from \"./configuration\";\r\nimport { ILocationProvider, ILogProvider } from \"angular\";\r\n\r\napp.config([\r\n \"commonConfigProvider\",\r\n function (cfg) {\r\n cfg.config.controllerActivatedEvent = \"app.controller-activated\";\r\n cfg.config.controllerActivatingEvent = \"app.controller-activating\";\r\n }\r\n]);\r\n\r\napp.config([\r\n \"$logProvider\",\r\n function ($logProvider: ILogProvider) {\r\n \"ngInject\";\r\n $logProvider.debugEnabled(ENABLE_CONSOLE_LOGGING);\r\n }\r\n]);\r\n\r\napp.config([\r\n \"cfpLoadingBarProvider\",\r\n function (cfpLoadingBarProvider) {\r\n cfpLoadingBarProvider.includeSpinner = false;\r\n }\r\n]);\r\n\r\napp.config([\r\n \"$locationProvider\",\r\n function ($locationProvider: ILocationProvider) {\r\n \"ngInject\";\r\n\r\n // Set the hash prefix (e.g., for older browsers)\r\n $locationProvider.hashPrefix(\"\");\r\n }\r\n]);\r\n// register underscore as a factory (assumes underscore has already been loaded on the page)\r\n// app.constant('_', _ );\r\n","import { Preferences } from \"@capacitor/preferences\";\r\nimport { app } from \"../app.module\";\r\n\r\nvar serviceId = \"preferencesService\";\r\n\r\nexport interface IPreferencesService {\r\n getIsCredentialSaved(): Promise;\r\n getIsCredentialPrompted(): Promise;\r\n\r\n setIsCredentialSaved(value: boolean): Promise;\r\n setIsCredentialPrompted(value: boolean): Promise;\r\n}\r\nexport class PreferencesService implements IPreferencesService {\r\n isCredentialSavedKey = \"isCredentialsSaved\";\r\n isCredentialPromptedKey = \"isCredentialsPrompted\";\r\n\r\n public getIsCredentialSaved() {\r\n return Preferences.get({ key: this.isCredentialSavedKey }).then(result => {\r\n return result?.value === \"true\" ? true : false;\r\n });\r\n }\r\n\r\n public setIsCredentialSaved(value: boolean) {\r\n return Preferences.set({ key: this.isCredentialSavedKey, value: value ? \"true\" : \"false\" });\r\n }\r\n\r\n public getIsCredentialPrompted() {\r\n return Preferences.get({ key: this.isCredentialPromptedKey }).then(result => {\r\n return result?.value === \"true\" ? true : false;\r\n });\r\n }\r\n\r\n public setIsCredentialPrompted(value: boolean) {\r\n return Preferences.set({ key: this.isCredentialPromptedKey, value: value ? \"true\" : \"false\" });\r\n }\r\n}\r\n\r\napp.service(serviceId, PreferencesService);\r\n","import angular, { IPromise, IQService } from \"angular\";\r\nimport { App, AppInfo } from \"@capacitor/app\";\r\nimport { app as services } from \"../app.module\";\r\nimport { Capacitor } from \"@capacitor/core\";\r\nimport { Device, DeviceId, DeviceInfo } from \"@capacitor/device\";\r\n\r\nconst serviceId = \"deviceService\";\r\n\r\nexport interface IDeviceService {\r\n getDeviceId: () => IPromise;\r\n getDeviceInfo: () => IPromise;\r\n getAppInfo: () => IPromise;\r\n getPlatform: () => \"android\" | \"ios\" | \"web\" | null;\r\n isIOs: () => boolean;\r\n isAndroid: () => boolean;\r\n isMobileApp: boolean;\r\n}\r\n\r\nclass DeviceServiceProvider implements angular.IServiceProvider {\r\n public $get = [\r\n \"$q\",\r\n ($q: angular.IQService): IDeviceService => {\r\n return new DeviceService($q);\r\n }\r\n ];\r\n}\r\n\r\nclass DeviceService implements IDeviceService {\r\n _deviceId: DeviceId;\r\n _deviceInfo: DeviceInfo;\r\n _appInfo: AppInfo;\r\n\r\n constructor(private $q: IQService) {}\r\n\r\n public getDeviceId() {\r\n const deferred = this.$q.defer();\r\n\r\n if (!this._deviceId) {\r\n this.$q.when(Device.getId()).then(device => {\r\n this._deviceId = device;\r\n deferred.resolve(device.identifier);\r\n });\r\n } else {\r\n deferred.resolve(this._deviceId.identifier);\r\n }\r\n\r\n return deferred.promise;\r\n }\r\n\r\n public getDeviceInfo() {\r\n const deferred = this.$q.defer();\r\n\r\n if (!this._deviceInfo) {\r\n this.$q.when(Device.getInfo()).then(deviceInfo => {\r\n this._deviceInfo = deviceInfo;\r\n deferred.resolve(deviceInfo);\r\n });\r\n } else {\r\n deferred.resolve(this._deviceInfo);\r\n }\r\n return deferred.promise;\r\n }\r\n\r\n public getAppInfo() {\r\n const deferred = this.$q.defer();\r\n\r\n if (this.isMobileApp) {\r\n this.$q.when(App.getInfo()).then(appInfo => {\r\n this._appInfo = appInfo;\r\n deferred.resolve(appInfo);\r\n });\r\n } else {\r\n deferred.resolve({\r\n name: \"QParents\",\r\n id: \"\",\r\n build: \"\",\r\n version: \"Web\"\r\n });\r\n }\r\n\r\n return deferred.promise;\r\n }\r\n\r\n public getPlatform(): \"android\" | \"ios\" | \"web\" {\r\n const platform = Capacitor.getPlatform();\r\n if (platform === \"android\" || platform === \"ios\") {\r\n return platform;\r\n }\r\n\r\n return \"web\";\r\n }\r\n\r\n public isIOs(): boolean {\r\n return this.getPlatform() == \"ios\";\r\n }\r\n\r\n public isAndroid(): boolean {\r\n return this.getPlatform() == \"android\";\r\n }\r\n\r\n public get isMobileApp() {\r\n return this.isIOs() || this.isAndroid();\r\n }\r\n}\r\n\r\nservices.provider(serviceId, DeviceServiceProvider);\r\n","import angular, { IHttpResponse, ILogService } from \"angular\";\r\nimport { app } from \"../app.module\";\r\nimport { IDeviceService } from \"./deviceServiceProvider\";\r\nimport { getHttpHeaders } from \"../config.http\";\r\nimport { CapacitorHttp, HttpOptions, HttpResponse, HttpResponseType } from \"@capacitor/core\";\r\nimport { IUrlResolver } from \"./urlResolver\";\r\nimport { v5 as uuidv5 } from \"uuid\";\r\nimport CryptoJs from \"crypto-js\";\r\nimport { LoginRequest } from \"../models/api\";\r\nimport { IErrorLoggingService } from \"./errorLoggingService\";\r\n\r\nvar serviceId = \"apiService\";\r\nexport interface IApiService {\r\n getStudentMedicalConditionTypes(): angular.IPromise>;\r\n\r\n getIsMaintenance(): angular.IPromise>;\r\n getAuthenticationCheck(): angular.IPromise>;\r\n getCrsfToken(): angular.IPromise>;\r\n getDownloadToken(): angular.IPromise>;\r\n getAccountOwnerVerification(sessionId: string): angular.IPromise>;\r\n getDelegatedViewerInvitation(code: string): angular.IPromise>;\r\n getUser(): angular.IPromise>;\r\n getUserEmail(qId: string): angular.IPromise>;\r\n getAdminViewUser(schoolUserId: string, ppaoId: string, centreCode: string): angular.IPromise>;\r\n\r\n getOutageById(id: string): angular.IPromise>;\r\n getOutage(platform: string, module: string): angular.IPromise>;\r\n getAlert(platform: string, module: string): angular.IPromise>;\r\n getMinimumApiVersion(): angular.IPromise>;\r\n getQLearnLink(): angular.IPromise>;\r\n getTermsAndConditions(toc: string): angular.IPromise>;\r\n\r\n getConsentRequest(studentEqId: string, requestId: string, schoolCode: string): angular.IPromise>;\r\n getConsentRequestSummary(query: string): angular.IPromise>;\r\n\r\n downloadAttachment(url: string): angular.IPromise>;\r\n downloadPhoto(url: string): angular.IPromise>;\r\n\r\n login(data: LoginRequest): angular.IPromise>;\r\n logout(): angular.IPromise>;\r\n changePassword(data: any): angular.IPromise>;\r\n changeEmail(data: any): angular.IPromise>;\r\n changeMobile(data: any): angular.IPromise>;\r\n reportAbsence(data: any): angular.IPromise>;\r\n submitAbsenceReason(data: any): angular.IPromise>;\r\n reportMultipleAbsences(data: any): angular.IPromise>;\r\n forgotPasswordRequest(data: any): angular.IPromise>;\r\n forgotPasswordSubmit(data: any): angular.IPromise>;\r\n adminViewLogout(): angular.IPromise>;\r\n recordAudit(data: any): angular.IPromise>;\r\n recordMobileAppNeedsUpgrade(data: any): angular.IPromise>;\r\n acceptTermsAndConditions(data: any): angular.IPromise>;\r\n acceptPendingTermsAndConditions(): angular.IPromise>;\r\n accountOwnerLogin(data: any): angular.IPromise>;\r\n accountOwnerRegister(data: any): angular.IPromise>;\r\n accountOwnerActivate(data: any): angular.IPromise>;\r\n accountOwnerInvitation(data: any): angular.IPromise>;\r\n delegatedViewerLogin(data: any): angular.IPromise>;\r\n delegatedViewerRegister(data: any): angular.IPromise>;\r\n delegatedViewerInvite(data: any): angular.IPromise>;\r\n delegatedViewerUpdate(data: any): angular.IPromise>;\r\n delegatedViewerResendInvite(data: any): angular.IPromise>;\r\n delegatedViewerChangeStatus(data: any): angular.IPromise>;\r\n associateAdditionalInvitation(data: any): angular.IPromise>;\r\n\r\n sendConsentResponse(studentEqId: string, requestId: string, schoolCode: string, data: any): angular.IPromise>;\r\n\r\n saveUser(data: any): angular.IPromise>;\r\n saveStudentRelation(data: any): angular.IPromise>;\r\n saveStudent(data: any): angular.IPromise>;\r\n saveStudentMedicalConditions(data: any): angular.IPromise>;\r\n removeStudentPhoto(oneSchoolId: string): angular.IPromise>;\r\n studentUseSchoolPhoto(studentId: string): angular.IPromise>;\r\n promoteStudentPhoto(studentId: string, type: string): angular.IPromise>;\r\n uploadStudentPhoto(studentId: string, data: any): angular.IPromise>;\r\n emailAcademicReportArchive(data: any): angular.IPromise>;\r\n\r\n paymentAuthenticationToken(data: any): angular.IPromise>;\r\n verifyPaymentResponse(data: any): angular.IPromise>;\r\n auditPayment(data: any): angular.IPromise>;\r\n\r\n registerPushNotification(handle: string): angular.IPromise>;\r\n unregisterPushNotification(handle: string): angular.IPromise>;\r\n}\r\n\r\nclass appServiceProvider implements angular.IServiceProvider {\r\n public $get = [\r\n \"$http\",\r\n \"$rootScope\",\r\n \"$q\",\r\n \"$injector\",\r\n \"$log\",\r\n \"deviceService\",\r\n \"errorLoggingService\",\r\n (\r\n $http: angular.IHttpService,\r\n $rootScope: any,\r\n $q: angular.IQService,\r\n $injector: any,\r\n $log: ILogService,\r\n deviceService: IDeviceService,\r\n errorLoggingService: IErrorLoggingService\r\n ): IApiService => {\r\n return new apiService($http, $rootScope, $q, $injector, $log, deviceService, errorLoggingService);\r\n }\r\n ];\r\n}\r\n\r\nclass apiService implements IApiService {\r\n constructor(\r\n private $http: angular.IHttpService,\r\n private $rootScope: any,\r\n private $q: angular.IQService,\r\n private $injector: any,\r\n private $log: ILogService,\r\n private deviceService: IDeviceService,\r\n private errorLoggingService: IErrorLoggingService\r\n ) {}\r\n\r\n activePromises = [];\r\n\r\n outagesBaseUrl = \"/api/outages\";\r\n consentRequestBaseUrl = \"/api/consent\";\r\n\r\n // get\r\n getStudentMedicalConditionTypesUrl = \"/api/student/medicalConditionTypes\";\r\n\r\n getIsMaintenanceUrl = \"/\";\r\n getMinimumApiVersionUrl = \"/api/versions/minimum\";\r\n getQLearnLinkUrl = \"/api/qlearn/link\";\r\n getTermsAndConditionsUrl = \"/api/termsandconditions/mobile\";\r\n\r\n getAuthenticationCheckUrl = \"/api/authentication/authenticationCheck\";\r\n getCrsfTokenUrl = \"/api/token/csrf-token\";\r\n getDownloadTokenUrl = \"/api/session/downloadToken\";\r\n getAccountOwnerVerificationUrl = \"/api/registration/dvsToken\";\r\n getDelegatedViewerInvitationUrl = \"/api/registration/delegated-viewer-invitation\";\r\n getUserUrl = \"/api/user\";\r\n getUserEmailUrl = \"/api/user/email/\";\r\n getAdminViewUserUrl = \"/api/AdminView/User\";\r\n\r\n // Post\r\n loginUrl = \"/api/authentication/login\";\r\n logoutUrl = \"/api/authentication/logout\";\r\n settingsPasswordUrl = \"/api/user/settings/password\";\r\n settingsEmailUrl = \"/api/user/settings/email\";\r\n settingsMobileUrl = \"/api/user/settings/mobile\";\r\n reportAbsenceUrl = \"/api/attendance/reportAbsence\";\r\n submitAbsenceReasonUrl = \"/api/attendance/submitAbsenceReason\";\r\n reportMultipleAbsencesUrl = \"api/attendance/reportMultipleAbsences\";\r\n forgotPasswordRequestUrl = \"api/forgot-password/request\";\r\n forgotPasswordSubmitUrl = \"api/forgot-password/submit\";\r\n\r\n adminViewLogoutUrl = \"api/AdminView/Logout\";\r\n\r\n recordAuditUrl = \"/api/audit\";\r\n recordErrorUrl = \"/api/errors\";\r\n recordMobileAppNeedsUpgradeUrl = \"/api/versions/recordMobileAppNeedsUpgrade\";\r\n acceptTermsAndConditionsUrl = \"/api/termsAndConditions/accept\";\r\n acceptPendingTermsAndConditionsUrl = \"/api/termsAndConditions/acceptPending\";\r\n\r\n accountOwnerLoginUrl = \"/api/authentication/account-owner/login\";\r\n accountOwnerRegisterUrl = \"/api/registration/account-owner-register\";\r\n accountOwnerActivateUrl = \"/api/registration/account-owner-auto-activate\";\r\n accountOwnerInvitationUrl = \"/api/registration/account-owner-invitation\";\r\n\r\n delegatedViewerLoginUrl = \"/api/authentication/delegated-viewer/login\";\r\n delegatedViewerRegisterUrl = \"/api/registration/delegated-viewer-register\";\r\n delegatedViewerInviteUrl = \"/api/viewer/invite\";\r\n delegatedViewerUpdateUrl = \"/api/viewer/update\";\r\n delegatedViewerResendInviteUrl = \"/api/viewer/resendinvite\";\r\n delegatedViewerChangeStatusUrl = \"/api/viewer/changeStatus\";\r\n associateAdditionalInvitationUrl = \"/api/registration/associate-additional-invitation\";\r\n\r\n saveUserUrl = \"/api/user\";\r\n saveStudentUrl = \"/api/student\";\r\n saveStudentRelationUrl = \"/api/studentRelation\";\r\n saveStudentMedicalConditionsUrl = \"/api/student/medicalConditions\";\r\n removeStudentPhotoUrl = \"/api/studentphoto/remove\";\r\n studentUseSchoolPhotoUrl = \"/api/studentphoto/school\";\r\n promoteStudentPhotoUrl = \"/api/studentphoto/promote\";\r\n uploadStudentPhotoUrl = \"/api/studentphoto/upload/\";\r\n emailStudentAcademicReportArchiveUrl = \"/api/academic/reportArchive\";\r\n\r\n paymentAuthenticationTokenUrl = \"/api/processpayment/tokens\";\r\n verifyPaymentResponseUrl = \"/api/processpayment/verifyresponse\";\r\n auditPaymentUrl = \"/api/processpayment/auditpayment\";\r\n\r\n registerPushNotificationUrl = \"/api/pushnotification/register\";\r\n unregisterPushNotificationUrl = \"/api/pushnotification/unregister\";\r\n\r\n public getIsMaintenance() {\r\n return this.httpGet(this.getIsMaintenanceUrl);\r\n }\r\n\r\n public getAuthenticationCheck() {\r\n return this.httpGet(this.getAuthenticationCheckUrl);\r\n }\r\n\r\n public getCrsfToken() {\r\n return this.httpGet(this.getCrsfTokenUrl);\r\n }\r\n\r\n public getOutageById(id: string) {\r\n const url = `${this.outagesBaseUrl}/${id}`;\r\n return this.httpGet(url);\r\n }\r\n\r\n public getOutage(platform: string, module: string) {\r\n const url = `${this.outagesBaseUrl}/${platform}/outage/${module}`;\r\n return this.httpGet(url);\r\n }\r\n\r\n public getAlert(platform: string, module: string) {\r\n const url = `${this.outagesBaseUrl}/${platform}/alert/${module}`;\r\n return this.httpGet(url);\r\n }\r\n\r\n public getMinimumApiVersion() {\r\n return this.httpGet(this.getMinimumApiVersionUrl);\r\n }\r\n\r\n public getDownloadToken() {\r\n return this.httpGet(this.getDownloadTokenUrl);\r\n }\r\n\r\n public getAccountOwnerVerification(sessionId: string) {\r\n const url = `${this.getAccountOwnerVerificationUrl}?sessionId=${sessionId}`;\r\n return this.httpGet(url);\r\n }\r\n\r\n public getDelegatedViewerInvitation(code: string) {\r\n const url = `${this.getDelegatedViewerInvitationUrl}?code=${code}`;\r\n return this.httpGet(url);\r\n }\r\n\r\n public getUser() {\r\n const url = `${this.getUserUrl}?includeFutureStudents=true`;\r\n return this.httpGet(url);\r\n }\r\n\r\n public getAdminViewUser(schoolUserId: string, ppaoId: string, centreCode: string) {\r\n const url = `${this.getAdminViewUserUrl}?schoolUserId=${schoolUserId}&ppaoId=${ppaoId}¢reCode=${centreCode}`;\r\n return this.httpGet(url);\r\n }\r\n\r\n public getUserEmail(qid: string) {\r\n const url = `${this.getUserEmailUrl}/${qid}`;\r\n return this.httpGet(url);\r\n }\r\n\r\n public getStudentMedicalConditionTypes() {\r\n return this.httpGet(this.getStudentMedicalConditionTypesUrl);\r\n }\r\n\r\n public getQLearnLink() {\r\n return this.httpGet(this.getQLearnLinkUrl);\r\n }\r\n\r\n public getTermsAndConditions(toc: string) {\r\n const url = `${this.getTermsAndConditionsUrl}/${toc}`;\r\n return this.httpGet(url);\r\n }\r\n\r\n public getConsentRequest(studentEqId: string, requestId: string, schoolCode: string) {\r\n const url = `${this.consentRequestBaseUrl}/${studentEqId}/${requestId}/${schoolCode}`;\r\n return this.httpGet(url);\r\n }\r\n\r\n public getConsentRequestSummary(query: string) {\r\n const url = `${this.consentRequestBaseUrl}/summary?${query}`;\r\n return this.httpGet(url);\r\n }\r\n\r\n public downloadAttachment(url: string) {\r\n return this.httpGet(url, { responseType: \"arraybuffer\" });\r\n }\r\n\r\n public downloadPhoto(url: string) {\r\n return this.httpGet(url, { responseType: \"blob\" });\r\n }\r\n\r\n public login(data: LoginRequest) {\r\n return this.httpPost(this.loginUrl, data);\r\n }\r\n\r\n public logout() {\r\n return this.awaitPromisesThenPost(this.logoutUrl);\r\n }\r\n\r\n public changePassword(data: any) {\r\n return this.httpPost(this.settingsPasswordUrl, data);\r\n }\r\n\r\n public changeEmail(data: any) {\r\n return this.httpPost(this.settingsEmailUrl, data);\r\n }\r\n\r\n public changeMobile(data: any) {\r\n return this.httpPost(this.settingsMobileUrl, data);\r\n }\r\n\r\n public reportAbsence(data: any) {\r\n return this.httpPost(this.reportAbsenceUrl, data);\r\n }\r\n\r\n public submitAbsenceReason(data: any) {\r\n return this.httpPost(this.submitAbsenceReasonUrl, data);\r\n }\r\n\r\n public reportMultipleAbsences(data: any) {\r\n return this.httpPost(this.reportMultipleAbsencesUrl, data);\r\n }\r\n\r\n public forgotPasswordRequest(data: any) {\r\n return this.httpPost(this.forgotPasswordRequestUrl, data);\r\n }\r\n\r\n public forgotPasswordSubmit(data: any) {\r\n return this.httpPost(this.forgotPasswordSubmitUrl, data);\r\n }\r\n\r\n public adminViewLogout() {\r\n return this.awaitPromisesThenPost(this.adminViewLogoutUrl);\r\n }\r\n\r\n public recordAudit(data: any) {\r\n return this.httpPost(this.recordAuditUrl, data);\r\n }\r\n\r\n public recordError(data: any) {\r\n return this.httpPost(this.recordErrorUrl, data, {});\r\n }\r\n\r\n public recordMobileAppNeedsUpgrade(data: any) {\r\n return this.httpPost(this.recordMobileAppNeedsUpgradeUrl, data);\r\n }\r\n\r\n public acceptTermsAndConditions(data: any) {\r\n return this.httpPost(this.acceptTermsAndConditionsUrl, data);\r\n }\r\n\r\n public acceptPendingTermsAndConditions() {\r\n return this.httpPost(this.acceptPendingTermsAndConditionsUrl);\r\n }\r\n\r\n public accountOwnerLogin(data: any) {\r\n return this.httpPost(this.accountOwnerLoginUrl, data);\r\n }\r\n\r\n public accountOwnerRegister(data: any) {\r\n return this.httpPost(this.accountOwnerRegisterUrl, data);\r\n }\r\n\r\n public accountOwnerActivate(data: any) {\r\n return this.httpPost(this.accountOwnerActivateUrl, data);\r\n }\r\n\r\n public accountOwnerInvitation(data: any) {\r\n return this.httpPost(this.accountOwnerInvitationUrl, data);\r\n }\r\n\r\n public delegatedViewerLogin(data: any) {\r\n return this.httpPost(this.delegatedViewerLoginUrl, data);\r\n }\r\n\r\n public delegatedViewerRegister(data: any) {\r\n return this.httpPost(this.delegatedViewerRegisterUrl, data);\r\n }\r\n\r\n public delegatedViewerInvite(data: any) {\r\n return this.httpPost(this.delegatedViewerInviteUrl, data);\r\n }\r\n\r\n public delegatedViewerUpdate(data: any) {\r\n return this.httpPost(this.delegatedViewerUpdateUrl, data);\r\n }\r\n\r\n public delegatedViewerResendInvite(data: any) {\r\n return this.httpPost(this.delegatedViewerResendInviteUrl, data);\r\n }\r\n\r\n public delegatedViewerChangeStatus(data: any) {\r\n return this.httpPost(this.delegatedViewerChangeStatusUrl, data);\r\n }\r\n\r\n public associateAdditionalInvitation(data: any) {\r\n return this.httpPost(this.associateAdditionalInvitationUrl, data);\r\n }\r\n\r\n public saveUser(data: any) {\r\n return this.httpPost(this.saveUserUrl, data);\r\n }\r\n\r\n public saveStudentRelation(data: any) {\r\n return this.httpPost(this.saveStudentRelationUrl, data);\r\n }\r\n\r\n public saveStudent(data: any) {\r\n return this.httpPost(this.saveStudentUrl, data);\r\n }\r\n\r\n public saveStudentMedicalConditions(data: any) {\r\n return this.httpPost(this.saveStudentMedicalConditionsUrl, data);\r\n }\r\n\r\n public removeStudentPhoto(oneSchoolId: string) {\r\n const url = `${this.removeStudentPhotoUrl}/${oneSchoolId}`;\r\n return this.httpPost(url);\r\n }\r\n\r\n public studentUseSchoolPhoto(studentId: string) {\r\n const url = `${this.studentUseSchoolPhotoUrl}/${studentId}`;\r\n return this.httpPost(url);\r\n }\r\n\r\n public promoteStudentPhoto(studentId: string, type: string) {\r\n const url = `${this.promoteStudentPhotoUrl}/${studentId}?type=${type}`;\r\n return this.httpPost(url);\r\n }\r\n\r\n public uploadStudentPhoto(studentId: string, data: any) {\r\n const url = `${this.uploadStudentPhotoUrl}/${studentId}`;\r\n return this.httpPost(url, data, {\r\n headers: {\r\n \"Content-Type\": \"application/x-www-form-urlencoded\"\r\n }\r\n });\r\n }\r\n\r\n public sendConsentResponse(studentEqId: string, requestId: string, schoolCode: string, data: any) {\r\n const url = `${this.consentRequestBaseUrl}/${studentEqId}/${requestId}/${schoolCode}`;\r\n return this.httpPost(url, data);\r\n }\r\n\r\n public emailAcademicReportArchive(data: any) {\r\n return this.httpPost(this.emailStudentAcademicReportArchiveUrl, data);\r\n }\r\n\r\n public paymentAuthenticationToken(data: any) {\r\n return this.httpPost(this.paymentAuthenticationTokenUrl, data);\r\n }\r\n\r\n public verifyPaymentResponse(data: any) {\r\n return this.httpPost(this.verifyPaymentResponseUrl, data);\r\n }\r\n\r\n public auditPayment(data: any) {\r\n return this.httpPost(this.auditPaymentUrl, data);\r\n }\r\n\r\n public registerPushNotification(handle: string) {\r\n return this.deviceService.getDeviceId().then(deviceId => {\r\n return this.getInstallationId(deviceId).then(installationId => {\r\n return this.httpPost(this.registerPushNotificationUrl, { handle: handle, installationId: installationId, platform: this.getPushNotificationPlatform() });\r\n });\r\n });\r\n }\r\n\r\n public unregisterPushNotification(handle: string) {\r\n return this.deviceService.getDeviceId().then(deviceId => {\r\n return this.getInstallationId(deviceId).then(installationId => {\r\n return this.httpPost(this.unregisterPushNotificationUrl, { handle: handle, installationId: installationId });\r\n });\r\n });\r\n }\r\n\r\n public httpGet(url: string, config?: angular.IRequestShortcutConfig, isUseCapacitorHttp: boolean = this.deviceService.isMobileApp) {\r\n // Unable to set the cookies in ios\r\n // See: https://forum.ionicframework.com/t/cookie-based-authentication-for-ios-for-ionic-react-capacitor/197277/6\r\n\r\n const deferred = this.$q.defer>();\r\n let httpGet: Promise | angular.IHttpPromise;\r\n\r\n if (isUseCapacitorHttp) {\r\n this.$log.debug(`apiServiceProvider - Capacitor HTTP Get Request for ${url}`);\r\n httpGet = this.capacitorHttpGet(url, config);\r\n } else {\r\n this.$log.debug(`apiServiceProvider - HTTP Get Request for ${url}`);\r\n httpGet = this.$http.get(url, config);\r\n }\r\n\r\n httpGet\r\n .then(response => {\r\n this.$log.debug(`apiServiceProvider - HTTP GET Request Succeed.`);\r\n deferred.resolve(response);\r\n })\r\n .catch(error => {\r\n this.$log.error(`apiServiceProvider - HTTP GET Request failed.`, angular.toJson(error));\r\n this.errorLoggingService.responseError(error);\r\n deferred.reject(error);\r\n })\r\n .finally(() => {\r\n const index = this.activePromises.indexOf(deferred);\r\n if (index !== -1) {\r\n this.activePromises.splice(index, 1);\r\n }\r\n });\r\n\r\n // Keep track of the promise\r\n this.activePromises.push(deferred);\r\n\r\n return deferred.promise;\r\n }\r\n\r\n private capacitorHttpGet(url: string, config?: angular.IRequestShortcutConfig): Promise {\r\n const urlResolver: IUrlResolver = this.$injector.get(\"urlResolver\");\r\n\r\n return getHttpHeaders(this.$rootScope.userSessionId, this.deviceService).then(headers => {\r\n const httpOptions: HttpOptions = this.getCapacitorHttpOptions(urlResolver, url, headers, config);\r\n\r\n return CapacitorHttp.get(httpOptions);\r\n });\r\n }\r\n\r\n httpPost(url: string, data?: any, config?: angular.IRequestShortcutConfig, isUseCapacitorHttp: boolean = this.deviceService.isMobileApp) {\r\n const deferred = this.$q.defer>();\r\n let httpPost: Promise | angular.IHttpPromise;\r\n\r\n if (isUseCapacitorHttp) {\r\n this.$log.debug(`apiServiceProvider - Capacitor HTTP POST Request for ${url}`);\r\n httpPost = this.capacitorHttpPost(url, config, data);\r\n } else {\r\n this.$log.debug(`apiServiceProvider - HTTP POST Request for ${url}`);\r\n httpPost = this.$http.post(url, data, config);\r\n }\r\n\r\n httpPost\r\n .then(response => {\r\n this.$log.debug(`apiServiceProvider - HTTP POST Request Succeed.`);\r\n deferred.resolve(response);\r\n })\r\n .catch(error => {\r\n this.$log.error(`apiServiceProvider - HTTP POST Request failed.`, angular.toJson(error));\r\n this.errorLoggingService.responseError(error);\r\n deferred.reject(error);\r\n })\r\n .finally(() => {\r\n const index = this.activePromises.indexOf(deferred);\r\n if (index !== -1) {\r\n this.activePromises.splice(index, 1);\r\n }\r\n });\r\n\r\n // Keep track of the promise\r\n this.activePromises.push(deferred);\r\n\r\n return deferred.promise;\r\n }\r\n\r\n private capacitorHttpPost(url: string, config: angular.IRequestShortcutConfig, data: any) {\r\n const urlResolver: IUrlResolver = this.$injector.get(\"urlResolver\");\r\n\r\n return getHttpHeaders(this.$rootScope.userSessionId, this.deviceService).then(headers => {\r\n const httpOptions: HttpOptions = this.getCapacitorHttpOptions(urlResolver, url, headers, config);\r\n if (httpOptions.headers[\"Content-Type\"] == \"application/json\") {\r\n httpOptions.data = angular.toJson(data);\r\n } else {\r\n httpOptions.data = data;\r\n }\r\n return CapacitorHttp.post(httpOptions);\r\n });\r\n }\r\n\r\n private getCapacitorHttpOptions(urlResolver: IUrlResolver, url: string, headers: any[][], config?: angular.IRequestShortcutConfig) {\r\n const httpOptions: HttpOptions = {\r\n url: urlResolver.resolve(url),\r\n headers: {},\r\n responseType: config?.responseType as HttpResponseType,\r\n webFetchExtra: {\r\n credentials: \"include\"\r\n }\r\n };\r\n for (const [key, value] of headers) {\r\n httpOptions.headers[key] = value;\r\n }\r\n for (const requestType in config?.headers) {\r\n httpOptions.headers[requestType] = config?.headers[requestType];\r\n }\r\n\r\n return httpOptions;\r\n }\r\n\r\n private awaitPromisesThenPost(url: string, data?: any) {\r\n // Await for active promises to be completed\r\n const deferred = this.$q.defer>();\r\n const checkPromises = () => {\r\n if (this.activePromises.length === 0) {\r\n this.httpPost(url, data)\r\n .then(response => {\r\n deferred.resolve(response);\r\n })\r\n .catch(error => {\r\n deferred.reject(error);\r\n });\r\n } else {\r\n this.$log.debug(`apiServiceProvider - There is ${this.activePromises.length} active request/s.`);\r\n setTimeout(checkPromises, 50);\r\n }\r\n };\r\n\r\n checkPromises();\r\n\r\n return deferred.promise;\r\n }\r\n\r\n private getPushNotificationPlatform() {\r\n return this.deviceService.isIOs() ? \"apns\" : \"gcm\";\r\n }\r\n\r\n private getInstallationId(deviceId: string) {\r\n const deferred = this.$q.defer();\r\n let installationId = deviceId;\r\n\r\n this.deviceService.getAppInfo().then(appInfo => {\r\n // Generate the Hash of the Hexadecimal string\\\r\n const hash = CryptoJs.SHA256(`${installationId}|${appInfo.id}`).toString(CryptoJs.enc.Hex);\r\n const namespace = \"00000000-0000-0000-0000-000000000000\";\r\n const newInstallationId = uuidv5(hash, namespace);\r\n deferred.resolve(newInstallationId);\r\n this.$log.debug(`apiServiceProvider - Installation Id ${newInstallationId}`);\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n}\r\n\r\napp.provider(serviceId, appServiceProvider);\r\n","import { ILocalStorageService } from \"angular-local-storage\";\r\nimport { app as services } from \"../app.module\";\r\nimport { ActionPerformed, PushNotificationSchema, PushNotifications, Token } from \"@capacitor/push-notifications\";\r\nimport { IDeviceService } from \"./deviceServiceProvider\";\r\n\r\nconst serviceId = \"pushNotificationsService\";\r\n\r\nconst pushNotificationTokenStorageKey = \"PushNotificationToken\";\r\nexport const redirectRoutePathStorageKey = \"RedirectRoutePath\";\r\n\r\nexport const pushNotificationRegisteredEvent = \"pushNotificationsRegistered\";\r\nexport const pushNotificationRegistrationFailedEvent = \"pushNotificationsRegistrationFailed\";\r\nexport const pushNotificationReceivedEvent = \"pushNotificationReceived\";\r\nexport const pushNotificationActionedEvent = \"pushNotificationActioned\";\r\n\r\nexport interface IPushNotificationsService {\r\n getToken(): string | null;\r\n getIsRegistered(): boolean;\r\n register(): Promise;\r\n}\r\n\r\nfunction pushNotificationsService(\r\n $rootScope: angular.IRootScopeService,\r\n $log: angular.ILogService,\r\n deviceService: IDeviceService,\r\n localStorageService: ILocalStorageService\r\n): IPushNotificationsService {\r\n \"ngInject\";\r\n\r\n registerPushNotificationAction();\r\n\r\n return {\r\n getToken: getToken,\r\n getIsRegistered: getIsRegistered,\r\n register: register\r\n };\r\n\r\n function getToken(): string | null {\r\n return localStorageService.get(pushNotificationTokenStorageKey);\r\n }\r\n\r\n function getIsRegistered(): boolean {\r\n return getToken() !== null;\r\n }\r\n\r\n async function register(): Promise {\r\n if (deviceService.isMobileApp) {\r\n $log.debug(\"PushNotificationsService - Registering device for push notification on native platform.\");\r\n // Request Permission to use the Push Notifications\r\n // iOS will prompt the user\r\n // Android will grant by default for Android 12 or less\r\n await requestPushNotificationsPermission();\r\n }\r\n }\r\n\r\n function registerPushNotificationAction() {\r\n if (deviceService.isMobileApp) {\r\n PushNotifications.addListener(\"pushNotificationReceived\", notification => onPushNotificationReceived(notification));\r\n\r\n // notification tap by the user\r\n PushNotifications.addListener(\"pushNotificationActionPerformed\", actionPerformed => onPushNotificationActioned(actionPerformed));\r\n }\r\n }\r\n\r\n function onPushNotificationActioned(actionPerformed: ActionPerformed) {\r\n $log.debug(`PushNotificationsService - Push notification action performed with ${JSON.stringify(actionPerformed)}.`);\r\n\r\n if (actionPerformed.actionId === \"tap\") {\r\n const actionData = actionPerformed.notification.data;\r\n $log.debug(`PushNotificationsService - Push notification action redirect to ${actionData.routePath}.`);\r\n // Store the route for redirection\r\n localStorageService.set(redirectRoutePathStorageKey, actionData.routePath);\r\n window.location.reload();\r\n }\r\n\r\n $rootScope.$broadcast(pushNotificationActionedEvent, actionPerformed);\r\n }\r\n\r\n function onPushNotificationReceived(notification: PushNotificationSchema) {\r\n $log.debug(`PushNotificationsService - Push notification received with ${JSON.stringify(notification)}`);\r\n\r\n $rootScope.$broadcast(pushNotificationReceivedEvent, notification);\r\n }\r\n\r\n async function requestPushNotificationsPermission() {\r\n $log.debug(\"PushNotificationsService - Request permissions to receive push notification.\");\r\n\r\n try {\r\n let pushNotificationRequestPermissionResult = await PushNotifications.checkPermissions();\r\n if (pushNotificationRequestPermissionResult.receive === \"prompt\") {\r\n pushNotificationRequestPermissionResult = await PushNotifications.requestPermissions();\r\n }\r\n\r\n if (pushNotificationRequestPermissionResult.receive === \"granted\") {\r\n // Register Push Notification Events\r\n await PushNotifications.register();\r\n\r\n await registerPushNotificationRegistrationAction();\r\n } else {\r\n $log.debug(`PushNotificationsService - The permission to receive push notification unsuccessful with ${pushNotificationRequestPermissionResult.receive}`);\r\n }\r\n } catch (error) {\r\n $log.debug(`PushNotificationsService - The permission to receive push notification failed due to ${JSON.stringify(error)}`);\r\n throw error;\r\n }\r\n }\r\n\r\n async function registerPushNotificationRegistrationAction() {\r\n // Successful Registration\r\n await PushNotifications.addListener(\"registration\", token => onPushNotificationsRegistered(token));\r\n\r\n // Failed Registration\r\n await PushNotifications.addListener(\"registrationError\", error => onPushNotificationsRegistrationFailed(error));\r\n }\r\n\r\n function onPushNotificationsRegistered(token: Token) {\r\n localStorageService.set(pushNotificationTokenStorageKey, token.value);\r\n\r\n $log.debug(`PushNotificationsService - Push registration succeeded with token: ${token.value}`);\r\n\r\n $rootScope.$broadcast(pushNotificationRegisteredEvent, token);\r\n }\r\n\r\n function onPushNotificationsRegistrationFailed(error: any) {\r\n localStorageService.set(pushNotificationTokenStorageKey, null);\r\n\r\n $log.debug(`PushNotificationsService - Push registration failed: ${JSON.stringify(error)}`);\r\n\r\n $rootScope.$broadcast(pushNotificationRegistrationFailedEvent, error);\r\n }\r\n}\r\nservices.factory(serviceId, pushNotificationsService);\r\n","import { app } from \"../app.module\";\r\nimport { ILocationService } from \"angular\";\r\nimport { ILocalStorageService } from \"angular-local-storage\";\r\nimport { redirectRoutePathStorageKey } from \"./pushNotificationsService\";\r\nimport { IDeviceService } from \"./deviceServiceProvider\";\r\n\r\nexport class AdminViewRedirectService {\r\n constructor(\r\n private isAdminViewDomain: boolean,\r\n private $location: ILocationService,\r\n private localStorageService: ILocalStorageService,\r\n private deviceService: IDeviceService\r\n ) {\r\n \"ngInject\";\r\n }\r\n\r\n landingPageRedirect() {\r\n if (this.isAdminViewDomain) {\r\n this.$location.path(\"/admin-view/context-error\");\r\n } else if (this.localStorageService.get(redirectRoutePathStorageKey) || this.deviceService.isMobileApp) {\r\n this.$location.path(\"/login\");\r\n } else {\r\n this.$location.path(\"/landing\");\r\n }\r\n }\r\n}\r\n\r\napp.service(\"adminViewRedirectService\", AdminViewRedirectService);\r\n","import { app as services } from \"../app.module\";\r\nimport { IUrlResolver } from \"./urlResolver\";\r\nimport { IApiService } from \"./apiServiceProvider\";\r\nimport { IDeferred, ILogService, IPromise, IQService } from \"angular\";\r\nimport { AppLauncher } from \"@capacitor/app-launcher\";\r\n\r\nvar serviceId = \"assetService\";\r\nservices.factory(serviceId, assetService);\r\n\r\nexport interface IAssetService {\r\n mobileOpenFile(url: string, requireDownloadToken: boolean): IPromise;\r\n openFile(url: string): IPromise;\r\n}\r\n\r\nfunction assetService($log: ILogService, $q: IQService, $window, apiService: IApiService, urlResolver: IUrlResolver): IAssetService {\r\n \"ngInject\";\r\n return {\r\n openFile: openFile,\r\n mobileOpenFile: mobileOpenFile\r\n };\r\n\r\n function mobileOpenFile(url: string, requireDownloadToken: boolean) {\r\n const deferred = $q.defer();\r\n\r\n if (requireDownloadToken) {\r\n apiService.getDownloadToken().then(\r\n function successCallback(response) {\r\n const data = response.data;\r\n const newUrl = urlResolver.resolve(url + (url.indexOf(\"?\") >= 0 ? \"&\" : \"?\") + \"DownloadToken=\" + encodeURIComponent(data.token));\r\n\r\n $log.debug(`assetService - Mobile Downloading ${newUrl}`);\r\n\r\n appLauncherOpenUrl(newUrl, deferred);\r\n },\r\n function errorCallback(response) {\r\n $log.error(\"assetService - Error getting download file token\", response.data);\r\n deferred.reject();\r\n }\r\n );\r\n } else {\r\n appLauncherOpenUrl(url, deferred);\r\n }\r\n\r\n return deferred.promise;\r\n }\r\n\r\n function appLauncherOpenUrl(newUrl: string, deferred: IDeferred) {\r\n $q.when(AppLauncher.openUrl({ url: newUrl }))\r\n .then(() => {\r\n deferred.resolve();\r\n })\r\n .catch(response => {\r\n $log.error(\"assetService - Error opening url\", response);\r\n deferred.reject();\r\n });\r\n }\r\n\r\n function openFile(url: string) {\r\n const newUrl = urlResolver.resolve(url);\r\n $log.debug(`assetService - Downloading ${newUrl}`);\r\n $window.open(urlResolver.resolve(url), \"_self\");\r\n\r\n return $q.resolve();\r\n }\r\n}\r\n","import { app as services } from \"../app.module\";\r\nimport { Student } from \"../models/student\";\r\nimport { IDataContext } from \"./dataContext\";\r\nimport { StudentFeature, EnrolmentFeature } from \"../configuration\";\r\nimport { Enrolment } from \"../models/enrolment\";\r\nimport { StudentContext } from \"./contextLoader\";\r\nimport { IApiService } from \"./apiServiceProvider\";\r\nimport { ICsrfTokenService } from \"./csrfTokenService\";\r\n\r\nexport class AuthorisationService {\r\n constructor(\r\n private $location: ng.ILocationService, \r\n private dataContext: IDataContext, \r\n private apiService: IApiService,\r\n private csrfTokenService: ICsrfTokenService) {\r\n \"ngInject\";\r\n }\r\n\r\n hasStudentFeatureAccess(context: StudentContext, feature: StudentFeature) {\r\n if (this.invalidStudent(context.student)) return false;\r\n if (this.unauthorizedStudentFeature(context.student, feature)) return false;\r\n\r\n return true;\r\n }\r\n\r\n hasFeatureAccess(context: StudentContext, feature: EnrolmentFeature) {\r\n if (this.invalidStudent(context.student)) return false;\r\n if (this.invalidEnrolment(context.enrolment)) return false;\r\n if (this.unauthorizedEnrolmentFeature(context.enrolment, feature)) return false;\r\n\r\n return true;\r\n }\r\n\r\n logout(toUrl?: string | null | undefined) {\r\n var wasAdmin = this.dataContext.isAdminView();\r\n var logout = wasAdmin ? this.apiService.adminViewLogout() : this.apiService.logout();\r\n\r\n return logout.then(() => {\r\n this.clearAuthenticationCookie()\r\n .then(() => this.csrfTokenService.ensureCsrfToken())\r\n .then(() => {\r\n if (wasAdmin) {\r\n this.$location.path(\"/admin-view/logout\");\r\n } else {\r\n this.$location.path(toUrl || \"/login\").search(\"logout\", \"true\");\r\n }\r\n });\r\n });\r\n }\r\n\r\n clearAuthenticationCookie() {\r\n return this.dataContext.flagSignedOut(false);\r\n }\r\n\r\n clearAuthenticationCookieWithoutPublishing() {\r\n return this.dataContext.flagSignedOutWithoutRaisingEvent();\r\n }\r\n\r\n private invalidEnrolment(enrolment: Enrolment) {\r\n if (!enrolment) {\r\n this.$location.path(\"/studentNotFound\");\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n private invalidStudent(student: Student) {\r\n if (!student) {\r\n this.$location.path(\"/studentNotFound\");\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n private unauthorizedStudentFeature(student: Student, feature: StudentFeature) {\r\n if (!student.isFeatureAvailable(feature)) {\r\n var newPath = \"/featureUnavailable\";\r\n this.$location.path(newPath);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n private unauthorizedEnrolmentFeature(enrolment: Enrolment, feature: EnrolmentFeature) {\r\n if (!enrolment.isFeatureAvailable(feature)) {\r\n var newPath = \"/featureUnavailable\";\r\n this.$location.path(newPath);\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\n\r\nvar serviceId = \"authorisationService\";\r\nservices.service(serviceId, AuthorisationService);\r\n","import { app as services } from \"../app.module\";\r\n\r\nvar serviceId = \"blobService\";\r\n\r\nexport class BlobService {\r\n createBlobFromDataUrl(dataUrl, type) {\r\n return fetch(dataUrl)\r\n .then(b => b.arrayBuffer())\r\n .then(buff => {\r\n const byteArray = new Uint8Array(buff);\r\n return new Blob([byteArray], { type: type });\r\n });\r\n }\r\n\r\n getPhotoContentUrl(blob: Blob) {\r\n const reader = new FileReader();\r\n reader.readAsDataURL(blob);\r\n\r\n return new Promise((resolve, reject) => {\r\n reader.onloadend = () => {\r\n let result;\r\n if (typeof reader.result === \"string\") {\r\n result = reader.result;\r\n } else if (reader.result instanceof ArrayBuffer) {\r\n const uint8Array = new Uint8Array(reader.result);\r\n result = String.fromCharCode.apply(null, uint8Array);\r\n }\r\n result = result.replace(/ /g, \"%20\");\r\n resolve(result);\r\n };\r\n reader.onerror = () => {\r\n reject(reader.error);\r\n };\r\n });\r\n }\r\n}\r\n\r\nservices.service(serviceId, BlobService);\r\n","import { app as services } from \"../app.module\";\r\nimport angular from \"angular\";\r\n\r\nexport interface IUrlResolver {\r\n resolve(url: string): string;\r\n setBaseUrl(newBaseUrl: string): void;\r\n}\r\n\r\nclass urlResolverProvider implements angular.IServiceProvider {\r\n private baseUrl: string;\r\n\r\n resolve(url: string): string {\r\n if (!this.baseUrl || this.baseUrl.length == 0 || !url || url.length == 0) return url;\r\n if (/^(https?:)?\\/\\//.test(url)) {\r\n return url;\r\n }\r\n if (/^data:/.test(url)) {\r\n //data url; return as it is\r\n return url;\r\n }\r\n return this.baseUrl + (url[0] !== \"/\" ? \"/\" : \"\") + url;\r\n }\r\n\r\n setBaseUrl(newBaseUrl: string): void {\r\n this.baseUrl = newBaseUrl;\r\n }\r\n\r\n getBaseUrl(): string {\r\n return this.baseUrl;\r\n }\r\n\r\n $get(): IUrlResolver {\r\n return {\r\n resolve: this.resolve.bind(this),\r\n setBaseUrl: this.setBaseUrl.bind(this)\r\n };\r\n }\r\n}\r\nservices.provider(\"urlResolver\", urlResolverProvider);\r\n","import { app } from \"../app.module\";\r\nimport { Student } from \"../models/student\";\r\nimport { Enrolment } from \"../models/enrolment\";\r\nimport { IDataContext } from \"./dataContext\";\r\nimport { User } from \"../models/user\";\r\nimport { ICommonService } from \"./common\";\r\n\r\nexport interface StudentContext {\r\n user: User;\r\n student: Student;\r\n enrolment: Enrolment;\r\n}\r\nexport interface IContextLoader {\r\n load(vm: StudentContext, routeParams: angular.route.IRouteParamsService, controllerId: string): ng.IPromise;\r\n}\r\n\r\nexport class ContextLoader implements IContextLoader {\r\n constructor(private dataContext: IDataContext, private $location: ng.ILocationService, private common: ICommonService) {\r\n \"ngInject\";\r\n }\r\n\r\n load(vm: StudentContext, routeParams: angular.route.IRouteParamsService, controllerId: string) {\r\n vm.user = null;\r\n vm.student = null;\r\n vm.enrolment = null;\r\n\r\n var self = this;\r\n\r\n return this.common.activateController([getStudentEnrolment()], controllerId);\r\n\r\n function getStudentEnrolment() {\r\n var studentId = routeParams.studentId;\r\n var centreCode = routeParams.centreCode;\r\n\r\n return self.dataContext.getData().then(user => {\r\n var studentEnrolment = user.getEnrolment(studentId, centreCode);\r\n\r\n if (!studentEnrolment?.student) {\r\n self.$location.path(\"/studentNotFound\");\r\n return;\r\n }\r\n\r\n vm.user = user;\r\n vm.student = studentEnrolment.student;\r\n vm.enrolment = studentEnrolment.enrolment;\r\n vm.enrolment.contactSchoolUrl = self.dataContext.isAdminView() ? \"\" : \"mailto:\" + studentEnrolment.enrolment.schoolEmail;\r\n });\r\n }\r\n }\r\n}\r\n\r\nconst serviceId = \"contextLoader\";\r\napp.service(serviceId, ContextLoader);\r\n","import {app as services} from '../app.module';\r\n\r\nvar serviceId = 'creditCardService';\r\nservices.factory(serviceId, [creditCardService]);\r\n\r\nfunction creditCardService() {\r\n return {\r\n isAValidCreditCardNumber: isAValidCreditCardNumber\r\n };\r\n\r\n function isNumeric(character) {\r\n return /\\d/.test(character);\r\n }\r\n\r\n function isValidLuhn(number) {\r\n var digit, n, sum, j, len1;\r\n sum = 0;\r\n var ref2 = number.split('').reverse();\r\n for (n = j = 0, len1 = ref2.length; j < len1; n = ++j) {\r\n digit = ref2[n];\r\n digit = +digit;\r\n if (n % 2) {\r\n digit *= 2;\r\n if (digit < 10) {\r\n sum += digit;\r\n } else {\r\n sum += digit - 9;\r\n }\r\n } else {\r\n sum += digit;\r\n }\r\n }\r\n return sum % 10 === 0;\r\n };\r\n\r\n function isValidLength(creditCardNumber) {\r\n return creditCardNumber.length >= 13 && creditCardNumber.length <= 16;\r\n }\r\n\r\n function canonicalise(creditCardNumber) {\r\n var canonicalCreditCardNumber = creditCardNumber.replace(/\\s/g, \"\");\r\n canonicalCreditCardNumber = canonicalCreditCardNumber.replace(/-/g, \"\");\r\n return canonicalCreditCardNumber;\r\n }\r\n\r\n function isAValidCreditCardNumber(creditCardNumber) {\r\n\r\n // allow blank (required will take care of validation)\r\n if (creditCardNumber === null || creditCardNumber === undefined) return true;\r\n if (creditCardNumber === '') return true;\r\n\r\n var canonicalNumber = canonicalise(creditCardNumber);\r\n\r\n return {\r\n isValid: isValidLength(canonicalNumber) && isValidLuhn(canonicalNumber),\r\n canonicalNumber: canonicalNumber\r\n };\r\n }\r\n}","import angular from \"angular\";\r\nimport { PayableFinanceRecordViewModel, PendingPaymentViewModel, FinanceRecordViewModel } from \"./api\";\r\n\r\nexport class FinanceRecord implements PayableFinanceRecordViewModel {\r\n bPointPaymentUrl: string;\r\n amountOwing: number;\r\n originalAmount: number;\r\n transactionDate: string;\r\n status: string;\r\n invoiceNumber: string;\r\n paymentRef: string;\r\n dueDate: string;\r\n description: string;\r\n pdfExists: boolean;\r\n customerReferenceNumber: string;\r\n paymentsAreInProgress: boolean;\r\n isInvoice: boolean;\r\n isPayment: boolean;\r\n pendingPayments: PendingPaymentViewModel[];\r\n paymentReceiptNumber: string;\r\n typeDescription: string;\r\n studentName: string;\r\n\r\n isSelectedForPayment: boolean;\r\n paymentAmount: number;\r\n paymentAuthToken: string;\r\n merchantNumber: string;\r\n billerCode: string;\r\n\r\n constructor(data: FinanceRecordViewModel) {\r\n angular.extend(this, data);\r\n\r\n this.isSelectedForPayment = false;\r\n this.paymentAmount = this.amountOwing;\r\n }\r\n}\r\n","import angular from \"angular\";\r\nimport { FinanceRecord } from \"./financeRecord\";\r\nimport { isWeekend, getDayOfTheWeekIndex } from \"../services/dayHelper\";\r\nimport { FEATURES, EnrolmentFeature } from \"../configuration\";\r\nimport {\r\n AbsenceDayTotalViewModel,\r\n AbsenceRecordViewModel,\r\n AcademicResultViewModel,\r\n BehaviourSummaryViewModel,\r\n EventViewModel,\r\n FileDownloadViewModel,\r\n PayableFinanceRecordViewModel,\r\n StudentEnrolmentViewModel,\r\n SuccessfulPaymentViewModel,\r\n TimetableSummaryViewModel\r\n} from \"./api\";\r\nimport { EnrolmentStatus, getEnrolmentStatusDescriptor } from \"./enums\";\r\n\r\ntype EnrolmentCommon = Omit;\r\n\r\nexport class Enrolment implements EnrolmentCommon {\r\n features: string[];\r\n isUserPPAOForStudent: boolean;\r\n school: string;\r\n schoolLogoUri: string;\r\n schoolCode: string;\r\n schoolEmail: string;\r\n schoolUrl: string;\r\n enrolled: string;\r\n rollClass: string;\r\n year: string;\r\n daysAbsentThisCalendarYear: number;\r\n attendancePercentageThisCalendarYear: number;\r\n timetable: TimetableSummaryViewModel;\r\n assessmentPlanners: FileDownloadViewModel[];\r\n upcomingEvents: EventViewModel[];\r\n examTimetables: FileDownloadViewModel[];\r\n behaviours: BehaviourSummaryViewModel[];\r\n absenceRecords: AbsenceRecordViewModel[];\r\n absenceTotals: AbsenceDayTotalViewModel[];\r\n academicResults: AcademicResultViewModel[];\r\n absenceRecordsWithoutReason: number;\r\n enrolmentStatus: EnrolmentStatus;\r\n enrolmentStatusDescription: string;\r\n isActiveEnrolment: boolean;\r\n\r\n financeRecordsDue: FinanceRecord[];\r\n financeRecordsPaid: FinanceRecord[];\r\n anyFinanceRecords: boolean;\r\n contactSchoolUrl: string;\r\n\r\n constructor(data: StudentEnrolmentViewModel) {\r\n angular.extend(this, data);\r\n\r\n this.financeRecordsDue = data.financeRecordsDue.map(f => new FinanceRecord(f));\r\n\r\n this.financeRecordsPaid = data.financeRecordsPaid.map(f => new FinanceRecord(f));\r\n\r\n this.anyFinanceRecords = this.financeRecordsDue.length + this.financeRecordsPaid.length > 0;\r\n\r\n this.enrolmentStatusDescription = getEnrolmentStatusDescriptor(data.enrolmentStatus).name;\r\n this.isActiveEnrolment = data.enrolmentStatus === EnrolmentStatus.Active;\r\n }\r\n\r\n getTodaysTimetableOrMondaysIfWeekend() {\r\n if (!this.timetable) return;\r\n\r\n var dayNumberToShow;\r\n\r\n if (isWeekend()) {\r\n dayNumberToShow = 1;\r\n } else {\r\n dayNumberToShow = getDayOfTheWeekIndex();\r\n }\r\n\r\n return this.timetable.days.find(function (day) {\r\n return day.dayOfWeekOrder === dayNumberToShow;\r\n });\r\n }\r\n\r\n getAbsenceRecordForId(absenceId) {\r\n return this.absenceRecords.find(absence => absence.studentAbsenceId === parseInt(absenceId, 10));\r\n }\r\n\r\n getNumberOfOutstandingInvoices() {\r\n return this.getInvoicesWithAmountsOwing().length;\r\n }\r\n\r\n getOutstandingInvoicesTotal() {\r\n return this.getInvoicesWithAmountsOwing().reduce((acc, r) => acc + r.amountOwing, 0);\r\n }\r\n\r\n private getInvoicesWithAmountsOwing() {\r\n return this.financeRecordsDue.filter(r => r.amountOwing > 0);\r\n }\r\n\r\n getFinanceRecordsSelectedForPayment(): PayableFinanceRecordViewModel[] {\r\n return this.financeRecordsDue.filter(financeRecord => {\r\n return financeRecord.isSelectedForPayment;\r\n });\r\n }\r\n\r\n getFinanceRecordsWithPaymentAmountGreaterThanAmountOwing() {\r\n return this.getFinanceRecordsSelectedForPayment().filter(r => r.paymentAmount > r.amountOwing);\r\n }\r\n\r\n getFinanceRecordsSelectedForPaymentTotal() {\r\n return this.getFinanceRecordsSelectedForPayment().reduce(function (accumulator, financeRecord) {\r\n return accumulator + financeRecord.paymentAmount;\r\n }, 0);\r\n }\r\n\r\n recordCurrentPayments(paymentDate, successfulPayments: SuccessfulPaymentViewModel[]) {\r\n var self = this;\r\n successfulPayments\r\n .map(function (successfulPayment) {\r\n return {\r\n paymentAmount: successfulPayment.amount,\r\n paymentDate: paymentDate,\r\n invoiceNumber: successfulPayment.invoiceNumber,\r\n paymentReceipt: successfulPayment.receiptNumber\r\n };\r\n })\r\n .forEach(function (successfulPayment) {\r\n var recordToAddPaymentTo = self.getFinancialRecordDueForInvoiceNumber(successfulPayment.invoiceNumber);\r\n recordToAddPaymentTo.pendingPayments.push(successfulPayment);\r\n\r\n // set payment amount to 0 if overpaid\r\n recordToAddPaymentTo.paymentAmount = Math.max(recordToAddPaymentTo.paymentAmount - successfulPayment.paymentAmount, 0);\r\n recordToAddPaymentTo.amountOwing = recordToAddPaymentTo.paymentAmount;\r\n });\r\n }\r\n\r\n getFinancialRecordDueForInvoiceNumber(invoiceNumber) {\r\n var resultList = this.financeRecordsDue.filter(function (financeRecord) {\r\n return financeRecord.invoiceNumber === invoiceNumber;\r\n });\r\n return resultList[0];\r\n }\r\n\r\n attendanceAvailable() {\r\n return this.isFeatureAvailable(FEATURES.ATTENDANCE);\r\n }\r\n\r\n behaviourAvailable() {\r\n return this.isFeatureAvailable(FEATURES.BEHAVIOUR);\r\n }\r\n\r\n financeAvailable() {\r\n return this.isFeatureAvailable(FEATURES.FINANCE);\r\n }\r\n\r\n upcomingEventsAvailable() {\r\n return this.isFeatureAvailable(FEATURES.UPCOMING_EVENTS);\r\n }\r\n\r\n examTimetableAvailable() {\r\n return this.isFeatureAvailable(FEATURES.EXAM_TIMETABLE);\r\n }\r\n\r\n assessmentPlannerAvailable() {\r\n return this.isFeatureAvailable(FEATURES.ASSESSMENT_PLANNER);\r\n }\r\n\r\n downloadsAvailable() {\r\n return this.examTimetableAvailable() || this.assessmentPlannerAvailable();\r\n }\r\n\r\n timetableAvailable() {\r\n return this.isFeatureAvailable(FEATURES.TIMETABLE);\r\n }\r\n\r\n reportAvailable() {\r\n return this.isFeatureAvailable(FEATURES.ACADEMIC_REPORTS);\r\n }\r\n\r\n isFeatureAvailable(featureName: EnrolmentFeature) {\r\n return this.features.some(feature => feature === featureName.toString());\r\n }\r\n\r\n timetableOrReportOrDownloadsVisible() {\r\n return this.timetableAvailable() || this.reportAvailable() || this.downloadsAvailable();\r\n }\r\n}\r\n","import angular from \"angular\";\r\nimport moment from \"moment\";\r\nimport { FEATURES, AVATAR_NOPHOTO_URL, StudentFeature } from \"../configuration\";\r\nimport { Enrolment } from \"./enrolment\";\r\nimport {\r\n StudentViewModel,\r\n DelegateViewerViewModel,\r\n AddressViewModel,\r\n UpdatedStudentDetailsViewModel,\r\n UpdatedStudentMedicalConditionsViewModel,\r\n EnrolmentHistoryViewModel,\r\n MedicalConditionViewModel,\r\n AcademicYearArchiveViewModel\r\n} from \"./api\";\r\n\r\ntype StudentCommon = Omit;\r\n\r\nexport class Student implements StudentCommon {\r\n isUserPPAOForStudent: boolean;\r\n features: StudentFeature[];\r\n oneSchoolId: string;\r\n givenNames: string;\r\n lastName: string;\r\n dateOfBirth: string;\r\n hasFinishedSchool: boolean;\r\n finisedSchoolDate: string;\r\n gender: string;\r\n delegateViewers: DelegateViewerViewModel[];\r\n postalAddress: AddressViewModel;\r\n residentialAddress: AddressViewModel;\r\n updatedDetails: UpdatedStudentDetailsViewModel;\r\n updatedMedicalConditions: UpdatedStudentMedicalConditionsViewModel;\r\n photoUrl: string;\r\n fullName: string;\r\n hasSchoolPhoto: boolean;\r\n residesWithParent: boolean;\r\n\r\n enrolments: Enrolment[];\r\n enrolmentHistory: EnrolmentHistoryViewModel[];\r\n medicalConditions: MedicalConditionViewModel[];\r\n academicYearArchives: AcademicYearArchiveViewModel[];\r\n\r\n photoContentUrl: string; // need to load images via XHR and store here for display\r\n\r\n constructor(\r\n data: StudentViewModel,\r\n public isDelegated: boolean,\r\n isMobileApp: boolean\r\n ) {\r\n angular.extend(this, data);\r\n\r\n this.dateOfBirth = stripTime(this.dateOfBirth, isMobileApp);\r\n this.enrolments = data.enrolments.map(e => new Enrolment(e));\r\n }\r\n\r\n displayName() {\r\n return this.givenNames + \" \" + this.lastName;\r\n }\r\n\r\n firstName() {\r\n return this.givenNames;\r\n }\r\n\r\n studentDetailsAvailable() {\r\n return this.isFeatureAvailable(FEATURES.STUDENT_DETAILS);\r\n }\r\n\r\n enrolmentHistoryAvailable() {\r\n return this.isFeatureAvailable(FEATURES.ENROLMENT_HISTORY);\r\n }\r\n\r\n consentRequestsAvailable() {\r\n return this.isFeatureAvailable(FEATURES.CONSENT_REQUESTS);\r\n }\r\n\r\n isFeatureAvailable(featureName: StudentFeature) {\r\n return this.features.some(feature => feature === featureName);\r\n }\r\n\r\n photoUrlOrPlaceholder() {\r\n return this.photoUrl || AVATAR_NOPHOTO_URL;\r\n }\r\n\r\n hasPhoto() {\r\n return !!this.photoUrl;\r\n }\r\n\r\n public get isPhotoFeatureEnabled() {\r\n return this.features.some(f => f === \"Student Photo\");\r\n }\r\n}\r\n\r\n// 2001-01-01T00:00:00 -> 2001-01-01\r\nfunction stripTime(dateStringWithTime, isMobileApp: boolean) {\r\n if (isMobileApp) {\r\n return moment(dateStringWithTime).toDate();\r\n }\r\n return dateStringWithTime.substring(0, 10);\r\n}\r\n","import angular from \"angular\";\r\nimport { Student } from \"./student\";\r\nimport { Enrolment } from \"./enrolment\";\r\nimport {\r\n UserViewModel,\r\n AbsenceSummaryViewModel,\r\n UpcomingEventsSummaryViewModel,\r\n PaymentsSummaryViewModel,\r\n AdminViewViewModel,\r\n AddressViewModel,\r\n ContactViewModel,\r\n UpdatedDetailsViewModel,\r\n SchoolViewModel,\r\n StudentPendingApprovalViewModel\r\n} from \"./api\";\r\n\r\ninterface StudentEnrolment {\r\n student: Student;\r\n enrolment: Enrolment;\r\n}\r\n\r\nexport class User implements UserViewModel {\r\n absenceSummary: AbsenceSummaryViewModel;\r\n upcomingEventsSummary: UpcomingEventsSummaryViewModel;\r\n paymentsSummary: PaymentsSummaryViewModel;\r\n isAdminView: boolean;\r\n adminViewDetails: AdminViewViewModel;\r\n\r\n oneSchoolParentId: number;\r\n firstName: string;\r\n lastName: string;\r\n redirectToAddStudentPage: boolean;\r\n residentialAddress: AddressViewModel;\r\n postalAddress: AddressViewModel;\r\n contacts: ContactViewModel[];\r\n emailAddress: string;\r\n pendingEmailAddress: string;\r\n mobileNumber: string;\r\n updatedDetails: UpdatedDetailsViewModel;\r\n schools: SchoolViewModel[];\r\n pendingStudents: StudentPendingApprovalViewModel[];\r\n pendingDelegatedStudents: StudentPendingApprovalViewModel[];\r\n pendingTermsAndConditions: string[];\r\n isPpao: boolean;\r\n status: string;\r\n studentPhotosEnabled: boolean;\r\n studentPhotosTermsAndConditionsKey: string;\r\n lastLoginTimestamp: string;\r\n isActive: boolean;\r\n\r\n students: Student[];\r\n delegatedStudents: Student[];\r\n allAvailableStudents: Student[];\r\n numRedactedDelegatedStudents: number;\r\n numRedactedStudents: number;\r\n consentRequestsEnabled: boolean;\r\n\r\n constructor(data: UserViewModel, isMobileApp: boolean) {\r\n angular.extend(this, data);\r\n\r\n this.delegatedStudents = data.delegatedStudents.map(s => new Student(s, true, isMobileApp));\r\n this.students = data.students.map(s => new Student(s, false, isMobileApp));\r\n this.allAvailableStudents = this.delegatedStudents.concat(this.students);\r\n }\r\n\r\n getStudentForId(studentId) {\r\n return this.allAvailableStudents.find(student => student.oneSchoolId === studentId);\r\n }\r\n\r\n getEnrolment(studentId: string, centreCode: string): StudentEnrolment {\r\n const student = this.getStudentForId(studentId);\r\n const enrolment = student?.enrolments.find(e => e.schoolCode == centreCode);\r\n if (student != null && enrolment != null) {\r\n return { student, enrolment };\r\n }\r\n }\r\n\r\n hasPendingTermsAndConditions() {\r\n return this.pendingTermsAndConditions && this.pendingTermsAndConditions.length > 0;\r\n }\r\n\r\n hasAnyStudents() {\r\n return this.hasAnyQpaoStudents() || this.hasAnyDvStudents();\r\n }\r\n\r\n hasAnyQpaoStudents() {\r\n return (this.students && this.students.length != 0) || (this.pendingStudents && this.pendingStudents.length != 0) || this.numRedactedStudents > 0;\r\n }\r\n\r\n hasAnyDvStudents() {\r\n return (this.delegatedStudents && this.delegatedStudents.length != 0) || (this.pendingDelegatedStudents && this.pendingDelegatedStudents.length != 0) || this.numRedactedDelegatedStudents > 0;\r\n }\r\n\r\n activeStudentsCount() {\r\n return this.students.length + this.delegatedStudents.length;\r\n }\r\n\r\n isAccountOwner() {\r\n return this.isPpao;\r\n }\r\n\r\n isDelegatedViewer() {\r\n return !this.isAccountOwner();\r\n }\r\n\r\n shouldRedirectToAddStudentPage() {\r\n return this.redirectToAddStudentPage && !this.hasPendingTermsAndConditions();\r\n }\r\n\r\n cancelRedirectToAddStudentPage() {\r\n this.redirectToAddStudentPage = false;\r\n }\r\n}\r\n","import { app as services } from \"../app.module\";\r\nimport moment from \"moment\";\r\nimport { User } from \"../models/user\";\r\nimport { ILocationService, ILogService, IPromise } from \"angular\";\r\nimport { AUTH_COOKIE_NAME, ADMIN_VIEW_COOKIES, REMEMBER_EMAIL_KEY } from \"../configuration\";\r\nimport { ResultStatusCode } from \"../models/enums\";\r\nimport { UserViewModel, StudentViewModel, UpdatedStudentMedicalDetailsWriteModel, AssociateAdditionalInvitationResponse, AddStudentRelationRequest, AddStudentRelationResponse } from \"../models/api\";\r\nimport { IApiService } from \"./apiServiceProvider\";\r\nimport { Student } from \"../models/student\";\r\nimport { IDeviceService } from \"./deviceServiceProvider\";\r\nimport { BlobService } from \"./blobService\";\r\nimport { CapacitorCookies } from \"@capacitor/core\";\r\nimport { ICommonService } from \"./common\";\r\nimport { ILocalStorageService } from \"angular-local-storage\";\r\nimport angular from \"angular\";\r\nimport { ICookieService } from \"./cookieService\";\r\nimport { PhotoService } from \"./photoService\";\r\nimport { ICsrfTokenService } from \"./csrfTokenService\";\r\n\r\nconst serviceId = \"dataContext\";\r\n\r\nservices.factory(serviceId, dataContext);\r\n\r\nexport interface IDataContext {\r\n events: {\r\n userSignedIn: string;\r\n userSignedOut: string;\r\n dataRefreshed: string;\r\n };\r\n preSignIn: () => void;\r\n flagSignedIn: (email: string) => void;\r\n flagSignedOutWithoutRaisingEvent: () => IPromise;\r\n flagSignedOut: (doNotRaiseUserSignedOut: boolean) => IPromise;\r\n verifyAuthenticated: () => IPromise;\r\n isAuthenticated: () => boolean;\r\n onUserSignedIn: (subscriber: any) => () => void;\r\n onUserSignedOut: (subscriber: any) => () => void;\r\n onDataRefreshed: (subscriber: any) => () => void;\r\n getData: () => IPromise;\r\n saveParentDetails: (p: User) => IPromise;\r\n refreshData: () => IPromise;\r\n saveStudentRelation: (relation: AddStudentRelationRequest) => IPromise;\r\n saveStudentDetails: (student: Student) => IPromise;\r\n saveStudentMedicalConditions: (student: UpdatedStudentMedicalDetailsWriteModel) => IPromise;\r\n emailAcademicReportArchive: (studentEqId: string, academicYear: string) => IPromise;\r\n associateAdditionalRegistration: (sessionId: string) => IPromise;\r\n isAdminView: () => boolean;\r\n maybeSignInAdmin: () => void;\r\n clearAuthentication: () => IPromise;\r\n}\r\n\r\nfunction dataContext(\r\n common: ICommonService,\r\n apiService: IApiService,\r\n $q: ng.IQService,\r\n $rootScope,\r\n $log: ILogService,\r\n $location: ILocationService,\r\n localStorageService: ILocalStorageService,\r\n deviceService: IDeviceService,\r\n blobService: BlobService,\r\n photoService: PhotoService,\r\n cookieService: ICookieService,\r\n csrfTokenService: ICsrfTokenService\r\n): IDataContext {\r\n \"ngInject\";\r\n let cachedData: IPromise = $q.defer().promise;\r\n\r\n var events = {\r\n userSignedIn: \"auth.userSignedIn\",\r\n userSignedOut: \"auth.userSignedOut\",\r\n dataRefreshed: \"data.refreshed\"\r\n };\r\n\r\n return {\r\n events: events,\r\n preSignIn: preSignIn,\r\n flagSignedIn: flagSignedIn,\r\n flagSignedOutWithoutRaisingEvent: flagSignedOutWithoutRaisingEvent,\r\n flagSignedOut: flagSignedOut,\r\n verifyAuthenticated: verifyAuthenticated,\r\n isAuthenticated: isAuthenticated,\r\n onUserSignedIn: onUserSignedIn,\r\n onUserSignedOut: onUserSignedOut,\r\n onDataRefreshed: onDataRefreshed,\r\n getData: getData,\r\n saveParentDetails: saveParentDetails,\r\n refreshData: refreshData,\r\n saveStudentRelation: saveStudentRelation,\r\n saveStudentDetails: saveStudentDetails,\r\n saveStudentMedicalConditions: saveStudentMedicalConditions,\r\n emailAcademicReportArchive: emailAcademicReportArchive,\r\n associateAdditionalRegistration: associateAdditionalRegistration,\r\n isAdminView: isAdminView,\r\n maybeSignInAdmin: maybeSignInAdmin,\r\n clearAuthentication: clearAuthentication\r\n };\r\n\r\n function maybeSignInAdmin() {\r\n if (deviceService.isMobileApp) return;\r\n\r\n if (getCookie(ADMIN_VIEW_COOKIES.IS_ADMIN_VIEW)) {\r\n flagSignedIn(null);\r\n }\r\n }\r\n\r\n function preSignIn() {\r\n localStorageService.set(AUTH_COOKIE_NAME, false);\r\n cachedData = $q.defer().promise;\r\n }\r\n\r\n function flagSignedIn(email) {\r\n localStorageService.set(AUTH_COOKIE_NAME, true);\r\n if (deviceService.isMobileApp) {\r\n localStorageService.set(REMEMBER_EMAIL_KEY, email);\r\n } else if (getCookie(ADMIN_VIEW_COOKIES.IS_ADMIN_VIEW)) {\r\n Object.keys(ADMIN_VIEW_COOKIES)\r\n .map(k => ADMIN_VIEW_COOKIES[k])\r\n .forEach(key => {\r\n var cookieValue = getCookie(key);\r\n if (cookieValue) {\r\n sessionStorage.setItem(key, cookieValue);\r\n deleteCookie(key);\r\n }\r\n });\r\n }\r\n }\r\n\r\n function getCookie(key: string) {\r\n var keyAndEquals = key + \"=\";\r\n var ca = document.cookie.split(\";\");\r\n for (var i = 0; i < ca.length; i++) {\r\n var c = ca[i];\r\n while (c.charAt(0) == \" \") c = c.substring(1, c.length);\r\n if (c.indexOf(keyAndEquals) == 0) return c.substring(keyAndEquals.length, c.length);\r\n }\r\n return null;\r\n }\r\n\r\n function deleteCookie(key: string) {\r\n cookieService.deleteCookie(key);\r\n }\r\n\r\n function flagSignedOutWithoutRaisingEvent() {\r\n return flagSignedOut(true);\r\n }\r\n\r\n function flagSignedOut(doNotRaiseUserSignedOut: boolean) {\r\n cachedData = $q.defer().promise;\r\n localStorageService.remove(REMEMBER_EMAIL_KEY);\r\n\r\n if (!doNotRaiseUserSignedOut) {\r\n raiseUserSignedOut();\r\n }\r\n\r\n return clearAuthentication();\r\n }\r\n\r\n function clearAuthentication() {\r\n var deferred = $q.defer();\r\n\r\n localStorageService.set(AUTH_COOKIE_NAME, false);\r\n\r\n if (!deviceService.isMobileApp) {\r\n $log.debug(\"dataContext - Clear Authentication Cookies\");\r\n Object.keys(ADMIN_VIEW_COOKIES)\r\n .map(k => ADMIN_VIEW_COOKIES[k])\r\n .forEach(key => {\r\n sessionStorage.removeItem(key);\r\n deleteCookie(key);\r\n });\r\n deferred.resolve();\r\n } else {\r\n $log.debug(\"dataContext - Clear Mobile Authentication Cookies\");\r\n // Clear All Cookies\r\n CapacitorCookies.getCookies().then(cookies => {\r\n const cookieDeletePromises = Object.keys(cookies)\r\n // keep trusted device cookie\r\n .filter(k => k !== \"PingIdTrustedDevice\")\r\n .map(key => \r\n CapacitorCookies.deleteCookie({key})\r\n );\r\n \r\n $q.all(cookieDeletePromises)\r\n .catch(response => {\r\n $log.error(\"dataContext - Unable to clear cookies\", angular.toJson(response));\r\n })\r\n .finally(() => {\r\n deferred.resolve();\r\n });\r\n })\r\n }\r\n\r\n return deferred.promise;\r\n }\r\n\r\n function verifyAuthenticated() {\r\n var deferred = $q.defer();\r\n\r\n fetchData()\r\n .then(function (user) {\r\n if (user.hasPendingTermsAndConditions()) {\r\n $location.path(\"/termsAndConditions\");\r\n deferred.reject();\r\n return;\r\n }\r\n\r\n raiseUserSignedIn(user);\r\n deferred.resolve();\r\n })\r\n .catch(response => {\r\n $log.error(\"dataContext - Unable to verify authentication\", angular.toJson(response));\r\n deferred.reject();\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n function getData() {\r\n return cachedData;\r\n }\r\n\r\n function refreshData() {\r\n return fetchData();\r\n }\r\n\r\n function isAuthenticated() {\r\n return !!localStorageService.get(AUTH_COOKIE_NAME);\r\n }\r\n\r\n function isAdminView() {\r\n return !deviceService.isMobileApp && !!sessionStorage.getItem(ADMIN_VIEW_COOKIES.IS_ADMIN_VIEW);\r\n }\r\n\r\n function raiseUserSignedIn(data: User) {\r\n common.broadcast(events.userSignedIn, data);\r\n }\r\n\r\n function onUserSignedIn(subscriber) {\r\n return $rootScope.$on(events.userSignedIn, subscriber);\r\n }\r\n\r\n function raiseUserSignedOut() {\r\n common.broadcast(events.userSignedOut);\r\n }\r\n\r\n function onUserSignedOut(subscriber) {\r\n return $rootScope.$on(events.userSignedOut, subscriber);\r\n }\r\n\r\n function onDataRefreshed(subscriber) {\r\n return $rootScope.$on(events.dataRefreshed, subscriber);\r\n }\r\n\r\n async function refreshTokenAndFetchUser() {\r\n await csrfTokenService.ensureCsrfToken();\r\n return apiService.getUser();\r\n }\r\n\r\n function fetchData(): IPromise {\r\n $log.debug(\"Fetching user data\");\r\n $rootScope.showFullScreenLoadingPane();\r\n const user = isAdminView()\r\n ? getAdminViewUser()\r\n : refreshTokenAndFetchUser();\r\n\r\n cachedData = user\r\n .then(response => {\r\n const data = response.data;\r\n if (response.status == 200) {\r\n var user = new User(data, deviceService.isMobileApp);\r\n loadStudentImages(user).then(() => {\r\n common.broadcast(events.dataRefreshed, user);\r\n });\r\n return user;\r\n }\r\n throw new Error(\"User is not logged in.\");\r\n })\r\n .catch(error => {\r\n throw error;\r\n })\r\n .finally(() => $rootScope.hideFullScreenLoadingPane());\r\n return cachedData;\r\n }\r\n\r\n function getAdminViewUser() {\r\n var schoolUserId = sessionStorage.getItem(ADMIN_VIEW_COOKIES.SCHOOL_USER_ID);\r\n var ppaoId = sessionStorage.getItem(ADMIN_VIEW_COOKIES.PARENT_ID);\r\n var centreCode = sessionStorage.getItem(ADMIN_VIEW_COOKIES.CENTRE_CODE);\r\n\r\n return apiService.getAdminViewUser(schoolUserId, ppaoId, centreCode);\r\n }\r\n\r\n function saveParentDetails(p: User) {\r\n return apiService.saveUser(p).then(\r\n res => res.data,\r\n res => $q.reject(res.data)\r\n );\r\n }\r\n\r\n function saveStudentRelation(relation) {\r\n return apiService.saveStudentRelation(relation).then(r => r.data);\r\n }\r\n\r\n function saveStudentDetails(student: Student) {\r\n var postData = {\r\n oneSchoolId: student.oneSchoolId,\r\n postalAddress: student.postalAddress,\r\n residentialAddress: student.residentialAddress,\r\n dateOfBirth: getUtcDate(student.dateOfBirth)\r\n };\r\n\r\n return apiService.saveStudent(postData).then(r => r.data);\r\n }\r\n\r\n function getUtcDate(date: Date | string) {\r\n if (date == undefined) {\r\n return undefined;\r\n }\r\n const dateObject = moment(date).toDate();\r\n const utcDate = moment.utc(Date.UTC(dateObject.getFullYear(), dateObject.getMonth(), dateObject.getDate()));\r\n return utcDate;\r\n }\r\n\r\n function saveStudentMedicalConditions(student: UpdatedStudentMedicalDetailsWriteModel) {\r\n return apiService.saveStudentMedicalConditions(student).then(r => r.data);\r\n }\r\n\r\n function emailAcademicReportArchive(studentEqId, academicYear) {\r\n return apiService\r\n .emailAcademicReportArchive({\r\n eqId: studentEqId,\r\n academicYear: academicYear\r\n })\r\n .then(r => r.data);\r\n }\r\n\r\n async function associateAdditionalRegistration(sessionId: string): Promise {\r\n try {\r\n var result = await apiService.associateAdditionalInvitation({\r\n sessionId: sessionId\r\n });\r\n\r\n return {\r\n valid: result.data.resultCode === ResultStatusCode.Valid,\r\n invalid: result.data.resultCode === ResultStatusCode.Invalid,\r\n codeAlreadyUsed: result.data.resultCode === ResultStatusCode.CodeAlreadyUsed,\r\n userNotAccountOwner: result.data.resultCode === ResultStatusCode.UserNotAccountOwner,\r\n errorMessage: result.data.errorMessage\r\n };\r\n } catch {\r\n return {\r\n valid: false,\r\n invalid: true,\r\n codeAlreadyUsed: false,\r\n userNotAccountOwner: false\r\n };\r\n }\r\n }\r\n\r\n function loadStudentImages(user: User) {\r\n const promises = [];\r\n user.students.forEach(function (s: Student) {\r\n if (s.photoContentUrl) {\r\n return;\r\n }\r\n\r\n promises.push(loadStudentImage(s));\r\n });\r\n return $q.all(promises);\r\n }\r\n\r\n function loadStudentImage(s: Student) {\r\n const deferred = $q.defer();\r\n\r\n if (s.hasPhoto()) {\r\n photoService\r\n .downloadPhoto(s.photoUrlOrPlaceholder())\r\n .then(result => {\r\n s.photoContentUrl = result;\r\n })\r\n .finally(() => {\r\n deferred.resolve();\r\n });\r\n } else {\r\n blobService.createBlobFromDataUrl(s.photoUrlOrPlaceholder(), \"image/png\").then(blob => {\r\n blobService\r\n .getPhotoContentUrl(blob)\r\n .then(url => {\r\n s.photoContentUrl = url;\r\n })\r\n .finally(() => {\r\n deferred.resolve();\r\n });\r\n });\r\n }\r\n return deferred.promise;\r\n }\r\n}\r\n\r\nexport interface IAssociateAdditionalRegistration {\r\n valid: boolean;\r\n invalid: boolean;\r\n codeAlreadyUsed: boolean;\r\n userNotAccountOwner: boolean;\r\n errorMessage?: string;\r\n}\r\n","import { app as services } from \"../app.module\";\r\nimport { NewDelegateViewerWriteModel, DelegateViewerViewModel, UpdateDelegateViewerWriteModel, UpdateDelegateViewerStatusWriteModel } from \"../models/api\";\r\nimport { IApiService } from \"./apiServiceProvider\";\r\n\r\nvar serviceId = \"delegateViewer\";\r\n\r\nexport class DelegateViewerService {\r\n constructor(private apiService: IApiService) {\r\n \"ngInject\";\r\n }\r\n\r\n sendInvite(viewer: NewDelegateViewerWriteModel) {\r\n return this.apiService.delegatedViewerInvite(viewer).then(r => r.data);\r\n }\r\n\r\n updateViewer(viewer: DelegateViewerViewModel, studentId: string) {\r\n var updateObject: UpdateDelegateViewerWriteModel = {\r\n studentId: studentId,\r\n delegateViewer: viewer\r\n };\r\n\r\n return this.apiService.delegatedViewerUpdate(updateObject).then(r => r.data);\r\n }\r\n\r\n resendInvite(viewer: DelegateViewerViewModel) {\r\n return this.apiService.delegatedViewerResendInvite(viewer).then(r => r.data);\r\n }\r\n\r\n updateStatus(token: string, studentId: string, status: string) {\r\n var updateObject: UpdateDelegateViewerStatusWriteModel = {\r\n studentId: studentId,\r\n token: token,\r\n status: status\r\n };\r\n\r\n return this.apiService.delegatedViewerChangeStatus(updateObject).then(r => r.data);\r\n }\r\n\r\n approve(studentId, delegatedViewer) {\r\n return this.updateStatus(delegatedViewer.token, studentId, \"Active\");\r\n }\r\n}\r\n\r\nservices.service(serviceId, DelegateViewerService);\r\n","import {app as services} from '../app.module';\r\n\r\nconst serviceId = \"featuresService\";\r\nservices.factory(serviceId, [featuresService]);\r\n\r\nfunction featuresService() {\r\n return {\r\n hasAccessToEnrolmentHistory: hasAccessToEnrolmentHistory,\r\n hasAccessToStudentDetails: hasAccessToStudentDetails\r\n };\r\n\r\n function hasAccessToEnrolmentHistory(features) {\r\n return hasAccessToFeature(features, \"Enrolment History\");\r\n }\r\n\r\n function hasAccessToStudentDetails(features) {\r\n return hasAccessToFeature(features, \"Student Details\");\r\n }\r\n\r\n function hasAccessToFeature(features, featureName) {\r\n return features.includes(featureName);\r\n }\r\n}\r\n","import angular from \"angular\";\r\nimport { app as services } from \"../app.module\";\r\n\r\nconst serviceId = \"focusService\";\r\nservices.factory(serviceId, [\"$document\", \"$timeout\", focusService]);\r\n\r\nfunction focusService($document, $timeout) {\r\n \"ngInject\";\r\n return {\r\n setFocusTo: setFocusTo\r\n };\r\n\r\n function setFocusTo(elementId) {\r\n $timeout(function () {\r\n const successDiv = angular.element(document.getElementById(elementId));\r\n $document.scrollToElement(successDiv, 0, 0);\r\n }, 100);\r\n }\r\n}\r\n","import { IQService, extend } from \"angular\";\r\nimport { app as services } from \"../app.module\";\r\nimport { IApiService } from \"./apiServiceProvider\";\r\nimport { VerifyAccountOwnerInvitationCodeResponse } from \"../models/api\";\r\n\r\nvar serviceId = \"invitationService\";\r\nservices.factory(serviceId, invitationService);\r\n\r\nexport interface IValidateInvitationCodeResponse extends VerifyAccountOwnerInvitationCodeResponse {\r\n valid: boolean;\r\n invalid: boolean;\r\n codeAlreadyUsed: boolean;\r\n userAlreadyAccountOwner: boolean;\r\n looksLikeAStudentEqId: boolean;\r\n}\r\n\r\nfunction invitationService(apiService: IApiService, $q: IQService) {\r\n \"ngInject\";\r\n var VALID = 0,\r\n INVALID = 1,\r\n ALREADY_USED = 2,\r\n ALREADY_REGISTERED = 3,\r\n LOOKS_LIKE_A_STUDENT_EQID = 4;\r\n\r\n return {\r\n validateInvitationCode: validateInvitationCode\r\n };\r\n\r\n function codesLooksLikeAStudentEqId(code) {\r\n if (!code) return false;\r\n if (code.length !== 11) return false;\r\n\r\n // 10 digits followed by a character\r\n var studentEqIdRegEx = /\\d{10}\\w{1}/g;\r\n return studentEqIdRegEx.test(code);\r\n }\r\n\r\n function validateInvitationCode(code) {\r\n const deferred = $q.defer();\r\n\r\n if (codesLooksLikeAStudentEqId(code)) {\r\n deferred.resolve(\r\n buildResponse({\r\n resultCode: LOOKS_LIKE_A_STUDENT_EQID\r\n })\r\n );\r\n } else {\r\n apiService\r\n .accountOwnerInvitation({\r\n code: code\r\n })\r\n .then(function (response) {\r\n deferred.resolve(buildResponse(response.data));\r\n });\r\n }\r\n\r\n return deferred.promise;\r\n }\r\n\r\n function buildResponse(data): IValidateInvitationCodeResponse {\r\n const response: IValidateInvitationCodeResponse = { ...data };\r\n\r\n response.valid = response.resultCode === VALID;\r\n response.invalid = response.resultCode === INVALID;\r\n response.codeAlreadyUsed = response.resultCode === ALREADY_USED;\r\n response.userAlreadyAccountOwner = response.resultCode === ALREADY_REGISTERED;\r\n response.looksLikeAStudentEqId = response.resultCode === LOOKS_LIKE_A_STUDENT_EQID;\r\n\r\n return response;\r\n }\r\n}\r\n","import {app as services} from '../app.module';\r\n\r\nvar serviceId = 'phoneService';\r\n services.factory(serviceId, [phoneService]);\r\n\r\n function phoneService() {\r\n return {\r\n isAValidPhoneNumber: isAValidPhoneNumber\r\n };\r\n\r\n function isNumeric(char) {\r\n return /\\d/.test(char);\r\n }\r\n\r\n function getDigitsOnlyString(phoneNumber: string) {\r\n var characters = phoneNumber.split('');\r\n var digitsOnly = characters.filter(function (char) {\r\n return isNumeric(char);\r\n });\r\n\r\n var digitsOnlyString = digitsOnly.join('');\r\n return digitsOnlyString;\r\n }\r\n\r\n // all phone number must contain 10 digits (other characters will be stripped server side)\r\n function isAValidPhoneNumber(phoneNumber, allowedPrefixes) {\r\n // must contain 10 digits (other characters will be stripped server side)\r\n // and start with 02, 03, 07, 08, 13 or 18\r\n\r\n // allow blank (required will take care of validation)\r\n if (phoneNumber === null || phoneNumber === undefined) return true;\r\n if (phoneNumber === '') return true;\r\n\r\n if (phoneNumber.length < 10) return false;\r\n\r\n let isInternational = phoneNumber.charAt(0) === '+';\r\n\r\n let phoneNumberToCheck = (isInternational ? phoneNumber.substr(1) : phoneNumber).replace(/ /g,'');\r\n var digitsOnlyString = getDigitsOnlyString(phoneNumberToCheck);\r\n if (digitsOnlyString !== phoneNumberToCheck) return false;\r\n\r\n if (isInternational) {\r\n return phoneNumber.length <= 50;\r\n }\r\n\r\n // Local mobile numbers should be exactly 10 digits\r\n if (digitsOnlyString.length !== 10) return false;\r\n\r\n return allowedPrefixes.some(function (prefix) {\r\n return digitsOnlyString.indexOf(prefix) === 0;\r\n });\r\n }\r\n }","import { ILogService, IQService } from \"angular\";\r\nimport { app as services } from \"../app.module\";\r\nimport { IApiService } from \"./apiServiceProvider\";\r\nimport { BlobService } from \"./blobService\";\r\nimport { IDeviceService } from \"./deviceServiceProvider\";\r\n\r\nvar serviceId = \"photoService\";\r\n\r\nexport class PhotoService {\r\n constructor(\r\n private $log: ILogService,\r\n private $q: IQService,\r\n private apiService: IApiService,\r\n private deviceService: IDeviceService,\r\n private blobService: BlobService\r\n ) {\r\n \"ngInject\";\r\n }\r\n\r\n downloadPhoto(url: string) {\r\n const deferred = this.$q.defer();\r\n this.$log.debug(\"photoService - Dowloading Photo\");\r\n this.apiService\r\n .downloadPhoto(url)\r\n .then(response => {\r\n // --------------------------------------------------------------------------------\r\n // Blob value is encoded using base 64 string\r\n // See: https://github.com/ionic-team/capacitor/issues/6126\r\n // --------------------------------------------------------------------------------\r\n if (this.deviceService.isMobileApp) {\r\n const photoContentUrl = `data:${response.headers[\"Content-Type\"] ?? \"image/png\"};base64,${response.data}`;\r\n deferred.resolve(photoContentUrl);\r\n } else {\r\n this.$log.debug(\"photoService - Getting Photo Content\", response);\r\n const photoBlob = response.data as Blob;\r\n this.blobService\r\n .getPhotoContentUrl(photoBlob)\r\n .then(url => {\r\n const photoContentUrl = url;\r\n deferred.resolve(photoContentUrl);\r\n })\r\n .catch(blobResponse => {\r\n this.$log.error(\"photoService - Getting Photo Content Failed\", blobResponse);\r\n deferred.reject();\r\n });\r\n }\r\n })\r\n .catch(response => {\r\n this.$log.error(\"photoService - Dowloading Photo Failed\", response);\r\n deferred.reject();\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n retrieveSchoolPhoto(studentId) {\r\n return this.apiService.studentUseSchoolPhoto(studentId).then(function (response) {\r\n return response.data;\r\n });\r\n }\r\n\r\n promotePhoto(studentId, type) {\r\n return this.apiService.promoteStudentPhoto(studentId, type).then(function (response) {\r\n return response.data;\r\n });\r\n }\r\n\r\n uploadPhoto(studentId: string, dataUrl: string): ng.IPromise {\r\n var base64 = dataUrl.split(\",\")[1];\r\n var data = [];\r\n data.push(`${encodeURIComponent(\"image\")}=${encodeURIComponent(base64)}`);\r\n const urlEncodedData = data.join(\"&\").replace(/%20/g, \"+\");\r\n return this.apiService.uploadStudentPhoto(studentId, urlEncodedData).then(function (response) {\r\n return response.data;\r\n });\r\n }\r\n}\r\n\r\nservices.service(serviceId, PhotoService);\r\n","import { app as services } from \"../app.module\";\r\nimport { IPromise } from \"angular\";\r\nimport UAParser from \"ua-parser-js\";\r\nimport { IDeviceService } from \"./deviceServiceProvider\";\r\nimport { IApiService } from \"./apiServiceProvider\";\r\nconst serviceId = \"platformService\";\r\n\r\nexport class platformService {\r\n constructor(private $q: ng.IQService, private $location: any, private $log: ng.ILogService, private networkService: any, private apiService: IApiService, private deviceService: IDeviceService) {\r\n \"ngInject\";\r\n }\r\n\r\n public checkVersion(): IPromise {\r\n var deferred = this.$q.defer();\r\n if (!this.deviceService.isMobileApp) {\r\n deferred.resolve();\r\n }\r\n if (this.networkService.isOnline()) {\r\n this.networkService.getIsMaintenance().then(isMaintenance => {\r\n if (!isMaintenance) {\r\n this.getClientVersion().then(clientVersion => {\r\n this.performClientVersionCheck(clientVersion).then(() => {\r\n deferred.resolve();\r\n });\r\n });\r\n } else {\r\n deferred.reject();\r\n }\r\n });\r\n }\r\n return deferred.promise;\r\n }\r\n\r\n public getClientVersion(): IPromise {\r\n var deferred = this.$q.defer();\r\n if (!this.deviceService.isMobileApp) {\r\n deferred.resolve(\"Web\");\r\n } else {\r\n this.deviceService.getAppInfo().then(appInfo => {\r\n deferred.resolve(appInfo.version);\r\n });\r\n }\r\n\r\n return deferred.promise;\r\n }\r\n\r\n private performClientVersionCheck = (clientVersion: string): ng.IPromise => {\r\n var self = this;\r\n return this.apiService.getMinimumApiVersion<{ iOS: string; android: string }>().then(response => {\r\n let data = response.data;\r\n\r\n self.$log.debug(\"App version: \" + clientVersion + \" - Minimum App version: \" + data.android);\r\n const targetVersion = this.deviceService.isIOs() ? data.iOS : data.android;\r\n if (self.versionCompare(clientVersion, targetVersion, { zeroExtend: true }) < 0) {\r\n // As routing service works with max one route parameter for detecting anonymous paths\r\n // So we have to send this versions as a single parameter with a delimeter\r\n self.$location.path(`/update/${clientVersion}|${targetVersion}`);\r\n }\r\n });\r\n };\r\n\r\n private versionCompare(currentVersion: string, requiredVersion: string, options: { lexicographical?: boolean; zeroExtend: boolean }): number {\r\n let lexicographical = options && options.lexicographical;\r\n let zeroExtend = options && options.zeroExtend;\r\n\r\n if (requiredVersion == undefined) {\r\n // If no required version supplied, assume is valid\r\n return 1;\r\n }\r\n if (currentVersion == undefined) {\r\n // If no current version, assume is not valid\r\n return -1;\r\n }\r\n\r\n // Left as : any[] as it may replace values with numbers\r\n let v1parts: any[] = currentVersion.split(\".\");\r\n let v2parts: any[] = requiredVersion.split(\".\");\r\n\r\n function isValidPart(x): boolean {\r\n return (lexicographical ? /^\\d+[A-Za-z]*$/ : /^\\d+$/).test(x);\r\n }\r\n\r\n if (!v1parts.every(isValidPart) || !v2parts.every(isValidPart)) {\r\n return NaN;\r\n }\r\n\r\n if (zeroExtend) {\r\n while (v1parts.length < v2parts.length) v1parts.push(\"0\");\r\n while (v2parts.length < v1parts.length) v2parts.push(\"0\");\r\n }\r\n\r\n if (!lexicographical) {\r\n v1parts = v1parts.map(Number);\r\n v2parts = v2parts.map(Number);\r\n }\r\n\r\n for (var i = 0; i < v1parts.length; ++i) {\r\n if (v2parts.length == i) {\r\n return 1;\r\n }\r\n\r\n if (v1parts[i] == v2parts[i]) {\r\n continue;\r\n } else if (v1parts[i] > v2parts[i]) {\r\n return 1;\r\n } else {\r\n return -1;\r\n }\r\n }\r\n\r\n if (v1parts.length != v2parts.length) {\r\n return -1;\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n public isSafariBrowserAndVersionIsLessThanOrEqualTo12(): boolean {\r\n if (this.deviceService.isMobileApp) {\r\n return false;\r\n }\r\n try {\r\n const userAgentResult = new UAParser().getResult();\r\n const bro = userAgentResult.browser;\r\n const isSafari = bro?.name?.includes(\"Safari\");\r\n if (isSafari) {\r\n const majorVersion = Number(bro.version?.substring(0, bro.version.indexOf(\".\")));\r\n const isOuOfDate = !!majorVersion && majorVersion <= 12;\r\n return isOuOfDate;\r\n }\r\n } catch {}\r\n return false;\r\n }\r\n}\r\n\r\nservices.service(serviceId, platformService);\r\n","import { app as services } from \"../app.module\";\r\nimport { IUrlResolver } from \"./urlResolver\";\r\nimport { BPointClientPaymentResponse, PayableFinanceRecordViewModel, BPointVerifyBatchResultViewModel } from \"../models/api\";\r\nimport { IDeviceService } from \"./deviceServiceProvider\";\r\nimport { IApiService } from \"./apiServiceProvider\";\r\nimport { ILogService } from \"angular\";\r\nexport type ProcessPaymentResult = BPointClientPaymentResponse;\r\n\r\ndeclare var window: any;\r\n\r\nexport class ProcessPaymentService {\r\n constructor(private $q: ng.IQService, private $log:ILogService, private apiService: IApiService, private deviceService: IDeviceService, private urlResolver: IUrlResolver) {\r\n \"ngInject\";\r\n }\r\n\r\n getPaymentAuthenticationTokens(payableFinanceRecords) {\r\n return this.apiService.paymentAuthenticationToken(payableFinanceRecords).then(r => r.data);\r\n }\r\n\r\n verifyPaymentResponse(bpointPaymentResponses: BPointClientPaymentResponse[]) {\r\n return this.apiService.verifyPaymentResponse(bpointPaymentResponses).then(r => r.data);\r\n }\r\n\r\n auditPayment(payableFinanceRecord: PayableFinanceRecordViewModel) {\r\n return this.apiService.auditPayment(payableFinanceRecord).then(r => r.data);\r\n }\r\n\r\n sendPayment(payableFinanceRecord: PayableFinanceRecordViewModel, cardNumber: string, cardExpiry: string, cardCVV: string, paymentIndex: number) {\r\n if (this.deviceService.isMobileApp) return this.sendPaymentCapacitor(payableFinanceRecord, cardNumber, cardExpiry, cardCVV, paymentIndex);\r\n return this.sendPaymentWeb(payableFinanceRecord, cardNumber, cardExpiry, cardCVV, paymentIndex);\r\n }\r\n\r\n convertDollarsToCents(dollarAmount) {\r\n // Some decimal numbers don't handle multiplying by 100 well ie. 37.55\r\n var roughDollars = dollarAmount * 100;\r\n var dollarError = roughDollars % 1;\r\n if (dollarError !== 0) {\r\n if (dollarError < 0.5) return Math.floor(roughDollars);\r\n return Math.ceil(roughDollars);\r\n }\r\n\r\n return roughDollars;\r\n }\r\n\r\n sendPaymentWeb(payableFinanceRecord: PayableFinanceRecordViewModel, cardNumber: string, cardExpiry: string, cardCVV: string, paymentIndex: number) {\r\n var deferred = this.$q.defer();\r\n var expiryMonth = String(cardExpiry).substring(0, 2);\r\n var expiryYear = String(cardExpiry).substring(2);\r\n var redirectUrl = window.location.protocol + \"//\" + window.location.host + \"/api/processpaymenthandler/paymentresponse\";\r\n\r\n var iframe = document.createElement(\"iframe\");\r\n iframe.style.display = \"none\";\r\n var html =\r\n // call the callback after 60 seconds - this is for the scenario we never get a response from BPOINT.\r\n \"\" +\r\n \"\" +\r\n \"\" +\r\n '
    ' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n \"
    \" +\r\n \"\" +\r\n \"\";\r\n\r\n document.body.appendChild(iframe);\r\n iframe.contentWindow.document.open();\r\n iframe.contentWindow.document.write(html);\r\n iframe.contentWindow.document.close();\r\n\r\n window[\"paymentCompleteHandler\" + paymentIndex] = function (value: false | BPointClientPaymentResponse, amount: number, invoiceNumber: string) {\r\n if (value === false) {\r\n var unknownOutcomeResult = {\r\n requestAmount: amount,\r\n requestInvoiceNumber: invoiceNumber,\r\n unknownResponseStatus: true\r\n };\r\n deferred.resolve(unknownOutcomeResult);\r\n } else {\r\n deferred.resolve(value);\r\n }\r\n document.body.removeChild(iframe);\r\n window[\"paymentCompleteHandler\" + paymentIndex] = null;\r\n };\r\n\r\n this.auditPayment(payableFinanceRecord);\r\n const paymentForm: HTMLFormElement = iframe.contentWindow.document.getElementById(\"paymentForm\" + paymentIndex);\r\n paymentForm.submit();\r\n\r\n return deferred.promise;\r\n }\r\n\r\n // For capacitor, use the capacitor plugin as it allows us to send the form POST and process the redirect response without the\r\n // need for the web server and it avoids CORS issues.\r\n sendPaymentCapacitor(payableFinanceRecord: PayableFinanceRecordViewModel, cardNumber: string, cardExpiry: string, cardCVV: string, paymentIndex: number) {\r\n const deferred = this.$q.defer();\r\n const parentLog = this.$log; \r\n const expiryMonth = String(cardExpiry).substring(0, 2);\r\n const expiryYear = String(cardExpiry).substring(2);\r\n var postData = {\r\n in_merchant_number: payableFinanceRecord.merchantNumber,\r\n in_billercode: payableFinanceRecord.billerCode,\r\n in_pay_token: payableFinanceRecord.paymentAuthToken,\r\n in_amount: this.convertDollarsToCents(payableFinanceRecord.paymentAmount),\r\n in_merchant_reference: \"QParents\",\r\n in_crn1: payableFinanceRecord.customerReferenceNumber,\r\n in_crn2: payableFinanceRecord.invoiceNumber,\r\n in_crn3: payableFinanceRecord.studentName,\r\n in_credit_card: cardNumber,\r\n in_expiry_month: expiryMonth,\r\n in_expiry_year: expiryYear,\r\n in_cvv: cardCVV,\r\n in_receipt_page_url: this.urlResolver.resolve(\"/api/processpayment/paymentResponse\"), // No actually used... We'll catch the redirect below...\r\n in_paymentForm_index: paymentIndex\r\n };\r\n\r\n var postOptions = {\r\n url: this.urlResolver.resolve(payableFinanceRecord.bPointPaymentUrl),\r\n data: postData,\r\n disableRedirects: true\r\n };\r\n \r\n window.cordovaHTTP.disableRedirect(true);\r\n window.cordovaHTTP.post(postOptions.url, postOptions.data, {}, tryHandleResponse, tryHandleResponse);\r\n\r\n return deferred.promise;\r\n\r\n function tryHandleResponse(response) {\r\n // If we get a redirect, we have a response from BPOINT, we need to process the redirect query params as these contain the\r\n // actual payment response.\r\n if (response.status === 302) {\r\n // The query string within the Location header contains all of the response data. Parse those params into\r\n // an object and return that to the caller!\r\n var location = response.headers[\"Location\"];\r\n var query = location.substring(location.indexOf(\"?\") + 1);\r\n\r\n var match,\r\n pl = /\\+/g, // Regex for replacing addition symbol with a space\r\n search = /([^&=]+)=?([^&]*)/g,\r\n decode = function (s) {\r\n return decodeURIComponent(s.replace(pl, \" \"));\r\n },\r\n paymentResult = {};\r\n\r\n while ((match = search.exec(query))) paymentResult[decode(match[1])] = decode(match[2]);\r\n\r\n deferred.resolve(paymentResult);\r\n return;\r\n }\r\n\r\n unknownPaymentStatus(response);\r\n }\r\n\r\n function unknownPaymentStatus(reason) {\r\n var unknownOutcomeResult = {\r\n requestAmount: payableFinanceRecord.paymentAmount,\r\n requestInvoiceNumber: payableFinanceRecord.invoiceNumber,\r\n unknownResponseStatus: true\r\n };\r\n deferred.resolve(unknownOutcomeResult);\r\n\r\n parentLog.debug(\"Payment failed.\");\r\n parentLog.error(reason);\r\n }\r\n }\r\n}\r\n\r\nservices.service(\"processPaymentService\", ProcessPaymentService);\r\n","import { app as services } from \"../app.module\";\r\nimport { IRoute } from \"../config.routes\";\r\n\r\nvar serviceId = \"routeService\";\r\nservices.factory(serviceId, routeService);\r\n\r\nexport interface IRouteService {\r\n isAnonymousRoute: (path: string) => boolean;\r\n shouldHideHeader: (path: string) => boolean;\r\n isOnLoginPage: (path: string) => boolean;\r\n}\r\n\r\nfunction routeService(routes: IRoute[]): IRouteService {\r\n \"ngInject\";\r\n return {\r\n isAnonymousRoute: isAnonymousPath,\r\n shouldHideHeader: shouldHideHeader,\r\n isOnLoginPage: isOnLoginPage\r\n };\r\n\r\n function doesFilteredRoutesContainPath(filter: (route: IRoute) => boolean, path: string) {\r\n var pathWithoutQueryString = path.split(\"?\")[0];\r\n\r\n var filteredRoutes = routes.filter(filter);\r\n var urls = filteredRoutes.map(function (route) {\r\n return route.url;\r\n });\r\n\r\n var match = urls.some(function (route) {\r\n if (route === pathWithoutQueryString) return true;\r\n\r\n // handle case where\r\n // route = /registration/delegated-viewer/invitation/:code\r\n // pathWithoutQueryString = /registration/delegated-viewer/invitation/1\r\n\r\n var colonPosition = route.indexOf(\":\");\r\n if (colonPosition > 0) {\r\n var routeWithoutParam = route.substring(0, colonPosition - 1);\r\n var pathWithoutParam = pathWithoutQueryString.substring(0, pathWithoutQueryString.lastIndexOf(\"/\"));\r\n\r\n return routeWithoutParam === pathWithoutParam;\r\n }\r\n });\r\n\r\n return match;\r\n }\r\n\r\n function isAnonymousPath(path: string) {\r\n return doesFilteredRoutesContainPath(function (route: IRoute) {\r\n return route.config.isAnonymous;\r\n }, path);\r\n }\r\n\r\n function shouldHideHeader(path: string) {\r\n return doesFilteredRoutesContainPath(function (route: IRoute) {\r\n return route.config.isAnonymous || route.config.hideHeader;\r\n }, path);\r\n }\r\n\r\n function isOnLoginPage(path: string) {\r\n return doesFilteredRoutesContainPath(function (route: IRoute) {\r\n return route.config.key === \"login\";\r\n }, path);\r\n }\r\n}\r\n","import { IPromise } from \"angular\";\r\nimport { app as services } from \"../app.module\";\r\nimport { ConnectionStatus, Network } from \"@capacitor/network\";\r\nimport { IApiService } from \"./apiServiceProvider\";\r\n\r\nconst serviceId = \"networkService\";\r\nservices.factory(serviceId, networkService);\r\n\r\nexport interface INetworkService {\r\n getNetworkStatus(): Promise;\r\n isOnline(): Promise;\r\n onNetworkStatusChanged(callback: (status: ConnectionStatus) => void): void;\r\n removeOnNetworkStatusChanged(): void;\r\n getIsMaintenance(): IPromise;\r\n}\r\n\r\nfunction networkService(apiService: IApiService, $q: ng.IQService): INetworkService {\r\n \"ngInject\";\r\n\r\n return {\r\n getNetworkStatus,\r\n isOnline,\r\n onNetworkStatusChanged,\r\n removeOnNetworkStatusChanged,\r\n getIsMaintenance\r\n };\r\n\r\n function getIsMaintenance(): IPromise {\r\n if (isOnline()) {\r\n return apiService.getIsMaintenance().then(response => {\r\n const isMaintenance = (response?.data as string)?.indexOf(\"QParents is currently in offline mode for planned maintenance\") > -1;\r\n return $q.resolve(isMaintenance);\r\n });\r\n } else {\r\n return $q.resolve(false);\r\n }\r\n }\r\n\r\n async function isOnline() {\r\n const networkStatus = await getNetworkStatus();\r\n\r\n return networkStatus.connected;\r\n }\r\n\r\n async function getNetworkStatus() {\r\n return await Network.getStatus();\r\n }\r\n\r\n function onNetworkStatusChanged(callback: (status: ConnectionStatus) => void): void {\r\n Network.addListener(\"networkStatusChange\", status => {\r\n callback(status);\r\n });\r\n }\r\n\r\n async function removeOnNetworkStatusChanged() {\r\n await Network.removeAllListeners();\r\n }\r\n}\r\n","import { ILogService, IPromise, IQService } from \"angular\";\r\nimport { app as services } from \"../app.module\";\r\nimport { CSRF_HEADER_NAME } from \"../configuration\";\r\nimport { IApiService } from \"./apiServiceProvider\";\r\nimport { ICookieService } from \"./cookieService\";\r\n\r\nservices.factory(\"csrfTokenService\", csrfTokenService);\r\nservices.factory(\"csrfTokenProvider\", csrfTokenProvider);\r\nexport interface ICsrfTokenService {\r\n loadCsrfToken(): IPromise;\r\n ensureCsrfToken(): IPromise;\r\n}\r\n\r\nexport function csrfTokenService($q: IQService, csrfTokenProvider, cookieService: ICookieService, $log: ILogService, apiService: IApiService): ICsrfTokenService {\r\n \"ngInject\";\r\n return {\r\n loadCsrfToken: loadCsrfToken,\r\n ensureCsrfToken: ensureCsrfToken\r\n };\r\n\r\n function loadCsrfToken() {\r\n const defer = $q.defer();\r\n apiService.getCrsfToken().then(\r\n response => {\r\n if (response.status == 200) {\r\n $log.debug(`loadCrsfToken result - ${response.data}`);\r\n let csrfToken = response.data;\r\n defer.resolve(csrfToken);\r\n } else {\r\n $log.error(\"loadCrsfToken Error Status\", response.status);\r\n defer.resolve(\"\");\r\n }\r\n },\r\n err => {\r\n $log.error(\"loadCrsfToken Error\", err);\r\n defer.reject(err);\r\n }\r\n );\r\n return defer.promise;\r\n }\r\n\r\n function ensureCsrfToken() {\r\n var defer = $q.defer();\r\n\r\n $log.debug(\"ensureCrsfToken - Delete NCSRF\");\r\n csrfTokenProvider.setCsrfToken(\"\");\r\n cookieService.deleteCookie(CSRF_HEADER_NAME).finally(() => {\r\n $log.debug(\"ensureCrsfToken - Loading\");\r\n loadCsrfToken()\r\n .then(token => {\r\n if (!token) {\r\n $log.debug(\"ensureCsrfToken - Could not load CSRF Token\");\r\n defer.reject();\r\n } else {\r\n $log.debug(`ensureCsrfToken - token=${token}, setting it`);\r\n csrfTokenProvider.setCsrfToken(token);\r\n defer.resolve(token);\r\n }\r\n })\r\n .catch(err => {\r\n $log.error(\"ensureCrsfToken - Error\", err);\r\n defer.reject();\r\n });\r\n });\r\n\r\n return defer.promise;\r\n }\r\n}\r\n\r\nexport function csrfTokenProvider($log: ILogService) {\r\n \"ngInject\";\r\n return {\r\n getCsrfToken: getCsrfToken,\r\n setCsrfToken: setCsrfToken\r\n };\r\n\r\n function getCsrfToken() {\r\n return sessionStorage.getItem(CSRF_HEADER_NAME);\r\n }\r\n\r\n function setCsrfToken(tokenToSet) {\r\n if (tokenToSet) {\r\n const existingToken = sessionStorage.getItem(CSRF_HEADER_NAME);\r\n $log.debug(`csrfTokenProvider.setCsrfToken from old value: '${existingToken}' to new value: '${tokenToSet}'`);\r\n sessionStorage.setItem(CSRF_HEADER_NAME, tokenToSet);\r\n } else {\r\n $log.debug(`csrfTokenProvider.setCsrfToken removed`);\r\n sessionStorage.removeItem(CSRF_HEADER_NAME);\r\n }\r\n }\r\n}\r\n","import angular, { ILogService } from \"angular\";\r\nimport { app } from \"../app.module\";\r\n\r\nexport class recaptchaService {\r\n constructor(private $q: ng.IQService, private $interval: ng.IIntervalService, private $log: ILogService) {\r\n \"ngInject\";\r\n }\r\n\r\n readonly onLoadFunctionName = \"__onGRecaptchaScriptLoaded\";\r\n readonly url = \"https://www.google.com/recaptcha/api.js\";\r\n initialized = false;\r\n initializing = false;\r\n\r\n writeScript() {\r\n var tag = document.createElement(\"script\");\r\n tag.src = `${this.url}?render=${process.env.RECAPTCHA_API_KEY}&onload=${this.onLoadFunctionName}&render=explicit`;\r\n window.document.body.appendChild(tag);\r\n }\r\n\r\n isExecuteAvailable() {\r\n return angular.isFunction((this.grecaptcha || {}).execute);\r\n }\r\n\r\n scriptExists() {\r\n return window.document.querySelector('script[src^=\"' + this.url + '\"]');\r\n }\r\n\r\n execute(params) {\r\n const deferred = this.$q.defer();\r\n if (!this.isInitialized() && !this.isInitializing()) {\r\n deferred.resolve(undefined);\r\n return deferred.promise;\r\n }\r\n\r\n const recaptchaApiKey = process.env.RECAPTCHA_API_KEY;\r\n\r\n if (this.isInitializing()) {\r\n return deferred.promise.then(function () {\r\n return this.execute(params);\r\n });\r\n }\r\n\r\n this.grecaptcha.ready(() => {\r\n this.grecaptcha.execute(recaptchaApiKey, params).then(\r\n token => {\r\n this.$log.debug(\"Acquired recaptcha token: \", token);\r\n deferred.resolve(token);\r\n },\r\n e => {\r\n this.$log.error(\"ReCaptcha token acquisition failed\");\r\n this.$log.error(e);\r\n deferred.reject();\r\n }\r\n );\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n get grecaptcha() {\r\n return window[\"grecaptcha\"];\r\n }\r\n\r\n isInitialized() {\r\n return !!this.initialized;\r\n }\r\n\r\n isInitializing() {\r\n return !!this.initializing;\r\n }\r\n\r\n reset() {\r\n return this.grecaptcha.reset();\r\n }\r\n\r\n initialize() {\r\n const deferred = this.$q.defer();\r\n\r\n setTimeout(() => {\r\n try {\r\n if (this.isExecuteAvailable()) {\r\n this.initialized = true;\r\n this.initializing = false;\r\n deferred.resolve();\r\n } else if (this.scriptExists()) {\r\n this.initializing = true;\r\n var wait = this.$interval(() => {\r\n if (this.isExecuteAvailable()) {\r\n this.$interval.cancel(wait);\r\n\r\n this.initialized = true;\r\n this.initializing = false;\r\n deferred.resolve();\r\n }\r\n }, 50);\r\n } else {\r\n this.initializing = true;\r\n window[this.onLoadFunctionName] = () => {\r\n this.initialized = true;\r\n this.initializing = false;\r\n deferred.resolve();\r\n };\r\n\r\n this.writeScript();\r\n }\r\n } catch (e) {\r\n deferred.reject(e);\r\n }\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n}\r\napp.service(\"recaptchaService\", recaptchaService);\r\n","import { ILogService, IPromise } from \"angular\";\r\nimport { app as services } from \"../app.module\";\r\nimport { IApiService } from \"./apiServiceProvider\";\r\nimport { recaptchaService } from \"./recaptchaService\";\r\nimport { LoginRequest } from \"../models/api\";\r\nimport { IDeviceService } from \"./deviceServiceProvider\";\r\nimport { NativeBiometric, BiometryType } from \"@capgo/capacitor-native-biometric\";\r\nimport angular from \"angular\";\r\nimport { IPreferencesService } from \"./preferencesService\";\r\nimport { IDataContext } from \"./dataContext\";\r\n\r\nconst serviceId = \"loginService\";\r\nservices.factory(serviceId, loginService);\r\n\r\nexport interface ILoginService {\r\n login(loginRequest: LoginRequest): IPromise;\r\n loadBiometricCredential(): IPromise;\r\n saveBiometricCredential(userlogin: UserLogin): IPromise;\r\n deleteBiometricCredential(): IPromise;\r\n checkIfBiometricAvailable(): IPromise;\r\n checkIfMatchingCredentialExist(userlogin: UserLogin): IPromise;\r\n}\r\n\r\nexport interface UserLogin {\r\n username: string;\r\n password: string;\r\n}\r\n\r\nexport interface CheckMatchResult {\r\n usernameMatch: boolean;\r\n passwordMatch: boolean;\r\n}\r\n\r\nexport interface CheckAvailableBiometricResult {\r\n isAvailable: boolean;\r\n description?: string;\r\n}\r\n\r\nfunction loginService(\r\n $q: ng.IQService,\r\n $log: ILogService,\r\n $injector,\r\n recaptchaService: recaptchaService,\r\n apiService: IApiService,\r\n deviceService: IDeviceService,\r\n preferencesService: IPreferencesService,\r\n dataContext: IDataContext\r\n): ILoginService {\r\n \"ngInject\";\r\n\r\n let SERVER_URL: string;\r\n\r\n if ($injector.has(\"SERVER_URL\")) {\r\n SERVER_URL = $injector.get(\"SERVER_URL\");\r\n }\r\n\r\n return {\r\n login: login,\r\n loadBiometricCredential: loadBiometricCredential,\r\n saveBiometricCredential: saveBiometricCredential,\r\n deleteBiometricCredential: deleteBiometricCredential,\r\n checkIfBiometricAvailable: checkIfBiometricAvailable,\r\n checkIfMatchingCredentialExist: checkIfMatchingCredentialExist\r\n };\r\n\r\n function login(request: LoginRequest) {\r\n const deferred = $q.defer();\r\n const loginRequest = request;\r\n\r\n checkRecaptcha()\r\n .then(recaptchaToken => {\r\n // this will be undefined when the reCaptchaService is not initialised\r\n // We should not care about undefined recaptcha as the login is not risky (passed the VIP 2FA already)\r\n loginRequest.captchaToken = recaptchaToken;\r\n\r\n $log.debug(\"loginService - Logging in\");\r\n\r\n dataContext.preSignIn();\r\n apiService\r\n .login(loginRequest)\r\n .then(response => {\r\n if (response.status !== 200) {\r\n $log.error(\"loginService - Login failed\");\r\n deferred.reject(response);\r\n return;\r\n } else {\r\n $log.debug(\"loginService - Login success\");\r\n }\r\n\r\n $log.debug(\"loginService - Retrieving user\");\r\n dataContext.flagSignedIn(loginRequest.email);\r\n dataContext\r\n .verifyAuthenticated()\r\n .then(() => {\r\n $log.debug(\"loginService - Retrieving user succeed\");\r\n deferred.resolve();\r\n })\r\n .catch(response => {\r\n deferred.reject();\r\n $log.error(\"loginService - Retrieving user failed\", angular.toJson(response));\r\n });\r\n })\r\n .catch(response => {\r\n $log.error(\"loginService - Login failed\", angular.toJson(response));\r\n deferred.reject(response);\r\n });\r\n })\r\n .catch(response => {\r\n $log.error(\"loginService - Checking Recaptcha failed\", angular.toJson(response));\r\n deferred.reject(response);\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n function saveBiometricCredential(userlogin: UserLogin) {\r\n const deferred = $q.defer();\r\n\r\n checkIfBiometricAvailable().then(result => {\r\n if (result.isAvailable) {\r\n $log.debug(\"loginService - Saving credentials\");\r\n // Save user's credentials\r\n $q.when(\r\n NativeBiometric.setCredentials({\r\n username: userlogin.username,\r\n password: userlogin.password,\r\n server: SERVER_URL\r\n })\r\n )\r\n .then(() => {\r\n $log.debug(\"loginService - Saving Preferences\");\r\n preferencesService\r\n .setIsCredentialSaved(true)\r\n .then(() => {\r\n $log.debug(\"loginService - Preference Updated\");\r\n })\r\n .finally(() => {\r\n deferred.resolve(true);\r\n });\r\n })\r\n .catch(response => {\r\n $log.error(\"loginService - Saving Credentials failed\", response);\r\n deferred.reject(false);\r\n });\r\n } else {\r\n deferred.resolve(false);\r\n }\r\n });\r\n return deferred.promise;\r\n }\r\n\r\n function loadBiometricCredential() {\r\n const deferred = $q.defer();\r\n\r\n checkIfBiometricAvailable().then(result => {\r\n if (!result.isAvailable) {\r\n deferred.resolve(null);\r\n return;\r\n }\r\n $log.debug(\"loginService - Check Preferences\");\r\n\r\n preferencesService\r\n .getIsCredentialPrompted()\r\n .then(isCredentialPrompted => {\r\n if (!isCredentialPrompted) {\r\n deferred.resolve(null);\r\n return;\r\n }\r\n preferencesService\r\n .getIsCredentialSaved()\r\n .then(isCredentialSaved => {\r\n if (!isCredentialSaved) {\r\n deferred.resolve(null);\r\n return;\r\n }\r\n verifyBiometricCredential(deferred);\r\n })\r\n .catch(response => {\r\n $log.error(\"loginService - Getting Credentials failed\", response);\r\n deferred.reject(null);\r\n });\r\n })\r\n .catch(response => {\r\n $log.error(\"loginService - Unexpected error when loading the preferences\", angular.toJson(response));\r\n deferred.reject(null);\r\n });\r\n });\r\n return deferred.promise;\r\n }\r\n\r\n function verifyBiometricCredential(deferred: angular.IDeferred) {\r\n $q.when(\r\n NativeBiometric.verifyIdentity({\r\n reason: \"To securely access your account\",\r\n title: \"Account Login\",\r\n subtitle: \"Quick and secure access\",\r\n description: \"For a seamless login experience, please verify your identity using biometrics.\"\r\n })\r\n )\r\n .then(() => {\r\n $log.debug(\"loginService - Loading credential\");\r\n // Save user's credentials\r\n $q.when(\r\n NativeBiometric.getCredentials({\r\n server: SERVER_URL\r\n })\r\n )\r\n .then(result => {\r\n deferred.resolve({\r\n username: result.username,\r\n password: result.password\r\n });\r\n })\r\n .catch(response => {\r\n $log.error(\"loginService - Unexpected error when retrieving credential info\", angular.toJson(response));\r\n deferred.reject(null);\r\n });\r\n })\r\n .catch(response => {\r\n $log.error(\"loginService - Unexpected error when verifying credential\", angular.toJson(response));\r\n deferred.reject(null);\r\n });\r\n }\r\n\r\n function deleteBiometricCredential() {\r\n const deferred = $q.defer();\r\n\r\n checkIfBiometricAvailable().then(result => {\r\n if (result.isAvailable) {\r\n $log.debug(\"loginService - Deleting credential\");\r\n // Save user's credentials\r\n $q.when(\r\n NativeBiometric.deleteCredentials({\r\n server: SERVER_URL\r\n })\r\n )\r\n .then(() => {\r\n $log.debug(\"loginService - Updating Preference\");\r\n preferencesService\r\n .setIsCredentialSaved(false)\r\n .then(() => {\r\n $log.debug(\"loginService - Preference Updated\");\r\n })\r\n .finally(() => {\r\n deferred.resolve(true);\r\n });\r\n })\r\n .catch(response => {\r\n $log.error(\"loginService - Unexpected error when deleting credential info\", angular.toJson(response));\r\n deferred.reject(false);\r\n });\r\n } else {\r\n deferred.resolve(false);\r\n }\r\n });\r\n return deferred.promise;\r\n }\r\n\r\n function checkIfMatchingCredentialExist(userlogin: UserLogin) {\r\n const deferred = $q.defer();\r\n\r\n checkIfBiometricAvailable()\r\n .then(result => {\r\n if (result.isAvailable) {\r\n $log.debug(\"loginService - Checking matching credential\");\r\n $q.when(\r\n NativeBiometric.getCredentials({\r\n server: SERVER_URL\r\n })\r\n )\r\n .then(result => {\r\n const checkMatchResult: CheckMatchResult = {\r\n usernameMatch: result.username === userlogin.username,\r\n passwordMatch: result.password === userlogin.password\r\n };\r\n\r\n deferred.resolve(checkMatchResult);\r\n })\r\n .catch(response => {\r\n $log.error(\"loginService - Unexpected error when retrieving credential info\", angular.toJson(response));\r\n deferred.reject(null);\r\n });\r\n } else {\r\n deferred.resolve(null);\r\n }\r\n })\r\n .catch(response => {\r\n $log.error(\"loginService - Checking Biometric failed\", response);\r\n deferred.reject(null);\r\n });\r\n return deferred.promise;\r\n }\r\n\r\n function checkIfBiometricAvailable() {\r\n const deferred = $q.defer();\r\n\r\n if (deviceService.isMobileApp) {\r\n $q.when(NativeBiometric.isAvailable())\r\n .then(result => {\r\n if (result.isAvailable) {\r\n $log.debug(`loginService - Biometrics is available for ${result.biometryType}`);\r\n deferred.resolve({ isAvailable: true, description: getBiometryTypeDescription(result.biometryType) });\r\n } else {\r\n $log.debug(`loginService - Biometrics is unavailable (${result.errorCode})`);\r\n deferred.resolve({ isAvailable: false });\r\n }\r\n })\r\n .catch(response => {\r\n $log.error(\"loginService - Unexpected error when retrieving biometrics availability\", angular.toJson(response));\r\n deferred.resolve({ isAvailable: false });\r\n });\r\n } else {\r\n // Currently Biometrics only supported on the native device\r\n deferred.resolve({ isAvailable: false });\r\n }\r\n\r\n return deferred.promise;\r\n }\r\n\r\n function getBiometryTypeDescription(biometryType: BiometryType) {\r\n switch (biometryType) {\r\n case BiometryType.FACE_AUTHENTICATION:\r\n case BiometryType.FACE_ID: {\r\n return \"Face ID\";\r\n }\r\n case BiometryType.IRIS_AUTHENTICATION: {\r\n return \"Iris ID\";\r\n }\r\n case BiometryType.FINGERPRINT: {\r\n return \"Fingerprint ID\";\r\n }\r\n case BiometryType.TOUCH_ID: {\r\n return \"Touch ID\";\r\n }\r\n default: {\r\n return \"Fingerprint/Touch ID\";\r\n }\r\n }\r\n }\r\n\r\n function checkRecaptcha() {\r\n const deferred = $q.defer();\r\n\r\n $log.debug(\"loginService - Executing Check Recaptcha\");\r\n\r\n recaptchaService\r\n .execute({ action: \"login\" })\r\n .then(recaptchaToken => {\r\n deferred.resolve(recaptchaToken);\r\n $log.debug(\"loginService - Check Recaptcha Executed\");\r\n })\r\n .catch(response => {\r\n deferred.reject(response);\r\n $log.error(\"loginService - Check Recaptcha Failed\", angular.toJson(response));\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n}\r\n","import { app as services } from \"../app.module\";\r\nimport { ILogService, IPromise, IQService } from \"angular\";\r\nimport { IDeviceService } from \"./deviceServiceProvider\";\r\nimport { CapacitorCookies } from \"@capacitor/core\";\r\n\r\nvar serviceId = \"cookieService\";\r\nservices.factory(serviceId, cookieService);\r\n\r\nexport interface ICookieService {\r\n deleteCookie(key: string): IPromise;\r\n}\r\n\r\nfunction cookieService($log: ILogService, $q: IQService, deviceService: IDeviceService): ICookieService {\r\n \"ngInject\";\r\n return {\r\n deleteCookie: deleteCookie\r\n };\r\n\r\n function deleteCookie(key: string) {\r\n var deferred = $q.defer();\r\n\r\n $log.debug(`cookieService - Delete ${key} Cookie`);\r\n\r\n if (deviceService.isMobileApp) {\r\n $q.when(CapacitorCookies.deleteCookie({ key: key })).finally(() => {\r\n deferred.resolve();\r\n });\r\n } else {\r\n document.cookie = `${key}= ; expires = Thu, 01 Jan 1970 00:00:00 GMT`;\r\n deferred.resolve();\r\n }\r\n return deferred.promise;\r\n }\r\n}\r\n","import { app as services } from \"../app.module\";\r\nimport { FEATURES } from \"../configuration\";\r\nimport { User } from \"../models/user\";\r\nimport { IPromise } from \"angular\";\r\nimport { IDataContext } from \"./dataContext\";\r\nimport { ConsentSummaryViewModel, ConsentRequestViewModel, ConsentResponseWriteModel } from \"../models/api\";\r\nimport { IApiService } from \"./apiServiceProvider\";\r\n\r\nconst serviceId = \"consentService\";\r\n\r\nexport class ConsentService {\r\n public summary: IPromise;\r\n public initialized: boolean = false;\r\n\r\n constructor(private apiService: IApiService, private $q: ng.IQService, dataContext: IDataContext) {\r\n \"ngInject\";\r\n this.summary = $q.defer().promise;\r\n this.initialized = false;\r\n dataContext.onUserSignedOut(() => this.clear());\r\n }\r\n\r\n clear() {\r\n this.summary = this.$q.defer().promise;\r\n this.initialized = false;\r\n }\r\n\r\n getConsentRequest(studentEqId: string, requestId: string, schoolCode: string) {\r\n return this.apiService.getConsentRequest(studentEqId, requestId, schoolCode).then(function (response) {\r\n return response.data;\r\n });\r\n }\r\n\r\n sendConsentResponse(submission: any, requestId: string, studentEqId: string, schoolCode: string) {\r\n return this.apiService\r\n .sendConsentResponse(studentEqId, requestId, schoolCode, {\r\n studentEqId,\r\n requestId,\r\n data: {\r\n ...submission.data\r\n }\r\n })\r\n .then(function (response) {\r\n return response.data;\r\n });\r\n }\r\n\r\n getConsentRequestSummary(user: User) {\r\n if (!user.consentRequestsEnabled) return this.summary;\r\n\r\n if (this.initialized) return this.summary;\r\n\r\n const students = user.students.filter(student => student.features.some(feature => feature === FEATURES.CONSENT_REQUESTS));\r\n\r\n if (!students.length) return this.summary;\r\n\r\n const query = students\r\n .map(s => s.enrolments.map(e => `students=${s.oneSchoolId}.${e.schoolCode}`))\r\n .reduce((acc, curr) => acc.concat(curr))\r\n .join(\"&\");\r\n\r\n this.summary = this.apiService\r\n .getConsentRequestSummary(query)\r\n .then(response => {\r\n return response.data;\r\n })\r\n .finally(() => (this.initialized = true));\r\n\r\n return this.summary;\r\n }\r\n}\r\n\r\nservices.service(serviceId, ConsentService);\r\n","import { IPromise } from \"angular\";\r\nimport { app as services } from \"../app.module\";\r\nimport { QLearnLinkModel } from \"../models/api\";\r\nimport { IApiService } from \"./apiServiceProvider\";\r\n\r\nconst serviceId = \"qLearnService\";\r\n\r\nexport class QLearnService {\r\n public qLearnLink: IPromise;\r\n public initialized: boolean = false;\r\n\r\n constructor(private apiService: IApiService, $q: ng.IQService) {\r\n \"ngInject\";\r\n this.qLearnLink = $q.defer().promise;\r\n this.initialized = false;\r\n }\r\n\r\n getQLearnLink() {\r\n if (this.initialized) return this.qLearnLink;\r\n\r\n this.qLearnLink = this.apiService\r\n .getQLearnLink()\r\n .then(function (response) {\r\n return response.data;\r\n })\r\n .finally(() => (this.initialized = true));\r\n\r\n return this.qLearnLink;\r\n }\r\n}\r\n\r\nservices.service(serviceId, QLearnService);\r\n","import { app as services } from \"../app.module\";\r\nimport { IApiService } from \"./apiServiceProvider\";\r\nimport { IPushNotificationsService, pushNotificationRegisteredEvent } from \"./pushNotificationsService\";\r\nimport { Token } from \"@capacitor/push-notifications\";\r\n\r\nconst serviceId = \"pushNotificationsRegistrationService\";\r\n\r\nexport interface IPushNotificationsRegistrationService {\r\n registerToken(): Promise;\r\n unregisterToken(): Promise;\r\n}\r\nfunction PushNotificationsRegistrationService($rootScope: angular.IRootScopeService, $log: angular.ILogService, pushNotificationsService: IPushNotificationsService, apiService: IApiService) {\r\n \"ngInject\";\r\n\r\n var pushNotificationRegistrationTimeoutId;\r\n\r\n return {\r\n registerToken: registerToken,\r\n unregisterToken: unregisterToken\r\n };\r\n\r\n async function registerToken() {\r\n const token = pushNotificationsService.getToken();\r\n\r\n if (token) {\r\n $log.debug(\"PushNotificationsRegistration - Re-register the user into the push notification.\");\r\n registerPushNotificationToken(token);\r\n } else {\r\n $log.debug(\"PushNotificationsRegistration - Register the user into the push notification.\");\r\n }\r\n\r\n var unregisteredEvent = $rootScope.$on(pushNotificationRegisteredEvent, function (event, token: Token) {\r\n registerPushNotificationToken(token.value);\r\n });\r\n\r\n $rootScope.$on(\"$destroy\", function () {\r\n unregisteredEvent();\r\n });\r\n\r\n await pushNotificationsService.register();\r\n }\r\n\r\n async function unregisterToken() {\r\n const token = pushNotificationsService.getToken();\r\n if (token) {\r\n $log.debug(\"PushNotificationsRegistration - Unregister the user from push notification.\");\r\n await apiService.unregisterPushNotification(token);\r\n } else {\r\n $log.debug(\"PushNotificationsRegistration - The user is not unregister from the push notification.\");\r\n }\r\n }\r\n\r\n function registerPushNotificationToken(token: string) {\r\n clearTimeout(pushNotificationRegistrationTimeoutId);\r\n pushNotificationRegistrationTimeoutId = setTimeout(async () => {\r\n $log.debug(\"PushNotificationsRegistration - Save the user registration .\");\r\n await apiService.registerPushNotification(token);\r\n }, 1000);\r\n }\r\n}\r\n\r\nservices.factory(serviceId, PushNotificationsRegistrationService);\r\n","import { app as services } from \"../app.module\";\r\nimport { NativeSettings, AndroidSettings, IOSSettings } from \"capacitor-native-settings\";\r\nimport { IDeviceService } from \"./deviceServiceProvider\";\r\nimport { ILogService } from \"angular\";\r\n\r\nvar serviceId = \"nativeSettingsLauncherService\";\r\nservices.factory(serviceId, nativeSettingsLauncherService);\r\n\r\nexport interface INativeSettingsLauncherService {\r\n openPushNotificationSettings(): Promise;\r\n}\r\n\r\nfunction nativeSettingsLauncherService($log: ILogService, deviceService: IDeviceService): INativeSettingsLauncherService {\r\n \"ngInject\";\r\n\r\n return {\r\n openPushNotificationSettings: openPushNotificationSettings\r\n };\r\n\r\n async function openPushNotificationSettings() {\r\n if (!deviceService.isMobileApp) {\r\n $log.debug(\"NativeLauncher - Not supported.\");\r\n return false;\r\n }\r\n\r\n $log.debug(\"NativeLauncher - Opening Notification Settings\");\r\n\r\n let result: { status: boolean };\r\n if (deviceService.isAndroid()) {\r\n result = await NativeSettings.openAndroid({\r\n option: AndroidSettings.AppNotification\r\n });\r\n } else {\r\n const result = await NativeSettings.openIOS({\r\n // @ts-ignore: a new option for iOS to open specific appNotifications Page\r\n option: \"app\" + IOSSettings.Notifications\r\n });\r\n }\r\n\r\n $log.debug(`NativeLauncher - Open Notification Settings (${result.status})`);\r\n\r\n return result.status;\r\n }\r\n}\r\n","import { app as services } from \"../app.module\";\r\nimport { IDeviceService } from \"./deviceServiceProvider\";\r\nimport { Diagnostic } from \"@awesome-cordova-plugins/diagnostic\";\r\nimport { ILogService, IPromise, IQService } from \"angular\";\r\n\r\nvar serviceId = \"nativeSettingsService\";\r\nservices.factory(serviceId, nativeSettingsService);\r\n\r\nexport interface INativeSettingsService {\r\n isRemoteNotificationEnabled(): IPromise;\r\n}\r\n\r\n// Adding a new native setting access require the capacitor.config.json to be updated for both apps\r\n// See for available module: https://github.com/dpa99c/cordova-diagnostic-plugin#camera-module\r\n// Installation Guide: https://github.com/ionic-team/capacitor/issues/2104\r\nfunction nativeSettingsService($q: IQService, $log: ILogService, deviceService: IDeviceService): INativeSettingsService {\r\n \"ngInject\";\r\n\r\n return { isRemoteNotificationEnabled: isRemoteNotificationEnabled };\r\n\r\n async function isRemoteNotificationEnabled() {\r\n if (deviceService.isMobileApp) {\r\n return $q.when(Diagnostic.isRemoteNotificationsEnabled()).then(result => {\r\n $log.debug(\"nativeSettingsService - Notification Status \", result);\r\n return result;\r\n });\r\n }\r\n\r\n return $q.resolve(false);\r\n }\r\n}\r\n","import { AdminViewRedirectService } from \"./adminViewRedirectService\";\r\nimport { app as services } from \"../app.module\";\r\nimport { ILocationService, ILogService, IQService } from \"angular\";\r\nimport { IRouteService } from \"./routeService\";\r\nimport { showToastsOnError } from \"../configuration\";\r\n\r\nconst serviceId = \"errorLoggingService\";\r\nservices.factory(serviceId, errorLoggingService);\r\n\r\nexport interface IErrorLoggingService {\r\n responseError: (rejection: any) => angular.IPromise;\r\n}\r\n\r\nfunction errorLoggingService(\r\n $q: IQService,\r\n $log: ILogService,\r\n $rootScope,\r\n $location: ILocationService,\r\n toaster,\r\n routeService: IRouteService,\r\n $injector,\r\n adminViewRedirectService: AdminViewRedirectService\r\n): IErrorLoggingService {\r\n \"ngInject\";\r\n return {\r\n responseError: function (rejection) {\r\n // hide splash screen in case of error\r\n $rootScope.hideFullScreenLoadingPane();\r\n\r\n // Should we just plain ignore?\r\n if (handleSessionExpired(rejection)) {\r\n return $q.reject(rejection);\r\n }\r\n\r\n if ([500, 400, 405].some(x => x === rejection.status)) {\r\n if (showToastsOnError) {\r\n toaster.pop(\"error\", rejection.config.method + \" \" + rejection.config.url, (rejection.data.ErrorMessage || \"\") + \"\\n\" + (rejection.data.FullException || \"\"));\r\n }\r\n\r\n $log.error(buildMessage(rejection));\r\n\r\n $location.path(\"/error\");\r\n }\r\n\r\n return $q.reject(rejection);\r\n }\r\n };\r\n\r\n function handleSessionExpired(rejection) {\r\n if (!rejection) return false;\r\n if (rejection.status == 401 && !routeService.isAnonymousRoute($location.path())) {\r\n // required to avoid circular dependency errors.\r\n let authorisationService = $injector.get(\"authorisationService\");\r\n authorisationService.clearAuthenticationCookie().then(() => {\r\n adminViewRedirectService.landingPageRedirect();\r\n $log.debug(\"handleSessionExpired - redirecting to login\");\r\n });\r\n\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n function buildMessage(rejection) {\r\n if (!rejection) return \"Something is wrong here.\";\r\n\r\n var reason = rejection.headers().reason;\r\n var reasonAppend = reason ? \" - \" + reason : \"\";\r\n if (rejection.status == 400) {\r\n return \"Check what's wrong and try again\" + reasonAppend;\r\n } else if (rejection.status == 403) {\r\n return \"You aren't allowed to do that\" + reasonAppend;\r\n } else if (rejection.status == 404) {\r\n return \"We couldn't find what you were looking for\" + reasonAppend;\r\n } else {\r\n return \"Something has gone wrong\" + reasonAppend;\r\n }\r\n }\r\n}\r\n","import { ILogService } from \"angular\";\r\nimport { app as services } from \"../app.module\";\r\n\r\nservices.factory(\"exceptionHandler\", exceptionHandler);\r\n\r\nexport interface IExceptionHandler {\r\n addHandler(subHandler: (exception: any, cause: any) => void): void;\r\n}\r\n\r\nfunction exceptionHandler($log: ILogService): IExceptionHandler {\r\n \"ngInject\";\r\n var subHandlers = [];\r\n\r\n const handler: any = handlerFn;\r\n\r\n handler.addHandler = function (subHandler) {\r\n subHandlers.push(subHandler);\r\n };\r\n\r\n return handler;\r\n\r\n function handlerFn(exception, cause) {\r\n $log.error.apply($log, arguments);\r\n subHandlers.forEach(function (sh) {\r\n sh(exception, cause);\r\n });\r\n }\r\n}\r\n","import { app as services } from \"../app.module\";\r\nimport { IDeviceService } from \"./deviceServiceProvider\";\r\nimport { IIntervalService, ILocationService, ILogService } from \"angular\";\r\nimport { App } from \"@capacitor/app\";\r\nimport { IDataContext } from \"./dataContext\";\r\nimport { IExceptionHandler } from \"./exceptionHandler\";\r\nimport { ILocalStorageService } from \"angular-local-storage\";\r\n\r\nservices.provider(\"errorReporting\", function ErrorReporting(): any {\r\n var cacheConditions = [],\r\n CACHED_EXCEPTIONS_KEY = \"error-cache\",\r\n EXCEPTION_CACHE_SIZE = 10;\r\n this.$get = function (\r\n $window,\r\n $location: ILocationService,\r\n $interval: IIntervalService,\r\n $log: ILogService,\r\n localStorageService: ILocalStorageService,\r\n dataContext: IDataContext,\r\n deviceService: IDeviceService,\r\n exceptionHandler: IExceptionHandler\r\n ) {\r\n \"ngInject\";\r\n var userName = null,\r\n userEmail = null,\r\n userProfileId = null,\r\n intervalPromiseCachedErrors = null;\r\n (function activate() {\r\n exceptionHandler.addHandler(reportError);\r\n\r\n dataContext.onUserSignedIn(function () {\r\n dataContext.getData().then(function (parent) {\r\n if (!parent) return;\r\n\r\n userName = parent.firstName + \" \" + parent.lastName;\r\n userEmail = parent.emailAddress;\r\n userProfileId = parent.oneSchoolParentId;\r\n });\r\n });\r\n\r\n addCacheCondition(function (status) {\r\n return status === 408;\r\n });\r\n\r\n $window.onerror = function (message, filename, line, column, error) {\r\n reportError({\r\n message: message,\r\n fileName: filename,\r\n line: line,\r\n column: column,\r\n details: error\r\n });\r\n return true;\r\n };\r\n\r\n if (intervalPromiseCachedErrors) {\r\n $interval.cancel(intervalPromiseCachedErrors);\r\n }\r\n\r\n // Send the error into the api every 30 seconds\r\n intervalPromiseCachedErrors = $interval(sendCachedErrors, 30000);\r\n })();\r\n\r\n return {\r\n reportError: reportError\r\n };\r\n\r\n function reportError(exception) {\r\n buildError(exception).then(error => {\r\n addErrorToCache(error);\r\n });\r\n }\r\n\r\n function shouldCacheForLater(status, headers, config) {\r\n const localStorageServiceSupported = localStorageService !== undefined && localStorageService.isSupported;\r\n return (\r\n localStorageServiceSupported &&\r\n cacheConditions.some(function (cc) {\r\n return cc(status, headers, config);\r\n })\r\n );\r\n }\r\n\r\n function replaceErrors(key, value) {\r\n if (value instanceof Error) {\r\n var error = {};\r\n\r\n Object.getOwnPropertyNames(value).forEach(function (key) {\r\n error[key] = value[key];\r\n });\r\n\r\n return error;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n function send(error, isFromCache?) {\r\n this.apiService.recordError(error).then(\r\n function successCallback(response) {\r\n if (!isFromCache) {\r\n return;\r\n }\r\n\r\n var cache = localStorageService.get(CACHED_EXCEPTIONS_KEY) || [];\r\n cache = cache.filter(e => e !== error);\r\n localStorageService.set(CACHED_EXCEPTIONS_KEY, cache);\r\n // awesome. We logged it! Nothing to do here I think, perhaps log to console...\r\n },\r\n function errorCallback(response) {\r\n // called asynchronously if an error occurs\r\n // or server returns response with an error status.\r\n if (shouldCacheForLater(response.status, response.headers, response.config)) {\r\n addErrorToCache(error);\r\n }\r\n $log.error(\"Sending Error failed\", response);\r\n }\r\n );\r\n }\r\n\r\n function sendCachedErrors() {\r\n var cache = localStorageService.get(CACHED_EXCEPTIONS_KEY);\r\n if (!cache) {\r\n return;\r\n }\r\n cache.forEach(function (cachedError) {\r\n send(cachedError, true);\r\n });\r\n }\r\n\r\n async function buildError(exception) {\r\n const device = await getDeviceData();\r\n const appInfo = deviceService.isMobileApp ? await App.getInfo() : null;\r\n\r\n var exceptionRelatedInformation = {\r\n userName: userName || \"unknown\",\r\n userEmail: userEmail,\r\n userProfileId: userProfileId,\r\n timestamp: new Date(),\r\n error: JSON.stringify(exception, replaceErrors),\r\n device: device,\r\n page: $location.url(),\r\n language: window.navigator.language,\r\n userAgent: window.navigator.userAgent,\r\n appVersion: appInfo?.version,\r\n appName: appInfo?.name,\r\n appInfo: appInfo?.version\r\n };\r\n\r\n return Promise.resolve(exceptionRelatedInformation);\r\n }\r\n\r\n async function getDeviceData() {\r\n var deviceInfo = await deviceService.getDeviceInfo();\r\n var deviceId = await deviceService.getDeviceId();\r\n\r\n return {\r\n model: deviceInfo.model,\r\n platform: deviceInfo.platform,\r\n osVersion: deviceInfo.osVersion,\r\n operatingSystem: deviceInfo.operatingSystem,\r\n manufacture: deviceInfo.manufacturer,\r\n isVirtual: deviceInfo.isVirtual,\r\n uuid: deviceId\r\n };\r\n }\r\n\r\n function addErrorToCache(error: any) {\r\n var cache = localStorageService.get(CACHED_EXCEPTIONS_KEY) || [];\r\n cache.push(error);\r\n if (cache.length > EXCEPTION_CACHE_SIZE) {\r\n cache.splice(0, 1);\r\n }\r\n localStorageService.set(CACHED_EXCEPTIONS_KEY, cache);\r\n }\r\n };\r\n this.addCacheCondition = addCacheCondition;\r\n function addCacheCondition(cacheCondition) {\r\n cacheConditions.push(cacheCondition);\r\n }\r\n});\r\n","import { v4 as uuidv4 } from \"uuid\";\r\nimport { ILogService, IQService } from \"angular\";\r\nimport { app as services } from \"../app.module\";\r\nimport { IDeviceService } from \"./deviceServiceProvider\";\r\nimport { IAssetService } from \"./assetService\";\r\nimport { formatDateTimeMomentToIcsDate, formatDateTimeToIcsDate } from \"./dateHelper\";\r\nimport { Directory, Encoding, Filesystem } from \"@capacitor/filesystem\";\r\nimport { FileOpener } from \"@capacitor-community/file-opener\";\r\nimport moment from \"moment\";\r\n\r\nvar serviceId = \"calendarService\";\r\n\r\nexport interface ICalendarData {\r\n id?: string;\r\n startDate: Date;\r\n startTime: string;\r\n endDate: Date;\r\n endTime: string;\r\n summary: string;\r\n description?: string;\r\n}\r\n\r\nexport interface ICalendarService {\r\n createIcsFile(data: ICalendarData[]): Blob;\r\n openIcsFile(icsBlob: Blob): void;\r\n}\r\n\r\nexport class CalendarService implements ICalendarService {\r\n constructor(\r\n private deviceService: IDeviceService,\r\n private assetService: IAssetService,\r\n private $q: IQService,\r\n private $log: ILogService\r\n ) {\r\n \"ngInject\";\r\n }\r\n\r\n public createIcsFile(data: ICalendarData[]): Blob {\r\n this.$log.debug(`CalendarService - Creating Ics Blob for ${data.length} event/s`);\r\n\r\n const icsHeader = `BEGIN:VCALENDAR\r\nVERSION:2.0\r\nMETHOD:PUBLISH\r\nCALSCALE:GREGORIAN\r\nPRODID:-//QParents//EN`;\r\n\r\n const icsFooter = \"END:VCALENDAR\";\r\n\r\n const icsEvents = data.map(calendarData => {\r\n const uid = calendarData.id || uuidv4();\r\n const now = formatDateTimeMomentToIcsDate(moment());\r\n const startDate = formatDateTimeToIcsDate(calendarData.startDate, calendarData.startTime);\r\n const endDate = formatDateTimeToIcsDate(calendarData.endDate, calendarData.endTime);\r\n const summary = this.escapeICalValue(calendarData.summary) || \"\";\r\n const description = this.escapeICalValue(calendarData.description) || \"\";\r\n const truncatedSummary = summary.length > 75 ? summary.slice(0, 75) : summary;\r\n const truncatedDescription = summary.length > 75 ? `${summary}\\n${description}` : description;\r\n\r\n return `BEGIN:VEVENT\r\nUID:${uid}\r\nDTSTART:${startDate}\r\nDTEND:${endDate}\r\nSUMMARY:${truncatedSummary}\r\nDESCRIPTION:${truncatedDescription}\r\nDTSTAMP:${now}\r\nEND:VEVENT`;\r\n });\r\n\r\n const icsContent = [icsHeader, ...icsEvents, icsFooter].join(\"\\n\");\r\n\r\n this.$log.debug(`CalendarService - Created Ics Blob for ${icsEvents.length} event/s`);\r\n\r\n return new Blob([icsContent], { type: \"text/calendar\" });\r\n }\r\n\r\n public openIcsFile(icsBlob: Blob) {\r\n let icsFile: string;\r\n\r\n if (this.deviceService.isMobileApp) {\r\n this.$log.debug(\"CalendarService - Open Ics File for Mobile App\");\r\n this.openIcsFileForMobile(icsBlob);\r\n } else {\r\n this.$log.debug(\"CalendarService - Open Ics File for Web App\");\r\n\r\n icsFile = window.URL.createObjectURL(icsBlob);\r\n this.assetService.openFile(icsFile);\r\n }\r\n }\r\n\r\n private openIcsFileForMobile(icsBlob: Blob) {\r\n const reader = new FileReader();\r\n const savedIcsFilePath = `calendar/${uuidv4()}.ics`;\r\n\r\n reader.readAsText(icsBlob);\r\n reader.onloadend = () => {\r\n let result: string;\r\n\r\n if (typeof reader.result === \"string\") {\r\n result = reader.result;\r\n } else if (reader.result instanceof ArrayBuffer) {\r\n const uint8Array = new Uint8Array(reader.result);\r\n result = String.fromCharCode.apply(null, uint8Array);\r\n }\r\n\r\n this.$log.debug(\"CalendarService - Writing Ics File to Data Directory\");\r\n\r\n this.$q\r\n .when(\r\n Filesystem.writeFile({\r\n path: savedIcsFilePath,\r\n data: result,\r\n directory: Directory.Data,\r\n encoding: Encoding.UTF8,\r\n recursive: true\r\n })\r\n )\r\n .then(result => {\r\n this.$log.debug(\"CalendarService - Opening Ics File \");\r\n FileOpener.open({\r\n filePath: result.uri,\r\n contentType: icsBlob.type,\r\n openWithDefault: true\r\n });\r\n });\r\n };\r\n }\r\n\r\n private escapeICalValue(value: string) {\r\n return value?.replace(/,/g, \"\\\\,\").replace(/;/g, \"\\\\;\").replace(/\\\\/g, \"\\\\\\\\\").replace(/\\n/g, \"\\\\n\");\r\n }\r\n}\r\n\r\nservices.service(serviceId, CalendarService);\r\n","import { app } from \"../app.module\";\r\nimport { ILocationService } from \"angular\";\r\n\r\napp.factory(\"isAdminViewDomain\", ($location: ILocationService) => {\r\n let host = $location.host();\r\n return host.indexOf('support') > -1\r\n || host.indexOf('localtest.me') > -1;\r\n})","import { app } from \"../app.module\";\r\nimport \"../admin-view/adminViewDomainFactory\";\r\nimport { User } from \"../models/user\";\r\nimport { Student } from \"../models/student\";\r\nimport { Enrolment } from \"../models/enrolment\";\r\nimport { IDataContext } from \"../services/dataContext\";\r\nimport { AuthorisationService } from \"../services/authorisationService\";\r\nimport { AdminViewRedirectService } from \"../services/adminViewRedirectService\";\r\nimport { ADMIN_VIEW_COOKIES } from \"../configuration\";\r\nimport { AdminViewViewModel } from \"../models/api\";\r\nimport { IDeviceService } from \"../services/deviceServiceProvider\";\r\nimport { IApiService } from \"../services/apiServiceProvider\";\r\nimport { IAssetService } from \"../services/assetService\";\r\nimport { IPushNotificationsRegistrationService } from \"../services/pushNotificationsRegistrationService\";\r\nimport { IRouteService } from \"../services/routeService\";\r\nimport { IUrlResolver } from \"../services/urlResolver\";\r\n\r\nvar template = require(\"./shell.html\");\r\napp.directive(\"shellComponent\", () => ({\r\n restrict: \"A\",\r\n templateUrl: template,\r\n controller: ShellComponent,\r\n controllerAs: \"vm\",\r\n scope: true\r\n}));\r\n\r\ninterface IEnrolmentEntry {\r\n student: Student;\r\n enrolment: Enrolment;\r\n}\r\n\r\nclass ShellComponent {\r\n isAuthenticated: boolean;\r\n firstName: string;\r\n lastName: string;\r\n isPpao: boolean;\r\n isActive: boolean;\r\n hasStudents: boolean;\r\n enrolmentEntries: IEnrolmentEntry[];\r\n hasMultipleEnrolments: boolean;\r\n showHeader: boolean;\r\n selectedEnrolment: IEnrolmentEntry;\r\n isAdminView: boolean;\r\n adminViewDetails: AdminViewViewModel;\r\n showSignInLink: boolean;\r\n\r\n constructor(\r\n private dataContext: IDataContext,\r\n private $log: ng.ILogService,\r\n private $location: ng.ILocationService,\r\n private routeService: IRouteService,\r\n private authorisationService: AuthorisationService,\r\n private adminViewRedirectService: AdminViewRedirectService,\r\n private deviceService: IDeviceService,\r\n private $rootScope: any & { busy: boolean },\r\n private apiService: IApiService,\r\n private pushNotificationsRegistrationService: IPushNotificationsRegistrationService,\r\n private assetService: IAssetService,\r\n private urlResolver: IUrlResolver,\r\n $route\r\n ) {\r\n \"ngInject\";\r\n this.firstName = \"\";\r\n this.lastName = \"\";\r\n this.enrolmentEntries = null;\r\n this.selectedEnrolment = null;\r\n\r\n this.updateShowHeader();\r\n this.updateShowSignInLink();\r\n\r\n $rootScope.$on(\"$routeChangeSuccess\", (event, current) => {\r\n this.updateShowHeader();\r\n this.updateShowSignInLink();\r\n\r\n if (dataContext.isAdminView()) {\r\n try {\r\n var studentId = $route.current.params[\"studentId\"];\r\n var title = $route.current.$$route.title;\r\n var path = $location.path();\r\n this.createAdminAuditLog(studentId, title, path, true);\r\n } catch (error) {\r\n console.debug(\"Error creating log\", error);\r\n }\r\n } else {\r\n // Clear the selected enrolment if user navigate outside the student path\r\n const selectedStudentPath = this.getCurrentSelectedStudentPath();\r\n if (!selectedStudentPath) {\r\n this.selectedEnrolment = null;\r\n } else {\r\n this.selectedEnrolment = this.getMatchedEnrolmentEntry(selectedStudentPath);\r\n }\r\n }\r\n });\r\n\r\n $rootScope.$on(\"cfpLoadingBar:started\", () => {\r\n $rootScope.busy = true;\r\n $(\"body\").css(\"cursor\", \"progress\");\r\n });\r\n\r\n $rootScope.$on(\"cfpLoadingBar:completed\", () => {\r\n $rootScope.busy = false;\r\n $(\"body\").css(\"cursor\", \"default\");\r\n });\r\n\r\n dataContext.getData().then(user => {\r\n this.onUserRefreshed(null, user);\r\n });\r\n\r\n dataContext.onUserSignedIn((ev, user) => this.onUserRefreshed(ev, user, true));\r\n dataContext.onUserSignedOut((ev, user) => this.onUserSignedOut());\r\n dataContext.onDataRefreshed((ev, user) => this.onUserRefreshed(ev, user));\r\n }\r\n\r\n canAccess(enrolment: Enrolment) {\r\n return !this.dataContext.isAdminView() || !this.adminViewDetails || enrolment.schoolCode == this.adminViewDetails.centreCode.toString();\r\n }\r\n\r\n onUserRefreshed(e, user: User, isSignedInEvent: boolean = false) {\r\n this.isAuthenticated = this.dataContext.isAuthenticated();\r\n\r\n if (user) {\r\n this.firstName = user.firstName;\r\n this.lastName = user.lastName;\r\n this.isPpao = user.isPpao;\r\n this.isActive = user.isActive;\r\n this.hasStudents = user.hasAnyStudents();\r\n this.isAdminView = user.isAdminView;\r\n this.adminViewDetails = user.adminViewDetails;\r\n this.enrolmentEntries = user.allAvailableStudents\r\n .map(s =>\r\n s.enrolments.map(e => ({\r\n displayName: `${s.displayName()} - ${e.school}`,\r\n student: s,\r\n enrolment: e\r\n }))\r\n )\r\n .reduce((acc, curr) => acc.concat(curr), [] as IEnrolmentEntry[]);\r\n\r\n const selectedStudentPath = this.getCurrentSelectedStudentPath();\r\n if (!selectedStudentPath) {\r\n this.selectedEnrolment = null;\r\n } else {\r\n this.selectedEnrolment = this.getMatchedEnrolmentEntry(selectedStudentPath);\r\n }\r\n }\r\n\r\n if (isSignedInEvent) {\r\n this.pushNotificationsRegistrationService.registerToken();\r\n }\r\n }\r\n\r\n private getMatchedEnrolmentEntry(selectedStudentPath: { oneSchoolId: string; schoolCode: string; path: string }) {\r\n const matchedEnrolmentEntries = this.enrolmentEntries.filter(a => a.student.oneSchoolId === selectedStudentPath.oneSchoolId && a.enrolment.schoolCode == selectedStudentPath.schoolCode);\r\n if (matchedEnrolmentEntries.length > 0) {\r\n return matchedEnrolmentEntries[0];\r\n }\r\n\r\n return null;\r\n }\r\n\r\n logout() {\r\n this.$rootScope.showFullScreenLoadingPane(\"Please wait while logging out...\");\r\n\r\n this.isAuthenticated = false;\r\n\r\n this.pushNotificationsRegistrationService.unregisterToken().then(() => {\r\n this.authorisationService.logout().finally(() => {\r\n this.$rootScope.hideFullScreenLoadingPane();\r\n });\r\n });\r\n }\r\n\r\n redirectToStudent(selectedEnrolment: IEnrolmentEntry) {\r\n this.$log.debug(\"Click\", selectedEnrolment);\r\n let redirectPath = \"/\";\r\n\r\n if (selectedEnrolment) {\r\n redirectPath = `/student/${selectedEnrolment.student.oneSchoolId}/${selectedEnrolment.enrolment.schoolCode}`;\r\n }\r\n\r\n this.$log.debug(`Redirecting to ${redirectPath}`);\r\n this.$location.path(redirectPath);\r\n }\r\n\r\n getCurrentSelectedStudentPath() {\r\n const currentPath = this.$location.path();\r\n const pathSegments = currentPath.split(\"/\");\r\n let currentOneSchoolId: string;\r\n let currentSchoolCode: string;\r\n\r\n // Handle the current path: /student/OneSchoolId/SchoolCode\r\n const isSelectedStudentPath =\r\n pathSegments.length > 2 &&\r\n this.enrolmentEntries?.some(function (enrolmentEntry) {\r\n currentOneSchoolId = pathSegments[pathSegments.length - 2];\r\n currentSchoolCode = pathSegments[pathSegments.length - 1];\r\n return enrolmentEntry.student.oneSchoolId === currentOneSchoolId && enrolmentEntry.enrolment.schoolCode === currentSchoolCode;\r\n });\r\n if (isSelectedStudentPath) {\r\n const currentPath = pathSegments[pathSegments.length - 3];\r\n\r\n return {\r\n oneSchoolId: currentOneSchoolId,\r\n schoolCode: currentSchoolCode,\r\n path: currentPath\r\n };\r\n }\r\n\r\n return null;\r\n }\r\n\r\n onUserSignedOut() {\r\n this.isAuthenticated = false;\r\n\r\n this.$log.debug(\"onUserSignedOut - redirecting to login\");\r\n this.adminViewRedirectService.landingPageRedirect();\r\n }\r\n\r\n updateShowHeader() {\r\n this.$log.debug(\"Update show header\");\r\n this.showHeader = !this.routeService.shouldHideHeader(this.$location.path());\r\n }\r\n\r\n updateShowSignInLink() {\r\n this.showSignInLink = !this.isAuthenticated && !this.routeService.isOnLoginPage(this.$location.path());\r\n }\r\n\r\n schoolUserAccessingAdminView() {\r\n // if school user, loggedinUsername and schoolUsername is the same. Its different if its a corporate user impersonating a school user\r\n return this.adminViewDetails.schoolUsername.toUpperCase() === this.adminViewDetails.loggedInUsername.toUpperCase();\r\n }\r\n\r\n openHelpInSystemBrowser($event: Event) {\r\n if (!this.deviceService.isMobileApp) return; // just use the href\r\n $event.preventDefault();\r\n this.assetService.mobileOpenFile(this.urlResolver.resolve(\"#/help\"), false);\r\n }\r\n\r\n createAdminAuditLog(studentId: string, routeTitle: string, routePath: string, isAdminView: boolean) {\r\n var schoolUserId = sessionStorage.getItem(ADMIN_VIEW_COOKIES.SCHOOL_USER_ID);\r\n var ppaoId = sessionStorage.getItem(ADMIN_VIEW_COOKIES.PARENT_ID);\r\n var centreCode = sessionStorage.getItem(ADMIN_VIEW_COOKIES.CENTRE_CODE);\r\n\r\n const auditRecord = {\r\n isAdminView: isAdminView,\r\n page: `${routeTitle} - (${routePath})`,\r\n schoolUserId: schoolUserId,\r\n schoolUsername: this.adminViewDetails.schoolUsername,\r\n ppaoId: ppaoId,\r\n centreCode: centreCode,\r\n eqIds: []\r\n };\r\n\r\n if (studentId) {\r\n auditRecord.eqIds.push(studentId);\r\n\r\n this.apiService.recordAudit(auditRecord);\r\n } else {\r\n this.dataContext\r\n .getData()\r\n .then(user => user.students.forEach(s => auditRecord.eqIds.push(s.oneSchoolId)))\r\n .finally(() => this.apiService.recordAudit(auditRecord));\r\n }\r\n }\r\n}\r\n","import moment from \"moment\";\r\n\r\nimport { app } from \"../app.module\";\r\napp.directive(\"cardExpiry\", [\r\n function () {\r\n return {\r\n require: \"ngModel\",\r\n link: function (scope, elem, attr, ngModel) {\r\n ngModel.$parsers.push(validateVerificatioNumber);\r\n\r\n function validateVerificatioNumber(verificationNumber) {\r\n ngModel.$setValidity(\"format\", true);\r\n ngModel.$setValidity(\"futureDate\", true);\r\n\r\n if (verificationNumber === undefined) {\r\n ngModel.$setValidity(\"format\", false);\r\n return verificationNumber;\r\n }\r\n\r\n if (verificationNumber.length != 4) {\r\n ngModel.$setValidity(\"format\", false);\r\n return verificationNumber;\r\n }\r\n\r\n var parsedMonth = parseInt(verificationNumber[0] + verificationNumber[1], 10);\r\n var parsedYear = parseInt(verificationNumber[2] + verificationNumber[3], 10);\r\n\r\n if (isNaN(parsedMonth) || isNaN(parsedYear)) {\r\n ngModel.$setValidity(\"format\", false);\r\n return verificationNumber;\r\n }\r\n\r\n var now = moment();\r\n var nowYear = parseInt(now.format(\"YY\"), 10);\r\n var nowMonth = parseInt(now.format(\"MM\"), 10);\r\n\r\n if (parsedMonth != 99) {\r\n var isInFuture = parsedYear > nowYear || (parsedYear === nowYear && parsedMonth >= nowMonth);\r\n var monthIsValidMonth = parsedMonth <= 12;\r\n\r\n ngModel.$setValidity(\"format\", monthIsValidMonth);\r\n\r\n if (monthIsValidMonth) ngModel.$setValidity(\"futureDate\", isInFuture);\r\n\r\n return verificationNumber;\r\n }\r\n\r\n return verificationNumber;\r\n }\r\n }\r\n };\r\n }\r\n]);\r\n","import { app } from \"../app.module\";\r\napp.directive(\"checkList\", function () {\r\n return {\r\n scope: {\r\n list: \"=checkList\",\r\n value: \"@\"\r\n },\r\n link: function (scope: any, elem) {\r\n var handler = function (setup) {\r\n var checked = elem.prop(\"checked\");\r\n var index = scope.list.indexOf(scope.value);\r\n\r\n if (checked && index == -1) {\r\n if (setup) elem.prop(\"checked\", false);\r\n else scope.list.push(scope.value);\r\n } else if (!checked && index != -1) {\r\n if (setup) elem.prop(\"checked\", true);\r\n else scope.list.splice(index, 1);\r\n }\r\n };\r\n\r\n var setupHandler = handler.bind(null, true);\r\n var changeHandler = handler.bind(null, false);\r\n\r\n elem.on(\"change\", function () {\r\n scope.$apply(changeHandler);\r\n });\r\n scope.$watch(\"list\", setupHandler, true);\r\n }\r\n };\r\n});\r\n","import {app} from '../app.module';\r\napp.directive('creditCardNumber', ['creditCardService', function (creditCardService) {\r\n return {\r\n require: 'ngModel',\r\n link: function (scope, elem, attr, ngModel) {\r\n ngModel.$parsers.unshift(checkForValidCreditCardNumber);\r\n ngModel.$formatters.unshift(checkForValidCreditCardNumber);\r\n\r\n function checkForValidCreditCardNumber(creditCardNumber) {\r\n if (creditCardNumber == undefined) return '';\r\n\r\n // allow entering numbers, spaces and dashes. prevent anything else\r\n var creditCardNumberWithoutDigitsSpacesOrDashes = creditCardNumber.replace(/[^0-9 \\-]/g, '');\r\n if (creditCardNumberWithoutDigitsSpacesOrDashes != creditCardNumber) {\r\n ngModel.$setViewValue(creditCardNumberWithoutDigitsSpacesOrDashes);\r\n ngModel.$render();\r\n\r\n return creditCardNumberWithoutDigitsSpacesOrDashes;\r\n } else {\r\n\r\n var validation = creditCardService.isAValidCreditCardNumber(creditCardNumber);\r\n ngModel.$setValidity('creditCardNumber', validation.isValid);\r\n return validation.canonicalNumber;\r\n }\r\n }\r\n }\r\n };\r\n }]);","import {app} from '../app.module';\r\nimport { IScope } from 'angular';\r\n\r\ninterface ICurrencyScope extends IScope\r\n{\r\n min?: string\r\n max?: string\r\n ngRequired?: string\r\n}\r\n\r\napp .directive('currency', ['$filter', '$locale', function ($filter, $locale) {\r\n return {\r\n require: 'ngModel',\r\n scope: {\r\n min: '=min',\r\n max: '=max',\r\n ngRequired: '=ngRequired'\r\n },\r\n\r\n link: function (scope: ICurrencyScope, element, attrs, ngModel) {\r\n\r\n function decimalRex(dChar) {\r\n return RegExp(\"\\\\d|\\\\\" + dChar, 'g');\r\n }\r\n\r\n function clearRex(dChar) {\r\n return RegExp(\"((\\\\\" + dChar + \")|([0-9]{1,}\\\\\" + dChar + \"?))&?[0-9]{0,2}\", 'g');\r\n }\r\n\r\n function decimalSepRex(dChar) {\r\n return RegExp(\"\\\\\" + dChar, \"g\");\r\n }\r\n\r\n function clearValue(value) {\r\n value = String(value);\r\n var dSeparator = $locale.NUMBER_FORMATS.DECIMAL_SEP;\r\n var clear = null;\r\n\r\n if (value.match(decimalSepRex(dSeparator))) {\r\n clear = value.match(decimalRex(dSeparator))\r\n .join(\"\").match(clearRex(dSeparator));\r\n clear = clear ? clear[0].replace(dSeparator, \".\") : null;\r\n }\r\n else if (value.match(decimalSepRex(\".\"))) {\r\n clear = value.match(decimalRex(\".\"))\r\n .join(\"\").match(clearRex(\".\"));\r\n clear = clear ? clear[0] : null;\r\n }\r\n else {\r\n clear = value.match(/\\d/g);\r\n clear = clear ? clear.join(\"\") : null;\r\n }\r\n\r\n return clear;\r\n }\r\n\r\n ngModel.$parsers.push(function (viewValue) {\r\n var cVal = clearValue(viewValue);\r\n return parseFloat(cVal || 0);\r\n });\r\n\r\n element.on(\"blur\", function () {\r\n element.val($filter('currency')(ngModel.$modelValue));\r\n });\r\n\r\n element.on(\"click\", function () {\r\n element.trigger(\"select\")\r\n });\r\n\r\n ngModel.$formatters.unshift(function (value) {\r\n return $filter('currency')(value);\r\n });\r\n\r\n scope.$watch(function () {\r\n return ngModel.$modelValue\r\n }, function (newValue, oldValue) {\r\n runValidations(newValue);\r\n });\r\n\r\n function runValidations(cVal) {\r\n if (!scope.ngRequired && isNaN(cVal)) {\r\n return;\r\n }\r\n if (scope.min) {\r\n var min = parseFloat(scope.min);\r\n ngModel.$setValidity('min', cVal >= min);\r\n }\r\n if (scope.max) {\r\n var max = parseFloat(scope.max);\r\n ngModel.$setValidity('max', cVal <= max);\r\n }\r\n }\r\n }\r\n }\r\n }]);","import {app} from '../app.module';\r\napp.directive('currentLink', ['$location', function ($location) {\r\n\r\n return {\r\n restrict: 'A',\r\n link: function (scope, element, attrs) {\r\n\r\n scope.$watch('$location.path()', function () {\r\n var classToToggle = attrs.currentLink;\r\n var currentUrl = $location.path();\r\n\r\n var linkUrl = element.find('a').attr('href');\r\n if (linkUrl) {\r\n // remove leading #\r\n linkUrl = linkUrl.substring(1);\r\n }\r\n\r\n if (linkUrl === currentUrl) {\r\n element.addClass(classToToggle);\r\n }\r\n else {\r\n element.removeClass(classToToggle);\r\n }\r\n });\r\n\r\n }\r\n };\r\n\r\n }]);","import {app} from '../app.module';\r\nimport INgModelController = angular.INgModelController;\r\napp.directive('digitsOnly', function() {\r\n return {\r\n require: 'ngModel',\r\n link: function (scope, elem, attr, ngModel:INgModelController) {\r\n ngModel.$parsers.unshift(checkForDigits);\r\n ngModel.$formatters.unshift(checkForDigits);\r\n\r\n function checkForDigits(input) {\r\n if (input == undefined) return '';\r\n\r\n // allow entering numbers. prevent anything else\r\n var inputWithoutDigits = input.replace(/[^0-9]/g, '');\r\n if (inputWithoutDigits != input) {\r\n ngModel.$setViewValue(inputWithoutDigits);\r\n ngModel.$render();\r\n\r\n return inputWithoutDigits;\r\n } else {\r\n return input;\r\n }\r\n }\r\n }\r\n };\r\n });","import { app } from \"../app.module\";\r\nimport { ILogService, IScope } from \"angular\";\r\nimport { IDeviceService } from \"../services/deviceServiceProvider\";\r\nimport { IToastrService } from \"angular-toastr\";\r\nimport { IAssetService } from \"../services/assetService\";\r\ninterface IExternalFileDownloadLinkScope extends IScope {\r\n href?: string;\r\n}\r\n\r\napp.directive(\"externalFileDownloadLink\", function ($log: ILogService, toastr: IToastrService, deviceService: IDeviceService, assetService: IAssetService) {\r\n \"ngInject\";\r\n return {\r\n restrict: \"A\",\r\n scope: {\r\n href: \"@externalFileDownloadLink\"\r\n },\r\n link: function (scope: IExternalFileDownloadLinkScope, element) {\r\n $(element).on(\"click\", function (e) {\r\n e.preventDefault();\r\n\r\n const url = scope.href;\r\n\r\n $log.debug(`externalFileDownloadLink - ${url}`);\r\n\r\n if (!deviceService.isMobileApp) {\r\n assetService.openFile(url);\r\n return;\r\n }\r\n assetService.mobileOpenFile(url, true).catch(() => {\r\n toastr.error(\"Error downloading the file\", \"Error\");\r\n });\r\n });\r\n }\r\n };\r\n});\r\n","import {app} from '../app.module';\r\napp .directive('focus', ['$timeout', function ($timeout) {\r\n return {\r\n scope: {\r\n trigger: '@focus'\r\n },\r\n link: function (scope, element) {\r\n scope.$watch('trigger', function (value) {\r\n if (value === \"true\") {\r\n $timeout(function () {\r\n try {\r\n element[0].focus();\r\n } catch (e) { \r\n // Fails on IE8. Can't check for existence of element[0].focus as it's also the focus attribute.\r\n // Swallow it so we don't log it to the server side.\r\n } \r\n });\r\n }\r\n });\r\n }\r\n };\r\n }]);","import { app } from \"../app.module\";\r\nimport moment from \"moment\";\r\n\r\nimport INgModelController = angular.INgModelController;\r\napp.directive(\"greaterThanDate\", function () {\r\n return {\r\n require: \"ngModel\",\r\n link: function (scope, elem, attr, ngModel: INgModelController) {\r\n var format = attr[\"format\"],\r\n fromDate,\r\n toDate,\r\n timeFrom,\r\n timeTo;\r\n\r\n attr.$observe(\"fromDate\", function (value) {\r\n fromDate = (value).replace(/\"/g, \"\");\r\n performValidation();\r\n });\r\n\r\n attr.$observe(\"timeFrom\", function (value) {\r\n timeFrom = value;\r\n performValidation();\r\n });\r\n\r\n attr.$observe(\"toDate\", function (value) {\r\n toDate = (value).replace(/\"/g, \"\");\r\n performValidation();\r\n });\r\n\r\n attr.$observe(\"timeTo\", function (value) {\r\n timeTo = value;\r\n performValidation();\r\n });\r\n\r\n ngModel.$parsers.unshift(function (value) {\r\n timeTo = value;\r\n performValidation();\r\n return value;\r\n });\r\n\r\n function performValidation() {\r\n if (fromDate && toDate && timeFrom && timeTo) {\r\n var from = moment(fromDate).add(moment.duration(timeFrom).asHours(), \"hours\");\r\n var to = moment(toDate).add(moment.duration(timeTo).asHours(), \"hours\");\r\n\r\n ngModel.$setValidity(\"greaterThanDate\", to.toDate() > from.toDate());\r\n }\r\n }\r\n }\r\n };\r\n});\r\n","import angular from \"angular\";\r\nimport { app } from \"../app.module\";\r\nimport INgModelController = angular.INgModelController;\r\napp.directive(\"isChanged\", function () {\r\n return {\r\n require: \"ngModel\",\r\n restrict: \"A\",\r\n scope: {\r\n isChanged: \"=\"\r\n },\r\n link: function (scope: any, elem, attr, ngModel: INgModelController) {\r\n scope.$watch(\r\n function () {\r\n var formValue = scope.isChanged.toUpperCase();\r\n var compareToValue = String(ngModel.$modelValue).toUpperCase();\r\n\r\n return (ngModel.$pristine && angular.isUndefined(ngModel.$modelValue)) || formValue !== compareToValue;\r\n },\r\n function (currentValue) {\r\n ngModel.$setValidity(\"isChanged\", currentValue);\r\n }\r\n );\r\n }\r\n };\r\n});\r\n","import moment from \"moment\";\r\nimport { app } from \"../app.module\";\r\nimport INgModelController = angular.INgModelController;\r\napp.directive(\"isDate\", function () {\r\n return {\r\n require: \"ngModel\",\r\n link: function (scope, elem, attr, ngModel: INgModelController) {\r\n var format = attr[\"format\"];\r\n\r\n //For DOM -> model validation\r\n ngModel.$parsers.unshift(function (value) {\r\n var date = moment(value, format);\r\n\r\n ngModel.$setValidity(\"isDate\", date.isValid());\r\n\r\n return value;\r\n });\r\n\r\n //For model -> DOM validation\r\n ngModel.$formatters.unshift(function (value) {\r\n var date = moment(value, format);\r\n\r\n ngModel.$setValidity(\"isDate\", date.isValid());\r\n\r\n return value;\r\n });\r\n }\r\n };\r\n});\r\n","import moment from \"moment\";\r\nimport { app } from \"../app.module\";\r\nimport INgModelController = angular.INgModelController;\r\napp.directive(\"isPastDate\", function () {\r\n return {\r\n require: \"ngModel\",\r\n link: function (scope, elem, attr, ngModel: INgModelController) {\r\n var format = attr[\"format\"];\r\n\r\n //For DOM -> model validation\r\n ngModel.$parsers.unshift(function (value) {\r\n var date = moment(value, format);\r\n var now = moment();\r\n ngModel.$setValidity(\"isPastDate\", date.isBefore(now));\r\n\r\n return value;\r\n });\r\n\r\n //For model -> DOM validation\r\n ngModel.$formatters.unshift(function (value) {\r\n var date = moment(value, format);\r\n var now = moment();\r\n ngModel.$setValidity(\"isPastDate\", date.isBefore(now));\r\n\r\n return value;\r\n });\r\n }\r\n };\r\n});\r\n","import { app } from \"../app.module\";\r\nimport angular from \"angular\";\r\napp.directive(\"loadingPane\", function () {\r\n return {\r\n restrict: \"A\",\r\n link: function (scope, element, attr) {\r\n var directiveId = \"loadingPane\";\r\n\r\n var targetElement;\r\n\r\n var overlayElement;\r\n var spinnerElement;\r\n\r\n function init(element) {\r\n targetElement = element;\r\n\r\n overlayElement = angular.element(\"
    \");\r\n overlayElement.addClass(\"overlay\");\r\n\r\n spinnerElement = angular.element(\"
    \");\r\n spinnerElement.addClass(\"overlay-spinner\");\r\n\r\n targetElement.append(overlayElement);\r\n targetElement.append(spinnerElement);\r\n }\r\n\r\n function updateVisibility(isVisible) {\r\n if (isVisible) {\r\n show();\r\n } else {\r\n hide();\r\n }\r\n }\r\n\r\n function show() {\r\n overlayElement.css(\"display\", \"block\");\r\n spinnerElement.css(\"display\", \"block\");\r\n }\r\n\r\n function hide() {\r\n overlayElement.css(\"display\", \"none\");\r\n spinnerElement.css(\"display\", \"none\");\r\n }\r\n\r\n init(element);\r\n\r\n scope.$watch(attr[directiveId], function (newVal) {\r\n updateVisibility(newVal);\r\n });\r\n\r\n scope.$on(\"$destroy\", function cleanup() {\r\n overlayElement.remove();\r\n spinnerElement.remove();\r\n });\r\n }\r\n };\r\n});\r\n","import angular from \"angular\";\r\nimport { app } from \"../app.module\";\r\nimport INgModelController = angular.INgModelController;\r\napp.directive(\"match\", function () {\r\n return {\r\n require: \"ngModel\",\r\n restrict: \"A\",\r\n scope: {\r\n match: \"=\"\r\n },\r\n link: function (scope: any, elem, attr, ngModel: INgModelController) {\r\n scope.$watch(\r\n function () {\r\n return (ngModel.$pristine && angular.isUndefined(ngModel.$modelValue)) || scope.match === ngModel.$modelValue;\r\n },\r\n function (currentValue) {\r\n ngModel.$setValidity(\"match\", currentValue);\r\n }\r\n );\r\n }\r\n };\r\n});\r\n","import {app} from '../app.module';\r\nimport INgModelController = angular.INgModelController;\r\napp.directive('matchCaseInsensitive', function () {\r\n\r\n return {\r\n require: 'ngModel',\r\n restrict: 'A',\r\n scope: {\r\n matchCaseInsensitive: '='\r\n },\r\n link: function (scope:any, elem, attr, ngModel:INgModelController) {\r\n scope.$watch(function () {\r\n return !ngModel.$modelValue\r\n || !scope.matchCaseInsensitive\r\n || scope.matchCaseInsensitive.toLowerCase() === ngModel.$modelValue.toLowerCase();\r\n }, function (currentValue) {\r\n ngModel.$setValidity('matchCaseInsensitive', currentValue);\r\n });\r\n }\r\n };\r\n});","import moment from \"moment\";\r\nimport { app } from \"../app.module\";\r\nimport INgModelController = angular.INgModelController;\r\nimport { parseDate } from \"../services/dateHelper\";\r\napp.directive(\"minDate\", function () {\r\n return {\r\n require: \"ngModel\",\r\n link: function (scope, elem, attr, ngModel: INgModelController) {\r\n var minDate,\r\n format = attr[\"format\"];\r\n\r\n attr.$observe(\"minDate\", function (value) {\r\n minDate = parseDate(value) ?? moment(value, format);\r\n // Revalidate after the min date changes\r\n var currentDate = moment(ngModel.$modelValue, format);\r\n ngModel.$setValidity(\"minDate\", minDate <= currentDate);\r\n });\r\n\r\n //For DOM -> model validation\r\n ngModel.$parsers.unshift(function (value) {\r\n var date = moment(value, format);\r\n\r\n ngModel.$setValidity(\"minDate\", minDate <= date);\r\n\r\n return value;\r\n });\r\n\r\n //For model -> DOM validation\r\n ngModel.$formatters.unshift(function (value) {\r\n var date = moment(value, format);\r\n\r\n ngModel.$setValidity(\"minDate\", minDate <= date);\r\n\r\n return value;\r\n });\r\n }\r\n };\r\n});\r\n","import {app} from '../app.module';\r\napp.directive('mobileNumber', ['phoneService', function (phoneService) {\r\n var VALID_AUSTRALIAN_PREFIXES = ['04', '014'];\r\n\r\n return {\r\n require: 'ngModel',\r\n link: function (scope, elem, attr, ngModel) {\r\n ngModel.$parsers.unshift(checkForValidMobileNumber);\r\n ngModel.$formatters.unshift(checkForValidMobileNumber);\r\n\r\n function checkForValidMobileNumber(mobileNumber) {\r\n ngModel.$setValidity('mobileNumber',phoneService.isAValidPhoneNumber(mobileNumber, VALID_AUSTRALIAN_PREFIXES));\r\n return mobileNumber;\r\n }\r\n }\r\n };\r\n }]);","import { app } from \"../app.module\";\r\nimport { IDirective } from \"angular\";\r\nimport { IDataContext } from \"../services/dataContext\";\r\nimport ng from \"angular\";\r\n\r\ninterface IParentOnlyAttributes extends ng.IAttributes {\r\n ngDisabled?: string;\r\n}\r\n\r\nclass ParentOnlyDirective implements IDirective {\r\n restrict = \"A\";\r\n\r\n constructor(private dataContext: IDataContext) {}\r\n\r\n link(scope: ng.IScope, elem: any, attr: IParentOnlyAttributes) {\r\n if (this.dataContext.isAdminView()) {\r\n elem[0].disabled = true;\r\n if (attr.ngDisabled) {\r\n attr.ngDisabled = \"true\";\r\n }\r\n }\r\n }\r\n}\r\n\r\nconst parentOnlyDirective: ng.IDirectiveFactory = (dataContext: IDataContext) => new ParentOnlyDirective(dataContext);\r\napp.directive(\"parentOnly\", parentOnlyDirective);\r\n","import { app } from \"../app.module\";\r\nimport INgModelController = angular.INgModelController;\r\napp.directive(\"password\", function () {\r\n // - A minimum of 8 alpha / numeric characters\r\n // - Contain at least 1 special character ('!', '?', '@', '#', '$', '%', '^', '&', '*', '-', '+', '=', ',', ':', ';', '.')\r\n\r\n var SPECIAL_CHARS = \"!?@#$%^&*\\\\-+=:;.,\"; // '-' needs to be escaped, hence '\\-'\r\n var REG_EXP = new RegExp(\r\n \"\" +\r\n \"^.*\" +\r\n \"(?=.{8,})\" + // minimum of 8 characters\r\n \"(?=.*[\" +\r\n SPECIAL_CHARS +\r\n \"])\" + // at least one special character\r\n \".*$\"\r\n );\r\n\r\n function isValidPassword(password) {\r\n // password must be minimum of 8 characters including one\r\n // special character\r\n if (password === null || password === undefined) return false;\r\n if (password.indexOf(' ') >= 0) return false;\r\n\r\n return REG_EXP.test(password);\r\n }\r\n\r\n return {\r\n require: \"ngModel\",\r\n link: function (scope, elem, attr, ngModel: INgModelController) {\r\n ngModel.$parsers.unshift(checkForValidPassword);\r\n ngModel.$formatters.unshift(checkForValidPassword);\r\n\r\n function checkForValidPassword(password) {\r\n ngModel.$setValidity(\"password\", isValidPassword(password));\r\n return password;\r\n }\r\n }\r\n };\r\n});\r\n","import { app } from \"../app.module\";\r\nimport { parseDate } from \"../services/dateHelper\";\r\n\r\n// these two directives will perform cross date validation making sure that dateFrom =< dateTo\r\n// one accesses the value of the other via an attribute and uses that value to compare it to\r\n// its own value (the bound data and attribute value are monitored for changes)\r\napp.directive(\"validateGreaterOrEqualDate\", isGreaterOrEqualDateValidator);\r\napp.directive(\"validateLessOrEqualDate\", isLessOrEqualDateValidator);\r\napp.directive(\"validateIsNotEmpty\", isNotEmptyValidator);\r\napp.directive(\"validateIsValidDate\", isValidDateValidator);\r\napp.directive(\"validateIsWeekDay\", isWeekDayValidator);\r\n\r\nfunction isLessOrEqualDate(date, maxDate) {\r\n const parsedMaxDate = parseDate(maxDate);\r\n const parsedDate = parseDate(date);\r\n\r\n if (parsedMaxDate && parsedDate) {\r\n return parsedMaxDate.isSameOrAfter(parsedDate);\r\n } else {\r\n return true;\r\n }\r\n}\r\n\r\nfunction isGreaterOrEqualDate(date, minDate) {\r\n const parsedMinDate = parseDate(minDate);\r\n const parsedDate = parseDate(date);\r\n\r\n if (parsedMinDate && parsedDate) {\r\n return parsedMinDate.isSameOrBefore(parsedDate);\r\n } else {\r\n return true;\r\n }\r\n}\r\n\r\nfunction isWeekDay(date) {\r\n const result = parseDate(date);\r\n\r\n return result !== null && result.isoWeekday() <= 5;\r\n}\r\n\r\nfunction isNotEmpty(date) {\r\n if (date) {\r\n if (typeof date === \"string\") {\r\n return date.trim() !== \"\";\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction isLessOrEqualDateValidator() {\r\n return {\r\n restrict: \"A\",\r\n require: \"ngModel\",\r\n link: (scope, element, attributes, control) => {\r\n control.$validators.isLessOrEqualDate = value => isLessOrEqualDate(value, attributes.validateLessOrEqualDate);\r\n\r\n scope.$watch(\"data\", () => control.$validate(), true); // monitor input value for changes\r\n attributes.$observe(\"validateLessOrEqualDate\", () => control.$validate()); // monitor attribute bound value for changes\r\n }\r\n };\r\n}\r\n\r\nfunction isGreaterOrEqualDateValidator() {\r\n return {\r\n restrict: \"A\",\r\n require: \"ngModel\",\r\n link: (scope, element, attributes, control) => {\r\n control.$validators.isGreaterOrEqualDate = value => isGreaterOrEqualDate(value, attributes.validateGreaterOrEqualDate);\r\n\r\n scope.$watch(\"data\", () => control.$validate(), true);\r\n attributes.$observe(\"validateGreaterOrEqualDate\", () => control.$validate());\r\n }\r\n };\r\n}\r\n\r\nfunction isNotEmptyValidator() {\r\n return {\r\n restrict: \"A\",\r\n require: \"ngModel\",\r\n link: (scope, element, attributes, control) => {\r\n control.$validators.isNotEmpty = value => {\r\n return isNotEmpty(value);\r\n };\r\n\r\n scope.$watch(\"data\", () => control.$validate(), true); // monitor input value for changes\r\n }\r\n };\r\n}\r\n\r\nfunction isValidDateValidator() {\r\n return {\r\n restrict: \"A\",\r\n require: \"ngModel\",\r\n link: (scope, element, attributes, control) => {\r\n control.$validators.isValidDate = value => isNotEmpty(value) && parseDate(value) !== null;\r\n\r\n scope.$watch(\"data\", () => control.$validate(), true); // monitor input value for changes\r\n }\r\n };\r\n}\r\n\r\nfunction isWeekDayValidator() {\r\n return {\r\n restrict: \"A\",\r\n require: \"ngModel\",\r\n link: (scope, element, attributes, control) => {\r\n control.$validators.isWeekDay = value => !value || isWeekDay(value);\r\n\r\n scope.$watch(\"data\", () => control.$validate(), true); // monitor input value for changes\r\n }\r\n };\r\n}\r\n","import {app} from '../app.module';\r\napp\r\n .directive('phoneNumber', ['phoneService', function (phoneService) {\r\n var VALID_PREFIXES = ['02', '03', '07', '08', '13', '18'];\r\n\r\n return {\r\n require: 'ngModel',\r\n link: function (scope, elem, attr, ngModel) {\r\n ngModel.$parsers.unshift(checkForValidPhoneNumber);\r\n ngModel.$formatters.unshift(checkForValidPhoneNumber);\r\n\r\n function checkForValidPhoneNumber(phoneNumber) {\r\n ngModel.$setValidity('phoneNumber', phoneService.isAValidPhoneNumber(phoneNumber, VALID_PREFIXES));\r\n return phoneNumber;\r\n }\r\n }\r\n };\r\n }]);\r\n","import {app} from '../app.module';\r\napp\r\n\r\n .directive('qpTooltip', function () {\r\n return {\r\n restrict: 'EA',\r\n transclude: true,\r\n scope: {\r\n linkText: '@',\r\n className: '@'\r\n },\r\n template: '
    \\n \\n
    \\n
    \\n \\n \\n
    \\n\\n
    \\n
    ',\r\n controllerAs: 'vm',\r\n controller: function ($rootScope, $scope) {\r\n \"ngInject\";\r\n var vm = this;\r\n var eventName = 'tooltip-showing';\r\n\r\n vm.visible = false;\r\n vm.toggle = toggle;\r\n\r\n var unbindOnTooltipShowing = $rootScope.$on(eventName, onTooltipShowing);\r\n $scope.$on('$destroy', unbindOnTooltipShowing);\r\n\r\n function toggle() {\r\n var isVisible = !vm.visible;\r\n\r\n if (isVisible) {\r\n $rootScope.$broadcast(eventName);\r\n }\r\n\r\n vm.visible = isVisible;\r\n }\r\n\r\n function onTooltipShowing() {\r\n vm.visible = false;\r\n }\r\n }\r\n };\r\n });\r\n","import \"./vendor\";\r\nimport { app } from \"./app.module\";\r\nimport \"./config.http\";\r\nimport \"./config.routes\";\r\nimport \"./config\";\r\nimport \"./configuration\";\r\nimport \"./services\";\r\nimport \"./models\";\r\nimport \"./layout/shell\";\r\nimport \"./directives\";\r\nimport \"./ie8Polyfills\";\r\nimport { platformService } from \"./services/platformService\";\r\n\r\nimport \"../content/site.less\";\r\nimport { IDataContext } from \"./services/dataContext\";\r\nimport { IDeviceService } from \"./services/deviceServiceProvider\";\r\nimport { IApiService } from \"./services/apiServiceProvider\";\r\nimport { ILocationService, ILogService, route } from \"angular\";\r\nimport { ILocalStorageService } from \"angular-local-storage\";\r\nimport { redirectRoutePathStorageKey } from \"./services/pushNotificationsService\";\r\nimport { FirebaseAnalytics } from \"@capacitor-firebase/analytics\";\r\nimport { guid } from \"./services/common\";\r\nimport { ICsrfTokenService } from \"./services/csrfTokenService\";\r\nimport { IRouteService } from \"./services/routeService\";\r\nimport { App } from \"@capacitor/app\";\r\n\r\n// Handle routing errors and success events\r\napp.run(\r\n (\r\n $rootScope,\r\n $route: route.IRouteService,\r\n $location: ILocationService,\r\n dataContext: IDataContext,\r\n $log: ILogService,\r\n $window,\r\n $injector,\r\n appInit,\r\n routeService: IRouteService,\r\n csrfTokenService: ICsrfTokenService,\r\n platformService: platformService,\r\n deviceService: IDeviceService,\r\n localStorageService: ILocalStorageService,\r\n apiService: IApiService\r\n ) => {\r\n // Include $route to kick start the router.\r\n // Include errorReporting to bootstrap error reporting\r\n if (!deviceService.isMobileApp) {\r\n dataContext.maybeSignInAdmin();\r\n }\r\n\r\n $rootScope.currentDate = Date.now();\r\n $rootScope.userSessionId = guid();\r\n\r\n csrfTokenService\r\n .ensureCsrfToken()\r\n .then(function () {\r\n dataContext\r\n .verifyAuthenticated()\r\n .then(() => {\r\n $log.debug(\"Authenticated and initialized\");\r\n })\r\n .catch(() => {\r\n $log.debug(\"Not authenticated and initialized\");\r\n\r\n if (!routeService.isAnonymousRoute($location.path())) {\r\n dataContext.flagSignedOut(false);\r\n }\r\n })\r\n .finally(function () {\r\n // we must resolve, otherwise we're stuck. The routeChangeStart handler will redirect if required.\r\n appInit.resolve();\r\n\r\n $route.reload();\r\n });\r\n })\r\n .catch(() => {\r\n // we must resolve, otherwise we're stuck. The routeChangeStart handler will redirect if required.\r\n appInit.resolve();\r\n $rootScope.hideFullScreenLoadingPane();\r\n\r\n $log.debug(\"CRSF Token is invalid\");\r\n $location.path(\"/error\");\r\n });\r\n\r\n onRouteChangeStartEvent($rootScope, $log, $location, routeService, dataContext, apiService, localStorageService);\r\n\r\n $rootScope.$on(\"$routeChangeError\", function (event, current, previous, rejection) {\r\n $log.debug(\"Navigation failed to \" + $location.path);\r\n $log.error(rejection);\r\n });\r\n\r\n $rootScope.$on(\"$routeChangeSuccess\", (event, current) => {\r\n $log.debug(\"Navigated to \" + $location.path());\r\n\r\n if (!$location.hash()) {\r\n $window.scrollTo(0, 0);\r\n }\r\n\r\n $window.document.title = current && current.$$route && current.$$route.title ? current.$$route.title : \"QParents\";\r\n\r\n raiseGTagEvent($location, $log);\r\n });\r\n\r\n $rootScope.showFullScreenLoadingPane = message => {\r\n $rootScope.initialized = false;\r\n $rootScope.initializedMessage = message || null;\r\n };\r\n\r\n $rootScope.hideFullScreenLoadingPane = () => {\r\n $rootScope.initialized = true;\r\n $rootScope.initializedMessage = null;\r\n };\r\n\r\n const appStateChangeHandler = function ({ isActive }) {\r\n if (isActive) {\r\n $log.debug(\"App State Change to Active\");\r\n mobileAppResume($rootScope, csrfTokenService, platformService, apiService, $log, dataContext);\r\n }\r\n };\r\n\r\n if (deviceService.isMobileApp) {\r\n App.addListener(\"appStateChange\", appStateChangeHandler);\r\n }\r\n\r\n document.addEventListener(\r\n \"gTagEvent\",\r\n function (event) {\r\n gTagEventHandler($window, $log, $injector, deviceService, event);\r\n },\r\n false\r\n );\r\n }\r\n);\r\n\r\nfunction mobileAppResume($rootScope, csrfTokenService: ICsrfTokenService, platformService: platformService, apiService: IApiService, $log: ILogService, dataContext: IDataContext) {\r\n platformService.checkVersion();\r\n\r\n $rootScope.showFullScreenLoadingPane();\r\n\r\n // Refresh the NCSRF\r\n csrfTokenService\r\n .ensureCsrfToken()\r\n .then(() => {\r\n apiService\r\n .getAuthenticationCheck()\r\n .catch(function () {\r\n $log.debug(\"authenticationCheck failed when resuming - redirecting to login\");\r\n dataContext.flagSignedOut(false);\r\n })\r\n .finally(() => {\r\n $rootScope.hideFullScreenLoadingPane();\r\n });\r\n })\r\n .catch(function () {\r\n $log.debug(\"ensureCsrfToken failed when resuming - redirecting to login\");\r\n $rootScope.hideFullScreenLoadingPane();\r\n dataContext.flagSignedOut(false);\r\n });\r\n}\r\n\r\nfunction onRouteChangeStartEvent(\r\n $rootScope: any,\r\n $log: ILogService,\r\n $location: ILocationService,\r\n routeService: IRouteService,\r\n dataContext: IDataContext,\r\n apiService: IApiService,\r\n localStorageService: ILocalStorageService\r\n) {\r\n $rootScope.$on(\"$routeChangeStart\", function ensureCanNavigate(event, next, current) {\r\n $log.debug(\"Trying to navigate to \" + $location.path());\r\n\r\n if (routeService.isAnonymousRoute($location.path())) {\r\n return;\r\n }\r\n\r\n if (!dataContext.isAuthenticated()) {\r\n $log.debug(\"!isAuthenticated - redirecting to login\");\r\n dataContext.flagSignedOut(false);\r\n return;\r\n }\r\n\r\n apiService\r\n .getAuthenticationCheck()\r\n .then(() => {\r\n // redirect if there is path specified in the local storage after succesful logged in\r\n const redirectRoutePath = localStorageService.get(redirectRoutePathStorageKey);\r\n\r\n if (redirectRoutePath) {\r\n localStorageService.set(redirectRoutePathStorageKey, null);\r\n $location.path(redirectRoutePath);\r\n }\r\n })\r\n .catch(() => {\r\n $log.debug(\"authenticationCheck - redirecting to login\");\r\n dataContext.flagSignedOut(false);\r\n });\r\n });\r\n}\r\n\r\nfunction raiseGTagEvent($location: ILocationService, $log: any) {\r\n var gaPath = $location.path();\r\n gaPath = gaPath.replace(/\\/\\d{10}\\w/g, \"\"); // Remove any EQ IDs from querystring when sent to GoogleAnalytics\r\n $log.debug(\"Sending Page View Event for \" + gaPath);\r\n\r\n const event = new CustomEvent(\"gTagEvent\", {\r\n bubbles: true,\r\n detail: {\r\n path: gaPath\r\n }\r\n });\r\n\r\n document.dispatchEvent(event);\r\n}\r\n\r\nfunction gTagEventHandler($window, $log, $injector, deviceService, event) {\r\n var detail = event.detail;\r\n\r\n if (deviceService.isMobileApp) {\r\n let SERVER_URL: string = \"LOCAL\";\r\n\r\n if ($injector.has(\"SERVER_URL\")) {\r\n const regex = /https?:\\/\\/([^/:]+)(?::\\d+)?/;\r\n const matchedURL = $injector.get(\"SERVER_URL\").match(regex);\r\n SERVER_URL = matchedURL ? matchedURL[1] : SERVER_URL;\r\n $log.debug(`Analytics - Content Group ${SERVER_URL} `);\r\n }\r\n\r\n const params = {\r\n screen_class: detail.path ?? \"/\",\r\n screen_name: $window.document.title,\r\n content_group: SERVER_URL\r\n };\r\n\r\n $log.debug(`Analytics - Screen View to ${params.screen_class} (${params.screen_name})`);\r\n\r\n FirebaseAnalytics.logEvent({\r\n name: \"screen_view\",\r\n params: params\r\n });\r\n } else {\r\n const params = {\r\n page_location: detail.path ?? \"/\",\r\n page_title: $window.document.title\r\n };\r\n\r\n $log.debug(`Analytics - Page View to ${params.page_location} (${params.page_title})`);\r\n $window.gtag(\"event\", \"page_view\", params);\r\n }\r\n}\r\n","export let ENABLE_CONSOLE_LOGGING = false;\r\nlet SHOW_TOASTS_ON_ERROR = false;\r\nexport const STATES = [\"QLD\", \"ACT\", \"NSW\", \"NT\", \"SA\", \"TAS\", \"VIC\", \"WA\"];\r\nexport const FEATURES = {\r\n ENROLMENT_HISTORY: \"Enrolment History\" as StudentFeature,\r\n STUDENT_DETAILS: \"Student Details\" as StudentFeature,\r\n ATTENDANCE: \"Attendance\" as EnrolmentFeature,\r\n BEHAVIOUR: \"Behaviour\" as EnrolmentFeature,\r\n FINANCE: \"Finance\" as EnrolmentFeature,\r\n TIMETABLE: \"Timetable\" as EnrolmentFeature,\r\n ACADEMIC_REPORTS: \"Academic Reports\" as EnrolmentFeature,\r\n UPCOMING_EVENTS: \"Upcoming Events\" as EnrolmentFeature,\r\n EXAM_TIMETABLE: \"Exam Timetable\" as EnrolmentFeature,\r\n ASSESSMENT_PLANNER: \"Assessment Planner\" as EnrolmentFeature,\r\n CONSENT_REQUESTS: \"Consent Requests\" as StudentFeature\r\n};\r\nexport type StudentFeature = \"Enrolment History\" | \"Student Details\" | \"Student Photo\" | \"ConsentRequests\";\r\nexport type EnrolmentFeature = \"Behaviour\" | \"Attendance\" | \"Timetable\" | \"Finance\" | \"Academic Reports\" | \"Assessment Planner\" | \"ExamTimetable\" | \"Upcoming Events\";\r\n\r\nexport const SESSION_AO_CODE_KEY = \"account-owner-registration-session\";\r\nexport const SESSION_DV_CODE_KEY = \"delegated-viewer-registration-session\";\r\nexport const SESSION_PROCESSED_PAYMENTS_KEY = \"processed-payments-session\";\r\nexport const TERMS_AND_CONDITION_LABELS = {\r\n PRIVACYSTATEMENT: \"Read and understood\",\r\n QPAOTERMSANDCONDITIONS: \"Accept Terms and Conditions\",\r\n QPDVTERMSANDCONDITIONS: \"Accept Terms and Conditions\",\r\n STUDENTPHOTOSTERMSANDCONDITIONS: \"Accept Terms and Conditions\"\r\n};\r\nexport const AVATAR_URL = require(\"../content/img/avatar.png\");\r\nexport const AVATAR_NOPHOTO_URL = require(\"../content/img/avatarNoPhoto.png\");\r\nexport const SPINNER_URL = require(\"../content/img/spinner.gif\");\r\nexport const AUTH_COOKIE_NAME = \"ppIsAuthenticated\";\r\nexport const ADMIN_VIEW_COOKIES = {\r\n IS_ADMIN_VIEW: \"ppAdminView.IsAdminView\",\r\n CENTRE_CODE: \"ppAdminView.CentreCode\",\r\n SCHOOL_USER_ID: \"ppAdminView.SchoolUserId\",\r\n PARENT_ID: \"ppAdminView.ppParentId\"\r\n};\r\nexport const REMEMBER_EMAIL_KEY = \"rememberEmail\";\r\nexport const REDIRECT_PHOTO_COOKIE_NAME = \"redirectToPhotoPreview\";\r\nexport const YEAR_LEVELS = [\r\n { description: \"Year 1\", value: \"01\" },\r\n { description: \"Year 2\", value: \"02\" },\r\n { description: \"Year 3\", value: \"03\" },\r\n { description: \"Year 4\", value: \"04\" },\r\n { description: \"Year 5\", value: \"05\" },\r\n { description: \"Year 6\", value: \"06\" },\r\n { description: \"Year 7\", value: \"07\" },\r\n { description: \"Year 8\", value: \"08\" },\r\n { description: \"Year 9\", value: \"09\" },\r\n { description: \"Year 10\", value: \"10\" },\r\n { description: \"Year 11\", value: \"11\" },\r\n { description: \"Year 12\", value: \"12\" },\r\n { description: \"Continuing Junior\", value: \"CJ\" },\r\n { description: \"Continuing Senior\", value: \"CS\" },\r\n { description: \"Early Childhood\", value: \"0P\" },\r\n { description: \"Prep Year\", value: \"PY\" },\r\n { description: \"Primary Ungraded\", value: \"PU\" },\r\n { description: \"Secondary Ungraded\", value: \"SU\" },\r\n { description: \"Special\", value: \"PS\" }\r\n];\r\n\r\nexport const CSRF_HEADER_NAME = \"NCSRF\";\r\n\r\nexport const GOOGLE_PLAY_APP_PAGE = \"https://play.google.com/store/apps/details?id=au.gov.qld.deta.qparents&hl=en_AU\";\r\nexport const APPLE_STORE_APP_PAGE = \"https://apps.apple.com/au/app/qparents/id923225089\";\r\n\r\nexport function enableConsoleLogging() {\r\n ENABLE_CONSOLE_LOGGING = true;\r\n}\r\n\r\nexport function enableToastsOnError() {\r\n SHOW_TOASTS_ON_ERROR = true;\r\n}\r\n\r\nexport function showToastsOnError() {\r\n return SHOW_TOASTS_ON_ERROR;\r\n}\r\n","if (!Array.prototype.filter) {\r\n Array.prototype.filter = function (fun /*, thisArg */) {\r\n \"use strict\";\r\n\r\n if (this === void 0 || this === null)\r\n throw new TypeError();\r\n\r\n var t = Object(this);\r\n var len = t.length >>> 0;\r\n if (typeof fun !== \"function\")\r\n throw new TypeError();\r\n\r\n var res = [];\r\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\r\n for (var i = 0; i < len; i++) {\r\n if (i in t) {\r\n var val = t[i];\r\n\r\n if (fun.call(thisArg, val, i, t))\r\n res.push(val);\r\n }\r\n }\r\n\r\n return res;\r\n };\r\n}","// https://tc39.github.io/ecma262/#sec-array.prototype.find\r\n\r\nif (!(Array.prototype as any).find) {\r\n Object.defineProperty(Array.prototype, 'find', {\r\n value: function(predicate) {\r\n // 1. Let O be ? ToObject(this value).\r\n if (this == null) {\r\n throw new TypeError('\"this\" is null or not defined');\r\n }\r\n \r\n var o = Object(this);\r\n \r\n // 2. Let len be ? ToLength(? Get(O, \"length\")).\r\n var len = o.length >>> 0;\r\n \r\n // 3. If IsCallable(predicate) is false, throw a TypeError exception.\r\n if (typeof predicate !== 'function') {\r\n throw new TypeError('predicate must be a function');\r\n }\r\n \r\n // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.\r\n var thisArg = arguments[1];\r\n \r\n // 5. Let k be 0.\r\n var k = 0;\r\n \r\n // 6. Repeat, while k < len\r\n while (k < len) {\r\n // a. Let Pk be ! ToString(k).\r\n // b. Let kValue be ? Get(O, Pk).\r\n // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).\r\n // d. If testResult is true, return kValue.\r\n var kValue = o[k];\r\n if (predicate.call(thisArg, kValue, k, o)) {\r\n return kValue;\r\n }\r\n // e. Increase k by 1.\r\n k++;\r\n }\r\n \r\n // 7. Return undefined.\r\n return undefined;\r\n }\r\n });\r\n }","if (!Array.prototype.forEach) {\r\n Array.prototype.forEach = function (fun /*, thisArg */) {\r\n \"use strict\";\r\n\r\n if (this === void 0 || this === null)\r\n throw new TypeError();\r\n\r\n var t = Object(this);\r\n var len = t.length >>> 0;\r\n if (typeof fun !== \"function\")\r\n throw new TypeError();\r\n\r\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\r\n for (var i = 0; i < len; i++) {\r\n if (i in t)\r\n fun.call(thisArg, t[i], i, t);\r\n }\r\n };\r\n}","if (!Array.prototype.indexOf) {\r\n Array.prototype.indexOf = function (elt /*, from*/) {\r\n var len = this.length >>> 0;\r\n\r\n var from = Number(arguments[1]) || 0;\r\n from = (from < 0)\r\n ? Math.ceil(from)\r\n : Math.floor(from);\r\n if (from < 0)\r\n from += len;\r\n\r\n for (; from < len; from++) {\r\n if (from in this &&\r\n this[from] === elt)\r\n return from;\r\n }\r\n return -1;\r\n };\r\n}","// Module\nvar code = \"

    Accessibility

    Accessibility

    The Queensland Government supports the World Wide Web Consortium's (W3C) Web Content Accessibility Guidelines 2.0 and the Queensland Government Information Standard 26: Internet.

    The Queensland Government strives to make its public web resources compatible with a range of browsers, devices, assistive technologies and operating systems. This is achieved by developing web resources according to International web standards and best practice, and regular testing across a range of different browsers.

    Consistent user experience

    The Queensland Government has developed a Consistent User Experience Standard which is used on all government agency websites.

    The purpose of the standard is to ensure that visitors:

    • can find the information they need quickly and easily
    • do not have to learn new navigation methods when using different Queensland Government agency sites
    • can move from one site to another with familiarity.

    To make this consistent experience a reality, the standard requires that:

    • agency web pages are laid out consistently, with elements such as the navigation, search button and agency name always in the same place
    • navigation is based on what visitors are likely to be looking for, rather than on how departments are organised
    • the underlying techniques used to create the pages ensure they are accessible to as many people as possible.

    Accessibility features

    The accessibility features available on this site include:

    • access keys to access certain information using your keyboard
    • a logical tab order to navigate using assistive technologies
    • W3C Accessible Rich Internet Applications (ARIA) roles, states and properties for page landmarks and interactive components
    • Keyboard navigation for menus and interactive components as per ARIA recommendations.

    Keyboard navigation

    Menus and interactive elements on this website can be navigated using key combinations recommended by the WC3 ARIA standard.

    • use the tab key to enter a menu or interactive element as part of the tab order for the page
    • use the arrow keys to move focus between the different menu items or controls within the element; and
    • use the Enter key to activate a focused control or menu item
    • use the tab key to move to the next menu or to leave the interactive element.

    Access keys

    Access keys enable users to bring focus to page elements using the keyboard. This may assist those with motor skill difficulties and prove a convenience to all.

    1. : not in use
    2. : www.qld.gov.au
    3. : not in use
    4. : not in use
    5. : not in use
    6. : not in use
    7. : not in use
    8. : not in use
    9. : not in use
    10. : Help

    How to use access keys

    If you are using a Windows computer: press Alt and the access key number to highlight the link. Press Enter to go to the linked page.

    If you are using an Apple computer: press control and the access key number to highlight the link, then press return to go to the linked page.

    Home

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/accessibility/accessibility.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    My students

    Welcome to QParents

    Add student

    Add your first student

    Adding a new student to your account will allow you to view the student's information. You will also be able to submit changes to some of the student's details.

    Details of student to be added
    EQ ID required EQ ID cannot be longer than 11 characters
    EQ ID

    An EQ ID is an 11 character code consisting of 10 numbers with a single letter as the last character. An example EQ ID is:

    1234567890Z

    Your student’s EQ ID may be found on documents including school invoices, academic reports and student cards.

    The EQ ID is a unique reference code that is allocated to a student and used throughout their state school life in Queensland.

    NOTE: 13 QGOV support cannot give out student EQID numbers. If you cannot find your child’s EQID please contact the school administration and they will provide you with this number.

    Year level required
    Year level

    Select the year level in which this student is currently enrolled from the drop-down list.

    School required
    School

    Select the school in which this student is currently enrolled from the drop-down list. If they attend classes at more than one school, please select the school where they spend most of their time.

    Student found!

    The details you have entered match student {{vm.studentName}}. Your request has been submitted to {{vm.studentName}}'s school for approval. You will be able to access their information via QParents once the school has accepted your request. You will receive an email advising you when this has occurred.

    If you have other students to add, you should do so now by pressing the Add another student button.

    Student already added

    Student already added.

    Student already pending

    Student already pending approval.

    Student not found!

    Sorry, the details that you have entered do not match a student with whom you are associated.

    Please check that the details you have entered are correct before submitting them again.

    If you require further assistance, please contact 13 QGOV (13 74 68).

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/addStudent/addStudent.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Sorry, an error has occurred

    You have accessed an administration site that is only available to authorised users.

    Parents - if you are a parent wishing to access QParents, click here.

    Schools - if you are a school user wishing to access QParents configuration and administration, please close this window and access via OneSchool using your authenticated network credentials.

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/admin-view/admin-view-context-error.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Sorry, an error has occurred

    QParents Administration View for this account is not available.

    Please contact the OneSchool Business Support Team via the IT Service Centre on:

    • 1800 680 445 and follow the prompts, or
    • Log a job to IT and assign job to OneSchool Business Support via Services Catalogue Online

      To assist the OneSchool Business Support Team, please note and provide the following information:

      • Parent Name
      • Student Name and Year Level
      • QPAO and Student Status
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/admin-view/admin-view-inactive-error.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    You have successfully logged out of QParents Administration View. Please close the tab.

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/admin-view/admin-view-logout.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/alert/alert.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Attendance

    You can notify the school of an absence for this student – for today or for any time in the future. To do this, press the Notify of an absence button.

    Absence history

    Yearly overview

    {{vm.enrolment.daysAbsentThisCalendarYear}}

    Total days absent this year
    {{vm.enrolment.attendancePercentageThisCalendarYear}}%
    Attendance percentage for this year
    0\\\">

    The following absence information has been recorded for {{vm.student.firstName()}}.

    Absences that are currently recorded as \\\"Unexplained\\\" are highlighted below. These require an explanation so please click on the next to each highlighted absence and key in an explanation for that absence.

    Date Time of absence Status  
    {{absenceRecord.absenceDate | date:'dd MMMM yyyy'}} {{absenceRecord.absencePeriod}} !
    Reason provided: {{absenceRecord.reason}}
    Currently, no reason has been recorded for this absence.
    Please enter an explanation to be recorded in the school’s records.
    Submit a reason
    Reason has been provided to the school and is pending approval.

    There are currently no absence records for {{vm.student.firstName()}}.

    This functionality is not available yet.

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/attendance/attendance.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Future Absence

    To advise the school of an absence today or in the future, please complete the following, then click Submit to send this to your school.

    Absence Details
    Start date is required Start date is not a valid date Start date cannot be in the past Start date cannot be greater than End date Start date can only be a weekday
    Time from is required
    End date is required End date is not a valid date End date cannot be in the past End date cannot be less than Start date End date can only be a weekday
    Time to is required End date time must be after Start date time
    Reason is required.

    Success!

    Thank you for notifying {{vm.enrolment.school}} of this absence. The school will contact you by phone or email if they require any further information.

    Back

    Failed!

    Your request could not be updated due to a system failure

    This functionality is not available yet.

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/attendance/reportAbsence.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Future Absences

    This feature has not been made available for your student/s. The features that are available in QParents are configured by your school/s. Please contact your school/s to express your interest in using this feature.

    About this feature

    The Attendance feature provides the ability to:

    • submit multiple future absences to your school/s in one request
    • submit reason/s to your school/s for unexplained absences
    • view student attendance history for the current calendar year

    0\\\">Note - This feature is not available for Delegated Viewer students.

    0\\\">

    Note - This feature has not been made available for:

    • {{student.name}} - {{student.schoolName}}

    The features that are available in QParents are configured by your school/s. Please contact your school/s to express your interest in using this feature

    0\\\">Note - This feature is not available for Delegated Viewer students.

    To advise the schools of any absences today or in the future, please complete the following, then click Submit to send this to your schools.

    Absence Details
    Student is required
    0\\\">✓ 0\\\">⚠
    Student is required
    0\\\" type=\\\"text\\\" id=\\\"{{'dateFrom' + $index}}\\\" name=\\\"{{'dateFrom' + $index}}\\\" ng-model=\\\"absence.dateFrom\\\" format=\\\"DD/MM/YYYY\\\" default-date=\\\"vm.today\\\" min-date=\\\"{{vm.today}}\\\" validate-is-not-empty validate-is-valid-date validate-is-week-day validate-greater-or-equal-date=\\\"{{vm.today}}\\\" validate-less-or-equal-date=\\\"{{absence.dateTo}}\\\" ng-model-options=\\\"{allowInvalid:true}\\\"/> 0\\\" type=\\\"date\\\" id=\\\"{{'dateFrom' + $index}}\\\" name=\\\"{{'dateFrom' + $index}}\\\" ng-model=\\\"absence.dateFrom\\\" format=\\\"YYYY-MM-DD\\\" default-date=\\\"vm.today\\\" validate-is-not-empty validate-is-valid-date validate-is-week-day validate-greater-or-equal-date=\\\"{{vm.today}}\\\" validate-less-or-equal-date=\\\"{{absence.dateTo}}\\\" ng-model-options=\\\"{allowInvalid:true}\\\"/>
    Start date is required Start date is not a valid date Start date cannot be in the past Start date cannot be greater than End date Start date can only be a weekday
    0\\\" type=\\\"checkbox\\\" id=\\\"{{'allDay' + $index}}\\\" name=\\\"{{'allDay' + $index}}\\\" ng-model=\\\"absence.allDay\\\" ng-checked=\\\"vm.onAllDayChecked(absence.allDay, $index)\\\"/>
    Time from is required
    0\\\" type=\\\"text\\\" id=\\\"{{'dateTo' + $index}}\\\" name=\\\"{{'dateTo' + $index}}\\\" ng-model=\\\"absence.dateTo\\\" format=\\\"DD/MM/YYYY\\\" default-date=\\\"vm.today\\\" min-date=\\\"{{vm.today}}\\\" validate-is-not-empty validate-is-valid-date validate-is-week-day validate-greater-or-equal-date=\\\"{{absence.dateFrom}}\\\" ng-model-options=\\\"{allowInvalid:true}\\\"/> 0\\\" type=\\\"date\\\" id=\\\"{{'dateTo' + $index}}\\\" name=\\\"{{'dateTo' + $index}}\\\" ng-model=\\\"absence.dateTo\\\" format=\\\"YYYY-MM-DD\\\" default-date=\\\"vm.today\\\" validate-is-not-empty validate-is-valid-date validate-is-week-day validate-greater-or-equal-date=\\\"{{absence.dateFrom}}\\\" ng-model-options=\\\"{allowInvalid:true}\\\"/>
    End date is required End date is not a valid date End date cannot be less than Start date End date can only be a weekday
    Time to is required End date time must be after Start date time
    Reason is required.
    Cancel 0 && !vm.absenceSubmitted\\\" ng-disabled=\\\"vm.busy\\\"/>

    Success!

    Thank you for notifying the school(s) of the absence(s). The school will contact you by phone or email if they require any further information.

    Back

    Failed!

    Your request could not be updated due to a system failure

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/attendance/reportMultipleAbsences/reportMultipleAbsences.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Attendance

    Please enter the Reason below and submit the absentee note.

    Reason
    {{vm.absenceRecord.absenceDate | date:'dd MMMM yyyy'}}
    {{vm.absenceRecord.absencePeriod}}
    Reason is required

    Success!

    Thank you for notifying the school with an explanation for this absence. Your school will contact you by phone or email if they need more information.

    This functionality is not available yet.

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/attendance/reportReason.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Behaviour

    0\\\" class=\\\"behaviours\\\">

    The following behaviour events have been recorded for {{vm.student.firstName()}}.

    Date Event category Event type
    {{behaviourReport.incidentDate | date:'dd MMMM yyyy'}} {{behaviourReport.incidentCategories}} {{behaviourReport.incidentType}}

    There are currently no events to report for {{ vm.student.firstName() }}.

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/behaviour/behaviour.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Consent Requests

    Unable to load consent information. Please try again later.

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/consent/consent.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{vm.type}}

    No records found

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/consent/consentRequestList/consentRequestList.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/consent/consentRequestSummary/consentRequestSummary.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Consent Request

    This page is displaying a consent record which has previously been responded to. If you want to change the response, please click the following link to email the school:

    Change response
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/consent/request.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Consent response submitted

    Your response to the consent request for {{vm.student.fullName}} has been submitted to {{vm.enrolment.school}}.

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/consent/responseSubmitted.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Enrolment history

    0\\\" class=\\\"generic-table many-columns\\\">
    Enrolled Date Exit Date School Status
    {{enrolment.enrolledDate | date:'dd MMMM yyyy'}} {{enrolment.exitDate | date:'dd MMMM yyyy'}} {{enrolment.schoolName}} {{enrolment.status}}

    No enrolment history available.

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/enrolmentHistory/enrolmentHistory.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Sorry, an error has occurred

    Sorry, an error has occurred during your current request.

    This error has been reported to the QParents technical team for investigation.

    You can now:

    • Go back and try again

    • Return to the Home page


    Help and support

    If you require further assistance with QParents:

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/error/error.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Feature Unavailable

    You do not currently have access to that feature.
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/featureUnavailable/featureUnavailable.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    QParents account is inactive

    Your account is currently marked as inactive. No students can be displayed or added.

      0\\\" class=\\\"student-list\\\">
    • Additional Student

      Administration View is unavailable for this student.

    • {{student.name}}

      Pending Review

      Pending Review

      Your request has been submitted to {{student.name}}'s school for approval.

      You will be able to access their information via the QParents Dashboard once the school has accepted your request.

      You will receive an email advising you when this has occurred.

    0 || vm.user.pendingDelegatedStudents.length > 0\\\">Students I have delegated access to:

      0\\\" class=\\\"student-list\\\">
    • Additional Student

      Administration View is unavailable for this student.

    • {{student.name}}

      Pending {{student.parentFullName}} account approval

    Welcome to QParents

    You should now add your students to your account. Press the Add a student button to continue.

    Welcome to QParents

    Currently, you do not have any students added to your account.

    To accept a QParents invitation, follow the Accept an invitation link in your email, and enter all required information.

    Last Logged in: {{vm.user.lastLoginTimestamp | date: 'h:mm a, dd/MM/yyyy'}}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/home/home.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Absences

    Feature unavailable. Find out more…
    {{vm.absenceSummary.unexplainedCount}}
    Unexplained
    {{vm.absenceSummary.futureCount}}
    Future
    View Notify absences
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/home/parentCentricSummary/absenceSummary/absenceSummaryWidget.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Consent Requests

    {{vm.consentSummary.pendingRequestsCount}}
    Request{{vm.consentSummary.pendingRequestsCount !== 1 ? 's' : ''}} Pending

    Unable to load consent information.
    Please try again later.

    View all  
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/home/parentCentricSummary/consentSummary/consentSummaryWidget.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Payments

    Feature unavailable. Find out more…
    {{vm.paymentsSummary.noOfPaymentsOutstanding}}

    Total payments outstanding

    {{vm.paymentsSummary.totalPaymentsOutstanding | currency : symbol}}

    View all View
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/home/parentCentricSummary/paymentsSummary/paymentsSummaryWidget.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    QLearn

    Online student learning platform.

    Log in using your QParents account.

    Learn more

    Access QLearn
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/home/parentCentricSummary/qlearnSummary/qlearnSummaryWidget.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Upcoming Events

    Feature unavailable. Find out more…
    {{vm.upcomingEventsSummary.assessmentsCount}}
    Assessments
    {{vm.upcomingEventsSummary.examsCount}}
    Exams
    {{vm.upcomingEventsSummary.excursionsCount}}
    Excursions
    {{vm.upcomingEventsSummary.schoolEventsCount}}
    School Events
    View all View
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/home/parentCentricSummary/upcomingEventsSummary/upcomingEventsSummaryWidget.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \" \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/home/studentList.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Sign in to the QParents website or download the app

    Download the QParents App for free on your favourite platform.
    \\\"Get \\\"Download or
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/landingPage/landing-page-section/app-download-section/app-download-section.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    It's wonderful to watch your child learn and grow, from their first day at Prep through to Year 12. QParents supports parents to connect with their children's school every step of the way. Got your invitation code?
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/landingPage/landing-page-section/children-grow-section/children-grow-section.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Connect and Share

    Access report cards, milestones, and events. Download and share with family members so they can be part of the story too.
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/landingPage/landing-page-section/connect-share-section/connect-share-section.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    What can I do?

    • \\\"{{function.title}}\\\"/

      {{function.title}}

      {{function.description}}
    *Some features might not be available at your school. Schools can turn modules on or off to best suit their student's needs.
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/landingPage/landing-page-section/functionality-section/functionality-section.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/landingPage/landing-page-section/landing-page-section.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    The QParents application is all about making parents' lives easier.

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/landingPage/landing-page-section/lives-easier-section/lives-easier-section.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    All in one place, anytime, anywhere

    Wouldn't it be great if your child's student information, fee payments and consent forms were all available in the one place? \\\"Well, it's here in the QParents app\\\", access all features online from your mobile, desktop, or tablet.
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/landingPage/landing-page-section/one-place-section/one-place-section.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Enjoy convenient and streamlined engagement with your child's school

    QParents offers a convenient, safe and private app to help parents & caregivers manage important details of their children's journey You will need your school invitation code to start your registration process.
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/landingPage/landing-page-section/overview-section/overview-section.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    How it works

    • \\\"{{process.title}}\\\"/

      {{process.title}}

      {{process.description}}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/landingPage/landing-page-section/process-guide-section/process-guide-section.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Safe and private

    Only parents and caregivers are able to access their childrens' information.
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/landingPage/landing-page-section/safe-private-section/safe-private-section.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    {{userReview.review}} {{userReview.name}}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/landingPage/landing-page-section/user-reviews-section/user-reviews-section.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \" \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/landingPage/landing-page.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"Register your interest\";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/landingPage/register-link/register-link.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    Skip to content Queensland Government
    Department of Education
    Q Parents
    Already have an account? Sign in
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/layout/shell.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    Login
    Email address is required The email address provided is not valid. Correct format is: name@example.com
    Password is required
    This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

    Please help us validate your login details

    {{ vm.message }}

    To validate your details, please enter the code

    Code is required

    Login Unsuccessful

    {{ vm.message }}

    Invalid Code

    The code you have entered is incorrect. Please try again

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/login-form/loginForm.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Change password

    Reset password unsuccessful!

    The 'confirm email' link (that brought you here) or the email address you entered is not valid.

    Reset password
    An email address is required The email address provided is not valid. Correct format is: name@example.com
    Password is required Password must be at least 8 characters and contain one of the following:
    ! ? @ # $ % ^ & * - + = : ; , .
    Confirmation is required The passwords do not match

    Reset password successful!

    Your password has been successfully reset.

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/login/forgotPassword/changeForgottenPassword.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Redirecting to \\\"Reset password\\\"...

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/login/forgotPassword/confirmResetPassword.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Forgot password

    To reset your password, enter the email address that you used to sign in to QParents.
    Email address
    An email address is required The email address provided is not valid. Correct format is: name@example.com

    Email Sent

    You have been sent an email with instructions on how to complete the password reset process.

    If you do not receive the email, please check that the email address you have entered above is correct.

    Back

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/login/forgotPassword/forgotPassword.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Login

    Your device is currently offline. Please connect to the internet to use QParents.

    QParents is currently in offline mode for planned maintenance. We will resume normal operations as soon as possible. Please try again later.

    Thankyou for your patience,

    The QParents Team.

    Your email has been confirmed!

    You can login to your account below.

    It may take a moment or two to activate your account. If login doesn’t work right away, please wait a moment and try again.

    Error confirming email!

    The 'confirm email' link that brought you here wasn't valid.



    Register for the first time

    If you want to register a QParents account for the first time.

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/login/login.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Imports\nvar ___HTML_LOADER_GET_SOURCE_FROM_IMPORT___ = require(\"../../../node_modules/html-loader/dist/runtime/getUrl.js\");\nvar ___HTML_LOADER_IMPORT_0___ = require(\"../../content/img/mobileapplogo.png\");\n// Module\nvar ___HTML_LOADER_REPLACEMENT_0___ = ___HTML_LOADER_GET_SOURCE_FROM_IMPORT___(___HTML_LOADER_IMPORT_0___);\nvar code = \"
    \\\"Mobile

    Download the free QParents app from iTunes or Google Play

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/login/mobile-app-message.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Imports\nvar ___HTML_LOADER_GET_SOURCE_FROM_IMPORT___ = require(\"../../../../node_modules/html-loader/dist/runtime/getUrl.js\");\nvar ___HTML_LOADER_IMPORT_0___ = require(\"../../../content/img/qLearnLogo.png\");\n// Module\nvar ___HTML_LOADER_REPLACEMENT_0___ = ___HTML_LOADER_GET_SOURCE_FROM_IMPORT___(___HTML_LOADER_IMPORT_0___);\nvar code = \"
    \\\"\\\"/

    QLearn

    Online student learning platform. Log in using your QParents Account.

    Access QLearn Learn more

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/login/qLearnAppMessage/qLearnAppMessage.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/outage/outage.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Consent Requests

    Filters

    Unable to load consent information. Please try again later.

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/parentCentric/combinedConsentRequests/combinedConsentRequests.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Payments

    This feature has not been made available for your student/s. The features that are available in QParents are configured by your school/s. Please contact your school/s to express your interest in using this feature.

    About this feature

    The Payments feature provides the ability for parents who have financial responsibility for their student/s to:

    • view school invoices and credit notes
    • view previous 12 month payment history
    • download copies of PDF invoices
    • select a student to navigate to the student's profile and complete payments for that student

    Note - This feature is not available for Delegated Viewer students.

    0\\\">

    Note - This feature has not been made available for:

    • {{student.name}} - {{student.schoolName}}

    The features that are available in QParents are configured by your school/s. Please contact your school/s to express your interest in using this feature.

    Note - This feature is not available for Delegated Viewer students.

    Outstanding Payments

    Filters
    There are currently no open items.
    0\\\">

    To make a payment, click on the student name displayed in the table below. This will navigate you to the selected student’s profile where you can select invoices to pay for that student.

    Click on the button to view additional information about an invoice.

    0\\\" class=\\\"secondary\\\">
    Due Date Payment Reference Student Name and School Name Amount    
    = 0\\\">{{payment.dueDate | date:'dd MMM yyyy'}} {{payment.paymentRef}}
    {{payment.amountOwing | currency : symbol}}
    Amount Due

    Please note that it can take several days for a school to process a payment. Therefore, this amount might not reflect a payment that has been made recently through a channel other than QParents (eg. BPAY, cash at your school).

    0\\\" class=\\\"status Positive\\\" title=\\\"For payment details, please expand this record. It may take several days for your invoice to be updated in your QParents records\\\">{{payment.pendingPayments.length}} Pending payment 1\\\">s
      Invoice Number: {{payment.invoiceNumber}}
    Original Amount: {{payment.originalAmount | currency : symbol}}
    Download Pdf   {{payment.typeDescription}}
      Pending QParents Payments
    Payment Date Transaction Confirmation Payment Amount
    {{pendingPayment.paymentDate}} {{pendingPayment.paymentReceipt}}
    {{pendingPayment.paymentAmount | currency : symbol}}
    Payment Amount

    This payment will appear under Closed payments once it has been processed by your school. This can take several days.

    All transactions are recorded in Sydney time.

     

    Payment history

    Filters
    There are currently no closed items
    0\\\">

    Click on the V button to view additional information about a previous payment.

    Date paid Payment Reference Student Name and School Name Transaction Confirmation Amount  
    {{payment.transactionDate | date:'dd MMMM yyyy'}} {{payment.paymentRef}}
    • {{payment.studentName}}
    • {{payment.schoolName}}
    {{payment.paymentReceiptNumber}} {{payment.originalAmount | currency : symbol}}
    Invoice Number: {{payment.invoiceNumber}}
    Amount Owing: {{payment.amountOwing | currency : symbol}}
    {{payment.typeDescription}}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/parentCentric/combinedPayments/combinedPayments.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Upcoming Events

    This feature has not been made available for your student/s. The features that are available in QParents are configured by your school/s. Please contact your school/s to express your interest in using this feature.

    About this feature

    The Upcoming Events feature provides the ability to view calendar year events that have been configured by your school/s:

    • school events (dates and times)
    • excursions (dates and times)
    • exams (dates, times and subject)
    • assessments (dates, times, subject and task)

    Note - This feature is not available for Delegated Viewer students.

    0\\\">

    Note - This feature has not been made available for:

    • {{student.name}} - {{student.schoolName}}

    The features that are available in QParents are configured by your school/s. Please contact your school/s to express your interest in using this feature.

    Note - This feature is not available for Delegated Viewer students.

    Filters
    Date from is not a valid date
    Date to is not a valid date

    {{vm.getDayLabel(day)}} {{vm.formatDate(day.date)}}

    • {{vm.getEventTypePrefix(item.eventType)}}
      {{vm.getTimeLabel(item)}}
      {{item.displayName}}
      {{item.studentName}}
      {{item.schoolName}}

    There are no events which match the current filter.

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/parentCentric/combinedUpcomingEvents/combinedUpcomingEvents.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    The following payment information has been recorded for {{vm.student.firstName()}}.

    Outstanding Payments

    0\\\"> Click on the V button to view additional information about an invoice. payment.amountOwing\\\"> 0\\\" class=\\\"secondary\\\">
    To Pay Due Date Payment Reference Amount    
    payment.amountOwing}\\\" currency ng-if=\\\"payment.isSelectedForPayment\\\" ng-model=\\\"payment.paymentAmount\\\" maxlength=\\\"7\\\" autocomplete=\\\"off\\\" autocorrect=\\\"off\\\" autocapitalize=\\\"off\\\" spellcheck=\\\"false\\\"/>   = 0\\\">{{payment.dueDate | date:'dd MMM yyyy'}} {{payment.paymentRef}}
    {{payment.amountOwing | currency : symbol}}
    Amount Due

    Please note that it can take several days for a school to process a payment. Therefore, this amount might not reflect a payment that has been made recently through a channel other than QParents (eg. BPAY, cash at your school).

    0\\\" class=\\\"status Positive\\\" title=\\\"For payment details, please expand this record. It may take several days for your invoice to be updated in your QParents records\\\">{{payment.pendingPayments.length}} Pending payment 1\\\">s
    Payment amount is greater than amount owing
      Invoice Number: {{payment.invoiceNumber}}
    Original Amount: {{payment.originalAmount | currency : symbol}}
    Download Pdf   {{payment.typeDescription}}
      Pending QParents Payments
    Payment Date Transaction Confirmation Payment Amount
    {{pendingPayment.paymentDate}} {{pendingPayment.paymentReceipt}}
    {{pendingPayment.paymentAmount | currency : symbol}}
    Payment Amount

    This payment will appear under Closed payments once it has been processed by your school. This can take several days.

    All transactions are recorded in Sydney time.

    Pay with card
    There are currently no open items for {{vm.student.firstName()}}.

    Payment history

    0\\\"> Click on the V button to view additional information about a previous payment.
    Date paid Payment Reference Transaction Confirmation Amount  
    {{payment.transactionDate | date:'dd MMMM yyyy'}} {{payment.paymentRef}} {{payment.paymentReceiptNumber}} {{payment.originalAmount | currency : symbol}}
    Invoice Number: {{payment.invoiceNumber}}
    Amount Owing: {{payment.amountOwing | currency : symbol}}
    {{payment.typeDescription}}
    There are currently no closed items for {{vm.student.firstName()}}.
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/payment/payment.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Imports\nvar ___HTML_LOADER_GET_SOURCE_FROM_IMPORT___ = require(\"../../../node_modules/html-loader/dist/runtime/getUrl.js\");\nvar ___HTML_LOADER_IMPORT_0___ = require(\"../../content/img/visa.png\");\nvar ___HTML_LOADER_IMPORT_1___ = require(\"../../content/img/mastercard.png\");\nvar ___HTML_LOADER_IMPORT_2___ = require(\"../../content/img/bpoint.png\");\nvar ___HTML_LOADER_IMPORT_3___ = require(\"../../content/img/commonwealth-bank.png\");\n// Module\nvar ___HTML_LOADER_REPLACEMENT_0___ = ___HTML_LOADER_GET_SOURCE_FROM_IMPORT___(___HTML_LOADER_IMPORT_0___);\nvar ___HTML_LOADER_REPLACEMENT_1___ = ___HTML_LOADER_GET_SOURCE_FROM_IMPORT___(___HTML_LOADER_IMPORT_1___);\nvar ___HTML_LOADER_REPLACEMENT_2___ = ___HTML_LOADER_GET_SOURCE_FROM_IMPORT___(___HTML_LOADER_IMPORT_2___);\nvar ___HTML_LOADER_REPLACEMENT_3___ = ___HTML_LOADER_GET_SOURCE_FROM_IMPORT___(___HTML_LOADER_IMPORT_3___);\nvar code = \"

    Pending payments

    Invoices selected for payment are:
    Due Date Payment Reference Amount
    {{payment.dueDate | date:'dd MMMM yyyy'}} {{payment.paymentRef}} {{payment.paymentAmount | currency : symbol}}
    Total payment value: {{vm.totalPaymentValue | currency : symbol}}
    Payment information
    \\\"Visa\\\"/ \\\"Mastercard\\\"/
    Card number is required Card number must be in the correct format e.g. 4444333322221111
    Card expiry must be in the format MM/YY Card is expired. Please try another credit card.
    CVV is required
    CVV

    The last 3 digits on the signature panel on the back of the card.

    Payment Summary

    Your payment was successful.

    A transaction confirmation will be mailed to you shortly. It will take several days for your statement to be updated.

    Your payment was partially successful.

    One or more invoice payments were unsuccessful. Please review the summary below. A receipt will be emailed to you shortly. It will take several days for your statement to be updated.

    Your payment attempt was unsuccessful.

    Please check your payment details and try again.

    An error occured processing your payment.

    Unknown Outcome Payments may have been processed and could appear days later on your statement.

    An error occured processing your payment.

    Your payment attempt was unsuccessful. The payment has not been processed. Please try again later.

    0\\\">

    Successful Payments

    Payment Date
    {{vm.verifiedPaymentResponses.paymentDateTime}}
    Customer Reference Number
    {{vm.verifiedPaymentResponses.financialCustomerReferenceNumber}}
    Card Expiry
    {{vm.verifiedPaymentResponses.cardExpiry}}
    Total Amount
    {{vm.getTotalReceiptValue() | currency : symbol}}
    Transaction Confirmation Number Invoice Number Amount
    {{receipt.receiptNumber}} {{receipt.invoiceNumber}} {{receipt.amount | currency : symbol}}
    0\\\">

    Unsuccessful Payments

    Some Financial Institutions will decline transactions where an identical payment amount is made on multiple invoices, within the one QParents transaction. This is part of their security protocols to prevent mistaken debits against your card for the same service. Should this occur we recommend you retry by making individual payments on invoices, or if making a payment for multiple invoices, enter differing payment amounts for each invoice selected.

    Customer Reference Number
    {{vm.verifiedPaymentResponses.financialCustomerReferenceNumber}}
    Card Expiry
    {{vm.verifiedPaymentResponses.cardExpiry}}
    Invoice Number Amount Reason
    {{failedPayment.invoiceNumber}} {{failedPayment.amount | currency : symbol}} {{failedPayment.reason}}
    0\\\">

    Unknown Outcome Payments

    These payments may have been processed and could appear days later on your statement.

    Invoice Number Amount
    {{unknownOutcomePayment.invoiceNumber}} {{unknownOutcomePayment.amount | currency : symbol}}

    * All transactions are recorded in Sydney time.

    • \\\"BPoint
    • \\\"Commonwealth
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/payment/processPayment.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    School photo

    Retrieving photo ...

    We are retrieving your student's photo from their school.

    This may take a moment.

    School photo retrieved

    Click 'Accept' below to use this photo.

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/photo/schoolPhoto.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Upload photo

    Upload a photo

    Failed!

    Your request could not be updated due to a system failure.

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/photo/upload.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    QParents privacy statement

    Your privacy

    The Queensland Government manages personal information in line with the Information Privacy Act 2009 .

    We are committed to protecting user privacy. We understand that visitors and users of the department's websites and smartphone applications (app) are concerned about their privacy, and the confidentiality and security of any information that is provided.

    Information collected

    Your use of QParents will involve the collection of your personal information by the department. Your personal information is collected for the following purposes:

    • administration of QParents, including verification of users and security
    • allowing parents and delegated viewers access to QParents for the purpose of viewing student information
    • allowing parents to customise QParents (for example, by uploading photos)
    • other purposes under the Education (General Provisions) Act 2006
    • other purposes outlined in this privacy statement.

    If your personal information is not provided, then your identity may not be verified and you will not be able to access QParents and the school's records about students may not be kept up to date or will have to be kept up to date in another way.

    To customise QParents you can choose to include a photo of the student. The department will store the photo at Microsoft's secure data centre in Australia for the purpose of displaying the photo in your QParents account. The photo will also be visible to your delegated viewers. In addition to specific personal information collected through QParents, when you visit QParents, our web measurement tool and internet service providers record anonymous information for statistical purposes only, including:

    • the type of browser, computer or phone platform and screen resolution you are using
    • your traffic patterns through our site such as:
      • the date and time of your visit to the site
      • the pages you accessed and documents downloaded
      • the previous page you visited prior to accessing our site
      • the internet address of the server accessing our site.

    No attempt is or will be made to identify you or to use or disclose your personal information other than for statistical purposes, except where the use or disclosure is required under a law or otherwise permitted by the Information Privacy Act 2009 or is needed to operate the website. For example, a law enforcement agency may exercise a warrant to inspect our service providers' logs.

    Use and disclose of information

    Your personal information (outlined above) will be provided to the following persons or organisations for the following purposes:

    • the department's information and communication technology service providers
    • authorised administrators of QParents
    • for delegated viewers - the parent who has given you delegated access to student information
    • for parents - any delegated viewers that are linked to the relevant QParents account.

    Where, on the request of another parent of the student, the department has allowed an additional QParents account to be created for the student, information which you provide through QParents to be included in student information, for example, reasons for absences, may be disclosed to the other QParents portal account owner for the student and their delegated viewers.

    The department is likely to disclose personal information to overseas recipients in the following circumstances:

    • where you or another user accesses the relevant account whilst overseas
    • where a service provider who provides support services for QParents has servers located overseas.

    The department will not disclose your personal information to other third parties except in accordance with this privacy statement and the Information Privacy Act 2009 .

    Updating information

    You must notify the department of any changes in your personal information details so that records are complete and up to date. If you have any queries regarding privacy and personal information please contact the department at qparents@qed.qld.gov.au.

    Mobile app permissions

    If you download and use the QParents mobile app, you will be required to grant permissions to access the following parts of your mobile device:

    • photos/data/files - to allow the user to upload photos or data to QParents and download invoices for viewing
    • internet (or Wi-Fi) network connection - to enable connection to the internet
    • location services - to log information about your location when accessing QParents.

    When you use the mobile app, the following information will be collected and logged:

    • name of the device
    • platform used to access QParents
    • device's unique identifier
    • location

    This information is used by the department to:

    • monitor and analyse usage of QParents and develop enhancements
    • detect unauthorised account activity and apply security safeguards.

    Other personal information may be collected through the mobile app if you choose to upload information to QParents. In that case, the app accesses the relevant part of your mobile device to retrieve and upload the information.

    Email

    This is a Queensland Government website. Email correspondence from this website will be treated as a public record and will be retained as required by the Public Records Act 2002 .

    We will collect and handle your personal information in accordance with the Information Privacy Act 2009 . We will not use your personal information to compile a mailing list or for marketing purposes. We will not disclose these details to third parties without your consent unless required or authorised by law to do so. Email messages may be monitored by our website support staff for system trouble shooting and maintenance purposes.

    Our internet service provider may monitor email traffic for system trouble shooting and maintenance purposes only.

    Security

    This site contains links to non-Queensland Government websites. The Queensland Government is not responsible for the privacy or security practices or the content of such websites.

    Cookies

    This website uses cookies for two purposes - security and analytics.

    The cookies used protect you and the department as they enhance the security of information. They are not invasive and do not act in a malicious way. They contain securely encrypted details that allow department to ensure you are authorised to use the QParents portal services.

    There are two types of cookies:

    1. Those that are saved to a user's hard disk and may remain there for long periods. These are used by numerous websites and provide customisation of the site each time the user visits e.g. when you go to a website several days after first viewing it; it remembers who you are or what you previously viewed.
    2. Those that are only stored in memory for a single customer session. When the browser closes or the user logs off they are destroyed and never saved to disk.

    This website uses the second type of cookies. This is similar to many online banking systems and other government agencies. They are the most secure, with extra security added by strong encryption.

    Google Analytics

    The department is committed to providing a useful and effective service via this webpage. To that end, the department employs the tools provided by Google Analytics to gather information about how this website is accessed. Google Analytics uses 'cookies', which are text files placed on your computer, to help the department analyse how users use the site.

    The information generated by the cookie about your use of this website will be transmitted to and stored by Google on servers located outside of Australia. No personally identifying information is recorded or provided to Google. If you are logged in to this website, information about your user account is not linked to data recorded by Google Analytics and is not provided to Google.

    Information that is gathered using the Google Analytics cookie includes:

    • the number of visitors to this website
    • how visitors arrive at this website, for example did they type the address in directly, follow a link from another webpage, or arrive via a search engine
    • the number of times each page is viewed and for how long
    • time and date of visit
    • geographical location of the visitor
    • information about what browser was used to view this website and the operating system of the computer
    • information about whether the browser supports Java and Flash
    • the speed of the user's internet connection.

    This information will be used by the department to optimise this website to improve access and useability, and to compile statistical data for reporting purposes, for example to include in the Annual Report.

    Read more about Google's privacy policy.

    QParents registration and use

    When you apply for a QParents account, the department will collect personal information to complete your account registration, including your name, address, mobile phone number and email address. This information will be used to verify your account on registration, manage future logins and communicate with you. You are required to ensure this information is kept up to date within the QParents application.

    Information about the collection, use and disclosure of personal information when you use your account is set out in the QParents Terms and Conditions.

    Microsoft Azure - Cloud Hosting

    The department has contracted the Microsoft Azure Cloud Hosting solution to host the QParents application at Microsoft's secure data centre in Australia. See the Microsoft Azure Trust Centre for further details. Be assured that all personal information is protected using the latest encryption techniques, rendering this information unreadable to unauthorised people while housed in the Azure platform.

    greenID

    For the QParents application, the department uses the services of a private identity verification services provider called GB Group plc (GBG ANZ PTY LTD) ABN 67 111 307 361 (previous name called Edentiti Pty Ltd ABN 67 111 307 361). GBG is a gateway service provider for the Commonwealth's document verification service and is committed to complying with the Australian Privacy Principles. Read more about GBG's privacy policy.

    During QParents registration, you will be sent to the greenID service to verify your legal name. By accepting this privacy statement, you consent to GBG:

    • using the information it seeks from you to submit information match requests to the document verification service and the issuers of the documents being verified
    • obtaining the information match results from the document verification service and the issuers
    • informing the department whether you have verified your identity with GBG.

    The department does not receive your identity documentation information from GBG, but receives confirmation or rejection of the identity you are confirming (e.g. Legal Name, Yes).

    Access to your personal information

    Individuals have the right to access the personal information that the department holds about them. You may also request to change the personal information about you. The department will take reasonable steps to correct any information that is inaccurate, incomplete, out of date or misleading. Amendments are made by adding a notation to the document.

    We may refuse your request to access or amend your personal information but you will be provided with a reason for our decision and in the case of an amendment, we will place a note with your personal information indicating that you have disputed its accuracy.

    If you wish to access or amend your personal information please contact Manager, Right to Information and Information Privacy at rti@qed.qld.gov.au.

    Complaints

    Please contact one of the department's customer compliments and complaint services if you have a concern or complaint about the way your personal information has been collected, used, stored or disclosed.

    Home

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/privacy/privacy.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    QParents biometrics login

    You can disable your {{vm.availableBiometryTypeDescription}} login for QParents here.

    Disable biometrics

    You can register for {{vm.availableBiometryTypeDescription}} login to QParents here. You will be logged out and then on the next log in you will be prompted to configure your biometrics.

    Register biometrics

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/profile/biometrics.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Change password

    Unsuccessful Change Of Password

    {{vm.error}}

    Password
    Password is required
    Password is required Password must be at least 8 characters and contain one of the following:
    ! ? @ # $ % ^ & * - + = : ; , .
    Confirmation is required The passwords do not match
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/profile/changePassword.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Edit QParents email address

    This email address is used to authenticate you when you log in to QParents as well as sending you notification emails. You should make sure that it is an email address you check regularly.

    Email address

    Your current email address is {{vm.email}}.

    An email address is required The email address provided is not valid. Correct format is: name@example.com The email address must be different to your current email address.
    Confirmation email address is required The emails do not match
    Password is required

    Update to email address failed. Please ensure the password is correct and the email address is not already in use.

    Change Submitted!

    You have requested to change your email address to {{vm.submittedEmail}}. Please confirm this change by following the instructions in the email we have sent to this address.

    Back

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/profile/email.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Edit QParents mobile number

    This mobile phone number will be used if QParents needs to send you a code to help confirm your identity.

    Mobile number

    The mobile number you entered is not valid.

    Australian mobile numbers should be entered without any country calling code, in the following format: 04XX XXX XXX.

    International mobile numbers should include a + symbol and the country calling code, in the following format: +1 555 555 5555.

    Success!

    You have successfully updated your QParents mobile number to {{vm.mobile}}.

    You have successfully cleared your QParents mobile number.

    Failed!

    Your request could not be updated due to a system failure.

    Back

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/profile/mobile.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Edit other details

    These details are recorded in the school management system and are used by the school to contact you in the most appropriate way when required. It is important that these details are complete, accurate and up-to-date.

    Please update any of the details below.

    Residential address
    Unit/house and street is required You have no characters remaining.
    You have no characters remaining.
    Town/City is required You have no characters remaining.
    State is required
    Postcode is required A valid postcode is required
    Postal address All school mail will be sent to your postal address and not your residential address.
    Unit/house and street is required You have no characters remaining.
    You have no characters remaining.
    Town/City is required You have no characters remaining.
    State is required
    Postcode is required A valid postcode is required
    0\\\"> Contacts
    An email address is required The email address provided is not valid. Correct format is: name@example.com
    A mobile number is required The mobile phone number must be in the correct format e.g. 0401 111 111 (Australian Mobile Number) or for International Mobile Numbers drop the first �0� and add the International Country Code (e.g. +1 401 111 111 for US mobile numbers)
    A mobile number is required The mobile phone number must be in the correct format e.g. 0401 111 111 (Australian Mobile Number) or for International Mobile Numbers drop the first �0� and add the International Country Code (e.g. +1 401 111 111 for US mobile numbers)
    A phone number is required
    A phone number is required The phone number must be in the correct format e.g. 07 1111 1111

    Failed!

    Your request could not be updated due to a system failure.

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/profile/other.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    My details

    Your email has been confirmed!

    Your QParent email address has now been updated.

    Please remember to use this email address for any future logins.

    Please click the Edit button to update any of the details below.

    QParents contact details

    QParents may need to send an SMS message or an email message to you to ensure the security of your account is maintained. The following contacts are used for this purpose and they should be kept up-to-date.

    Email:   Unavailable in QParents Administration View {{vm.parent.emailAddress || 'no email has been provided'}}  Edit

    You have requested to change your email address to {{vm.parent.pendingEmailAddress}}. Please confirm this change by following the instructions in the email we have sent to this address.

    Mobile:   Unavailable in QParents Administration View {{vm.parent.mobileNumber || 'no mobile number has been provided'}}  Edit

    QParents account password

    You can change the password that you use to log in to QParents here.

    Change my password

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/profile/profile.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    QParents push notification settings

    You can manage your push notification settings here.

    Notification Status Your current preference for receiving push notifications from QParents. You can update these preferences in the settings.

    Go to settings

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/profile/push-notification-settings.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Unsupported browser version

    Safari version 12 or less is currently not able to support the QParents registration function.
    Please upgrade to the latest Safari browser version or use an alternate internet browser such as Google Chrome or Microsoft Edge, or an Android device.
    Once registration has been completed, you are able to return to using Safari for use of the QParents app.
    This browser is no longer supported for registering with QParents.

    Enter your invitation code

    Invitation code

    Please enter your unique QParents invitation code.

    Invitation required
    Invitation code

    The invitation code will be clearly marked within the letter or email you received inviting you to register for QParents. NOTE: 13 QGOV support cannot give out invitation codes. If you have misplaced your invitation code you will need to contact the school for this information.

    QParents Privacy

    0\\\">

    Privacy and T&Cs

    Note

    You must check the boxes above to indicate you understand and accept both the Privacy Statement and the QParents Terms and Conditions before you can continue.

    {{vm.hasTermsAndConditions ? 'Decline' : 'Cancel'}}

    The invitation code is not correct

    Unfortunately, the invitation code is not correct. Please check the invitation code before re-entering. Please contact 13 QGOV (13 74 68) if you require any help.

    NOTE: 13 QGOV support cannot give out invitation codes. If you have misplaced your invitation code you will need to contact the school for this information.

    The invitation code you entered is no longer valid

    Our records show you have already used this invitation code to successfully register for a QParents account, therefore the code you have entered is no longer valid. Please return to the login page and enter your email address and password to log in to QParents.

    Please contact 13 QGOV (13 74 68) if you require any help. NOTE: 13 QGOV support cannot give out invitation codes. If you have misplaced your invitation code you will need to contact the school for this information.

    You have already registered with a valid invitation code

    Unfortunately, you have already registered with a valid invitation code. Please check the invitation code before re-entering. Please contact 13 QGOV (13 74 68) if you require any help.

    The invitation code is not correct

    It looks like you have entered your student's EQ ID (identification number) instead of your unique invitation code.

    Your invitation code will be clearly marked within the letter or email you received inviting you to register for QParents. Please check the invitation code before re-entering. Please contact 13 QGOV (13 74 68) if you require any help.

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/registration/accountOwner/invitation.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ vm.heading }}

    {{vm.message}}

    Please retry your registration again or contact your school administrator.

    Success!

    You have successfully become a QParents Account Owner. Click the 'continue' button below to navigate to the home page to begin adding your students.

    You have already registered with a valid invitation code as a QParents Account Owner.

    Please contact the Queensland Government Shared Services help desk on 13 QGOV (13 7468) if you require any help.

    Account details
    Email address is required The email address provided is not valid. Correct format is: name@example.com
    Confirm email address is required The emails do not match
    Password is required Password must be at least 8 characters and contain one of the following:
    ! ? @ # $ % ^ & * - + = : ; , .
    Confirmation password is required The passwords do not match

    The mobile number you entered is not valid.

    Australian mobile numbers should be entered without any country calling code, in the following format: 04XX XXX XXX.

    International mobile numbers should include a + symbol and the country calling code, in the following format: +1 555 555 5555.

    {{ vm.statusMessage }}

    Code is required {{ vm.errorMessage }}

    Didn't receive a code?

    Send another code via SMS Alternatively, you can register without providing a mobile number.

    Error!

    This email has already been used.

    Check your email!

    An email has been sent to you. You must click on the link in that email to activate your account.

    You will then be able to log in to QParents using the email address and password you have entered above.

    Be aware that this step must be completed within 30 days or your registration request will expire and you will need to start again.

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/registration/accountOwner/register.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Verify your identity

    Invitation code

    This invitation code is registered to {{vm.dvs.fullName}}

    If this is not you, you must NOT proceed with the registration process.

    Already have a login?

    You can login to QParents with the existing login.

    What you should do now

    Unfortunately, you are unable to continue with the registration process. Please check you have entered the invitation code correctly.

    If another parent has been nominated as the QParents Account Owner but you would like to register instead, they should contact the school and ask for a new invitation addressed to you.

    If you require further assistance, please contact 13 QGOV (13 74 68).

    The invitation code you entered is no longer valid

    Unfortunately, the invitation code you entered is no longer valid. Please check the invitation code before re-entering. Please contact 13 QGOV (13 74 68) if you require any help.

    There is problem with your QParents account!

    We were able to log you in, but were unable to associate the invitation code with your existing account.

    Details of error: {{vm.associateRegError}}

    If you require further assistance, please contact 13 QGOV (13 74 68).

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/registration/accountOwner/verify.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Invalid invitation

    Terms and Conditions

    Terms and conditions

    Note

    You must check the boxes above to indicate you understand and accept both the Privacy Statement and the QParents Terms and Conditions before you can continue.

    Decline

    Unfortunately, the invitation code is not valid.

    Please contact the Queensland Government Shared Services help desk on 13 QGOV (13 7468) if you require any help.

    You cannot accept an invitation sent by yourself.

    Please contact the Queensland Government Shared Services help desk on 13 QGOV (13 7468) if you require any help.

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/registration/delegatedViewer/invitation.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ vm.heading }}

    You have successfully become a QParents Delegated Viewer. Click the 'continue' button below to navigate to the home page and view your delegated students.

    You cannot accept an invitation sent by yourself.

    Please contact the Queensland Government Shared Services help desk on 13 QGOV (13 7468) if you require any help.

    This student has already been delegated to you.

    Please contact the Queensland Government Shared Services help desk on 13 QGOV (13 7468) if you require any help.

    First time user? Create an account:

    Create an account
    Email address is required The email address provided is not valid. Correct format is: name@example.com
    Confirm email address is required The emails do not match
    Password is required Password must be at least 8 characters and contain one of the following:
    ! ? @ # $ % ^ & * - + = : ; , .
    Confirmation password is required The passwords do not match

    The mobile number you entered is not valid.

    Australian mobile numbers should be entered without any country calling code, in the following format: 04XX XXX XXX.

    International mobile numbers should include a + symbol and the country calling code, in the following format: +1 555 555 5555.

    Error!

    This email has already been used.

    Check your email!

    An email has been sent to you. You must click on the link in that email to activate your account.

    You will then be able to log in to QParents using the email address and password you have entered above.

    Be aware that this step must be completed within 30 days or your registration request will expire and you will need to start again.

    Or

    Already a QParents user? Log in here:

    Login
    Email address is required The email address provided is not valid. Correct format is: name@example.com
    Password is required Password must be at least 8 characters and contain one of the following:
    ! ? @ # $ % ^ & * - + = : ; , .

    Login Unsuccessful

    {{ vm.message }}

    Success!

    You have completed the registration steps to become a Delegated Viewer for the nominated student. Your access is now Pending approval and the parent who nominated you will need to activate your access. You will receive a notification email when this has been done.

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/registration/delegatedViewer/register.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Verify your identity

    Invitation code

    This invitation code is registered to {{vm.fullname}}

    If this is not you, you must NOT proceed with the registration process.

    What you should do now

    Unfortunately you are unable to continue with the registration process.

    If you require further assistance, please contact 13 QGOV (13 74 68).

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/registration/delegatedViewer/verify.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Academic reports archive

    Select school year
    School year required

    Success!

    An email containing the academic reports for the selected school year have been emailed to your QParents email address.

    There has been a problem!

    Record not found, please contact the school for Assistance.

    There are currently no report archives available for {{vm.student.firstName()}}.
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/reports/archive.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Academic reports

    The student’s results shown below are for the latest report period. To view a previous report, please select from the drop down list.

    To print a copy of one of the student’s academic reports, select the required report and click Download report (PDF). You will then be able to open the downloaded PDF file and print the report. You can also save the file to your computer.

    To access an archive of academic reports for a calendar year, click the “Report Archive” button at the bottom of the screen.

    • {{result.subject | limitTo : 50}}

      Grade 1 ? 'text-grade-long' : 'text-grade' \\\">{{result.resultDescription}}

    There are currently no academic reports available for {{vm.student.firstName()}}.

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/reports/reports.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Student details

    Please update any of the details below. All information below is required unless stated as optional.

    {{vm.student.firstName()}}'s recorded details and medical conditions are listed below.

    To request an update to any of the details for this student, please click the relevant button.

    Student Details
    Date of Birth {{vm.student.dateOfBirth | date:'dd MMMM yyyy'}}
    Click \\\"Edit student details\\\" to update student address or date of birth.
    Residential address
    Unit/house and street is required You have no characters remaining.
    You have no characters remaining.
    Town/City is required You have no characters remaining.
    State is required
    Postcode is required A valid postcode is required
    Postal address All school mail will be sent to your postal address and not your residential address.
    Unit/house and street is required You have no characters remaining.
    You have no characters remaining.
    Town/City is required You have no characters remaining.
    State is required
    Postcode is required A valid postcode is required
    Date of birth
    Date of birth is required You have entered an invalid date of birth. Please check that it is in the correct format – dd/mm/yyyy, (eg. 27/01/2009). Date of birth must be in the past.

    Submitted

    Update Submitted

    Thank you for updating {{vm.student.firstName()}}'s details. The changes have been sent to {{vm.student.firstName()}}'s school for review on {{vm.student.updatedDetails.timestamp | date: 'dd/MM/yyyy hh:mm a'}}. You will receive an email once the review is complete.

    Failed

    Your request could not be updated due to a system failure.

    Medical conditions

    Currently there are no recorded medical conditions.

    Delegated Viewers

    Click on the name of a delegated viewer below to view or to change their permissions.

    Currently there are no delegated viewers.
    0\\\" loading-pane=\\\"vm.busy\\\" style=\\\"position:relative\\\">
    Name Status  
    {{viewer.firstName}} {{viewer.lastName}} Unavailable in QParents Administration View {{viewer.status}} Review & approve
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/studentDetails/studentDetails.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Medical conditions

    {{vm.student.firstName()}} has no recorded medical conditions.
    0\\\">
    Advised date Medical condition Current
    {{medicalCondition.advisedDate | date: 'dd MMMM yyyy'}} {{vm.getMedicalCondition(medicalCondition).description}}: {{medicalCondition.alergyDetails}}
    Please enter allergy details
    You have no characters remaining. Required
    0\\\"> 0 && vm.student.isUserPPAOForStudent\\\"/>

    Submitted

    Update Submitted

    Thank you for updating {{vm.student.firstName()}}'s medical conditions. The changes have been sent to {{vm.student.firstName()}}'s school for approval on {{vm.student.updatedMedicalConditions.timestamp | date: 'dd/MM/yyyy hh:mm a'}}.

    Failed

    Your request could not be updated due to a system failure.

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/studentDetails/studentMedicalConditions.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"\";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/studentNotFound/studentNotFound.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    {{vm.enrolment.enrolmentStatusDescription}}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/student/enrolmentStatus.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/student/student.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"\";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/student/studentFooter.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \\\"Edit Edit student photo \\\"student

    {{vm.student.displayName()}}

    Manage student details
    {{vm.student.displayName()}} has finished education on {{vm.student.finisedSchoolDate | date: 'dd/MM/yyyy'}}
    \\\"\\\"

    {{vm.enrolment.school}}

    {{vm.enrolment.year|| \\\" \\\"}}

    Contact school  

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/student/studentHeader.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Student photo

    Terms and conditions

    Note

    You must check the box for the Terms and Conditions above to indicate you understand and accept these and you will then continue with the process.

    Student profile picture options
    or
    or
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/student/studentPhoto.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \" \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/student/studentSidebar.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Attendance

    0\\\" title=\\\"{{vm.enrolment.absenceRecordsWithoutReason}} unexplained absence{{vm.enrolment.absenceRecordsWithoutReason === 1 ? '' : 's'}}\\\"> {{vm.enrolment.absenceRecordsWithoutReason}}
    {{vm.enrolment.attendancePercentageThisCalendarYear}}%
    {{vm.enrolment.daysAbsentThisCalendarYear}} days absent
    View attendance history
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/student/widgets/attendanceWidget.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Behaviour

    0\\\" title=\\\"{{vm.newEvents}} new behaviour event{{vm.newEvents === 0 ? '' :'s'}}\\\">{{vm.newEvents}}
    0\\\"> {{vm.behaviour.incidentType}} {{vm.behaviourCategories}} Latest event {{vm.behaviour.incidentDate | date:'longDate'}}
    There are currently no events to report about {{vm.studentName}}.
    View all events
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/student/widgets/behaviourWidget.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Downloads

    There are no downloads available.
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/student/widgets/downloadWidget.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Outstanding Payments

    0\\\" title=\\\"{{vm.numberOfDuePayments}} payment{{vm.numberOfDuePayments === 1 ?'' : 's'}} due\\\"> {{vm.numberOfDuePayments}} {{vm.outstandingInvoicesTotal | currency : symbol}} No outstanding payments for {{vm.student.firstName()}}.
    View payments
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/student/widgets/paymentWidget.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    0\\\" title=\\\"{{vm.newReports}} new report{{vm.newReports > 1 ? 's' : ''}} available\\\"> {{vm.newReports}}

    Reports

    There are no current reports for {{vm.student.firstName()}}.
    View reports & archive
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/student/widgets/reportWidget.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Timetable

    There is no timetable information available for today.
    {{vm.studentFirstname}}'s timetable for {{vm.todaysTimetable.dayOfWeek}}:
    • {{ period.startTime }}-{{ period.endTime }}

      Room {{ period.roomName }}

      {{ period.subjectDescription }}

    View full timetable
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/student/widgets/timetableWidget.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Upcoming events

    0\\\" ng-repeat=\\\"day in vm.eventsByDay\\\">

    {{vm.getDayLabel(day)}} {{vm.formatDate(day.date)}}

    • {{vm.getEventTypePrefix(item.eventType)}}
      {{vm.getTimeLabel(item)}} {{item.displayName}}

    There are no events which match the current filter.

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/student/widgets/upcomingEventsWidget.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ featureName }}

    This feature has not been made available for the student's current enrolment. Please contact the school for more details.

    Feature unavailable
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/student/widgets/widgetFeatureUnavailable.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Terms & conditions

    Terms and conditions

    Note

    You must agree to all the terms & conditions above to continue

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/termsAndConditions/termsAndConditions.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Timetable

    The following timetable information is current for {{vm.student.firstName()}}.

    To print a copy of this timetable, click Download timetable (PDF) and then open and print the downloaded document.

    • {{ day.dayOfWeek }}

      • {{ period.startTime }}

        {{ period.subjectDescription }}

        Show details
        {{ period.periodName }}

        {{ period.startTime }} - {{ period.endTime }}

        {{ period.className }}
        {{ period.subjectDescription }}
        Room: {{ period.roomName }}
        {{ period.schoolName }}
        Teacher: {{ period.teacherName }}

    • {{ day.dayOfWeek }}

      • {{ period.startTime }}

        {{ period.subjectDescription }}

        Show details
        {{ period.periodName }}

        {{ period.startTime }} - {{ period.endTime }}

        {{ period.className }}
        {{ period.subjectDescription }}
        Room: {{ period.roomName }}
        {{ period.schoolName }}
        Teacher: {{ period.teacherName }}

    There are currently no timetables for {{vm.student.firstName()}}.

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/timetable/timetable.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Your app is out of date

    Please download the latest version from your device's app store.

    Current Version: {{vm.currentVersion}}

    Latest Version: {{vm.targetVersion}}

    You can update QParents from the store here.

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/update/update.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Add a delegated viewer

    Please enter the details of the person you would like to invite to view {{vm.student.firstName()}}’s school information.

    All details below are required.

    Delegated viewer to be added
    First name is required
    Last name is required
    An email address is required The email address provided is not valid. Correct format is: name@example.com
    An email address is required Emails do not match
    Select the student information to be visible to this delegated viewer

    *You must select at least one to continue

    SUCCESS!

    Thank you. All details have been submitted successfully. An email will be sent to {{vm.viewer.firstName}} {{vm.viewer.lastName}} advising them of your invitation.

    When they have completed their individual registration, you will receive a notification email asking you to log in to QParents to update their status to Active. They will not be given access until you have completed this final confirmation.

    Failed!

    Your request could not be updated due to a system failure.

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/viewer/addViewer.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    Delegated viewer details

    Information
    {{vm.viewer.firstName}}
    {{vm.viewer.lastName}}
    {{vm.viewer.email}}
    {{vm.viewer.registeredEmail}}
    Student information visible to this delegated viewer
    Current status
    {{vm.displayStatus(vm.viewer)}}

    {{vm.message.header}}

    {{vm.message.body}}

    Edit information
    {{vm.viewer.firstName}} First name is required
    {{vm.viewer.lastName}} Last name is required
    {{vm.viewer.email}} An email address is required The email address provided is not valid. Correct format is: name@example.com
    {{vm.viewer.registeredEmail}}
    Select the student information to be visible to this delegated viewer

    *You must select at least one to continue

    Edit status

    Confirmation of removal

    Please confirm that you would like to permanently remove {{vm.viewer.firstName}} as a Delegated Viewer for {{vm.student.displayName()}}

     Confirm removal

    Failed!

    Your request could not be updated due to a system failure.

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/app/viewer/viewer.html';\nwindow.angular.module('app').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;"],"names":["map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","require","app","angular","_regeneratorRuntime","Op","prototype","hasOwn","hasOwnProperty","defineProperty","obj","key","desc","value","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","enumerable","configurable","writable","err","wrap","innerFn","outerFn","self","tryLocsList","protoGenerator","Generator","generator","create","context","Context","makeInvokeMethod","tryCatch","fn","arg","type","call","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","forEach","method","_invoke","AsyncIterator","PromiseImpl","invoke","reject","record","result","_typeof","__await","then","unwrapped","error","previousPromise","callInvokeWithMethodAndArg","state","doneResult","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","done","methodName","undefined","TypeError","info","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","length","i","displayName","isGeneratorFunction","genFun","ctor","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","iter","val","object","reverse","pop","skipTempReset","prev","charAt","slice","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","_slicedToArray","arr","Array","isArray","_arrayWithHoles","_i","_s","_e","_x","_r","_arr","_n","_d","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","_createForOfIteratorHelper","allowArrayLike","it","F","s","n","_e2","f","normalCompletion","didErr","step","_e3","minLen","_arrayLikeToArray","toString","from","test","len","arr2","asyncGeneratorStep","gen","_next","_throw","_asyncToGenerator","args","arguments","apply","httpConfigurator","$httpProvider","defaults","headers","get","withCredentials","xsrfCookieName","CSRF_HEADER_NAME","xsrfHeaderName","interceptors","clientTypeInterceptor","$rootScope","csrfTokenProvider","$log","deviceService","urlResolver","request","_request","_callee","config","isApiCall","crsfToken","_iterator","_step","_step$value","_context","url","indexOf","debug","getCsrfToken","getHttpHeaders","userSessionId","isMobileApp","concat","_x2","_x3","_x4","_getHttpHeaders","_callee2","device","uuid","appInfo","_context2","getDeviceInfo","getDeviceId","getAppInfo","model","platform","osVersion","version","templateUrl","directive","scope","replace","restrict","VerifyAccountOwnerInvitationCodeResultStatusCode","Valid","Invalid","AlreadyUsed","AlreadyRegistered","ContactType","PhoneWork","PhoneHome","MobilePersonal","MobileWork","Fax","PhoneInternational","Email","NullableMobilePersonal","EnrolmentStatus","Active","Deceased","Exempt","Future","Inactive","Left","NonAttendee","EventType","Exam","Assessment","Excursion","School","MfaMedium","mfaMediumDescription","SMS","Feature","EnrolmentHistory","Behaviour","Attendance","Timetable","Finance","AcademicReports","StudentDetails","StudentPhoto","AssessmentPlanner","ExamTimetable","UpcomingEvents","ConsentManagement","OneSchoolPaymentStatus","Open","Closed","ConsentResponseState","Pending","Granted","Denied","Mixed","Withdrawn","Expired","ResultStatusCode","CodeAlreadyUsed","UserNotAccountOwner","StudentState","MatchAcceptedApprovalPending","AlreadyMatchedAndApproved","AlreadyMatchedApprovalPending","controllerId","addStudent","common","dataContext","$scope","$q","$location","vm","this","user","dontAutoRedirectToAddStudent","cancelRedirectToAddStudentPage","eqid","schools","selectedSchool","YEAR_LEVELS","selectedYearLevel","save","form","$valid","busy","deferred","defer","submitted","alreadyApproved","alreadyPending","saveStudentRelation","schoolId","yearLevel","responseData","studentName","pendingStudents","schoolName","yearLevelName","response","promise","cancel","path","addAnotherStudent","showWelcomeText","addForm","$setPristine","document","getElementById","focus","activateController","getData","data","redirectToAddStudentPage","check","$routeParams","apiService","localStorageService","getPlatform","outages","checkerStatus","checking","modules","locationUrl","absUrl","hasModulesToCheck","future","promises","getOutage","getAlert","all","responses","search","outage","filter","find","moduleName","studentId","getOutageById","controller","controllerAs","systemAlertCheckerFactory","systemAlert","systemAlertChecker","_this","set","factory","AttendanceComponent","contextLoader","authorisationService","$filter","_classCallCheck","showAttendanceRecord","isFeatureAvailable","load","_this$enrolment","hasFeatureAccess","FEATURES","ATTENDANCE","absenceTotal","enrolment","absenceTotals","_","daysAbsent","attendancePercentageThisCalendarYear","enrolmentStatus","initializeChart","$inject","chartConfig","options","chart","margin","tooltip","formatter","chartTooltip","useHTML","shared","legend","enabled","series","xAxis","categories","yAxis","title","text","allowDecimals","loading","point","_this2","dayOfWeek","getDayOfWeek","x","totalDays","$","absenceRecords","parseInt","absencePeriod","day","html","absenceDate","append","isFullDay","parent","absenceRecord","expand","expanded","imagePath","isoDateFormat","auDateFormat","parseDate","date","parsedDate","utcFormatRegex","RegExp","moment","trimmedDate","substring","isValid","formatDateToShortMonthDay","format","formatDateTimeMomentToIcsDate","dateTimeMoment","utc","formatDateTimeToIcsDate","time","timeMoment","hour","minute","second","DAYS","isWeekend","getDayOfTheWeek","getToday","d","Date","setHours","todaysDayIndex","getDayOfTheWeekIndex","getDay","getDayOfWeekLabel","today","getTime","isToday","tomorrow","isTomorrow","getTimeOptions","intervalInMinutes","startDate","startOf","endDate","currentDate","isSameOrBefore","toDate","add","ReportAbsenceComponent","$timeout","$document","isDelegatedViewer","timeOptions","onReasonChange","trigger","hasReachedMaxlength","reasonCharactersRemaining","reasonLength","reason","student","isUserPPAOForStudent","isAllDay","dateFrom","dateTo","timeFrom","timeTo","submitAbsenceForm","$setDirty","setFormFieldsDirty","absenceSubmitted","eQId","oneSchoolId","allDay","dateAbsentFrom","dateAbsentTo","schoolCode","reportAbsence","successDiv","scrollToElement","ReportReasonComponent","absenceId","getAbsenceRecordForId","redirectIfAbsenceRecordNull","setInitialFocus","onreasonChange","newPath","$invalid","studentAbsenceId","submitAbsenceReason","reasonSubmitted","reasonAwaitingApproval","BehaviourComponent","BEHAVIOUR","EnrolmentHistoryComponent","_createClass","hasStudentFeatureAccess","ENROLMENT_HISTORY","assetService","openHelpInSystemBrowser","$event","preventDefault","mobileOpenFile","featureUnavailable","home","hideFullScreenLoadingPane","homeInitialise","$cookies","shouldRedirectToPhotoPreview","cookieName","REDIRECT_PHOTO_COOKIE_NAME","checkIfRedirectRequired","studentIdToRedirectToPhotoPreviewPageFor","remove","shouldRedirectToAddStudentPage","shouldRedirectToAddStudent","component","bindings","StudentsListComponent","adminViewData","$onInit","adminViewDetails","canAccess","centreCode","students","ConsentSummaryWidget","consentService","consentFeatureTurnedOffForAllStudents","some","CONSENT_REQUESTS","consentLoading","consentRequestsEnabled","getConsentRequestSummary","summary","consentSummary","consentLoadedSuccessfully","loadedSuccessfully","AbsenceSummaryWidget","absenceSummary","absenceFeatureTurnedOffForAllStudents","features","feature","enrolments","UpcomingEventsSummaryWidget","upcomingEventsFeatureTurnedOffForAllStudents","UPCOMING_EVENTS","upcomingEventsSummary","paymentsSummaryWidget","paymentsSummary","paymentsFeatureTurnedOffForAllStudents","FINANCE","QLearnSummaryWidget","qLearnService","getQLearnLink","link","registerLink","redirectUser","sectionclass","transclude","loadImage","userReviews","review","imageSrc","userReviewsSection","slideIndex","timer","carouselScrollEventHandler","clearTimeout","setTimeout","classList","carousel","width","scrollWidth","numOfElements","scrollLeft","Math","round","$postLink","addEventListener","moveSlider","index","scrollIntoView","behavior","block","inline","processGuide","description","iconSrc","loadIcon","iconPath","functions","QLearnAppMessage","loginForm","$route","preferencesService","csrfTokenService","recaptchaService","loginService","doLogin","login","mfaMedium","loginAttempt","mfaSessionId","showLoginFailed","message","invalidToken","email","isMobileTestAccount","setBaseUrl","ensureCsrfToken","handleMobileLoginAccount","userLogin","checkIfBiometricAvailable","biometricResult","isAvailable","getIsCredentialPrompted","isCredentialPrompted","availableBiometryTypeDescription","getIsCredentialSaved","isCredentialSaved","checkIfMatchingCredentialExist","checkMatchResult","passwordMatch","usernameMatch","when","Dialog","confirm","okButtonTitle","cancelButtonTitle","confirmResult","deleteBiometricCredential","saveCredential","updateCredential","promptToUpdateCredential","setIsCredentialPrompted","promptToSaveCredential","saveBiometricCredential","username","password","isOnLoginCompleteDefined","onLoginComplete","reload","status","invalidCode","setFocus","isNewDevice","showToken","initialize","loginFailed","field","css","REMEMBER_EMAIL_KEY","isOnCancelDefined","onCancel","retryMfa","token","logout","loadBiometricCredential","userInfo","autoLoginAttempt","template","element","attrs","platformService","networkService","onNetworkStatusChangedHandler","connected","getIsMaintenance","isMaintenance","checkVersion","reloadApp","window","location","onNetworkStatusChanged","showEmailValidatedSuccess","showEmailValidatedError","isOffline","isOnline","emailConfirmed","getNetworkStatus","$onDestroy","removeOnNetworkStatusChanged","initialise","forgotPassword","editEmail","newEmail","forgotPasswordRequest","emailSent","changeForgottenPassword","forgotPasswordSubmit","confirmationToken","newPassword","success","ct","confirmationTokenValid","resetPasswordConfirmed","newPasswordConfirmation","confirmResetPassword","execute","action","href","outageCheckerFactory","outageChecker","goHome","PaymentComponent","financeRecordsDue","paymentAmount","amountOwing","isSelectedForPayment","payment","params","oneSchoolPpaoId","oneSchoolParentId","studentEqId","invoiceNumber","schoolUserId","isAdminView","sessionStorage","getItem","ADMIN_VIEW_COOKIES","SCHOOL_USER_ID","paramsToQueryString","financeRecord","encodeURIComponent","join","getFinanceRecordsSelectedForPayment","getFinanceRecordsSelectedForPaymentTotal","getFinanceRecordsWithPaymentAmountGreaterThanAmountOwing","ProcessPaymentComponent","processPaymentService","verifiedPaymentResponses","paymentRequestEnded","paymentCompletelyFailed","totalPaymentValue","showFullScreenLoadingPane","getPrePaymentAuthenticationTokens","p","sendPayment","getPrePaymentAuthTokensFailure","verifyPayments","sendPaymentFailure","showOutcome","showErrorOutcome","paymentResponses","verifyPaymentResponse","hasSuccessfulPayments","successfulPayments","hasFailedPayments","failedPayments","unknownOutcomePayments","paymentResult","paymentsResult","markSuccessfulPaymentsAsInProgress","_this3","processPaymentPromises","creditCardNumber","creditCardExpiry","creditCardCvv","clearSelectedPayments","_this4","getPaymentAuthenticationTokens","amount","reduce","sum","recordCurrentPayments","paymentDateTime","SchoolPhotoComponent","photoService","photoRetrieved","schoolPhotoUrl","SPINNER_URL","schoolDoesntHavePhoto","AVATAR_NOPHOTO_URL","retrieveSchoolPhoto","hasSchoolPhoto","downloadPhoto","promotePhoto","photoUrl","photoContentUrl","history","back","UploadComponent","$anchorScroll","newPhoto","handleFileInputEvent","on","event","uploadAttachment","originalEvent","dataUrl","mimeType","uploaded","_fileInput$files","fileInput","target","fileInputFiles","files","file","reader","FileReader","onload","img","createElement","split","resizedDataUrl","resizeImage","src","readAsDataURL","defaultValue","canvas","ctx","getContext","height","ratio","min","floor","drawImage","toDataURL","resizedImage","uploadPhoto","biometricsController","isBiometricsRegistered","isBiometricAvailable","submit","setIsCredentialSaved","removeBiometrics","registerBiometrics","PushNotificationsComponent","nativeSettingsService","nativeSettingsLauncherService","isRemoteNotificationEnabled","isPushNotificationEnabled","pushNotificationSetting","receiveNewConsentRequestNotification","openPushNotificationSettings","ProfileComponent","emailWasConfirmed","isUnauthorised","isRedacted","emailAddress","mobileNumber","pendingEmailAddress","isActive","changePassword","oldPassword","OldPassword","NewPassword","NewPasswordConfirmation","hash","errorMessage","userToUpdate","confirmEmail","changeEmail","submittedEmail","mobile","editMobile","newMobile","changeMobile","other","STATES","originalParent","postalAddressIsSameAsResidential","saveParentDetails","updatedDetails","timestamp","residentialAddress","contacts","postalAddress","populateUpdatedDetails","clearPostalAddress","shouldClear","isPpao","line1","accountOwnerInvitation","$sce","invitationService","sessionId","refreshPage","validationResponse","showNext","showTryAgain","valid","showAccept","disableCodeInput","pendingTermsAndConditionsKeys","hasTermsAndConditions","acceptedAllTermsAndConditions","navigateToNameVerification","pendingTermsAndConditions","trustAsResourceUrl","checked","label","getCheckboxLabelForTermsAndCondition","showAnyPendingTermsAndConditions","SESSION_AO_CODE_KEY","toUpperCase","TERMS_AND_CONDITION_LABELS","validateInvitationCode","checkIfAllTermsAndConditionsAccepted","every","tc","navigateToNameVerificationIfNotBusy","hideErrorMessage","clearSessionInvitationCode","isAuthenticated","IsOutDatedBrowser","isSafariBrowserAndVersionIsLessThanOrEqualTo12","accountOwnerRegister","$window","registration","registerBusy","console","log","showEmailAlreadyRegistered","statusMessage","emailAlreadyRegistered","submitButtonText","mfaRequired","removeSessionToken","showConfirmationMessage","registrationContext","current","locals","verified","showRegister","showAlreadyLoggedInMessage","showAlreadyRegisteredAccountOwner","navigateHome","sessionToken","wasLoggedIn","heading","accountOwnerRegisterInitialise","dvsUserId","userId","accountOwnerActivate","accountOwnerVerify","dvsSubmit","forms","isThisYou","hasExistingLogin","dvs","dvsContext","dvsUrl","onLogin","hasAssociateRegError","associateRegError","associateAdditionalRegistration","associateAdditionalRegistrationResponse","userNotAccountOwner","accountOwnerVerifyInitialise","getAccountOwnerVerification","delegatedViewerInvitation","invitationContext","fullName","delegatedViewerFullName","showInvalidCodeError","showAcceptingOwnInvitationMessageError","showTermsAndConditions","SESSION_DV_CODE_KEY","validCode","acceptingOwnInvitation","delegatedViewerInvitationInitialise","getDelegatedViewerInvitation","clearAuthenticationCookieWithoutPublishing","delegatedViewerRegister","loginBusy","showLoginSucceeded","showStudentHasAlreadyBeenDelegatedToYouError","showLogin","showAcceptingOwnInvitationMessage","preSignIn","delegatedViewerLogin","flagSignedIn","verifyAuthenticated","alreadyHasDelegatedStudent","_response$data","delegatedViewerVerify","fullname","navigateToRegister","ReportsComponent","academicResults","currentResult","hasAcademicResults","hasArchiveReports","ACADEMIC_REPORTS","sort","a","b","diff","academicYearArchives","isLoading","reportingPeriodId","ppaoId","PARENT_ID","ArchiveComponent","archiveReports","academicYear","emailAcademicReportArchive","r","studentNotFound","ConsentComponent","_defineProperty","dueDate","responseDate","withdrawnDate","school","studentFullName","allRequestsForThisStudent","consentRequests","eqId","pendingRequests","consentRequestMapper","pastRequests","RequestComponent","loadingConsent","getConsentRequest","requestId","to","contactEmail","subject","body","contactName","reference","hasResponse","consentState","isEditable","Formio","license","use","uswds","createForm","formTemplate","readOnly","disableAlerts","noAlerts","highlightErrors","submission","_objectSpread","formData","parentName","firstName","lastName","parentPhoneNumber","parentEmailAddress","nosubmit","focusFirstError","sendConsentResponse","now","toISOString","emit","pendingRequestsCount","cr","errorClass","firstError","querySelector","ResponseSubmittedComponent","c","toDateString","studentSidebarLoad","startsWith","studentHeaderLoad","AttendanceWidget","BehaviourWidget","_this$behaviour","behaviour","behaviours","incidentDate","behaviourCategories","incidentCategories","substr","totalEvents","recentDate","getRecentDate","newEvents","m","incidentType","DownloadWidget","refreshDownloads","downloads","mapModels","examTimetables","assessmentPlanners","models","buildDownloadModel","downloadInfo","fileId","fileName","pPAO","openFile","PaymentWidget","numberOfDuePayments","getNumberOfOutstandingInvoices","outstandingInvoicesTotal","getOutstandingInvoicesTotal","hasOutstandingInvoices","ReportWidget","orderedReports","getFullYear","getMonth","getDate","newReports","report","latestReport","TimetableWidget","todaysTimetable","getTodaysTimetableOrMondaysIfWeekend","studentFirstname","timetableIsNoLongerThanOneWeek","timetable","days","canShowTimetable","enumerateDaysBetweenDates","dates","currDate","lastDate","endOf","clone","getFormattedTimeRange","start","end","startDateInfo","endDateInfo","stripSeconds","UpcomingEventsWidget","eventTypes","eventTypeNames","eventTypePrefixes","calendarService","upcomingEvents","filterOptions","active","eventsByDay","allEvents","refilterEvents","upcomingEvent","startTime","endTime","eventType","startDatesOfEvents","endDatesOfEvents","minStartDateOfEvent","maxEndDateOfEvent","allEventsDateRange","filteredEvents","ev","isInActiveFilter","items","isBetween","agenda","fo","icsEvent","createIcsEvent","icsEventBlob","createIcsFile","openIcsFile","detail","featureName","studentLoad","StudentPhotoComponent","blobService","termsAndConditions","acceptedTermsAndConditions","studentPhotosEnabled","studentPhotosTermsAndConditionsKey","selectedOption","ids","acceptTermsAndConditions","removeStudentPhoto","createBlobFromDataUrl","photoUrlOrPlaceholder","blob","getPhotoContentUrl","blobResponse","toLowerCase","removePhoto","StudentDetailsComponent","editStudentDetails","showSuccessHeading","delegatedViewers","originalStudent","STUDENT_DETAILS","setIfPostalAddressIsSameAsResidential","delegateViewers","getStudentMedicalConditionTypes","medicalConditionTypes","line2","suburb","postcode","residesWithParent","resetScreen","saveStudentDetails","StudentMedicalConditionsComponent","originalMedicalConditions","medicalConditions","medicalCondition","condition","getMedicalCondition","requiresAllergyDetails","alergyDetails","_this$medicalConditio","medicalConditionId","medicalConditionTypeId","currentMedicalConditionTypeId","_this$medicalConditio2","_this$medicalConditio3","medicalConditionType","isNew","isCurrent","advisedDate","medicalConditionsForm","detailsSubmitted","splice","hasAllergyDetails","saveStudentMedicalConditions","medicalConditionsUpdated","updatedMedicalConditions","adminViewRedirectService","declineTermsAndConditions","flagSignedOut","acceptedAll","checkIfAllAccepted","acceptPendingTermsAndConditions","toc","getTermsAndConditions","resp","content","TimetableComponent","anyTimetableInformation","firstWeekDays","secondWeekDays","TIMETABLE","dayOfWeekOrder","timetableDay","period","showTooltip","hideAllTooltips","periods","periodItem","range","startTimeMinuteOffset","lengthInMinutes","updateAppController","versionParts","versionInfo","currentVersion","targetVersion","isIOs","appUrlInTheStore","APPLE_STORE_APP_PAGE","isAndroid","GOOGLE_PLAY_APP_PAGE","recordMobileAppNeedsUpgrade","distinctFilter","AddViewerComponent","delegateViewer","combinedFeatures","availableViewerFeatures","viewer","allFeatures","parentQId","sendInvite","newViewer","delegateViewerAdded","ViewerComponent","viewerId","showEditInformation","showResendInvitation","showEditStatus","editingInformation","editingStatus","canEditContactDetails","canEditFeatures","confirmRemove","originalViewer","qId","registeredEmail","getDelegatedViewerDetails","resetPage","getUserEmail","isViewerBlocked","isViewerDeleted","isPending","elementId","resendInvite","setMessage","detailsChanged","haveDetailsChanged","statusChanged","hasStatusChanged","updateViewer","updateStatus","viewers","anyFeaturesSelected","anyRemoveApproved","displayRemoveConfirmation","updatedDelegatedViewers","_this5","haveFeaturesChanged","header","_this6","approve","v","ReportMultipleAbsencesComponent","studentsWithoutAttendanceFeature","findIndex","absences","addAbsence","studentList","caption","centerCode","selectedStudents","submitMultipleAbsencesForm","futureAbsences","absence","reportMultipleAbsences","dateToField","dateFromField","timeFromField","timeToField","reasonField","CombinedUpcomingEventsComponent","ticked","combinedUpcomingEvents","studentsWithoutUpcomingEventsFeature","userHasDelegatedStudents","delegatedStudents","selectedSchools","selectedEventTypes","filterEvents","startDateFilter","endDateFilter","valueToCheck","isAfter","isBefore","dateOverlapsWithDateFilter","selectedEvent","getEventType","selectedStudent","dateRange","isSameOrAfter","CombinedPaymentsComponent","filteredFinanceRecordsDue","financeRecordsPaid","filteredFinanceRecordsPaid","studentsWithoutPaymentFeature","schoolListForOutstandingPaymentsFilter","schoolListForPaymentHistoryFilter","studentListForOutstandingPaymentsFilter","studentListForPaymentHistoryFilter","financeRecordDue","combinedFinanceRecord","bPointPaymentUrl","originalAmount","transactionDate","paymentRef","pdfExists","customerReferenceNumber","paymentsAreInProgress","isInvoice","isPayment","pendingPayments","paymentReceiptNumber","typeDescription","paymentAuthToken","merchantNumber","billerCode","financeRecordPaid","outstandingPaymentsFilter","paymentHistoryFilter","filterOutstandingPayments","filterPaymentHistory","payments","ConsentRequestSummary","update","chipBackgroundColor","getBackgroundColorFromState","stateDescription","consentResponseStateDescription","requestTitle","goToRequest","clickable","ConsentRequestList","requests","CombinedConsentRequestsComponent","_toConsumableArray","allRequests","sortRequests","filterRequests","aDate","bDate","appInitFactory","routeConfigurator","$routeProvider","routes","routeConfig","init","appInit","__outageChecker","__systemAlertChecker","otherwise","redirectTo","constant","checkForRedirectsBeforeLoadingView","isAnonymous","hideHeader","CommonConfigProvider","commonConfig","$broadcast","controllerActivatingEvent","eventArgs","controllerActivatedEvent","broadcast","_len","_key","services","provider","cfg","$logProvider","debugEnabled","ENABLE_CONSOLE_LOGGING","cfpLoadingBarProvider","includeSpinner","$locationProvider","hashPrefix","PreferencesService","Preferences","isCredentialSavedKey","isCredentialPromptedKey","service","DeviceServiceProvider","DeviceService","_deviceId","identifier","Device","getId","_deviceInfo","getInfo","deviceInfo","App","_appInfo","build","Capacitor","appServiceProvider","$http","$injector","errorLoggingService","httpGet","getIsMaintenanceUrl","getAuthenticationCheckUrl","getCrsfTokenUrl","outagesBaseUrl","getMinimumApiVersionUrl","getDownloadTokenUrl","getAccountOwnerVerificationUrl","getDelegatedViewerInvitationUrl","getUserUrl","getAdminViewUserUrl","qid","getUserEmailUrl","getStudentMedicalConditionTypesUrl","getQLearnLinkUrl","getTermsAndConditionsUrl","consentRequestBaseUrl","query","responseType","httpPost","loginUrl","awaitPromisesThenPost","logoutUrl","settingsPasswordUrl","settingsEmailUrl","settingsMobileUrl","reportAbsenceUrl","submitAbsenceReasonUrl","reportMultipleAbsencesUrl","forgotPasswordRequestUrl","forgotPasswordSubmitUrl","adminViewLogoutUrl","recordAuditUrl","recordErrorUrl","recordMobileAppNeedsUpgradeUrl","acceptTermsAndConditionsUrl","acceptPendingTermsAndConditionsUrl","accountOwnerLoginUrl","accountOwnerRegisterUrl","accountOwnerActivateUrl","accountOwnerInvitationUrl","delegatedViewerLoginUrl","delegatedViewerRegisterUrl","delegatedViewerInviteUrl","delegatedViewerUpdateUrl","delegatedViewerResendInviteUrl","delegatedViewerChangeStatusUrl","associateAdditionalInvitationUrl","saveUserUrl","saveStudentRelationUrl","saveStudentUrl","saveStudentMedicalConditionsUrl","removeStudentPhotoUrl","studentUseSchoolPhotoUrl","promoteStudentPhotoUrl","uploadStudentPhotoUrl","emailStudentAcademicReportArchiveUrl","paymentAuthenticationTokenUrl","verifyPaymentResponseUrl","auditPaymentUrl","deviceId","getInstallationId","installationId","registerPushNotificationUrl","getPushNotificationPlatform","unregisterPushNotificationUrl","isUseCapacitorHttp","capacitorHttpGet","responseError","activePromises","httpOptions","getCapacitorHttpOptions","CapacitorHttp","capacitorHttpPost","post","webFetchExtra","credentials","requestType","_this7","checkPromises","_this8","CryptoJs","Hex","newInstallationId","uuidv5","pushNotificationTokenStorageKey","redirectRoutePathStorageKey","pushNotificationRegisteredEvent","pushNotificationRegistrationFailedEvent","pushNotificationReceivedEvent","pushNotificationActionedEvent","pushNotificationsService","PushNotifications","addListener","notification","JSON","stringify","onPushNotificationReceived","actionPerformed","actionId","actionData","routePath","onPushNotificationActioned","getToken","getIsRegistered","register","_register","requestPushNotificationsPermission","_requestPushNotificationsPermission","pushNotificationRequestPermissionResult","checkPermissions","receive","requestPermissions","registerPushNotificationRegistrationAction","t0","_registerPushNotificationRegistrationAction","_callee3","_context3","onPushNotificationsRegistered","onPushNotificationsRegistrationFailed","AdminViewRedirectService","isAdminViewDomain","newUrl","open","requireDownloadToken","getDownloadToken","appLauncherOpenUrl","AppLauncher","openUrl","AuthorisationService","invalidStudent","unauthorizedStudentFeature","invalidEnrolment","unauthorizedEnrolmentFeature","toUrl","wasAdmin","adminViewLogout","clearAuthenticationCookie","flagSignedOutWithoutRaisingEvent","BlobService","fetch","arrayBuffer","buff","byteArray","Uint8Array","Blob","onloadend","ArrayBuffer","uint8Array","String","fromCharCode","onerror","urlResolverProvider","baseUrl","newBaseUrl","bind","ContextLoader","routeParams","studentEnrolment","getEnrolment","contactSchoolUrl","schoolEmail","isAValidCreditCardNumber","canonicalNumber","canonicalCreditCardNumber","canonicalise","isValidLength","isValidLuhn","number","digit","j","len1","ref2","FinanceRecord","Enrolment","anyFinanceRecords","enrolmentStatusDescription","getEnrolmentStatusDescriptor","isActiveEnrolment","dayNumberToShow","getInvoicesWithAmountsOwing","acc","accumulator","paymentDate","successfulPayment","paymentReceipt","receiptNumber","recordToAddPaymentTo","getFinancialRecordDueForInvoiceNumber","max","EXAM_TIMETABLE","ASSESSMENT_PLANNER","examTimetableAvailable","assessmentPlannerAvailable","timetableAvailable","reportAvailable","downloadsAvailable","Student","isDelegated","dateOfBirth","dateStringWithTime","stripTime","givenNames","User","allAvailableStudents","getStudentForId","hasAnyQpaoStudents","hasAnyDvStudents","numRedactedStudents","pendingDelegatedStudents","numRedactedDelegatedStudents","isAccountOwner","hasPendingTermsAndConditions","cookieService","cachedData","events","userSignedIn","userSignedOut","dataRefreshed","AUTH_COOKIE_NAME","fetchData","onUserSignedIn","subscriber","$on","onUserSignedOut","onDataRefreshed","saveUser","res","refreshData","relation","postData","getUtcDate","saveStudent","_associateAdditionalRegistration","maybeSignInAdmin","getCookie","IS_ADMIN_VIEW","clearAuthentication","k","cookieValue","setItem","deleteCookie","keyAndEquals","ca","cookie","doNotRaiseUserSignedOut","CapacitorCookies","getCookies","cookies","cookieDeletePromises","removeItem","_refreshTokenAndFetchUser","getUser","CENTRE_CODE","getAdminViewUser","refreshTokenAndFetchUser","hasPhoto","loadStudentImage","loadStudentImages","dateObject","UTC","associateAdditionalInvitation","resultCode","invalid","codeAlreadyUsed","DelegateViewerService","delegatedViewerInvite","updateObject","delegatedViewerUpdate","delegatedViewerResendInvite","delegatedViewerChangeStatus","delegatedViewer","hasAccessToEnrolmentHistory","hasAccessToFeature","hasAccessToStudentDetails","includes","focusService","setFocusTo","VALID","INVALID","ALREADY_USED","ALREADY_REGISTERED","LOOKS_LIKE_A_STUDENT_EQID","codesLooksLikeAStudentEqId","buildResponse","userAlreadyAccountOwner","looksLikeAStudentEqId","isAValidPhoneNumber","phoneNumber","allowedPrefixes","isInternational","phoneNumberToCheck","digitsOnlyString","characters","char","getDigitsOnlyString","prefix","PhotoService","_response$headers$Con","photoBlob","studentUseSchoolPhoto","promoteStudentPhoto","base64","urlEncodedData","uploadStudentPhoto","clientVersion","getMinimumApiVersion","android","iOS","versionCompare","zeroExtend","getClientVersion","performClientVersionCheck","requiredVersion","lexicographical","v1parts","v2parts","isValidPart","NaN","Number","_bro$name","bro","UAParser","getResult","browser","_bro$version","majorVersion","_unused","ProcessPaymentService","payableFinanceRecords","paymentAuthenticationToken","bpointPaymentResponses","payableFinanceRecord","auditPayment","cardNumber","cardExpiry","cardCVV","paymentIndex","sendPaymentCapacitor","sendPaymentWeb","dollarAmount","roughDollars","dollarError","ceil","expiryMonth","expiryYear","redirectUrl","protocol","host","iframe","style","display","convertDollarsToCents","appendChild","contentWindow","write","close","unknownOutcomeResult","requestAmount","requestInvoiceNumber","unknownResponseStatus","removeChild","parentLog","in_merchant_number","in_billercode","in_pay_token","in_amount","in_merchant_reference","in_crn1","in_crn2","in_crn3","in_credit_card","in_expiry_month","in_expiry_year","in_cvv","in_receipt_page_url","in_paymentForm_index","postOptions","disableRedirects","cordovaHTTP","disableRedirect","tryHandleResponse","match","pl","decode","decodeURIComponent","exec","routeService","isAnonymousRoute","doesFilteredRoutesContainPath","route","shouldHideHeader","isOnLoginPage","pathWithoutQueryString","colonPosition","lastIndexOf","callback","Network","_removeOnNetworkStatusChanged","_isOnline","networkStatus","_getNetworkStatus","getStatus","removeAllListeners","loadCsrfToken","setCsrfToken","getCrsfToken","csrfToken","tokenToSet","existingToken","$interval","tag","process","onLoadFunctionName","grecaptcha","isInitialized","isInitializing","ready","initialized","initializing","isExecuteAvailable","scriptExists","wait","writeScript","SERVER_URL","has","loginRequest","checkRecaptcha","recaptchaToken","captchaToken","NativeBiometric","verifyIdentity","subtitle","getCredentials","server","verifyBiometricCredential","userlogin","setCredentials","deleteCredentials","biometryType","getBiometryTypeDescription","errorCode","BiometryType","FACE_AUTHENTICATION","FACE_ID","IRIS_AUTHENTICATION","FINGERPRINT","TOUCH_ID","ConsentService","clear","curr","QLearnService","qLearnLink","PushNotificationsRegistrationService","pushNotificationRegistrationTimeoutId","registerToken","_registerToken","unregisterToken","_unregisterToken","unregisteredEvent","registerPushNotificationToken","unregisterPushNotification","registerPushNotification","_openPushNotificationSettings","NativeSettings","openAndroid","option","AndroidSettings","AppNotification","openIOS","IOSSettings","Notifications","_isRemoteNotificationEnabled","Diagnostic","isRemoteNotificationsEnabled","toaster","rejection","landingPageRedirect","handleSessionExpired","showToastsOnError","ErrorMessage","FullException","reasonAppend","buildMessage","exceptionHandler","subHandlers","handler","cause","sh","addHandler","subHandler","cacheConditions","CACHED_EXCEPTIONS_KEY","addCacheCondition","cacheCondition","$get","userName","userEmail","userProfileId","intervalPromiseCachedErrors","reportError","filename","line","column","details","sendCachedErrors","_buildError","buildError","addErrorToCache","replaceErrors","getOwnPropertyNames","send","isFromCache","recordError","cache","isSupported","cc","cachedError","exceptionRelatedInformation","getDeviceData","page","language","navigator","userAgent","appVersion","appName","_getDeviceData","operatingSystem","manufacture","manufacturer","isVirtual","CalendarService","icsEvents","calendarData","uid","uuidv4","escapeICalValue","truncatedSummary","truncatedDescription","icsContent","icsBlob","icsFile","openIcsFileForMobile","URL","createObjectURL","savedIcsFilePath","readAsText","Filesystem","writeFile","directory","Directory","Data","encoding","Encoding","UTF8","recursive","FileOpener","filePath","uri","contentType","openWithDefault","ShellComponent","pushNotificationsRegistrationService","enrolmentEntries","selectedEnrolment","updateShowHeader","updateShowSignInLink","$$route","createAdminAuditLog","selectedStudentPath","getCurrentSelectedStudentPath","getMatchedEnrolmentEntry","onUserRefreshed","isSignedInEvent","hasStudents","hasAnyStudents","matchedEnrolmentEntries","redirectPath","_this$enrolmentEntrie","currentOneSchoolId","currentSchoolCode","pathSegments","enrolmentEntry","currentPath","showHeader","showSignInLink","schoolUsername","loggedInUsername","routeTitle","auditRecord","eqIds","recordAudit","elem","attr","ngModel","$parsers","verificationNumber","$setValidity","parsedMonth","parsedYear","nowYear","nowMonth","isInFuture","monthIsValidMonth","list","setup","prop","setupHandler","changeHandler","$apply","$watch","creditCardService","checkForValidCreditCardNumber","creditCardNumberWithoutDigitsSpacesOrDashes","$setViewValue","$render","validation","unshift","$formatters","$locale","ngRequired","decimalRex","dChar","clearRex","decimalSepRex","viewValue","cVal","dSeparator","NUMBER_FORMATS","DECIMAL_SEP","clearValue","parseFloat","$modelValue","newValue","oldValue","runValidations","classToToggle","currentLink","currentUrl","linkUrl","addClass","removeClass","INgModelController","checkForDigits","input","inputWithoutDigits","toastr","fromDate","performValidation","asHours","$observe","isChanged","formValue","compareToValue","$pristine","currentValue","targetElement","overlayElement","spinnerElement","updateVisibility","isVisible","newVal","matchCaseInsensitive","minDate","_parseDate","phoneService","VALID_AUSTRALIAN_PREFIXES","checkForValidMobileNumber","ParentOnlyDirective","disabled","ngDisabled","parentOnlyDirective","isNotEmpty","trim","REG_EXP","checkForValidPassword","isValidPassword","VALID_PREFIXES","checkForValidPhoneNumber","linkText","className","eventName","visible","toggle","unbindOnTooltipShowing","attributes","control","$validators","isGreaterOrEqualDate","validateGreaterOrEqualDate","parsedMinDate","$validate","isLessOrEqualDate","maxDate","validateLessOrEqualDate","parsedMaxDate","isValidDate","isWeekDay","isoWeekday","run","getAuthenticationCheck","redirectRoutePath","onRouteChangeStartEvent","previous","scrollTo","gaPath","CustomEvent","bubbles","dispatchEvent","raiseGTagEvent","initializedMessage","_ref","mobileAppResume","_detail$path","regex","matchedURL","screen_class","screen_name","content_group","FirebaseAnalytics","logEvent","_detail$path2","page_location","page_title","gtag","gTagEventHandler","SHOW_TOASTS_ON_ERROR","PRIVACYSTATEMENT","QPAOTERMSANDCONDITIONS","QPDVTERMSANDCONDITIONS","STUDENTPHOTOSTERMSANDCONDITIONS","fun","t","thisArg","predicate","kValue","elt","put","_module_exports","___HTML_LOADER_GET_SOURCE_FROM_IMPORT___","___HTML_LOADER_IMPORT_0___","___HTML_LOADER_IMPORT_1___","___HTML_LOADER_IMPORT_2___","___HTML_LOADER_IMPORT_3___"],"sourceRoot":""}