Skip to content

Commit 7242adb

Browse files
committed
timesheetMaxAgeDays filter
1 parent a2e0dbc commit 7242adb

7 files changed

Lines changed: 64 additions & 15 deletions

File tree

eslint.config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ export const config = defineConfig(configCityssm, {
1111
...cspellWords,
1212
'timesheet',
1313
'worktech',
14+
'dateadd',
1415
'rtrim',
1516
// Column name abbreviations
1617
'accomp',

eslint.config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ export const config = defineConfig(configCityssm, {
1515
'timesheet',
1616
'worktech',
1717

18+
'dateadd',
1819
'rtrim',
1920

2021
// Column name abbreviations

queries/employees/getTimesheetBatchEntries.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ export declare const getTimesheetBatchEntriesLimit = 2000;
55
export interface GetTimesheetBatchEntriesFilters {
66
employeeNumber?: string;
77
timesheetDate?: DateString;
8+
timesheetMaxAgeDays?: number;
89
activityId?: string;
910
jobId?: string;
1011
workOrderNumber?: string;

queries/employees/getTimesheetBatchEntries.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ export async function getTimesheetBatchEntries(mssqlConfig, filters) {
4141
if (filters.timesheetDate !== undefined) {
4242
sql += ' AND [DateTime] = @timesheetDate';
4343
}
44+
if (filters.timesheetMaxAgeDays !== undefined) {
45+
sql += ' AND [DateTime] >= DATEADD(day, -1 * @timesheetMaxAgeDays, CAST(GETDATE() AS date))';
46+
}
4447
if (filters.jobId !== undefined) {
4548
sql += ' AND [ExJob_ID] = @jobId';
4649
}
@@ -57,6 +60,7 @@ export async function getTimesheetBatchEntries(mssqlConfig, filters) {
5760
const result = (await request
5861
.input('employeeNumber', filters.employeeNumber)
5962
.input('timesheetDate', filters.timesheetDate)
63+
.input('timesheetMaxAgeDays', filters.timesheetMaxAgeDays)
6064
.input('jobId', filters.jobId)
6165
.input('activityId', filters.activityId)
6266
.input('workOrderNumber', filters.workOrderNumber)

queries/employees/getTimesheetBatchEntries.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ export const getTimesheetBatchEntriesLimit = 2000
77

88
export interface GetTimesheetBatchEntriesFilters {
99
employeeNumber?: string
10+
1011
timesheetDate?: DateString
12+
timesheetMaxAgeDays?: number
1113

1214
activityId?: string
1315
jobId?: string
@@ -56,6 +58,7 @@ export async function getTimesheetBatchEntries(
5658
where transType = 'Time Sheets'
5759
and type = 'Employee'
5860
`
61+
5962
if (filters.employeeNumber !== undefined) {
6063
sql += ' AND [Item_ID] = @employeeNumber'
6164
}
@@ -64,6 +67,10 @@ export async function getTimesheetBatchEntries(
6467
sql += ' AND [DateTime] = @timesheetDate'
6568
}
6669

70+
if (filters.timesheetMaxAgeDays !== undefined) {
71+
sql += ' AND [DateTime] >= DATEADD(day, -1 * @timesheetMaxAgeDays, CAST(GETDATE() AS date))'
72+
}
73+
6774
if (filters.jobId !== undefined) {
6875
sql += ' AND [ExJob_ID] = @jobId'
6976
}
@@ -85,6 +92,7 @@ export async function getTimesheetBatchEntries(
8592
const result = (await request
8693
.input('employeeNumber', filters.employeeNumber)
8794
.input('timesheetDate', filters.timesheetDate)
95+
.input('timesheetMaxAgeDays', filters.timesheetMaxAgeDays)
8896
.input('jobId', filters.jobId)
8997
.input('activityId', filters.activityId)
9098
.input('workOrderNumber', filters.workOrderNumber)

test/employees.test.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,20 @@ await describe('queries/employees', async () => {
6060
assert.strictEqual(timesheetBatchEntry.timesheetDateString, timesheetDateString);
6161
}
6262
});
63+
await it('Retrieves timesheet batch entries by max age days', async () => {
64+
const timesheetMaxAgeDays = 90;
65+
const timesheetBatchEntries = await getTimesheetBatchEntries(mssqlConfig, {
66+
timesheetMaxAgeDays
67+
});
68+
assert.ok(timesheetBatchEntries.length > 0);
69+
const currentDate = new Date();
70+
for (const timesheetBatchEntry of timesheetBatchEntries) {
71+
const timesheetDate = timesheetBatchEntry.timesheetDate;
72+
const ageInDays = Math.floor((currentDate.getTime() - timesheetDate.getTime()) /
73+
(1000 * 60 * 60 * 24));
74+
assert.ok(ageInDays <= timesheetMaxAgeDays);
75+
}
76+
});
6377
await it('Retrieves timesheet batch entries by job ID', async () => {
6478
const timesheetBatchEntries = await getTimesheetBatchEntries(mssqlConfig, {
6579
jobId: validJobId

test/employees.test.ts

Lines changed: 35 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,12 @@ import { getEmployeePayCodes } from '../queries/employees/getEmployeePayCodes.js
1212
import { getTimeCodes } from '../queries/employees/getTimeCodes.js'
1313
import { getTimesheetBatchEntries } from '../queries/employees/getTimesheetBatchEntries.js'
1414

15-
import { mssqlConfig, validActivityId, validEmployeeNumber, validJobId } from './config.js'
15+
import {
16+
mssqlConfig,
17+
validActivityId,
18+
validEmployeeNumber,
19+
validJobId
20+
} from './config.js'
1621

1722
Debug.enable(DEBUG_ENABLE_NAMESPACES)
1823

@@ -72,10 +77,7 @@ await describe('queries/employees', async () => {
7277
validEmployeeNumber
7378
)
7479

75-
assert.strictEqual(
76-
timesheetBatchEntry.timesheetHours,
77-
timesheetHours
78-
)
80+
assert.strictEqual(timesheetBatchEntry.timesheetHours, timesheetHours)
7981
}
8082
})
8183

@@ -104,27 +106,48 @@ await describe('queries/employees', async () => {
104106
}
105107
})
106108

107-
await it('Retrieves timesheet batch entries by job ID', async () => {
109+
await it('Retrieves timesheet batch entries by max age days', async () => {
110+
const timesheetMaxAgeDays = 90
108111

109112
const timesheetBatchEntries = await getTimesheetBatchEntries(
110113
mssqlConfig,
111114
{
112-
jobId: validJobId
115+
timesheetMaxAgeDays
113116
}
114117
)
115118

116119
assert.ok(timesheetBatchEntries.length > 0)
117120

121+
const currentDate = new Date()
122+
118123
for (const timesheetBatchEntry of timesheetBatchEntries) {
119-
assert.strictEqual(
120-
timesheetBatchEntry.jobId,
121-
validJobId
124+
const timesheetDate = timesheetBatchEntry.timesheetDate as Date
125+
126+
const ageInDays = Math.floor(
127+
(currentDate.getTime() - timesheetDate.getTime()) /
128+
(1000 * 60 * 60 * 24)
122129
)
130+
131+
assert.ok(ageInDays <= timesheetMaxAgeDays)
123132
}
124133
})
125134

126-
await it('Retrieves timesheet batch entries by activity ID', async () => {
135+
await it('Retrieves timesheet batch entries by job ID', async () => {
136+
const timesheetBatchEntries = await getTimesheetBatchEntries(
137+
mssqlConfig,
138+
{
139+
jobId: validJobId
140+
}
141+
)
127142

143+
assert.ok(timesheetBatchEntries.length > 0)
144+
145+
for (const timesheetBatchEntry of timesheetBatchEntries) {
146+
assert.strictEqual(timesheetBatchEntry.jobId, validJobId)
147+
}
148+
})
149+
150+
await it('Retrieves timesheet batch entries by activity ID', async () => {
128151
const timesheetBatchEntries = await getTimesheetBatchEntries(
129152
mssqlConfig,
130153
{
@@ -135,10 +158,7 @@ await describe('queries/employees', async () => {
135158
assert.ok(timesheetBatchEntries.length > 0)
136159

137160
for (const timesheetBatchEntry of timesheetBatchEntries) {
138-
assert.strictEqual(
139-
timesheetBatchEntry.activityId,
140-
validActivityId
141-
)
161+
assert.strictEqual(timesheetBatchEntry.activityId, validActivityId)
142162
}
143163
})
144164
})

0 commit comments

Comments
 (0)