Однако не установлено, какая квитанция была оплачена на какой депозит.
Это ключ к вашей проблеме. Вы должны иметь возможность связать квитанции с депозитами ВВЕРХ. Представьте, если бы вы работали с бумажными квитанциями, как бы вы справились с этим? Вам нужно будет спросить человека, который дал вам квитанцию, сколько было предназначено для какого депозита, а затем, как только вы узнаете это, вы запишите это в квитанции. Как только вы узнаете это и отразите это в том, как вы представляете квитанции, вы можете создать xslt для извлечения этих битов. К сожалению, я не могу помочь вам с xslt для этого, но представьте, что у каждого чека есть дочерний элемент для каждого раздела. как:
<RECEIPTS total=500 blah blah blah>
<subtotal deposit=1 amount=100>
<subtotal deposit=2 amount=300>
</RECEIPTS>
затем, когда вы проходите цикл, возьмите потомков квитанции, прокрутите каждый промежуточный итог и добавьте его к соответствующему счетчику для суммы депозита.
Кроме того, я заметил, исходя из желаемого результата, что произойдет, если к депозиту будет применено более одного чека? как вы это представляете? в настоящее время у вас есть
Deposit 2 is partly paid (status=outstanding, dueAmount=50, receiptNum=3
что, если депозит 2 был частично оплачен 2 квитанциями, будет ли для вас по-прежнему иметь значение атрибут receiveNum? вам, возможно, придется расширить это, возможно, добавив дочерние элементы промежуточных итогов таким же образом, как и модель квитанций, которую я предлагал ранее.
Я бы сказал, если вы хотите справиться с этим, представьте, что вы делали все это с / на бумаге. Это пролило бы свет на то, как вам нужно сделать это в коде.
Просматривая некоторые другие ваши посты, я понимаю, что вы, возможно, не управляете набором данных, который получаете. Однако в какой-то момент вы должны быть в состоянии ответить на вопрос: «Какие суммы этих поступлений идут на какие депозиты?» После этого, я должен сказать, что ваши попытки использовать рекурсию для решения этой проблемы могут служить только для того, чтобы сбить вас с толку. Любой метод рекурсии можно заменить циклом. Я с нетерпением жду возможности увидеть ваше окончательное решение.