Pages

2012/05/29

How I survived SuiteWorld 2012


Airports, Airplanes, Delays oh MY!

Departure: Monday, May 14 2012 at 6am (EST) from Montreal.
Arrival: Tuesday, May 15, 2012 at 1am (PST) in San Francisco. (How did this happen? Well...this is another story all together which can be left for another time, however the important thing is that I got there in one piece.)

The purpose of this trip was to attend SuiteWorld 2012 (NetSuite's annual customer conference for customers, users, partners, media and industry analysts) and gain as much out of it as possible.
ERP Guru was a sponsor at the event and this was our booth

Considering there were 1000 more attendees this year than last year (and it was completely sold out) it was quite a challenge to attend all the breakout sessions which I had added to my agenda.
NOTE: These "track" sessions were so popular, that certain rooms were not large enough to handle the number of people wanting to attend these breakout sessions. This will be resolved  by NetSuite next year in hosting SuiteWorld 2013  in San Jose to accommodate the extra people wanting to attend!

Although I attended a few sessions during my 4 day stay at SuiteWorld, I would like to outline two of them in particular that I felt were of importance, although both were more on the technical side of things. The first was Advanced Platform APIs for Developers and the second was SuiteCloud Platform: The Road Ahead.




Advanced Platform APIs for Developers


This track session was intended for advanced programmers, and it was essentially to learn about the latest SuiteCloud APIs and how we can apply them in our scripts. This session covers a multitude of topics including Scheduled Script Management, custom plugins and the newly added SuiteAnalytics APIs. The latter was the main point of interest for most, as we spent more time on this topic due to the new ability to create Pivot reports by script.


Although it was repeatedly mentioned throughout the session that there is a good chance this new feature might not even make it to the cutting block, NetSuite still "wowed" us with the ability to add embedded formulas in our searches, and a new way to configure row and column hierarchy in pivot reports using the new API nlapiCreateReportDefinition. They also indicated that they might be adding the "or" functionality in searches (but I'll believe it when I see it..and when I do see it, I'll be the first to write another blog about it).


SuiteCloud Platform: The Road Ahead


In this track session, the director of Product Management provided us with a view into the future of the NetSuite SuiteCloud development platform and then was open for discussion with developers and administrators on any SuiteCloud platform including SuiteBuilder, SuiteFlow, SuiteScript, SuiteTalk and SuiteBundler.  There were two points of interest that caught my attention, and these might change how we develop and write our scripts here at ERP Guru.

The first announcement they made was regarding SuiteFlow enhancements. They introduced the possibility of accessing the Time and Weekly Time sheet record using workflow. Included in this topic was the mention that they will introduce the ability to access sublists within a workflow, which is a very nice addition to the SuiteFlow family.

Obviously, I do save the best for last (at least my personal favorite) and this is the introduction of the new SuiteCloud IDE. This is an eclipse plugin that Evan Goldberg (Founder, Chief Technology Officer and Chairman of the Board) quickly demonstrated how it works in his Keynote, however we went more in depth in this track session on how this can help all the developers writing scripts. This will allow access to multiple NetSuite accounts and will also allow for sophisticated code completion with regards to API, fields, and records. In addition, the new plugin also projects templates for all script types and functions in your JavaScript code (therefore you don't need to write it up each time).


Overall, a GREAT experience attending SuiteWorld. I am lucky to have been chosen among my peers to go along with a few other employees from ERP Guru. I met a lot of partners, new resources, met up with some of our clients, and even made some new contacts along the way. I learned new things while attending all the various track sessions that occurred during the 4 day event.
Would I do it again? Absolutely
Would I fly with the same airline? Never again!

2012/05/15

Importing Gift Certificates

It is possible in NetSuite to import gift certificates into the system (NOTE: the certificates must already have an authorization code). To do so, ensure the following steps have been taken:

  • Enable the Gift Certificates feature under Setup > Company > Enable Features > Items & Inventory > Items > Gift Certificate Setup. 
  • Under Setup > Accounting > Accounting Preferences > Items/Transactions > Other Item Preferences > Gift Certificate Auth Code Generation
    • NOTE: there are three options: System Generated, Enter on Order, and Add-On Item. For this purpose it should be set to Enter on Order

This can be applied to both physical gift certificates/cards and virtual gift codes, however in order to do so a generic Customer against which to create the Cash Sales (and import the gift certificates onto), and a Generic Gift Item must be created. Using this generic customer, it is possible to import legacy gift certificates

NOTE: An email will be sent to the gift certificate recipient. You can enter the same e-mail for all certificates (ie, the generic customers e-mail), it will not impact who can use the certificate.

Create a CSV import mapping for Transactions > Cash Sale. (You could also use Invoice, but you will need to create payments/journals to close the transactions).

In the mapping, under NetSuite Fields > Cash Sale Items you will find the fields you need to correctly map, with the Gift Certificate specific fields corresponding to item options: 


Undep. Funds = No
Account = An account to post the transaction against
Customer

Amount (the amount remaining on each card - use the Note field to keep track of the original amount if needed)
Items : Item (the gift certificate item)
Items : Gift Message
Items : Code (those need to be unique!)
Items : Recipient Email (informational only)
Items : Recipient Name (informational only)
Items: From
Items: Tax Code

Viewing and Managing the Data

Once you have the Gift Certificate functionality set up, you can view and manage the data via Lists > Accounting > Gift Certificates. Through this it is possible to view the original and current value, although the current value can not be edited, the expiration date (this is illegal in some states - ie, PA). A gift certificate can be used in payment through the Order Form > Billing > Payments > Gift Certificate section.

2012/05/07

SSP Pages and the Power of Awesome

I am rarely excited by NetSuite announcements, and I tend to wait a while before taking position on the quality of a new feature...but this time, I am very excited about the new SSP pages. I could barely stay on my chair during the NetSuite presentation on the functionality, and could not wait to start coding one for the pleasure of it.

The feature is still in Beta phase according to the description in the 'Enable Features' page (SuiteScript Server Pages (Beta)), but according to NetSuite it should work properly at this point in time.

So, let's dive into this pool of infinite potential (I told you I was excited), and cover some of the things that can be done with SSP pages in the NetSuite Webstore.

Once the feature is enabled (Enable Features), it is possible to access the SSP Application in the Website Setup section. This is where we can create all  of our more-awesome-than-the-other-applications SSP Application. For a quick reference, view the screenshot below of the page we will need to work with in order to create our innovative checkout pages.



To start, set a name for the application which will be used in the generated url to access the application. This can always be changed  later manually to match your needs. The other important section is the Application Folder which will contain a grouping of related applications, and its URL Root  is created by the application folder name (because it is sitting in the live hosting file) and the name of the application.



For those of you who have a keen sense of observation, you may have noticed the Scripts section in the service function. With these we are getting closer to where the magic happens. For those with scripting knowledge, note that service uses the same parameter as a Suitelet (a nlobjRequest and a nlobjResponse).

The Touch Point sub-list  is where you will identify which page you want to change and with which you will create the SSP Page. It is possible to change the checkout pages using your own logic, and if you've been trying to alter those pages through different technique, you know how hard it was. The SSP pages create a plethora of possibilities, and the projects you can now achieve.

---NOTE: This next section contains code samples
Once the page you want to change has been identified, it is time to create the actual SSP pages. Please note that currently this is the only way to get the SSP pages to work.

In the pages, it is possible use all the <% ... %>  tags we have used in the past. This greatly accelerates the creation of the pages because we can reuse the header, footer or navigation we created in the web store theme. For example, if we want to add the header to the page, we would only have to use the following in the SSP page :
...
<table>
<%=getPageTop()%>
</table>
...
And voilĂ . We have our theme header generated in our SSP page.

Finally, the thing I'm the most happy to see is a supported access to the shopping session object. If you have ever had to work to get information from the cart and the session, you know how difficult it can be to fetch the right information. Through nlapiGetWebContainer(). getShoppingSession() we finally have access to the sales information. For example, I need the summary of an order (total, subtotal, shipping cost, etc), I can simply do the following :

<%var summary = nlapiGetWebContainer().getShoppingSession().getOrder().getOrderSummary()%>
<%for(var field in orderSummary){%>
      <tr>
         <td><%=field%></td>
         <td><%=orderSummary[field]%></td>
      </tr>
<%}%>

Simple! In essence, we now have the possibility to use JSP-like pages. With only these two possibilities I would have been satisfied but there is more, so much more we can do with this functionality.





2012/05/02

May: Tips & Tricks

1 - Paying a Vendor Bill with Credit Card



  1. Create a Credit Card type account in your Chart of Account
  2. Create a Vendor representing your Credit Card bank (for example: "RBC Visa"). On the Financial Tab, under Default Expense Account, make sure to select the account created in step 1.
  3. Pay Bills normally on any outstanding vendor bills, making sure to pay them using the Credit Card account created in step 1. This will decrease the account
  4. To "pay" the Credit Card, use the Write Check transaction. Here, you will select the Vendor representing the credit card created in step 2. The Expense subtab should now list the default expense account, which is the Credit Card account. Now, on the body, select the Bank account you're using to pay the credit card.
  5. Once you've done this, the Write Check will increment the value of the Credit Card account back up, while decrementing your Bank account.

2- Commission Schedule (Tip)

When viewing the list of commission schedules in NetSuite, there is a column called "In Use". 

Tip: It should be noted that even if your schedule is used in a commission plan, the In Use column might not be set to Yes. It is only set to Yes when a commission is calculated using that particular schedule.

3 - Form Languages

In order to have a form in a specific language (ie, French France), a user has to log into NetSuite, change their default language to the language they wants to create the form in (Home > Set Preferences). 

Once the language is set, the user should navigate to the form, click on 'Customize', and save the form. This operation will save the form in the current language. 

The user can now set their language back to the original one, and when they navigate back to print a form, they will now have the option to Print in (Other Language) on the print button. 

2012/04/20

Transfer Orders

A Transfer Order is the transfer of items from one location to another. This feature is available in NetSuite when (and only if) the Multi-Location Inventory feature is enabled (Set-up > Enable Features> Item & Inventory > Multi-Location Inventory).

In NetSuite, a Transfer Order can have four different statuses: Pending Approval, Pending Fulfillment, Pending Receipt, and Received. Let's go through what each of these means in the Standard Workflow:

1. Pending Approval
The Transfer Order will maintain this status until either it is manually set to Pending Fulfillment, or is approved via the Approve Transfer Orders window, which can be accessed through Transactions > Inventory > Approve Transfer Orders.

2. Pending Fulfillment
In this stage, the item is committed from the source location, which is viewable in the Quantity Committed column of Location under Item > Inventory, and the Quantity on Order is incremented on the Transfer Location. At this point you can now Fulfill the Transfer Order, which will create a standard item fulfillment which is ready to be packed and shipped.

3. Pending Receipt
Now, once the Transfer Order is in the Pending Receipt status, the Quantity on Hand at the From Location will be decremented, but the Quantity on Order remains on the Transfer Location. At this point you can now receive the Transfer Order.

4. Received
Once the Transfer Order has been received, the Quantity on Order will be decremented proportionate to the Quantity on Hand that has now been incremented.

EXAMPLE: 

A company has custom built items which they only use certain quantities of items to build. Taking this into account, the company would like the extra quantities to be moved to a Scrap Location. The Solution?
  • Create a Custom Column Field - Quantity to Scrap
  • Create a Transfer Order to commit from inventory for each item with a quantity to scrap (when the Sales Order is created)
  • When the Sales Order is Billed:
    • Transform Transfer Order into Item Fulfillment
    • Transform Transfer Order into Item Receipt
Quantities to scrap should thus be moved from Location to Scrap Location with the correct inventory impact.