@hed-hog/operations 0.0.305 → 0.0.309
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/controllers/operations-approvals.controller.d.ts +114 -1
- package/dist/controllers/operations-approvals.controller.d.ts.map +1 -1
- package/dist/controllers/operations-approvals.controller.js +16 -3
- package/dist/controllers/operations-approvals.controller.js.map +1 -1
- package/dist/controllers/operations-collaborators.controller.d.ts +16 -1
- package/dist/controllers/operations-collaborators.controller.d.ts.map +1 -1
- package/dist/controllers/operations-collaborators.controller.js +16 -3
- package/dist/controllers/operations-collaborators.controller.js.map +1 -1
- package/dist/controllers/operations-contracts.controller.d.ts +14 -453
- package/dist/controllers/operations-contracts.controller.d.ts.map +1 -1
- package/dist/controllers/operations-contracts.controller.js +11 -112
- package/dist/controllers/operations-contracts.controller.js.map +1 -1
- package/dist/controllers/operations-org-structure.controller.d.ts +65 -2
- package/dist/controllers/operations-org-structure.controller.d.ts.map +1 -1
- package/dist/controllers/operations-org-structure.controller.js +18 -5
- package/dist/controllers/operations-org-structure.controller.js.map +1 -1
- package/dist/controllers/operations-projects.controller.d.ts +28 -4
- package/dist/controllers/operations-projects.controller.d.ts.map +1 -1
- package/dist/controllers/operations-projects.controller.js +17 -5
- package/dist/controllers/operations-projects.controller.js.map +1 -1
- package/dist/controllers/operations-timesheets.controller.d.ts +52 -4
- package/dist/controllers/operations-timesheets.controller.d.ts.map +1 -1
- package/dist/controllers/operations-timesheets.controller.js +28 -11
- package/dist/controllers/operations-timesheets.controller.js.map +1 -1
- package/dist/dto/list-approvals.dto.d.ts +6 -0
- package/dist/dto/list-approvals.dto.d.ts.map +1 -0
- package/dist/dto/list-approvals.dto.js +28 -0
- package/dist/dto/list-approvals.dto.js.map +1 -0
- package/dist/dto/list-collaborator-types.dto.d.ts +3 -1
- package/dist/dto/list-collaborator-types.dto.d.ts.map +1 -1
- package/dist/dto/list-collaborator-types.dto.js +7 -1
- package/dist/dto/list-collaborator-types.dto.js.map +1 -1
- package/dist/dto/list-collaborators.dto.d.ts +1 -0
- package/dist/dto/list-collaborators.dto.d.ts.map +1 -1
- package/dist/dto/list-collaborators.dto.js +5 -0
- package/dist/dto/list-collaborators.dto.js.map +1 -1
- package/dist/dto/list-contracts.dto.d.ts +8 -0
- package/dist/dto/list-contracts.dto.d.ts.map +1 -0
- package/dist/dto/list-contracts.dto.js +38 -0
- package/dist/dto/list-contracts.dto.js.map +1 -0
- package/dist/dto/list-departments.dto.d.ts +5 -0
- package/dist/dto/list-departments.dto.d.ts.map +1 -0
- package/dist/dto/list-departments.dto.js +23 -0
- package/dist/dto/list-departments.dto.js.map +1 -0
- package/dist/dto/list-projects.dto.d.ts +5 -0
- package/dist/dto/list-projects.dto.d.ts.map +1 -0
- package/dist/dto/list-projects.dto.js +23 -0
- package/dist/dto/list-projects.dto.js.map +1 -0
- package/dist/dto/list-schedule-adjustments.dto.d.ts +5 -0
- package/dist/dto/list-schedule-adjustments.dto.d.ts.map +1 -0
- package/dist/dto/list-schedule-adjustments.dto.js +23 -0
- package/dist/dto/list-schedule-adjustments.dto.js.map +1 -0
- package/dist/dto/list-time-off-requests.dto.d.ts +5 -0
- package/dist/dto/list-time-off-requests.dto.d.ts.map +1 -0
- package/dist/dto/list-time-off-requests.dto.js +23 -0
- package/dist/dto/list-time-off-requests.dto.js.map +1 -0
- package/dist/dto/list-timesheets.dto.d.ts +5 -0
- package/dist/dto/list-timesheets.dto.d.ts.map +1 -0
- package/dist/dto/list-timesheets.dto.js +23 -0
- package/dist/dto/list-timesheets.dto.js.map +1 -0
- package/dist/dto/reorder-collaborator-types.dto.d.ts +4 -0
- package/dist/dto/reorder-collaborator-types.dto.d.ts.map +1 -0
- package/dist/dto/reorder-collaborator-types.dto.js +25 -0
- package/dist/dto/reorder-collaborator-types.dto.js.map +1 -0
- package/dist/dto/update-collaborator-type.dto.d.ts +3 -1
- package/dist/dto/update-collaborator-type.dto.d.ts.map +1 -1
- package/dist/dto/update-collaborator-type.dto.js +2 -1
- package/dist/dto/update-collaborator-type.dto.js.map +1 -1
- package/dist/operations.service.d.ts +362 -271
- package/dist/operations.service.d.ts.map +1 -1
- package/dist/operations.service.js +1195 -1098
- package/dist/operations.service.js.map +1 -1
- package/dist/operations.service.spec.js +73 -22
- package/dist/operations.service.spec.js.map +1 -1
- package/hedhog/data/menu.yaml +19 -55
- package/hedhog/data/operations_collaborator_type.yaml +76 -76
- package/hedhog/data/route.yaml +52 -70
- package/hedhog/frontend/app/_components/async-options-combobox.tsx.ejs +5 -3
- package/hedhog/frontend/app/_components/collaborator-form-screen.tsx.ejs +8 -1
- package/hedhog/frontend/app/_components/collaborator-select-with-create.tsx.ejs +15 -10
- package/hedhog/frontend/app/_components/contract-details-screen.tsx.ejs +108 -213
- package/hedhog/frontend/app/_components/contract-form-screen.tsx.ejs +251 -2039
- package/hedhog/frontend/app/_components/project-details-screen.tsx.ejs +167 -60
- package/hedhog/frontend/app/_components/project-form-screen.tsx.ejs +70 -301
- package/hedhog/frontend/app/_components/system-user-select-with-create.tsx.ejs +102 -51
- package/hedhog/frontend/app/_components/timesheet-task-create-sheet.tsx.ejs +1 -0
- package/hedhog/frontend/app/_lib/types.ts.ejs +19 -24
- package/hedhog/frontend/app/_lib/utils/format.ts.ejs +14 -9
- package/hedhog/frontend/app/approvals/page.tsx.ejs +843 -151
- package/hedhog/frontend/app/collaborator-types/page.tsx.ejs +457 -154
- package/hedhog/frontend/app/collaborators/page.tsx.ejs +118 -49
- package/hedhog/frontend/app/contracts/[id]/page.tsx.ejs +2 -2
- package/hedhog/frontend/app/contracts/page.tsx.ejs +215 -617
- package/hedhog/frontend/app/departments/page.tsx.ejs +257 -113
- package/hedhog/frontend/app/projects/page.tsx.ejs +90 -51
- package/hedhog/frontend/app/schedule-adjustments/page.tsx.ejs +546 -118
- package/hedhog/frontend/app/time-off/page.tsx.ejs +400 -123
- package/hedhog/frontend/app/timesheets/page.tsx.ejs +647 -342
- package/hedhog/frontend/messages/en.json +148 -14
- package/hedhog/frontend/messages/pt.json +199 -56
- package/hedhog/table/operations_collaborator.yaml +18 -18
- package/hedhog/table/operations_collaborator_equity_participation.yaml +43 -43
- package/hedhog/table/operations_collaborator_type.yaml +33 -33
- package/hedhog/table/operations_contract.yaml +0 -9
- package/hedhog/table/operations_contract_document.yaml +33 -33
- package/package.json +4 -4
- package/src/controllers/operations-approvals.controller.ts +9 -3
- package/src/controllers/operations-collaborators.controller.ts +15 -2
- package/src/controllers/operations-contracts.controller.ts +8 -92
- package/src/controllers/operations-org-structure.controller.ts +17 -4
- package/src/controllers/operations-projects.controller.ts +10 -4
- package/src/controllers/operations-timesheets.controller.ts +30 -8
- package/src/dto/create-collaborator-type.dto.ts +43 -43
- package/src/dto/create-collaborator.dto.ts +223 -223
- package/src/dto/list-approvals.dto.ts +12 -0
- package/src/dto/list-collaborator-types.dto.ts +20 -15
- package/src/dto/list-collaborators.dto.ts +34 -30
- package/src/dto/list-contracts.dto.ts +20 -0
- package/src/dto/list-departments.dto.ts +8 -0
- package/src/dto/list-projects.dto.ts +8 -0
- package/src/dto/list-schedule-adjustments.dto.ts +8 -0
- package/src/dto/list-time-off-requests.dto.ts +8 -0
- package/src/dto/list-timesheets.dto.ts +8 -0
- package/src/dto/reorder-collaborator-types.dto.ts +10 -0
- package/src/dto/update-collaborator-type.dto.ts +4 -3
- package/src/dto/update-collaborator.dto.ts +3 -3
- package/src/operations.service.spec.ts +96 -30
- package/src/operations.service.ts +1738 -1777
- package/hedhog/frontend/app/_components/contract-creation-wizard.tsx.ejs +0 -631
- package/hedhog/frontend/app/_components/contract-template-form-screen.tsx.ejs +0 -526
- package/hedhog/frontend/app/_components/contract-template-select-with-create.tsx.ejs +0 -247
- package/hedhog/frontend/app/_components/contract-wizard-sheet.tsx.ejs +0 -3520
- package/hedhog/frontend/app/contracts/templates/page.tsx.ejs +0 -380
- package/hedhog/frontend/app/team/page.tsx.ejs +0 -352
- package/hedhog/table/operations_contract_financial_term.yaml +0 -40
- package/hedhog/table/operations_contract_revision.yaml +0 -38
- package/hedhog/table/operations_contract_signature.yaml +0 -38
- package/hedhog/table/operations_contract_template.yaml +0 -58
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { PartialType } from '@nestjs/mapped-types';
|
|
2
|
+
import { CreateCollaboratorTypeDto } from './create-collaborator-type.dto';
|
|
3
|
+
|
|
4
|
+
export class UpdateCollaboratorTypeDto extends PartialType(CreateCollaboratorTypeDto) {}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { CreateCollaboratorDto } from './create-collaborator.dto';
|
|
2
|
-
|
|
3
|
-
export class UpdateCollaboratorDto extends CreateCollaboratorDto {}
|
|
1
|
+
import { CreateCollaboratorDto } from './create-collaborator.dto';
|
|
2
|
+
|
|
3
|
+
export class UpdateCollaboratorDto extends CreateCollaboratorDto {}
|
|
@@ -29,10 +29,6 @@ describe('OperationsService proposal integration', () => {
|
|
|
29
29
|
|
|
30
30
|
jest.spyOn(service as any, 'generateContractCode').mockResolvedValue('CTR-001');
|
|
31
31
|
jest.spyOn(service as any, 'replaceContractParties').mockResolvedValue(undefined);
|
|
32
|
-
jest
|
|
33
|
-
.spyOn(service as any, 'replaceContractFinancialTerms')
|
|
34
|
-
.mockResolvedValue(undefined);
|
|
35
|
-
jest.spyOn(service as any, 'replaceContractRevisions').mockResolvedValue(undefined);
|
|
36
32
|
jest.spyOn(service as any, 'insertContractHistory').mockResolvedValue(undefined);
|
|
37
33
|
});
|
|
38
34
|
|
|
@@ -156,32 +152,6 @@ describe('OperationsService proposal integration', () => {
|
|
|
156
152
|
}),
|
|
157
153
|
],
|
|
158
154
|
);
|
|
159
|
-
expect((service as any).replaceContractFinancialTerms).toHaveBeenCalledWith(
|
|
160
|
-
tx,
|
|
161
|
-
77,
|
|
162
|
-
expect.arrayContaining([
|
|
163
|
-
expect.objectContaining({
|
|
164
|
-
label: 'Monthly retainer',
|
|
165
|
-
amount: 1000,
|
|
166
|
-
recurrence: 'monthly',
|
|
167
|
-
}),
|
|
168
|
-
expect.objectContaining({
|
|
169
|
-
label: 'Setup fee',
|
|
170
|
-
amount: 234,
|
|
171
|
-
recurrence: 'one_time',
|
|
172
|
-
}),
|
|
173
|
-
]),
|
|
174
|
-
);
|
|
175
|
-
expect((service as any).replaceContractRevisions).toHaveBeenCalledWith(
|
|
176
|
-
tx,
|
|
177
|
-
77,
|
|
178
|
-
[
|
|
179
|
-
expect.objectContaining({
|
|
180
|
-
title: 'Revision 1',
|
|
181
|
-
status: 'draft',
|
|
182
|
-
}),
|
|
183
|
-
],
|
|
184
|
-
);
|
|
185
155
|
expect((service as any).insertContractHistory).toHaveBeenCalledWith(
|
|
186
156
|
tx,
|
|
187
157
|
77,
|
|
@@ -472,6 +442,102 @@ describe('OperationsService quick-entry timesheets', () => {
|
|
|
472
442
|
expect((service as any).refreshTimesheetTotal).toHaveBeenCalledWith(tx, 55);
|
|
473
443
|
});
|
|
474
444
|
|
|
445
|
+
it('updates quick entries and moves them to the correct weekly timesheet', async () => {
|
|
446
|
+
const tx = {
|
|
447
|
+
$executeRawUnsafe: jest.fn().mockResolvedValue(undefined),
|
|
448
|
+
$queryRawUnsafe: jest.fn().mockResolvedValue([]),
|
|
449
|
+
};
|
|
450
|
+
|
|
451
|
+
(service as any).prisma.$transaction.mockImplementation(
|
|
452
|
+
async (callback: (client: unknown) => unknown) => callback(tx),
|
|
453
|
+
);
|
|
454
|
+
|
|
455
|
+
jest
|
|
456
|
+
.spyOn(service as any, 'getTimesheetEntryByIdForActor')
|
|
457
|
+
.mockResolvedValueOnce({
|
|
458
|
+
id: 93,
|
|
459
|
+
timesheetId: 55,
|
|
460
|
+
collaboratorId: 7,
|
|
461
|
+
projectId: 11,
|
|
462
|
+
projectAssignmentId: 33,
|
|
463
|
+
taskId: 44,
|
|
464
|
+
status: 'draft',
|
|
465
|
+
weekStartDate: '2026-04-06',
|
|
466
|
+
weekEndDate: '2026-04-12',
|
|
467
|
+
workDate: '2026-04-09',
|
|
468
|
+
hours: 1,
|
|
469
|
+
durationMinutes: 60,
|
|
470
|
+
})
|
|
471
|
+
.mockResolvedValueOnce({
|
|
472
|
+
id: 93,
|
|
473
|
+
timesheetId: 77,
|
|
474
|
+
collaboratorId: 7,
|
|
475
|
+
projectId: 12,
|
|
476
|
+
projectAssignmentId: 34,
|
|
477
|
+
taskId: 45,
|
|
478
|
+
status: 'draft',
|
|
479
|
+
weekStartDate: '2026-04-13',
|
|
480
|
+
weekEndDate: '2026-04-19',
|
|
481
|
+
workDate: '2026-04-14',
|
|
482
|
+
hours: 2,
|
|
483
|
+
durationMinutes: 120,
|
|
484
|
+
taskName: 'Review backlog',
|
|
485
|
+
});
|
|
486
|
+
jest.spyOn(service as any, 'resolveOwnedProjectAssignment').mockResolvedValue({
|
|
487
|
+
id: 34,
|
|
488
|
+
projectId: 12,
|
|
489
|
+
projectName: 'Project Boreal',
|
|
490
|
+
projectCode: 'OPS-12',
|
|
491
|
+
roleLabel: 'Engineer',
|
|
492
|
+
});
|
|
493
|
+
jest.spyOn(service as any, 'getOwnedTaskRecord').mockResolvedValue({
|
|
494
|
+
id: 45,
|
|
495
|
+
name: 'Review backlog',
|
|
496
|
+
projectAssignmentId: 34,
|
|
497
|
+
projectId: 12,
|
|
498
|
+
projectName: 'Project Boreal',
|
|
499
|
+
projectCode: 'OPS-12',
|
|
500
|
+
});
|
|
501
|
+
jest.spyOn(service as any, 'getOrCreateTimesheetForWorkDate').mockResolvedValue(77);
|
|
502
|
+
jest.spyOn(service as any, 'refreshTimesheetTotal').mockResolvedValue(undefined);
|
|
503
|
+
jest.spyOn(service as any, 'cleanupEmptyEditableTimesheet').mockResolvedValue(undefined);
|
|
504
|
+
|
|
505
|
+
const result = await service.updateTimesheetEntry(15, 93, {
|
|
506
|
+
projectId: 12,
|
|
507
|
+
projectAssignmentId: 34,
|
|
508
|
+
taskId: 45,
|
|
509
|
+
workDate: '2026-04-14',
|
|
510
|
+
duration: 2,
|
|
511
|
+
unit: 'hours',
|
|
512
|
+
description: 'Backlog refinement',
|
|
513
|
+
} as any);
|
|
514
|
+
|
|
515
|
+
expect(result).toEqual(
|
|
516
|
+
expect.objectContaining({
|
|
517
|
+
id: 93,
|
|
518
|
+
timesheetId: 77,
|
|
519
|
+
}),
|
|
520
|
+
);
|
|
521
|
+
expect(tx.$executeRawUnsafe).toHaveBeenCalledWith(
|
|
522
|
+
expect.stringContaining('UPDATE operations_timesheet_entry'),
|
|
523
|
+
77,
|
|
524
|
+
34,
|
|
525
|
+
45,
|
|
526
|
+
'Review backlog',
|
|
527
|
+
'2026-04-14',
|
|
528
|
+
120,
|
|
529
|
+
2,
|
|
530
|
+
'Backlog refinement',
|
|
531
|
+
93,
|
|
532
|
+
);
|
|
533
|
+
expect((service as any).refreshTimesheetTotal).toHaveBeenCalledWith(tx, 55);
|
|
534
|
+
expect((service as any).refreshTimesheetTotal).toHaveBeenCalledWith(tx, 77);
|
|
535
|
+
expect((service as any).cleanupEmptyEditableTimesheet).toHaveBeenCalledWith(
|
|
536
|
+
tx,
|
|
537
|
+
55,
|
|
538
|
+
);
|
|
539
|
+
});
|
|
540
|
+
|
|
475
541
|
it('rejects deleting entries from submitted timesheets', async () => {
|
|
476
542
|
jest.spyOn(service as any, 'getTimesheetEntryByIdForActor').mockResolvedValue({
|
|
477
543
|
id: 92,
|