繁体   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