I have a use case where we're looking to generate a flat-file based off HRIS data.
We retrieve one payload of employee data to include manager
The use case is to populate an isManager field if any record has that user as a manager.
I was able to retrieve an employee's manager, but walking down the tree is throwing me for a loop.
%dw 2.0
output application/json
var levelsPayload = payload[0].payload
var employeesPayload = payload[1].payload
var allManagerIds = employeesPayload.managerId
---
employeesPayload map (employee) -> {
id: employee.id,
endDate: employee.endDate,
isManager: allManagerIds contains employee.id,
manager: ((employeesPayload filter ( (value, index) -> value.id == employee.manager )) map ( (value,index) -> (value.preferredFirstName ++ ' ' ++ value.preferredLastName) )) joinBy (""),
managerEmail: ((employeesPayload filter ( (value, index) -> value.id == employee.manager )) map ( (value,index) -> value.workEmail )) joinBy (""),
firstName: employee.preferredFirstName default employee.firstName,
lastName: if (employee.preferredLastName == '' or employee.preferredLastName == null) employee.lastName else employee.preferredLastName,
userName: employee.workEmail,
email: employee.workEmail,
title: employee.title replace /(,)/ with " ",
displayName: employee.preferredFirstName ++ ' ' ++ employee.preferredLastName,
secondEmail: employee.personalEmail,
primaryPhone: employee.phone,
streetAddress: '',
city: employee.address.city,
state: employee.address.state,
zipCode: employee.address.zip,
countryCode: employee.address.country,
postalAddress: employee.address.zip,
employeeNumber: employee.employeeNumber,
department: employee.department,
managerId: employee.manager,
startDate: employee.startDate,
jobStatus: if (employee.endDate == null) "active" else "termed",
teams: (employee.teams joinBy '') as String,
level: ((levelsPayload as Array filter ( (value, index) -> value.id == employee.level )) map ( (value,index) -> value.name as String) ) joinBy (""),
employmentType: employee.employmentType,
legalFirstName: employee.firstName,
legalLastName: employee.lastName,
}
I'd assume I need to do a filter map, but am unsure how to return true if any element in the payload equals the manager's employee id