diff --git a/libs/api-hjarntorget/lib/apiHjarntorget.ts b/libs/api-hjarntorget/lib/apiHjarntorget.ts index 8087c890e..e3a6735b6 100644 --- a/libs/api-hjarntorget/lib/apiHjarntorget.ts +++ b/libs/api-hjarntorget/lib/apiHjarntorget.ts @@ -50,6 +50,7 @@ import { shibbolethLoginUrlBase, verifyUrlBase, wallMessagesUrl, + abscenseRegistrationUrl } from './routes' import parse from '@skolplattformen/curriculum' @@ -591,6 +592,25 @@ export class ApiHjarntorget extends EventEmitter implements Api { return statusChecker } + public async registerAbscense(child: EtjanstChild, startDate: DateTime, endDate: DateTime): Promise { + const body = { + attendeeId: child.id, + startDate: startDate.toFormat("yyyy-MM-dd HH:mm"), + endDate: endDate.toFormat("yyyy-MM-dd HH:mm"), + statusId: 27433608, + _submit: 'Save' + } + + await this.fetch('register-abscense', abscenseRegistrationUrl, { + method: 'POST', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + 'Referer': "https://hjarntorget.goteborg.se/attendanceParentRegisterAbsence.do?attendeeId=" + child.id, + }, + body: new URLSearchParams(body).toString(), + }) + } + private async fakeMode(): Promise { this.isFake = true @@ -603,4 +623,5 @@ export class ApiHjarntorget extends EventEmitter implements Api { emitter.token = 'fake' return emitter } + } diff --git a/libs/api-hjarntorget/lib/features.ts b/libs/api-hjarntorget/lib/features.ts index 681f2f4b9..1a14ef95a 100644 --- a/libs/api-hjarntorget/lib/features.ts +++ b/libs/api-hjarntorget/lib/features.ts @@ -4,4 +4,6 @@ export const features: Features = { LOGIN_BANK_ID_SAME_DEVICE_WITHOUT_ID: false, FOOD_MENU: false, CLASS_LIST: false, + ABSCENE_REGISTRATION_SMS: false, + ABSCENE_REGISTRATION_FORM: true } diff --git a/libs/api-hjarntorget/lib/index.ts b/libs/api-hjarntorget/lib/index.ts index c00675f89..b0bc4a929 100644 --- a/libs/api-hjarntorget/lib/index.ts +++ b/libs/api-hjarntorget/lib/index.ts @@ -19,7 +19,7 @@ const init = ( const cookieManager = ((cookieManagerImpl as RNCookieManager).get) ? wrapReactNativeCookieManager(cookieManagerImpl as RNCookieManager) : wrapToughCookie(cookieManagerImpl as ToughCookieJar) - return new ApiHjarntorget(fetchImpl as any, cookieManager, options) + return new ApiHjarntorget(fetchImpl, cookieManager, options) } export default init diff --git a/libs/api-hjarntorget/lib/routes.ts b/libs/api-hjarntorget/lib/routes.ts index fbedfb120..673e91040 100644 --- a/libs/api-hjarntorget/lib/routes.ts +++ b/libs/api-hjarntorget/lib/routes.ts @@ -15,6 +15,7 @@ export const wallMessagesUrl = 'https://hjarntorget.goteborg.se/api/wall/events? export const beginLoginUrl = 'https://hjarntorget.goteborg.se' export const calendarsUrl = 'https://hjarntorget.goteborg.se/pp/system/calendar/cal_events.jsp' export const calendarEventUrl = (calendarId: string, startDate: string, endDate: string) => `${calendarsUrl}?order_by=start_date&show_cal_ids=${calendarId}&mode=separate&filter_start_date=${startDate}&filter_end_date=${endDate}&search_for=` +export const abscenseRegistrationUrl = 'https://hjarntorget.goteborg.se/attendanceParentSubmitAbsence.do' export const shibbolethLoginUrlBase = (beginLoginRedirectUrl: string) => { const returnUrlStart = beginLoginRedirectUrl.indexOf('return=') + 'return='.length diff --git a/libs/api-skolplattformen/lib/api.ts b/libs/api-skolplattformen/lib/api.ts index c45b86594..7761d7177 100644 --- a/libs/api-skolplattformen/lib/api.ts +++ b/libs/api-skolplattformen/lib/api.ts @@ -81,6 +81,9 @@ export class ApiSkolplattformen extends EventEmitter implements Api { this.cookieManager = cookieManager this.headers = {} } + registerAbscense(child: EtjanstChild, startDate: DateTime, endDate: DateTime): Promise { + throw new Error('Method not implemented.') + } public getPersonalNumber(): string | undefined { return this.personalNumber diff --git a/libs/api-skolplattformen/lib/features.ts b/libs/api-skolplattformen/lib/features.ts index 0e9dfce49..017c3b89f 100644 --- a/libs/api-skolplattformen/lib/features.ts +++ b/libs/api-skolplattformen/lib/features.ts @@ -4,4 +4,6 @@ export const features: Features = { LOGIN_BANK_ID_SAME_DEVICE_WITHOUT_ID: true, FOOD_MENU: true, CLASS_LIST: true, + ABSCENE_REGISTRATION_SMS: true, + ABSCENE_REGISTRATION_FORM: false } diff --git a/libs/api/lib/api.ts b/libs/api/lib/api.ts index 84f4f2ba3..50f3264a1 100644 --- a/libs/api/lib/api.ts +++ b/libs/api/lib/api.ts @@ -37,5 +37,6 @@ export interface Api extends EventEmitter { getSchoolContacts(child: EtjanstChild): Promise getSkola24Children(): Promise getTimetable(child: Skola24Child, week: number, year: number, lang: Language): Promise + registerAbscense(child: EtjanstChild, startDate: DateTime, endDate: DateTime): Promise logout(): Promise } diff --git a/libs/api/lib/features.ts b/libs/api/lib/features.ts index 752066748..7791ad656 100644 --- a/libs/api/lib/features.ts +++ b/libs/api/lib/features.ts @@ -1,7 +1,9 @@ export interface Features { LOGIN_BANK_ID_SAME_DEVICE_WITHOUT_ID: boolean FOOD_MENU: boolean, - CLASS_LIST: boolean + CLASS_LIST: boolean, + ABSCENE_REGISTRATION_SMS: boolean, + ABSCENE_REGISTRATION_FORM: boolean, } export type FeatureType = keyof Features