/**
* Update Asset
* @module mHelpDesk/updateAsset
*/
const axios = require('axios')
const { getPromiseOfAccessToken } = require('./authentication')
const config = require('../config')
const updateAsset = async (xmlObject) => {
// TODO: replace with generic access token getter
const accessToken = await getPromiseOfAccessToken()
const res = await axios({
url: `${config.api.url}/portal/${config.api.portalId}/equipment`,
method: 'get',
headers: {
Authorization: `Bearer ${accessToken}`
}
})
const matchingEquipment = res.data.results.filter(result => {
return result.customFields.some(field =>
field.customFieldId ===
config.api.equipmentCustomFieldMappings['ClientReferenceNumber'] &&
parseInt(field.value) === parseInt(xmlObject['ClientReferenceNumber'][0])
)
})
console.log(JSON.stringify(matchingEquipment))
if (matchingEquipment.length !== 1) {
throw new Error(`${matchingEquipment.length} matching equipments. Should be 1.`)
}
const equipmentToUpdate = matchingEquipment[0]
equipmentToUpdate.serialNumber = xmlObject['SerialNumber'][0]
// TODO: make this more extenisble. For now it's fine though.
equipmentToUpdate.customFields.forEach(customField => {
// xmlObject: these are arrays of one value
switch (customField.customFieldId) {
case config.api.equipmentCustomFieldMappings['ModelNumber']:
customField.fieldValue = xmlObject['ModelNumber'][0]
equipmentToUpdate.name = xmlObject['ModelNumber'][0]
break
case config.api.equipmentCustomFieldMappings['AssetId']:
customField.fieldValue = xmlObject['AssetId'][0]
break
case config.api.equipmentCustomFieldMappings['Description']:
customField.fieldValue = customField.value ? customField.value : 'No Description'
break
default:
customField.fieldValue = customField.value
break
}
})
// filter out null custom fields; no need to submit + it errors
equipmentToUpdate.customFields = equipmentToUpdate.customFields.filter(
customField => customField.fieldValue !== null
)
const updatedEquipment = equipmentToUpdate
console.log(JSON.stringify(updatedEquipment))
await axios({
url: `${config.api.url}/portal/${config.api.portalId}/equipment/${updatedEquipment.equipmentId}`,
method: 'put',
headers: {
Authorization: `Bearer ${accessToken}`,
'Content-Type': 'application/json'
},
data: JSON.stringify(updatedEquipment)
})
console.log('Updated Asset')
return true
}
exports.updateAsset = updateAsset