Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
407 commits
Select commit Hold shift + click to select a range
c21c90a
Success message bug fix
SamWooldridgeKainos May 28, 2026
50b4a41
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos May 28, 2026
494850d
Remember active tab, time letter dispatched, Stu's content updates
SamWooldridgeKainos May 28, 2026
a8790bc
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Jun 2, 2026
d64b686
WAT4 search filter updates, wat3 multiple updates, index updates
SamWooldridgeKainos Jun 2, 2026
4378587
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Jun 2, 2026
71e4abe
Playwright fix and index updates
SamWooldridgeKainos Jun 2, 2026
f815e35
Merge branch 'vca1' of https://github.com/SamWooldridgeKainos/VCA-pro…
SamWooldridgeKainos Jun 2, 2026
24d130d
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Jun 2, 2026
fedde64
Playwright fix
SamWooldridgeKainos Jun 2, 2026
251a113
Merge branch 'vca1' of https://github.com/SamWooldridgeKainos/VCA-pro…
SamWooldridgeKainos Jun 2, 2026
a17e1c6
Index changes, SunarQube fixes
SamWooldridgeKainos Jun 2, 2026
ff1cff2
Update index.html
SamWooldridgeKainos Jun 2, 2026
b08a492
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Jun 3, 2026
d5fd7a6
Index update and Playwright fix take 2
SamWooldridgeKainos Jun 3, 2026
0cc30f0
Merge pull request #72 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Jun 3, 2026
f8fb74c
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Jun 3, 2026
0f53818
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Jun 3, 2026
a448a58
Version refactor
SamWooldridgeKainos Jun 3, 2026
56f1b80
Merge origin/main into vca1
Copilot Jun 3, 2026
38eaadb
Merge pull request #73 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Jun 3, 2026
1af168f
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Jun 4, 2026
614398a
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Jun 4, 2026
13fda8f
wat4 reference and stashed changes clean up
SamWooldridgeKainos Jun 4, 2026
aff2733
Merge pull request #74 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Jun 4, 2026
080b3b7
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Jun 4, 2026
1adce9b
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Jun 4, 2026
8ddd372
Update prototype to reflect build!
SamWooldridgeKainos Jun 4, 2026
3402eca
Merge pull request #75 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Jun 4, 2026
f346067
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Jun 5, 2026
68abb72
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Jun 5, 2026
00c188a
Lots of tickets
SamWooldridgeKainos Jun 5, 2026
aede7f9
Merge pull request #76 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Jun 5, 2026
74d785c
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Jun 5, 2026
d05340f
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Jun 5, 2026
faf6c99
Refactor part 2
SamWooldridgeKainos Jun 5, 2026
1554a37
Merge pull request #77 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Jun 5, 2026
50849ed
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Jun 5, 2026
44d3f59
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Jun 5, 2026
57fe987
js shared folder refactor
SamWooldridgeKainos Jun 5, 2026
4710372
Merge pull request #78 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Jun 5, 2026
d825169
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Jun 6, 2026
da7a31a
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Jun 6, 2026
c26bbc3
SonarQube fixes
SamWooldridgeKainos Jun 6, 2026
e7127e5
Merge pull request #79 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Jun 6, 2026
45bb572
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Jun 8, 2026
d5d0ee2
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Jun 8, 2026
673a368
Minor fixes and additional index link
SamWooldridgeKainos Jun 8, 2026
2570a3e
Merge pull request #80 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Jun 8, 2026
641d9f9
Overview
SamWooldridgeKainos Jun 9, 2026
60af1d6
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Jun 9, 2026
edbd014
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Jun 9, 2026
ae1669e
Merge branch 'vca1' of https://github.com/SamWooldridgeKainos/VCA-pro…
SamWooldridgeKainos Jun 9, 2026
7cea167
Merge pull request #81 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Jun 9, 2026
dc95f34
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Jun 9, 2026
11c1020
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Jun 9, 2026
23204f3
Tasks page filter updates
SamWooldridgeKainos Jun 9, 2026
df42b69
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Jun 9, 2026
d0e9c9b
Better task record data
SamWooldridgeKainos Jun 9, 2026
6ca9661
Merge branch 'main' into vca1
SamWooldridgeKainos Jun 9, 2026
7b85e24
Merge pull request #82 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Jun 9, 2026
baf533f
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Jun 10, 2026
81f6e79
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Jun 10, 2026
c18f84a
Even better task data
SamWooldridgeKainos Jun 10, 2026
c39a9b5
Merge pull request #83 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Jun 10, 2026
f258276
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Jun 10, 2026
b8b90cf
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Jun 10, 2026
e866d0d
Minor label change
SamWooldridgeKainos Jun 10, 2026
6095ffe
Merge pull request #84 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Jun 10, 2026
8efab60
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Jun 10, 2026
3f460ed
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Jun 10, 2026
ad99408
Removed non-victims, removed success message, more refactoring
SamWooldridgeKainos Jun 10, 2026
ccd79dc
Merge pull request #85 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Jun 10, 2026
284e1ac
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Jun 11, 2026
6243ebe
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Jun 11, 2026
d057a61
Old versions added to .gitignore and removed from tracking
SamWooldridgeKainos Jun 11, 2026
8d7c9af
Merge pull request #86 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Jun 11, 2026
36c36f8
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Jun 16, 2026
30c34fc
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Jun 16, 2026
c2b3d5e
Tasks page v2 etc
SamWooldridgeKainos Jun 16, 2026
0f75370
Merge pull request #87 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Jun 16, 2026
96e6ade
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Jun 23, 2026
e84d508
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Jun 23, 2026
1523c4e
Preferred correspondence language text fix
SamWooldridgeKainos Jun 23, 2026
4ef4174
Merge pull request #88 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Jun 23, 2026
010f41b
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Jun 23, 2026
ba4e327
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Jun 23, 2026
f0bdfd8
Preferred correspondence language bug fix
SamWooldridgeKainos Jun 23, 2026
6d88d9b
Merge pull request #89 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Jun 23, 2026
82536d8
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Jun 23, 2026
6111083
preferredCorrespondenceLanguageOtherText to preferredCorrespondenceLa…
SamWooldridgeKainos Jun 23, 2026
52fcb00
Merge pull request #90 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Jun 23, 2026
ca9243b
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Jun 26, 2026
5d30caf
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Jun 26, 2026
f58c5ae
Follow-ups and VLO allocation added to onboarding flow
SamWooldridgeKainos Jun 26, 2026
04989a9
Merge pull request #91 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Jun 26, 2026
fbc2cfe
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Jun 26, 2026
ed35f05
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Jun 26, 2026
61fb04a
Disability or access needs
SamWooldridgeKainos Jun 26, 2026
05dd469
Merge pull request #92 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Jun 26, 2026
1e60a56
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Jun 26, 2026
861f640
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Jun 26, 2026
75e8098
Disbaility or access needs error message
SamWooldridgeKainos Jun 26, 2026
d3a90af
Merge pull request #93 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Jun 26, 2026
b082471
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Jun 29, 2026
39bd71a
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Jun 29, 2026
f587b8b
Log follow-up after reason for not contacting victim entered
SamWooldridgeKainos Jun 29, 2026
bf2424e
Merge pull request #94 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Jun 29, 2026
525038a
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Jun 29, 2026
b2e6493
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Jun 29, 2026
e78cb35
Secondary button instead
SamWooldridgeKainos Jun 29, 2026
e674b17
Merge pull request #95 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Jun 29, 2026
749638a
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Jun 30, 2026
2244f0b
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Jun 30, 2026
87dfa2b
Disability and access needs and VLO onboarding updates
SamWooldridgeKainos Jun 30, 2026
f71a526
Merge pull request #96 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Jun 30, 2026
4ba7181
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Jul 7, 2026
fe70707
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Jul 7, 2026
54043df
New VCL version
SamWooldridgeKainos Jul 7, 2026
f2e638b
Merge pull request #97 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Jul 7, 2026
9e3215a
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Jul 7, 2026
614d4eb
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Jul 7, 2026
bdab126
Optional time on ad-hoc comms
SamWooldridgeKainos Jul 7, 2026
6bf4b3e
Merge pull request #98 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Jul 7, 2026
37b77cd
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Jul 8, 2026
d55fbea
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Jul 8, 2026
3a64062
Add duplicate PCD task flow and category fixes
SamWooldridgeKainos Jul 8, 2026
e425741
Merge pull request #99 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Jul 8, 2026
ee1638e
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Jul 9, 2026
8c7ca24
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Jul 9, 2026
61196f0
Add text-message branch to VCL call flow
SamWooldridgeKainos Jul 9, 2026
42e33e4
Merge pull request #100 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Jul 9, 2026
64b834e
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Jul 13, 2026
ba5d6b6
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Jul 13, 2026
fa77a5d
Add multi-PCD support for v50 and v51
SamWooldridgeKainos Jul 14, 2026
c1ad372
Merge pull request #101 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Jul 14, 2026
bb1c942
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Jul 14, 2026
7de01e9
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Jul 14, 2026
dcda946
Add follow-up call and no-contact logging
SamWooldridgeKainos Jul 14, 2026
89d6638
Merge pull request #102 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Jul 14, 2026
f347c7f
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Jul 14, 2026
211ea1b
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Jul 14, 2026
31ea4e3
Update follow-up call labels in PCD views
SamWooldridgeKainos Jul 14, 2026
3e81ca2
Merge pull request #103 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Jul 14, 2026
9486cb4
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Jul 16, 2026
c15ec1f
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Jul 16, 2026
d116a91
Simplify 'not contacted' radio label text
SamWooldridgeKainos Jul 16, 2026
2efbfc3
Merge pull request #104 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Jul 16, 2026
bd5128a
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Jul 17, 2026
3e10eb6
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Jul 17, 2026
500e6e0
Add due-date filters and refine v50/v51 copy
SamWooldridgeKainos Jul 17, 2026
fb3abca
Merge pull request #105 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Jul 17, 2026
6e675ee
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Jul 19, 2026
126e375
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Jul 19, 2026
e64b3bc
Refine due date tags and victim contacts
SamWooldridgeKainos Jul 19, 2026
9d6856e
Merge pull request #106 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Jul 19, 2026
8f6554b
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Jul 22, 2026
33f3f47
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Jul 22, 2026
fb0ced7
Align data with new CPS area regions
SamWooldridgeKainos Jul 22, 2026
1bcb19b
Merge pull request #107 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Jul 22, 2026
f8a1595
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Jul 23, 2026
0e9bc45
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Jul 23, 2026
6847f6a
Add 'Person contacted' field to v51 comms
SamWooldridgeKainos Jul 23, 2026
a905833
Merge pull request #108 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Jul 23, 2026
317998b
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Jul 24, 2026
7f190d9
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Jul 24, 2026
ea77989
Bug fix: Import person-contacted macro in call attempts
SamWooldridgeKainos Jul 24, 2026
824a879
Merge pull request #109 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Jul 24, 2026
9e3a3b1
Add v50/v51 route inventory as CSV and HTML in docs/
Copilot Jul 27, 2026
2e939f2
Add Markdown version of v50/v51 route inventory
Copilot Jul 27, 2026
ebcf099
Add Mermaid flow diagrams for v50/v51 routes (Miro/FigJam import)
Copilot Jul 27, 2026
5cb3369
Merge pull request #110 from SamWooldridgeKainos/copilot/list-every-r…
SamWooldridgeKainos Jul 27, 2026
028628b
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Jul 29, 2026
77a67ad
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Jul 29, 2026
82d5dba
Make results per page configurable per view
SamWooldridgeKainos Jul 29, 2026
986b887
Merge pull request #111 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Jul 29, 2026
79da976
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Aug 18, 2026
c8d2925
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Aug 18, 2026
dbc9286
Refactor UR meeting templates and shared partials
SamWooldridgeKainos Aug 20, 2026
1baf564
Merge branch 'main' into vca1
SamWooldridgeKainos Aug 20, 2026
4eb4a1d
Merge pull request #112 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Aug 20, 2026
1ada4f4
Remove obsolete Overview nav comments
SamWooldridgeKainos Aug 20, 2026
f652853
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Aug 20, 2026
faea9a0
Merge pull request #113 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Aug 20, 2026
e7c7eaf
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Aug 20, 2026
f0fc838
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Aug 20, 2026
c86e561
Update security workflow permissions
SamWooldridgeKainos Aug 20, 2026
92fe798
Merge pull request #114 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Aug 20, 2026
6334440
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Aug 21, 2026
e00e442
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Aug 21, 2026
ee8ed9c
Refactor meetings templates and form markup
SamWooldridgeKainos Aug 21, 2026
19fd48b
Merge pull request #115 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Aug 21, 2026
a6410c0
Add not guilty plea date picker to due date form
SamWooldridgeKainos Aug 23, 2026
0d96987
Merge pull request #116 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Aug 23, 2026
772a110
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Aug 23, 2026
5872fdf
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Aug 23, 2026
4fcef12
Rename nav label to Charging decision
SamWooldridgeKainos Aug 23, 2026
e906e15
Merge pull request #117 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Aug 23, 2026
04076bf
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Aug 26, 2026
afd2435
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Aug 26, 2026
8924a45
Move meetings journeys from /ur to /v50
SamWooldridgeKainos Aug 26, 2026
a3d095c
Merge pull request #118 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Aug 26, 2026
f365622
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Aug 28, 2026
a25bc01
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Aug 28, 2026
ff6cf9b
Big refactor and BFS PTM updates
SamWooldridgeKainos Aug 28, 2026
813666e
Merge pull request #119 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Aug 28, 2026
7bab94c
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Aug 28, 2026
c840c68
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Aug 28, 2026
9e11cd0
Use Number.parseInt and unique sign-in IDs
SamWooldridgeKainos Aug 28, 2026
ccd6b4b
Merge pull request #120 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Aug 28, 2026
d8ae21e
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Sep 2, 2026
08b721e
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Sep 2, 2026
669b370
Add confirm-arrangements meeting flow
SamWooldridgeKainos Sep 2, 2026
ce45971
Merge pull request #121 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Sep 2, 2026
9a2e0cf
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Sep 7, 2026
59e5a93
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Sep 7, 2026
c0efbcc
Refine BFS meeting flows and identity headers
SamWooldridgeKainos Sep 7, 2026
deeb706
Merge pull request #122 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Sep 7, 2026
996bb16
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Sep 7, 2026
4864620
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Sep 7, 2026
5a2a84f
Unify BFS meeting states in victim record
SamWooldridgeKainos Sep 7, 2026
3073951
Merge pull request #123 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Sep 7, 2026
16d3337
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Sep 9, 2026
365faf4
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Sep 9, 2026
9e42a69
Lots of BFS changes etc
SamWooldridgeKainos Sep 9, 2026
9599bcf
Merge pull request #124 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Sep 9, 2026
fe49e8a
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Sep 9, 2026
65345c5
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Sep 9, 2026
aacb7c2
Prune legacy BFS check-details templates
SamWooldridgeKainos Sep 9, 2026
bb8a0b8
Merge pull request #125 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Sep 9, 2026
b772fed
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Sep 15, 2026
38ca142
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Sep 15, 2026
4eb6137
Add form validation and enhance BFS meeting workflow
SamWooldridgeKainos Sep 15, 2026
c74e74a
Merge pull request #126 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Sep 15, 2026
8636958
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Sep 17, 2026
52c6211
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Sep 17, 2026
65d7533
Simplify logging flow and update sort text
SamWooldridgeKainos Sep 17, 2026
68750ea
Merge pull request #127 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Sep 17, 2026
8123d45
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Sep 20, 2026
b29dcbd
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Sep 20, 2026
6952fa4
Add change-mode meeting prefill flow
SamWooldridgeKainos Sep 20, 2026
d578e6a
Merge pull request #128 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Sep 20, 2026
033a22a
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Sep 22, 2026
6b65bdb
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Sep 22, 2026
7160d49
Implement meeting reschedule and cancel flows
SamWooldridgeKainos Sep 22, 2026
afb809c
Merge pull request #129 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Sep 22, 2026
7d505dd
Merge branch 'CPS-Innovation:main' into main
SamWooldridgeKainos Sep 23, 2026
a42314f
Merge branch 'CPS-Innovation:main' into vca1
SamWooldridgeKainos Sep 23, 2026
55bb216
Add check answers pages to meeting flows
SamWooldridgeKainos Sep 23, 2026
2311ef8
Merge pull request #130 from SamWooldridgeKainos/vca1
SamWooldridgeKainos Sep 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
122 changes: 73 additions & 49 deletions app/routes/meetings.js
Original file line number Diff line number Diff line change
Expand Up @@ -273,36 +273,53 @@
// Mark this recipient as accounted for.
data['recordnoresponse' + idx] = 'yes'

// Returning from a "Change" link edits a single response then goes back to check answers.
if (data['changeMode'] === 'true'){
data['changeMode'] = ''
return response.redirect("/bfs/meetings-2/cps-offer/check-response")
}

if (person < recipients.length){
response.redirect("/bfs/meetings-2/cps-offer/when-no-response?person=" + (person + 1))
return
}

// Snapshot the selected recipients as a "no response" round so they are
// retained and can be redisplayed on the meeting page.
response.redirect("/bfs/meetings-2/cps-offer/check-response")
})

// Confirm the offer responses (accepted, declined, or no response). This finalises
// the batch: it snapshots any "no response" round, updates how many recipients are
// still to respond, and records the response type for the confirmation banner.
router.post('/bfs/meetings-2/cps-offer/check-response-answer', function(request, response) {
var data = request.session.data
var offered = [].concat(data['offerRecipients'] || [])
var round = []
recipients.forEach(function(sel){
var i = Number.parseInt(sel, 10)
round.push({
offeredTo: offered[i - 1],
howOffered: data['howoffered' + i],
offerDate: data['offerDate' + i],
loggedDate: data['noResponseDate' + i]
var type = data['offerResponse']

if (type === 'no-response'){
var recipients = [].concat(data['noResponseRecipients'] || [])

Check warning on line 299 in app/routes/meetings.js

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Prefer `Array#flat()` over `[].concat()` to flatten an array.

See more on https://sonarcloud.io/project/issues?id=CPS-Innovation_VCA-prototype&issues=AaDLosForDKEEOY2RrfQ&open=AaDLosForDKEEOY2RrfQ&pullRequest=298
var round = []
recipients.forEach(function(sel){
var i = Number.parseInt(sel, 10)
round.push({
offeredTo: offered[i - 1],
howOffered: data['howoffered' + i],
offerDate: data['offerDate' + i],
loggedDate: data['noResponseDate' + i]
})
})
})
var rounds = data['noResponseOffers'] || []
rounds.push(round)
data['noResponseOffers'] = rounds
var rounds = data['noResponseOffers'] || []
rounds.push(round)
data['noResponseOffers'] = rounds
data['lastResponseType'] = 'no-response'
} else {
data['lastResponseType'] = type
}

// Track how many offered recipients are still to be accounted for
// (accepted, declined, or logged as no response).
var accountedCount = 0
offered.forEach(function(recipient, i){
if (data['recordaccepted' + (i + 1)] || data['recorddeclined' + (i + 1)] || data['recordnoresponse' + (i + 1)]) accountedCount++
})
data['responsesRemaining'] = offered.length - accountedCount
data['lastResponseType'] = 'no-response'

response.redirect("/bfs/victim/index?secondaryNav=ptm&meetingState=responses&meetingSuccess=yes#communications")
})
Expand Down Expand Up @@ -366,19 +383,22 @@
data['offerHowError'] = ''
data['offerWhenError'] = ''

// Returning from a "Change" link edits a single offer then goes back to check answers.
if (data['changeMode'] === 'true'){
data['changeMode'] = ''
return response.redirect("/bfs/meetings-2/cps-offer/check-offer")
}

if (person < recipients.length){
response.redirect("/bfs/meetings-2/cps-offer/how-when-offered?person=" + (person + 1))
return
}

// All offers recorded: route to the confirmation page for the first matching
// method by priority, aggregating every recipient's selected method.
var howoffered = []
Object.keys(data).forEach(function(key){
if (key.indexOf('howoffered') === 0){
howoffered = howoffered.concat(data[key])
}
})
// All offers recorded: review them on the check answers page before confirming.
response.redirect("/bfs/meetings-2/cps-offer/check-offer")
})

router.post('/bfs/meetings-2/cps-offer/check-offer-answer', function(request, response) {
response.redirect("/bfs/victim/index?secondaryNav=ptm&meetingState=offered&meetingSuccess=yes#communications")
})

Expand Down Expand Up @@ -465,22 +485,18 @@
data['acceptHowError'] = ''
data['acceptWhenError'] = ''

// Returning from a "Change" link edits a single response then goes back to check answers.
if (data['changeMode'] === 'true'){
data['changeMode'] = ''
return response.redirect("/bfs/meetings-2/cps-offer/check-response")
}

if (person < accepters.length){
response.redirect("/bfs/meetings-2/cps-offer/how-when-accepted?person=" + (person + 1))
return
}

// Track how many offered recipients are still to be accounted for
// (either accepted or declined).
var offered = [].concat(data['offerRecipients'] || [])
var accountedCount = 0
offered.forEach(function(recipient, i){
if (data['recordaccepted' + (i + 1)] || data['recorddeclined' + (i + 1)] || data['recordnoresponse' + (i + 1)]) accountedCount++
})
data['responsesRemaining'] = offered.length - accountedCount
data['lastResponseType'] = 'accepted'

response.redirect("/bfs/victim/index?secondaryNav=ptm&meetingState=responses&meetingSuccess=yes#communications")
response.redirect("/bfs/meetings-2/cps-offer/check-response")
})


Expand Down Expand Up @@ -527,22 +543,18 @@
data['declineHowError'] = ''
data['declineWhenError'] = ''

// Returning from a "Change" link edits a single response then goes back to check answers.
if (data['changeMode'] === 'true'){
data['changeMode'] = ''
return response.redirect("/bfs/meetings-2/cps-offer/check-response")
}

if (person < decliners.length){
response.redirect("/bfs/meetings-2/cps-offer/how-when-declined?person=" + (person + 1))
return
}

// Track how many offered recipients are still to be accounted for
// (either accepted or declined).
var offered = [].concat(data['offerRecipients'] || [])
var accountedCount = 0
offered.forEach(function(recipient, i){
if (data['recordaccepted' + (i + 1)] || data['recorddeclined' + (i + 1)] || data['recordnoresponse' + (i + 1)]) accountedCount++
})
data['responsesRemaining'] = offered.length - accountedCount
data['lastResponseType'] = 'declined'

response.redirect("/bfs/victim/index?secondaryNav=ptm&meetingState=responses&meetingSuccess=yes#communications")
response.redirect("/bfs/meetings-2/cps-offer/check-response")
})


Expand Down Expand Up @@ -804,12 +816,24 @@

// Cancel flow: capture when the meeting was cancelled, then ask for a reason.
router.post('/bfs/meetings-2/cancelled/meeting-date-answer', function(request, response) {
// Returning from a "Change" link goes straight back to check answers.
if (request.session.data['changeMode'] === 'true') {
request.session.data['changeMode'] = ''
return response.redirect('/bfs/meetings-2/cancelled/check-answers')
}
response.redirect('/bfs/meetings-2/cancelled/reason-why')
})

// Cancel flow: after capturing the reason, return to the Meetings sub-tab in
// the cancelled state.
// Cancel flow: the reason is the final question, so both the normal flow and
// a "Change" edit end on the check answers page.
router.post('/bfs/meetings-2/cancelled/reason-why-answer', function(request, response) {
request.session.data['changeMode'] = ''
response.redirect('/bfs/meetings-2/cancelled/check-answers')
})

// Cancel flow: confirm the details and return to the Meetings sub-tab in the
// cancelled state.
router.post('/bfs/meetings-2/cancelled/check-answers-answer', function(request, response) {
response.redirect('/bfs/victim/index?secondaryNav=ptm&meetingState=cancelled&meetingSuccess=yes#communications')
})

Expand Down
54 changes: 54 additions & 0 deletions app/views/bfs/meetings-2/cancelled/check-answers.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
{% extends "layouts/main.html" %}

{% set pageName="Check your answers" %}

{% block header %}
{% include "/bfs/partials/header/none-selected-bfs.html" %}
{% endblock %}

{% block beforeContent %}
{% include "/bfs/partials/identity-bar/bfs-question.html" %}
{% endblock %}

{% block content %}
<div class="govuk-grid-row">
<div class="govuk-grid-column-one-half">

{% set reasonText = data['cancelReasonOther'] if data['cancelReason'] == "Other" else data['cancelReason'] %}

<h1 class="govuk-heading-l">Check your answers before cancelling the meeting</h1>

<dl class="govuk-summary-list govuk-!-margin-bottom-9">
<div class="govuk-summary-list__row">
<dt class="govuk-summary-list__key">
Date and time cancelled
</dt>
<dd class="govuk-summary-list__value">
{{ data['cancelDate'] | formatDate }}{% if data['cancelHour'] %} at {{ data['cancelHour'] }}:{{ data['cancelMinutes'] }}{% endif %}
</dd>
<dd class="govuk-summary-list__actions">
<a class="govuk-link" href="meeting-date?changeMode=true">Change<span class="govuk-visually-hidden"> date and time the meeting was cancelled</span></a>
</dd>
</div>
<div class="govuk-summary-list__row">
<dt class="govuk-summary-list__key">
Reason for cancelling
</dt>
<dd class="govuk-summary-list__value">
{{ reasonText }}
</dd>
<dd class="govuk-summary-list__actions">
<a class="govuk-link" href="reason-why?changeMode=true">Change<span class="govuk-visually-hidden"> reason for cancelling the meeting</span></a>
</dd>
</div>
</dl>

<form class="form" action="/bfs/meetings-2/cancelled/check-answers-answer" method="post">
{{ govukButton({
text: "Confirm details"
}) }}
</form>

</div>
</div>
{% endblock %}
6 changes: 3 additions & 3 deletions app/views/bfs/meetings-2/cancelled/meeting-date.html
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ <h1 class="govuk-heading-l">When was the meeting cancelled?</h1>

<div class="moj-datepicker" id="cancel-date-picker" data-module="moj-date-picker" data-excluded-days="saturday sunday">

<input type="text" class="govuk-input moj-js-datepicker-input" id="cancel-date" name="cancelDate" autocomplete="off" aria-describedby="cancel-date-hint" value="{{ data['cancelDate'] }}" />
<input type="text" class="govuk-input moj-js-datepicker-input" id="cancel-date" name="cancelDate" autocomplete="off" aria-describedby="cancel-date-hint" value="{% if data['changeMode'] == 'true' %}{{ data['cancelDate'] }}{% endif %}" />
</div>
</div>

Expand All @@ -50,7 +50,7 @@ <h1 class="govuk-heading-l">When was the meeting cancelled?</h1>
<label class="govuk-label govuk-date-input__label" for="cancel-hour">
Hour
</label>
<input class="govuk-input govuk-date-input__input govuk-input--width-2" id="cancel-hour" name="cancelHour" type="text" inputmode="numeric" value="{{ data['cancelHour'] }}">
<input class="govuk-input govuk-date-input__input govuk-input--width-2" id="cancel-hour" name="cancelHour" type="text" inputmode="numeric" value="{% if data['changeMode'] == 'true' %}{{ data['cancelHour'] }}{% endif %}">
</div>
</div>
<div class="govuk-date-input__item" style="margin-right: 10px;">
Expand All @@ -62,7 +62,7 @@ <h1 class="govuk-heading-l">When was the meeting cancelled?</h1>
<label class="govuk-label govuk-date-input__label" for="cancel-minutes">
Minutes
</label>
<input class="govuk-input govuk-date-input__input govuk-input--width-2" id="cancel-minutes" name="cancelMinutes" type="text" inputmode="numeric" value="{{ data['cancelMinutes'] }}">
<input class="govuk-input govuk-date-input__input govuk-input--width-2" id="cancel-minutes" name="cancelMinutes" type="text" inputmode="numeric" value="{% if data['changeMode'] == 'true' %}{{ data['cancelMinutes'] }}{% endif %}">
</div>
</div>

Expand Down
2 changes: 2 additions & 0 deletions app/views/bfs/meetings-2/cancelled/reason-why.html
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
{{ govukTextarea({
id: "cancel-reason-other",
name: "cancelReasonOther",
value: data['cancelReasonOther'] if data['changeMode'] == 'true',
label: { text: "Provide details" }
}) }}
{% endset -%}
Expand All @@ -26,6 +27,7 @@

{{ govukRadios({
name: "cancelReason",
value: data['cancelReason'] if data['changeMode'] == 'true',
fieldset: {
legend: {
text: "What is the reason for cancelling the meeting?",
Expand Down
48 changes: 30 additions & 18 deletions app/views/bfs/meetings-2/confirm-arrangements/attendees.html
Original file line number Diff line number Diff line change
Expand Up @@ -45,24 +45,36 @@ <h1 class="govuk-fieldset__heading">
{% endif %}
<input type="hidden" name="attendees" value="_unchecked">
<div class="govuk-checkboxes" data-module="govuk-checkboxes">
<div class="govuk-checkboxes__item">
<input class="govuk-checkboxes__input" id="attendees-1" name="attendees" type="checkbox" value="{{ data['victimSurname'] | upper }}, Margaret (Mother)" {{ checked("attendees", data['victimSurname'] | upper + ", Margaret (Mother)") }}>
<label class="govuk-label govuk-checkboxes__label" for="attendees-1">
{{ data['victimSurname'] | upper }}, Margaret (Mother)
</label>
</div>
<div class="govuk-checkboxes__item">
<input class="govuk-checkboxes__input" id="attendees-2" name="attendees" type="checkbox" value="{{ data['victimSurname'] | upper }}, David (Father)" {{ checked("attendees", data['victimSurname'] | upper + ", David (Father)") }}>
<label class="govuk-label govuk-checkboxes__label" for="attendees-2">
{{ data['victimSurname'] | upper }}, David (Father)
</label>
</div>
<div class="govuk-checkboxes__item">
<input class="govuk-checkboxes__input" id="attendees-3" name="attendees" type="checkbox" value="CARTER, Emma (Sister)" {{ checked("attendees", "CARTER, Emma (Sister)") }}>
<label class="govuk-label govuk-checkboxes__label" for="attendees-3">
CARTER, Emma (Sister)
</label>
</div>
{% if data['familyMembers'] and data['familyMembers'].length > 0 %}
{% for member in data['familyMembers'] %}
{% set attendeeValue = (member.lastName | upper) + ", " + member.firstName + (" (" + member.relationship + ")" if member.relationship else "") %}
<div class="govuk-checkboxes__item">
<input class="govuk-checkboxes__input" id="attendees-family-{{ loop.index }}" name="attendees" type="checkbox" value="{{ attendeeValue }}" {{ checked("attendees", attendeeValue) }}>
<label class="govuk-label govuk-checkboxes__label" for="attendees-family-{{ loop.index }}">
{{ attendeeValue }}
</label>
</div>
{% endfor %}
{% else %}
<div class="govuk-checkboxes__item">
<input class="govuk-checkboxes__input" id="attendees-1" name="attendees" type="checkbox" value="{{ data['victimSurname'] | upper }}, Margaret (Mother)" {{ checked("attendees", data['victimSurname'] | upper + ", Margaret (Mother)") }}>
<label class="govuk-label govuk-checkboxes__label" for="attendees-1">
{{ data['victimSurname'] | upper }}, Margaret (Mother)
</label>
</div>
<div class="govuk-checkboxes__item">
<input class="govuk-checkboxes__input" id="attendees-2" name="attendees" type="checkbox" value="{{ data['victimSurname'] | upper }}, David (Father)" {{ checked("attendees", data['victimSurname'] | upper + ", David (Father)") }}>
<label class="govuk-label govuk-checkboxes__label" for="attendees-2">
{{ data['victimSurname'] | upper }}, David (Father)
</label>
</div>
<div class="govuk-checkboxes__item">
<input class="govuk-checkboxes__input" id="attendees-3" name="attendees" type="checkbox" value="CARTER, Emma (Sister)" {{ checked("attendees", "CARTER, Emma (Sister)") }}>
<label class="govuk-label govuk-checkboxes__label" for="attendees-3">
CARTER, Emma (Sister)
</label>
</div>
{% endif %}
<div class="govuk-checkboxes__item">
<input class="govuk-checkboxes__input" id="attendees-4" name="attendees" type="checkbox" value="BIDWELL, Jane (Family liaison officer)" {{ checked("attendees", "BIDWELL, Jane (Family liaison officer)") }}>
<label class="govuk-label govuk-checkboxes__label" for="attendees-4">
Expand Down
Loading
Loading