From 1bfc773d9e3c5a1aa2c773b6afb3303a79dba2ac Mon Sep 17 00:00:00 2001 From: Eddie Yu Date: Wed, 22 Apr 2026 08:58:18 +0800 Subject: [PATCH 1/2] Add Timecard entry call --- famis_client.ts | 17 ++++++++++++++++- package.json | 2 +- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/famis_client.ts b/famis_client.ts index 64af1f6..e426c07 100644 --- a/famis_client.ts +++ b/famis_client.ts @@ -1369,9 +1369,24 @@ export class FamisClient { const entity = `users(${userId})/ApproveTimeCard`; return this.createObject(postRequest, entity); } + //#endregion - //LaborEntryApprovalRequest + //Region Timecard Entries + async getTimecardEntries(context: QueryContext): Promise> { + return this.getAll(context, 'timecardentries'); + } + async createTimecardEntry(timecardEntry: PostLaborEntryRequest): Promise { + return this.createObject(timecardEntry, 'timecardentries'); + } + + async updateTimecardEntry( + laborId: string, + patchRequest: PostLaborEntryRequest + ): Promise { + return this.patchObject(patchRequest, 'timecardentries', laborId); + } + //#endregion //#region materialcosts diff --git a/package.json b/package.json index 7b73e6e..7aaa1a7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "facility360", - "version": "1.1.1", + "version": "1.1.2", "description": "A Node based 360Facility client SDK", "main": "dist/index.js", "scripts": { From 01cdcc9db4fa0e0c85f677feb30c17ae334f6263 Mon Sep 17 00:00:00 2001 From: Eddie Yu Date: Thu, 30 Apr 2026 15:44:54 +0800 Subject: [PATCH 2/2] Add Timecard Entry calls --- famis_client.ts | 16 +++++++++++----- model/famis_models.ts | 18 ++++++++++++++++++ model/request_models.ts | 20 ++++++++++++++++++++ 3 files changed, 49 insertions(+), 5 deletions(-) diff --git a/famis_client.ts b/famis_client.ts index e426c07..72f59b0 100644 --- a/famis_client.ts +++ b/famis_client.ts @@ -105,6 +105,7 @@ import { SpaceSubCategory, State, SubSpace, + TimeCardConfiguration, TimeZone, TrackingCode, Udf, UdfField, @@ -149,6 +150,7 @@ import { PostLaborEntryRequest, PostMaterialCostRequest, PostOtherCostRequest, + PostTimecardEntryRequest, PostUdfForWoRequest, PostWorkOrderRequest, PriceAdjustmentTransactionRequest, @@ -1376,17 +1378,21 @@ export class FamisClient { return this.getAll(context, 'timecardentries'); } - async createTimecardEntry(timecardEntry: PostLaborEntryRequest): Promise { - return this.createObject(timecardEntry, 'timecardentries'); + async createTimecardEntry(timecardEntry: PostTimecardEntryRequest): Promise { + return this.createObject(timecardEntry, 'timecardentries'); } async updateTimecardEntry( laborId: string, - patchRequest: PostLaborEntryRequest + patchRequest: PostTimecardEntryRequest ): Promise { - return this.patchObject(patchRequest, 'timecardentries', laborId); + return this.patchObject(patchRequest, 'timecardentries', laborId); } - + + async getTimecardConfiguration(context: QueryContext): Promise> { + return this.getAll(context, 'timecardconfigurations'); + } + //#endregion //#region materialcosts diff --git a/model/famis_models.ts b/model/famis_models.ts index 100e5fb..ef51d57 100644 --- a/model/famis_models.ts +++ b/model/famis_models.ts @@ -3407,3 +3407,21 @@ export interface TimeZone { Default: boolean; } +export interface TimeCardConfiguration { + Id: number; + TeTimecardCostCenterFlag: boolean; + TeTimecardAccountsFlag: boolean; + TeTimecardWoactivityFlag: boolean; + TeTimecardValidateWoFlag: boolean; + TeTimecardStartEndTimeFlag: boolean; + TeTimecardDtHoursFlag: boolean; + TeTimecardRegularHoursLimit: number; + TeTimecardOtHoursLimit: number; + TeTimecardDtHoursLimit: number; + TeManagerSecurityFlag: boolean; + TransactionId: number; + TeTimecardLrFlag: number; + ApprovalNotificationsFlag: boolean; + NotifyEmployeeOnNoApprover: boolean | null; +} + diff --git a/model/request_models.ts b/model/request_models.ts index 731070e..07d3620 100644 --- a/model/request_models.ts +++ b/model/request_models.ts @@ -810,6 +810,26 @@ export interface PostLaborEntryRequest { LaborReasonId?: number; } +export interface PostTimecardEntryRequest { + TotalHours?: number; + TimeType?: string; + ActivityId?: number; + ActivityExternalId?: string; + Comments?: string; + PropertyId?: number; + UserId?: number; + UserExternalId?: string; + EntryDate?: Date; + CrewId?: number; + CrewExternalId?: string; + StartTime?: Date; + EndTime?: Date; + PositionId?: number; + PositionExternalId?: string; + LaborReasonId?: number; +} + + export interface LaborEntryApprovalRequest { LaborEntryIds: number[]; LaborEntryComment?: string;