diff --git a/app/models/licence-version-purpose.model.js b/app/models/licence-version-purpose.model.js new file mode 100644 index 0000000000..153fd967ee --- /dev/null +++ b/app/models/licence-version-purpose.model.js @@ -0,0 +1,31 @@ +'use strict' + +/** + * Model for LicenceVersionPurposes (water.licence_version_purposes) + * @module LicenceVersionPurposes + */ + +const { Model } = require('objection') + +const BaseModel = require('./base.model.js') + +class LicenceVersionPurposes extends BaseModel { + static get tableName () { + return 'licenceVersionPurposes' + } + + static get relationMappings () { + return { + licenceVersion: { + relation: Model.BelongsToOneRelation, + modelClass: 'licence-version.model', + join: { + from: 'licenceVersionPurposes.licenceVersionId', + to: 'licenceVersions.id' + } + } + } + } +} + +module.exports = LicenceVersionPurposes diff --git a/app/models/licence-version.model.js b/app/models/licence-version.model.js index ad212a3857..66498e9148 100644 --- a/app/models/licence-version.model.js +++ b/app/models/licence-version.model.js @@ -23,6 +23,18 @@ class LicenceVersionModel extends BaseModel { from: 'licenceVersions.licenceId', to: 'licences.id' } + }, + purposes: { + relation: Model.ManyToManyRelation, + modelClass: 'purpose.model', + join: { + from: 'licenceVersions.id', + through: { + from: 'licenceVersionPurposes.licenceVersionId', + to: 'licenceVersionPurposes.purposeId' + }, + to: 'purposes.id' + } } } } diff --git a/app/presenters/licences/view-licence.presenter.js b/app/presenters/licences/view-licence.presenter.js index cd759f9527..0273dd8649 100644 --- a/app/presenters/licences/view-licence.presenter.js +++ b/app/presenters/licences/view-licence.presenter.js @@ -15,7 +15,17 @@ const { formatLongDate } = require('../base.presenter.js') * @returns {Object} The data formatted for the view template */ function go (licence) { - const { ends, expiredDate, id, licenceDocumentHeader, licenceHolder, licenceRef, region, startDate } = licence + const { + ends, + expiredDate, + id, + licenceDocumentHeader, + licenceHolder, + licenceRef, + licenceVersions, + region, + startDate + } = licence return { id, @@ -24,6 +34,7 @@ function go (licence) { licenceHolder: _generateLicenceHolder(licenceHolder), licenceRef, pageTitle: `Licence ${licenceRef}`, + purposes: _generatePurposes(licenceVersions), region: region.displayName, startDate: formatLongDate(startDate), warning: _generateWarningMessage(ends) @@ -46,6 +57,22 @@ function _generateLicenceHolder (licenceHolder) { return licenceHolder } +function _generatePurposes (licenceVersions) { + if (!licenceVersions || licenceVersions.length === 0 || licenceVersions[0]?.purposes.length === 0) { + return null + } + const allPurposeDescriptions = licenceVersions[0].purposes.map((item) => { + return item.description + }) + + const uniquePurposes = [...new Set(allPurposeDescriptions)] + + return { + caption: uniquePurposes.length === 1 ? 'Purpose' : 'Purposes', + data: uniquePurposes + } +} + function _generateWarningMessage (ends) { if (!ends) { return null diff --git a/app/services/licences/fetch-licence.service.js b/app/services/licences/fetch-licence.service.js index 81bb6c7291..d93bd9a0cf 100644 --- a/app/services/licences/fetch-licence.service.js +++ b/app/services/licences/fetch-licence.service.js @@ -55,6 +55,7 @@ async function _fetchLicence (id) { 'id' ]) }) + .withGraphFetched('licenceVersions.[purposes]') .modify('licenceHolder') return result diff --git a/app/views/licences/tabs/summary.njk b/app/views/licences/tabs/summary.njk index 4469ca9c2b..808fe99ae9 100644 --- a/app/views/licences/tabs/summary.njk +++ b/app/views/licences/tabs/summary.njk @@ -4,7 +4,7 @@