Skip to content

Commit

Permalink
Merge pull request #1059 from uktrade/release/v3.6
Browse files Browse the repository at this point in the history
Release/v3.6
  • Loading branch information
jim68000 authored Dec 5, 2017
2 parents a1a6cf7 + 87b88b7 commit 9aea81d
Show file tree
Hide file tree
Showing 21 changed files with 595 additions and 194 deletions.
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "data-hub-frontend",
"version": "3.5.1",
"version": "3.6.0",
"description": "Data Hub Frontend",
"main": "src/server.js",
"repository": {
Expand Down Expand Up @@ -62,7 +62,7 @@
"markdown-it": "^8.4.0",
"mocha": "^4.0.1",
"mocha-multi": "^0.11.0",
"moment": "^2.17.1",
"moment": "^2.19.3",
"moment-duration-format": "^1.3.0",
"nock": "^9.0.18",
"node-sass": "^4.0.0",
Expand Down
10 changes: 10 additions & 0 deletions src/apps/adviser/filters.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
const { get } = require('lodash')

function filterActiveAdvisers ({ advisers = [], includeAdviser }) {
return advisers.filter((adviser) => {
return get(adviser, 'is_active', true) || adviser.id === includeAdviser
})
}
module.exports = {
filterActiveAdvisers,
}
30 changes: 30 additions & 0 deletions src/apps/companies/controllers/account-management.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
const { get, merge, pickBy } = require('lodash')

const { accountManagementFormConfig } = require('../macros')
const { buildFormWithStateAndErrors } = require('../../builders')

function renderAccountManagementEditPage (req, res) {
const { one_list_account_owner } = res.locals.company
const mergedCompanyData = pickBy(merge({}, { one_list_account_owner }, res.locals.requestBody))

const accountManagementForm =
buildFormWithStateAndErrors(
accountManagementFormConfig({
returnLink: `/companies/${res.locals.company.id}`,
advisers: res.locals.advisers,
}),
mergedCompanyData,
get(res.locals, 'form.errors.messages'),
)

res
.breadcrumb('Edit account management')
.title(`Edit account management for ${res.locals.company.name}`)
.render('companies/views/account-management-edit', {
accountManagementForm,
})
}

module.exports = {
renderAccountManagementEditPage,
}
4 changes: 2 additions & 2 deletions src/apps/companies/labels.js
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,8 @@ const hqLabels = {
'ukhq': 'UK headquarters (UK HQ)',
}
const accountManagementDisplayLabels = {
oneListTier: 'One List tier',
oneListAccountManager: 'One List account manager',
one_list_tier: 'One List tier',
one_list_account_owner: 'One List account manager',
}

const exportDetailsLabels = {
Expand Down
31 changes: 31 additions & 0 deletions src/apps/companies/macros.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
const { assign } = require('lodash')

const { globalFields } = require('../macros')
const formLabels = require('./labels')
const { transformObjectToOption } = require('../transformers')

const companyFiltersFields = [
{
Expand Down Expand Up @@ -45,7 +49,34 @@ const companySortForm = {
],
}

const accountManagementFormConfig = function ({
returnLink,
advisers = [],
}) {
return {
returnLink,
buttonText: 'Save',
returnText: 'Cancel',
children: [
{
macroName: 'MultipleChoiceField',
name: 'one_list_account_owner',
initialOption: '-- Select account manager --',
optional: true,
options () {
return advisers.map(transformObjectToOption)
},
},
].map(field => {
return assign(field, {
label: formLabels.accountManagementDisplayLabels[field.name],
})
}),
}
}

module.exports = {
companySortForm,
companyFiltersFields,
accountManagementFormConfig,
}
35 changes: 35 additions & 0 deletions src/apps/companies/middleware/account-management.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
const { getAdvisers } = require('../../adviser/repos')
const { filterActiveAdvisers } = require('../../adviser/filters')
const { updateCompany } = require('../repos')

async function populateAccountManagementForm (req, res, next) {
try {
const advisers = await getAdvisers(req.session.token)
res.locals.advisers = filterActiveAdvisers({ advisers: advisers.results })

next()
} catch (err) {
next(err)
}
}

async function postAccountManagementDetails (req, res, next) {
const data = {
one_list_account_owner: req.body.one_list_account_owner,
}

try {
const result = await updateCompany(req.session.token, res.locals.company.id, data)

req.flash('success', 'Account management details updated')

res.redirect(`/companies/${result.id}`)
} catch (error) {
next(error)
}
}

module.exports = {
populateAccountManagementForm,
postAccountManagementDetails,
}
7 changes: 7 additions & 0 deletions src/apps/companies/router.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ const {
renderExportEdit,
handleEditFormPost,
} = require('./controllers/exports')
const { renderAccountManagementEditPage } = require('./controllers/account-management')

const { setDefaultQuery, setLocalNav, redirectToFirstNavItem } = require('../middleware')
const {
Expand All @@ -35,6 +36,7 @@ const { setCompanyContactRequestBody, getCompanyContactCollection } = require('.
const { populateForm, handleFormPost, setIsEditMode } = require('./middleware/form')
const { getCompany, getCompaniesHouseRecord } = require('./middleware/params')
const { setInteractionsReturnUrl, setInteractionsEntityName } = require('./middleware/interactions')
const { populateAccountManagementForm, postAccountManagementDetails } = require('./middleware/account-management')

const interactionsRouter = require('../interactions/router.sub-app')

Expand Down Expand Up @@ -83,6 +85,11 @@ router
.get(setIsEditMode, populateForm, renderForm)
.post(setIsEditMode, populateForm, handleFormPost, renderForm)

router
.route('/:companyId/account-management/edit')
.get(populateAccountManagementForm, renderAccountManagementEditPage)
.post(populateAccountManagementForm, postAccountManagementDetails, renderAccountManagementEditPage)

router.post('/:companyId/archive', archiveCompany)
router.get('/:companyId/unarchive', unarchiveCompany)

Expand Down
4 changes: 2 additions & 2 deletions src/apps/companies/transformers/company-to-one-list-view.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ const { accountManagementDisplayLabels } = require('../labels')

module.exports = function transformCompanyToOneListView ({ one_list_account_owner, classification }) {
const viewRecord = {
oneListAccountManager: get(one_list_account_owner, 'name', 'None'),
oneListTier: get(classification, 'name', 'None'),
one_list_account_owner: get(one_list_account_owner, 'name', 'None'),
one_list_tier: get(classification, 'name', 'None'),
}

return getDataLabels(viewRecord, accountManagementDisplayLabels)
Expand Down
5 changes: 5 additions & 0 deletions src/apps/companies/views/account-management-edit.njk
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{% extends "_layouts/datahub-base.njk" %}

{% block body_main_content %}
{{ Form(accountManagementForm) }}
{% endblock %}
1 change: 1 addition & 0 deletions src/apps/companies/views/details.njk
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
<div class="section">
<h2 class="heading-medium">Account management</h2>
{% component 'key-value-table', variant='striped', items=accountManagementDetails %}
<p><a href="/companies/{{company.id}}/account-management/edit" class="button button-secondary">Edit</a></p>
</div>

{% if company.id and not company.archived %}
Expand Down
5 changes: 2 additions & 3 deletions src/apps/companies/views/exports-edit.njk
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,6 @@
{% endblock %}

{% block main_grid_right_column %}
<h2 class="heading-medium">Add export market(s)</h2>

{% call Form({
buttonText: 'Update',
returnLink: '/companies/' + company.id + '/exports',
Expand All @@ -22,7 +20,8 @@
label: exportDetailsLabels.exportExperienceCategory,
value: formData.export_experience_category,
options: exportExperienceCategories,
initialOption: '-- Select category --'
initialOption: '-- Select category --',
optional: true
}) }}

{# TODO: Make these work without JavaScript #}
Expand Down
18 changes: 9 additions & 9 deletions src/apps/events/controllers/edit.js
Original file line number Diff line number Diff line change
@@ -1,28 +1,28 @@
/* eslint camelcase: 0 */
const { assign, merge, get, pickBy } = require('lodash')

const { eventFormConfig } = require('../macros')
const { transformEventResponseToFormBody } = require('../transformers')
const { buildFormWithStateAndErrors } = require('../../builders')
const { assign, merge, get, pickBy } = require('lodash')
const { getAdvisers } = require('../../adviser/repos')
const { filterDisabledOption } = require('../../filters')

async function getActiveAdvisers (token, currentAdviser) {
const allAdvisers = await getAdvisers(token)
return allAdvisers.results.filter(filterDisabledOption(currentAdviser))
}
const { filterActiveAdvisers } = require('../../adviser/filters')

async function renderEditPage (req, res, next) {
try {
const eventData = transformEventResponseToFormBody(res.locals.event)
const advisers = await getActiveAdvisers(req.session.token, get(eventData, 'organiser.id'))

const currentAdviser = get(eventData, 'organiser.id')
const advisers = await getAdvisers(req.session.token)
const activeAdvisers = filterActiveAdvisers({ advisers: advisers.results, includeAdviser: currentAdviser })

const eventId = get(eventData, 'id', '')
const eventName = get(eventData, 'name')
const lead_team = eventData.lead_team || get(req, 'session.user.dit_team.id')
const mergedData = pickBy(merge({}, eventData, { lead_team }, res.locals.requestBody))

const eventForm =
buildFormWithStateAndErrors(
eventFormConfig({ eventId, advisers }),
eventFormConfig({ eventId, advisers: activeAdvisers }),
mergedData,
get(res.locals, 'form.errors.messages'),
)
Expand Down
22 changes: 12 additions & 10 deletions src/apps/interactions/middleware/details.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,9 @@ const { fetchInteraction, saveInteraction } = require('../repos')
const metaDataRepository = require('../../../lib/metadata')
const { getContactsForCompany, getContact } = require('../../contacts/repos')
const { getAdvisers } = require('../../adviser/repos')
const { filterActiveAdvisers } = require('../../adviser/filters')
const { getActiveEvents } = require('../../events/repos')
const { getDitCompany } = require('../../companies/repos')
const { filterDisabledOption } = require('../../filters')

async function getActiveAdvisers (token, currentAdviser) {
const allAdvisers = await getAdvisers(token)
return allAdvisers.results.filter(filterDisabledOption(currentAdviser))
}

async function postDetails (req, res, next) {
res.locals.requestBody = transformInteractionFormBodyToApiRequest(req.body)
Expand Down Expand Up @@ -71,12 +66,19 @@ async function getInteractionDetails (req, res, next, interactionId) {

async function getInteractionOptions (req, res, next) {
try {
res.locals.advisers = await getActiveAdvisers(req.session.token, get(res.locals, 'interaction.dit_adviser.id'))
res.locals.contacts = await getContactsForCompany(req.session.token, res.locals.company.id)
res.locals.services = await metaDataRepository.getServices(req.session.token)
const token = req.session.token
const currentAdviser = get(res.locals, 'interaction.dit_adviser.id')
const company = get(res.locals, 'company.id')
const advisers = await getAdvisers(token)

res.locals = assign({}, res.locals, {
advisers: filterActiveAdvisers({ advisers: advisers.results, includeAdviser: currentAdviser }),
contacts: await getContactsForCompany(token, company),
services: await metaDataRepository.getServices(token),
})

if (req.params.kind === 'service-delivery') {
res.locals.events = await getActiveEvents(req.session.token)
res.locals.events = await getActiveEvents(token)
}

next()
Expand Down
Loading

0 comments on commit 9aea81d

Please sign in to comment.