Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cas2v2/cba 85 add bail hearing dates #2846

Merged
merged 12 commits into from
Jan 22, 2025
Prev Previous commit
addressed PR comments
  • Loading branch information
garethCAS2 committed Jan 22, 2025
commit 803bcd543b5a21e8963efa9cf96b086189d5f4de
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import uk.gov.justice.digital.hmpps.approvedpremisesapi.service.cas2.OffenderSer
import uk.gov.justice.digital.hmpps.approvedpremisesapi.service.cas2v2.Cas2v2ApplicationService
import uk.gov.justice.digital.hmpps.approvedpremisesapi.transformer.cas2v2.Cas2v2ApplicationsTransformer
import uk.gov.justice.digital.hmpps.approvedpremisesapi.util.PageCriteria
import uk.gov.justice.digital.hmpps.approvedpremisesapi.util.ensureEntityFromCasResultIsSuccess
import uk.gov.justice.digital.hmpps.approvedpremisesapi.util.extractEntityFromCasResult
import java.net.URI
import java.util.UUID
Expand Down Expand Up @@ -123,7 +124,7 @@ class Cas2v2ApplicationController(
val user = nomisUserService.getUserForRequest()

val applicationResult = cas2v2ApplicationService.abandonCas2v2Application(applicationId, user)
extractEntityFromCasResult(applicationResult)
ensureEntityFromCasResultIsSuccess(applicationResult)
return ResponseEntity.ok(Unit)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import uk.gov.justice.digital.hmpps.approvedpremisesapi.service.cas2.OffenderSer
import uk.gov.justice.digital.hmpps.approvedpremisesapi.service.cas2v2.Cas2v2ApplicationService
import uk.gov.justice.digital.hmpps.approvedpremisesapi.transformer.cas2v2.Cas2v2SubmissionsTransformer
import uk.gov.justice.digital.hmpps.approvedpremisesapi.util.PageCriteria
import uk.gov.justice.digital.hmpps.approvedpremisesapi.util.ensureEntityFromCasResultIsSuccess
import uk.gov.justice.digital.hmpps.approvedpremisesapi.util.extractEntityFromCasResult
import java.util.UUID

Expand Down Expand Up @@ -69,7 +70,7 @@ class Cas2v2SubmissionsController(
): ResponseEntity<Unit> {
val user = nomisUserService.getUserForRequest()
val submitResult = cas2v2ApplicationService.submitCas2v2Application(submitCas2v2Application, user)
extractEntityFromCasResult(submitResult)
ensureEntityFromCasResultIsSuccess(submitResult)

return ResponseEntity(HttpStatus.OK)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ class Cas2v2ApplicationService(

fun getSubmittedCas2v2ApplicationForAssessor(applicationId: UUID): CasResult<Cas2v2ApplicationEntity> {
val applicationEntity = cas2v2ApplicationRepository.findSubmittedApplicationById(applicationId)
?: return CasResult.NotFound()
?: return CasResult.NotFound("Cas2v2ApplicationEntity", applicationId.toString())

return CasResult.Success(
cas2v2JsonSchemaService.checkCas2v2SchemaOutdated(applicationEntity),
Expand All @@ -103,7 +103,7 @@ class Cas2v2ApplicationService(

fun getCas2v2ApplicationForUser(applicationId: UUID, user: NomisUserEntity): CasResult<Cas2v2ApplicationEntity> {
val applicationEntity = cas2v2ApplicationRepository.findByIdOrNull(applicationId)
?: return CasResult.NotFound()
?: return CasResult.NotFound("Cas2v2ApplicationEntity", applicationId.toString())

if (applicationEntity.abandonedAt != null) {
return CasResult.NotFound()
Expand Down Expand Up @@ -174,7 +174,7 @@ class Cas2v2ApplicationService(
bailHearingDate: LocalDate?,
): CasResult<Cas2v2ApplicationEntity> {
val application = cas2v2ApplicationRepository.findByIdOrNull(applicationId)?.let(cas2v2JsonSchemaService::checkCas2v2SchemaOutdated)
?: return CasResult.NotFound()
?: return CasResult.NotFound("Cas2v2ApplicationEntity", applicationId.toString())

if (application.createdByUser != user) {
return CasResult.Unauthorised()
Expand Down Expand Up @@ -206,7 +206,7 @@ class Cas2v2ApplicationService(
@SuppressWarnings("ReturnCount")
fun abandonCas2v2Application(applicationId: UUID, user: NomisUserEntity): CasResult<Cas2v2ApplicationEntity> {
val application = cas2v2ApplicationRepository.findByIdOrNull(applicationId)
?: return CasResult.NotFound()
?: return CasResult.NotFound("Cas2v2ApplicationEntity", applicationId.toString())

if (application.createdByUser != user) {
return CasResult.Unauthorised()
Expand Down Expand Up @@ -242,7 +242,7 @@ class Cas2v2ApplicationService(

var application = cas2v2ApplicationRepository.findByIdOrNull(applicationId)
?.let(cas2v2JsonSchemaService::checkCas2v2SchemaOutdated)
?: return CasResult.NotFound()
?: return CasResult.NotFound("Cas2v2ApplicationEntity", applicationId.toString())

val serializedTranslatedDocument = objectMapper.writeValueAsString(submitCas2v2Application.translatedDocument)

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

CREATE TABLE cas_2_v2_application_json_schemas
(
json_schema_id UUID NOT NULL,
Expand All @@ -19,12 +18,12 @@ CREATE TABLE cas_2_v2_application_notes

CREATE TABLE cas_2_v2_applications
(
id UUID NOT NULL,
crn TEXT NOT NULL,
created_by_user_id UUID NOT NULL,
id UUID NOT NULL,
crn TEXT NOT NULL,
created_by_user_id UUID NOT NULL,
data JSON,
document JSON,
schema_version UUID NOT NULL,
schema_version UUID NOT NULL,
created_at TIMESTAMPTZ NOT NULL,
submitted_at TIMESTAMPTZ,
abandoned_at TIMESTAMPTZ,
Expand All @@ -50,41 +49,39 @@ CREATE TABLE cas_2_v2_assessments

CREATE TABLE cas_2_v2_status_update_details
(
id UUID NOT NULL,
status_detail_id UUID NOT NULL,
label TEXT NOT NULL,
status_update_id UUID NOT NULL,
id UUID NOT NULL,
status_detail_id UUID NOT NULL,
label TEXT NOT NULL,
status_update_id UUID NOT NULL,
created_at TIMESTAMPTZ NOT NULL,
CONSTRAINT pk_cas_2_v2_status_update_details PRIMARY KEY (id)
);

CREATE TABLE cas_2_v2_status_updates
(
id UUID NOT NULL,
status_id UUID NOT NULL,
description TEXT NOT NULL,
label TEXT NOT NULL,
assessor_id UUID NOT NULL,
application_id UUID NOT NULL,
id UUID NOT NULL,
status_id UUID NOT NULL,
description TEXT NOT NULL,
label TEXT NOT NULL,
assessor_id UUID NOT NULL,
application_id UUID NOT NULL,
assessment_id UUID,
created_at TIMESTAMPTZ NOT NULL,
CONSTRAINT pk_cas_2_v2_status_updates PRIMARY KEY (id)
);

INSERT INTO json_schemas (id, added_at, schema, type)
VALUES (
'be976928-d7d3-44d5-ac3e-1463698afff5',
'2025-01-15 15:19:37.363233 +00:00',
'{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "Application Placeholder Schema",
"description": "An application schema that requires no properties",
"type": "object",
"properties": {},
"required": []
}',
'CAS_2_V2_APPLICATION'
);
VALUES ('be976928-d7d3-44d5-ac3e-1463698afff5',
'2025-01-15 15:19:37.363233 +00:00',
'{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "Application Placeholder Schema",
"description": "An application schema that requires no properties",
"type": "object",
"properties": {},
"required": []
}',
'CAS_2_V2_APPLICATION');

ALTER TABLE cas_2_v2_applications
ADD CONSTRAINT FK_CAS_2_V2_APPLICATIONS_ON_ASSESSMENT FOREIGN KEY (assessment_id) REFERENCES cas_2_v2_assessments (id);
Expand Down Expand Up @@ -125,48 +122,51 @@ ALTER TABLE cas_2_v2_status_updates
ALTER TABLE cas_2_v2_status_update_details
ADD CONSTRAINT FK_CAS_2_V2_STATUS_UPDATE_DETAILS_ON_STATUS_UPDATE FOREIGN KEY (status_update_id) REFERENCES cas_2_v2_status_updates (id);

CREATE OR REPLACE VIEW cas_2_v2_application_summary AS SELECT
a.id,
a.crn,
a.noms_number,
CAST(a.created_by_user_id AS TEXT),
nu.name,
a.created_at,
a.submitted_at,
a.hdc_eligibility_date,
asu.label,
CAST(asu.status_id AS TEXT),
a.referring_prison_code,
a.conditional_release_date,
asu.created_at AS status_created_at,
a.abandoned_at
FROM cas_2_v2_applications a
LEFT JOIN (SELECT DISTINCT ON (application_id) su.application_id, su.label, su.status_id, su.created_at
FROM cas_2_v2_status_updates su
ORDER BY su.application_id, su.created_at DESC) as asu
ON a.id = asu.application_id
JOIN nomis_users nu ON nu.id = a.created_by_user_id;

CREATE OR REPLACE VIEW cas_2_v2_application_live_summary AS SELECT
a.id,
a.crn,
a.noms_number,
a.created_by_user_id,
a.name,
a.created_at,
a.submitted_at,
a.hdc_eligibility_date,
a.label,
a.status_id,
a.referring_prison_code,
a.abandoned_at
FROM cas_2_v2_application_summary a
WHERE (a.conditional_release_date IS NULL OR a.conditional_release_date >= current_date)
AND a.abandoned_at IS NULL
AND a.status_id IS NULL
OR (a.status_id = '004e2419-9614-4c1e-a207-a8418009f23d' AND a.status_created_at > (current_date - INTERVAL '32 DAY')) -- Referral withdrawn
OR (a.status_id = 'f13bbdd6-44f1-4362-b9d3-e6f1298b1bf9' AND a.status_created_at > (current_date - INTERVAL '32 DAY')) -- Referral cancelled
OR (a.status_id = '89458555-3219-44a2-9584-c4f715d6b565' AND a.status_created_at > (current_date - INTERVAL '32 DAY')) -- Awaiting arrival
OR (a.status_id NOT IN ('004e2419-9614-4c1e-a207-a8418009f23d',
'f13bbdd6-44f1-4362-b9d3-e6f1298b1bf9',
'89458555-3219-44a2-9584-c4f715d6b565'));
CREATE OR REPLACE VIEW cas_2_v2_application_summary AS
SELECT a.id,
a.crn,
a.noms_number,
CAST(a.created_by_user_id AS TEXT),
nu.name,
a.created_at,
a.submitted_at,
a.hdc_eligibility_date,
asu.label,
CAST(asu.status_id AS TEXT),
a.referring_prison_code,
a.conditional_release_date,
asu.created_at AS status_created_at,
a.abandoned_at
FROM cas_2_v2_applications a
LEFT JOIN (SELECT DISTINCT ON (application_id) su.application_id, su.label, su.status_id, su.created_at
FROM cas_2_v2_status_updates su
ORDER BY su.application_id, su.created_at DESC) as asu
ON a.id = asu.application_id
JOIN nomis_users nu ON nu.id = a.created_by_user_id;

CREATE OR REPLACE VIEW cas_2_v2_application_live_summary AS
SELECT a.id,
a.crn,
a.noms_number,
a.created_by_user_id,
a.name,
a.created_at,
a.submitted_at,
a.hdc_eligibility_date,
a.label,
a.status_id,
a.referring_prison_code,
a.abandoned_at
FROM cas_2_v2_application_summary a
WHERE (a.conditional_release_date IS NULL OR a.conditional_release_date >= current_date)
AND a.abandoned_at IS NULL
AND a.status_id IS NULL
OR (a.status_id = '004e2419-9614-4c1e-a207-a8418009f23d' AND
a.status_created_at > (current_date - INTERVAL '32 DAY')) -- Referral withdrawn
OR (a.status_id = 'f13bbdd6-44f1-4362-b9d3-e6f1298b1bf9' AND
a.status_created_at > (current_date - INTERVAL '32 DAY')) -- Referral cancelled
OR (a.status_id = '89458555-3219-44a2-9584-c4f715d6b565' AND
a.status_created_at > (current_date - INTERVAL '32 DAY')) -- Awaiting arrival
OR (a.status_id NOT IN ('004e2419-9614-4c1e-a207-a8418009f23d',
'f13bbdd6-44f1-4362-b9d3-e6f1298b1bf9',
'89458555-3219-44a2-9584-c4f715d6b565'));
2 changes: 0 additions & 2 deletions src/main/resources/static/cas2v2-schemas.yml
Original file line number Diff line number Diff line change
Expand Up @@ -144,8 +144,6 @@ components:
assessment:
type: object
$ref: '_shared.yml#/components/schemas/Cas2v2Assessment'
applicationOrigin:
$ref: "_shared.yml#/components/schemas/ApplicationOrigin"
bailHearingDate:
type: string
format: date
Expand Down
2 changes: 0 additions & 2 deletions src/main/resources/static/codegen/built-cas2v2-api-spec.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5548,8 +5548,6 @@ components:
assessment:
type: object
$ref: '#/components/schemas/Cas2v2Assessment'
applicationOrigin:
$ref: "#/components/schemas/ApplicationOrigin"
bailHearingDate:
type: string
format: date
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,6 @@ class Cas2v2SubmissionsTransformerTest {
"telephoneNumber",
"timelineEvents",
"assessment",
"applicationOrigin",
"bailHearingDate",
)
}
Expand Down
Loading