diff --git a/CHANGELOG.md b/CHANGELOG.md index c73ed7a1..ce4933f4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,23 +1,20 @@ # [23.3.0](https://github.com/peerigon/clockodo/compare/v23.2.0...v23.3.0) (2023-11-29) - ### Features -* Add sickNote flag for absence ([#150](https://github.com/peerigon/clockodo/issues/150)) ([1e9f744](https://github.com/peerigon/clockodo/commit/1e9f7442f8219b724f516839949c8618f062c1ec)) +- Add sickNote flag for absence ([#150](https://github.com/peerigon/clockodo/issues/150)) ([1e9f744](https://github.com/peerigon/clockodo/commit/1e9f7442f8219b724f516839949c8618f062c1ec)) # [23.2.0](https://github.com/peerigon/clockodo/compare/v23.1.0...v23.2.0) (2023-11-29) - ### Features -* Add absenceManagersId ([#147](https://github.com/peerigon/clockodo/issues/147)) ([a2fc3f0](https://github.com/peerigon/clockodo/commit/a2fc3f0f99ddd301de31a19e5f80942abe9936ae)) +- Add absenceManagersId ([#147](https://github.com/peerigon/clockodo/issues/147)) ([a2fc3f0](https://github.com/peerigon/clockodo/commit/a2fc3f0f99ddd301de31a19e5f80942abe9936ae)) # [23.1.0](https://github.com/peerigon/clockodo/compare/v23.0.0...v23.1.0) (2023-11-29) - ### Features -* Add surcharge model and api request handlers ([#124](https://github.com/peerigon/clockodo/issues/124)) ([4447bc2](https://github.com/peerigon/clockodo/commit/4447bc201b921d95d8cddfb65124ccb628741305)) +- Add surcharge model and api request handlers ([#124](https://github.com/peerigon/clockodo/issues/124)) ([4447bc2](https://github.com/peerigon/clockodo/commit/4447bc201b921d95d8cddfb65124ccb628741305)) # [23.0.0](https://github.com/peerigon/clockodo/compare/v22.2.0...v23.0.0) (2023-11-21) diff --git a/src/clockodo.test.ts b/src/clockodo.test.ts index 9f6f891d..849db459 100644 --- a/src/clockodo.test.ts +++ b/src/clockodo.test.ts @@ -653,13 +653,25 @@ describe("Clockodo (instance)", () => { }); }); - describe("getOvertimecarry()", () => { - it("correctly builds getOvertimecarry() request", async () => { + describe("getOvertimeCarryovers()", () => { + it("correctly builds getOvertimeCarryovers() request", async () => { const nockScope = nock(CLOCKODO_API) .get("/overtimecarry?users_id=17&year=2028") .reply(200, {}); - await clockodo.getOvertimecarry({ usersId: 17, year: 2028 }); + await clockodo.getOvertimeCarryovers({ usersId: 17, year: 2028 }); + + nockScope.done(); + }); + }); + + describe("getOvertimeReductions()", () => { + it("correctly builds getOvertimeReductions() request", async () => { + const nockScope = nock(CLOCKODO_API) + .get("/v2/overtimeReductions?users_id=17&year=2028") + .reply(200, {}); + + await clockodo.getOvertimeReductions({ usersId: 17, year: 2028 }); nockScope.done(); }); diff --git a/src/clockodo.ts b/src/clockodo.ts index 9e02574f..1105570e 100644 --- a/src/clockodo.ts +++ b/src/clockodo.ts @@ -41,7 +41,8 @@ import { WorkTimeChangeRequestStatus, WorkTimeDay, } from "./models/workTimes.js"; -import { OvertimecarryRow } from "./models/overtimecarry.js"; +import { OvertimeCarryover } from "./models/overtimeCarryover.js"; +import { OvertimeReduction } from "./models/overtimeReduction.js"; import { SurchargeModel } from "./models/surchargeModel.js"; import { HolidaysQuota } from "./models/holidaysQuota.js"; import { HolidaysCarryover } from "./models/holidaysCarryover.js"; @@ -891,9 +892,9 @@ export class Clockodo { ); } - async getOvertimecarry( - params?: Params - ): Promise { + async getOvertimeCarryovers( + params?: Params + ): Promise { return this.api.get("/overtimecarry", params); } @@ -908,6 +909,12 @@ export class Clockodo { ): Promise { return this.api.get("/holidayscarry", params); } + + async getOvertimeReductions( + params?: Params + ): Promise { + return this.api.get("/v2/overtimeReductions", params); + } } export type AbsenceReturnType = { absence: Absence }; @@ -1218,16 +1225,24 @@ export type AddWorkTimesChangeRequestReturnType = replacedChangeRequest: null; }; -export type OvertimecarryRowReturnType = { - overtimecarry: Array; +export type OvertimeCarryoverReturnType = { + overtimecarry: Array; }; -export type OvertimecarryRowParams = { +export type OvertimeCarryoversParams = { /** The user ID by which the overtime carry rows should be filtered */ usersId?: number; /** The year to which the data should be restricted to */ year?: number; }; +export type OvertimeReductionsReturnType = { + overtimeReductions: Array; +}; +export type OvertimeReductionsParams = { + /** The user ID by which the overtime reduced rows should be filtered */ + usersId?: number; +}; + export type HolidaysQuotasReturnType = { holidaysquota: Array; }; diff --git a/src/index.ts b/src/index.ts index 18b673d6..d4f47446 100644 --- a/src/index.ts +++ b/src/index.ts @@ -11,7 +11,8 @@ export * from "./models/holidaysQuota.js"; export * from "./models/lumpsumService.js"; export * from "./models/nonbusinessDay.js"; export * from "./models/nonbusinessGroup.js"; -export * from "./models/overtimecarry.js"; +export * from "./models/overtimeCarryover.js"; +export * from "./models/overtimeReduction.js"; export * from "./models/project.js"; export * from "./models/service.js"; export * from "./models/surchargeModel.js"; diff --git a/src/mocks.ts b/src/mocks.ts index 6c89c36f..06ff30bd 100644 --- a/src/mocks.ts +++ b/src/mocks.ts @@ -9,7 +9,8 @@ export * from "./models/holidaysQuota.mocks.js"; export * from "./models/lumpsumService.mocks.js"; export * from "./models/service.mocks.js"; export * from "./models/nonbusinessDay.mocks.js"; -export * from "./models/overtimecarry.mocks.js"; +export * from "./models/overtimeCarryover.mocks.js"; +export * from "./models/overtimeReduction.mocks.js"; export * from "./models/project.mocks.js"; // export * from "./models/service.mocks.js"; export * from "./models/surchargeModel.mocks.js"; diff --git a/src/models/overtimecarry.mocks.ts b/src/models/overtimeCarryover.mocks.ts similarity index 75% rename from src/models/overtimecarry.mocks.ts rename to src/models/overtimeCarryover.mocks.ts index 9a749844..ea4155a8 100644 --- a/src/models/overtimecarry.mocks.ts +++ b/src/models/overtimeCarryover.mocks.ts @@ -1,5 +1,5 @@ import { faker } from "@faker-js/faker"; -import { OvertimecarryRow } from "./overtimecarry.js"; +import { OvertimeCarryover } from "./overtimeCarryover.js"; type Options = { count?: number; @@ -7,12 +7,12 @@ type Options = { yearMinMax?: [number, number]; }; -export const createOvertimecarryMocks = ({ +export const createOvertimeCarryoverMocks = ({ count = 1, hoursMinMax = [0, 100], yearMinMax = [1900, 2024], }: Options = {}) => { - return Array.from({ length: count }, (): OvertimecarryRow => { + return Array.from({ length: count }, (): OvertimeCarryover => { return { usersId: 0, year: faker.datatype.number({ min: yearMinMax[0], max: yearMinMax[1] }), diff --git a/src/models/overtimecarry.ts b/src/models/overtimeCarryover.ts similarity index 86% rename from src/models/overtimecarry.ts rename to src/models/overtimeCarryover.ts index 7053c693..2ec731e8 100644 --- a/src/models/overtimecarry.ts +++ b/src/models/overtimeCarryover.ts @@ -1,4 +1,4 @@ -export type OvertimecarryRow = { +export type OvertimeCarryover = { /** The related employee's ID */ usersId: number; /** diff --git a/src/models/overtimeReduction.mocks.ts b/src/models/overtimeReduction.mocks.ts new file mode 100644 index 00000000..883ebbf1 --- /dev/null +++ b/src/models/overtimeReduction.mocks.ts @@ -0,0 +1,28 @@ +import { faker } from "@faker-js/faker"; +import { OvertimeReduction } from "./overtimeReduction.js"; +import { isoDateFromDateTime } from "../lib/dateTime.js"; + +type Options = { + count?: number; + hoursMinMax?: [number, number]; +}; + +export const createOvertimeReductionMocks = ({ + count = 1, + hoursMinMax = [0, 100], +}: Options = {}) => { + return Array.from({ length: count }, (_, index): OvertimeReduction => { + return { + id: index, + usersId: 0, + addedByUsersId: 1, + addedAt: isoDateFromDateTime(faker.date.past()), + date: isoDateFromDateTime(faker.date.past()), + note: faker.datatype.boolean() ? faker.lorem.sentences(2) : null, + hours: faker.datatype.number({ + min: hoursMinMax[0], + max: hoursMinMax[1], + }), + }; + }); +}; diff --git a/src/models/overtimeReduction.ts b/src/models/overtimeReduction.ts new file mode 100644 index 00000000..cc2ecd64 --- /dev/null +++ b/src/models/overtimeReduction.ts @@ -0,0 +1,17 @@ +import { IsoDate } from "./dateTime.js"; + +export type OvertimeReduction = { + /** The ID of the overtime reduction */ + id: number; + /** The related employee's ID */ + usersId: number; + /** The user who added the overtime reduction */ + addedByUsersId: number; + /** The date when the overtime reduction was added */ + addedAt: IsoDate; + /** The date when the overtime reduction was taken */ + date: IsoDate; + /** Number of hours */ + hours: number; + note: string | null; +};