SuiteScript 1.0 - автоматическое применение клиентского депозита к счету - PullRequest
0 голосов
/ 06 сентября 2018

При использовании SuiteScript 1.0 у меня возникают некоторые трудности с получением клиентского депозита для применения к счету.

Пара замечаний к предисловию:

  • Депозит может быть привязан к дочернему клиенту, а счет - к родителю. Я не могу изменить этот процесс по определенным причинам.
  • Залог не та же сумма, что и в счете.
  • invoicerec - фактическая запись счета , только что созданная предыдущим сценарием.
  • depositid - внутренний идентификатор клиентской депозитной записи
  • invoiceid - внутренний идентификатор записи счета
  • amounttoapply - это сумма , оставшаяся , не примененная к клиентскому депозиту.

Код, который я пробовал:

    var invoiceamount = invoicerec.getFieldValue('amountremaining');
    var amounttoapply = 0;
    if (depositleft > invoiceamount) amounttoapply = invoiceamount;
    else amounttoapply = depositleft;

    if (amounttoapply > 0) {

        var payment = nlapiTransformRecord('invoice', invoiceid, 'customerpayment');
        var invrefnum = invoicerec.getFieldValue('tranid');
        payment.setFieldValue('amount',0);
        payment.setFieldValue('autoapply','T');

        var applylines      = payment.getLineItemCount('apply');
        var depositlines    = payment.getLineItemCount('deposit');

            for (var i=1; i < depositlines; i++) {
                var lineid = payment.getLineItemValue('deposit', 'internalid', i);
                log ('Compare Dep Line Trans ID#'+lineid+' with the Deposit Trans ID#'+depositid )
                if (lineid == depositid ){
                    payment.setLineItemValue('deposit', 'amount', i, amounttoapply );
                }
            }

            for (var i=1; i<applylines; i++) {
                var lineid = payment.getLineItemValue('apply', 'internalid', i);
                if (lineid == invoiceid ){
                    payment.setLineItemValue('apply', 'amount', i, amounttoapply );
                }
            }


var paymentid = nlapiSubmitRecord(payment);

Проблема: я могу получить платеж, который необходимо создать, однако он хочет применить всю сумму счета, а не взять сумму депозита клиента.

Чувствую, что упускаю что-то очень очень прямо вперед.

Ценю любую помощь.

1 Ответ

0 голосов
/ 07 сентября 2018

Нашел мой собственный ответ, в подсписке депозитов нет внутреннего поля, а есть текстовое поле "doc", содержащее идентификатор.

Если депозит является единственной примененной «суммой», то не создается запись о платеже, а скорее приложение для внесения депозита.

...