Proposal Summary
This proposal summarizes the solution for implementing the integration between NetSuite and Footprint to integrate the NetSuite orders with Crane world. Whenever a new sales order is created in NetSuite and approved, we will create the same order in footprint and when the shipment of the order is taken place in Crane, we will create corresponding item fulfilment in NetSuite. Similarly, for keeping the item stock sync between NetSuite and Crane world, we will perform inbound order sync (Purchase order sync).
Requirement
The Corp Design wants to integrate their sales orders with the Crane world, which is a warehouse management system to regulate their warehouse activities.
Deliverables
We will develop a functionality to automatically create the NetSuite created orders in Footprint. Also, if purchase order is created for items in NetSuite, this will be created as inbound order in footprint, also if inventory adjustment is performed for items in NetSuite, this will also be recorded as an inbound order in Footprint.
All the existing open sales orders in status ‘Pending Fulfillment’ and purchase orders in ‘Pending Receipt’ will also be synced with Footprint.
Also, ‘Material import’ will also be performed from NetSuite to footprint. When a new item is created in NetSuite, this will be automatically created in footprint.
Outbound order (Sales order) Sync:
- Whenever a new sales order is created in NetSuite and approved, we will create an outbound order in Crane world corresponding to this NetSuite sales order.
- The outbound order sync from NetSuite to Footprint will be a real time sync.
- Outbound order will be created only for the orders in status “Pending Fulfilment”.
- The sync works in such a way that, our script will create an EDI file containing the details of the NetSuite order and this will be uploaded to a folder in Corps SFTP server. The Crane team will download this file from their end and create the outbound order in Footprint.
- Order creation, update, close and delete are considered in the sync.
- When an order is created in NetSuite, a corresponding outbound order is generated in Footprint.
- If an order that has already been synchronized with Footprint is updated in NetSuite, the same update is reflected in the Footprint order.
- Updates to field values that are synchronized with the Footprint order will only affect the Footprint record. (The fields considered in the synchronization process are listed below.)
- To update an order in Footprint, we use a “replace” operation. This means we must first cancel the order in Footprint and then replace it with the updated field values.
- Updates made to orders in the “Pending Fulfillment” status are the only ones considered for synchronization. This is because, in order to update an order in Footprint, it must first be cancelled and then replaced, as mentioned in the previous point. Cancelling a partially fulfilled order in Footprint is impractical.
- According to the suggestion from the Crane World team, if there are any updates required for a partially fulfilled order, the Corp Design team should coordinate and communicate with the Crane World team to make these updates in the Footprint order.
- When an order is deleted or closed in NetSuite, the corresponding outbound order in Footprint will be automatically cancelled.
- In NetSuite, we are able to give line level location to each item in the sales order. But in footprint, this is not possible. So, while creating outbound order for a NetSuite sales order, we will group the items in sales order based on the location (Hialeah Garden / Irving Dallas) and create 2 different outbound orders;
- one with project look up code Corp Design-Mia which includes items in location Hialeah Gardens and another with project lookup code Corp Design-DFW that includes items in location Irving Dallas
- Field mapping between the orders created from NetSuite to footprint:
| Field Name in Crane World | Field Name in NetSuite | Internal id in NetSuite |
| ProjectLookupCode | Location: Hialeah Gardens/Irving Dallas | location |
| OrderLookupCode | Document number: ORDER# | tranid |
| Customer Address: | ||
| AccountName | COMPANY ID | entityid |
| AccountLookupCode | COMPANY ID | entityid |
| ContactFirstName | COMPANY NAME | companyname |
| ContactPrimaryEmail | ||
| ContactPrimaryTelephone | PHONE | phone |
| AddressLine1 | ADDRESS 1 | addr1 |
| AddressCity | CITY | city |
| AddressState | STATE | state |
| AddressPostalCode | ZIP | zip |
| AddressCountry | COUNTRY | country |
| Order lines: | ||
| LineNumber | line | line |
| ShipmentLookupCode | Document number: ORDER# | tranid |
| MaterialLookupCode | ITEM NAME/NUMBER | itemid |
| MaterialAmount | QUANTITY | quantity |
| MaterialPackagingName | UNIT | weightunit |
| Shipping Date: | ||
| Type: StartShip | SHIP DATE | shipdate |
Existing Sales order Sync:
All the existing open sales orders in the ‘Pending fulfillment’ status will be considered for syncing from NetSuite to Footprint.
This will be a one-time process; all such existing orders will be fetched at once from NetSuite, and an EDI file will be created for each order and uploaded one by one to the SFTP folder. The Crane team will retrieve these files from SFTP and create outbound orders in Footprint.
Limitations in Outbound order integration:
- It takes a delay of about 10-15 minutes for an outbound order to create in Footprint. If any error is occurred in the process and the outbound order creation got failed, the system autogenerate an error email and only based on this email we can confirm if the order is created or not in crane.
- That is, if we get an error email for the created outbound order, this means the order creation is not successful in crane and then our script will identify the error from the received error email and solve the error occurred and then re perform the order creation.
- If a sales order in NetSuite contains items other than inventory item, kit item, and group item, we will not be mapping those items to the outbound order in Crane since we are not syncing other items in Crane other than these 2 item types. For the group items in the order, the group components (Inventory and kit) will be synced as individual items in Footprint order.
Pick, Pack & Ship Confirmation:
- When an order which is synced to Footprint is picked, packed or shipped from footprint, the Crane will let us know these ‘pick’, ‘pack’ and ‘ship’ triggers separately with an EDI file uploaded in to the SFTP folder from their end.
- To check if the order is picked, packed or shipped in footprint, we will deploy a schedule script and at regular intervals the script will check the SFTP folder if any new files have been uploaded by footprint. If there is, our script will fetch this file from SFTP folder and create ‘Item fulfillment’ in respective statuses for the corresponding order in NetSuite.
- We will identify the order to be fulfilled using the document number of Sales order in the EDI file that footprint uploaded.
- When an order in footprint is picked, an EDI file will be uploaded from footprint letting us know the ‘Pick’ trigger, and this file will be downloaded by NetSuite and an item fulfillment will be created for the corresponding order in NetSuite with ‘Picked’ status.
- Similarly, if the order is ‘Packed’ or ‘Shipped’ from footprint, we can fetch the EDI files from the SFTP folder and will do the necessary action in NetSuite automatically.
- The pallet informations also will be added by the Crane World and sent along with this EDI File.
- This is a scheduled functionality from NetSuite and it’s flow is from Footprint to NetSuite only. Every 15 minutes, our script will execute and fetch the file from SFTP folder if there is any.
- In the EDI file we receive for the pick/pack/ship milestones, it lists the items picked/packed/shipped with order line and quantity picked/packed/shipped. Using this information, we will create item fulfilment for these items with their picked/packed/shipped quantity for corresponding sales order in NetSuite.
- If there are multiple shipments in Crane (partial shipment), then we will create multiple fulfilments in NetSuite as well.
- In the Footptint uploaded EDI file, if the tracking number is entered, this tracking number also will be set in the Netsuite IF.
- The Crane World team sends the pallet inforfation via this EDI file tansfer and our script will enter these informations in to respective Item fulfillment records. The email automations currently in place will work as intended.
- When the IF record is updated from NetSuite, this update will not be reflected on the order in Footprint as the sync is only from Footprint to NetSuite.
Inbound order (Purchase order) Sync:
- When inventory added to items synced with Footprint, in order to keep the stock level sync between NetSuite and Crane we need to perform inbound order creation.
- So, whenever a purchase order is created in NetSuite or inventory adjustment is performed, an inbound order corresponding to this will be created in Crane world.
- We will develop a real time functionality that develops an EDI file as per Crane Worlds EDI integration documentation when a purchase order or an inventory adjustment is created in NetSuite and upload this file to a particular folder in Corp Designs SFTP server.
- The Crane world can download this file from SFTP folder and create the inbound order in footprint.
- Inbound order will be created for only purchase orders in status “Pending Receipt”.
- If the inventory stock of an item is increased with inventory adjustment, we need to update this increase in inventory stock of this item in Footprint too. For this, we need to create an inbound order in Footprint.
- For creating an inbound order in Footprint, a vendor name is mandatory. But for an inventory adjustment in NetSuite, there is no vendor. So when creating the EDI file for inbound order creation in Footprint for an inventory adjustment done in NetSuite, the vendor name will be ‘Corp Design’.
- The inbound order sync from NetSuite to Footprint will be a real time sync and it’s flow is from NetSuite to Footprint.
- The sync works in such a way that, our script will create an EDI file containing the details of the NetSuite order and this will be uploaded to a folder in Corps SFTP server. The Crane team will download this file from their end and create the inbound order in Footprint.
- Order creation, update, close and delete are considered in the sync.
- When a purchase order is created in NetSuite, a corresponding inbound order is generated in Footprint.
- If an order that has already been synchronized with Footprint is updated in NetSuite, the same update is reflected in the Footprint order.
- Updates to field values that are synchronized with the Footprint order will only affect the Footprint record. (The fields considered in the synchronization process are listed below.)
- To update an order in Footprint, we use a “replace” operation. This means we must first cancel the order in Footprint and then replace it with the updated field values.
- Updates made to a purchase orders in the “Pending Receipt” status are the only ones considered for synchronization. This is because, in order to update an order in Footprint, it must first be cancelled and then replaced, as mentioned in the previous point. Cancelling a partially received inbound order in Footprint is impractical.
- According to the suggestion from the Crane World team, if there are any updates required for a partially received order, the Corp Design team should coordinate and communicate with the Crane World team to make these updates in the Footprint order.
- When an order is deleted or closed in NetSuite, the corresponding inbound order in Footprint will be automatically cancelled.
- When an inventory adjustment record, which is synced with Footprint as an inbound order, is updated by adding or removing item lines, the inbound order will initially be closed and then replaced with the updates made in the inventory adjustment.
- Field mapping between the orders created from NetSuite to footprint:
| Field Name in Crane World | Field Name in NetSuite | Internal id in NetSuite |
| ProjectLookupCode | Location: Hialeah Gardens/Irving Dallas | location |
| OrderLookupCode | Document number: ORDER# | tranid |
| Vendor Address: | ||
| AccountName | VENDOR ID | entityid |
| AccountLookupCode | VENDOR ID | entityid |
| ContactFirstName | COMPANY NAME | companyname |
| ContactPrimaryEmail | ||
| ContactPrimaryTelephone | PHONE | phone |
| AddressLine1 | ADDRESS 1 | addr1 |
| AddressCity | CITY | city |
| AddressState | STATE | state |
| AddressPostalCode | ZIP | zip |
| AddressCountry | COUNTRY | country |
| Order lines: | ||
| LineNumber | line | line |
| ShipmentLookupCode | Document number: ORDER# | tranid |
| MaterialLookupCode | ITEM NAME/NUMBER | itemid |
| MaterialAmount | QUANTITY | quantity |
| MaterialPackagingName | UNIT | weightunit |
| Shipping Date: | ||
| Type: Expected | RECEIVE BY DATE | duedate |
Existing Purchase order Sync:
All the existing open purchase orders in the ‘Pending Receipt’ status will be considered for syncing from NetSuite to Footprint.
This will be a one-time process; all such existing orders will be fetched at once from NetSuite, and an EDI file will be created for each order and uploaded one by one to the SFTP folder. The Crane team will retrieve these files from SFTP and create inbound orders in Footprint.
Handling Master Purchase Order Creation:
- The Corp Design create a master purchase order in NetSuite, and subdivide the master PO to smaller purchase orders based on loading per container.
- We will create inbound orders for these smaller PO’s only, not for the master PO. We will create a custom checkbox field named “Is Master PO” in the purchase order record so that if the checkbox is checked while master PO creation, then this master PO will not be considered by the script for inbound order creation in footprint.
Limitations in Inbound order integration:
- It takes a delay of about 10-15 minutes for an inbound order to create in Footprint. If any error is occurred in the process and the inbound order creation got failed, the system autogenerate an error email and only based on this email we can confirm if the order is created or not in Footprint.
- That is, if we get an error email from footprint on an inbound order we sent to Footprint, this means the order creation is not successful in footprint and then our script will identify the error from the received error email and solve the error occurred and then re perform the order creation.
- If a purchase order in NetSuite contains items other than inventory item, kit item, and group item, we will not be mapping those items to the inbound order in Crane since we are not syncing other items in Crane other than these 2 item types. For the group items in the order, the group components (Inventory and kit) will be synced as individual items in Footprint order.
Items Received:
- When the items ordered in inbound order are received, the Crane World will upload a file in to a particular field in SFTP folder with the details of items received. Once we retrieve this file, we will create item receipt for the corresponding purchase order in NetSuite for the received item.
- To check if the inbound order is received, we will deploy a scheduled script and at regular intervals the script will check the SFTP folder if there is any new file uploaded from footprint. And, when we have a new file in this folder, we will fetch this and create item receipt for the received item/items in NetSuite.
- We will identify the order to be received using the document number of purchase order in the EDI file that footprint uploaded.
- This is a scheduled functionality from NetSuite and it’s flow is from Footprint to NetSuite only. Every 15 minutes, our script will execute and fetch the file from SFTP folder if there is any.
- In the EDI file we receive for the Receive milestones, it lists the items received with order line and quantity received. Using this information, we will create item receipt for these items with their received quantity for corresponding purchase order in NetSuite.
- If there are multiple item receipts in Crane (partial receipt), then we will create multiple IRs in NetSuite as well.
- When the IR record is updated from NetSuite, this update will not be reflected on the order in Footprint as the sync is only from Footprint to NetSuite.
Item Integration – Material Import:
- Material import is performed to import the items to Crane world.
- When a new item is created in NetSuite, the same will be created in Footprint.
- When a synced item is updated in NetSuite, the same update will be reflected in the item in footprint.
- If the item is made inactive or deleted from NetSuite, the material status of the item in footprint will be set to ‘Inactive’.
- All the existing inventory and kit Items needs to be imported to footprint initially with a bulk CSV material import.
- When updating an item in NetSuite, note that the fields MaterialLookupCode(Item name/number in NetSuite) and ProjectLookupCode(Location in NetSuite) are used to identify the corresponding material to be updated, so updates on those two fields is not allowed.
- Field mapping:
| Field Name in Crane World | Field Name in NetSuite | Internal id in NetSuite |
| ProjectLookupCode | Location: Hialeah Gardens/Irving Dallas | location |
| MaterialLookupCode | ITEM NAME/NUMBER | itemid |
| MaterialName | ITEM NAME/NUMBER | itemid |
| MaterialGroupName | CLASS | class |
| MaterialDescription | SALES DESCRIPTION | salesdescription |
| Package Segment | ||
| Weight | WEIGHT | weight |
| Currency | CURRENCY | currency |
| UPCCode | UPC CODE | upccode |
Limitations in Material Import:
- We will consider only inventory items and Kit/Package items in NetSuite for the material import. The inventory and kit components of group items will be imported to footprint.
- It takes a delay of about 10-15 minutes for an item to create in Crane world. Since the EDI files are sharing via SFTP, we cannot confirm if the item/material is successfully created in Crane world. If any error is occurred in the process and the material import is failed, the system autogenerate an error email and only based on this email we can confirm if the material is imported or not in crane.
- That is, if we get an error email for the material import, this means the material import is not successful in crane and we will then solve the error occurred and then re perform the material import.
Error Handling:
- If any error occurred during the inbound order, outbound order integrations and material import, an error email will be autogenerated to Crane team, and crane team will forward these emails to separate email addresses which we will provide by creating email plugin in NetSuite.
- We will provide 3 different email addresses to Crane team, one for sending error emails regarding inbound order creation, one for outbound order creation error mails and one for material import error emails.
- When we receive email to any of these 3 emails, our script will process the error message and understand the error occurred. After resolving the error, we will re perform the task (outbound order creation, inbound order creation or material import)
Assumptions
- When a sales order/purchase order is created, updated or deleted, these will be reflected in the footprint order.
- If an order that has already been synchronized with Footprint is updated in NetSuite, the same update is reflected in the Footprint order. To update an order in Footprint, we use a “replace” operation. This means we must first cancel the order in Footprint and then replace it with the updated field values.
- According to the suggestion from the Crane World team, if there are any updates required for a partially received or partially fulfilled order, the Corp Design team should coordinate and communicate with the Crane World team to make these updates in the Footprint order.
- When an order is deleted or closed in NetSuite, the corresponding inbound/outbound order in Footprint will be automatically cancelled.
- We assume that the Corp team will check the check box field “Is Master PO” while the creation of master PO to not create inbound order in Crane for master PO.
- We assume that before going live, the inventory level of items will be equal between Corp’s NetSuite account and Crane world’s production environment.
- The outbound and inbound order integration will be performed for the orders created after the deployment of scripts in production. We can also integrate the existing open sales orders in status ‘Pending Fulfillment’ and purchase orders in status ‘Pending Receipt’ with the footprint.
- We will be doing the outbound order creation only if the sales order is approved and in pending fulfilment status. Similarly, the inbound order creation will take place only if the purchase order is status Pending Receipt.
- The outbound order and inbound order syncs are uni directional ; from NetSuite to Footprint and will be a real time sync.