I've to write some transformation and calculation based on condition like count of cash/dd/cheque receipt and sum of cash/dd/cheque in the summary array. I've defined my input array and based on that i'm expecting the output that I've defined. Help me to complete the dataweave for that.\
Code:
%dw 2.0
output application/json
---
{
receipt: payload map ( payload01 , indexOfPayload01 ) -> {
receiptId: payload01.receiptId,
amountCollected: payload01.amountCollected,
paymentMode: payload01.paymentMode,
},
summary: {
TotalamountCollected: payload.*amountCollected reduce ((val, acc=0) -> acc + val)
}
}
input:
[{
"receiptId": 11000134453,
"amountCollected": 11,
"paymentMode": "Cash"
}, {
"receiptId": 1105444723,
"amountCollected": 12,
"paymentMode": "Cheque"
}, {
"receiptId": 1143434763,
"amountCollected": 13,
"paymentMode": "DD"
},{
"receiptId": 11000134457,
"amountCollected": 14,
"paymentMode": "Cash"
}, {
"receiptId": 1105444728,
"amountCollected": 15,
"paymentMode": "Cheque"
}, {
"receiptId": 1143434769,
"amountCollected": 16,
"paymentMode": "DD"
}]
output:
{
"summary": {
"TotalamountCollected": 81,
"cashRecepit": 2,
"cashRecepitAmount": 25,
"chequeRecepit": 2,
"chequeRecepitAmount": 27,
"ddRecepit": 2,
"ddRecepitAmount": 29
},
"receipt": [{
"receiptId": 11000134453,
"amountCollected": 11,
"paymentMode": "Cash"
}, {
"receiptId": 1105444723,
"amountCollected": 12,
"paymentMode": "Cheque"
}, {
"receiptId": 1143434763,
"amountCollected": 13,
"paymentMode": "DD"
},{
"receiptId": 11000134457,
"amountCollected": 14,
"paymentMode": "Cash"
}, {
"receiptId": 1105444728,
"amountCollected": 15,
"paymentMode": "Cheque"
}, {
"receiptId": 1143434769,
"amountCollected": 16,
"paymentMode": "DD"
}]
}
Help me to complete the dataweave for that.
Here is a solution that involves one iteration over the input. I'm curious if anyone has any cleaner solutions.
%dw 2.0
output application/json
var inputVar =
[{
"receiptId": 11000134453,
"amountCollected": 11,
"paymentMode": "Cash"
}, {
"receiptId": 1105444723,
"amountCollected": 12,
"paymentMode": "Cheque"
}, {
"receiptId": 1143434763,
"amountCollected": 13,
"paymentMode": "DD"
},{
"receiptId": 11000134457,
"amountCollected": 14,
"paymentMode": "Cash"
}, {
"receiptId": 1105444728,
"amountCollected": 15,
"paymentMode": "Cheque"
}, {
"receiptId": 1143434769,
"amountCollected": 16,
"paymentMode": "DD"
}]
var init =
{
"TotalamountCollected": 0,
"cashRecepit": 0,
"cashRecepitAmount": 0,
"chequeRecepit": 0,
"chequeRecepitAmount": 0,
"ddRecepit": 0,
"ddRecepitAmount": 0
}
fun calcModeAmmount(acc, isTargetedMode, addend) = acc + if(isTargetedMode) addend else 0
fun summary() = inputVar reduce(item, acc=init) ->
{
"TotalamountCollected": acc.TotalamountCollected + item.amountCollected,
"cashRecepit": calcModeAmmount(acc.cashRecepit, item.paymentMode == "Cash", 1),
"cashRecepitAmount": calcModeAmmount(acc.cashRecepitAmount, item.paymentMode == "Cash", item.amountCollected),
"chequeRecepit": calcModeAmmount(acc.chequeRecepit, item.paymentMode == "Cheque", 1),
"chequeRecepitAmount": calcModeAmmount(acc.chequeRecepitAmount, item.paymentMode == "Cheque", item.amountCollected),
"ddRecepit": calcModeAmmount(acc.ddRecepit, item.paymentMode == "DD", 1),
"ddRecepitAmount": calcModeAmmount(acc.ddRecepitAmount, item.paymentMode == "DD", item.amountCollected)
}
---
{
summary:summary(),
receipt:inputVar
}