Keep It Simple Stupid (KISS). We've all heard that before as a guideline for ERP software development and implementation. Simple systems are easier to both implement and maintain. But I don't think there are many things that could be more challenging than keeping an ERP system simple. Enter the Simple Sales Order:
Simple Sales Order is an answer to the problem caused by the fact that many end users demand exactly the opposite of simplicity. They want more features, more data points, and more business logic to handle special use cases. We hear almost every day "I can't believe everybody wouldn't want this feature!" While we try very hard to shield users from feature bloat by adding switches to turn complexity off, I think we can generally say as features get added into an ERP system complexity creeps in regardless. The standard sales order window, for example, now has no less than 65 editable data fields on the header. As an organization committed to listening to customers and the open source community we are obligated to consider this feedback and incorporate new features. Simple Sales Order, on the other hand, is a solution for the company whose number one feature request is to have less features.
We have taken the recent launch of the xTuple xChange as an opportunity to showcase how xTuple xTensions can be used to create and package alternative interfaces for standard functionality. Simple Sales Order is a package you can download that adds an alternative Sales Order window which has been stripped down to bare essentials with about 13 editable header fields and 4 editable line items fields. For companies who just need to enter basic order information this alternative can be a refreshingly clean and simple way to enter sales data. As with all xTension packages it is easily loaded by the xTuple Updater utility.
But it's not just the user interface that's simplified, the code behind it is too. Simple Sales Order condenses well over 7,000 lines of C++ code found in the core sales order window down to less than 500 lines of JavaScript code in this alternative version. Simple Sales Order does this a couple of ways. First in 3.2.2 we've introduced new functionality into the xTuple widget library that leverages Qt's model/view architecture. XTreeWidget can attach to MetaSQL statements stored in the database instead of the code, and the Screen and XTreeView widgets can map directly to our own API Views. Used together these widgets elminate virtually all of the SQL code from presentation layer. In the case of the Screen and XTreeView the SQL is eliminated completely because it is self generated by the widgets themselves.
Not only do these new tools elimnate thousands of lines of code, but they introduce the potential to make overlaying custom functionality orders of magnitude easier. If it turns out you need one other sales order window field to show up in Simple Sales Order, it is a simple exercise to drag and drop a widget into the the screen using the xTuple embedded designer. You just tie a couple signals and slots, set field properties and your done. If, however, you wanted to extend the sales order structure with data from your own schema, all you have to do is make a new API view that marries the standard data to yours then repoint the Screen widget to your view.
We expect that the first question would-be developers will ask is "That sounds great! Where can I see some documentation on how that new model/view stuff works?" At the moment we have put all our energy into getting this example and its commercial brethern Point of Sale completed and ready for the new xChange. Our intention is to make Simple Sales Order the basis for a complete tutorial on how to build xTension packages that highlights the new model/view technology. Keep an eye out for that in the next couple of months. In the mean time you can start with existing documentation in the Developer Zone. All the code for Simple Sales Order is in the PostBooks SVN repository where adventurous developers can poke around. Of course, you can also download and load the application into a copy of PostBooks and view most of the code from within the application as well, and finally you can also simply unzip the package and examine the file contents there.