@Override
public ProcessContext<Order> execute(ProcessContext<Order> context) throws Exception {
Order order = context.getSeedData();
OrderPayment unconfirmedThirdPartyOrCreditCard = null;
Money appliedPaymentsWithoutThirdPartyOrCC = Money.ZERO;
for (OrderPayment payment : order.getPayments()) {
if (payment.isActive()) {
if (!payment.isConfirmed() && payment.isFinalPayment()) {
unconfirmedThirdPartyOrCreditCard = payment;
} else if (payment.getAmount() != null) {
appliedPaymentsWithoutThirdPartyOrCC = appliedPaymentsWithoutThirdPartyOrCC.add(payment.getAmount());
}
}
}
if (unconfirmedThirdPartyOrCreditCard != null) {
Money difference = order.getTotal().subtract(appliedPaymentsWithoutThirdPartyOrCC);
unconfirmedThirdPartyOrCreditCard.setAmount(difference);
}
context.setSeedData(order);
return context;