Proposal Summary
This proposal outlines the automation process of the Outsourced Purchase Order when the Sales Order is created from their website. This will be applicable only for the furniture orders that have the items whose Product Classification (as its Value or Parent) is ‘Furniture’ and the Item type is ‘Assembly Item’.
Requirement
Blue Leaf would like to automate the process of the Sales Cycle along with the Outsourced manufacturing sales order form. This will be applicable for all furniture orders going through NetSuite from their website and like to make it as streamlined as possible.
They also shared the diagrams for the ‘To Be’ feature that requires for the implementation:

Our Solution
We will be creating a new location ‘Furniture Location’ for the Furniture Sales Orders created via Website. This location can be a virtual location to manage the tracking of the Outsourced manufacturing items. Also, we will be filtering out the items that is related to ‘Furniture Order’ by considering the items with the Product Classification: ‘Furniture’ as its Value or Parent; and item type as ‘Assembly Item’.
Using NetSuite Script, we will be updating the Approved Sales Order to assign ‘Furniture Location’ (to the Line Field: Location) for the furniture items in the line level of the Sales Order and will be overriding the default commitment feature.
Also, we will be populating the custom line fields: ‘Outsourcing Vendor’, and ‘Outsourcing Location’. The ‘Outsourcing Vendor’ details will be sourced from the ‘Preferred Vendor’ in the Item Record. Also, the ‘Outsourcing Location’ will be the Manufacturing Location specified in the Vendor record.
Vendor/Supplier Details from Item Record

Sourced Vendor/Supplier Details from Item Record to Sales Order
Upon the approval of the Sales Order (which contains at least one ‘Furniture item’ with the Item Type: Assembly Item and the Product Classification: ‘Furniture’ as its Value or Parent) from the website, we will be creating a Purchase Order with the Outsourced Purchase Order form with the ‘Outsourcing Vendor’, and ‘Outsourcing Location’ specified in the Sales Order. The Purchase price will be taken from the ‘Suppliers’ sublist in the Item record along with the currency details. This Purchase order will only be having the ‘Furniture items’ and these will be identified using a saved search. The Sales Order link will be stored in the related Purchase Order and vice versa for the future reference. These will be implemented with the possibility of NetSuite Scripting.
This process can be continued manually by the NetSuite User with the creation of Work Order, its related Item Receipt and Assembly Build.
When the outsourced items are received in the ‘Outsourcing Location’, the commitment status of the Sales Order lines (only the lines related with Outsourcing items/ Furniture Items) changes to receive those items and validate whether all the items of the Outsourced Purchase Order are received. After receiving all the items, we will automate an Inventory transfer from ‘Outsourcing Location’ to ‘Furniture Location’ to transfer the stock to the Sales Order location from the ‘Outsourcing Location’. These will also be achieved by the possibility of NetSuite Scripting.
When the items are received in the ‘Furniture Location’, which can initiate the creation of Item Fulfilment.
In order to implement the mentioned customisation, we will be deploying multiple NetSuite Scripts which will be a Real-time script for updating the Sales Orders and Scheduled scripts for the rest of the customisation.

Assumptions
- We will only be considering the furniture items which has the Product Classification (as its Value or Parent): ‘Furniture’; and item type as ‘Assembly Item’ for this customisation.
- We will be adding ‘Furniture Location’ to all the lines that is related to ‘Furniture items’ and for other items, we will not be adding/updating the line-level location. We also assume that the line-level location is given in the created Sales Order. If the line level location is not given for other items, then we will populate them based on the body level location.
- We will be populating the custom line fields in the Sales Order: ‘Outsourcing Vendor’, and ‘Outsourcing Location’. The ‘Outsourcing Vendor’ details will be sourced from the ‘Preferred Vendor’ which is fetched from the Item Record and the ‘Outsourcing Location’ will be the Manufacturing Location specified in the Vendor record.
- The Purchase price used in the Outsourcing Purchase Order will be sourced from the ‘Suppliers’ sublist in the Item record along with the currency details.
- We will not be considering any partial receiving scenarios of the Purchase order in this proposal. So will be waiting until all the items are received in the ‘Outsourcing Location’.
- We assume that there will be only one Preferred Vendor in the Item Record and only one Manufacturing Location in the Vendor record.
- All the Outsourcing items will be properly setup with BOM, and Preferred Vendor (we are considering them as Outsourcing Vendors).
- Only one vendor will be involved for one item in the Purchase Order. If there are two different items with different vendors, then we will be creating different purchase orders.
- We assume there is no need for the physical transfer/Transfer Order of stock to the Sales Order location from the ‘Outsourcing Location’. Hence, we are creating ‘Inventory Transfer’.
- Also, while creating Purchase Order, we will consider the ‘Quantity’ and ‘Units of Measure’ as the same as the Sales Order.
- As the automation includes creating Purchase Order, the NetSuite user still has the option to edit the Purchase Order to change the price/currency if necessary. The Purchase Order details will be available from the associated Sales Order.
Risks
- The creation of the Purchase Order will not be initiated when the
- Sales Order is Unapproved
- Item record does not have a preferred Vendor
- Vendor record does not a Manufacturing Location.
- The Purchase Order can be created without a Purchase price when no ‘Purchase Prices’ are added to the item record’s Supplier sublist.