From e1a66151664659a32663d6b0b739c75769ab20d9 Mon Sep 17 00:00:00 2001 From: Amardeep Chimber Date: Tue, 28 Jan 2025 17:44:26 +0000 Subject: [PATCH] MAN-309 - add new page --- server/data/masApiClient.ts | 5 ++ server/data/model/previousOrderDetail.ts | 7 +++ server/data/model/previousOrderHistory.ts | 1 + server/routes/sentence.ts | 23 +++++++++ .../views/pages/sentence/previous-order.njk | 26 ++++++++++ .../views/pages/sentence/previous-orders.njk | 2 +- wiremock/mappings/X000001-orders.json | 48 ++++++++++++++++++- 7 files changed, 109 insertions(+), 3 deletions(-) create mode 100644 server/data/model/previousOrderDetail.ts create mode 100644 server/views/pages/sentence/previous-order.njk diff --git a/server/data/masApiClient.ts b/server/data/masApiClient.ts index f4af8840..3d3f4e3f 100644 --- a/server/data/masApiClient.ts +++ b/server/data/masApiClient.ts @@ -22,6 +22,7 @@ import { CaseAccess, UserAccess } from './model/caseAccess' import { LicenceConditionNoteDetails } from './model/licenceConditionNoteDetails' import { AppointmentRequestBody } from '../@types' import { RequirementNoteDetails } from './model/requirementNoteDetails' +import { PreviousOrderDetail } from './model/previousOrderDetail' export default class MasApiClient extends RestClient { constructor(token: string) { @@ -50,6 +51,10 @@ export default class MasApiClient extends RestClient { return this.get({ path: `/sentence/${crn}/previous-orders`, handle404: false }) } + async getSentencePreviousOrder(crn: string, eventNumber: string): Promise { + return this.get({ path: `/sentence/${crn}/previous-orders/${eventNumber}`, handle404: false }) + } + async getSentenceOffences(crn: string, eventNumber: string): Promise { return this.get({ path: `/sentence/${crn}/offences/${eventNumber}`, handle404: false }) } diff --git a/server/data/model/previousOrderDetail.ts b/server/data/model/previousOrderDetail.ts new file mode 100644 index 00000000..063e2423 --- /dev/null +++ b/server/data/model/previousOrderDetail.ts @@ -0,0 +1,7 @@ +import { Name } from './common' +import { Sentence } from './sentenceDetails' + +export interface PreviousOrderDetail { + name: Name + sentence: Sentence +} diff --git a/server/data/model/previousOrderHistory.ts b/server/data/model/previousOrderHistory.ts index 38742b67..482f4975 100644 --- a/server/data/model/previousOrderHistory.ts +++ b/server/data/model/previousOrderHistory.ts @@ -6,6 +6,7 @@ export interface PreviousOrderHistory { } export interface PreviousOrder { + eventNumber: string title: string description: string terminationDate: string diff --git a/server/routes/sentence.ts b/server/routes/sentence.ts index 57e20105..16236e05 100644 --- a/server/routes/sentence.ts +++ b/server/routes/sentence.ts @@ -118,6 +118,29 @@ export default function sentenceRoutes(router: Router, { hmppsAuthClient }: Serv }) }) + get('/case/:crn/sentence/previous-orders/:eventNumber', async (req, res, _next) => { + const { crn, eventNumber } = req.params + const token = await hmppsAuthClient.getSystemClientToken(res.locals.user.username) + + await auditService.sendAuditMessage({ + action: 'VIEW_MAS_SENTENCE_PREVIOUS_ORDER', + who: res.locals.user.username, + subjectId: crn, + subjectType: 'CRN', + correlationId: v4(), + service: 'hmpps-manage-people-on-probation-ui', + }) + + const masClient = new MasApiClient(token) + + const previousOrderDetail = await masClient.getSentencePreviousOrder(crn, eventNumber) + + res.render('pages/sentence/previous-order', { + previousOrderDetail, + crn, + }) + }) + get('/case/:crn/sentence/offences/:eventNumber', async (req, res, _next) => { const { crn, eventNumber } = req.params const token = await hmppsAuthClient.getSystemClientToken(res.locals.user.username) diff --git a/server/views/pages/sentence/previous-order.njk b/server/views/pages/sentence/previous-order.njk new file mode 100644 index 00000000..7b38c2e6 --- /dev/null +++ b/server/views/pages/sentence/previous-order.njk @@ -0,0 +1,26 @@ +{% extends "../../partials/layout.njk" %} +{% set headerPersonName = previousOrderHistory.name.forename + ' ' + previousOrderHistory.name.surname %} + +{% block beforeContent %} + {{ govukBreadcrumbs({ + items: [ + { + text: "My cases", + href: "/case" + }, + { + text: headerPersonName, + href: "/case/" + crn, + attributes: { "data-ai-id": "breadcrumbPersonNameLink" } + }, + { + text: "Sentence", + href: "/case/" + crn + "/sentence" + }, + { + text: "Previous Orders", + href: "/case/" + crn + "/sentence/previous-orders" + } + ] + }) }} +{% endblock %} \ No newline at end of file diff --git a/server/views/pages/sentence/previous-orders.njk b/server/views/pages/sentence/previous-orders.njk index 01dd3a5f..a5ebf84d 100644 --- a/server/views/pages/sentence/previous-orders.njk +++ b/server/views/pages/sentence/previous-orders.njk @@ -31,7 +31,7 @@ {% for order in previousOrderHistory.previousOrders %}

- + {{ order.title }}

diff --git a/wiremock/mappings/X000001-orders.json b/wiremock/mappings/X000001-orders.json index d0db4ae6..28a748a4 100644 --- a/wiremock/mappings/X000001-orders.json +++ b/wiremock/mappings/X000001-orders.json @@ -9,17 +9,19 @@ "status": 200, "jsonBody": { "name": { - "forename": "Eula", + "forename": "Caroline", "middleName": "", - "surname": "Schmeler" + "surname": "Wolff" }, "previousOrders": [ { + "eventNumber": "3", "title": "CJA - Std Determinate Custody (16 Months)", "description": "Merchant Shipping Acts - 15000", "terminationDate": "2024-04-09" }, { + "eventNumber": "2", "title": "CJA - Std Determinate Custody (12 Months)", "description": "Army - offences associated with - 15300", "terminationDate": "2024-04-08" @@ -30,6 +32,48 @@ "Content-Type": "application/json" } } + }, + { + "request": { + "urlPattern": "/mas/sentence/X000001/previous-orders/3", + "method": "GET" + }, + "response": { + "status": 200, + "jsonBody": { + "name": { + "forename": "Caroline", + "middleName": "", + "surname": "Wolff" + }, + "sentence": { + "offenceDetails": { + "eventNumber": "1", + "offence": { + "description": "Another Murder", + "count": 1 + }, + "dateOfOffence": "2024-01-20", + "notes": "", + "additionalOffences": [] + }, + "conviction": { + "additionalSentences": [] + }, + "order": { + "description": "12 month community order", + "length": 12, + "endDate": "2025-01-31", + "releaseDate": "2024-11-01", + "startDate": "2024-02-01" + }, + "courtDocuments": [] + } + }, + "headers": { + "Content-Type": "application/json" + } + } } ] }