@hed-hog/operations 0.0.304 → 0.0.306

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.
Files changed (81) hide show
  1. package/dist/controllers/operations-projects.controller.d.ts +15 -0
  2. package/dist/controllers/operations-projects.controller.d.ts.map +1 -1
  3. package/dist/controllers/operations-tasks.controller.d.ts +41 -10
  4. package/dist/controllers/operations-tasks.controller.d.ts.map +1 -1
  5. package/dist/controllers/operations-tasks.controller.js +11 -0
  6. package/dist/controllers/operations-tasks.controller.js.map +1 -1
  7. package/dist/controllers/operations-timesheets.controller.d.ts +21 -0
  8. package/dist/controllers/operations-timesheets.controller.d.ts.map +1 -1
  9. package/dist/controllers/operations-timesheets.controller.js +12 -0
  10. package/dist/controllers/operations-timesheets.controller.js.map +1 -1
  11. package/dist/dto/create-task.dto.d.ts +7 -1
  12. package/dist/dto/create-task.dto.d.ts.map +1 -1
  13. package/dist/dto/create-task.dto.js +38 -5
  14. package/dist/dto/create-task.dto.js.map +1 -1
  15. package/dist/dto/list-tasks.dto.d.ts +1 -1
  16. package/dist/dto/list-tasks.dto.d.ts.map +1 -1
  17. package/dist/dto/list-tasks.dto.js +2 -2
  18. package/dist/dto/list-tasks.dto.js.map +1 -1
  19. package/dist/dto/update-collaborator-type.dto.d.ts +3 -1
  20. package/dist/dto/update-collaborator-type.dto.d.ts.map +1 -1
  21. package/dist/dto/update-collaborator-type.dto.js +2 -1
  22. package/dist/dto/update-collaborator-type.dto.js.map +1 -1
  23. package/dist/dto/update-task.dto.d.ts +7 -1
  24. package/dist/dto/update-task.dto.d.ts.map +1 -1
  25. package/dist/dto/update-task.dto.js +38 -5
  26. package/dist/dto/update-task.dto.js.map +1 -1
  27. package/dist/operations.service.d.ts +90 -12
  28. package/dist/operations.service.d.ts.map +1 -1
  29. package/dist/operations.service.js +560 -148
  30. package/dist/operations.service.js.map +1 -1
  31. package/dist/operations.service.spec.js +73 -0
  32. package/dist/operations.service.spec.js.map +1 -1
  33. package/hedhog/data/menu.yaml +26 -26
  34. package/hedhog/data/operations_collaborator_type.yaml +76 -76
  35. package/hedhog/data/route.yaml +26 -0
  36. package/hedhog/frontend/app/_components/async-options-combobox.tsx.ejs +5 -3
  37. package/hedhog/frontend/app/_components/collaborator-details-screen.tsx.ejs +44 -44
  38. package/hedhog/frontend/app/_components/collaborator-form-screen.tsx.ejs +168 -213
  39. package/hedhog/frontend/app/_components/collaborator-select-with-create.tsx.ejs +256 -256
  40. package/hedhog/frontend/app/_components/contract-form-screen.tsx.ejs +7 -7
  41. package/hedhog/frontend/app/_components/contract-template-form-screen.tsx.ejs +306 -306
  42. package/hedhog/frontend/app/_components/contract-template-select-with-create.tsx.ejs +247 -247
  43. package/hedhog/frontend/app/_components/contract-wizard-sheet.tsx.ejs +3520 -3520
  44. package/hedhog/frontend/app/_components/project-details-screen.tsx.ejs +1504 -52
  45. package/hedhog/frontend/app/_components/project-form-screen.tsx.ejs +528 -403
  46. package/hedhog/frontend/app/_components/section-card.tsx.ejs +25 -18
  47. package/hedhog/frontend/app/_components/system-user-select-with-create.tsx.ejs +609 -0
  48. package/hedhog/frontend/app/_components/timesheet-task-create-sheet.tsx.ejs +1 -0
  49. package/hedhog/frontend/app/_lib/types.ts.ejs +5 -0
  50. package/hedhog/frontend/app/_lib/utils/format.ts.ejs +7 -7
  51. package/hedhog/frontend/app/_lib/utils/forms.ts.ejs +48 -1
  52. package/hedhog/frontend/app/approvals/page.tsx.ejs +2 -2
  53. package/hedhog/frontend/app/collaborator-types/page.tsx.ejs +513 -502
  54. package/hedhog/frontend/app/collaborators/page.tsx.ejs +10 -7
  55. package/hedhog/frontend/app/contracts/page.tsx.ejs +938 -938
  56. package/hedhog/frontend/app/projects/[id]/edit/page.tsx.ejs +1 -1
  57. package/hedhog/frontend/app/projects/page.tsx.ejs +360 -133
  58. package/hedhog/frontend/app/schedule-adjustments/page.tsx.ejs +235 -72
  59. package/hedhog/frontend/app/timesheets/page.tsx.ejs +344 -134
  60. package/hedhog/frontend/messages/en.json +32 -4
  61. package/hedhog/frontend/messages/pt.json +34 -6
  62. package/hedhog/table/operations_collaborator.yaml +18 -18
  63. package/hedhog/table/operations_collaborator_equity_participation.yaml +43 -43
  64. package/hedhog/table/operations_collaborator_type.yaml +33 -33
  65. package/hedhog/table/operations_contract_document.yaml +33 -33
  66. package/hedhog/table/operations_project.yaml +9 -0
  67. package/hedhog/table/operations_task.yaml +43 -4
  68. package/package.json +6 -6
  69. package/src/controllers/operations-tasks.controller.ts +11 -0
  70. package/src/controllers/operations-timesheets.controller.ts +13 -0
  71. package/src/dto/create-collaborator-type.dto.ts +43 -43
  72. package/src/dto/create-collaborator.dto.ts +223 -223
  73. package/src/dto/create-task.dto.ts +47 -7
  74. package/src/dto/list-collaborator-types.dto.ts +15 -15
  75. package/src/dto/list-collaborators.dto.ts +30 -30
  76. package/src/dto/list-tasks.dto.ts +3 -3
  77. package/src/dto/update-collaborator-type.dto.ts +4 -3
  78. package/src/dto/update-collaborator.dto.ts +3 -3
  79. package/src/dto/update-task.dto.ts +47 -7
  80. package/src/operations.service.spec.ts +96 -0
  81. package/src/operations.service.ts +813 -135
@@ -41,10 +41,15 @@
41
41
  "contract": "Contract",
42
42
  "contractStatus": "Contract status",
43
43
  "contractCategory": "Contract category",
44
+ "contractType": "Contract type",
45
+ "signatureStatus": "Signature status",
44
46
  "manager": "Manager",
45
47
  "progress": "Progress",
46
48
  "timeline": "Timeline",
47
49
  "budget": "Budget",
50
+ "code": "Code",
51
+ "deliveryModel": "Delivery model",
52
+ "allocationPercent": "Allocation %",
48
53
  "teamSize": "Team size",
49
54
  "client": "Client",
50
55
  "billingModel": "Billing model",
@@ -246,6 +251,7 @@
246
251
  "basicInfoDescription": "Core identity and profile data used across operations.",
247
252
  "employmentInfo": "Relationship details",
248
253
  "employmentInfoDescription": "Choose the nature of the relationship with the company, lifecycle status, and key dates.",
254
+ "employmentInfoCreateDescription": "Choose the relationship type and initial dates. Weekly capacity and compensation can be adjusted after creation.",
249
255
  "equity": "Equity details",
250
256
  "equityDescription": "Fill this section only when the selected relationship requires ownership or governance data.",
251
257
  "supervisor": "Supervisor assignment",
@@ -284,7 +290,11 @@
284
290
  "breakMinutes": "Break (min)",
285
291
  "breakMinutesDescription": "The last numeric field defines the daily break in minutes. Example: 60 = a 1-hour lunch break.",
286
292
  "autoGenerateContractDraft": "Generate contract draft automatically",
287
- "autoGenerateContractDraftDescription": "Creates a related draft contract classified from the relationship type and linked to the hiring origin."
293
+ "autoGenerateContractDraftDescription": "Creates a related draft contract classified from the relationship type and linked to the hiring origin.",
294
+ "createUserDescription": "Enter the new system user's credentials. The account will be created immediately and linked to this collaborator.",
295
+ "createUserName": "Full name",
296
+ "createUserEmail": "Email",
297
+ "createUserPassword": "Password"
288
298
  },
289
299
  "options": {
290
300
  "collaboratorTypes": {
@@ -327,7 +337,13 @@
327
337
  "equityNotes": "Notes about quotas, shares, term, or powers",
328
338
  "levelLabel": "Select a level",
329
339
  "supervisor": "Search a collaborator",
330
- "userIdOptional": "Select a system user"
340
+ "userIdOptional": "Select a system user",
341
+ "createUserName": "Full name",
342
+ "createUserEmail": "user@example.com",
343
+ "createUserPassword": "Strong password"
344
+ },
345
+ "actions": {
346
+ "createUser": "Create system user"
331
347
  },
332
348
  "states": {
333
349
  "loadingCollaboratorTypes": "Loading relationship types..."
@@ -340,7 +356,9 @@
340
356
  "createSuccess": "Collaborator created successfully.",
341
357
  "createError": "Unable to create the collaborator.",
342
358
  "updateSuccess": "Collaborator updated successfully.",
343
- "updateError": "Unable to update the collaborator."
359
+ "updateError": "Unable to update the collaborator.",
360
+ "createUserSuccess": "User created and linked successfully.",
361
+ "createUserError": "Failed to create the system user."
344
362
  }
345
363
  },
346
364
  "CollaboratorTypesPage": {
@@ -432,6 +450,9 @@
432
450
  "upcomingDeliveries": "With deadline",
433
451
  "upcomingDeliveriesDescription": "Projects that have an end date defined."
434
452
  },
453
+ "viewMode": "View mode",
454
+ "viewModeTable": "Table",
455
+ "viewModeCards": "Cards",
435
456
  "actions": {
436
457
  "archive": "Archive"
437
458
  },
@@ -526,7 +547,9 @@
526
547
  "monthlyHourCap": "Monthly hour cap",
527
548
  "contractCode": "Used only when creating a draft contract",
528
549
  "contractName": "Visible name for the generated draft",
529
- "contractDescription": "Add commercial notes or delivery clauses"
550
+ "contractDescription": "Add commercial notes or delivery clauses",
551
+ "roleLabel": "Select or type a role...",
552
+ "roleLabelCreate": "New role or responsibility"
530
553
  },
531
554
  "options": {
532
555
  "deliveryModels": {
@@ -1088,12 +1111,17 @@
1088
1111
  },
1089
1112
  "messages": {
1090
1113
  "requiredFields": "Project, task, date, and duration are required.",
1114
+ "collaboratorContextRequired": "Your user must be linked to a collaborator profile to report time.",
1091
1115
  "entryValidation": "Enter a valid duration greater than zero.",
1092
1116
  "selectProjectRequired": "Select a project assignment first.",
1093
1117
  "selectTaskRequired": "Select or create a task first.",
1094
1118
  "selectProjectFirst": "Select a project before creating a task.",
1119
+ "projectLoadError": "Unable to load the available projects.",
1120
+ "taskLoadError": "Unable to load the available tasks.",
1095
1121
  "saveSuccess": "Entry saved successfully.",
1096
1122
  "saveError": "Unable to save the entry.",
1123
+ "updateSuccess": "Entry updated successfully.",
1124
+ "updateError": "Unable to update the entry.",
1097
1125
  "deleteSuccess": "Entry deleted successfully.",
1098
1126
  "deleteError": "Unable to delete the entry.",
1099
1127
  "confirmDeleteTitle": "Delete entry?",
@@ -41,10 +41,15 @@
41
41
  "contract": "Contrato",
42
42
  "contractStatus": "Status do contrato",
43
43
  "contractCategory": "Categoria do contrato",
44
+ "contractType": "Tipo do contrato",
45
+ "signatureStatus": "Status da assinatura",
44
46
  "manager": "Gestor",
45
47
  "progress": "Progresso",
46
48
  "timeline": "Período",
47
49
  "budget": "Orçamento",
50
+ "code": "Código",
51
+ "deliveryModel": "Modelo de entrega",
52
+ "allocationPercent": "Alocação %",
48
53
  "teamSize": "Tamanho da equipe",
49
54
  "client": "Cliente",
50
55
  "billingModel": "Modelo de faturamento",
@@ -244,6 +249,7 @@
244
249
  "basicInfoDescription": "Dados principais de identificação usados em toda a operação.",
245
250
  "employmentInfo": "Informações de contratação",
246
251
  "employmentInfoDescription": "Defina o tipo do colaborador, o status do ciclo e as datas principais.",
252
+ "employmentInfoCreateDescription": "Escolha o tipo de vínculo e as datas iniciais. Capacidade semanal e remuneração podem ser ajustadas após a criação.",
247
253
  "equity": "Detalhes de participação societária",
248
254
  "equityDescription": "Preencha esta seção apenas quando a relação selecionada exigir dados de propriedade ou governança.",
249
255
  "supervisor": "Vínculo de supervisor",
@@ -282,7 +288,11 @@
282
288
  "breakMinutes": "Intervalo (min)",
283
289
  "breakMinutesDescription": "O último campo numérico define o intervalo/pausa diária em minutos. Ex.: 60 = 1 hora de almoço.",
284
290
  "autoGenerateContractDraft": "Gerar contrato rascunho automaticamente",
285
- "autoGenerateContractDraftDescription": "Cria um contrato rascunho relacionado, classificado pelo tipo de colaborador e vinculado à origem de contratação."
291
+ "autoGenerateContractDraftDescription": "Cria um contrato rascunho relacionado, classificado pelo tipo de colaborador e vinculado à origem de contratação.",
292
+ "createUserDescription": "Informe as credenciais do novo usuário do sistema. A conta será criada imediatamente e vinculada a este colaborador.",
293
+ "createUserName": "Nome completo",
294
+ "createUserEmail": "E-mail",
295
+ "createUserPassword": "Senha"
286
296
  },
287
297
  "options": {
288
298
  "collaboratorTypes": {
@@ -325,7 +335,13 @@
325
335
  "equityNotes": "Observações sobre cotas, ações, prazo ou poderes",
326
336
  "levelLabel": "Selecione um nível",
327
337
  "supervisor": "Busque um colaborador",
328
- "userIdOptional": "Selecione um usuário do sistema"
338
+ "userIdOptional": "Selecione um usuário do sistema",
339
+ "createUserName": "Nome completo",
340
+ "createUserEmail": "usuario@exemplo.com",
341
+ "createUserPassword": "Senha forte"
342
+ },
343
+ "actions": {
344
+ "createUser": "Criar usuário do sistema"
329
345
  },
330
346
  "states": {
331
347
  "loadingCollaboratorTypes": "Carregando tipos de colaborador..."
@@ -338,7 +354,9 @@
338
354
  "createSuccess": "Colaborador criado com sucesso.",
339
355
  "createError": "Não foi possível criar o colaborador.",
340
356
  "updateSuccess": "Colaborador atualizado com sucesso.",
341
- "updateError": "Não foi possível atualizar o colaborador."
357
+ "updateError": "Não foi possível atualizar o colaborador.",
358
+ "createUserSuccess": "Usuário criado e vinculado com sucesso.",
359
+ "createUserError": "Não foi possível criar o usuário do sistema."
342
360
  }
343
361
  },
344
362
  "CollaboratorTypesPage": {
@@ -430,6 +448,9 @@
430
448
  "upcomingDeliveries": "Com prazo",
431
449
  "upcomingDeliveriesDescription": "Projetos com data de entrega definida."
432
450
  },
451
+ "viewMode": "Visualização",
452
+ "viewModeTable": "Tabela",
453
+ "viewModeCards": "Cards",
433
454
  "actions": {
434
455
  "archive": "Arquivar"
435
456
  },
@@ -524,7 +545,9 @@
524
545
  "monthlyHourCap": "Limite mensal de horas",
525
546
  "contractCode": "Usado apenas ao criar contrato rascunho",
526
547
  "contractName": "Nome visivel do contrato gerado",
527
- "contractDescription": "Adicione observacoes comerciais ou clausulas da entrega"
548
+ "contractDescription": "Adicione observacoes comerciais ou clausulas da entrega",
549
+ "roleLabel": "Selecione ou informe o papel...",
550
+ "roleLabelCreate": "Novo papel ou responsabilidade"
528
551
  },
529
552
  "options": {
530
553
  "deliveryModels": {
@@ -1086,14 +1109,19 @@
1086
1109
  },
1087
1110
  "messages": {
1088
1111
  "requiredFields": "Projeto, tarefa, data e duração são obrigatórios.",
1112
+ "collaboratorContextRequired": "Seu usuário precisa estar vinculado a um colaborador para lançar horas.",
1089
1113
  "entryValidation": "Informe uma duração válida maior que zero.",
1090
1114
  "selectProjectRequired": "Selecione primeiro uma alocação de projeto.",
1091
1115
  "selectTaskRequired": "Selecione ou crie uma tarefa primeiro.",
1092
1116
  "selectProjectFirst": "Selecione um projeto antes de criar uma tarefa.",
1117
+ "projectLoadError": "Não foi possível carregar os projetos disponíveis.",
1118
+ "taskLoadError": "Não foi possível carregar as tarefas disponíveis.",
1093
1119
  "saveSuccess": "Lançamento salvo com sucesso.",
1094
- "saveError": "ão foi possível salvar o lançamento.",
1120
+ "saveError": "Não foi possível salvar o lançamento.",
1121
+ "updateSuccess": "Lançamento atualizado com sucesso.",
1122
+ "updateError": "Não foi possível atualizar o lançamento.",
1095
1123
  "deleteSuccess": "Lançamento excluído com sucesso.",
1096
- "deleteError": "ão foi possível excluir o lançamento.",
1124
+ "deleteError": "Não foi possível excluir o lançamento.",
1097
1125
  "confirmDeleteTitle": "Excluir lançamento?",
1098
1126
  "confirmDeleteDescription": "Isso removerá o lançamento de \"{name}\" do rascunho semanal atual.",
1099
1127
  "submitSuccess": "Timesheet enviada com sucesso.",
@@ -19,20 +19,20 @@ columns:
19
19
  column: id
20
20
  onDelete: SET NULL
21
21
  onUpdate: CASCADE
22
- - name: code
23
- type: varchar
24
- length: 32
25
- - name: collaborator_type_id
26
- type: fk
27
- isNullable: true
28
- references:
29
- table: operations_collaborator_type
30
- column: id
31
- onDelete: SET NULL
32
- onUpdate: CASCADE
33
- - name: display_name
34
- type: varchar
35
- length: 180
22
+ - name: code
23
+ type: varchar
24
+ length: 32
25
+ - name: collaborator_type_id
26
+ type: fk
27
+ isNullable: true
28
+ references:
29
+ table: operations_collaborator_type
30
+ column: id
31
+ onDelete: SET NULL
32
+ onUpdate: CASCADE
33
+ - name: display_name
34
+ type: varchar
35
+ length: 180
36
36
  - name: department
37
37
  type: varchar
38
38
  length: 120
@@ -92,9 +92,9 @@ indices:
92
92
  isUnique: true
93
93
  - columns: [code]
94
94
  isUnique: true
95
- - columns: [collaborator_type_id]
96
- - columns: [supervisor_collaborator_id]
97
- - columns: [department_id]
98
- - columns: [job_title_id]
95
+ - columns: [collaborator_type_id]
96
+ - columns: [supervisor_collaborator_id]
97
+ - columns: [department_id]
98
+ - columns: [job_title_id]
99
99
  - columns: [status]
100
100
  - columns: [deleted_at]
@@ -1,43 +1,43 @@
1
- columns:
2
- - type: pk
3
- - name: collaborator_id
4
- type: fk
5
- references:
6
- table: operations_collaborator
7
- column: id
8
- onDelete: CASCADE
9
- onUpdate: CASCADE
10
- - name: participation_type
11
- type: enum
12
- values:
13
- [partner_quota_holder, common_shareholder, preferred_shareholder, administrator, other]
14
- default: other
15
- - name: percentage
16
- type: decimal
17
- precision: 7
18
- scale: 4
19
- isNullable: true
20
- - name: voting_power
21
- type: decimal
22
- precision: 7
23
- scale: 4
24
- isNullable: true
25
- - name: start_date
26
- type: date
27
- isNullable: true
28
- - name: end_date
29
- type: date
30
- isNullable: true
31
- - name: notes
32
- type: text
33
- isNullable: true
34
- - name: deleted_at
35
- type: datetime
36
- isNullable: true
37
- - type: created_at
38
- - type: updated_at
39
-
40
- indices:
41
- - columns: [collaborator_id]
42
- - columns: [participation_type]
43
- - columns: [deleted_at]
1
+ columns:
2
+ - type: pk
3
+ - name: collaborator_id
4
+ type: fk
5
+ references:
6
+ table: operations_collaborator
7
+ column: id
8
+ onDelete: CASCADE
9
+ onUpdate: CASCADE
10
+ - name: participation_type
11
+ type: enum
12
+ values:
13
+ [partner_quota_holder, common_shareholder, preferred_shareholder, administrator, other]
14
+ default: other
15
+ - name: percentage
16
+ type: decimal
17
+ precision: 7
18
+ scale: 4
19
+ isNullable: true
20
+ - name: voting_power
21
+ type: decimal
22
+ precision: 7
23
+ scale: 4
24
+ isNullable: true
25
+ - name: start_date
26
+ type: date
27
+ isNullable: true
28
+ - name: end_date
29
+ type: date
30
+ isNullable: true
31
+ - name: notes
32
+ type: text
33
+ isNullable: true
34
+ - name: deleted_at
35
+ type: datetime
36
+ isNullable: true
37
+ - type: created_at
38
+ - type: updated_at
39
+
40
+ indices:
41
+ - columns: [collaborator_id]
42
+ - columns: [participation_type]
43
+ - columns: [deleted_at]
@@ -1,33 +1,33 @@
1
- columns:
2
- - type: pk
3
- - type: slug
4
- - name: name
5
- type: varchar
6
- length: 120
7
- - name: description
8
- type: text
9
- isNullable: true
10
- - name: category
11
- type: varchar
12
- length: 60
13
- isNullable: true
14
- - name: is_active
15
- type: boolean
16
- default: true
17
- - name: sort_order
18
- type: int
19
- default: 0
20
- - name: deleted_at
21
- type: datetime
22
- isNullable: true
23
- - type: created_at
24
- - type: updated_at
25
-
26
- indices:
27
- - columns: [slug]
28
- isUnique: true
29
- - columns: [name]
30
- - columns: [category]
31
- - columns: [is_active]
32
- - columns: [sort_order]
33
- - columns: [deleted_at]
1
+ columns:
2
+ - type: pk
3
+ - type: slug
4
+ - name: name
5
+ type: varchar
6
+ length: 120
7
+ - name: description
8
+ type: text
9
+ isNullable: true
10
+ - name: category
11
+ type: varchar
12
+ length: 60
13
+ isNullable: true
14
+ - name: is_active
15
+ type: boolean
16
+ default: true
17
+ - name: sort_order
18
+ type: int
19
+ default: 0
20
+ - name: deleted_at
21
+ type: datetime
22
+ isNullable: true
23
+ - type: created_at
24
+ - type: updated_at
25
+
26
+ indices:
27
+ - columns: [slug]
28
+ isUnique: true
29
+ - columns: [name]
30
+ - columns: [category]
31
+ - columns: [is_active]
32
+ - columns: [sort_order]
33
+ - columns: [deleted_at]
@@ -7,40 +7,40 @@ columns:
7
7
  column: id
8
8
  onDelete: CASCADE
9
9
  onUpdate: CASCADE
10
- - name: document_type
11
- type: enum
12
- values: [source_upload, generated_pdf, attachment, other]
13
- default: attachment
14
- - name: file_id
15
- type: fk
16
- isNullable: true
17
- references:
18
- table: file
19
- column: id
20
- onDelete: SET NULL
21
- onUpdate: CASCADE
22
- - name: file_name
23
- type: varchar
24
- length: 200
10
+ - name: document_type
11
+ type: enum
12
+ values: [source_upload, generated_pdf, attachment, other]
13
+ default: attachment
14
+ - name: file_id
15
+ type: fk
16
+ isNullable: true
17
+ references:
18
+ table: file
19
+ column: id
20
+ onDelete: SET NULL
21
+ onUpdate: CASCADE
22
+ - name: file_name
23
+ type: varchar
24
+ length: 200
25
25
  - name: mime_type
26
26
  type: varchar
27
27
  length: 120
28
28
  - name: file_content_base64
29
29
  type: text
30
30
  isNullable: true
31
- - name: is_current
32
- type: boolean
33
- default: true
34
- - name: extraction_status
35
- type: enum
36
- values: [pending, processing, completed, failed, skipped]
37
- default: skipped
38
- - name: extraction_summary
39
- type: text
40
- isNullable: true
41
- - name: notes
42
- type: text
43
- isNullable: true
31
+ - name: is_current
32
+ type: boolean
33
+ default: true
34
+ - name: extraction_status
35
+ type: enum
36
+ values: [pending, processing, completed, failed, skipped]
37
+ default: skipped
38
+ - name: extraction_summary
39
+ type: text
40
+ isNullable: true
41
+ - name: notes
42
+ type: text
43
+ isNullable: true
44
44
  - name: deleted_at
45
45
  type: datetime
46
46
  isNullable: true
@@ -49,8 +49,8 @@ columns:
49
49
 
50
50
  indices:
51
51
  - columns: [contract_id]
52
- - columns: [document_type]
53
- - columns: [file_id]
54
- - columns: [is_current]
55
- - columns: [extraction_status]
56
- - columns: [deleted_at]
52
+ - columns: [document_type]
53
+ - columns: [file_id]
54
+ - columns: [is_current]
55
+ - columns: [extraction_status]
56
+ - columns: [deleted_at]
@@ -16,6 +16,14 @@ columns:
16
16
  column: id
17
17
  onDelete: SET NULL
18
18
  onUpdate: CASCADE
19
+ - name: client_person_id
20
+ type: fk
21
+ isNullable: true
22
+ references:
23
+ table: person
24
+ column: id
25
+ onDelete: SET NULL
26
+ onUpdate: CASCADE
19
27
  - name: code
20
28
  type: varchar
21
29
  length: 40
@@ -64,6 +72,7 @@ indices:
64
72
  isUnique: true
65
73
  - columns: [contract_id]
66
74
  - columns: [manager_collaborator_id]
75
+ - columns: [client_person_id]
67
76
  - columns: [status]
68
77
  - columns: [start_date]
69
78
  - columns: [end_date]
@@ -1,11 +1,28 @@
1
1
  columns:
2
2
  - type: pk
3
+ - name: project_id
4
+ type: fk
5
+ isNullable: true
6
+ references:
7
+ table: operations_project
8
+ column: id
9
+ onDelete: CASCADE
10
+ onUpdate: CASCADE
3
11
  - name: project_assignment_id
4
12
  type: fk
13
+ isNullable: true
5
14
  references:
6
15
  table: operations_project_assignment
7
16
  column: id
8
- onDelete: CASCADE
17
+ onDelete: SET NULL
18
+ onUpdate: CASCADE
19
+ - name: assignee_collaborator_id
20
+ type: fk
21
+ isNullable: true
22
+ references:
23
+ table: operations_collaborator
24
+ column: id
25
+ onDelete: SET NULL
9
26
  onUpdate: CASCADE
10
27
  - name: name
11
28
  type: varchar
@@ -13,10 +30,28 @@ columns:
13
30
  - name: description
14
31
  type: text
15
32
  isNullable: true
33
+ - name: priority
34
+ type: enum
35
+ values: [low, medium, high]
36
+ default: medium
16
37
  - name: status
17
38
  type: enum
18
- values: [active, completed, archived]
19
- default: active
39
+ values: [todo, doing, review, done]
40
+ default: todo
41
+ - name: due_date
42
+ type: date
43
+ isNullable: true
44
+ - name: estimate_hours
45
+ type: decimal
46
+ precision: 6
47
+ scale: 2
48
+ isNullable: true
49
+ - name: position
50
+ type: int
51
+ default: 0
52
+ - name: tags
53
+ type: text
54
+ isNullable: true
20
55
  - name: deleted_at
21
56
  type: datetime
22
57
  isNullable: true
@@ -24,7 +59,11 @@ columns:
24
59
  - type: updated_at
25
60
 
26
61
  indices:
62
+ - columns: [project_id]
27
63
  - columns: [project_assignment_id]
64
+ - columns: [assignee_collaborator_id]
28
65
  - columns: [status]
29
- - columns: [project_assignment_id, status]
66
+ - columns: [priority]
67
+ - columns: [due_date]
68
+ - columns: [project_id, status]
30
69
  - columns: [deleted_at]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hed-hog/operations",
3
- "version": "0.0.304",
3
+ "version": "0.0.306",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "dependencies": {
@@ -9,13 +9,13 @@
9
9
  "@nestjs/core": "^11",
10
10
  "@nestjs/jwt": "^11",
11
11
  "@nestjs/mapped-types": "*",
12
- "@hed-hog/api-locale": "0.0.14",
13
- "@hed-hog/core": "0.0.304",
14
- "@hed-hog/api": "0.0.6",
15
12
  "@hed-hog/api-pagination": "0.0.7",
16
- "@hed-hog/api-types": "0.0.1",
13
+ "@hed-hog/api": "0.0.6",
17
14
  "@hed-hog/api-prisma": "0.0.6",
18
- "@hed-hog/contact": "0.0.304"
15
+ "@hed-hog/core": "0.0.306",
16
+ "@hed-hog/api-locale": "0.0.14",
17
+ "@hed-hog/api-types": "0.0.1",
18
+ "@hed-hog/contact": "0.0.306"
19
19
  },
20
20
  "exports": {
21
21
  ".": {
@@ -31,6 +31,17 @@ export class OperationsTasksController {
31
31
  );
32
32
  }
33
33
 
34
+ @Get('projects/:id/tasks')
35
+ listProjectBoardTasks(
36
+ @User() user,
37
+ @Param('id', ParseIntPipe) id: number,
38
+ ) {
39
+ return this.operationsService.listProjectBoardTasks(
40
+ Number(user?.id || 0),
41
+ id,
42
+ );
43
+ }
44
+
34
45
  @Post('tasks')
35
46
  createTask(@User() user, @Body() data: CreateOperationsTaskDto) {
36
47
  return this.operationsService.createTask(Number(user?.id || 0), data);
@@ -45,6 +45,19 @@ export class OperationsTimesheetsController {
45
45
  );
46
46
  }
47
47
 
48
+ @Patch('timesheet-entries/:id')
49
+ updateTimesheetEntry(
50
+ @User() user,
51
+ @Param('id', ParseIntPipe) id: number,
52
+ @Body() data: CreateTimesheetEntryDto,
53
+ ) {
54
+ return this.operationsService.updateTimesheetEntry(
55
+ Number(user?.id || 0),
56
+ id,
57
+ data,
58
+ );
59
+ }
60
+
48
61
  @Delete('timesheet-entries/:id')
49
62
  removeTimesheetEntry(@User() user, @Param('id', ParseIntPipe) id: number) {
50
63
  return this.operationsService.removeTimesheetEntry(Number(user?.id || 0), id);