@hed-hog/operations 0.0.3 → 0.0.285
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/README.md +122 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/operations-data.controller.d.ts +139 -0
- package/dist/operations-data.controller.d.ts.map +1 -0
- package/dist/operations-data.controller.js +113 -0
- package/dist/operations-data.controller.js.map +1 -0
- package/dist/operations-growth.controller.d.ts +48 -0
- package/dist/operations-growth.controller.d.ts.map +1 -0
- package/dist/operations-growth.controller.js +90 -0
- package/dist/operations-growth.controller.js.map +1 -0
- package/dist/operations.module.d.ts.map +1 -1
- package/dist/operations.module.js +10 -4
- package/dist/operations.module.js.map +1 -1
- package/dist/operations.service.d.ts +178 -0
- package/dist/operations.service.d.ts.map +1 -0
- package/dist/operations.service.js +134 -0
- package/dist/operations.service.js.map +1 -0
- package/hedhog/data/menu.yaml +251 -132
- package/hedhog/data/operations_career_level.yaml +102 -0
- package/hedhog/data/operations_career_track.yaml +8 -0
- package/hedhog/data/operations_certification.yaml +38 -0
- package/hedhog/data/operations_evaluation_cycle.yaml +18 -0
- package/hedhog/data/operations_performance_criterion.yaml +48 -0
- package/hedhog/data/role.yaml +14 -7
- package/hedhog/data/route.yaml +143 -80
- package/hedhog/frontend/app/_components/allocation-calendar.tsx.ejs +56 -56
- package/hedhog/frontend/app/_components/kanban-board.tsx.ejs +83 -83
- package/hedhog/frontend/app/_components/operations-header.tsx.ejs +29 -29
- package/hedhog/frontend/app/_components/section-card.tsx.ejs +32 -32
- package/hedhog/frontend/app/_components/status-badge.tsx.ejs +15 -15
- package/hedhog/frontend/app/_components/timesheet-entry-dialog.tsx.ejs +142 -142
- package/hedhog/frontend/app/_lib/hooks/use-operations-data.ts.ejs +41 -41
- package/hedhog/frontend/app/_lib/hooks/use-operations-growth-data.ts.ejs +63 -0
- package/hedhog/frontend/app/_lib/mocks/allocations.mock.ts.ejs +74 -74
- package/hedhog/frontend/app/_lib/mocks/contracts.mock.ts.ejs +74 -74
- package/hedhog/frontend/app/_lib/mocks/operations-growth.mock.ts.ejs +824 -0
- package/hedhog/frontend/app/_lib/mocks/projects.mock.ts.ejs +60 -60
- package/hedhog/frontend/app/_lib/mocks/tasks.mock.ts.ejs +88 -88
- package/hedhog/frontend/app/_lib/mocks/timesheets.mock.ts.ejs +84 -84
- package/hedhog/frontend/app/_lib/mocks/users.mock.ts.ejs +67 -67
- package/hedhog/frontend/app/_lib/services/contracts.service.ts.ejs +10 -10
- package/hedhog/frontend/app/_lib/services/operations-growth.service.ts.ejs +31 -0
- package/hedhog/frontend/app/_lib/services/projects.service.ts.ejs +10 -10
- package/hedhog/frontend/app/_lib/services/tasks.service.ts.ejs +10 -10
- package/hedhog/frontend/app/_lib/services/timesheets.service.ts.ejs +10 -10
- package/hedhog/frontend/app/_lib/types/operations-growth.ts.ejs +209 -0
- package/hedhog/frontend/app/_lib/types/operations.ts.ejs +95 -95
- package/hedhog/frontend/app/_lib/utils/format.ts.ejs +25 -25
- package/hedhog/frontend/app/_lib/utils/growth.ts.ejs +62 -0
- package/hedhog/frontend/app/_lib/utils/metrics.ts.ejs +103 -103
- package/hedhog/frontend/app/_lib/utils/status.ts.ejs +80 -80
- package/hedhog/frontend/app/allocations/page.tsx.ejs +154 -99
- package/hedhog/frontend/app/approvals/page.tsx.ejs +147 -147
- package/hedhog/frontend/app/career/page.tsx.ejs +143 -0
- package/hedhog/frontend/app/certifications/page.tsx.ejs +201 -0
- package/hedhog/frontend/app/contracts/[id]/page.tsx.ejs +108 -108
- package/hedhog/frontend/app/contracts/page.tsx.ejs +180 -124
- package/hedhog/frontend/app/evaluations/page.tsx.ejs +277 -0
- package/hedhog/frontend/app/goals/page.tsx.ejs +170 -0
- package/hedhog/frontend/app/growth/page.tsx.ejs +288 -0
- package/hedhog/frontend/app/layout.tsx.ejs +9 -9
- package/hedhog/frontend/app/manager/page.tsx.ejs +175 -0
- package/hedhog/frontend/app/page.tsx.ejs +177 -177
- package/hedhog/frontend/app/projects/[id]/page.tsx.ejs +186 -186
- package/hedhog/frontend/app/projects/page.tsx.ejs +111 -111
- package/hedhog/frontend/app/rewards/page.tsx.ejs +195 -0
- package/hedhog/frontend/app/tasks/page.tsx.ejs +47 -47
- package/hedhog/frontend/app/timesheets/page.tsx.ejs +126 -126
- package/hedhog/frontend/messages/en.json +152 -142
- package/hedhog/frontend/messages/pt.json +152 -142
- package/hedhog/table/operations_allocation.yaml +52 -0
- package/hedhog/table/operations_calibration_item.yaml +61 -0
- package/hedhog/table/operations_calibration_session.yaml +25 -0
- package/hedhog/table/operations_career_level.yaml +75 -0
- package/hedhog/table/operations_career_track.yaml +21 -0
- package/hedhog/table/operations_certification.yaml +48 -0
- package/hedhog/table/operations_contract.yaml +57 -0
- package/hedhog/table/operations_employee.yaml +64 -0
- package/hedhog/table/operations_employee_certification.yaml +43 -0
- package/hedhog/table/operations_employee_connect.yaml +61 -0
- package/hedhog/table/operations_employee_evaluation.yaml +113 -0
- package/hedhog/table/operations_employee_evaluation_item.yaml +39 -0
- package/hedhog/table/operations_employee_profile.yaml +80 -0
- package/hedhog/table/operations_employee_skill_matrix.yaml +30 -0
- package/hedhog/table/operations_evaluation_cycle.yaml +31 -0
- package/hedhog/table/operations_goal.yaml +67 -0
- package/hedhog/table/operations_goal_progress.yaml +31 -0
- package/hedhog/table/operations_performance_criterion.yaml +29 -0
- package/hedhog/table/operations_project.yaml +66 -0
- package/hedhog/table/operations_promotion_readiness.yaml +49 -0
- package/hedhog/table/operations_promotion_recommendation.yaml +63 -0
- package/hedhog/table/operations_public_recognition.yaml +46 -0
- package/hedhog/table/operations_reward.yaml +100 -0
- package/hedhog/table/operations_score_event.yaml +81 -0
- package/hedhog/table/operations_task.yaml +60 -0
- package/hedhog/table/operations_timesheet.yaml +49 -0
- package/hedhog/table/operations_timesheet_entry.yaml +51 -0
- package/package.json +4 -4
- package/src/index.ts +2 -1
- package/src/language/en.json +8 -8
- package/src/language/pt.json +8 -8
- package/src/operations-data.controller.ts +54 -0
- package/src/operations-growth.controller.ts +44 -0
- package/src/operations.module.ts +21 -15
- package/src/operations.service.ts +137 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
- career_track_id:
|
|
2
|
+
where:
|
|
3
|
+
slug: delivery
|
|
4
|
+
slug: junior-consultant
|
|
5
|
+
name: Junior Consultant
|
|
6
|
+
code: JC
|
|
7
|
+
level_code: 59
|
|
8
|
+
level_order: 1
|
|
9
|
+
order_index: 1
|
|
10
|
+
min_score: 0
|
|
11
|
+
max_score: 199
|
|
12
|
+
salary_min: 2500
|
|
13
|
+
salary_max: 4200
|
|
14
|
+
description: Entry level professional focused on consistency and delivery fundamentals.
|
|
15
|
+
summary_criteria: Complete guided tasks, keep basic SLA discipline, and build collaboration habits.
|
|
16
|
+
expectations_summary: Demonstrates reliable individual execution with clear room to expand impact through evidence and consistency.
|
|
17
|
+
is_active: true
|
|
18
|
+
- career_track_id:
|
|
19
|
+
where:
|
|
20
|
+
slug: delivery
|
|
21
|
+
slug: consultant
|
|
22
|
+
name: Consultant
|
|
23
|
+
code: C1
|
|
24
|
+
level_code: 60
|
|
25
|
+
level_order: 2
|
|
26
|
+
order_index: 2
|
|
27
|
+
min_score: 200
|
|
28
|
+
max_score: 399
|
|
29
|
+
salary_min: 4200
|
|
30
|
+
salary_max: 6500
|
|
31
|
+
description: Independent execution with predictable quality and communication.
|
|
32
|
+
summary_criteria: Deliver scoped work with low rework and maintain solid project rituals.
|
|
33
|
+
expectations_summary: Produces visible individual impact, helps the team operate better, and begins to document evidence for broader readiness.
|
|
34
|
+
is_active: true
|
|
35
|
+
- career_track_id:
|
|
36
|
+
where:
|
|
37
|
+
slug: delivery
|
|
38
|
+
slug: senior-consultant
|
|
39
|
+
name: Senior Consultant
|
|
40
|
+
code: SC
|
|
41
|
+
level_code: 61
|
|
42
|
+
level_order: 3
|
|
43
|
+
order_index: 3
|
|
44
|
+
min_score: 400
|
|
45
|
+
max_score: 649
|
|
46
|
+
salary_min: 6500
|
|
47
|
+
salary_max: 9500
|
|
48
|
+
description: Senior delivery contributor with autonomy and mentoring impact.
|
|
49
|
+
summary_criteria: Lead complex deliveries, mentor peers, and create reusable improvements.
|
|
50
|
+
expectations_summary: Sustains impact across individual delivery and team enablement with evidence strong enough for readiness discussions.
|
|
51
|
+
is_active: true
|
|
52
|
+
- career_track_id:
|
|
53
|
+
where:
|
|
54
|
+
slug: delivery
|
|
55
|
+
slug: delivery-lead
|
|
56
|
+
name: Delivery Lead
|
|
57
|
+
code: DL
|
|
58
|
+
level_code: 62
|
|
59
|
+
level_order: 4
|
|
60
|
+
order_index: 4
|
|
61
|
+
min_score: 650
|
|
62
|
+
max_score: 999
|
|
63
|
+
salary_min: 9500
|
|
64
|
+
salary_max: 14000
|
|
65
|
+
description: Team-level leadership focused on outcomes, predictability, and growth coaching.
|
|
66
|
+
summary_criteria: Run multi-stream delivery, develop people, and sustain healthy margins.
|
|
67
|
+
expectations_summary: Demonstrates organization-level influence, calibration-ready evidence, and sustained operation in a broader leadership context.
|
|
68
|
+
is_active: true
|
|
69
|
+
- career_track_id:
|
|
70
|
+
where:
|
|
71
|
+
slug: specialist
|
|
72
|
+
slug: specialist-ii
|
|
73
|
+
name: Specialist II
|
|
74
|
+
code: SP2
|
|
75
|
+
level_code: 60S
|
|
76
|
+
level_order: 1
|
|
77
|
+
order_index: 1
|
|
78
|
+
min_score: 250
|
|
79
|
+
max_score: 499
|
|
80
|
+
salary_min: 5000
|
|
81
|
+
salary_max: 8000
|
|
82
|
+
description: Deep individual contributor with emerging internal influence.
|
|
83
|
+
summary_criteria: Own a specialty lane and improve standards inside recurring workflows.
|
|
84
|
+
expectations_summary: Shows specialist impact beyond execution through reusable knowledge, evidence, and measurable quality improvement.
|
|
85
|
+
is_active: true
|
|
86
|
+
- career_track_id:
|
|
87
|
+
where:
|
|
88
|
+
slug: specialist
|
|
89
|
+
slug: principal-specialist
|
|
90
|
+
name: Principal Specialist
|
|
91
|
+
code: PS
|
|
92
|
+
level_code: 61S
|
|
93
|
+
level_order: 2
|
|
94
|
+
order_index: 2
|
|
95
|
+
min_score: 500
|
|
96
|
+
max_score: 900
|
|
97
|
+
salary_min: 9000
|
|
98
|
+
salary_max: 15000
|
|
99
|
+
description: Reference professional who shapes methods, quality bars, and enablement.
|
|
100
|
+
summary_criteria: Scale expertise, certify others, and improve delivery leverage across teams.
|
|
101
|
+
expectations_summary: Operates with organization-level technical impact and produces calibration-grade evidence across multiple teams.
|
|
102
|
+
is_active: true
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
- slug: delivery
|
|
2
|
+
name: Delivery
|
|
3
|
+
description: Execution path focused on delivery leadership, project ownership, and client outcomes.
|
|
4
|
+
is_active: true
|
|
5
|
+
- slug: specialist
|
|
6
|
+
name: Specialist
|
|
7
|
+
description: Technical path focused on mastery, enablement, and quality acceleration.
|
|
8
|
+
is_active: true
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
- slug: scrum-master-foundations
|
|
2
|
+
name: Scrum Master Foundations
|
|
3
|
+
provider: Scrum.org
|
|
4
|
+
category: Delivery
|
|
5
|
+
default_score: 45
|
|
6
|
+
description: Validates facilitation and agile operating fundamentals.
|
|
7
|
+
is_supporting_evidence: true
|
|
8
|
+
is_active: true
|
|
9
|
+
- slug: data-storytelling
|
|
10
|
+
name: Data Storytelling for Delivery
|
|
11
|
+
provider: Internal Academy
|
|
12
|
+
category: Communication
|
|
13
|
+
default_score: 30
|
|
14
|
+
description: Improves executive updates, stakeholder alignment, and narrative clarity.
|
|
15
|
+
is_supporting_evidence: true
|
|
16
|
+
is_active: true
|
|
17
|
+
- slug: advanced-quality-assurance
|
|
18
|
+
name: Advanced Quality Assurance
|
|
19
|
+
provider: ISTQB
|
|
20
|
+
category: Quality
|
|
21
|
+
default_score: 55
|
|
22
|
+
required_level_id:
|
|
23
|
+
where:
|
|
24
|
+
slug: senior-consultant
|
|
25
|
+
description: Supporting evidence that can strengthen readiness discussions for senior delivery and specialist growth.
|
|
26
|
+
is_supporting_evidence: true
|
|
27
|
+
is_active: true
|
|
28
|
+
- slug: leadership-feedback-practicum
|
|
29
|
+
name: Leadership Feedback Practicum
|
|
30
|
+
provider: Internal Academy
|
|
31
|
+
category: Leadership
|
|
32
|
+
default_score: 40
|
|
33
|
+
required_level_id:
|
|
34
|
+
where:
|
|
35
|
+
slug: delivery-lead
|
|
36
|
+
description: Supporting evidence for leadership readiness and management cadence, without guaranteeing promotion by itself.
|
|
37
|
+
is_supporting_evidence: true
|
|
38
|
+
is_active: true
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
- name: 2026 H1 Growth Cycle
|
|
2
|
+
cycle_type: semiannual
|
|
3
|
+
start_date: 2026-01-01
|
|
4
|
+
end_date: 2026-06-30
|
|
5
|
+
status: active
|
|
6
|
+
description: Main career review cycle for the first semester.
|
|
7
|
+
- name: Legacy Imported Cycle
|
|
8
|
+
cycle_type: custom
|
|
9
|
+
start_date: 2025-01-01
|
|
10
|
+
end_date: 2025-12-31
|
|
11
|
+
status: archived
|
|
12
|
+
description: Default cycle used to anchor legacy score-first data imported before the impact model refactor.
|
|
13
|
+
- name: 2026 Delivery Sprint Review
|
|
14
|
+
cycle_type: quarterly
|
|
15
|
+
start_date: 2026-01-01
|
|
16
|
+
end_date: 2026-03-31
|
|
17
|
+
status: active
|
|
18
|
+
description: Lightweight cycle focused on delivery feedback and recognition.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
- slug: punctuality
|
|
2
|
+
name: Punctuality
|
|
3
|
+
description: Respect for deadlines, rituals, and agreed checkpoints.
|
|
4
|
+
weight: 1
|
|
5
|
+
score_type: rating
|
|
6
|
+
is_active: true
|
|
7
|
+
- slug: quality
|
|
8
|
+
name: Quality
|
|
9
|
+
description: Delivery quality, low rework, and attention to detail.
|
|
10
|
+
weight: 1.4
|
|
11
|
+
score_type: rating
|
|
12
|
+
is_active: true
|
|
13
|
+
- slug: on_time_delivery
|
|
14
|
+
name: On-time Delivery
|
|
15
|
+
description: Consistency when closing tasks and commitments inside the target window.
|
|
16
|
+
weight: 1.2
|
|
17
|
+
score_type: rating
|
|
18
|
+
is_active: true
|
|
19
|
+
- slug: above_expectations
|
|
20
|
+
name: Above Expectations
|
|
21
|
+
description: Initiative to exceed the expected scope with useful impact.
|
|
22
|
+
weight: 1.1
|
|
23
|
+
score_type: points
|
|
24
|
+
is_active: true
|
|
25
|
+
- slug: commitment
|
|
26
|
+
name: Commitment
|
|
27
|
+
description: Ownership, reliability, and follow-through across the workflow.
|
|
28
|
+
weight: 1.3
|
|
29
|
+
score_type: rating
|
|
30
|
+
is_active: true
|
|
31
|
+
- slug: process_methodology
|
|
32
|
+
name: Process and Methodology
|
|
33
|
+
description: Respect for process, documentation, and delivery discipline.
|
|
34
|
+
weight: 1
|
|
35
|
+
score_type: rating
|
|
36
|
+
is_active: true
|
|
37
|
+
- slug: autonomy
|
|
38
|
+
name: Autonomy
|
|
39
|
+
description: Ability to move work forward with the right level of supervision.
|
|
40
|
+
weight: 1.2
|
|
41
|
+
score_type: rating
|
|
42
|
+
is_active: true
|
|
43
|
+
- slug: collaboration
|
|
44
|
+
name: Collaboration
|
|
45
|
+
description: Contribution to team effectiveness, knowledge sharing, and feedback culture.
|
|
46
|
+
weight: 1.3
|
|
47
|
+
score_type: rating
|
|
48
|
+
is_active: true
|
package/hedhog/data/role.yaml
CHANGED
|
@@ -1,7 +1,14 @@
|
|
|
1
|
-
- slug: admin-operations
|
|
2
|
-
name:
|
|
3
|
-
en: Operations Administrator
|
|
4
|
-
pt: Administrador de Operacoes
|
|
5
|
-
description:
|
|
6
|
-
en: Administrator with full access to operations management.
|
|
7
|
-
pt: Administrador com acesso total a gestao de operacoes.
|
|
1
|
+
- slug: admin-operations
|
|
2
|
+
name:
|
|
3
|
+
en: Operations Administrator
|
|
4
|
+
pt: Administrador de Operacoes
|
|
5
|
+
description:
|
|
6
|
+
en: Administrator with full access to operations management.
|
|
7
|
+
pt: Administrador com acesso total a gestao de operacoes.
|
|
8
|
+
- slug: admin-operations-timesheet-approvals
|
|
9
|
+
name:
|
|
10
|
+
en: Timesheet Approvals Manager
|
|
11
|
+
pt: Gerente de Aprovacao de Timesheets
|
|
12
|
+
description:
|
|
13
|
+
en: Can review and approve timesheets submitted by team members.
|
|
14
|
+
pt: Pode revisar e aprovar timesheets submetidos por membros da equipe.
|
package/hedhog/data/route.yaml
CHANGED
|
@@ -1,80 +1,143 @@
|
|
|
1
|
-
- url: /operations
|
|
2
|
-
method: GET
|
|
3
|
-
relations:
|
|
4
|
-
role:
|
|
5
|
-
- where:
|
|
6
|
-
slug: admin
|
|
7
|
-
- where:
|
|
8
|
-
slug: admin-operations
|
|
9
|
-
|
|
10
|
-
- url: /operations/contracts
|
|
11
|
-
method: GET
|
|
12
|
-
relations:
|
|
13
|
-
role:
|
|
14
|
-
- where:
|
|
15
|
-
slug: admin
|
|
16
|
-
- where:
|
|
17
|
-
slug: admin-operations
|
|
18
|
-
|
|
19
|
-
- url: /operations/contracts/:id
|
|
20
|
-
method: GET
|
|
21
|
-
relations:
|
|
22
|
-
role:
|
|
23
|
-
- where:
|
|
24
|
-
slug: admin
|
|
25
|
-
- where:
|
|
26
|
-
slug: admin-operations
|
|
27
|
-
|
|
28
|
-
- url: /operations/projects
|
|
29
|
-
method: GET
|
|
30
|
-
relations:
|
|
31
|
-
role:
|
|
32
|
-
- where:
|
|
33
|
-
slug: admin
|
|
34
|
-
- where:
|
|
35
|
-
slug: admin-operations
|
|
36
|
-
|
|
37
|
-
- url: /operations/projects/:id
|
|
38
|
-
method: GET
|
|
39
|
-
relations:
|
|
40
|
-
role:
|
|
41
|
-
- where:
|
|
42
|
-
slug: admin
|
|
43
|
-
- where:
|
|
44
|
-
slug: admin-operations
|
|
45
|
-
|
|
46
|
-
- url: /operations/allocations
|
|
47
|
-
method: GET
|
|
48
|
-
relations:
|
|
49
|
-
role:
|
|
50
|
-
- where:
|
|
51
|
-
slug: admin
|
|
52
|
-
- where:
|
|
53
|
-
slug: admin-operations
|
|
54
|
-
|
|
55
|
-
- url: /operations/tasks
|
|
56
|
-
method: GET
|
|
57
|
-
relations:
|
|
58
|
-
role:
|
|
59
|
-
- where:
|
|
60
|
-
slug: admin
|
|
61
|
-
- where:
|
|
62
|
-
slug: admin-operations
|
|
63
|
-
|
|
64
|
-
- url: /operations/timesheets
|
|
65
|
-
method: GET
|
|
66
|
-
relations:
|
|
67
|
-
role:
|
|
68
|
-
- where:
|
|
69
|
-
slug: admin
|
|
70
|
-
- where:
|
|
71
|
-
slug: admin-operations
|
|
72
|
-
|
|
73
|
-
- url: /operations/approvals
|
|
74
|
-
method: GET
|
|
75
|
-
relations:
|
|
76
|
-
role:
|
|
77
|
-
- where:
|
|
78
|
-
slug: admin
|
|
79
|
-
- where:
|
|
80
|
-
slug: admin-operations
|
|
1
|
+
- url: /operations
|
|
2
|
+
method: GET
|
|
3
|
+
relations:
|
|
4
|
+
role:
|
|
5
|
+
- where:
|
|
6
|
+
slug: admin
|
|
7
|
+
- where:
|
|
8
|
+
slug: admin-operations
|
|
9
|
+
|
|
10
|
+
- url: /operations/contracts
|
|
11
|
+
method: GET
|
|
12
|
+
relations:
|
|
13
|
+
role:
|
|
14
|
+
- where:
|
|
15
|
+
slug: admin
|
|
16
|
+
- where:
|
|
17
|
+
slug: admin-operations
|
|
18
|
+
|
|
19
|
+
- url: /operations/contracts/:id
|
|
20
|
+
method: GET
|
|
21
|
+
relations:
|
|
22
|
+
role:
|
|
23
|
+
- where:
|
|
24
|
+
slug: admin
|
|
25
|
+
- where:
|
|
26
|
+
slug: admin-operations
|
|
27
|
+
|
|
28
|
+
- url: /operations/projects
|
|
29
|
+
method: GET
|
|
30
|
+
relations:
|
|
31
|
+
role:
|
|
32
|
+
- where:
|
|
33
|
+
slug: admin
|
|
34
|
+
- where:
|
|
35
|
+
slug: admin-operations
|
|
36
|
+
|
|
37
|
+
- url: /operations/projects/:id
|
|
38
|
+
method: GET
|
|
39
|
+
relations:
|
|
40
|
+
role:
|
|
41
|
+
- where:
|
|
42
|
+
slug: admin
|
|
43
|
+
- where:
|
|
44
|
+
slug: admin-operations
|
|
45
|
+
|
|
46
|
+
- url: /operations/allocations
|
|
47
|
+
method: GET
|
|
48
|
+
relations:
|
|
49
|
+
role:
|
|
50
|
+
- where:
|
|
51
|
+
slug: admin
|
|
52
|
+
- where:
|
|
53
|
+
slug: admin-operations
|
|
54
|
+
|
|
55
|
+
- url: /operations/tasks
|
|
56
|
+
method: GET
|
|
57
|
+
relations:
|
|
58
|
+
role:
|
|
59
|
+
- where:
|
|
60
|
+
slug: admin
|
|
61
|
+
- where:
|
|
62
|
+
slug: admin-operations
|
|
63
|
+
|
|
64
|
+
- url: /operations/timesheets
|
|
65
|
+
method: GET
|
|
66
|
+
relations:
|
|
67
|
+
role:
|
|
68
|
+
- where:
|
|
69
|
+
slug: admin
|
|
70
|
+
- where:
|
|
71
|
+
slug: admin-operations
|
|
72
|
+
|
|
73
|
+
- url: /operations/approvals
|
|
74
|
+
method: GET
|
|
75
|
+
relations:
|
|
76
|
+
role:
|
|
77
|
+
- where:
|
|
78
|
+
slug: admin
|
|
79
|
+
- where:
|
|
80
|
+
slug: admin-operations
|
|
81
|
+
|
|
82
|
+
- url: /operations/growth
|
|
83
|
+
method: GET
|
|
84
|
+
relations:
|
|
85
|
+
role:
|
|
86
|
+
- where:
|
|
87
|
+
slug: admin
|
|
88
|
+
- where:
|
|
89
|
+
slug: admin-operations
|
|
90
|
+
|
|
91
|
+
- url: /operations/evaluations
|
|
92
|
+
method: GET
|
|
93
|
+
relations:
|
|
94
|
+
role:
|
|
95
|
+
- where:
|
|
96
|
+
slug: admin
|
|
97
|
+
- where:
|
|
98
|
+
slug: admin-operations
|
|
99
|
+
|
|
100
|
+
- url: /operations/goals
|
|
101
|
+
method: GET
|
|
102
|
+
relations:
|
|
103
|
+
role:
|
|
104
|
+
- where:
|
|
105
|
+
slug: admin
|
|
106
|
+
- where:
|
|
107
|
+
slug: admin-operations
|
|
108
|
+
|
|
109
|
+
- url: /operations/certifications
|
|
110
|
+
method: GET
|
|
111
|
+
relations:
|
|
112
|
+
role:
|
|
113
|
+
- where:
|
|
114
|
+
slug: admin
|
|
115
|
+
- where:
|
|
116
|
+
slug: admin-operations
|
|
117
|
+
|
|
118
|
+
- url: /operations/rewards
|
|
119
|
+
method: GET
|
|
120
|
+
relations:
|
|
121
|
+
role:
|
|
122
|
+
- where:
|
|
123
|
+
slug: admin
|
|
124
|
+
- where:
|
|
125
|
+
slug: admin-operations
|
|
126
|
+
|
|
127
|
+
- url: /operations/career
|
|
128
|
+
method: GET
|
|
129
|
+
relations:
|
|
130
|
+
role:
|
|
131
|
+
- where:
|
|
132
|
+
slug: admin
|
|
133
|
+
- where:
|
|
134
|
+
slug: admin-operations
|
|
135
|
+
|
|
136
|
+
- url: /operations/manager
|
|
137
|
+
method: GET
|
|
138
|
+
relations:
|
|
139
|
+
role:
|
|
140
|
+
- where:
|
|
141
|
+
slug: admin
|
|
142
|
+
- where:
|
|
143
|
+
slug: admin-operations
|
|
@@ -1,56 +1,56 @@
|
|
|
1
|
-
import { formatHours } from '../_lib/utils/format';
|
|
2
|
-
import type {
|
|
3
|
-
Allocation,
|
|
4
|
-
OperationsUser,
|
|
5
|
-
Project,
|
|
6
|
-
} from '../_lib/types/operations';
|
|
7
|
-
|
|
8
|
-
const weekdays = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri'];
|
|
9
|
-
|
|
10
|
-
interface AllocationCalendarProps {
|
|
11
|
-
allocations: Allocation[];
|
|
12
|
-
users: OperationsUser[];
|
|
13
|
-
projects: Project[];
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export function AllocationCalendar({
|
|
17
|
-
allocations,
|
|
18
|
-
users,
|
|
19
|
-
projects,
|
|
20
|
-
}: AllocationCalendarProps) {
|
|
21
|
-
return (
|
|
22
|
-
<div className="overflow-x-auto">
|
|
23
|
-
<div className="min-w-[760px] rounded-xl border">
|
|
24
|
-
<div className="grid grid-cols-6 border-b bg-muted/40 text-sm font-medium">
|
|
25
|
-
<div className="p-3">Team Member</div>
|
|
26
|
-
{weekdays.map((day) => (
|
|
27
|
-
<div key={day} className="border-l p-3">
|
|
28
|
-
{day}
|
|
29
|
-
</div>
|
|
30
|
-
))}
|
|
31
|
-
</div>
|
|
32
|
-
{allocations.map((allocation) => {
|
|
33
|
-
const user = users.find((item) => item.id === allocation.userId);
|
|
34
|
-
const project = projects.find((item) => item.id === allocation.projectId);
|
|
35
|
-
const dailyHours = allocation.weeklyHours / 5;
|
|
36
|
-
|
|
37
|
-
return (
|
|
38
|
-
<div key={allocation.id} className="grid grid-cols-6 border-b text-sm">
|
|
39
|
-
<div className="p-3">
|
|
40
|
-
<p className="font-medium">{user?.name}</p>
|
|
41
|
-
<p className="text-xs text-muted-foreground">{project?.name}</p>
|
|
42
|
-
</div>
|
|
43
|
-
{weekdays.map((day) => (
|
|
44
|
-
<div key={day} className="border-l p-3">
|
|
45
|
-
<div className="rounded-md bg-blue-100 px-2 py-1 text-blue-700">
|
|
46
|
-
{formatHours(dailyHours)}
|
|
47
|
-
</div>
|
|
48
|
-
</div>
|
|
49
|
-
))}
|
|
50
|
-
</div>
|
|
51
|
-
);
|
|
52
|
-
})}
|
|
53
|
-
</div>
|
|
54
|
-
</div>
|
|
55
|
-
);
|
|
56
|
-
}
|
|
1
|
+
import { formatHours } from '../_lib/utils/format';
|
|
2
|
+
import type {
|
|
3
|
+
Allocation,
|
|
4
|
+
OperationsUser,
|
|
5
|
+
Project,
|
|
6
|
+
} from '../_lib/types/operations';
|
|
7
|
+
|
|
8
|
+
const weekdays = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri'];
|
|
9
|
+
|
|
10
|
+
interface AllocationCalendarProps {
|
|
11
|
+
allocations: Allocation[];
|
|
12
|
+
users: OperationsUser[];
|
|
13
|
+
projects: Project[];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export function AllocationCalendar({
|
|
17
|
+
allocations,
|
|
18
|
+
users,
|
|
19
|
+
projects,
|
|
20
|
+
}: AllocationCalendarProps) {
|
|
21
|
+
return (
|
|
22
|
+
<div className="overflow-x-auto">
|
|
23
|
+
<div className="min-w-[760px] rounded-xl border">
|
|
24
|
+
<div className="grid grid-cols-6 border-b bg-muted/40 text-sm font-medium">
|
|
25
|
+
<div className="p-3">Team Member</div>
|
|
26
|
+
{weekdays.map((day) => (
|
|
27
|
+
<div key={day} className="border-l p-3">
|
|
28
|
+
{day}
|
|
29
|
+
</div>
|
|
30
|
+
))}
|
|
31
|
+
</div>
|
|
32
|
+
{allocations.map((allocation) => {
|
|
33
|
+
const user = users.find((item) => item.id === allocation.userId);
|
|
34
|
+
const project = projects.find((item) => item.id === allocation.projectId);
|
|
35
|
+
const dailyHours = allocation.weeklyHours / 5;
|
|
36
|
+
|
|
37
|
+
return (
|
|
38
|
+
<div key={allocation.id} className="grid grid-cols-6 border-b text-sm">
|
|
39
|
+
<div className="p-3">
|
|
40
|
+
<p className="font-medium">{user?.name}</p>
|
|
41
|
+
<p className="text-xs text-muted-foreground">{project?.name}</p>
|
|
42
|
+
</div>
|
|
43
|
+
{weekdays.map((day) => (
|
|
44
|
+
<div key={day} className="border-l p-3">
|
|
45
|
+
<div className="rounded-md bg-blue-100 px-2 py-1 text-blue-700">
|
|
46
|
+
{formatHours(dailyHours)}
|
|
47
|
+
</div>
|
|
48
|
+
</div>
|
|
49
|
+
))}
|
|
50
|
+
</div>
|
|
51
|
+
);
|
|
52
|
+
})}
|
|
53
|
+
</div>
|
|
54
|
+
</div>
|
|
55
|
+
);
|
|
56
|
+
}
|