Alexandre Brandizzi
64246db1f0
fix(workorders): surface service registry query states
2026-09-30 18:10:39 -03:00
Alexandre Brandizzi
4a7da7cbd5
fix(workorders): retain compatible inactive services
2026-09-30 17:51:31 -03:00
Alexandre Brandizzi
690820f0b9
fix(workorders): order service reassignment around type updates
2026-09-30 17:47:27 -03:00
Alexandre Brandizzi
18fefef9a3
fix(workorders): preserve service history on slide-over saves
2026-09-30 17:14:10 -03:00
Alexandre Brandizzi
24107ee3b2
fix(workorders): match renamed service filter aliases
2026-09-30 17:04:44 -03:00
Alexandre Brandizzi
315a26c07d
fix(workorders): use service registry in list controls
2026-09-30 17:01:38 -03:00
Alexandre Brandizzi
64c53e9da0
fix(workorders): preserve explicit no-technician choice
2026-09-29 20:06:05 -03:00
Alexandre Brandizzi
55b5441d71
refactor(work-orders): keep technician assignment paths maintainable
2026-09-29 19:26:34 -03:00
Alexandre Brandizzi
bfdc2dbdec
fix(work-orders): retain technician state across editors
2026-09-29 18:42:19 -03:00
Alexandre Brandizzi
5adde3723b
fix(work-orders): preserve explicit empty technician assignment
2026-09-29 18:22:30 -03:00
Alexandre Brandizzi
7d5d015602
fix: require undated drafts for Pending status
2026-09-29 13:04:51 -03:00
Alexandre Brandizzi
b6d5ad8a1e
fix(work-orders): hide Pending from existing status menus
2026-09-29 11:28:26 -03:00
Alexandre Brandizzi
73c7094102
Merge pull request #275 from Sea-Haven-Industries/feat/ab/sh-335-wo-site-dialog
...
Frontend checks / static (push) Waiting to run
Frontend checks / build (push) Waiting to run
Frontend checks / unit (push) Waiting to run
Frontend checks / Visual regression (push) Waiting to run
Frontend checks / browser-smoke (push) Waiting to run
Frontend checks / governance (push) Waiting to run
Frontend checks / ci-complete (push) Blocked by required conditions
Deploy Web / Resolve target (push) Waiting to run
Deploy Web / Deploy SPA to (push) Blocked by required conditions
Work Order Site dialog saves contacts and notes to the site
2026-09-28 23:45:53 +00:00
Alexandre Brandizzi
301fe44b0c
fix(workorders): Site dialog loads legacy site contacts and locks fields while saving
...
A site saved before the contacts list existed maps with no contacts, only
the legacy contact/phone fields. The site-record sync read the contacts
list alone, so the dialog blanked the POC, blocked a notes-only Save until
the contact was retyped, and when the work order had no POC the legacy
autofill made the diff report a contact edit nobody made. The legacy
contact is now the site's main contact for display, baseline and request.
Save sends the values it had when clicked, so the dialog's fields are now
disabled while the site update is in flight instead of accepting edits
that neither save would include.
The site-update mutation already toasts its own failure, so it sets
meta.suppressErrorToast and the global mutation toast no longer repeats it.
2026-09-25 19:52:03 -03:00
Alexandre Brandizzi
6a6d519ed7
Merge pull request #276 from Sea-Haven-Industries/fix/ab/sh-403-reset-code-hardening
...
Frontend checks / static (push) Has been cancelled
Frontend checks / build (push) Has been cancelled
Frontend checks / unit (push) Has been cancelled
Frontend checks / Visual regression (push) Has been cancelled
Frontend checks / browser-smoke (push) Has been cancelled
Frontend checks / governance (push) Has been cancelled
Deploy Web / Resolve target (push) Has been cancelled
Frontend checks / ci-complete (push) Has been cancelled
Deploy Web / Deploy SPA to (push) Has been cancelled
fix(auth): send reset email and code in the request body
2026-09-25 22:21:20 +00:00
Alexandre Brandizzi
a554aa049e
Merge pull request #282 from Sea-Haven-Industries/fix/ab/sh-408-has-uplift-live-status
...
fix(work-orders): keep uplift history reachable on closed work orders
2026-09-25 22:21:17 +00:00
Alexandre Brandizzi
810fa5d5b0
Merge pull request #283 from Sea-Haven-Industries/fix/ab/sh-406-no-revoke-auto-approved
...
Hide Revoke from admins on auto-approved uplifts
2026-09-25 22:17:01 +00:00
Alexandre Brandizzi
a27695b217
Merge pull request #274 from Sea-Haven-Industries/feat/ab/sh-385-invite-registration
...
feat(team-members): invite registration wizard and resend invite (SH-385)
2026-09-25 22:16:36 +00:00
Alexandre Brandizzi
a2d03f9461
fix(work-orders): keep uplift history reachable on closed work orders
...
The Uplift column hid its trigger on a Completed or Canceled work order
with no live uplift, so once cancelled/revoked uplifts stop counting as
"has uplift", their read-only history had no way in. The cell now always
opens the uplifts dialog; closed work orders show a dash instead of Manage.
2026-09-25 18:14:53 -03:00
Alexandre Brandizzi
18127c0f30
fix(uplifts): hide Revoke from admins on auto-approved uplifts
...
Admins may revoke only admin-approved uplifts. The Work Order Uplifts
dialog showed Revoke to whoever requested an auto-approved uplift, so an
admin requester saw it and was sent into the optional-reason revoke flow.
2026-09-25 18:14:06 -03:00
Alexandre Brandizzi
dc2565e3fe
feat(comp-doc): paginate the completion document preview into A4 sheets
...
Both the template preview and a work order's completion document render
through the shared frame, which now splits the letterhead and blocks into
A4-sized sheets with the brand bars on every sheet and shows Page X of Y
in the preview pill.
2026-09-25 18:03:33 -03:00
Alexandre Brandizzi
0b654bb07c
Merge remote-tracking branch 'origin/main' into feat/ab/sh-385-invite-registration
...
# Conflicts:
# src/api/api-paths.ts
2026-09-25 17:46:17 -03:00
Alexandre Brandizzi
3b7cf83332
fix(team-members): offer a retry when the invite cannot be checked
...
The invite page showed "invalid or has expired, ask your admin for a new
invite" for any failed resolve call, including offline, timeouts and 5xx.
A member on a flaky connection was sent to their admin for a resend, which
revokes a token that was still valid.
Only the server's invalid_invite answer now ends on "Invite unavailable".
Any other failure shows "Couldn't load your invite" with a Try again
button that re-runs resolve, without a global error toast. Regression
tests cover a network rejection and a 500 followed by a successful retry.
2026-09-25 17:45:08 -03:00
Alexandre Brandizzi
414e584b36
Merge remote-tracking branch 'origin/main' into feat/ab/sh-335-wo-site-dialog
...
# Conflicts:
# src/domain/locations/api/locations-api.ts
# src/domain/locations/types/location.ts
2026-09-25 17:34:41 -03:00
Alexandre Brandizzi
f068beb45e
Merge pull request #277 from Sea-Haven-Industries/fix/ab/sh-402-effective-permissions
...
Frontend checks / static (push) Waiting to run
Frontend checks / build (push) Waiting to run
Frontend checks / unit (push) Waiting to run
Frontend checks / Visual regression (push) Waiting to run
Frontend checks / browser-smoke (push) Waiting to run
Frontend checks / governance (push) Waiting to run
Frontend checks / ci-complete (push) Blocked by required conditions
Deploy Web / Resolve target (push) Waiting to run
Deploy Web / Deploy SPA to (push) Blocked by required conditions
fix(completion-docs): show template actions from the user's effective permissions
2026-09-25 20:31:22 +00:00
Alexandre Brandizzi
06f70c193d
Merge remote-tracking branch 'origin/main' into HEAD
...
# Conflicts:
# src/test/app/(protected)/completion-docs/completion-docs-page.test.tsx
# src/test/app/(protected)/completion-docs/completion-template-dialog.test.tsx
2026-09-25 17:26:10 -03:00
Alexandre Brandizzi
e8cdb9814a
Merge pull request #273 from Sea-Haven-Industries/feat/ab/sh-334-site-delete
...
feat(sites): delete a site from the detail panel with an open work-order warning
2026-09-25 20:22:20 +00:00
Alexandre Brandizzi
8e02031152
Merge pull request #268 from Sea-Haven-Industries/feat/ab/sh-313-completion-templates-page
...
feat(completion-docs): manage completion document templates
2026-09-25 20:18:17 +00:00
Alexandre Brandizzi
2281c7c82d
fix(sites): open the site's board when open work orders exceed the id cap
...
The delete dialog states the server's full open work-order count, but the
server returns at most 200 ids. "View open work orders" navigated with
that capped list, so a site with 240 open work orders showed 200, and an
empty list opened the unfiltered board.
The exact-id link is now used only when the ids cover the whole count.
Otherwise the link opens Work Orders filtered to the site and every open
status across all weeks, the ticket's "board filtered to that site". The
board drilldown now reads a `sites` param for this; `ids` still wins.
2026-09-25 17:10:51 -03:00
Alexandre Brandizzi
85a45e9fc0
Merge pull request #279 from Sea-Haven-Industries/feat/ab/sh-389-rejected-uplift-queue
...
feat(uplifts): add the Rejected archive tab to Uplift Approvals (SH-389)
2026-09-25 20:08:16 +00:00
Alexandre Brandizzi
090c977659
fix(uplifts): report a failed approvals queue once, inline, without the global toast
2026-09-25 17:03:15 -03:00
Alexandre Brandizzi
62664894bd
Merge remote-tracking branch 'origin/main' into feat/ab/sh-335-wo-site-dialog
2026-09-25 17:01:27 -03:00
Alexandre Brandizzi
73f639c271
Merge pull request #269 from Sea-Haven-Industries/feat/ab/sh-322-overdue-type
...
feat(work-orders): send Overdue as its own work order type
2026-09-25 19:57:00 +00:00
Alexandre Brandizzi
7c38ebd579
Merge commit 'd281cbd663b7b4106f104cb40207e4d5d1271387' into HEAD
2026-09-25 16:51:25 -03:00
Alexandre Brandizzi
b53d91b1da
Merge remote-tracking branch 'origin/main' into HEAD
2026-09-25 16:48:47 -03:00
Alexandre Brandizzi
d281cbd663
Merge remote-tracking branch 'origin/main' into HEAD
...
# Conflicts:
# e2e/__screenshots__/dashboard/dashboard.visual.spec.ts/dashboard-admin.png
# e2e/__screenshots__/dashboard/dashboard.visual.spec.ts/dashboard-dispatcher.png
# e2e/__screenshots__/vendors/vendors.visual.spec.ts/vendor-add.png
# e2e/__screenshots__/vendors/vendors.visual.spec.ts/vendor-detail.png
# e2e/__screenshots__/vendors/vendors.visual.spec.ts/vendor-edit.png
# e2e/__screenshots__/vendors/vendors.visual.spec.ts/vendor-empty.png
# e2e/__screenshots__/vendors/vendors.visual.spec.ts/vendor-error.png
# e2e/__screenshots__/vendors/vendors.visual.spec.ts/vendor-filter.png
# e2e/__screenshots__/vendors/vendors.visual.spec.ts/vendor-inactive.png
# e2e/__screenshots__/vendors/vendors.visual.spec.ts/vendor-list.png
# e2e/__screenshots__/vendors/vendors.visual.spec.ts/vendor-mobile-navigation.png
# e2e/__screenshots__/work-orders/work-orders.visual.spec.ts/wo-detail.png
# e2e/__screenshots__/work-orders/work-orders.visual.spec.ts/wo-empty.png
# e2e/__screenshots__/work-orders/work-orders.visual.spec.ts/wo-error.png
# e2e/__screenshots__/work-orders/work-orders.visual.spec.ts/wo-filters.png
# e2e/__screenshots__/work-orders/work-orders.visual.spec.ts/wo-list.png
# e2e/__screenshots__/work-orders/work-orders.visual.spec.ts/wo-mobile-navigation.png
# e2e/__screenshots__/work-orders/work-orders.visual.spec.ts/wo-new.png
2026-09-25 16:46:17 -03:00
Alexandre Brandizzi
403bc66383
Merge pull request #271 from Sea-Haven-Industries/feat/ab/sh-386-password-policy
...
Frontend checks / static (push) Waiting to run
Frontend checks / build (push) Waiting to run
Frontend checks / unit (push) Waiting to run
Frontend checks / Visual regression (push) Waiting to run
Frontend checks / browser-smoke (push) Waiting to run
Frontend checks / governance (push) Waiting to run
Frontend checks / ci-complete (push) Blocked by required conditions
Deploy Web / Resolve target (push) Waiting to run
Deploy Web / Deploy SPA to (push) Blocked by required conditions
feat(account): My Account page with a live password checklist (SH-386)
2026-09-25 16:35:20 +00:00
Alexandre Brandizzi
dcc9429da8
Merge pull request #270 from Sea-Haven-Industries/feat/ab/sh-331-sites-panel
...
feat(sites): Add Site modal and site detail panel with in-place edit
2026-09-25 16:29:09 +00:00
Alexandre Brandizzi
383d5c3c6c
feat(team-members): warn when the invite to a corrected email could not be sent
2026-09-25 12:54:31 -03:00
Alexandre Brandizzi
d5cd0659a2
fix(completion-docs): gate template actions on the user's effective permissions
...
Add Template, Edit and Delete now follow the permissions the server
computes for the signed-in user, role defaults plus their individual
overrides, instead of role defaults alone. The actions stay hidden while
the permissions load or when they fail to load.
2026-09-25 12:34:01 -03:00
Alexandre Brandizzi
ca42d6e59f
fix(team-members): cover mid-wizard invite loss and accept empty invite responses
2026-09-25 12:33:37 -03:00
Alexandre Brandizzi
cccdeceb10
fix(workorders): only edited Site dialog fields follow the site record
2026-09-25 12:32:24 -03:00
Alexandre Brandizzi
976cd908e3
feat(team-members): invite registration wizard and resend invite (SH-385)
2026-09-25 12:26:42 -03:00
Alexandre Brandizzi
73090d05e4
fix(auth): keep change-password failures inline without a global toast
2026-09-25 12:26:31 -03:00
Alexandre Brandizzi
bea3540409
Merge remote-tracking branch 'origin/feat/ab/sh-331-sites-panel' into feat/ab/sh-335-wo-site-dialog
2026-09-25 12:24:54 -03:00
Alexandre Brandizzi
3ab9c9a65b
Merge remote-tracking branch 'origin/feat/ab/sh-331-sites-panel' into feat/ab/sh-334-site-delete
2026-09-25 12:23:27 -03:00
Alexandre Brandizzi
fe0d1a2571
fix(sites): keep the legacy contact name when an update sends no contacts
2026-09-25 12:23:18 -03:00
Alexandre Brandizzi
297830ed35
fix(auth): send reset email and code in the request body
...
The verify call now carries the email the code was issued to, which the
API requires, and neither call puts the email or code in the URL.
2026-09-25 12:22:55 -03:00
Alexandre Brandizzi
7eaf6bca18
Save Work Order Site dialog contact and notes edits to the site record
2026-09-25 12:19:31 -03:00
Alexandre Brandizzi
5bcc0f7081
feat(sites): delete a site from the detail panel with an open work-order warning
...
- Delete sits in the view-mode footer for Admin and Scheduler only; the row delete icon is gone
- Confirmation states the open work-order count and links to exactly those work orders
- Sites without open work orders confirm with the plain permanent-removal copy
- A server refusal keeps the site and shows the error
2026-09-25 11:59:08 -03:00