簡體   English   中英

Suitescript 完成后觸發 Avalara 運行

[英]Trigger Avalara to run after Suitescript completes

隨着科羅拉多州增加新的運費稅,我正在尋找一種方法來在 NetSuite 中更新發票后調用 Avalara 重新計算流程。 我們必須添加一個與此稅相關的新行項目,然后讓它重新處理 Avalara 函數,以便能夠將新行包含在 Avalara 稅中。 我已經完成了一個簡單的工作流程來添加新行。 但是,它不會召回 Avalara 腳本,因此不會將信息添加到征稅文件中。 有沒有人能夠在 NetSuite 后期工作流或腳本完成中調用 Avalara 腳本?

提前致謝,

布拉德

上周我花了太多時間處理這個確切的問題。 我也嘗試過 go 工作流程路線,但最終決定需要一個腳本。 我嘗試了幾種方法,但最終的解決方案是創建一個不可履行的非庫存項目,並使用部署在銷售訂單上的用戶事件腳本在創建時將 RDF 項目添加到適用的記錄中。 在我們的例子中,這些 SO 是在 UI 中創建的,從 CSV 導入,或通過 Suitelet(和 Celigo)從我們的 Shopify 網上商店導入。 腳本的基礎如下:

    const beforeSubmit = (context) => {

        let salesOrder = context.newRecord;
        let shipState = salesOrder.getValue('shipstate');
        let channel = salesOrder.getValue('class');
        let total = salesOrder.getValue('total');
        let customerId = salesOrder.getValue('entity');

        if (!rdfExists(salesOrder) && shipState == 'CO' && (channel == '5' || channel == '6') || (channel == '15' && total > 0)) {
            if (customerTaxable(customerId)) {
                addRDF(salesOrder);
            }
        }
    }

本質上,這只是檢查一些參數(SO 不知何故還沒有 RDF 行項目,Ship State 是 CO,並且它是滿足這些訂單標准的自定義渠道之一。如果訂單滿足這些標准將加載客戶記錄以檢查客戶是否應納稅。如果他們應納稅,它將 RDF 行項目添加到記錄中。

這顯然包括一些輔助功能,我將包括其中的片段,但對它們持保留態度,我們處於高度定制的實例中,對我們有用的可能對你不起作用(而且我不是專業開發人員並且這是為了完整性而不是優化而編寫的)。

    function rdfExists(record) {

        //Loop through line items looking for 'Colorado Retail Delivery Fee' item
        let numLines = record.getLineCount('item');
        const RDFITEM = runtime.getCurrentScript().getParameter('custscript_co_rdf_id');

        for (let i = 0; i < numLines; i++) {
            let itemId = record.getSublistValue({
                sublistId: 'item',
                fieldId: 'item',
                line: i
            });

            if (itemId == RDFITEM) {
                return true;
            }
        }
        return false;
    }

    function addRDF(record) {

        const RDFITEM = runtime.getCurrentScript().getParameter('custscript_co_rdf_id');
        let numLines = record.getLineCount('item');

        record.insertLine({
            sublistId: 'item',
            line: numLines,
            ignoreRecalc: false
        });

        record.setSublistValue({
            sublistId: 'item',
            fieldId: 'item',
            line: numLines,
            value: RDFITEM
        });

        record.setSublistValue({
            sublistId: 'item',
            fieldId: 'quantity',
            line: numLines,
            value: 1
        });

        record.setSublistValue({
            sublistId: 'item',
            fieldId: 'taxcode',
            line: numLines,
            value: '5025'
        });
    }

    function customerTaxable(customerId) {

        let customerRecord = record.load({
            type: record.Type.CUSTOMER,
            id: customerId
        });

        if (customerRecord.getValue('taxable')) {
            return true;
        } else {
            return false;
        }
    }

這成功地將行添加到銷售訂單,但仍然沒有調用 Avalara 來計算新項目的稅收。 為此,還有幾個步驟:

  • 將項目的 Avatax 稅碼設置為 OF400000(根據此處的 Avalara 幫助文章)
  • 執行與Avalara 幫助文章基本相反的操作,將 AVA_TransactionTab_2 UE 腳本移動到腳本記錄列表的底部(Avalara 說它位於底部,但出於某種原因我們的是第一個)。
  • 修改文件 /SuiteBundles/Bundle 1894/utility/AVA_TaxLibrary.js 以允許計算新 RDF 項目的稅費。 這是我最不興奮的部分。 我嘗試了很多東西,但稅收不會計算在內。 長話短說,該訂單項“未通過”在AVA_TransactionBeforeSubmit function 中調用的AVA_RequiredFieldsFunction中調用的AVA_MainTaxCodeCheck function,因此未運行AVA_CalculateTax function...是否感到困惑? 基本上我只是修改了那個庫以包含一個聲明,如果它找不到某個項目的lineTaxCode ,則檢查它是否是我的 RDF 項目,以及是否要計算稅款(該行項目僅添加到我的訂單中)希望對其征稅)。 我不想公開分享我對該庫的硬編碼,但如果您想了解更多信息,請給我發消息。

從那里我們修改了 SO 和發票 PDF 模板以包含從這些訂單的稅行中刪除 $.27 並將其添加為自己的行項目的邏輯:

CO RDF 發票行項目

總而言之 - 這是一個適合我們的解決方案。 顯然,您的商業案例會有所不同,但這對我們有用,希望至少可以引導您朝着正確的方向前進。 所有這一切只需 27 美分......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM