Alexandre Brandizzi
468522c3f7
fix(uplift): resolve linked-only work order in queue list read
...
GetPagedAsync resolved WorkOrderNumber/Site/Service, WorkOrderClosed, and
WorkOrderId only through Dispatch.WorkOrderId, so a dispatch linked to its
work order solely through DispatchWorkOrders surfaced blank WO context,
workOrderClosed:false, and zero exposure. Resolve the effective work order
using the same primary-plus-linked convention as GetWorkOrderIdForUpliftAsync
and GetApprovedExposureForWorkOrdersAsync via a single work-order lookup.
2026-09-17 03:47:09 -03:00
Alexandre Brandizzi
564bd70301
fix(dashboard): scope Trend by picker and admit Scheduler to dispatcher picker
...
ResolveDispatcherScope now admits the Scheduler role, which owns the
viewAllDispatchersOnDashboard permission, so it can load Stats, Workload,
Performance, Regions and Trend instead of being denied.
GetTrendAsync now resolves scope via the shared ResolveDispatcherScope so a
picker DispatcherId selection scopes Trend consistently with the other
endpoints and unauthorized roles fail closed.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-09-17 03:37:36 -03:00
Alexandre Brandizzi
146fe6fdb0
style: satisfy dotnet format whitespace gate for region board files
...
Break collection initializer entries onto one line each in
WorkOrderBoardRegions and WorkOrderBoardSearchTests so the changed-file
formatting gate (dotnet format --verify-no-changes) passes.
2026-09-17 02:26:19 -03:00
Alexandre Brandizzi
5c93e4ecec
Merge remote-tracking branch 'origin/dev' into feat/ab/sh-348-region-filter
...
# Conflicts:
# SeaHaven.Services/Helpers/DashboardRegions.cs
2026-09-17 02:20:44 -03:00
Alexandre Brandizzi
f564e1b112
Merge remote-tracking branch 'origin/dev' into feat/ab/sh-347-dashboard-contract
...
# Conflicts:
# Api.SeaHavenIndustries.Tests/DashboardServiceTests.cs
2026-09-17 02:18:22 -03:00
Alexandre Brandizzi
daf3ed9210
fix(team-members): map duplicate-email race to conflict error (SH-325)
...
CreateAsync checks FindByEmailAsync and then inserts, so two concurrent
creates with the same email can both pass the check and hit the unique
user-name index. That DbUpdateException was unhandled and surfaced as a
500. Catch it at the CreateAsync call and return the existing
"Email is already in use." message, matching the check-then-insert
converge pattern already used by SetOverrideCoreAsync.
2026-09-17 01:40:40 -03:00
Alexandre Brandizzi
782165a4cf
Merge pull request #133 from Sea-Haven-Industries/feat/ab/sh-348-dashboard-region
...
Validate and deploy / Validate deployable source bundle (push) Waiting to run
Validate and deploy / Deploy shoc-backend-dev through Terraform (push) Blocked by required conditions
Validate and deploy / Deploy shoc-backend-staging to Elastic Beanstalk (push) Blocked by required conditions
SH-348: Add dashboard region metrics
2026-09-17 01:36:09 -03:00
Alexandre Brandizzi
7e06d1c51b
Merge branch 'dev' into feat/ab/sh-348-dashboard-region
2026-09-17 01:30:08 -03:00
Alexandre Brandizzi
e07f04a6af
Merge pull request #131 from Sea-Haven-Industries/feat/ab/sh-187-service-picker
...
SH-187: Connect work-order service selection to the registry
2026-09-17 01:28:09 -03:00
Alexandre Brandizzi
b10956d731
Merge branch 'dev' into feat/ab/sh-348-dashboard-region
2026-09-17 01:24:07 -03:00
Adam Moussa
7d728d9101
Merge branch 'dev' into feat/ab/sh-187-service-picker
2026-09-17 00:20:59 -04:00
Alexandre Brandizzi
da80595321
Merge pull request #125 from Sea-Haven-Industries/feat/ab/sh-303-services-registry
...
SH-303: Add the global Services registry API
2026-09-17 01:20:08 -03:00
Alexandre Brandizzi
2e983b1f6a
Merge branch 'dev' into feat/ab/sh-303-services-registry
2026-09-17 01:12:07 -03:00
Alexandre Brandizzi
039a9c8d7e
style(tests): fix whitespace formatting in UpliftQueueReadTests
...
The Document(...) helper object initializer was under-indented, failing the G3 dotnet format changed-file gate in the architecture and deployable-bundle checks. Reindented to satisfy dotnet format --verify-no-changes.
2026-09-17 00:08:42 -03:00
albrand
dfd248cfcb
feat(uplifts): expose queue closed flag, attachments, decider, pending exposure (SH-207, SH-208)
...
The approvals queue frontend needs four list-contract additions the read
contract PRs do not carry yet: workOrderClosed so the Approved tab can
disable Revoke on terminal work orders (mirroring the SH-196 revoke
guard), attachmentCount from non-deleted UpliftEvidence documents so the
+N chip renders, decidedByName for the Approved By column, and the
queue-wide pendingExposureTotal for the header total.
2026-09-16 22:48:47 -03:00
Alexandre Brandizzi
e0ec8dbc73
Merge remote-tracking branch 'origin/feat/ab/sh-207-uplift-queue' into feat/ab/sh-210-uplift-decisions
2026-09-16 22:48:17 -03:00
Alexandre Brandizzi
fbae09136b
fix(uplifts): update test data service contract (SH-208)
2026-09-16 22:48:07 -03:00
Alexandre Brandizzi
1b73593189
style(uplifts): format queue contract tests (SH-208)
2026-09-16 22:43:51 -03:00
Alexandre Brandizzi
b5e8f038c1
test(uplifts): cover queue contract fields (SH-208)
...
Behavior coverage for the new queue read fields so the contract cannot
regress silently: workOrderClosed follows terminal lifecycle statuses,
decidedByName resolves from the deciding user, attachmentCount counts
active dispatch documents, and pendingExposureTotal sums granted amounts
across all pending requests independent of paging.
2026-09-16 22:38:23 -03:00
Alexandre Brandizzi
bd98ea5629
merge: carry approval queue contract fields into decisions
2026-09-16 22:32:35 -03:00
Alexandre Brandizzi
e0e45d5ed3
feat(uplifts): expose approval queue contract fields (SH-208)
2026-09-16 22:32:23 -03:00
Alexandre Brandizzi
65b04687bc
fix(work-orders): honor edited service labels
2026-09-16 22:30:32 -03:00
Alexandre Brandizzi
b3e9a2eec3
fix(services): allow admins to reactivate services
2026-09-16 22:30:32 -03:00
Alexandre Brandizzi
162bb4d80e
merge: reconcile dashboard review updates
2026-09-16 22:24:20 -03:00
Alexandre Brandizzi
e5e4cd0b58
merge: carry uplift queue corrections into decisions
...
# Conflicts:
# Api.SeaHavenIndustries.Tests/UpliftQueueReadTests.cs
# SeaHaven.DataServices/Implementation/UpliftDataService.cs
2026-09-16 22:21:21 -03:00
Alexandre Brandizzi
316d1e6a63
fix(uplifts): correct queue exposure projections (SH-210)
2026-09-16 22:19:43 -03:00
Alexandre Brandizzi
60e006e8d7
fix(uplifts): calculate granted exposure amounts (SH-207)
2026-09-16 22:17:59 -03:00
Alexandre Brandizzi
dab39e78be
Merge remote-tracking branch 'origin/dev' into feat/ab/sh-348-dashboard-region
2026-09-16 22:06:49 -03:00
Alexandre Brandizzi
6edcd2a463
Merge pull request #138 from Sea-Haven-Industries/feat/ab/sh-353-dashboard-kpis-stacked
...
Validate and deploy / Validate deployable source bundle (push) Waiting to run
Validate and deploy / Deploy shoc-backend-dev through Terraform (push) Blocked by required conditions
Validate and deploy / Deploy shoc-backend-staging to Elastic Beanstalk (push) Blocked by required conditions
SH-353: Expose dashboard KPI counts
2026-09-16 22:02:17 -03:00
Alexandre Brandizzi
bdfe666b8d
chore(team-members): sync SH-326 with reviewed branch
2026-09-16 21:56:53 -03:00
Alexandre Brandizzi
8acc580c5b
Merge branch 'dev' into feat/ab/sh-353-dashboard-kpis-stacked
2026-09-16 21:56:23 -03:00
Alexandre Brandizzi
a3a4ddde2a
Merge pull request #143 from Sea-Haven-Industries/feat/ab/sh-330-sites-list
...
SH-330: support site registry queries
2026-09-16 21:54:24 -03:00
Alexandre Brandizzi
db8470fbf9
chore(team-members): sync with dev (SH-325)
2026-09-16 21:52:44 -03:00
Alexandre Brandizzi
a0b9fabb69
fix(team-members): preserve update semantics and validate identity results (SH-326)
2026-09-16 21:48:21 -03:00
Alexandre Brandizzi
b9c916cb22
feat(team-members): add member detail editing (SH-326)
2026-09-16 21:41:55 -03:00
Alexandre Brandizzi
8a00476d38
feat(team-members): support pending member creation (SH-325)
2026-09-16 21:41:55 -03:00
Alexandre Brandizzi
69798b3e86
feat(permissions): protect configured account owner (SH-329)
2026-09-16 21:40:22 -03:00
Alexandre Brandizzi
dca8d898cb
feat(dashboard): add scoped metrics contract (SH-347)
2026-09-16 21:37:17 -03:00
Alexandre Brandizzi
738c9eaf45
feat(work-orders): add region filtering (SH-348)
2026-09-16 21:27:05 -03:00
Adam Moussa
f6bd779fe0
Merge branch 'dev' into feat/ab/sh-353-dashboard-kpis-stacked
2026-09-16 20:00:32 -04:00
Adam Moussa
e7e196caba
Merge branch 'dev' into feat/ab/sh-329-account-owner
2026-09-16 20:00:18 -04:00
Alexandre Brandizzi
9bf45d65ff
Merge branch 'dev' into feat/ab/sh-330-sites-list
2026-09-16 20:58:16 -03:00
Alexandre Brandizzi
db9a94f335
Merge pull request #132 from Sea-Haven-Industries/feat/ab/sh-328-permission-overrides
...
Validate and deploy / Validate deployable source bundle (push) Waiting to run
Validate and deploy / Deploy shoc-backend-dev through Terraform (push) Blocked by required conditions
Validate and deploy / Deploy shoc-backend-staging to Elastic Beanstalk (push) Blocked by required conditions
SH-328: expose per-person permission overrides
2026-09-16 20:52:16 -03:00
Alexandre Brandizzi
660ebac628
feat(locations): support site registry queries (SH-330)
2026-09-16 20:45:15 -03:00
Alexandre Brandizzi
21b7083160
Merge branch 'dev' into feat/ab/sh-328-permission-overrides
2026-09-16 20:44:20 -03:00
Alexandre Brandizzi
1c0865ae15
Merge pull request #136 from Sea-Haven-Industries/feat/ab/sh-350-dashboard-trend
...
SH-350: Add dashboard trend metrics
2026-09-16 20:42:14 -03:00
Alexandre Brandizzi
63bda30595
Merge branch 'dev' into feat/ab/sh-328-permission-overrides
2026-09-16 20:36:19 -03:00
Alexandre Brandizzi
c605ceefae
Merge branch 'dev' into feat/ab/sh-348-dashboard-region
2026-09-16 20:36:16 -03:00
Alexandre Brandizzi
0bda64efc4
Merge branch 'dev' into feat/ab/sh-350-dashboard-trend
2026-09-16 20:36:14 -03:00
Alexandre Brandizzi
452d666547
Merge pull request #142 from Sea-Haven-Industries/fix/ab/sh-374-getworkorderbyid-binding
...
SH-374: return the work order from GetWorkorderById?id=
2026-09-16 20:34:16 -03:00