Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Documentation for Products and Inventory.
Loading...
Loading...
Documentation for Orders.
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Discover how NetSuite ERP and HotWax Commerce OMS integrate for seamless omnichannel retailing, empowering retailers to excel in modern commerce.
NetSuite ERP and HotWax Commerce's Omnichannel Order Management System (OMS) are two solutions, each playing a vital role in the retail ecosystem.
NetSuite ERP stands as an all-encompassing cloud-based business management solution that empowers organizations to operate more effectively. It achieves this by automating core processes and offering real-time visibility into both operational and financial performance. With a seamlessly integrated suite of applications for accounting, order processing, inventory management, production, supply chain, and warehouse operations, NetSuite ERP provides businesses with clear data visibility and tighter control over their operations.
HotWax Commerce OMS, on the other hand, is a cloud-based Omnichannel Order Management system that equips retailers with the tools they need to sell more and deliver fast in the omnichannel arena. By facilitating solutions such as Same-Day Buy Online Pick Up In Store (BOPIS), Buy Online Return In Store (BORIS), Ship From Store and Pre-Orders, HotWax Commerce empowers retailers to excel in today's omnichannel retail environment.
In the grand scheme of retail operations, NetSuite ERP serves as the backbone for managing procurement to payment workflows, accounting, and broader operational functions. Simultaneously, HotWax Commerce OMS acts as the linchpin for omnichannel retailing, facilitating inventory availability for online channels, efficient and dynamic order routing, processing, and fulfillment.
In this integration document, we will explore how NetSuite ERP and HotWax Commerce OMS integrate to create a seamless omnichannel retailing experience. We will delve into the integration methodologies in detail, demonstrating how these two systems come together to meet the demands of modern consumers and deliver exceptional shopping experiences across all channels.
Discover how N/task module in SuiteScript facilitates creating tasks for internal NetSuite scheduling, executing scripts, importing CSV files, and more, crucial for seamless integration.
N/task module is a cornerstone of SuiteScript, enabling developers to create tasks and place them in the internal NetSuite scheduling or task queue. These tasks serve a variety of purposes, including submitting scheduled scripts, running map/reduce scripts, importing CSV files, merging duplicate records, and executing asynchronous saved searches, constructed queries, SuiteQL queries, and workflows. Here, we delve into two task types that have been integral to our integration:
The CSVImport Task is a powerful tool integrated into SuiteScript, allowing developers to import CSV files into NetSuite. This task, when added to the task queue, asynchronously imports data into NetSuite. It's a versatile way to read and process CSV data within scripts. Notable details about the CSVImport Task include:
a. Efficient Data Import: Developers can employ the CSVImport Task to streamline the process of importing CSV data into NetSuite.
b. File Mapping with Import Maps: NetSuite's Import Assistant provides a UI tool for mapping CSV fields to NetSuite’s records and their fields and saving these mappings as Import Maps. Each Import Map is assigned a unique ID , which can be utilized by developers in SuiteScript. This unique identifier plays a pivotal role in mapping the fields of a CSV file to the corresponding fields within NetSuite records. ImportMapID ensures that data is seamlessly transposed from the CSV format to the structure required by NetSuite, simplifying the integration process and ensuring data accuracy.
c. Limitation: It's important to note that the CSV Import Assistant supports most commonly imported record types, but it does not support certain record types, such as Shipment Receipts and Customer Order Fulfillment. For information about the record types supported by the Import Assistant, please refer to Supported Record Types for CSV Import.It's important to note that CSV imports performed within scripts are subject to NetSuite's application limit of 25,000 records.
The Search Task is similar to NetSuite's Saved Search, with additional features that enable developers to not only conduct searches, but also persist the results and store them in NetSuite File Cabinet. This capability proves invaluable when dealing with searches across high volumes of data. Key insights into the Search Task include:
High-Speed Searches: The Search Task is optimized for speed, making it highly efficient for synchronizing large volumes of data.
Versatile Use: Developers can use SavedSearchIDs to execute specific searches, similar to Saved Searches.
Efficient Data Export: The task fetches the results of the saved search and exports them to a CSV file and automatically puts it in the Netsuite File Cabinet at very fast speed.
Advantages: It offers several advantages, including a simplified and efficient way to execute searches and export data. Compared to methods like using Map/Reduce script, it has shown impressive performance improvements, notably in scenarios involving the export of large datasets. We will discuss this further in which scenarios we have used this in our integration.
Explore how the N/Record module in SuiteScript facilitates seamless data integration by working with NetSuite records, including those not supported by NetSuite's CSV import.
The N/Record module serves as a pivotal tool in our integration strategy for working with NetSuite records. It is notably advantageous when handling data not natively supported by NetSuite's CSV import functionality. For instance, NetSuite may not support the direct import of certain records, such as Shipment Receipts created in HotWax Commerce.
In such scenarios, we employ the N/Record module to bridge this gap. By writing SuiteScript, we can read CSV data from files located in SFTP locations, iterate through each record, and seamlessly create records in NetSuite's database. This process ensures the effective import of data into NetSuite for records that fall outside the scope of CSV Import methods.
Moreover, the N/Record module extends its capabilities to include the creation, deletion, copying, loading, or modification of standard NetSuite records. This versatile module plays a central role in our integration, facilitating the manipulation of native NetSuite records to achieve seamless data synchronization.
Explore the robust capabilities of Saved Search in NetSuite, enabling users to create reusable search definitions for precise data retrieval and conditional queries, enhancing integration efficiency.
In NetSuite, Saved Search stands as a versatile tool that serves as a reusable search definition. It offers advanced search filters and result display options, providing an indispensable solution for retrieving specific data. One of its remarkable features is the ability to create and execute searches via NetSuite's user interface and save these searches for future use. This enables users to effortlessly design searches tailored to their requirements and expedite the data retrieval process.
In our integration with NetSuite ERP, we have capitalized on the formidable capabilities of Saved Search for data retrieval and conditional searches. Let's delve into the intricate details:
Database Querying: Saved Search plays a crucial role in querying the NetSuite database. It provides a user-friendly interface for crafting complex searches with multiple filters and conditions, granting users the power to precisely retrieve the data they need.
Reusability: The ability to create and save searches from the user interface offers unparalleled convenience. Each saved search is allocated a unique SavedSearchID, which developers can harness programmatically in their code. This versatility empowers developers to seamlessly integrate Saved Search into their scripting processes, ensuring data retrieval aligns with the specific needs of the integration.
Conditional Queries: Whether it's fetching specific customer orders or querying inventory data, Saved Search offers a seamless solution. The conditional searches it facilitates can be tailored to various scenarios, ensuring that only the required data is retrieved efficiently.
However, it's important to note a limitation: Saved Search does not allow for querying hardcoded values. This means that if you need to retrieve a specific record, such as obtaining the name of a customer with ID 1002, other methods should be employed.
Seamless Integration with SuiteScript: The synergy between Saved Search and SuiteScript is evident in our integration approach. We will discuss further on how developers can use Saved Search. Here's a simple example of how Saved Search and Suite Script work together:
Suppose you want to export all completed customer orders from NetSuite ERP every day. Here's how SuiteScript and Saved Search come into play:
SuiteScript Automation: We create a SuiteScript that is scheduled to run daily. This script is responsible for automating the data extraction process.
Saved Search Query: Within the SuiteScript code, we incorporate a "saved search" that's specifically designed to retrieve completed customer orders. The saved search is executed to obtain the relevant data.
Data Transformation: The SuiteScript processes the data returned from the saved search and formats it into a CSV or JSON file, ensuring that it is ready for external use.
Data Delivery: The resulting file can be placed in an SFTP location making it accessible to external systems for further processing.
This example showcases the harmonious interplay of SuiteScript and Saved Search in achieving a specific business task within the integration.
Discover HotWax Commerce's export/import tools, vital for NetSuite integration. Effortlessly export data in CSV/JSON formats & import via specialized scripts for seamless transfer.
HotWax Commerce offers robust export and import tools to facilitate the exchange of data between the system and external platforms. This feature plays a crucial role in our integration strategy with NetSuite.
HotWax Commerce allows the export of various data types, such as Sales Orders, Sales Order Fulfillments, Customer Returns, Purchase Order Receipts, and more. What sets this functionality apart is its adaptability. Data can be exported in different formats, such as CSV or JSON, and can also be transformed to meet NetSuite's requirements or the specifications of any third-party systems.
To ensure seamless data transfer to NetSuite, we have developed specialized HotWax Commerce scripts that handle the export process, including data transformation. These scripts play a vital role in our integration strategy, simplifying the export process and ensuring that data is correctly formatted for NetSuite.
Importing data into HotWax Commerce is equally essential for a well-rounded integration. Our approach involves the use of HotWax Commerce's Export/Import tool. This versatile tool allows us to import CSV files for various data types, including Purchase Orders, Transfer Orders, Sales Order Fulfillments, and more.
We have written specific jobs to manage the import process efficiently. These jobs are designed to read CSV files from SFTP locations and utilize the APIs provided by the Export/Import tools to seamlessly import CSV files into HotWax Commerce. This process is highly configurable and can be scheduled at predefined time intervals using HotWax Commerce's Job Manager application.
The combination of data export and import tools in HotWax Commerce empowers us to maintain data consistency and accuracy throughout our integration strategy with NetSuite.
Learn how fulfillment information is synchronized between NetSuite and HotWax Commerce, ensuring accurate order status updates and financial processing.
When the warehouse fulfillment team begins the fulfillment of the order item, an item fulfillment record is created in NetSuite. As soon as the order item is picked, packed and shipped, the item fulfillment record is marked as “Shipped” and the order status is updated from "Pending Fulfillment" to "Pending Billing".
Synchronizing shipped order items from NetSuite to HotWax Commerce ensures that the order status is consistent and updated across both systems.
Actions
A Map Reduce SuiteScript generates a CSV file containing item fulfillment records in the Shipped status and places it at an SFTP location.
SuiteScript
SFTP Locations
A scheduled job within HotWax Commerce Integration Platform reads and transforms this CSV file into the JSON format so that OMS can consume this file. This JSON file is then placed at an SFTP location.
A scheduled job within HotWax Commerce OMS reads this JSON file from the SFTP location, marking order items as fulfilled in HotWax Commerce.
Job in HotWax Commerce
The primary difference in this context is the approach to sending fulfillment location data from HotWax Commerce to NetSuite.
While fulfillment locations are indeed transmitted to NetSuite after in-store orders are fulfilled within HotWax Commerce, it's important to understand that this data transmission isn't critical for the actual fulfillment of orders. The fulfillment location data is conveyed to NetSuite once orders are fulfilled in HotWax Commerce. Its significance lies in updating order status in NetSuite, subsequent creation of invoices and the application of payments to these invoices. This step occurs post-fulfillment in HotWax Commerce to ensure proper financial processing and completion of orders in NetSuite.
Actions
A scheduled job in HotWax Commerce Integration Platform retrieves fulfilled order items and creates a feed of outbound shipments as a JSON file and places it at an SFTP location.
to be added
A Scheduled Script in NetSuite reads this JSON file from the SFTP location, allocating locations to the orders in NetSuite by updating order records. Additionally, it creates fulfillment records in Shipped status in NetSuite based on the HotWax Commerce shipment data using the N/Record module of NetSuite.
SuiteScript
SFTP Locations
Upon completion of this process, the orders transition from "Pending Fulfillment" to "Pending Billing" status, signifying that they are fulfilled and ready for billing.
The HC_SC_CreateItemFulfillment
SuiteScript also generates a CSV file highlighting erroneous records found during processing and uploads the file to the SFTP server. Simultaneously, an email alert is automatically triggered to designated personnel, helping them quickly pinpoint the source of the issue and accelerating troubleshooting.
Overall sync progress
Order fulfillment is completed and now the only step remaining is invoicing.
Approve order in HotWax for fulfillment
HotWax brokering allocates orders
Sync item allocation to NetSuite for facilities where NetSuite fulfillment is used
Sync order item fulfillment details from NetSuite to HotWax
Sync order item fulfillment details from HotWax to NetSuite
Invoice orders in NetSuite
Learn how invoices are generated in NetSuite and HotWax Commerce, finalizing payment transactions and accounting entries for completed orders, contributing to accurate financial reporting in both syst
Generating invoices in NetSuite for orders streamlines the financial processes. This step finalizes payment transactions and accounting entries for completed orders, contributing to accurate financial reporting. This step remains the same for orders whether items are fulfilled in NetSuite or not.
Actions
A scheduled SuiteScript in NetSuite identifies sales orders in "Pending_Billing" status, which have corresponding customer deposits already created.
Upon generating the invoice, the status of the customer deposit status is updated from "Undeposited" to "Fully Applied", and the invoice is marked as "PAID IN FULL," signifying payment reception and application to the invoice. This process also ensures all necessary accounting postings are handled in NetSuite.
This step has no external dependency on jobs running in HotWax Commerce.
SuiteScript
The HC_SC_CreateSalesOrderInvoice
SuiteScript also generates a CSV file highlighting erroneous records found during processing and uploads the file to the SFTP server. Simultaneously, an email alert is automatically triggered to designated personnel, helping them quickly pinpoint the source of the issue and accelerating troubleshooting.
Overall sync progress
This is the last step of the order sync. The order lifecycle has been completed.
Sync new orders from HotWax to NetSuite
Sync customers
Sync order line items
Sync order ids
Create customer deposit
Approve order in HotWax for fulfillment
HotWax brokering allocates orders
Sync item allocation to NetSuite for facilities where NetSuite fulfillment is used
Sync order item fulfillment details from NetSuite to HotWax
Sync order item fulfillment details from HotWax to NetSuite
Invoice orders in NetSuite
eCommerce platforms like Shopify lets customers cancel orders if they have not yet been fulfilled. Customers can initiate cancellations themselves, or they may request CSRs to cancel their orders. In either case, when an order is canceled on the eCommerce platform, it is marked as "Canceled".
HotWax Commerce runs a scheduled job every 15 minutes to synchronize order cancellations from the eCommerce platform. Upon the successful synchronization of cancellations from eCommerce, the order status is marked as "Canceled", and the payment status is set to "Refunded" in HotWax Commerce. Subsequently, when an order is marked as "Canceled" in HotWax Commerce, this cancellation update is synchronized with NetSuite to close the corresponding order in NetSuite.
Actions
A scheduled job in HotWax Commerce Integration Platform runs every 15 minutes and identifies order items that have been canceled in HotWax Commerce. Subsequently, generates a JSON file comprising the canceled order items and places this file at a designated SFTP location.
SFTP Location
A SuiteScript in NetSuite reads the JSON file from the SFTP location and updates the order status from "Pending Fulfillment" to "Closed" for the affected orders.
SuiteScript
When orders are created in NetSuite, corresponding customer deposits are also generated. In cases where an order is canceled, HotWax Commerce initiates a customer refund against the customer deposit in NetSuite to ensure accurate accounting and posting. If only a few items within a order are canceled, the refund is created only for the amount corresponding to the canceled items.
Actions
Another scheduled job in HotWax Commerce Integration Platform checks the refunded amount due to order cancellations, generates a JSON file containing this information and places the file at a designated SFTP location.
SFTP Location
A SuiteScript in NetSuite reads this file and generates a customer refund against the customer deposit. Upon the creation of the customer refund record, the status of the customer deposit is automatically updated from "Not Deposited" to "Fully Applied".
SuiteScript
Learn how the OMS syncs allocated items to systems for fulfillment, including NetSuite facilities for warehouse orders, ensuring accurate allocation and fulfillment processes.
After an order's items are allocated, the OMS begins syncing them to systems that are responsible for fulfillment of those items. When items are allocated to stores for fulfillment, they show up in the HotWax Store Fulfillment App.
If the facility where an item is allocated uses NetSuite for fulfillment, usually a warehouse, then the OMS syncs those items' allocation with NetSuite.
It's important to remember that if items are not allocated to a NetSuite Facility
their allocation is not synced to NetSuite until after fulfillment is complete.
Actions
A scheduled job in HotWax Commerce Integration Platform generates a CSV file containing order line items with their respective fulfillment locations and places this file at an SFTP location.
SFTP Location
A SuiteScript in NetSuite reads this CSV file from the SFTP location and updates fulfillment locations in sales orders by using the task.CsvImportTask of N/task module.
SuiteScripts
Import NetSuite fulfillment item allocations:
Sync new orders from HotWax to NetSuite
Sync customers
Sync order line items
Sync order ids
Create customer deposit
Approve order in HotWax for fulfillment
HotWax brokering allocates orders
Sync item allocation to NetSuite for facilities where NetSuite fulfillment is used
Sync order item fulfillment details from NetSuite to HotWax
Sync order item fulfillment details from HotWax to NetSuite
Invoice orders in NetSuite
If a NetSuite fulfillment location cannot fulfill an order item that has been allocated to them, it is moved to a Rejected Orders
facility. The Rejected Orders
facility is an "undefined" type of facility, which means it is not mapped to a physical location. A SuiteScript periodically exports all the order items at this facility and places them at an SFTP location.
A scheduled job in HotWax Commerce imports this rejected order item feed and moves those items back to the brokering queue to be reallocated to a new facility.
SuiteScripts
SFTP Location
Job in HotWax Commerce
If an order is rejected from the HotWax Store Fulfillment App with a valid inventory issue reason, then inventory delta's are also pushed to NetSuite. These are the valid inventory variance reasons to be pushed to NetSuite:
VAR_STOLEN
VAR_DAMANGED
VAR_FOUND
SFTP Locations
Inventory variance of actual vs programmatic:
SuiteScripts
Gift cards are stored-value cards that carry a value determined at the time of the card's purchase. They are often given as gifts or rewards and are redeemable for products up to the value stored on the card.
Retailers set up both physical and digital gift cards in their eCommerce platform. Both physical and digital gift cards have a unique serial number or GC number that customers need to enter to redeem the card's value.
Learn more about
Physical Gift Cards:
Physical gift cards are tangible cards that customers can buy online or in-store. These cards come with a unique serial number that customers can use to redeem the value stored in the card.
Digital Gift Cards:
Digital gift cards, also known as e-gift cards, are virtual equivalents of physical gift cards. Customers receive them via email or text message along with a unique serial number that they can use to redeem the value stored in the card.
A scheduled job in HotWax Commerce downloads both physical and digital gift card orders from the eCommerce platform like Shopify.
Learn more about
The process of synchronizing physical gift card orders from HotWax Commerce to NetSuite remains straightforward like any other order item.
Upon downloading physical gift card orders, HotWax Commerce synchronizes them with NetSuite in the “Created” status. Once these orders are synchronized, they have their status as “Pending Fulfillment” in NetSuite. HotWax Commerce retrieves NetSuite sales order item line IDs and NetSuite sales order IDs. After that HotWax Commerce creates customer deposits in NetSuite in the “Undeposited” status, and approves physical gift card orders in HotWax Commerce.
Approved physical gift card order items are brokered in HotWax Commerce, upon allocation, HotWax Commerce begins syncing them to systems that are responsible for fulfillment of those gift card items.
In our integration, physical gift card orders are handled similarly to regular orders. Therefore, the SFTP location, SuiteScripts, as well as the jobs within the HotWax Commerce Integration Platform and OMS, remains the same.
In the event where a fulfillment location where a gift card item is allocated uses NetSuite for fulfillment, usually a warehouse, then the HotWax Commerce syncs those items' allocation with NetSuite.
Item fulfillment records are created in NetSuite against the gift card order items.
As part of the fulfillment process, warehouse fulfillment teams assign a unique serial number to each gift card and load the corresponding value onto it. This ensures that when customers receive their orders, they can easily redeem the value by using the serial number provided on the gift card.
Once the gift card item is prepared and ready to be shipped, the corresponding item fulfillment record is marked as “Shipped” in NetSuite.
Fulfilled order status is updated in NetSuite from “Pending Fulfillment” to “Pending Billing”, subsequently, invoice is auto generated in NetSuite in the status “Paid”, and the customer deposit status is automatically updated from “Not Deposited” to “Fully Applied”.
Once the gift card order item is successfully fulfilled, it is synchronized from NetSuite to HotWax Commerce along with other fulfilled sales orders.
A scheduled job in HotWax Commerce marks physical gift card orders that are fulfilled in NetSuite as “Completed”.
It’s crucial to note that the gift cards are not functional until they are activated in the eCommerce platform. The activation process in eCommerce is a necessary step to ensure that the gift cards are redeemable and fully functional upon receipt by customers.
A scheduled SuiteScript in NetSuite generates a CSV file containing gift card items, their assigned serial numbers, and values corresponding to the gift card orders. The generated CSV is then placed at an desginated SFTP location.
SuiteScripts
Export NetSuite gift card fulfillment details:
SFTP Location
A scheduled job in HotWax Commerce Integration Platform reads the generated CSV file from the SFTP location, runs transformation and generates a JSON file with the relevant data required for the gift card activation, including, gift card items, their assigned serial numbers, corresponding values in NetSuite.
Finally, once the JSON is prepared, HotWax Commerce Integration Platform initiates gift card activation process in the eCommerce platform. Because most of our customers are using Shopify as their eCommerce platform, in this scenario HotWax Commerce Integration Platform calls Shopify API to activate the gift card.
HotWax Commerce Integration Platform communicates directly with Shopify for gift card activation, without any intermediary involvement from the HotWax Commerce OMS.
Job in HotWax Commerce
Gift card activation:
Shopify API
Once the gift card is activated in eCommerce, customers can conveniently redeem it.
When a physical gift card item is allocated to stores for fulfillment, they show up in the HotWax Commerce Fulfillment App
.
Similar to fulfilling physical gift card orders in NetSuite, as part of the fulfillment process, store associates assign a unique serial number to each gift card and load the corresponding value onto it.
Once gift card order items are successfully fulfilled in stores, a scheduled job in HotWax Commerce synchronizes fulfilled order data to NetSuite.
Upon synchronizing fulfilled orders data, the gift card order status in NetSuite is updated from “Pending Fulfillment” to “Pending Billing”, subsequently, invoice is auto generated in NetSuite in the status “Paid”, and the customer deposit status is automatically updated from “Not Deposited” to “Fully Applied”.
This marks the completion of physical gift card orders in NetSuite.
For store allocated orders, store associates initiate the gift card activation directly from the HotWax Fulfillment App.
HotWax Commerce automatically syncs these activation codes to Shopify, so that these gift cards can be activated and redeemed right after customers receive their orders. This activation step ensures that the gift card is fully functional and customers can use the unique serial number they received in their email to redeem the value stored in the gift card.
Digital gift cards are already in the “Completed” status in HotWax Commerce. HotWax Commerce also synchronizes them with NetSuite so that customer deposits can be created against them and invoices can be generated.
Digital gift cards are auto-activated and customers can directly redeem them by entering a unique serial number provided with the card.
A scheduled job in HotWax Commerce Integration Platform generates a CSV file of gift card orders that are in “Completed” status and do not have a NetSuite order item line IDs. This helps make sure that only relevant orders are synchronized to NetSuite and regular orders that are “Completed” in HotWax Commerce are not synchronized again to NetSuite.
A scheduled SuiteScript in NetSuite reads the CSV file from the SFTP location and creates gift card orders in the “Pending Fulfillment” status.
HotWax Commerce retrieves NetSuite sales order item line IDs, NetSuite sales order IDs, and creates customer deposits in NetSuite in the “Undeposited” status.
By default non inventory items like digital gift cards are configured to be not eligible for fulfillment in NetSuite. Therefore digital gift cards are automatically fulfilled in NetSuite and their status updated from “Pending Fulfillment” to “Pending Billing”.
Subsequently, invoice is auto generated in NetSuite in the status “Paid”, and the customer deposit status is automatically updated from “Not Deposited” to “Fully Applied”.
When walk-in customers purchase a gift card from the store, it is treated as a regular POS order in HotWax Commerce. HotWax Commerce syncs those orders with NetSuite in the POS sales synchronization to NetSuite.
What happens when customers redeem their gift card to pay for a new order?
When gift card payments are applied to an order, they are not processed like traditional transactions. Instead they impact the GL in NetSuite as "deferred revenue". In order to correctly post this payment to NetSuite, it is not sent as a customer deposit and instead posted as a "payment item" in the order when pushed to NetSuite.
If gift card payments were recorded as customer deposits, there could be a risk of double counting the revenue. This is because the revenue from gift card sales would already have been recorded when the gift cards were initially sold. Treating gift card payments as payment items avoids this double counting since they're simply offsetting existing revenue rather than creating new revenue.
Discover how order approval in HotWax Commerce ensures seamless integration with NetSuite, preventing conflicts and errors in order fulfillment.
Orders that are in "Created" status in HotWax Commerce are pushed to NetSuite rather than orders that are in "Approved" status. It's important to note the rationale behind this decision.
Initially, we attempted to synchronize approved orders from HotWax Commerce to NetSuite. However, this posed challenges when dealing with orders that contained both available and unavailable inventory items for fulfillment. In such cases, only a partial order could be pushed to NetSuite, causing complications. If the order was partially fulfilled in NetSuite due to certain available items, a subsequent attempt to send the remaining items led to conflicts. NetSuite recognized the initial order as complete and did not accept the remaining partial order, causing system errors and duplication.
To circumvent such complexities and ensure a seamless process, a strategic shift was made. Orders, upon their creation within HotWax Commerce, are designated as "Created" status. It is at this phase that critical order information is captured and assembled into CSV files for transmission to NetSuite. By choosing the "Created" status for order synchronization, HotWax Commerce retains control of the integration process and its sequence of interactions with NetSuite, enhancing accuracy and mitigating errors that arose from attempts to synchronize orders in "Approved" status.
Orders will only be allocated for fulfillment after they have been approved.
To successfully create a sales order in NetSuite, . If the order contains a new customer not present in NetSuite, the system won't allow the order to be pushed.
Actions
A scheduled job within HotWax Commerce Integration Platform operates at defined intervals to generate a CSV file comprising customers who have not been synchronized to NetSuite. This job can be configured to run at regular intervals, typically set at an hourly frequency. Customers who haven't been synchronized within the last hour are included in this CSV file and placed at an SFTP location for synchronization with NetSuite.
HotWax Internals
Identify new customers by checking the Person table for entries where the roleTypeId is CUSTOMER
and where the PartyIdentification
record for identification type NETSUITE\_CUSTOMER\_ID
is not created.
SFTP Location
A Scheduled Script in NetSuite is responsible for downloading the CSV file of customers not yet synchronized and utilizes the ImportTask function of the N/Task module. This script processes and creates customer records within NetSuite, ensuring that the necessary customer information is available in NetSuite for order creation.
SuiteScripts
Import new customers from SFTP
Once customers are created in NetSuite, a scheduled script exports recently created customers in a CSV file at an SFTP location to be imported by HotWax Commerce.
A scheduled job in Hotwax Commerce OMS reads this file from the SFTP location and syncs the NetSuite customer IDs, confirming the customer synchronization in the OMS.
SuiteScripts
Export recently created customers to SFTP
SFTP Location
Job in HotWax Commerce
Import NetSuite Customer IDs from SFTP
"*" denotes fields that are required to be sent to NetSuite for the customer sync to work
Sync customers
Capturing orders in HotWax Commerce initiates the creation of orders in "Created" status. In this step, created sales orders are pushed from HotWax Commerce to NetSuite for further processing.
A job within HotWax Commerce Integration Platform generates a CSV file of orders in "Created" status that have not yet been sent to NetSuite and places this file at an SFTP location. When creating this file HotWax Commerce also ensures that the customer already exists in NetSuite using the customer ID saved in the last step.
The file contains details such as unit prices, order adjustments, and shipping costs, excluding direct tax amounts. HotWax Commerce omits the tax amount from the file and sends tax codes for the individual order items because NetSuite independently computes the taxes based on these codes and applies them accurately to each order item, ensuring precise tax calculations within NetSuite.
Order and Item Discounts
If an order has a discount code applied to it, during order sync to NetSuite, HotWax checks if the applied code is available in NetSuite. If the code is available then the exact code is used and the value of the discount is shared as the Rate
. In the event that the code is not available in NetSuite, HotWax will use a default discount code SHOPIFY DISCOUNT
along with the value of the discount.
Item-level discounts have special handling as well. They are synced as a separate line item in the order using a SHOPIFY DISCOUNT ITEM
item, however, HotWax does not send an order line ID for this item. The amount of the adjustment is added in the Amount
field when preparing the CSV for NetSuite and the Price Level
is always set to Custom
.
Item Price
The price for products is not sent by HotWax when the order syncs to NetSuite. Instead, NetSuite automatically adds the value of the product upon order creation based on the price of the product in NetSuite.
Tax Codes
For retailers that use Avatax, the Tax Code and Shipping Tax Code will always contain AVATAX
when sent from HotWax. Avalara Tax calculation will automatically compute taxes on the order in NetSuite when the order is created.
We've added a limit to how many orders can be synced in one file to NetSuite to ensure the NetSuite file size limit is not breached. NetSuite has a limit of 25,000 rows in one CSV, so if your order volume in one sync duration exceeds this limit, we automatically paginate the file to ensure NetSuite does not reject the file. During pagination, one order should not be split into separate files because this could lead to errors in the order import process in NetSuite. Assuming that most eCommerce orders contain 10 or fewer items, there is an upper limit of 1000 orders per file. This keesp the file size well below NetSuite's limit while also leaving a buffer for orders with more line items.
Though it may seem like this would significantly slow down the order sync, this is not actually the case. All valid orders are still exported from HotWax Commerce at once and then paginated for NetSuite, this means all the order files are available for NetSuite to process and the speed at which they're processed is determined by the configuration of NetSuite used by the retailer. Higher configurations will have faster and more concurrent file process capabilities.
SFTP Locations
A scheduled SuiteScript in NetSuite reads this CSV file from the SFTP location and creates sales order records in the "Pending Fulfillment" status using the CSV Import function of the N/Task module.
SuiteScript
To sync sales orders from HotWax Commerce to NetSuite, a required field is the "Order Status." As a part of our integration strategy, we have opted to directly set the value of "Order Status" in NetSuite as "Pending Fulfillment".
"*" denotes fields that are required to be sent to NetSuite for the sales order sync to work
This step syncs NetSuite sales order line item IDs with HotWax Commerce order items. This step helps in mapping and aligning the order line items in HotWax Commerce with their corresponding line item IDs in NetSuite. This synchronization enables a smooth and accurate cross-referencing of items and their relevant details between the two systems. Without syncing order line item IDs, any attempt to update an order item in NetSuite would result in a new order item being created.
Actions
A Map Reduce SuiteScript in NetSuite retrieves order line item IDs, generates and places the CSV file at an SFTP location.
SuiteScript
SFTP Location
A job within HotWax Commerce OMS imports this CSV file from the SFTP location and associates NetSuite order line item IDs with corresponding order items.
Job in HotWax Commerce
Sync order line items
This step synchronizes NetSuite sales order IDs with orders in HotWax Commerce for tracking and identification. This step enables cross-referencing and linkage between orders in both systems, paving the way for accurate tracking and management.
The synchronization of Sales Order IDs from NetSuite to HotWax Commerce serves as an indicator that the orders in HotWax Commerce have been successfully integrated into NetSuite. Additionally, it is an essential step for various functions, including the creation of item fulfillment, return authorization, and customer deposit records in NetSuite. *** NOTE
Actions
A Map Reduce SuiteScript in NetSuite fetches pending fulfillment orders, generates a CSV file with internal sales order IDs and places this file at an SFTP location.
SuiteScript
SFTP Location
A job within HotWax Commerce OMS imports this CSV file and associates NetSuite order IDs with corresponding orders.
Job in HotWax Commerce
Sync order ids
This step creates customer deposit records in NetSuite for authorized payments of sales orders. Generating a customer deposit in NetSuite is essential to represent authorized payments for orders. This step signifies the initiation of the financial transaction for orders.
Sync status of customer deposits to NetSuite is time-driven, this means that we check the entry date of an order into HotWax Commerce and manage a cursor for the last exported timestamp. If a customer deposit creation fails, it will not be automatically retried because it will have passed the order entry time condition.
To ensure that only applicable customer deposits are created in NetSuite, orders that have been canceled or refunded will not have their deposit created. However, if an order is canceled or refunded after the deposit has been created in NetSuite, it will have to be manually handled by a NetSuite user. HotWax provides a report for all orders that have been canceled or refunded where the customer deposit may need to be dealt with manually.
Actions
HotWax Commerce Integration Platform runs a scheduled job that generates a JSON file comprising of order details with their respective grand totals and places this file at an SFTP location.
SFTP Locations
Export customer deposit for orders with NetSuite order identification
A SuiteScript in NetSuite reads this JSON file from the SFTP location and creates customer deposit records in "undeposited" status. It employs the N/Record module for record creation.
SuiteScript
The HC_SC_CreateCustomerDeposit
SuiteScript also generates a CSV file highlighting erroneous records found during processing and uploads the file to the SFTP server. Simultaneously, an email alert is automatically triggered to designated personnel, helping them quickly pinpoint the source of the issue and accelerating troubleshooting.
This step involves marking orders as "Approved" for further processing and fulfillment. This step ensures that orders are appropriately marked "Approved" once all necessary details and required references are established. This authorization triggers the routing of orders to their designated fulfillment locations.
Actions
A scheduled job within HotWax Commerce Integration Platform validates order items, generates and places the CSV file at an SFTP location. A scheduled job within HotWax Commerce OMS reads this CSV file from the SFTP location and marks order items "Approved".
Approved orders are then processed by the brokering engine in HotWax Commerce for order routing. Following the execution of the order brokering engine, the available inventory for each order item is assessed. Consequently, the brokering engine in HotWax Commerce assigns suitable fulfillment locations to the order items that have inventory available for fulfillment.
After completing these steps, here is how much of the order sync is now complete:
Sync new orders from HotWax to NetSuite
Sync customers
Sync order line items
Sync order ids
Create customer deposit
Approve order in HotWax for fulfillment
HotWax brokering allocates orders
Sync item allocation to NetSuite for facilities where NetSuite fulfillment is used
Sync order item fulfillment details from NetSuite to HotWax
Sync order item fulfillment details from HotWax to NetSuite
Invoice orders in NetSuite
Discover the power of N/Search module in SuiteScript, enabling dynamic data retrieval from NetSuite database with custom filters and conditions, enhancing integration capabilities.
The plays a pivotal role in our integration strategy, significantly enhancing our data retrieval capabilities. This module empowers developers to query data from the NetSuite database, offering the flexibility to create new searches programmatically, with filters and conditions. When conducting dynamic searches, the N/Search module generates a new dynamic SavedSearchId, which can be reused in subsequent processes.
Furthermore, developers can also harness existing SavedSearchIds created through NetSuite's user interface.
Leverage the N/file module in SuiteScript for seamless file management, enabling easy upload and efficient reading of files from NetSuite File Cabinet or SFTP.
The broadens our capabilities by enabling interaction with files within NetSuite. This module allows us to upload files to and read files from the NetSuite File Cabinet or SFTP. Key functionalities of the N/file module include:
File Upload: Easily upload files to the NetSuite File Cabinet, making them accessible within the NetSuite environment.
File Reading: Reading files from the NetSuite File Cabinet or SFTP is a streamlined process with the N/file module, facilitating efficient data retrieval.
Explore the details of exporting and importing data from NetSuite during integration, ensuring smooth and accurate data transfer.
When it comes to exporting data from NetSuite, we have three primary methodologies at our disposal:
We employ Scheduled Suite Scripts to automate data exports, making use of NetSuite's powerful Saved Search functionality to retrieve the necessary data.
These scripts utilize the N/File modules to securely place the data in an SFTP server, from where HotWax Commerce jobs can access and process the files.
However, it's crucial to note that Scheduled Suite Scripts have limitations when it comes to handling large data files. They may halt execution if a script takes more than one hour to run or consumes 10,000 execution units.
In scenarios where we need to export large volumes of data, we prefer Map Reduce scripts. These scripts also utilize Saved Search to fetch the data.
The retrieved data is then securely stored in an SFTP server, where HotWax Commerce jobs can access the files.
Map Reduce scripts are our preferred choice for exporting data from NetSuite in most cases.
In rare instances when Map Reduce scripts are not scalable for exporting data, we resort to Scheduled Suite Scripts combined with the Search Task of the N/Task module.
The Search Task is remarkably fast; it swiftly searches for the required data and creates files containing millions of records within seconds.
It stores these files in the NetSuite . However, an additional Scheduled Suite Script is needed to transfer the files from the NetSuite File Manager to the SFTP server, where HotWax Commerce jobs can access them.
Just as we have methodologies for exporting data, we have three approaches for importing data into NetSuite:
To ensure optimal performance and leverage NetSuite's built-in tools, we use Scheduled Suite Scripts with the CSVImport task of the N/Task module.
These scripts read data from CSV files and create corresponding records within NetSuite.
In cases where CSV import tools do not support specific data types, we write Scheduled Suite Scripts using the N/Record module.
These scripts read data from CSV files and create records in NetSuite. However, they have a limitation and cannot process CSV files with more than 500 records.
When dealing with the import of large sets of CSV files or CSV files with more than 500 records, we opt for Map Reduce scripts.
These scripts are designed to read CSV files and create records within NetSuite, making them suitable for managing extensive data imports.
Discover how HotWax Commerce leverages SuiteScript for seamless integration with NetSuite, using JavaScript-based customization, scheduled scripts, and data transformation.
NetSuite's SuiteScript is a scripting language that acts as a pivotal tool for customization and automation. It provides comprehensive application-level scripting capabilities that span both client and server sides. In our integration with NetSuite, HotWax Commerce leverages APIs.
It's worth noting that while NetSuite boasts a plethora of integration tools, our focus here is specifically on those that have played a pivotal role in our integration. Below, we offer an in-depth understanding of SuiteScript 2.X and how it has been instrumental in our integration:
JavaScript-Based Customization: SuiteScript is grounded in JavaScript, offering developers the ability to craft custom scripts and functions within the NetSuite environment. These scripts can be invoked manually, triggered by specific events, or on a pre-defined schedule enabling profound customization possibilities.
Scheduled Scripts: An essential feature of SuiteScript is the ability to schedule scripts for future execution. Tasks can be submitted for processing at specific times or on a recurring basis, providing a powerful tool for automation and data handling.
Data Transformation: Developers can use SuiteScript to transform NetSuite data into different formats and structures. This flexibility ensures that data can seamlessly flow between systems or be presented in a manner that suits the specific needs of the integration.
File Operations: SuiteScript extends its reach beyond NetSuite, enabling the reading or writing of files in various formats from external SFTP locations. This functionality plays a crucial role in the exchange of data between systems. We will discuss further on how developers can use file operations in Suite Script.
Netsuite supports multiple types of Suite Scripts. We have used two types of scripts in our integration. They are:
Scheduled Script: Scheduled scripts can be run on demand or at predefined intervals on a recurring basis. They are best suited for handling basic information logging or similar tasks. However, they are not well-suited for processing large amounts of records or long-running operations.
Map/Reduce Script: Map/reduce scripts can also be run on demand or at predefined intervals on a recurring basis however they are designed to handle large volumes of data. They are most effective when data can be divided into smaller, independent parts. Map/reduce scripts are well-suited for scenarios where multiple records need processing, and the logic can be divided into lightweight segments.
Unlocking SuiteScript Capabilities
Modules are at the core of what allows developers to work with NetSuite. Without modules, there would be no such thing as SuiteScript 2.0. SuiteScript 2.0 follows a by organizing its APIs into . This modular approach enhances code reusability and maintainability, ensuring that each script loads only the necessary modules.
Modules contain the API information needed for scripting. There are multiple modules to perform various tasks in NetSuite Suite Script, and in our integration strategy, we have focused on key modules that align with our objectives. We have documented a few of the significant modules that have played a pivotal role in our integration.
These four modules together form the core of our SuiteScript-based integration, offering a comprehensive set of tools to address various aspects of our integration strategy. The strategic selection of modules, including N/task, N/Record, N/Search, and N/file, has played a pivotal role in our integration success, ensuring that our objectives are met efficiently and effectively.
Learn more about
Learn more about
used along with
S.No. | Fields in HotWax Commerce | Fields in NetSuite |
---|
S.No. | Fields in HotWax Commerce | Fields in NetSuite |
---|
S.No. | Fields in HotWax Commerce | Fields in NetSuite |
---|
S.No. | Fields in HotWax Commerce | Fields in NetSuite |
---|
1 | Shopify Customer ID | HC Shopify Customer ID |
2 | NetSuite Customer ID | Internal Customer ID |
3 | Name | Name |
4 | Emails |
5 | Phones | Phone |
1 | Product Store External ID | Subsidiary * |
2 | Customer-Closed Won | Status * |
3 | Individual | Type * |
4 | Party ID | External ID |
5 | Party Classification | Initial Lead Source |
6 | True | Taxable |
1 | NetSuite Sales Order ID | Internal Sales Order ID |
2 | Shopify Order ID | HC Shopify Order ID |
3 | Shopify Order Name | PO# |
4 | Sales Channel | HC Sales Channel |
5 | Customer | Customer * |
6 | Bill To Address | Billing Address * |
7 | Order Date | Date * |
8 | Product | Item |
9 | Qty | Quantity |
10 | Ship To | Shipping Address * |
11 | Ship Method | Shipping Method |
12 | Ship From | Location |
13 | Communications | Memo |
1 | Order Item Seq ID | External Order Line ID |
2 | Price Level NetSuite | Price Level |
3 | Tax Code | Tax Code |
4 | Product Promo ID | Discount Item |
5 | Product Store External ID | Subsidiary |
6 |
Task Module
Record Module
Search Module
File Module
Often, customers come into the store excited to purchase their favorite item, only to find it unavailable in their size or preferred color. When this happens, store associates check stock availability across their network of locations. If the desired item is found elsewhere, they place an order on the customer's behalf for the delivery to their home address.
Most of our customers opt for Shopify as their eCommerce platform, along with Shopify POS for their POS system. In this scenario, HotWax Commerce downloads send sale orders from Shopify, just like other regular orders.
While both send sale orders and regular eCommerce orders are placed to be shipped to the customer's address, the only distinction lies is the sales channel they originate from. Send sale orders are initiated by store associates on behalf of the customer so they have Shopify POS as their sales channel. This sets them apart from regular eCommerce orders, where customers directly place their orders through traditional online channels.
As discussed above, despite the fact that send sale orders originate from the POS sales channel, their treatment remains same as regular orders. A scheduled job in HotWax Commerce downloads all new orders, including send sale orders from Shopify, so that they can be brokered and fulfilled. Consequently, upon download, these orders are automatically assigned the default "Created" status in HotWax Commerce.
Send sale orders in the “Created” status are then synchronized to NetSuite for further processing.
The process of synchronizing send sales orders from HotWax Commerce to NetSuite also remains the same. The created orders feed generated by the HotWax Commerce Integration Platform contains new orders in the "Created" status, including send sale orders to sync to NetSuite.
The steps discussed in the synchronization of sales orders from HotWax Commerce to NetSuite are followed to sync send sale orders:
Sync new orders from HotWax to NetSuite
Sync customers
Sync order line items
Sync order ids
Create customer deposit
Approve order in HotWax for fulfillment
HotWax brokering allocates orders
Sync item allocation to NetSuite for facilities where NetSuite fulfillment is used
Sync order item fulfillment details from NetSuite to HotWax
Sync order item fulfillment details from HotWax to NetSuite
Invoice orders in NetSuite
In our integration, send sale orders are handled similarly to regular orders. Therefore, the SFTP location, SuiteScripts, as well as the jobs within the HotWax Commerce Integration Platform and OMS, remains the same.
HotWax Commerce also synchronizes POS completed orders to NetSuite as cash sales. So, once send sale orders are “Completed” in HotWax Commerce, how does HotWax Commerce ensure that they are not synchronized to NetSuite again as regular POS completed orders?
As outlined in the POS sales synchronization process, three criteria are checked when syncing POS completed orders to NetSuite as cash sales: the order status must be "Completed," the sales channel should be identified as POS_Channel, and the shipping method should be POS_COMPLETED. Given that send sales orders have their shipping method set as standard, they are excluded from being synchronized to NetSuite as POS completed orders.
Learn how our integration methodologies for NetSuite ensure seamless and efficient data transfer, prioritizing reliability and scalability over real-time REST APIs for improved data integrity
Integrating data between NetSuite and HotWax Commerce is a critical aspect of our system, and it's accomplished through a well-thought-out methodology.
We have adopted batch-process integration methodology instead of using real-time based REST APIs. While REST APIs offer real-time data processing capabilities, they often introduce latency and potential data leaks in scenarios where data volumes are high. We've consciously chosen batch process based integration methodology over REST APIs for its reliability, scalability, and the assurance it offers in terms of data integrity and error handling. This approach minimizes risks associated with real-time processing, guaranteeing seamless and efficient data integration.
In this section, we'll delve into the methodologies we employ to import and export data between these two platforms.
Discover how integration with NetSuite simplifies inventory synchronization and management of bundles in HotWax Commerce, ensuring accurate inventory calculations and order fulfillment updates.
Integration with NetSuite simplifies the inventory synchronization of bundles in HotWax Commerce. As NetSuite shares a daily morning feed of the inventory of products, it includes the inventory for bundles as well.
Automatic Inventory Management of bundle
NetSuite independently manages the inventory of bundles by considering the lowest common denominator among their components. For example: if a bundle comprises a belt and a wallet, where the belt's inventory is 7 and the wallet’s inventory is 10, the inventory of bundles aligns with the lowest available quantity, which becomes 7.
Multi-Location Inventory Handling
NetSuite operates similarly to HotWax Commerce in calculating the inventory of bundles across multiple locations, considering the availability of components at each location. If all bundle components are available at a single location, NetSuite considers the inventory of bundles for that specific location. For instance, imagine a bundle consisting of a belt and wallet distributed across various locations:
Times Square Store: 5 Belts
Brooklyn Store: 10 Wallets
Broadway Store: 3 Belts and 7 Wallets
NetSuite calculates the inventory of a bundle by computing the lowest available quantity within a single facility. As a result, NetSuite will push an inventory of 3 to HotWax for this bundle, reflecting the available quantity of the scarcest component at one location in the bundle.
Post-Inventory Computation Handling
After NetSuite's inventory calculation for bundles, NetSuite synchronizes the inventory of the bundles to HotWax Commerce like other products’ inventory
When syncing an order containing a bundle to NetSuite, only the bundle's product ID is sent. NetSuite does not require bundle component details as retailers already have bundle-component associations set up within NetSuite to simplify the import process.
When the bundle is fulfilled from a location in NetSuite, HotWax Commerce receives the bundle's ID in the fulfilled order feed from NetSuite. Processing this information, HotWax Commerce marks both the bundle and its components as fulfilled, ensuring accurate fulfillment status within the eCommerce system.
Ensure accurate date and time formatting for seamless data communication with NetSuite.
Date Format: 'M/D/YYYY'
Time Format: hh:mm AM/PM
For Date Format: a. Log in to NetSuite. b. Navigate to Setup > General preferences > Company c. Verify the date format under the Date/Time Format section.
For Time Format: a. Log in to NetSuite. b. Navigate to Setup > General preferences > Company c. Verify the time format under the Date/Time Format section.
Date Format:
Check the default NetSuite date format, 'M/D/YYYY.'
If changed, share the updated format with the HotWax integrations team.
Ensure the HotWax integrations team adjusts the date format in CSV imports for entities like sales orders, cash sales, and inventory adjustments.
Time Format:
Confirm the default NetSuite time format is 'hh:mm AM/PM.'
If modified, update all export map/reduce SuiteScripts.
Ensure these adjustments align with the client's last run date-time data.
By following these steps, you can easily check and verify the NetSuite date and time formats, ensuring accurate communication with the HotWax integrations layer and seamless data handling in export processes.
Explore the comprehensive guide to deploying a NetSuite integration with HotWax Commerce.
This document will take you through all the steps of deploying a NetSuite integration with HotWax Commerce for all the supported flows.
Begin by following the steps of installing the custom NetSuite app created by HotWax that loads synchronization scripts and custom fields that are necessary to set up the integration.
Before configuring any jobs for data synchronization, make sure to complete all the steps mentioned in the Prerequisites section. Skipping the prerequisites may lead to some flows failing.
Once all base configurations are complete, you’re ready to start setting up flows between the two systems. Flows are largely independent of each other. The only required flow to setup being moving forward is the product and inventory flow since products and inventory sync is required for all other flows to work properly.
Effortlessly set up SuiteCloud Development Framework (SDF) in NetSuite with step-by-step instructions.
From the Home dashboard, go to the Customization
tab in the main menu.
Choose SuiteBundler
> Search & Install Bundles
> List.
Click on the New
button.
Enter the unique name for the bundle: SFTP Connection Tool - Password GUID
and press enter.
Instantly view the new bundle in the search results.
Click on the result SFTP Connection Tool - Password GUID
to access the Bundles detail page.
Click on the Install
button (both Install buttons are functionally identical).
Confirm the installation.
Search for your bundle and observe its status; if it's pending, patiently wait.
If necessary, navigate through pages to check the installation progress.
Explore how retailers handle exchanges, ensuring smooth operations across Shopify, NetSuite, Loop, and HotWax Commerce.
Retailers often use different return options, such as store credit, replacement, refund, and exchange, to accommodate varying customer requests and preferences.
In the context of returns, an exchange refers to a transaction in which a customer returns a purchased item and, instead of receiving a refund or store credit, opts to swap the returned item for a different product. This lets the customer exchange the initially purchased item for another one.
Exchanges can be handled in various ways by different retailers, each employing unique processes.
Zero Amount Exchange Orders:
Retailers can process exchange orders by creating an exchange order with a zero amount, where the order item total is equal to the item total of the original order. So in this case no amount needs to be refunded to the customer.
Store Credit:
Retailers can issue a store credit to a customer for the amount that is equal to the returned order item, and use this store credit against the new exchanged item.
Integrated Platform Approach:
Many retailers use platforms where eCommerce, OMS, Return Management System (RMS), and Accounting can be managed in one single platform. In such cases, they can easily unlink the payment reference from the original order and apply it to the exchanged order.
Separate Systems:
Many retailers also use a separate Return Management System along with independent eCommerce, OMS, and Accounting Systems.
For example, customers we have worked with, use Shopify as their eCommerce platform, NetSuite as their ERP system, Loop as their RMS, and HotWax Commerce as their OMS.
In this setup here is how exchanges work:
As returns are initiated in Loop, it is also responsible for creating exchange orders in Shopify, whether they take place in-store or online. Loop treats the new order in Shopify as an entirely separate order that is only linked to the original order through references in extended fields.
When the customer completes their exchange process, Loop marks the original order as returned in both Shopify and NetSuite. Additionally, marks payment as refunded in NetSuite. Refunds in Shopify are intentionally not processed, because Loop uses the pending refund amount as a discount
on the new order created as a replacement for the original order.
If the new order total is less than the pending refund amount, then the leftover refund amount is processed as a refund on Shopify based on the customer's selected preference which could be either store credit or the original payment method. In the event that the new order total exceeds the pending refund amount, the outstanding balance will be captured from the customer.
Exchange orders that are created in Shopify are imported into HotWax Commerce just like regular sales orders. Given that exchanges are created by Loop in Shopify, they are assigned the sales channel Loop Exchange
within Shopify. Consequently, all exchange orders imported into HotWax Commerce have a Loop Exchange
sales channel as well.
When it comes to pushing sales order data from HotWax Commerce to NetSuite, the handling of all web orders remains consistent irrespective of the sales channel they originate from. The generated order feed from HotWax commerce is also generic, similar to that of regular orders. This means that HotWax can synchronize web exchange orders to NetSuite in the same manner it synchronizes regular orders.
More specifically, for all web exchange orders, the sync for Customers, Sales Order Item Line IDs, Sales Order IDs, Order Allocation, and Fulfillment remains consistent between HotWax Commerce and NetSuite.
However, there are certain distinctions to note:
References to the original order stored in Shopify notes are saved in HotWax Commerce as a communication event
and subsequently sent to NetSuite as a memo
on the order.
Exchange orders have a discount code labeled loop-discount
applied to them. This discount code is also present in NetSuite. Consequently, HotWax Commerce ensures that the exchange order is synchronized to NetSuite with this exact code, with the discount amount shared as the Rate.
All exchange orders have a discount code applied to them. When the amount of the exchange order item is the same as that of the original order item, the value of the exchange order becomes zero due to the applied discount. In these instances, there is no need to create customer deposits in NetSuite. In the event the value of an exchange order item exceeds the value of the original order item, customer deposits should be created in NetSuite to reflect the authorized payments.
Since our current customers are not capturing additional payments for exchanges in Shopify, payment preferences are not being created in HotWax, and subsequently, customer deposits are not being generated in NetSuite.
In the event, payments are captured in Shopify and payment records are created in HotWax Commerce, customer deposits should also be created in NetSuite.
Exchanges involve returning a purchased item for a different product. Therefore, it’s crucial to restock the inventory from the original order.
Upon physically receiving the returned inventory from the original order, NetSuite generates item receipt records and updates the inventory count accordingly. Subsequently, HotWax Commerce synchronizes these item receipt records from NetSuite and accurately updates the inventory count.
Exchange orders that are created in Shopify POS are imported into HotWax Commerce just like regular POS sales. Given that POS exchanges are created by Loop in Shopify, they are assigned the sales channel Loop Exchange
within Shopify. Consequently, all POS exchanges imported into HotWax Commerce have a Loop Exchange
sales channel as well.
POS exchange sales are similar to other POS sales as both transactions are recorded within the physical store.
When POS sales are downloaded in HotWax Commerce, POS sales have a Completed
order status, the sales channel is set to POS\_Channel
, and the shipping method is set to POS\_COMPLETED
.
While, in the case of POS exchange sales, although they also have a Completed
order status, their sales channel is Loop Exchange.
Due to this distinction, HotWax Commerce is unable to assign their shipping method as POS_COMPLETED. Instead, it is designated as Two-Day Shipping
as default.
Because of these distinctions between POS sales and POS exchange sales, HotWax Commerce generates a separate feed to sync POS exchange orders to NetSuite.
How HotWax Commerce identifies POS exchange sales to sync to NetSuite:
The order status is Completed
The sales channel is Loop Exchange
The NetSuite order identification is absent. This condition also helps make sure that in-store exchange orders are segregated from web exchange orders and these orders are not sent to NetSuite twice.
As previously discussed, the synchronization of POS sales from HotWax Commerce to NetSuite involves the creation of Cash Sale records. All the eligible POS exchange sales are then synchronized to NetSuite just like any other POS sales and Cash Sales are created in NetSuite for POS exchange sales.
When an item from the original order is returned on Shopify POS, HotWax Commerce downloads the return data, including the facility ID where the returned items are received. If the restocking flag is enabled, HotWax Commerce also restocks the inventory based on the captured facility ID.
In our integration, web exchange orders are handled similarly to regular orders, while POS exchange sales are handled similarly to POS sales. Therefore, the SFTP location, SuiteScripts, as well as the jobs within the HotWax Commerce Integration Platform and OMS, remain unchanged.
Explore how retailers synchronize web returns from Shopify to NetSuite using Loop as middleware or HotWax Commerce as the Order Management System (OMS), ensuring efficient processing of returns across
In omnichannel retailing, retailers provide customers with the options for online returns as well as in-store returns.
For customers who favor the convenience of online shopping, initiating returns from the retailer's eCommerce website or app proves most suitable. This approach is particularly beneficial for those residing far from physical store locations or looking for the ease of requesting returns from their homes.
Scenarios where web returns are accepted:
Buy Online Return Online (BORO): Customers initiate online returns for their eCommerce orders.
Endless Aisle Return Online (EARO): Customers initiate online returns for their in-store ordered items which they received home delivery for.
Retailers we work with, use Shopify as their eCommerce platform, NetSuite as their ERP system, Loop as their RMS, and HotWax Commerce as their OMS. When synchronizing web returns to NetSuite, some opt to use Loop as middleware, while others leverage HotWax Commerce for this. Let's explore how these two distinct approaches work:
Initiate Returns in Shopify and NetSuite
Loop being an RMS, lets customers directly initiate returns against their web orders. Once the return is initiated by the customer, Loop creates the return in Shopify.
To synchronize returns from Loop to NetSuite, many retailers use the Novamodule Integration App. When returns are created in Shopify, Loop simultaneously generates an RMA in NetSuite using the Novamodule Integration App, which gives the warehouse a heads-up that the order item will be coming back.
It's crucial to note that refunds against the RMA will only be processed once customers have shipped their order item, its receipt has been processed in the warehouse, item receipt records have been created in NetSuite and this information has been synchronized to Shopify.
Process Refunds in Shopify
Upon physically receiving the item against the RMA, item receipt records are created in NetSuite and the returned inventory is restocked. Loop reads these item receipt records and initiates a refund to the customer. This process marks the completion of returns in Shopify, with the order item marked as returned and payment as refunded. Loop also marks the order item as returned and the payment as refunded in NetSuite.
Import Returns in HotWax Commerce
A scheduled job in HotWax Commerce then proceeds to download returns from Shopify. Once downloaded, the order item is marked as returned, and payment as refunded. These returns are not synchronized from HotWax Commerce to NetSuite as they are already synced from Loop to NetSuite using the Novamodule Integration App.
Export Item Receipts from NetSuite
When downloading returns from Shopify, HotWax Commerce does not restock the inventory even if the restocking flag is enabled on Shopify because HotWax Commerce lacks visibility into the specific location where the inventory is received.
A scheduled SuiteScript in NetSuite retrieves item receipt records, generates a CSV file, and places this file at an SFTP location from where HotWax Commerce can read this data.
Import Item Receipt Records in HotWax Commerce
A job within HotWax Commerce OMS imports the item receipt records CSV file and restocks inventory for corresponding returns. This ensures that the restocked inventory is accurately updated at the facility in HotWax Commerce.
The only difference in this approach is that instead of Novamodule, retailers use HotWax Commerce to synchronize returns to NetSuite.
The process of initiating returns using Loop in Shopify remains unchanged, even when HotWax Commerce is leveraged to synchronize returns to NetSuite. Loop lets customers directly initiate returns against their web orders. Once the return is initiated by the customer, Loop creates the return in Shopify.
Import Returns in HotWax Commerce
A scheduled job in HotWax Commerce is responsible for fetching web returns generated in Shopify.
These returns should then be synchronized to NetSuite for further processing. There are two methods for pushing web returns to NetSuite:
Third-Party Integration Platform: HotWax Commerce gives a feed of returns that a dev team of retailers can use and transform it as per the specification and file format expected by NetSuite or any third-party ERP system.
HotWax Commerce Integration Platform: Alternatively, HotWax Commerce Integration Platform offers integration with NetSuite where web returns can be synced to NetSuite.
Export Returns from HotWax Commerce
A scheduled job within HotWax Commerce Integration Platform transforms the returns feed as per the specification and file format expected by NetSuite, generates a CSV file, and places this file at an SFTP location.
Import Returns in NetSuite
A scheduled SuiteScript in NetSuite reads this CSV file from the SFTP location and generates an RMA.
Export Item Receipt Records from NetSuite
Upon physically receiving the order item shipped by the customer at the warehouse, item receipt records are generated in NetSuite against the RMA, and inventory is restocked. Subsequently, a scheduled SuiteScript retrieves these records, generates a CSV file, and places this file at an SFTP location from where HotWax Commerce can read this data.
Import Item Receipt Records in HotWax Commerce
A job within HotWax Commerce OMS imports the item receipt records CSV file and restocks inventory for corresponding returns.
Export Item Receipt Records from HotWax Commerce
Once the order item has been received, refunds should be issued to the customer.
To facilitate this, a scheduled job in HotWax Commerce is responsible for synchronizing the item receipt records to Shopify. Once Shopify receives this information, it proceeds to issue the refund to the customer and marks the corresponding order item as returned and payment refunded.
Automated Status Updates
Once returns are completed in Shopify, a scheduled job in HotWax Commerce also marks the order item as returned and updates the payment by marking it as refunded. Subsequently, the order item is marked returned and the payment as refunded in NetSuite.
Customers who live near a brick-and-mortar store or those who prefer to get instant refunds opt for returning their purchases directly in-store.
Scenarios where POS returns are accepted:
Buy In-Store Return In-Store (BISRIS): Customers return their in-store purchases to a nearby store location.
Buy Online Return In-Store (BORIS): Customers directly return their online purchases to a nearby store location.
Endless Aisle Return In-Store (EARIS): Customers return orders made through an endless aisle feature, such as items ordered in-store for home delivery, to a nearby store location.
Retailers we work with, use Shopify POS as their POS system, NetSuite as their ERP system, Loop as their RMS, and HotWax Commerce as their OMS. Some retailers initiate in-store returns using the Loop Returns POS App, while others opt to use their Shopify POS system. Let's explore how these two distinct approaches work:
Loop Returns POS App provides an intuitive interface to create POS returns.
When it comes to in-store returns, because customers return their order items directly at the store location, the receiving of the order item and the processing of refunds happen simultaneously.
Create Returns in Shopify and NetSuite
Once the POS returns are accepted and completed in Loop, it syncs them with both Shopify POS and NetSuite.
Loop creates returns in Shopify POS, marks the order item as returned and payment as refunded. Subsequently, the inventory is restocked against the received order item.
Loop with Novamodule also directly creates a Cash Sale return in NetSuite, marks the order item as returned, payment as refunded and generates item receipt records. Subsequently, the inventory is restocked against the created item receipt.
Import POS Returns in HotWax Commerce
A scheduled job in HotWax Commerce downloads these returns from Shopify POS, including the facility ID where the returned items are received. Subsequently, HotWax Commerce marks the item as returned and payment as refunded. If the restocking flag is enabled, HotWax Commerce also restocks the inventory based on the provided facility ID.
As POS returns are already synced to NetSuite by Loop, they are not synced again by HotWax commerce.
Leveraging Shopify POS for in-store returns ensures that store associates are not required to navigate through a separate interface to handle them.
When POS returns are accepted within the store and completed, a scheduled job in the HotWax Commerce integration platform fetches all returns and exchanges from Shopify and generates a returns and exchanges feed. Another job reads and transforms this feed, sorting returns and exchange orders into different folders on the SFTP server.
Two independent jobs in HotWax Commerce process these orders:
The Create Return Order
job downloads the returns from the SFTP path.
The Create Exchange Order
job downloads the exchanges.
A scheduled job in the HotWax Commerce Integration Platform generates a CSV file of POS returns and places this file at an SFTP location.
A scheduled SuiteScript in NetSuite reads this CSV file from the SFTP location, and generates a Return Merchandise Authorization (RMA) to track the returned items. Following this, a credit memo is generated to record the financial transaction associated with the refund. The credit memo details the total amount to be refunded to the customer.
When returning an item a customer can also opt to take the exchange item against it. The exchange item may be of higher value than the original item or may be of lesser value. Learn more about how HotWax commerce handles exchanges on an order.
Learn how sales orders are processed in HotWax Commerce and NetSuite
In the dynamic world of eCommerce, the efficient fulfillment of online sales orders is a critical aspect of a retailer's success. When online orders are placed via e-Commerce platforms like Shopify, they need to be quickly processed and fulfilled to meet promised delivery timelines while optimizing operational costs.Online orders placed on platforms like Shopify are downloaded into the HotWax Commerce for processing and fulfillment. HotWax Commerce plays a pivotal role in this process by seamlessly routing orders to the most suitable fulfillment locations. The decision is based on factors such as inventory availability, cost, and time, ensuring efficient order processing.
Upon arrival in HotWax Commerce, orders are initially flagged as "created," awaiting further processing. The pivotal step follows as these orders are pushed into Netsuite ERP for creation, ensuring that all essential order information, including order IDs, is accurately transmitted. This synchronization process typically takes no longer than 30 minutes per order, ensuring a swift transition into Netsuite.
After creation in Netsuite, the system communicates back to HotWax Commerce, confirming the successful integration and prompting a transition of the order to an "approved" state within HC. At this juncture, the order is deemed ready for allocation, where it is assigned to a specific location within the inventory network, facilitating the subsequent fulfillment process.
While the synchronization process is efficient, it is also scalable to accommodate varying order volumes. HotWax Commerce can handle up to 600 orders per 15-minute interval, and by strategically batching orders, this capacity can be further augmented to approximately 1200 orders within a 30-minute timeframe. Despite potential fluctuations in processing times during peak periods, typically taking around 45 minutes to 1 hour 20 minutes, the integration mechanism ensures that orders are seamlessly synchronized between Shopify and Netsuite ERP.
The flow of order and fulfillment information in the sales order integration varies depending on the responsibilities a retailer has designated to NetSuite. Oftentimes NetSuite is used for is accounting and GL posting functionalities with all fulfillment happening in external systems such as a 3PL, dedicated WMS system, or specialized fulfillment software in stores. Other times retailers may be using NetSuite’s fulfillment capabilities as well, usually in their main warehouse. While most parts of the order sync remain the same, the stage at which order item allocation is pushed to NetSuite varies based on NetSuite’s fulfillment responsibilities.
Here is the NetSuite Order Lifecycle Business Process Model that provides step by step overview of how the sync works before we dive into elaborate details.
Most of our customers use Shopify as their eCommerce platform along with NetSuite as their ERP and warehouse fulfillment solution. Therefore, to explain the NetSuite Order Lifecycle BPM, we have taken Shopify as the eCommerce platform, NetSuite as the ERP and warehouse fulfillment solution, with HotWax Commerce as the Order Management System.
Customers place their online orders on Shopify. HotWax Commerce being an Order Management System, downloads new orders from Shopify so that they can be further processed. By default these orders are assigned a “Created” status in HotWax Commerce.
A dedicated job in HotWax Commerce prepares and exports a feed of orders marked as "Created" to NetSuite.
NetSuite's SuiteScript then consumes this order data, generating orders in the "Pending Fulfillment" status.
HotWax Commerce ensures confirmation of successful order item synchronization with NetSuite. To achieve this, a dedicated job in HotWax Commerce downloads NetSuite's internal IDs, while another job downloads NetSuite's item line IDs. This process also triggers multiple actions in HotWax Commerce and NetSuite:
A scheduled job in HotWax Commerce creates customer deposit records for corresponding orders in the "Undeposited" status in NetSuite.
A scheduled job in HotWax Commerce updates the order status from "Created" to "Approved" in HotWax Commerce.
Why is order approval necessary?
Only orders with approved status are eligible to be brokered in HotWax Commerce and orders without approval remain in the "Created" status.
Now that orders have been approved, they are automatically sent to the Brokering Queue which serves as a waiting area for orders awaiting processing. Orders in the brokering queue are analyzed and picked in the brokering run.
What are brokering runs:
Brokering runs are scheduled by retailers to execute at specified intervals, allowing for effective and timely order routing. Retailers need to set a frequency and run time for brokering. For example, setting the frequency of a run to "Daily" and the runtime to "7 am" will execute the brokering run every morning at 7 am.
In the brokering run, the order routing engine looks for the best fulfillment location to fulfill orders from.
Learn more about order brokering and routing
In the event where an order is routed to a warehouse fulfillment location, HotWax Commerce synchronizes allocation details to NetSuite.
When items are allocated to stores for fulfillment, they automatically show up in the HotWax Commerce Store Fulfillment App
.
A dedicated job in HotWax Commerce synchronizes order line items with their respective fulfillment locations to NetSuite.
NetSuite’s SuiteScript consumes this feed and updates fulfillment location on corresponding orders.
When the warehouse fulfillment team begins the fulfillment of the order item, an item fulfillment record is created in NetSuite. As soon as the item is picked, packed and shipped multiple actions take place in NetSuite:
The item fulfillment record is marked as “Shipped”.
The initial order status is updated from “Pending Fulfillment” to “Pending Billing”.
Finally, once the invoice is auto generated in the "Paid" status, the order status is updated from “Pending Billing” to “Billed”. This marks the completion of the order lifecycle in NetSuite.
In the event where a fulfillment team is unable to find an order item to be fulfilled, they reject that specific order. A scheduled job in HotWax Commerce imports the rejected order item feed from NetSuite. Subsequently, all rejected orders are moved to the rejected queue in HotWax Commerce so that they can be rebrokered and allocated to a new fulfillment location.
NetSuite's script exports item fulfillment records marked as "Shipped". A scheduled job in HotWax Commerce consumes this feed, and following actions take place:
The fulfillment status of the corresponding order item in HotWax Commerce is updated to "Shipped".
The order status is automatically updated from "Approved" to "Completed" in HotWax Commerce.
In the event of a partial shipment, the order remains in the "Approved" status until all items have been shipped.
Now, let's see what happens when orders are allocated to a store location instead of the warehouse.
Fulfillment teams at the store prepare online orders for shipment.
Upon successful picking of an order item, the fulfillment status is changed to "Picked".
Once the item has been packed, the fulfillment status is updated to "Packed".
Finally, when an order item is marked as shipped in the Store Fulfillment App
, the fulfillment status is then updated to "Shipped".
When all items of an order are marked “Shipped” in the Store Fulfillment App
, the order status is automatically updated from “Approved” to “Completed” in HotWax Commerce.
In the event of a partial shipment, the order remains in the "Approved" status until all items have been shipped.
In HotWax Commerce, a scheduled job prepares and exports a feed containing order items marked as "Shipped". NetSuite’s script consumes these records and multiple actions take place:
The item fulfillment record is created amd marked as “Shipped”.
The initial order status is updated from “Pending Fulfillment” to “Pending Billing”.
Finally, once the invoice is auto generated in the "Paid" status, the order status is updated from “Pending Billing” to “Billed”. This marks the completion of the order lifecycle in NetSuite.
Once an order reaches the "Completed" status in HotWax Commerce, a scheduled job in HotWax Commerce sends the tracking details to Shopify and marks the orders as “Fulfilled”.
This process remains consistent regardless of whether the order fulfillment is performed in NetSuite or the Store Fulfillment App
.
When an order is marked "Completed" in HotWax Commerce, either through the fulfillment feed from NetSuite or the Store Fulfillment App
, HotWax Commerce automatically identifies these completed orders and marks them as "Fulfilled" in Shopify.
Overview of how sync works:
Sync new orders from HotWax to NetSuite
Sync customers
Sync order line items
Sync order ids
Create customer deposit
Approve order in HotWax for fulfillment
HotWax brokering allocates orders
Sync item allocation to NetSuite for facilities where NetSuite fulfillment is used
Sync order item fulfillment details from NetSuite to HotWax
Sync order item fulfillment details from HotWax to NetSuite
Invoice orders in NetSuite
When setting up a facility on HotWax, retailers choose if fulfillment is run by NetSuite. If a facility uses NetSuite for fulfilling orders, HotWax effectively treats NetSuite as the WMS of that facility. So when order items are allocated to that facility, HotWax pushes those items' allocation details to NetSuite and fetches there fulfillment details from NetSuite as well.
If a retailer already has their 3PL integrated with NetSuite, they can choose to configure it in the OMS as a NetSuite fulfillment location. This will allow them to continue to use their pre-built integration without having to integrate the 3PL directly with the OMS.
Why this is important
HotWax by default does not sync item allocation details to NetSuite for items until they are fulfilled. While this may seem like a lag in our integration, it important for maintaining simplicity in the integration. With distributed order routing its common for items to be allocated and rejected from fulfillment multiple times, so the first allocation is not always final. If we were to sync item allocation to NetSuite for all items as soon as they were allocated, we'd also have to update the allocation every time it changed in the OMS. Syncing allocation information early on to NetSuite even when it's not used for fulfillment also introduces the opportunity for accidental fulfillment from NetSuite which is avoided entirely by not posting allocation information until fulfillment is completed.
These reports play a crucial role in ensuring order synchronization across Shopify, HotWax, and NetSuite.
The Missing Order Attribute Report is a vital tool for tracking order synchronization. By monitoring the presence of essential attributes, it identifies orders lacking crucial information, ensuring a seamless synchronization process. This report enables proactive resolution of discrepancies, preventing any orders from failing to synchronize effectively.
Field | Description |
---|---|
In the NetSuite context, the report ensures accurate order synchronization by verifying essential attributes. By highlighting orders lacking these attributes, it prevents synchronization issues, providing assurance that orders seamlessly integrate with NetSuite.
Field | Description |
---|---|
The Canceled Order Report provides a comprehensive tracking mechanism for all orders that have entered the OMS and subsequently been canceled. This report ensures a systematic record of cancellations, offering visibility into the cancellation process.
In the context of NetSuite, the Canceled Order Report becomes important due to the non-automatic synchronization of cancellations by HotWax. This report ensures that canceled orders align with expectations in NetSuite, whether through Celigo or NetSuite user actions. By using this report, organizations leveraging NetSuite gain a proactive means to verify and reconcile cancellation records, preventing discrepancies. This meticulous approach contributes to the accuracy of cancellation data across systems, enhancing the reliability of financial and operational records within NetSuite.
Field | Description |
---|---|
The Product Without NetSuite ID report identifies products that have been synchronized from Shopify to the OMS with an expectation that NetSuite should have corresponding entries for all these products. However, instances may arise where legacy data in Shopify is not present in NetSuite. This discrepancy has the potential to disrupt the synchronization in product-based workflows between Shopify, the OMS, and NetSuite. Addressing the products without NetSuite IDs is crucial to maintain the integrity of data across platforms and ensure a seamless synchronization process, preventing any potential disruptions in the flow of product information between the systems.
The Customers Without NetSuite ID report identifies instances where customer records synchronized from Shopify to the OMS lack corresponding entries in NetSuite. To address this, the OMS creates new customers in NetSuite, ensuring the integrity of customer data across platforms. This report provides an overview of customers without NetSuite IDs, offering valuable insights into the synchronization status and enabling timely corrective actions. By maintaining consistency in customer data, this approach contributes to a seamless and reliable integration between Shopify, the OMS, and NetSuite.
The Allocation Pending Report displays orders assigned to facilities that currently lack sufficient inventory for immediate fulfillment. Monitoring the orders and items listed in this report is essential for initiating replenishment actions at the store. By doing so, retailers can ensure that inventory levels are maintained adequately, facilitating the successful completion of fulfillment for the identified orders.
Automated sync of inventory data from NetSuite to HotWax Commerce to ensure accurate inventory counts.
NetSuite serves as the central system of record for tracking product inventories across various retail locations. Inventory transactions in Netsuite, encompassing the creation and reception of purchase orders (POs) in warehouses, as well as the fulfillment of online orders from these warehouses, are vital components for maintaining real-time and precise inventory records.
However, while HotWax Commerce receives frequent updates regarding online orders fulfilled from the warehouse using NetSuite, it does not receive regular updates on new inventory arrivals in the warehouses in response to purchase orders. This discrepancy causes HotWax Commerce to fall out of synchronization with inventory data of NetSuite.
To ensure that HotWax Commerce remains continually synchronized with the latest inventory information, the daily synchronization of inventory data is paramount. This synchronization process revolves around the extraction of inventory data from NetSuite and the subsequent update of HotWax Commerce's inventory records. This process is typically scheduled during off-peak hours, often taking place in the late hours of the night or in the early morning.
Automate the daily synchronization of inventory data from Netsuite to HotWax Commerce.
Ensure that HotWax Commerce reflects the most recent inventory numbers, as recorded in NetSuite.
Actions
A Scheduled Script, equipped with the capability to utilize the Search Task from the N/task module, is executed. The objective of this script is to retrieve inventory records for all products stored within NetSuite. This is achieved through the execution of a saved search, specifically tailored for this purpose. Once the search is complete, the script generates a CSV file containing the inventory data and puts it within NetSuite's File Cabinet.
The Search Task function, utilized here, can generate and store a file solely within NetSuite's File Cabinet. It lacks the capability to place the file in an SFTP location. As a result, another scheduled script is necessary to accomplish this task.
SuiteScript
A secondary Scheduled Script is triggered, which is responsible for retrieving the CSV file generated by the previous script from NetSuite's File Cabinet and subsequently relocating it to the designated SFTP location. An essential aspect to consider is that a 15-minute time gap is introduced between these two scripts. This delay is introduced to allow the asynchronous task, internally generated by NetSuite when executing the Search Task function of the N/Task module, to complete. Without this interval, the second script might run before the asynchronous task finishes, leading to an empty folder in NetSuite File Cabinet. This script not only transfers the files but also archives them from the NetSuite File Cabinet.
SuiteScript
SFTP Locations
The final step in the workflow involves a scheduled job within HotWax Commerce OMS. This job is responsible for reading the Inventory Sync CSV files from the SFTP location. It utilizes this data to reset the inventory numbers for products within the HotWax Commerce system.
Job in HotWax Commerce
In this particular use case, we have employed the Search Task function of the N/Task module for exporting inventory data from NetSuite. This approach is distinct from other scenarios where we utilized Map Reduce scripts and regular saved searches using the N/Search module. Our decision to implement Search Task for this specific purpose is based on our practical experience with various methods of exporting data from NetSuite, which revealed compelling reasons for this choice:
Initially, we attempted to synchronize inventory data from NetSuite to HotWax Commerce using Suite Script with a standard saved search through the N/Search module. However, this approach proved to be impractical when dealing with a high volume of inventory records. The script execution time exceeded the maximum threshold of one hour for Scheduled Scripts. NetSuite's documentation reinforced that SuiteScript is best suited for handling smaller data sets, making it evident that an alternative approach was required.
Subsequently, we transitioned to Map Reduce scripts to manage the synchronization of inventory between NetSuite and HotWax Commerce. Map Reduce scripts are designed to handle large datasets efficiently and demonstrated significantly improved performance compared to Scheduled Scripts. Notably, even if the script execution extends beyond one hour, Map Reduce jobs are designed to manage NetSuite resources effectively, allowing them to complete the task. Based on our experience, processing a million inventory records required approximately two hours.
To optimize the process and achieve rapid synchronization, we adopted SuiteScript in combination with the Search Task function from the N/Task module. The results were remarkable, with the execution time reduced to a mere 10-15 seconds for a million inventory records. The search was executed swiftly, the CSV file was generated, and it was deposited in NetSuite's File Cabinet within a matter of seconds. This extraordinary speed and efficiency led us to the conclusion that the Search Task of the N/Task module was the ideal choice for synchronizing inventory records from NetSuite to HotWax Commerce.
For retailers operating a single physical warehouse but catering to both B2C and B2B customers, managing inventory effectively is crucial. The B2C warehouse handles fulfillment of online orders, while the B2B warehouse manages bulk operations. In this scenario, retailers configure two distinct logical locations in NetSuite: one for B2C (eCommerce) and another for B2B (wholesale) operations. This setup allows them to allocate inventory strategically between B2C and B2B business needs.
In the event where inventory in the B2C warehouse is depleted, retailers transfer stock from the B2B warehouse to replenish it, and vice versa when the B2B warehouse needs restocking, retailers transfer inventory from the B2C warehouse.
The effectiveness of this process relies on timely synchronization. If inventory movements to or from the B2C warehouse are updated in HotWax Commerce during the daily sync with NetSuite, there's a risk of operating on outdated inventory levels. The daily sync, scheduled during off-peak hours such as late at night or early in the morning, can result in missed sales opportunities on eCommerce if recent inventory transfers to the B2C warehouse are not promptly reflected in HotWax Commerce. Additionally, it can lead to overpromising on eCommerce if inventory transfers from the B2C warehouse are not timely updated in HotWax Commerce.
Therefore, it's essential for HotWax Commerce to sync recent inventory updates from NetSuite whenever retailers move inventory between B2C and B2B warehouse. This ensures that the inventory levels in NetSuite are accurately reflected in HotWax Commerce and, consequently, on the eCommerce platform, preventing underselling and overselling of stock.
Actions
Map Reduce Script in NetSuite runs every 15 minutes, generates an inventory transfer CSV file and places it at the designated SFTP location. This file contains inventory deltas, specifying increases or decreases in a product's inventory at the B2C warehouse.
SuiteScript
Export inventory transfer records
SFTP Locations
A scheduled job in HotWax Commerce reads the CSV file from the SFTP location and adjusts the inventory records in HotWax Commerce. When inventory is transferred to the B2C warehouse, the scheduled job increases the inventory count for the product. Conversely, when inventory is transferred from the B2C warehouse, the job reduces the product's inventory count.
Job in HotWax Commerce
Import inventory transfer records
Transfer orders originate in NetSuite, but there is a distinction in how they are fulfilled. When a transfer order is initiated from a warehouse, NetSuite's fulfillment solution is employed to fulfill the transfer order, ensuring the correct allocation of inventory.
Now, let’s look at how warehouse to store transfer orders are processed:
Warehouse managers create transfer orders in NetSuite. On fulfilling transfer order items in NetSuite, corresponding item fulfillment records are generated and transfer orders are automatically assigned a Pending Receipt
status in NetSuite.
Each transfer order can result in either a single item fulfillment record or multiple records, depending on the scenario:
Single item fulfillment record: This happens when all products in a transfer order are fulfilled simultaneously, resulting in the creation of a single shipment and, consequently, a single item fulfillment record.
Multiple item fulfillment records: This happens when products in a transfer order are fulfilled separately, leading to the creation of multiple shipments due to some products being shipped later and, consequently, multiple item fulfillment records.
Multiple item fulfillment records for a single product: This happens when a transfer order is created for a single product, but its quantity is shipped in multiple shipments and, consequently, multiple item fulfillment records.
Whenever an item is fulfilled and the item fulfillment record is marked as Shipped
in NetSuite, the inventory count for corresponding items is reduced in NetSuite. This also signifies that the items have been dispatched from the warehouse and are in transit to the store.
Inbound shipments are automatically created in HotWax Commerce so that the store can receive the transferred inventory. HotWax Commerce provides a dedicated Inventory Receiving App for store associates to receive in inventory stores. When the store associates verifies the inbound shipments and receives them, inventory counts for the corresponding items are automatically increased in HotWax Commerce.
Upon successful receipt of inventory, HotWax Commerce synchronizes item receipts with NetSuite. This ensures that the inventory count at store is accurately increased in NetSuite and the status of transfer orders status is updated from Pending Receipt
to Received
.
As mentioned earlier, in NetSuite, the inventory count for transfer order items shipped from the warehouse is reduced. It’s crucial to note that in HotWax Commerce, this reduction takes place during its daily inventory sync from NetSuite.
Export Transfer Order Item Fulfillment Records from NetSuite: A Map Reduce script runs a specific Saved Search to identify transfer order item fulfillment records in Shipped
status, that have the source location as the warehouse and destination location set as the store. It compiles the relevant data into a CSV file, which is then securely placed in an SFTP location. The script runs periodically, typically every 15 minutes, to ensure it fetches only the latest shipped transfer order item fulfillment records from NetSuite, optimizing efficiency.
SuiteScript
Export Item Fulfillment Records to SFTP
SFTP Location
Import Transfer Order Item Fulfillment Records in HotWax Commerce: A scheduled job in HotWax Commerce OMS reads the transfer order item fulfillment CSV file from the SFTP location and creates inbound shipments in the OMS at the destination facility.
Job in HotWax Commerce
Import Item Fulfillment Records from SFTP
Store associates leverage HotWax Commerce Inventory Receiving App to receive transferred inventory. The user-friendly interface of this app ensures a smooth and efficient receiving process, even for users with minimal training.
Inbound shipments that have been created are automatically reflected in the Inventory Receiving App, allowing store associates to receive them in store. Upon receiving them, item receipt records are generated in HotWax Commerce. Subsequently, the inventory counts for the items received in the store are promptly increased in HotWax Commerce.
Export Item Receipts from HotWax Commerce: To maintain a comprehensive record and accurately update inventory count for items received at the store in NetSuite, a scheduled job in HotWax Commerce Integration Platform generates a JSON file with the item receipt records and securely places the file in an SFTP location, making it accessible for NetSuite.
Import Item Receipts into NetSuite: In NetSuite, a scheduled SuiteScript reads this JSON file containing item receipt records from the SFTP location. The script iterates through each record, creates new item receipt records, and updates inventory count in NetSuite. The script uses the versatile N/record module to ensure a smooth transition.
Job in HotWax Commerce
Export Item Receipts to SFTP
SFTP Location
SuiteScript
Import Item Receipts from SFTP
Once all the transfer order item fulfillment records have been successfully received in-store and their item receipt records have been synchronized with NetSuite, the transfer order status is updated from Pending Receipt
to Received
.
Here's how transfer order fields are mapped in NetSuite and HotWax Commerce
Discover how transfer order movements are tracked for timely synchronization between HotWax and NetSuite with efficient reports.
Transfer Order reports play a crucial role in monitoring and managing the movement of goods between facilities. Here are two types of Transfer Order reports:
This Open Transfer Order Shipment Older Than One Day report provides a comprehensive overview of transfer orders that have been imported from NetSuite to HotWax but have not yet been received within the last one day. The absence of reception indicates a lapse in communication to complete these orders in NetSuite. This report assists in identifying and addressing transfer orders that require attention for completion in NetSuite, ensuring a timely and accurate synchronization between HotWax and NetSuite systems.
Field | Description |
---|---|
This Transfer Order Shipment Completed Today report provides a comprehensive list of transfer orders that have been received in HotWax and marked as completed.
Field | Description |
---|---|
Discover how HotWax Commerce synchronizes POS sales to NetSuite, ensuring accurate inventory and accounting updates for a consolidated view of online and in-store sales.
In a retail environment, POS (Point of Sale) transactions play a vital role, reflecting the real-time sales happening in physical stores. POS sales are posted to NetSuite to manage inventory and conduct relevant accounting. While many businesses integrate their POS systems directly with their ERP (Enterprise Resource Planning) systems, some retailers choose to centralize their sales data, routing all transactions through an Order Management System (OMS) to synchronize both online and in-store sales data with the ERP. This scenario focuses on this synchronization where HotWax Commerce acts as the intermediary to push POS sales to NetSuite.
There are two primary ways to record POS sales in NetSuite: creating sales orders or directly creating cash sales records. Creating sales orders necessitates additional steps such as creating customer deposits, fulfillment records, and invoices. Cash Sale transactions represent immediate sales with received payment, eliminating the need to create fulfillment records, unlike conventional sales orders.
We took the approach of directly creating cash sales for POS sales data in NetSuite due to its streamlined process, eliminating the need for intervention to create additional records and allowing for immediate completion of transactions.
The synchronization of POS sales from HotWax Commerce to NetSuite involves the creation of Cash Sale records in NetSuite, ensuring that sales data from physical stores is accurately reflected in the ERP system. By channeling all POS transactions through HotWax Commerce, retailers can leverage this integration to keep their inventory updated, perform relevant accounting postings, and maintain a consolidated view of both online and in-store sales within NetSuite.
A job within HotWax Commerce Integration Platform identifies POS completed orders that need to be synced to NetSuite by checking the following conditions:
Order Status: Completed.
Sales Channel: POS_Channel.
Shipping Method: POS_COMPLETED.
POS orders that match these criteria are exported to an SFTP location in a CSV file.
SFTP Locations
Time based sync HotWax uses a time based cursor to track which orders have been synced. This means if sync fails for an order, it will not be automatically retried.
A Scheduled SuiteScript in NetSuite imports this CSV file from the SFTP server. The SuiteScript uses the CSV ImportTask function of the N/Task module to import the POS order details as Cash Sale records directly into NetSuite.
SuiteScript
To sync POS orders from HotWax Commerce to NetSuite, a required field is the "Shipping Address." HotWax Commerce syncs the store's address in the "Ship To" field in NetSuite
"*" denotes fields that are required to be sent to NetSuite for the POS order sync to work
A MapReduce SuiteScript is utilized in NetSuite to export a CSV file to an SFTP location containing the internal NetSuite IDs corresponding to the processed POS orders.
SuiteScript
SFTP Locations
The Import Order Identification job within HotWax Commerce OMS then retrieves the exported CSV file from the SFTP server and creates Order Identification records in the OMS, linking the POS orders with their respective NetSuite internal IDs.
Job in HotWax Commerce
Store managers can return excess or unsold inventory from stores to the warehouse with store to warehouse transfer orders.
Now, let’s look at how store to warehouse transfer orders are processed:
Warehouse managers create transfer orders in NetSuite, specifying the source location as the designated store and the destination location as the warehouse. These transfer orders are automatically assigned a Pending Fulfillment
status.
These transfer orders are synchronized to HotWax Commerce in the default Created
status. HotWax Commerce provides a dedicated Store Fulfillment App for store associates to fulfill transfer order items from stores. Once transfer order items are shipped from stores, their status is updated from Approved
to Completed
and subsequently inventory count for the shipped items is reduced in HotWax Commerce.
The transfer order items shipped from the store are synchronized to NetSuite so that incoming inventory can be received in the warehouse. This step also updates transfer order status from Pending Fulfillment
to Pending Receipt
.
When transfer order items are received in the warehouse, inventory counts for the corresponding items are automatically increased in NetSuite and the transfer order status is updated from Pending Receipt
to Received
.
It’s crucial to note that the inventory count for transfer order items received in the warehouse is increased in HotWax Commerce on performing its daily inventory sync from NetSuite.
Export Created Transfer Orders from NetSuite: Warehouse managers create transfer orders in NetSuite, specifying the source location as the designated store and the destination location as the warehouse. These transfer orders are automatically assigned a Pending Fulfillment
status.
At regular intervals, a Map Reduce script runs a specific Saved Search in NetSuite and identifies transfer orders with a Pending Fulfillment
status that have a source location set as the Store
. This script compiles the relevant data into a CSV file, which is then securely placed at an SFTP location.
SuiteScript
Export Transfer Orders to SFTP
SFTP Location
Import Transfer Orders into HotWax Commerce: A scheduled job in HotWax Commerce OMS reads the transfer orders CSV file from the SFTP location and downloads transfer orders in HotWax Commerce with a default Created
status.
Approve Transfer Orders: A scheduled job in HotWax Commerce OMS identifies all transfer orders in the Created
status and automatically marks them as Approved
.
Why is transfer order approval necessary? Stores fulfill transfer orders using the Store Fulfillment App. These transfer orders are only reflected in the app after they have been approved in HotWax Commerce.
Upon approval, HotWax Commerce also reduces the Available to Promise inventory for the transfer order items that will be fulfilled from the store.
Job in HotWax Commerce
Import Transfer Orders from SFTP
Approve Transfer Orders
Once approved, transfer orders are automatically reflected at the source location in the Store Fulfillment App so that store associates can create shipments and ship transfer order items.
Store associates pick the transfer order items they want to fulfill from their store.
After picking the items, store associates pack them and proceed to create fulfillments for each item.
Once the shipment has been created, store associates fetch shipping labels from the carrier and the corresponding tracking codes.
After all items are shipped, transfer orders status is automatically updated from Approved
to Completed
in HotWax Commerce.
Once transfer order items are fulfilled from the store, the inventory count for the corresponding items is automatically reduced in HotWax Commerce.
Multiple fulfillments against a single transfer order can be created in the Store Fulfillment App. For example, if a transfer order contains multiple items, the store might choose to dispatch some items initially and fulfill the remaining ones later. In this event, the transfer order remains in the Approved
status in HotWax Commerce and transitions to Completed
status when all items within the transfer order have been fulfilled.
Export Fulfilled Transfer Orders Items from HotWax Commerce: A scheduled job in HotWax Commerce Integration Platform generates a JSON file with all the transfer order items that are in the Completed
status and securely places the file in an SFTP location, making it accessible for NetSuite.
Job in HotWax Commerce
Export Fulfilled Transfer Order Items to SFTP
SFTP Location
Import Fulfilled Transfer Orders Items in NetSuite: In NetSuite, a scheduled SuiteScript reads this JSON file containing fulfilled transfer order items from the SFTP location. The script iterates through each record, creates item fulfillment records, and reduces inventory count in NetSuite for items shipped from the store.
Once item fulfillment records are created for each transfer order item, the status of the transfer order in NetSuite is automatically updated from Pending Fulfillment
to Pending Receipt
.
SuiteScripts
Import Fuflilled Transfer Order Items from SFTP
Receive Transfer Orders in NetSuite: Warehouse managers manually initiate the receiving process in NetSuite for the store transferred inventory upon its arrival at the warehouse.
After the receiving process is completed, the transfer order is marked as Received
, indicating that all transfer order items have been successfully received at the warehouse. Additionally, the inventory count for the newly received inventory is updated in NetSuite.
Inventory for transfer order items received in the warehouse is synchronized when HotWax Commerce performs its daily inventory sync from NetSuite.
Here's how transfer order fields are mapped in NetSuite and HotWax Commerce
Stores looking to transfer surplus inventory to another store in need of it work alongside the warehouse manager to create a store-to-store transfer order in NetSuite. This facilitates the transfer of inventory from one store location to another.
Now, let’s look at how store to store transfer orders are processed:
Warehouse managers create transfer orders in NetSuite, specifying the source location as the designated store and the destination location as also a store. These transfer orders are automatically assigned a Pending Fulfillment
status.
These transfer orders are synchronized to HotWax Commerce so that they can be fulfilled from stores. Once transfer order items are shipped from stores, their status is updated from Approved
to Completed
and subsequently inventory count for the shipped items is reduced in HotWax Commerce.
The transfer order items shipped from the store are synchronized to NetSuite and the corresponding item fulfillment records are generated and marked Shipped
in NetSuite. This step also ensures that inventory counts for the corresponding items are automatically reduced in NetSuite and the transfer order status is updated from Pending Fulfillment
to Pending Receipt
.
These item fulfillment records are synchronized to HotWax Commerce and inbound shipments are automatically created so that the store can receive the transferred inventory. When the store associates verifies the inbound shipments and receives them, inventory counts for the corresponding items are automatically increased in HotWax Commerce.
Upon successful receipt of inventory, HotWax Commerce synchronizes item receipts with NetSuite. This ensures that the inventory count at store is accurately increased in NetSuite and the status of transfer orders status is updated from Pending Receipt
to Received
.
Export Created Transfer Orders from NetSuite:
Warehouse managers create transfer orders in NetSuite, specifying the source location as the designated store and the destination location as also a store. These transfer orders are automatically assigned a Pending Fulfillment
status.
At regular intervals, a Map Reduce script runs a specific Saved Search in NetSuite and identifies transfer orders with a Pending Fulfillment
status that have a source location set as the Store
. This script compiles the relevant data into a CSV file, which is then securely placed at an SFTP location.
SuiteScript
Export Transfer Orders to SFTP
SFTP Location
Import Transfer Orders into HotWax Commerce:
Once the store to store transfer orders are created and exported from NetSuite, they are imported into HotWax Commerce.
The process of approving transfer orders in HotWax Commerce, fulfilling them from the designated store location, reducing inventory counts in HotWax Commerce for fulfilled transfer order items, exporting store fulfilled transfer order items from HotWax Commerce and finally importing them into NetSuite mirrors the store to warehouse transfer order flow discussed earlier.
Job in HotWax Commerce
Import Transfer Orders from SFTP
Approve Transfer Orders
Export Fulfilled Transfer Order Items to SFTP
SFTP Location
SuiteScript
Import Fuflilled Transfer Order Items from SFTP
Generate Item Fulfillment Records in NetSuite:
Once fulfilled transfer orders are imported into NetSuite, item fulfillment records are generated and are automatically marked “Shipped”. Whenever an item fulfillment record is marked “Shipped”, the inventory count for corresponding items is reduced in NetSuite. These records signify that the destination store location can now start receiving the transfer order items.
A Map Reduce script runs a specific Saved Search to identify item fulfillment records in Shipped
status, where both the source and destination locations are Store
locations. Subsequently, the script compiles the relevant data into a CSV file, which is securely placed at an SFTP location.
SuiteScript
Export Item Fulfillment Records to SFTP
SFTP Location
Receive Transfer Orders in HotWax Commerce:
The process of importing item fulfillment records in HotWax Commerce, receiving inbound shipments in the store, increasing inventory counts in HotWax Commerce against inbound shipments, exporting item receipts from HotWax Commerce, importing item receipts into NetSuite and finally increasing inventory count at store in NetSuite mirrors the warehouse to store transfer order flow discussed earlier.
Job in HotWax Commerce
Import Item Fulfillment Records from SFTP
Export Item Receipts to SFTP
SFTP Location
SuiteScript
Import Item Receipts from SFTP
Following this approach, store associates at the destination store can efficiently receive inbound shipments at their store, synchronize the item receipts with NetSuite, and ultimately mark the completion of store to store transfer orders, with the transfer order status updating in NetSuite from Pending Receipt
to Received
.
Here's how transfer order fields are mapped in NetSuite and HotWax Commerce for store fulfillment:
Here's how transfer order fields are mapped in NetSuite and HotWax Commerce for receiving in store:
Transfer orders are instrumental in the internal movement of inventory within an omnichannel retail environment. They serve various purposes, including:
Warehouse to Store: When there is a need to replenish inventory at retail stores from the central warehouse or distribution center, transfer orders can be initiated to move the required items from the warehouse to the stores.
Store to Warehouse: Sometimes, stores might need to return excess or unsold inventory back to the warehouse for consolidation or redistribution. Transfer orders facilitate this movement from the stores back to the warehouse.
Between Stores: In cases where one store has excess inventory that another store requires, transfer orders can be used to transfer inventory directly between stores, optimizing stock levels across the retail network.
Transfer orders are initiated in the NetSuite ERP system, facilitating the movement of inventory from warehouses to stores, between stores, or stores to warehouses.
Explore a list of shipping methods mapped between Shopify, HotWax Commerce, and NetSuite, ensuring accurate order syncing.
When syncing orders to NetSuite it's very important to have the correct shipping methods mapped. If shipping methods are not mapped correctly the order import process may fail.
Here is a sample table of how shipping methods are mapped between Shopify, HotWax and NetSuite.
# | Shopify Value | HotWax ID | NetSuite Value |
---|
Discover how seamless integration between NetSuite and HotWax Commerce automates Purchase Order synchronization, streamlines inventory receipt, and updates order statuses efficiently.
One of the critical aspects of managing an omnichannel retail business involves ensuring the accuracy and availability of inventory in physical stores. For retailers who utilize NetSuite as their ERP system and deploy HotWax Commerce's Order Management System, an efficient integration is required to synchronize purchase orders (POs) raised in NetSuite with the HotWax Commerce Order Management System. This synchronization is pivotal, as it allows in-store associates to effectively receive and manage inventory using the user-friendly HotWax Commerce in-store inventory management tools.
In this scenario, when a Purchase Order is raised in NetSuite's ERP system, it needs to be seamlessly synchronized with HotWax Commerce, where the store associates employ an intuitive by HotWax Commerce for the efficient receipt of inventory.
Automate the synchronization of Purchase Orders from NetSuite to HotWax Commerce.
Streamline the creation of Item Receipt records within HotWax Commerce when store associates receive inventory.
Automate the update of Purchase Order statuses from "Pending" to "Received" in NetSuite once items are received in HotWax Commerce.
The procurement process begins within the NetSuite ERP system, where Purchase Orders are generated to replenish inventory in physical stores. This step is integral to initiating the flow of inventory into the retail locations.
To initiate the synchronization process, a Map Reduce Script, running a specific Saved Search, identifies Purchase Orders in "Pending" status within NetSuite. This script compiles the relevant Purchase Order data into a CSV file, which is then placed in an SFTP location. This Map Reduce script runs at regular intervals, typically every 15 minutes, ensuring that only the latest and pending Purchase Orders are fetched from NetSuite. It is meticulously designed to minimize the data transferred and processed, maintaining optimal efficiency.
SuiteScript
Create a file of open purchase orders
SFTP Locations
A scheduled job within HotWax Commerce OMS monitors the SFTP location, periodically checking for new Purchase Order CSV files. The job uses the robust APIs provided by HotWax Commerce's Export/Import tools to import these Purchase Orders.
Job in HotWax Commerce
Once the Purchase Orders are synchronized, store associates use the Receiving App provided by HotWax Commerce to receive inventory. The intuitive interface of the Receiving App facilitates a seamless and efficient receiving process, even for users with minimal training.
Once the Purchase Orders (POs) are received by store associates using the HotWax Commerce Receiving App, the process involves the creation of Item Receipt records within HotWax Commerce. These records play a crucial role in increasing inventory numbers for the received products, ensuring that newly received inventory is readily available for eCommerce platforms to sell.
To ensure a comprehensive and accurate record of the items received are synchronized back to NetSuite, a scheduled job within HotWax Commerce Integration Platform is employed to export Item Receipts created within the system. Each Item Receipt record is associated with its respective Purchase Order. The mapping between Item Receipts and Purchase Orders is critical for reconciliation and further processing. This job runs at defined intervals, typically on a schedule that aligns with the retailer's specific requirements. It gathers the Item Receipt data and creates a JSON file, capturing all the essential details.
Internal location where HotWax places CSV to convert it to NetSuite format
SFTP Locations
To facilitate the subsequent processing of this data, the JSON file is securely placed in an SFTP location, making it accessible for NetSuite.
SFTP Locations
In NetSuite, a scheduled script retrieves the JSON files with item receipt data from the SFTP location. It then goes through each record, generates new item receipt records, and updates inventory numbers within NetSuite. The script uses the N/record module because the CSV import task in NetSuite doesn't accommodate item receipt records, making the JSON file the method used to transmit receipts to NetSuite.
The synchronization process doesn't stop at the creation of Item Receipts; it extends to automating the change in status for the associated Purchase Orders. Upon successful creation of Item Receipt records, the status of the respective Purchase Orders in NetSuite is automatically updated from "Pending" to "Received."
SuiteScript
The HC_SC_ImportPurchaseOrderReceipts SuiteScript also generates a CSV file highlighting erroneous records found during processing and uploads the file to the SFTP server. Simultaneously, an email alert is automatically triggered to designated personnel, helping them quickly pinpoint the source of the issue and accelerating troubleshooting.
Learn how HotWax Commerce's Cycle Count App synchronizes the latest inventory counts to NetSuite for consistent records.
Managing inventory accuracy in a retail business is a perpetual challenge. Retailers often encounter discrepancies between their systemic inventory and the actual physical stock on hand. To address these inventory discrepancies, operations teams periodically conduct inventory cycle counts at stores.
An inventory cycle count involves periodically counting a specific subset of items. Unlike a full physical inventory count, which requires tallying every item at once, cycle counts distribute the counting process over time, improving efficiency.
HotWax Commerce simplifies the cycle count process with its directed Cycle Count App, which enables operations teams to assign and schedule counts across multiple stores. The app notifies store staff when a count is assigned to them and lets them scan products to complete the cycle count efficiently. Once finished, the store can submit its count for review, allowing operations teams to review discrepancies and, if necessary, request a recount.
By conducting these periodic checks, retailers can resolve discrepancies in real-time, maintaining alignment between the systemic inventory and what is physically present in stores.
The main goal of this integration is to keep in-store product inventory counts consistent between NetSuite and HotWax Commerce.
NetSuite functions as the system of record for inventory in the retailer's technology ecosystem, making it essential to update NetSuite about any inventory changes within the stores.
Synchronizing in-store inventory variances from HotWax Commerce to NetSuite ensures consistent and accurate inventory data, enhancing operational efficiency and inventory accuracy for systems dependent on NetSuite.
The Cycle Count App's interface adapts for different user roles. Operations teams assign cycle counts to specific stores through the app. Once assigned, store associates leverage the app to conduct the cycle count, recording and submitting their counting results for review by the operations team.
The Cycle Count App streamlines inventory reconciliation by automatically displaying submitted cycle count results along with the variances between counted and systemic invetory levels. This allows operations teams to review variances with clarity and accuracy.
Upon approval, HotWax Commerce automatically updates the inventory count of the products. Inventory levels for counts that are either rejected or flagged for recount remain unchanged in HotWax Commerce.
Suppose a store associate has submitted the cycle count results for multiple products and only some of the inventory variances are approved while others are rejected. In that event, HotWax Commerce will adjust the inventory count only for the products for which the inventory variance has been approved and is now in the "Completed" status. The rejected variances will have their status updated from "Created" to "Rejected."
Once inventory cycle count variances are successfully logged in HotWax Commerce OMS, a scheduled job in HotWax Commerce Integration Platform generates a CSV file containing products for which inventory variance recorded that are in the “Completed” status.
This means that when exporting inventory adjustments, only the variances that have been approved and are marked as "Completed" will be included in the CSV file, while those that are rejected or still in the "Created" status will be excluded.
For example, suppose we have three products: Product A, Product B, and Product C. If variances for Product A and Product B are approved and marked as "Completed," while the variance for Product C is rejected, only the inventory adjustments for Product A and Product B will be synced.
This generated CSV file is then placed in an SFTP location, ensuring that it is readily accessible for further processing.
Successful logging of an inventory count is indicated by its status being "INV_COUNT_COMPLETED"
Jobs in HotWax Commerce
Create Cycle Count Inventory Variance CSV:
SFTP Locations
Inventory Cycle Count CSV:
Cycle Count Inventory Variance of Actual vs Systemic:
In NetSuite, a Scheduled Suite Script is employed to download and import the CSV files from the SFTP location. This script leverages the native CSV Import tool provided by NetSuite to create Inventory Adjustment records. The use of the NetSuite CSV Import tool for Inventory Adjustments eliminates the need for the N/record module in this specific integration, offering an efficient and accurate synchronization method.
SuiteScripts
Import Inventory Cycle Count Variance from SFTP:
While cycle counting in stores follows a periodic schedule, stores frequently encounter sudden inventory discrepancies in various scenarios. For example, if store associates identify 5 damaged units at their location, they’d want to record a variance of -5 for the damaged inventory. Similarly, if they discover 2 units of previously missing inventory, they’d want to record +2 for the newly found items.
To address these unexpected inventory changes, store managers can directly record these identified inventory variances, and these variances are pushed into HotWax Commerce.
Unlike cycle counting, where an inventory count is conducted periodically, this process involves store managers directly recording the variance amount without physically counting the entire store inventory.
Store managers log the inventory variances through the app, along with providing the relevant reasons, these recorded inventory variances automatically update the inventory in HotWax Commerce.
Once inventory variances are successfully updated in HotWax Commerce, a scheduled job within HotWax Commerce integration platform generates a CSV file containing updated inventory data with all the inventory variance records. This file is then placed in an SFTP location from where NetSuite can read it.
Jobs in HotWax Commerce
Create Inventory Variance CSV:
SFTP Locations
Inventory Variance CSV:
Inventory Variance:
Retailers learn a lot about their product and operations using the reasons for variance in inventory but NetSuite’s Inventory Adjustment function only provides limited information relating to variance, mostly restricted to a “Comments” free text field. When trying to perform analytics on variance reasons, the free text nature of the comments field makes it difficult to obtain predictable results.
To circumvent this issue, retailers can set up variance locations in NetSuite. These locations are set up as “undefined” type locations, meaning that they are neither a retail location nor a warehouse, rather just a holding location. Retailers can set up as many variance locations as they need to help accurately segregate types of variances in their operations.
When variances are tracked using variance locations in NetSuite, variances logged by HotWax Commerce are actually registered as an Inventory Transfer from the affected store location to the variance location. For example, if a store wants to damage out 5 units of a product, they’d log an inventory transfer of that product from their store to the Damaged location. This reduces the inventory from the store and increments that inventory at the Damaged location. Now retailers can use this movement to analyze which facilities are logging damaged inventory at higher rates than others and potentially track down operational and planning issues.
The CSV file containing inventory item variance feed is also stored in the designated SFTP location for NetSuite as invenotry trasfer file:
In NetSuite, another Scheduled Suite Script is employed to import the CSV files from the SFTP location and update the inventory records. This script leverages the native CSV Import tool provided by NetSuite to create Inventory Adjustment records.
SuiteScripts
Import Inventory Variance from SFTP:
The automated synchronization of inventory variances from HotWax Commerce to NetSuite offers numerous advantages:
Efficiency: The process minimizes manual effort and reduces the time required for manual data entry.
Error Reduction: Automation eliminates potential human errors, ensuring data consistency and accuracy.
Operational Transparency: With near real-time synchronization, retailers gain insight into inventory variances as they occur, facilitating quicker decision-making and enhanced operational transparency.
This integration not only simplifies the process of managing in-store inventory but also plays a vital role in maintaining consistency across multiple systems, ultimately improving operational efficiency and inventory accuracy in the omnichannel retail environment.
Efficiently set up SFTP for seamless data transfer with NetSuite.
From the Home dashboard, select the Setup
link located in the top-right corner. Under the "Custom" section, choose SFTP Configuration
and click the New
function.
In the "SFTP Servers" section, click the "New SFTP Server" button.
Choose the "Preferred SFTP Configuration" form by default. Complete the details in the CUSTOM FORM.
Setting up a default directory is required for the SFTP connection to work. Please obtain this from the system admin team.
Field | Details | Required |
---|
After entering the required details, click the "Save" button.
Ask the administration team to generate an RSA private key for the SFTP server in PEM format and they will share a file containing the generated key with you.
Navigate to Setup > Company.
Click on "Keys."
Select "Create New" and name the file "sftp-private-key."
Provide a random ID.
Go to the "File" segment and upload the PEM file received.
Wait for the upload process to complete.
Save the configuration.
Now, in the ID column, you will find the generated key (e.g., custkey999) representing the SFTP GUID.
To enable SFTP communication, it is necessary to define SFTP locations where NetSuite will put the required files in the specified format. To set up these SFTP locations, you can go ahead and execute a SuiteScript added below in NetSuite, which will generate the necessary locations on the SFTP server.
Discover how to set up SuiteCloud Development Framework (SDF) in NetSuite with this comprehensive guide.
The SuiteCloud Development Framework (SDF) is a robust tool empowering developers to craft and deploy customizations for NetSuite accounts.
Before developers can leverage the SuiteCloud Development Framework (SDF) for development within a targeted NetSuite account, specific features must be activated by an account administrator. These features establish the essential infrastructure for SDF to function effectively. Follow the steps outlined in the .
In addition to administrator-level configurations, developers intending to utilize SDF with a NetSuite role must undergo additional setup. This ensures developers have the necessary permissions and access for effective use of SDF capabilities. For detailed instructions on setting up a developer role for SDF, refer to .
It's essential to note that these configurations require active involvement from developers. Therefore, thoroughly review and follow the provided documentation to ensure the successful establishment of SuiteCloud Development Framework capabilities within the NetSuite environment.
Follow this checklist to complete the integration:
Install SFTP bundle in Netsuite
Setup SFTP
Configure SFTP server
Add a new SFTP server configuration
Define SFTP server details
Verify Netsuite Date format and time
Verify process
Verification steps
Setup SFTP directory
Customer
Inventory
Purchase Order
Sales Order
Transfer Order
Discount sale
Cash sale
Fulfilled Sales Order
Setting Up SuiteCloud Development Framework (SDF) in NetSuite
Attribute | POS Sales | POS Exchange Sales |
---|---|---|
Field | Description |
---|---|
Field | Description |
---|---|
Field | Description |
---|---|
S.No. | Fields in NetSuite | Fields in HotWax Commerce |
---|---|---|
S.No. | Fields in HotWax Commerce | Fields in NetSuite |
---|---|---|
S.No. | Fields in HotWax Commerce | Fields in NetSuite |
---|---|---|
S.No. | Fields in NetSuite | Fields in HotWax Commerce |
---|---|---|
S.No. | Fields in NetSuite | Fields in HotWax Commerce |
---|---|---|
S.No. | Fields in NetSuite | Fields in HotWax Commerce |
---|---|---|
S.No. | Fields in NetSuite | Fields in HotWax Commerce |
---|
S.No. | Fields in NetSuite | Fields in HotWax Commerce |
---|
HotWax Commerce provides out-of-the-box reports to get an overview of inventory cycle counts, which you can read
Order Status
Completed
Completed
Sales Channel
POS_Channel
Loop Exchange
Shipping Method
POS_COMPLETED
Two-Day Shipping
ORDER_NAME
The identifier for the order
ATTRIBUTE
The essential order attributes. For example, PRODUCT_VERIFIED
indicates whether the product has been verified
STATUS
The status if the order has essential attributes or not
ORDER_NAME
The identifier for the order
ATTRIBUTE
The essential order attribute. For example, PRODUCT_VERIFIED
indicates whether the product has been verified
NETSUITE_ORDER_EXPORTED
Status if the order has been exported to NetSuite or not
NETSUITE_CUSTOMER_ID
The customer identifier in NetSuite
ORDER_ID
The ID of the order in Shopify
HC_ORDER_ID
The ID of the order in HotWax Commerce
CANCELLED_DATE
Date when the order was canceled
SKU
Unique identifier
ITEM_DESCRIPTION
Narrative detailing the characteristics of the item
Price
The monetary value associated with the canceled item
REASON
Reason behind the cancellation
External_Id
The ID of the order in the external system
sku
Stock Keeping Unit (SKU) for the product
shopify_product_id
Unique identifier for the product in Shopify
hotwax_product_id
Unique identifier for the product in HotWax OMS
hotwax_customer_id
Unique identifier for the customer in HotWax
FIRST_NAME
First name of the customer
LAST_NAME
Last name of the customer
shopify_customer_id
Unique identifier for the customer in Shopify
order_count
Count of orders associated with the customer
FACILITY_ID
The identifier of the facility in external systems
FACILITY_NAME
The name of the facility in external systems
SKU
Unique identifier
QUANTITY
Quantity required of the SKU
1
Item Fulfillment Internal ID
External ID
2
Transfer Order Name
Transfer Order Name
3
Items
SKU
4
Quantity
Ordered Quantity
5
Destination Location
Facility
6
Tracking #
Tracking ID
Shipment_ID
The unique identifier for the shipment in the external system
HotWax_Shipment_ID
The unique identifier for the shipment in HotWax
Transfer_Order
The identification of the transfer order in the external system
Origin_Facility_ID
The ID of the origin facility where the shipment originates
Origin_Facility
The name of the facility where the shipment originates
Destination_Facility_ID
The ID of the destination facility where the shipment is destined
Destination_Facility
The name of the facility where the shipment is destined
Shipment_Status
The current status of the shipment
Imported_Date
The date when the transfer order was imported into HotWax
Shipment_ID
The unique identifier for the shipment in the external system
HotWax_Shipment_ID
The unique identifier for the shipment in HotWax
Transfer_Order
The identification of the transfer order in the external system
Origin_Facility_ID
The ID of the origin facility where the shipment originates
Origin_Facility
The name of the facility where the shipment originates
Destination_Facility_ID
The ID of the destination facility where the shipment is destined
Destination_Facility
The name of the facility where the shipment is destined
Shipment_Status
The current status of the shipment
Completed_Date
The date when the transfer order was marked as completed in HotWax
1
Shopify Order Name
PO #
2
NetSuite Order ID
POS Order Internal ID
3
Shopify Order ID
HC Shopify Order ID
4
Sales Channel
HC Sales Channel
5
Order Date
Date *
6
Bill To
Customer *
7
Product
Item
8
Qty
Quantity
9
Location
Location
1
Order Item Seq ID
External Order Line ID
2
Price Level NetSuite
Price Level
3
Tax Code
Tax Code
4
Product Promo ID
Discount Item
5
Product Store External ID
Subsidiary
1
Internal ID
External ID
2
Transfer Order Name
Transfer Order Name
3
Date
Date
4
Item
Product
5
Quantity
Qty
6
Source Location
Ship From
7
Destination Location
Ship To
8
Shipping Address
Ship To Address
9
Shipping Method
Shipping Method
1
Internal ID
External ID
2
Transfer Order Name
Transfer Order Name
3
Date
Date
4
Item
Product
5
Quantity
Qty
6
Source Location
Ship From
7
Destination Location
Ship To
8
Shipping Address
Ship To Address
9
Shipping Method
Shipping Method
1
Item Fulfillment Internal ID
External ID
2
Transfer Order Name
Transfer Order Name
3
Items
SKU
4
Quantity
Ordered Quantity
5
Destination Location
Facility
6
Tracking #
Tracking ID
1 | Priority Shipping (3-5 Day) | PRI_SHP_3DAY | Priority Shipping (3-5 Day) |
2 | FREE 2-Day Shipping | FRE_2_DAY_SHP | 2-Day Shipping |
3 | FREE Standard Shipping (7-10 Days) | FRE_STD_SHP_7DAY | FREE Standard Shipping - Fedex Smartpost Select Lightweight |
4 | DHL api Express Worldwide | DHL_API_EXP_WW | DHL Express Worldwide |
5 | FedEx International Priority® | FDX_INT_PRI | FedEx International Priority |
6 | FedEx International Economy® | FDX_INT_ECO | FedEx International Economy |
7 | Overnight Shipping | OVR_SHP | FedEx Standard Overnight |
8 | FREE 2 Day Shipping | FRE_2DAY_SHP | FedEx Home Delivery |
9 | FedEx 2Day | FDX_2DAY | 2-Day Shipping |
10 | Standard Shipping | STD_SHP | 2-Day Shipping |
11 | SecondDay | SEC_DAY | FREE FedEx 2-Day |
12 | Standard | STANDARD | 2-Day Shipping |
13 | EXPEDITED | EXPEDITED | 2-Day Shipping |
14 | SmartPost Standard Shipping (7-10 Days) | SMP_STD_SHP_7DAY | SmartPost Standard Shipping (7-10 Days) |
15 | 2-Day Shipping | 2_DAY_SHP | 2-Day Shipping |
16 | 2 Day Shipping | 2DAY_SHP | 2-Day Shipping |
17 | 2-Day FedEx Shipping | 2_DAY_FDX_SHP | 2-Day Shipping |
18 | FedEx International Priority Express | FDX_INT_PRI_EXP | FedEx International Priority |
19 | FedEx International Connect Plus | FDX_INT_CNT_PLS | FedEx International Connect Plus |
20 | FedEx Ground Shipping | FDX_INT_GRD_SHP | FedEx Ground |
21 | 2-3 Day International Shipping | 2DAY_INT_SHP | FedEx International Connect Plus |
22 | 2-5 Day International Shipping | 5DAY_INT_SHP | FedEx International Connect Plus |
23 | 2 Day Shipping 67G | 2DAY_SHP_67G | 2-Day Shipping 67G |
24 | 2 Day FedEx Shipping | 2DAY_FDX_SHP | FedEx Home Delivery |
25 | 3-Day Shipping | 3_DAY_SHP | 3-Day Shipping |
26 | 3 Day Shipping | 3DAY_SHP | FedEx Home Delivery |
27 | Standard Ground Shipping | STD_GRD_SHP | FedEx Home Delivery |
28 | Ground Shipping | GRD_SHP | FedEx Home Delivery |
29 | Shipping | SHP | USPS Shipping |
1 | Purchase Order Internal ID | External ID |
2 | Item | SKU |
3 | Quantity | Qty |
4 | Location | Facility |
5 | Expected Receipt Date | Estimated Delivery Date |
1 | Line ID | Order Item External ID |
SFTP GUID | Unique identifier for the SFTP configuration in NetSuite. | Yes |
SFTP SERVER | The address or domain of the SFTP server. | Yes |
USER ID | The username associated with the SFTP user. | Yes |
PORT | The port number used for SFTP communication (default is 22). | Yes |
HOST KEY | Authentication key provided by the SFTP server. | Yes |
DEFAULT FILE DIRECTORY | The default directory on the SFTP server for file operations. Example: /home/-sftp/netsuite/ | Yes |
TEST FILE FOR SFTP CONNECTION | A sample file used to test the connection with the SFTP server. | No |
TEST DOWNLOAD FOLDER ID | Identifier for the folder used in testing download operations. | No |
REPORT DATE TIMEZONE | Timezone setting for reporting purposes. | No |
RETRY FILES FOLDER ID | Identifier for the folder where retried files are stored. | No |
SCRIPT ID | Identifier for any associated scripts or automation. | No |
Effectively manage product pricing variations with Price Levels in NetSuite.
Price levels are used to manage multiple prices for a product. This is useful when a product is priced differently based on conditions like sales channel. In NetSuite, you can set up different prices levels for each item and service. You can also enter an additional sales price for online items.
To sync orders, you need to setup the price level that should be sent to NetSuite. This value can be reconfigured whenever different price levels need to be used.
Configure the desired price level in the settingValue field and import this data from the XML import page in Webtools.
Optimize your HotWax integration by configuring Product Store settings
In order to make sure all flows run as expected, some configurations need to be made in the Product Store settings in HotWax.
Auto Approve
HotWax has an Auto Approve flow out of the box. If you have a custom auto approval workflow in NetSuite make sure to turn off this native auto approve workflow in Product Store Settings.
Auto Aprrove will supersede and approval workflows, it is recommended to keep this off at all times
Ensure smooth data communication by installing the NetSuite Reader before configuring import jobs in OMS.
A NetSuite Reader needs to be installed befor configuring any NetSuite import Jobs in OMS. Failure to do so may lead to missing configurations, resulting in improper data communication. Follow the steps below for a seamless installation:
Go to the General Settings page
in your OMS instance using the provided sample link.
On the page, you will see Load Netsuite
button, click on it to load the reader.
After clicking the button, you will see a new NetSuite page in the Settings section in the hamburger menu of OMS.
Ensure smooth synchronization processes by verifying SFTP locations for various sync operations.
SFTP locations for all sync processes will automatically be created the first time a sync runs.
In case the locations are not created, here is a list of SFTP locations to verify.
Customer:
a) /home/{sftp-username}/netsuite/customer
b) /home/{sftp-username}/netsuite/customer/export/archive
c) /home/{sftp-username}/netsuite/customer/import/archive
InventoryAdjustment:
a) /home/{sftp-username}/netsuite/inventoryadjustment/csv
b) /home/{sftp-username}/netsuite/inventoryadjustment/archive
InventoryItem:
a) /home/{sftp-username}/netsuite/inventoryitem/csv/archive
Purchase Order:
a) /home/{sftp-username}/netsuite/purchaseorder/fulfillment/archive
b) /home/{sftp-username}/netsuite/purchaseorder/receipt/archive
c) /home/{sftp-username}/netsuite/purchaseorder/receipt/error
Sales Order:
a) /home/{sftp-username}/netsuite/salesorder/customerdeposit/archive
b) /home/{sftp-username}/netsuite/salesorder/export/archive
c) /home/{sftp-username}/netsuite/salesorder/import/fulfillment/archive
d) /home/{sftp-username}/netsuite/salesorder/import/fulfillment-nifi/archive
e) /home/{sftp-username}/netsuite/salesorder/import/orderidentification/archive
f) /home/{sftp-username}/netsuite/salesorder/import/orderitemattribute/archive
g) /home/{sftp-username}/netsuite/salesorder/update/archive
h) /home/{sftp-username}/netsuite/salesorder/invoice/error
i) /home/{sftp-username}/netsuite/salesorder/customerdeposit/error
j) /home/{sftp-username}/netsuite/salesorder/customerdeposit/archive
Transfer Order:
a) /home/{sftp-username}/netsuite/transferorder/fulfillment/archive
b) /home/{sftp-username}/netsuite/transferorder/fulfillment-nifi/archive
c) /home/{sftp-username}/netsuite/transferorder/receipt/archive
d) /home/{sftp-username}/netsuite/transferorder/receipt/error
Discount Item:
/home/{sftp-username}/netsuite/discountitem/delete/archive
/home/{sftp-username}/netsuite/discountitem/import/archive
Cash Sale:
/home/{sftp-username}/netsuite/cashsale/export/archive
Fulfilled Sales Orders:
/home/{sftp-username}/netsuite/fulfilledsalesorder/export/archive
/home/{sftp-username}/netsuite/fulfilledsalesorder/export/error
Ensure smooth order import processes by correctly mapping shipping methods between eCommerce platforms and NetSuite.
When syncing orders to NetSuite it's very important to have the correct shipping methods mapped. If shipping methods are not mapped correctly the order import process may fail.
Oftentimes a single method in NetSuite may be servicing multiple shipping methods from eCommerce. When the shipping methods are configured, eCommerce and HotWax are mapped 1:1 and the corresponding NetSuite shipping method is saved in the "Service Code" field of the shipping method.
Depending on the NetSuite order import configuration, the ‘service code’ field should include either the method name or ID.
Shipping method:
Carrier and Shipment Method:
Shopify and carrier shipment method mapping
Ensure seamless data integration by syncing historical customers between NetSuite and HotWax Commerce
Retailers that have been using NetSuite and Shopify prior to implementing HotWax Commerce already have a large database of customers in NetSuite. HotWax has a historical customer sync job that imports all customers from NetSuite along with their Shopify and NetSuite Internal IDs and saves them in HotWax. Now when a returning customer places an order on Shopify, HotWax will be able to link it to the existing customer based on their Shopify ID and then push their order to NetSuite using their existing NetSuite internal ID.
SuiteScript to generate a CSV of historical customers
SuiteScript to upload the historical customer CSV to an FTP location
SFTP location
Job in HotWax to import the list of historical customers
Ensure efficient order fulfillment with NetSuite by creating a dedicated facility group in the OMS.
If NetSuite will be used by any facilities for fulfillment, a NetSuite Fulfillment group must be created in the OMS. All facilities that will be using NetSuite for fulfillment should be added to this group during setup.
Facility Group Data
Why this group is important: After orders are allocated, HotWax pushes a brokered item feed to systems with items that they need to fulfill. If items of an order are allocated to a facility that uses NetSuite, then adding that facility to this group will indicate to HotWax that items brokered to these facilities need to have their allocation updated in NetSuite.
To learn more about how brokered items are synced with NetSuite, checkout the full integration documentation.
Efficiently manage promo codes for order discounts with HotWax Commerce and NetSuite integration.
If an order has a discount code applied to it, during order sync to NetSuite, HotWax checks if the applied code is available in NetSuite. If the code is available then the exact code is used and the value of the discount is shared as the "Rate".
In the event that the code is not available in NetSuite, HotWax will replace the code with a default discount code 'SHOPIFY DISCOUNT' along with the value of the discount in "Amount". For this failover to work the discount item must be created in NetSuite first.
Go to Lists > Accounting > Items > New
Select Item Type: Discount
Enter 'SHOPIFY DISCOUNT' in the Item Name and Display Name field
Enter 0.00 in the Rate field
Select Subsidiary
In the Accounting sub-tab
Select Account
Check the 'Apply before sales tax' checkbox
To check promo codes in NetSuite, HotWax syncs promo codes from NetSuite once a day.
Create Enumeration data before creating IntegrationTypeMapping
Schedule this SuiteScript to export current promo codes in NetSuite that need to be synced to HotWax
SFTP location
Job to save new promo codes
Schedule this SuiteScript to export removed promo codes in NetSuite that need to be synced to HotWax
SFTP location
Job to remove promo codes no longer active in NetSuite
Item level discounts have to be synced as a separate line item in the order using a "SHOPIFY ITEM DISCOUNT" item. The amount of the adjustment is added in the "Amount" field when preparing the CSV for NetSuite and the "Price Level" is always set to "Custom".
To learn more about how discounts are handled on orders, read the full NetSuite integration documentation.
For this sync to work, a blanket ‘discount item’ must be created in NetSuite. If you’re using Shopify this discount code is usually ‘Shopify Discount Item’
This ID of this product in NetSuite needs to be entered into the integration layer so that it can be sent to NetSuite during order sync.
Go to Lists > Accounting > Items > New
Select Item Type: Discount
Enter 'SHOPIFY DISCOUNT ITEM' in the Item Name and Display Name field
Enter 0.00 in the Rate field
Select Subsidiary
In the Accounting sub-tab
Select Account
Check the 'Apply before sales tax' checkbox
Create this data to map the generic Netsuite discount values in HotWax. This universal value will serve as a fallback when the discount code provided in the Shopify order JSON is not found in Netsuite.
Learn how to efficiently manage inventory resets between HotWax and NetSuite.
NetSuite is often the system of record for inventory at all locations. The OMS usually syncs a full inventory reset from the OMS once a day. This requires a scheduled export from NetSuite and an import job into the OMS be scheduled.
To learn more about the inventory sync integration with NetSuite read the full documentation
Generate inventory items from NetSuite
Place inventory items at SFTP
Import inventory into HotWax
Facilitate seamless order synchronization by configuring payment methods in HotWax Commerce and mapping them with eCommerce platforms and NetSuite.
Before order sync can happen, payment methods need to be set up in HotWax Commerce and then mapped with eCommerce and NetSuite. This needs to be setup in the integration layer so prepare a mapping table in a spreadsheet and share it with the integration setup team internally.
Example mapping:
HotWax ID | Netsuite Value |
---|
Ensure seamless synchronization of product data between HotWax and NetSuite by utilizing NetSuite's internal product IDs
Syncing the NetSuite internal ID for products from NetSuite ensures that subsequent product dependent syncs like order, transfer shipment, and cycle counts are always successful. Trying to reliably use a well known name of products like SKU or UPC, often leads to conflicts with customizations of the CSV import forms in NetSuite. To avoid having to handle these custom identification formats for each deployment, HotWax syncs NetSuite’s internal product ID.
To get NetSuite’s internal product ID, it requires a schedule suite script to export product ID
A schedule suite script will then put this export product IDs on the SFTP location for OMS to consume
To import product in OMS, a import job need to be configured in OMS with recommended frequency 1 hour
Ensure synchronization accuracy and financial reconciliation between HotWax and NetSuite through diligent auditing.
Reconciling order transactions between HotWax and NetSuite ensures that integrations are working as expected and financial reconciliations are accurate.
The process of auditing NetSuite and HotWax currently covers three key data points:
Order and order item sync
Order item cancellation status
Order grand total sync
Before comparing each data point, data needs to be extracted from systems in the expected formats.
A saved search in NetSuite, executed by a schedule SuiteScript, exports a file of all orders that entered the system from the beginning of the last day to the time of export.
The file should be exported at the end of the business day to ensure all orders are part of the reconciliation.
SFTP location
HotWax Commerce offers a function to export orders from the Find Sales Order page. Set these filters before exporting your data set:
Order and Order item status: Unselect all options to ensure all orders are part of the export Order Date: Open the custom date range selection option by clicking on the Select
button and in the From Date
field, select yesterday's date.
After filters are setup correctly, click the Export CSV
option and a file will be downloaded.
Once both files are downloaded, the next step is to upload them for auditing.
Access this sheet: https://docs.google.com/spreadsheets/d/1qpdBi_4ZRkpOxooxJYs7Wz3ai5O_8YgG6oMR_pvuM8M/edit?usp=sharing
Before proceeding to upload data, make a copy of this worksheet and move it to your project space. Make sure to rename it with the day the audit is being run.
Navigate to the NetSuite Last Day Orders
tab in the sheet.
Click on the File
drop down menu and then select Import
In the import wizard, select the Upload
tab and upload the NetSuite Order Data file
After the file is uploaded, a prompt will appear to select how to insert the uploaded file into the current work sheet
From the Import Location
drop down, select Replace Current Sheet
and click Import Data
without changing any other settings.
The NetSuite order records from your CSV should appear in the NetSuite Last Day Orders
tab.
Hint: If you accidentally uploaded to the wrong sheet, you can undo your actions like any other edit.
The steps to upload HotWax Commerce Data is largely the same as uploading the NetSuite order data.
Ensure that the HotWax Last Day Orders
tab is selected before beginning upload steps.
Follow the same upload steps as before, but this time select the HotWax file from your computer.
Now that data from both sources has been uploaded, the audit sheet will automatically generate a list of discrepencies.
Here are the most important sections to validate:
This section specifically shows orders that should have synced to NetSuite by now but have not. Check each order on this list and add comments of what issue prevented the sync.
Item cancelation in NetSuite happens through various flows from the OMS. Check this view to verify if cancelations in HotWax have synced over to NetSuite as "Closed" items.
EXT_SHOP_ECOM_GFTCRD | Gift Card |
EXT_SHOP_GFT_CARD | Gift Card |
EXT_SHOP_MANUAL | Shopify Payment |
EXT_SHOP_ DIRECT | Shopify Payment |
EXT_SHOP_CASH_ON_DEL | Shopify Payment |
EXT_SHOP_EXG_CRD | EXCHANGE CREDIT |
EXT_SHOP_AMZN_MP | Amazon Marketplace |
EXT_SHOP_AFTRPAY_NA | AfterPay |
EXT_SHOP_CARD | Shopify Payment |
EXT_SHOP_PAY_INSTALL | ShopPay |
Explore the process of approving orders seamlessly within HotWax Commerce.
Scheduled jobs in HotWax Commerce validates order items and marks them "Approved" in a multi-step process.
HotWax internally adds an order attribute, "NETSUITE_ORDER_EXPORTED", to these orders.
Schedule a job in the integration layer exports these orders into a CSV
SFTP file locations of orders where "NETSUITE_ORDER_EXPORTED" should be added.
Schedule the following Job from the Orders page in the Job Manager app to apply the order attributes to orders.
The 'NETSUITE_ORDER_EXPORTED' attribute has now been added to orders.
Schedule the job that checks for orders that have this attribute added to them and internally hands them off for approval in the OMS.
This job is also in the NetSuite integration layer so it cannot be modified from the Job Manager app.
SFTP locations where the file of validated orders is located
Schedule a job in HotWax which consumes this file and approves orders in the file.
Orders have now been approved and will be brokered for fulfillment.
Discover the process of handling Point of Sale (POS) cash sales between HotWax and NetSuite.
The POS orders are already in “Completed” status in OMS. A feed file for these orders is prepared and kept on SFTP. SFTP path: /home/{sftpUserName}/netsuite/cashsale/export/archive “HC_SC_ImportCashSale” Suitescript will download the CSV file from SFTP and create sales records in NetSuite. To check whether the CSV file is successfully imported: Customisation>Import/Export>View CSV records “HC_MR_ExportedCashSalesCSV” will export the CSV file with NetSuite internal id value and put it on the SFTP. “Order Identification” job in OMS will consume the CSV file from SFTP and make Order Identification records in OMS.
A feed file for these orders is prepared and kept on SFTP. SFTP path:
Suitescript to import completed Cash Sale records into NetSuite.
HC_SC_ImportCashSale
To check whether the CSV file is successfully imported in NetSuite
Customisation > Import/Export > View CSV records
SuiteScript to export the NetSuite Internal ID of completed Cash Sales
HC_MR_ExportedCashSalesCSV
Enable this job in the Job Manager to import the Order Identification records into the OMS.
Order Identification
Discover the seamless synchronization of order IDs between HotWax Commerce and NetSuite.
Before an order can be processed further, HotWax ensures sucessful creation in NetSuite by syncing order ID and order item IDs.
Schedule a job in the HotWax Commerce integration layer to create a file of orders in HotWax that have not yet been sent to Netsuite.
SFTP Location for exported 'Created' orders with verified customers
Schedule the following SuiteScript in NetSuite to consume the file of new orders from HotWax.
Now that the order is created in NetSuite, the following jobs will sync their identifications back to HotWax for a full sync.
Schedule this script to export order item IDs from NetSuite to enable order updates during allocation.
Enable this Job from the Orders page in the Job Manager app.
Schedule this SuiteScript in NetSuite to export NetSuite internal order IDs of recently created orders that have not been synced back to HotWax.
Enable this Job from the Orders page in the Job Manager app to consume the file generated by NetSuite.
Explore the synchronization process of customer data between HotWax Commerce and NetSuite.
If the order contains a new customer not present in Netsuite, the system won't allow the order to be pushed. Therefore, it's vital to synchronize customer data from HotWax Commerce to Netsuite before order creation.
If HotWax is being deployed in an environment where NetSuite already has a historical record of customers from Shopify and their Shopify internal ID, these need to synced into the OMS before orders can be synced.
Duplicate customers will be created in NetSuite and HotWax if this sync is not completed before order import.
SuiteScript to run manually to export all existing customers in NetSuite and their Shopify ID
Generate CSV
Move to SFTP
SFTP Locations
Job to import historical customers into HotWax with both a NetSuite and Shopify identifcation to avoid duplicate customers.
Scheduled job in HotWax Commerce generates a CSV file comprising customers who have not been synchronized to Netsuite.
This job is scheduled in the integration layer and not executed natively in the OMS.
SFTP Location
Schedule the following SuiteScript to export a feed of recently created customers from NetSuite
Schedule this SuiteScript to export a file of recently created customers in NetSuite.
Verify that the generated file is placed at this SFTP Location
Enable this job in HotWax Commerce to consume the file generated by HotWax
Explore Allocation & Fulfillment processes: synchronize item allocation with NetSuite for efficient warehouse management.
If the facility where an item is allocated uses NetSuite for fulfillment, usually a warehouse, then the OMS syncs those items' allocation with NetSuite.
It's important to remember that if items are not allocated to a "NetSuite Facility" their allocation is not synced to NetSuite until after fulfillment is complete.
Schedule a job in the HotWax Commerce integration layer to generate a fulfilled order item feed for NetSuite.
SFTP Location
Schedule a SuiteScript in Netsuite to consume the fulfilled order feed from HotWax.
SuiteScript to import NetSuite fulfillment item allocations
Schedule a SuiteScript for exporting fulfilled order items from NetSuite.
Enable a transformation job in the HotWax integration layer to convert the feed into the HotWax fulfilled order item format.
Schedule job to import fulfilled order items into HotWax
NetSuite fulfilled order items are now completed in Hotwax
Enable jobs in the HotWax Integration layer to export a feed of fulfilled order items from HotWax.
Check fulfilled feed at SFTP location
Schedule SuiteScript in NetSuite to consume fulfillment from HotWax
HotWax fulfilled order items are now completed in NetSuite
Explore the seamless synchronization of Purchase Orders between NetSuite's ERP system and HotWax Commerce, optimizing inventory management.
When a Purchase Order is raised in Netsuite's ERP system, it needs to be seamlessly synchronized with HotWax Commerce, where the store associates employ an intuitive Receiving App by HotWax Commerce for the efficient receipt of inventory.
Schedule SuiteScripts to export purchase orders
SFTP location
Schedule the import purchase order job from the pre-order page in the Job Manager application
Schedule a job in the integration layer to export received POs from the OMS and place them at an SFTP location for NetSuite to import
Check SFTP locations for received purchase orders
Schedule the SuiteScript in NetSuite to consume this PO receipt feed and save it in NetSuite.
Discover the POS Cash Sale Exp Failed Report, an essential tool for tracking synchronization failures in Point of Sale (POS) cash sales.
The POS Cash Sale Exp Failed Report is a tool for tracking synchronization failures related to Point of Sale (POS) cash sales. This report is instrumental in identifying instances where the synchronization process encountered issues, allowing for a proactive approach to address and resolve these failures. By leveraging this report, organizations can ensure the accuracy and completeness of their POS cash sale data, contributing to a more reliable and efficient sales reporting process.
In the context of NetSuite, the POS Cash Sale Exp Failed Report focuses on tracking synchronization failures specifically for POS cash sales exported to NetSuite. By pinpointing instances where synchronization has failed, this report helps in promptly identifying and addressing any discrepancies in POS cash sales data within NetSuite. This level of transparency and quick response is crucial for maintaining accurate financial records and ensuring that NetSuite reflects the most up-to-date information from POS transactions.
Field | Description |
---|---|
The Missing Order Attribute Report is a vital tool for tracking order synchronization. By monitoring the presence of essential attributes, it identifies orders lacking crucial information, ensuring a seamless synchronization process. This report enables proactive resolution of discrepancies, preventing any orders from failing to synchronize effectively.
Field | Description |
---|---|
In the NetSuite context, the report ensures accurate order synchronization by verifying essential attributes. By highlighting orders lacking these attributes, it prevents synchronization issues, providing assurance that orders seamlessly integrate with NetSuite.
Field | Description |
---|---|
Learn how to configure and map payment methods in HotWax Commerce for seamless synchronization with eCommerce platforms and NetSuite.
Before initiating order sync, it is crucial to configure payment methods in HotWax Commerce and establish mappings with both eCommerce and NetSuite.
HotWax integration layer maps payment methods in HotWax to the corresponding payment methods in the eCommerce platform to create customer payments and streamline order fulfillment.
Mapping payment methods is especially crucial in case of COD orders as it helps fulfillment teams identify orders with pending payments and initiate payment collection when fulfilling them. Retailers also leverage HotWax for reporting, so accurate data aggregation of orders and their payment methods helps them derive insights into payment trends and customer behavior.
When orders are synced from HotWax to NetSuite, it's critical to communicate the payment method information to NetSuite so that customer deposits can be created. To address this, the HotWax integration layer also maps payment methods in eCommerce and HotWax to the corresponding methods in NetSuite. When orders are synced to NetSuite, the integration layer checks saved mappings and accurately applies the defined payment method in the order feed.
You can simply create a new payment method mapping or edit an existing one by navigating to the NetSuite Payment Method
section on the NetSuite Integration page.
In the event a payment method in eCommerce and HotWax is not mapped to a payment method in NetSuite, the integration layer will fall back to a DEFAULT
payment method. Currently, this fallback payment method is mapped to Shopify Payment
in NetSuite.
Here's how you can
HotWax ID | NetSuite Value |
---|
Dive into the seamless synchronization of Transfer Orders between NetSuite and HotWax for streamlined inventory management.
Follow these steps to enable the Transfer Order sync between NetSuite and HotWax for receiving in the HotWax Receiving app. To learn more about this integration, read the full NetSuite integration.
Schedule the Export Transfer Fulfilled Transfer Order SuiteScript in NetSuite
Verify files are being placed onto this SFTP
When fulfilled transfer orders are imported from NetSuite, they also require inventory deduction from the source location. This extra deduction is handled in the HotWax integration layer.
Schedule a job in the HotWax integration layer to consume this file and create a file for inventory deductions at the origin location of the fulfilled Transfer Order and also move the original file to an SFTP location for the OMS to consume
Inventory deduction from origin file SFTP location
Inbound shipment at destination for receiving file SFTP location
Schedule the import job for this file from the Inventory page in the Job Manager application
Transfer orders are now available to receive in the HotWax Receiving application.
Schedule a job in the HotWax integration layer to export a feed of received Transfer Orders to an SFTP location to be consumed by a SuiteScript in NetSuite
Schedule a report in Tathya for over and under received items
Discover the seamless integration between HotWax Commerce and NetSuite through configurable mappings.
HotWax Commerce integration layer stores a structured repository of integration mappings between HotWax and NetSuite, including payment methods, shipping methods, promo codes, and price levels.
Users need to periodically amend mappings to ensure that the integration between HotWax and NetSuite remains aligned with the current operational landscape. Because of these semi-frequent adjustments, they require access to updating these mappings themselves.
The dedicated NetSuite Integration page within the OMS lets you manage integration mappings between HotWax and NetSuite directly from the UI without relying on external support.
The out-of-the-box integration mappings that can be configured are:
Here’s how you can configure these mappings between HotWax Commerce and NetSuite:
If you cannot find the NetSuite Integration page, navigate to the General Settings page, and at the top, click on Load NetSuite Data
to initiate the upload of NetSuite data.
Navigate to Settings and select the option NetSuite Integration
from the menu.
Locate the Specific Mapping that you want to configure.
Click on the Add
and fill-in the mandatory details mentioned in the input fields.
Field | Description |
---|
Confirm establishing the new mapping by clicking on the Add
.
The integration layer maps the original entities in HotWax Commerce to their corresponding representations in NetSuite. This mapping is established through a key-value pair, where the key denotes the original entity, and the value signifies its counterpart in NetSuite.
Explore how discount codes are managed and synchronized between HotWax Commerce and NetSuite for seamless order processing.
On a daily basis, HotWax Commerce syncs discount codes from NetSuite. The HotWax integration layer maps discount codes in HotWax to their corresponding counterparts in NetSuite.
When an order has a discount code, during order sync to NetSuite, HotWax validates if the code exists in NetSuite. If the code is available, then the exact code is used, and the value of the discount is shared as the Rate
with amount 0.00 because NetSuite has the defined workflows for its discount codes.
Oftentimes, eCommerce teams generate custom discount codes that are not pre-existing in NetSuite. These codes may serve specific purposes, such as one-time use for friends or family members, or may be temporarily crafted to accommodate a particular customer's request.
In the event HotWax identifies that the code provided by eCommerce is not available in NetSuite, the integration layer will fall back to a DEFAULT
discount count and will add the discounted amount in the Amount
feed.
Item level discounts are synced as a separate line item in the order. When HotWax identifies the order has an item level discount, the integration layer adds the discounted amount added in the Amount
field.
You can simply add a new discount code mapping or modify an existing one by navigating to the NetSuite Discount Codes
section on the NetSuite Integration page.
Here's how you can
ORDER_ID
The ID of the cash sale order in HotWax Commerce
EXTERNAL_ID
The ID of the cash sale order in external systems
SALES_CHANNEL
The channel through which the sale was made
LOCATION
The location where the cash sale order was placed
DATE
The date of the cash sale
CUSTOMER
The customer associated with the cash sale order
SUBSIDIARY
The subsidiary information for the cash sale
ORDER_NAME
The identifier for the order
ATTRIBUTE
The essential order attributes. For example, PRODUCT_VERIFIED
indicates whether the product has been verified
STATUS
The status if the order has essential attributes or not
ORDER_NAME
The identifier for the order
ATTRIBUTE
The essential order attribute. For example, PRODUCT_VERIFIED
indicates whether the product has been verified
NETSUITE_ORDER_EXPORTED
Status if the order has been exported to NetSuite or not
NETSUITE_CUSTOMER_ID
The customer identifier in NetSuite
EXT_SHOP_ECOM_GFTCRD | Gift Card |
EXT_SHOP_CASH_ON_DEL | Shopify Payment |
Integration Mapping Key | The mapping ID present in HotWax Commerce. |
Integration Mapping Value | Corresponding value present in NetSuite. |
Description | Briefly describe the method. |
Explore the significance of facility groups in HotWax Commerce for efficient order routing and fulfillment.
HotWax Commerce routes orders to optimal fulfillment locations. To facilitate order routing, it’s imperative to configure all facilities, including both stores and warehouses, within HotWax Commerce.
You can easily add facilities existing in your network using the HotWax Commerce Facility App. To learn how you can add new facilities in HotWax Commerce, please refer to the .
Once all the facilities have been set up, those facilities that will be using NetSuite for fulfillment should be added to the NetSuite Fulfillment group.
When HotWax routes orders, if an item is brokered to a facility within this group, it indicates that OMS syncs allocation details for these items with NetSuite.
Access NetSuite Integration Page by Navigating to Settings > NetSuite Integration.
Locate and access the Facility Groups
section.
In the Facility
field, type the facility name directly within the UI.
Choose the appropriate facility from the dropdown suggestions.
Confirm the addition by clicking on Add
.
By making these associations, the integration layer ensures that when an order is brokered to a facility within the NetSuite Fulfillment group, the allocation details are updated in NetSuite.
You can simply click on thebin
icon to remove a facility from the NetSuite Fulfillment Group.
Facility Group ID | Facility |
---|
Here's a guide to
Central Warehouse | NetSuite Fulfillment |
East Coast Warehouse | NetSuite Fulfillment |
Discover how price levels facilitate the management of product pricing variations based on factors like sales channels and events.
Price levels are used to manage multiple prices for a product. This is especially useful when a product is priced differently based on conditions like sales channel, events, or employee-specific pricing. NetSuite provides flexibility to set up different price levels for each item.
To sync orders from HotWax Commerce to NetSuite, you need to set the price level in HotWax that should be sent to NetSuite.
During order sync to NetSuite, the integration layer checks price level mapping in HotWax and applies the defined price level in the Price
feed. This configuration lets you send the price level to NetSuite instead of actual prices. NetSuite identifies item prices based on the assigned price level.
The price level to be sent into NetSuite is set to Base Price (MSRP)
by default. Because there can be multiple price levels in NetSuite, if you want to use a different price level at any point, you can change the value of this setting.
For example, if NetSuite has a Price Level named Online Price
adjusting the value of PRICE_LEVEL_NETSUITE ID from Base Price (MSRP)
to Online Price
ensures the integration layer syncs orders with this specific price level. NetSuite then applies the actual price based on the configurations set for the Online Price
level.
You can simply add a new price level mapping or modify an existing one by navigating to the NetSuite Price Level
section on the NetSuite Integration page.
Here's a breakdown of how to create mappings for price levels
Discover this troubleshooting guide for the error logs.
All SuiteScript error records are always placed in a “failure” subdirectory in the designated directory of the sync. Check this folder any time SuiteScript failure logs need to be checked for any sync.
Learn how failure notifications work in HotWax SuiteScripts automations, ensuring timely alerts for troubleshooting errors and exceptions.
All errors in HotWax SuiteScripts automations trigger an email notification to a designated mailing list for troubleshooting. The only time an error notification is not sent is for files that the CSV import module doesn’t process because of a data mapping error. If a CSV import fails before it begins processing, NetSuite will not trigger a notification email so these files have to be checked manually.
Here is a list of flows where CSV imports are used:
Customer Import
Order Creation
Inventory Adjustment (Cycle Count)
Learn more about how to troubleshoot an unprocessed CSV file here.
Missing Notifications
If SuiteScripts are failing, but no notifications are received, check NetSuite configurations for email notifications to the Integration mailing list.
Troubleshoot failed SuiteScript executions for effective resolution and system optimization.
If an export SuiteScript is reported in an error notification indicating a connection timeout to SFTP, this may be for two reasons.
Steps to Troubleshoot:
Review the custom NetSuite entity setup by the SDF bundle for SFTP configurations. Ensure that the default directory is set up correctly for your project. It should look something like this: /home/{client-name}sftp/netsuite/
.
If the connection issue still persists, try logging into the SFTP directly with credentials provided by HotWax. If you are unable to connect to the SFTP directly, this most likely indicates that the OMS instance is experiencing availability issues. Connect with the HotWax Support team for this.
Time-based cursor
HotWax Integration SuiteScripts maintain a time-based cursor to track the last exported date and time to ensure all records are synced to HotWax. In the event that a SuiteScript fails to execute, the last sync time of the SuiteScript is not updated. This ensures that the next time the script runs successfully it will sync all records introduced since the last successful sync with HotWax and no data loss.
At any point if you wish to export a certain set of records on demand, the scheduled scripts can also be run on demand, but to fully complete the sync, it’s important to also run the corresponding import job in HotWax or else the sync will not be complete.
Here are the flows which use time-based cursor when exporting data from NetSuite:
Customer
Sales orders
Inventory
Exported flag
Certain SuiteScripts maintain an "exported" flag to ensure all records are synced to HotWax. These scripts apply a checkmark on the exported flag of each record exported from NetSuite and deposited at an SFTP location. If a SuiteScript fails to deposit the file due to reasons like connection timeout with the SFTP, the generated file is automatically relocated to the NetSuite File Cabinet. Subsequently, another SuiteScript is triggered to read these records and uncheck the exported flag in NetSuite for those records that couldn't be exported. This process ensures that any flagged export from NetSuite can be replayed by unchecking the exported flag on the record.
Here are the flows which use exported flag when exporting data from NetSuite:
Sales order fulfillment
Created transfer orders (Pending fulfillment status in NetSuite)
Transfer order item fulfillment
Inventory transfers
Whenever an N/Record based import fails, a CSV file of the failed records is sent in a mail notification. This file includes the exact records where errors occurred along with the error reasons.
To retry the failed records, fix the errors and place the file back in the original SFTP location for the SuiteScript to reprocess in the next scheduled import. If you want to process the file right away, execute the script manually from NetSuite after uploading the corrected file to the SFTP.
CSV imports in NetSuite are broken down into two subprocesses, the first is validating a file for import and then actually processing the file for import. If NetSuite is unable to validate a file for import, it will discard the file and log it as an error file in its CSV import module interface. Unfortunately, there is no alert or notification system in NetSuite that can be leveraged to track these occurrences.
NetSuite will not attempt to import a CSV if it is missing a required field or even if a record is missing a required value. A CSV will be considered valid even if the values of a record are incorrect.
Example
The promo code internal ID provided by HotWax during order creation was no longer active in NetSuite.
Netsuite will still consider this file valid, but it’ll create an error log CSV for the record in the corresponding FTP location. An alert will also be sent for this failed record.
Here are the imports which use NetSuite’s CSV import module:
Customer Import
Order Creation
Inventory Adjustment (Cycle Count)
Depending on the type of sync time based sync or attribute-based sync, the troubleshooting steps may vary.
Attribute-based sync
Attribute-based flows ensure that a sync is automatically retried until an attribute indicating a successful sync is added in HotWax. When an error occurs in these kinds of syncs, fixing data mappings in HotWax can allow you to successfully complete a sync with NetSuite even after a failure.
Here are the flows which use an attribute-based sync when exporting data to NetSuite:
Customer Sync
Order Sync
Time-based sync
All other synchronizations with NetSuite use a time-based cursor to track which records have been synced with NetSuite. In this case, if certain records fail to import into NetSuite, they need to be manually corrected and retried to complete the sync.
Currently, there is only one flow that is time-based and uses the CSV import module in NetSuite:
Inventory adjustments from Cycle Counts
Explore the intricacies of shipping methods in eCommerce and their synchronization with HotWax Commerce and NetSuite.
Shipping methods in eCommerce are mapped in HotWax Commerce, responsible for order and fulfillment. When orders are synced from HotWax Commerce to NetSuite, it's essential to communicate the shipping method information to NetSuite. However, NetSuite may have a single method servicing multiple eCommerce shipping methods.
To address this, the HotWax integration layer maps the original carrier and shipment method to the corresponding method in NetSuite. During order syncing to NetSuite, the integration layer checks saved mappings, ensuring accurate correspondence. This shipping method mapping guarantees alignment between selected eCommerce methods and their counterparts in both HotWax Commerce and NetSuite, facilitating order processing.
Shipping methods that are supported by the retailer need to be created in HotWax Commerce to ensure that the shipping information is sent to the shipping carrier. Shipping methods can be created by following these steps:
Log in to your user instance and navigate to Settings > General Settings.
Locate the shipment method section and click on the Add
, which will open up a form.
Fill in the required fields:
Shipment Method Type ID: The name used to identify the shipping method within HotWax Commerce.
Description: A brief explanation of the shipping method's intended purpose.
After entering the necessary details, click on the Add
to save the shipping method in HotWax Commerce.
Once shipping methods are created, they need to be mapped with NetSuite to provide accurate information for order processing and fulfillment.
You can simply add a new shipping method mapping or modify an existing one by navigating to the NetSuite Shipping Method
section on the NetSuite Integration page.
Here's a breakdown of how to create mappings for shipping method
HotWax Commerce integrates with platforms like Shopify and NetSuite to manage orders, inventory, and customer data. Occasionally, synchronization issues may arise, causing data discrepancies and operational inefficiencies. This document outlines common scenarios for these issues, with detailed steps to identify, diagnose, and resolve them.
If orders do not have all valid order attributes, they remain in “created” status and cannot sync with NetSuite.
Log in to HotWax Commerce.
Navigate to the order view page and click ExternalID
. This will redirect you to the Shopify admin page.
On the Shopify order page, check the right side in the Tag section. Verify if the order has the necessary Metafield.
Log in to HotWax Commerce.
Go to the order view page
Check if the order has the Metafield in the order attribute section.
Manually add the Metafield to the OMS.
Go to the order view page in OMS.
Locate the order attribute section.
Add the missing Metafield.
Identify the cause of the missing Metafield.
Check Shopify settings to ensure Metafields are correctly applied to orders.
Verify if there are any issues with the order that prevents Metafield.
Additional Resources: Refer to the order Attribute is Missing Troubleshooting document.
Note: Ensure the correct spelling when manually adding the Metafield in the OMS.
To successfully create a sales order in NetSuite, having the customer information pre-existing within NetSuite's database is a prerequisite. If the order contains a new customer who is not present in NetSuite, the system won't allow the order to be pushed.
Log in to HotWax Commerce.
Navigate to the order view page.
Click on the customer name in the "Bill to" section.
You will be redirected to the customer page.
Check the identification section for the NetSuite Customer ID.
Check the customer feed for the order.
Navigate to the SFTP customer feed in NetSuite.
Verify if the order is present in the feed.
If the order is present in the feed, there may be an internal issue with NetSuite.
Contact NetSuite support for assistance.
If the customer's name or email ID contains special characters, it does not sync with NetSuite. Therefore, we need to remove the special characters. Once the name or email is updated, the next order feed will sync with the order in NetSuite.
Log in to HotWax Commerce.
Navigate to the order view page.
In the "Bill to" section, verify the customer's name contains any special characters.
Click on the customer name. Verify if the customer's email includes any special characters.
Notify the client to adjust the customer name.
Provide instructions to the client on how to update the name.
The updated name will be included in the next customer feed.
If an order doesn't have a payment preference, it cannot be synced with NetSuite. We need to check if the payment preference for that order is missing in HotWax but present in Shopify, or if the payment preference is missing in both Shopify and HotWax.
Log in to HotWax Commerce.
Navigate to the order view page
In the “Payment Terms and Preferences” section, verify if preferences are set. Confirm if the payment information is available in Shopify by checking the Order JSON data imported
in OMS. you can verify this on the Shopify order MDM
Log in to HotWax Commerce.
Navigate to the order view page and click "ExternalID." This will redirect you to the Shopify admin page.
Append /transactions.json to the order URL.
Check if the Transaction is null.
Check the order in Shopify.
Append /transactions.json
to the order URL.
Verify if the transaction data is present or identify any issues.
Check if the payment method is not set in Hotwax.
After the client makes the necessary changes, run the Import Order Update from Shopify
job to sync the data.
Alternatively, you can manually add the payment preferences by clicking on the + “Payment Terms and Preferences” section.
If the Payment Details are Not Set in both Hotwax and Shopify.
Inform the client about the issue with the payment preferences.
After the client makes the necessary changes, run the Import Order Update from Shopify
job to sync the data.