Arthur Bassi
6c826b4cc6
Merge pull request #88 from Sea-Haven-Industries/feat/sh-221-persist-location-accountid
...
Validate and deploy dev / Validate deployable source bundle (push) Waiting to run
Validate and deploy dev / Deploy shoc-backend to Elastic Beanstalk dev (push) Blocked by required conditions
feat(locations): persist accountId on create and update
2026-08-26 15:00:46 -03:00
Arthur Bassi
0f2e0dacc7
fix(locations): authorize location owner on every board update
...
Reject account-scoped updates of foreign or orphan locations even when accountId is omitted, matching fail-closed tenant scope.
2026-08-26 14:38:34 -03:00
Arthur Bassi
4e4bb0ca90
fix(locations): reject unparseable accountId and forward cancellation
...
Blank accountId stays optional; nonblank parse failures return 400. Account lookup uses ExistsActiveAsync with the request token.
2026-08-26 14:18:38 -03:00
Arthur Bassi
2718fdd294
fix(locations): gate account assignment by scope and active accounts
...
Reject soft-deleted accounts and stop account-scoped callers from assigning or stealing locations across tenants.
2026-08-26 14:16:59 -03:00
Arthur Bassi
2be36d4eac
feat(locations): persist accountId on create and update
...
Allow location CRUD to stamp Locations.AccountId after account existence checks so board create can resolve tenant scope.
2026-08-26 14:03:12 -03:00
Arthur Bassi
5a70d5004e
Merge pull request #87 from Sea-Haven-Industries/feat/sh-221-location-owned-account
...
Validate and deploy dev / Validate deployable source bundle (push) Waiting to run
Validate and deploy dev / Deploy shoc-backend to Elastic Beanstalk dev (push) Blocked by required conditions
feat(work-orders): stamp board create account from location
2026-08-26 10:34:14 -03:00
Arthur Bassi
244a489fb2
fix(tests): create ephemeral LocalDB database before migration apply
2026-08-26 10:20:14 -03:00
Arthur Bassi
2e56ec7678
fix(work-orders): keep location account server-owned and forward create cancellation
...
Stop client writes from changing Locations.AccountId, make the SH-221 migration discoverable, and thread the board-create CancellationToken through lookup and persistence.
2026-08-26 10:00:02 -03:00
Arthur Bassi
61923b2a7d
feat(work-orders): stamp board create account from location
...
Org-wide create no longer depends on customer name. POST /workorders/board requires locationId and stamps WorkOrder.AccountId from Location.AccountId.
2026-08-26 09:12:48 -03:00
Alexandre Brandizzi
5857f8483a
fix(vendors): complete directory contact fallbacks ( #86 )
...
Validate and deploy dev / Validate deployable source bundle (push) Waiting to run
Validate and deploy dev / Deploy shoc-backend to Elastic Beanstalk dev (push) Blocked by required conditions
* fix(vendors): complete directory contact fallbacks
* fix(vendors): normalize location labels
* fix(vendors): keep company location authoritative
2026-08-25 19:33:47 -04:00
Arthur Bassi
df01ded3ce
Merge pull request #80 from Sea-Haven-Industries/feat/sh-117-aveta-required
...
Validate and deploy dev / Validate deployable source bundle (push) Waiting to run
Validate and deploy dev / Deploy shoc-backend to Elastic Beanstalk dev (push) Blocked by required conditions
feat(work-orders): persist avetaRequired on board create, patch, and search
2026-08-25 18:13:26 -03:00
Arthur Bassi
14b85c64a8
Merge branch 'dev' into feat/sh-117-aveta-required
2026-08-25 17:19:30 -03:00
Arthur Bassi
238f8c8e60
Merge pull request #81 from Sea-Haven-Industries/feat/board-week-only-pagination
...
Validate and deploy dev / Validate deployable source bundle (push) Waiting to run
Validate and deploy dev / Deploy shoc-backend to Elastic Beanstalk dev (push) Blocked by required conditions
fix(work-orders): keep GET /board to scheduled-in-week rows only
2026-08-25 17:11:05 -03:00
Arthur Bassi
7c7c6bc525
feat(work-orders): persist Aveta Extra Docs media category
...
Round-trip category 5 on media POST/PATCH/GET and project hasAvetaDocument so pending vs attached survives reopen.
2026-08-25 15:10:45 -03:00
Arthur Bassi
7245897d56
Merge branch 'dev' into feat/sh-117-aveta-required
2026-08-25 12:12:07 -03:00
Arthur Bassi
3a7a1b1f09
docs(work-orders): drop ticket key from AvetaRequired xml comment
2026-08-25 12:03:19 -03:00
Arthur Bassi
12dc3d51d9
Merge branch 'dev' into feat/board-week-only-pagination
2026-08-25 12:01:19 -03:00
Alexandre Brandizzi
8e749047a3
Merge pull request #78 from Sea-Haven-Industries/fix/ab/sh-261-vendor-list-contact
...
Validate and deploy dev / Validate deployable source bundle (push) Waiting to run
Validate and deploy dev / Deploy shoc-backend to Elastic Beanstalk dev (push) Blocked by required conditions
[SH-261] Show vendor list location and email
2026-08-25 11:58:22 -03:00
Arthur Bassi
437a8dae5b
Merge branch 'dev' into feat/board-week-only-pagination
2026-08-25 11:54:57 -03:00
Alexandre Brandizzi
5343931a62
Merge branch 'dev' into fix/ab/sh-261-vendor-list-contact
2026-08-25 11:52:46 -03:00
Alexandre Brandizzi
abff9eeae8
Merge pull request #84 from Sea-Haven-Industries/chore/albrand/cdk-dependency-upgrades-20260825
...
chore(deps): upgrade AWS CDK library and CLI
2026-08-25 11:44:53 -03:00
Arthur Bassi
f17f8562e8
test(work-orders): cover unassigned inline board and global search
2026-08-25 11:15:35 -03:00
Alexandre Brandizzi
98eb546738
chore(deps): upgrade AWS CDK library and CLI
2026-08-25 05:38:14 -03:00
Arthur Bassi
04958e6121
fix(work-orders): keep GET /board to scheduled-in-week rows only (SH-165)
2026-08-24 18:29:18 -03:00
Arthur Bassi
15315edf08
feat(work-orders): persist avetaRequired on board create, patch, and search
...
Expose avetaRequired and originalDate on list rows so the frontend can round-trip the Aveta checkbox and Reschedule hover.
2026-08-24 15:14:31 -03:00
Arthur Bassi
424d0b88bc
Merge pull request #79 from Sea-Haven-Industries/feat/sh-115-completed-selective-lock
...
Validate and deploy dev / Validate deployable source bundle (push) Waiting to run
Validate and deploy dev / Deploy shoc-backend to Elastic Beanstalk dev (push) Blocked by required conditions
feat(work-orders): allow selective mutations on completed work orders
2026-08-24 10:23:33 -03:00
Arthur Bassi
4b8a08fb10
fix(work-orders): block comment creation on canceled work orders
2026-08-24 09:59:13 -03:00
Arthur Bassi
f47264ec4d
feat(work-orders): allow selective mutations on completed work orders
...
Permit flagColor, comments, and Extra media after completion while keeping Canceled fully locked.
2026-08-24 09:31:30 -03:00
Alexandre Brandizzi
9c3da9b5e3
fix(vendors): keep location fallback atomic
2026-08-21 09:40:51 -03:00
Alexandre Brandizzi
d0a90483b3
fix(vendors): show canonical list contact data
2026-08-21 09:32:58 -03:00
Alexandre Brandizzi
7a33928779
Merge pull request #77 from Sea-Haven-Industries/fix/ab/sh-257-vendor-notes-limit
...
Validate and deploy dev / Validate deployable source bundle (push) Has been cancelled
Validate and deploy dev / Deploy shoc-backend to Elastic Beanstalk dev (push) Has been cancelled
fix(vendors): enforce 500-character notes limit (SH-257)
2026-08-20 20:06:11 -03:00
Alexandre Brandizzi
518d856334
fix(vendors): enforce notes length limit
2026-08-20 18:17:48 -03:00
Arthur Bassi
7350da3e2f
Merge pull request #76 from Sea-Haven-Industries/fix/sh-183-vendor-patch-new-dispatch
...
Validate and deploy dev / Validate deployable source bundle (push) Waiting to run
Validate and deploy dev / Deploy shoc-backend to Elastic Beanstalk dev (push) Blocked by required conditions
fix(work-orders): create new dispatch when assigning vendor after cancel or refuse
2026-08-20 15:34:08 -03:00
Arthur Bassi
c9c4d74194
Merge branch 'dev' into fix/sh-183-vendor-patch-new-dispatch
2026-08-20 15:28:16 -03:00
Arthur Bassi
14443aff18
fix(work-orders): audit and lock vendor when replacing an inactive primary
...
Creating a Pending dispatch now stages VendorId FieldChanged from the previous
assignment so field lock and concurrency checks run like a live vendor PATCH.
2026-08-20 15:09:34 -03:00
Alexandre Brandizzi
b69c2fe64e
Merge pull request #75 from Sea-Haven-Industries/fix/sh-252-provisional-wo-number
...
Validate and deploy dev / Validate deployable source bundle (push) Waiting to run
Validate and deploy dev / Deploy shoc-backend to Elastic Beanstalk dev (push) Blocked by required conditions
fix(work-orders): enforce provisional WO numbers (SH-252)
2026-08-20 14:48:23 -03:00
Arthur Bassi
af593fe2d2
fix(work-orders): create a new dispatch when patching vendor on an inactive primary
...
Cancelled, Canceled, and Refused primaries are not live company assignments.
VendorId PATCH now inserts a Pending dispatch instead of mutating the refused row.
2026-08-20 14:47:04 -03:00
Alexandre Brandizzi
d16afe3e0b
fix(work-orders): enforce provisional WO numbers (SH-252)
2026-08-20 14:34:08 -03:00
Arthur Bassi
737c137a82
Merge pull request #74 from Sea-Haven-Industries/fix/sh-183-board-inactive-vendor
...
Validate and deploy dev / Validate deployable source bundle (push) Waiting to run
Validate and deploy dev / Deploy shoc-backend to Elastic Beanstalk dev (push) Blocked by required conditions
fix(work-orders): omit inactive primary vendor from board rows (SH-183)
2026-08-20 13:55:00 -03:00
Arthur Bassi
aa2c571d1e
docs(work-orders): drop ticket key from primary dispatch status comment
2026-08-20 13:43:42 -03:00
Arthur Bassi
743841d93e
fix(work-orders): map primary dispatch status on detail (SH-183)
2026-08-20 13:41:42 -03:00
Arthur Bassi
75d337df0f
fix(work-orders): omit inactive primary vendor from board rows (SH-183)
...
Do not project VendorId/VendorName for Cancelled, Canceled, or Refused primary dispatches, and expose PrimaryDispatchStatus on the board DTO.
2026-08-20 13:22:12 -03:00
Alexandre Brandizzi
b02f0e4afd
Merge pull request #73 from Sea-Haven-Industries/fix/sh-247-canonical-trade-taxonomy
...
Validate and deploy dev / Validate deployable source bundle (push) Waiting to run
Validate and deploy dev / Deploy shoc-backend to Elastic Beanstalk dev (push) Blocked by required conditions
SH-247/SH-249: align vendor trades with confirmed taxonomy
2026-08-20 12:40:40 -03:00
Alexandre Brandizzi
0b246724d9
fix: align vendor trades with confirmed taxonomy
2026-08-20 11:44:07 -03:00
Alexandre Brandizzi
6eda0cd0f8
Merge pull request #72 from Sea-Haven-Industries/feat/sh-254-be-confirm-deactivation
...
Validate and deploy dev / Validate deployable source bundle (push) Waiting to run
Validate and deploy dev / Deploy shoc-backend to Elastic Beanstalk dev (push) Blocked by required conditions
feat(vendors): confirm-to-deactivate with open work orders (SH-254)
2026-08-20 11:06:24 -03:00
Alexandre Brandizzi
6fffc1b591
Merge branch 'dev' into feat/sh-254-be-confirm-deactivation
2026-08-20 10:58:23 -03:00
Alexandre Brandizzi
e9669a06b5
Merge pull request #70 from Sea-Haven-Industries/feat/sh-250-roster-additive-patch
...
Validate and deploy dev / Validate deployable source bundle (push) Waiting to run
Validate and deploy dev / Deploy shoc-backend to Elastic Beanstalk dev (push) Blocked by required conditions
feat(vendor-roster): additive PATCH endpoint for technician adds (SH-250, SH-246)
2026-08-19 14:55:08 -03:00
Alexandre Brandizzi
6c16ce7047
feat(vendors): record deactivations confirmed past open work orders
...
SH-44's user story is about not silently orphaning active work. The
confirmation dialog tells the operator, but nothing told the system, so
a deactivation that left work orders open was indistinguishable from one
that had none.
VendorService now takes an ILogger and writes a warning naming the
vendor, the user and the number of work orders left open whenever the
guard is cleared by confirmation. Both the update and delete paths are
covered; nothing is logged when there was nothing to leave open.
2026-08-19 13:48:30 -03:00
Alexandre Brandizzi
7a0856ddf7
feat(vendors): confirm-to-deactivate with open work orders (SH-254)
...
SH-44 and SH-82 both left "blocks, or requires explicit confirmation" to
be decided with the team, and the implementation took the blocking
branch. SH-254 settles it the other way: the approved design offers
"Deactivate anyway" beside the list of open work orders.
Deactivation with open work orders is now permitted, but only when the
caller says it has shown them: ConfirmOpenWorkOrders on the update DTO
and a confirmOpenWorkOrders query parameter on the delete route. Absent
the flag the existing guard still throws, so nothing deactivates by
accident and no caller loses the check by omission.
confirmOpenWorkOrders is a required parameter on DeleteVendorAsync
rather than an optional one, so every call site states its intent.
2026-08-19 13:31:16 -03:00
Alexandre Brandizzi
ec9b36ce29
Merge branch 'dev' into feat/sh-250-roster-additive-patch
2026-08-19 10:27:57 -03:00