Commit graph

1133 commits

Author SHA1 Message Date
Alexandre Brandizzi
92fa61ad57
Merge branch 'dev' into feat/ab/sh-195-date-header-tooltips 2026-09-16 18:20:16 -03:00
Alexandre Brandizzi
46f90abf8a
Merge branch 'dev' into feat/ab/sh-197-inline-create-fields 2026-09-16 18:18:14 -03:00
Alexandre Brandizzi
d872e08a2b
Merge branch 'dev' into fix/ab/sh-341-generate-completes-work-order 2026-09-16 18:16:14 -03:00
Alexandre Brandizzi
71432ac586
Merge branch 'dev' into fix/ab/sh-357-sh-358-status-transitions 2026-09-16 18:08:14 -03:00
Alexandre Brandizzi
ad1fd7ebf9
Merge branch 'dev' into fix/ab/sh-361-sh-363-audit-log-entries 2026-09-16 18:08:11 -03:00
Codex Review Integration
a9d8416f0f fix(work-orders): prefer stored media over a zero detail media count
The detail endpoint's info inherits MediaCount from the board row DTO but
the service never sets it, so it serializes as 0. The previous guard trusted
any numeric value and returned that 0, leaving the slide-over completion gate
reporting "At least 1 photo" even after an upload. Take the larger of the
reported count and the stored (non-legacy) attachments so a positive API
count still wins while a spurious or omitted 0 no longer masks present media.
Dropping the unused mapped-row argument also removes a flat-payload path that
would have counted legacy items.
2026-09-16 18:05:50 -03:00
Adam Moussa
e95a720630
Merge branch 'dev' into feat/ab/sh-222-create-error-copy 2026-09-16 16:46:27 -04:00
Adam Moussa
74765427bc
Merge branch 'dev' into fix/ab/sh-339-wizard-complete-image 2026-09-16 16:36:39 -04:00
Codex Review Integration
e65049691c chore(work-orders): remove ticket keys from lifecycle docs 2026-09-16 17:01:58 -03:00
Codex Review Integration
196ec8a836 fix(work-orders): make date help controls accessible 2026-09-16 16:56:26 -03:00
Codex Review Integration
4e54aa7cfe chore(work-orders): remove ticket keys from completion docs 2026-09-16 16:56:26 -03:00
Codex Review Integration
c75f8b6239 chore(work-orders): remove ticket keys from audit docs 2026-09-16 16:56:26 -03:00
Codex Review Integration
a75543342d chore(work-orders): remove ticket key from mapper docs 2026-09-16 16:56:26 -03:00
Codex Review Integration
712d8e0dc6 fix(work-orders): clear stale technician drafts on selection changes 2026-09-16 16:50:26 -03:00
Codex Review Integration
38ea40d6ca Merge origin/dev into feat/ab/sh-278-vendor-service-area 2026-09-16 16:08:12 -03:00
Codex Review Integration
2b2b24f2e3 fix(work-orders): clarify search scope with advanced filters 2026-09-16 15:42:01 -03:00
Codex Review Integration
8774b2e0a6 fix(work-orders): render PM extra media in the gallery (SH-371)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 15:23:24 -03:00
Codex Review Integration
9225f2345c fix(work-orders): gate completion document button on service selection (SH-369)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 15:23:17 -03:00
Codex Review Integration
cd5d4ad1d8 fix(work-orders): keep wizard vendor notes bound to the selected company
Late roster data no longer overwrites notes typed for the current selection.
The notes baseline is keyed by vendor, so a save never patches a previous
company. Changing the primary service clears leftover notes, and a save
with a missing baseline reads the current roster first. Also drops ticket
keys from shipped comments.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 15:18:06 -03:00
Codex Review Integration
4eb929e1c8 test(work-orders): remove query devtools overlay after navigation
Also drops ticket keys from shipped comments and test names.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 15:15:52 -03:00
Codex Review Integration
59a5bc9252 test(work-orders): clear query devtools overlay in mobile upload journey
Also drops ticket keys from shipped comments and test names.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 15:15:03 -03:00
Alexandre Brandizzi
2d8a35a08a
Merge branch 'dev' into fix/ab/sh-359-wo-board-column-order 2026-09-16 15:08:07 -03:00
Codex Review Integration
62825d2c70 chore(workorders): remove ticket keys from column comments 2026-09-16 15:05:25 -03:00
Alexandre Brandizzi
1f405bbcaf
Merge branch 'dev' into fix/ab/sh-356-due-date-after-schedule 2026-09-16 15:03:34 -03:00
Alexandre Brandizzi
07734d8361
SH-138: manage ordered site contacts (#191)
Some checks are pending
Frontend checks / Build and test (push) Waiting to run
Frontend checks / governance (push) Waiting to run
Frontend checks / Visual regression (push) Waiting to run
Deploy dev content / Deploy shoc-frontend-new-dev through Terraform (push) Waiting to run
* feat(locations): derive site areas from state

* chore(locations): keep ticket keys out of source comments

* feat(locations): manage ordered site contacts

---------

Co-authored-by: Codex Review Integration <codex-review@local.invalid>
2026-09-16 14:53:58 -03:00
Alexandre Brandizzi
30c43a4d86
SH-281: group vendor directory rows by company (#188)
* fix(vendors): add accessible trade overflow tooltip

* fix(vendors): add accessible trade overflow tooltip

* refactor(vendors): satisfy row maintainability gate

* feat(vendors): group directory rows by company

* chore(vendors): trigger SH-281 review checks

* test(vendors): align company directory visuals

* test(vendors): complete company visual baselines

* fix(vendors): keep empty states in viewport

* test(vendors): align centered empty baseline

* fix(vendors): use grouped directory endpoint

* test(vendors): follow grouped directory endpoint

* test(vendors): refresh combined visual snapshots

---------

Co-authored-by: Codex Review Integration <codex-review@local.invalid>
2026-09-16 14:40:24 -03:00
Codex Review Integration
96a066e98f fix(workorders): satisfy SH-356 maintainability gate 2026-09-16 14:30:39 -03:00
Codex Review Integration
49be7ffbc6 test(work-orders): avoid unsupported array at helper 2026-09-16 13:59:22 -03:00
Codex Review Integration
5d53b8e810 fix(api): send multipart uploads with their Content-Type (SH-368)
The shared ky instance declared Content-Type: application/json for every
request. Ky bakes instance headers into the Request it builds, so a FormData
body left with that header, and the beforeRequest hook that deleted it ran
after the boundary had already been dropped: the multipart body went out
with no Content-Type at all. ASP.NET then cannot bind [FromForm] fields, so
the completion-doc upload (dialog and slide-over "Upload signed PDF")
returned 400 "The file field is required.", media category updates arrived
without category or workOrderVersion, and the legacy edit form post lost its
fields.

Drop the instance-wide Content-Type. Ky still sets application/json for
json bodies, and the runtime sets multipart/form-data with the boundary.

The old unit test tolerated a missing header, and ran under jsdom whose
FormData the Node Request cannot serialize. It now runs in the node
environment and requires a multipart Content-Type whose boundary matches the
body. A Pixel 7 viewport e2e covers the signed PDF upload and JPG/MP4/MOV
media upload plus categorize.
2026-09-16 13:39:20 -03:00
Codex Review Integration
fdc275ab9a test(work-orders): cover the Due Date floor in the wizard 2026-09-16 13:35:12 -03:00
Codex Review Integration
b4d2d69abe fix(work-orders): keep Due Date on or after Schedule On 2026-09-16 13:32:44 -03:00
Codex Review Integration
4649fd00da fix(work-orders): place Completed Date before Comp Doc on the board 2026-09-16 13:21:48 -03:00
Codex Review Integration
7c090571c5 test(work-orders): cover wizard vendor company notes journey 2026-09-16 13:20:32 -03:00
Codex Review Integration
31982f9baa fix(work-orders): save wizard vendor notes to the vendor company 2026-09-16 13:17:02 -03:00
Codex Review Integration
ee95847354 fix(work-orders): register inline technicians through the additive vendor roster 2026-09-16 13:16:44 -03:00
Codex Review Integration
050e3f5134 test(work-orders): cover SH placeholder WO numbers on the board 2026-09-16 13:13:35 -03:00
Codex Review Integration
45b988c522 fix(work-orders): accept SH placeholder numbers in the inline WO number field 2026-09-16 13:12:24 -03:00
Codex Review Integration
dace388633 test(work-orders): update empty-state baseline for week search scope label 2026-09-16 12:30:17 -03:00
Codex Review Integration
e13dede629 feat(work-orders): add date column header tooltips
Add a help icon with hover/focus tooltip copy to the Schedule On, Due
Date, and Completed Date board table headers so dispatchers can see
what each date drives without opening a row (SH-195).
2026-09-16 12:05:50 -03:00
Codex Review Integration
88ba480522 test(vendors): refresh visual baselines for Service Area 2026-09-16 12:05:07 -03:00
Codex Review Integration
2bff7176be feat(vendors): add Service Area assignment, filter and column
Replace the free-text vendor State with a closed 50-state list, add an
admin-only Service Area select below Notes, a Service Area advanced filter
(stable ids plus Unassigned) and a Service Area directory column.
2026-09-16 11:55:40 -03:00
Codex Review Integration
f6a22a9096 fix(work-orders): offer only valid manual status transitions inline (SH-357, SH-358)
The inline status control no longer offers the automatic Incomplete and
Scheduled states or the work order's current status. Inline create keeps its
explicit Incomplete/Pending/Scheduled creation list.
2026-09-16 11:43:34 -03:00
Codex Review Integration
e46e42df69 fix(work-orders): show full audit timestamps and previous type values (SH-361, SH-363)
Audit Log entries now show date and time for every entry instead of a
time-only stamp for manual changes. Type and Severity entries read
'Changed Type from X to Y', a severity cleared by a type correction reads
'from SEV N to —', and the generic fallback no longer renders a raw
FieldChanged action name.
2026-09-16 11:43:34 -03:00
Codex Review Integration
09636ef590 fix(work-orders): complete the work order when its completion document is generated (SH-341)
Generating or uploading the completion document now moves a closable work
order to Completed without the manual confirmation, as SH-115 requires. The
SH-114 closability gate is evaluated on the row the server returned after the
document save; Save draft, Not required, Past Due, Completed and Canceled rows
are never auto-completed. The follow-up status patch uses that row's
rowVersion so it does not conflict with the document save.
2026-09-16 11:43:33 -03:00
Codex Review Integration
aa583858ba fix(work-orders): scope keyword search to the week and keep filters global
Show the Searching within [week] indicator while a keyword is typed and
stop sending the week-scoped keyword to Advanced Filters search. Refs SH-194.
2026-09-16 11:18:12 -03:00
Codex Review Integration
3ad07c9e10 fix(work-orders): keep backend validation text out of create error toasts
Board create failures toasted the backend message verbatim, exposing
field names such as siteCode and vendorId from the inline row and the
wizard. Map known codes to product copy and fall back to generic copy
for every other failure.
2026-09-16 11:17:37 -03:00
Codex Review Integration
bd69350a7c feat(work-orders): render inline create cells as fields with required asterisks
Wrap every inline creation cell in the bordered field box used by Site and
WO #, top-aligned like the prototype inline row. Show a persistent asterisk
on the empty WO # placeholder, the Site label in the create site dialog,
and the POC name and phone inputs in the create site dialog and wizard.
2026-09-16 11:13:17 -03:00
Codex Review Integration
f48342f268 test(work-orders): guard SH-235 severity tooltip and escalation toast rules 2026-09-16 11:01:06 -03:00
Codex Review Integration
e7f8772802 fix(work-orders): count detail media for slide-over completion gate
Detail info omits MediaCount, so the slide-over closability gate always
reported a missing photo on Reactive/Emergency work orders. Refs SH-339.
2026-09-16 10:56:17 -03:00
Codex Review Integration
83df262ab6 Merge remote-tracking branch 'origin/dev' into feat/ab/sh-281-company-directory 2026-09-15 19:12:21 -03:00