Aug 30, 2010

Automatic update of Openbravo datamodel documentation

by Priya Muthukumar
Database Model reference maintained for Openbravo ERP gives a complete overview of all tables and columns (and their relations).

One of the cool feature of this reference is the fact that it is an active written document that permits you to search the Openbravo datas model directly from the wiki, without the need to open additional tools such as PgAdmin.

  • Tabular arrays are grouped in packages of functionally tied in entities; for illustration, all the tabular arrays linked to invoices are grouped in org.openbravo.theoretical account.common.bill
  • For each one table - for example C_INVOICE - incorporates a full description of all of its columns
  • Columns being part of a foreign key - for example C_BPARTNER_ID on C_INVOICE, is a normal column and it is foreign key column to C_BPartner table.
  • Columns description - for instance PARTNER_ADDRESS on C_INVOICE, gives information about it in the column description
  • Columns linked to a callout - for example TRANSACTION_DOCUMENT on C_INVOICE - provides a direct link to the java sourcecode implementing the callout.

This is a rattling valuable tool that can save hours of investigation and increase the productivity of many Openbravo developers. Take it for a spin.

This document on database model is updated automatically for every new MP. which is made possible by

  1. Openbravo ERP module org.openbravo.utility.modelwikidoc, which generates the entity model wiki page and its subpages.
  2. Continuous Integration, which checks for new MP (mercurial tag) and execute the wikidatamodel generation process

One can check updates in the data model using page history, example http://tinyurl.com/25pgvov

Reference: http://vsadhx.livejournal.com/4967.html



Aug 27, 2010

Openbravo ERP Professional Edition updated for U.S. Market

by John Fandl
The Openbravo development team has had a very productive summer, and the fruits of their labors have come together for U.S. companies in the form of 3 complementary initiatives, all of which are available at no cost to Openbravo ERP Professional Edition subscribers in the U.S.:

  • QuickStart 2
  • U.S. Professional Localization Pack
  • Advanced Payables & Receivables Module
QuickStart 2 is the next generation of our rapid implementation solution that allows SMBs to go live with a standardized, pre-configured web-based ERP implementation in weeks instead of months--with full adaptability and scalability going forward.  See the recent press release  for details.

The first version of the U.S. Professional Localization Pack is now available in Openbravo Exchange.  Companies with U.S. operations will see faster deployments, more efficient operations, and lower Total Cost of Ownership (TCO) with this functionality.  Openbravo partners may sign on to the partner portal and follow this link to a recorded webinar with detailed information, in the "Must Know" section.

Finally, the new Advanced Payables and Receivables module (which is pre-bundled with QuickStart 2, but also available independently) has reached GA (Generally Available) status, after being in Controlled Release during the summer. This "module" is actually a complete payment management system that provides an enhanced user experience, and fully automates and audits all payment and reconciliation processes. The Openbravo Exchange listing is here.

The bottom line is that U.S. companies are increasingly looking for adaptable, web-based solutions that are cloud-ready and easy to deploy and operate.  Openbravo ERP Professional Edition, combined with QuickStart 2 and the U.S. Professional Localization Pack, is well-positioned to meet this demand!



Aug 26, 2010

Openbravo Cloud Appliance. Using it effectively

by Asier Zabaleta

The other day a customer running a Cloud appliance needed to replicate its production environment into 3 new servers. These were the options

  1. Deploy Openbravo ERP by doing a custom installation in the 3 servers and then move the actual installation to these 3 new servers.
  2. Deploy Openbravo ERP using a community appliance and then move the actual installation to the 3 new servers.

Using an appliance for deployment makes things not just quicker but a lot easier for the system integrator. You won’t just save some hours deploying each new server, but you will also be sure that everything is well configured and optimized.

Similar reasons apply to the task of moving the actual instance (database + modules) to the servers. It’s a time consuming task, moreover when you need to repeat it three times. There are a lot of manual commands to be executed and mistakes can happen. Even doing the steps correctly, this task for the 3 servers should take around 2 working days.

But, as the customer was using the Openbravo Professional Edition, they had the Cloud appliance up and running.


This made much easier the replication of the environment. The Cloud Appliance does not introduce improvements in the deployment of Openbravo ERP compared to the community appliance, but provides significant advantages to Professional Edition Subscribers managing the instance, as the steps went down to these:

  1. Download the last backup from the production environment
  2. Upload it to each 3 servers
  3. In each server click on Restore that backup.

As you can see, the Openbravo Cloud Appliance (manual) does not only allow you to spend more effectively your time maintaining your instance, but also avoids unexpected errors and problems in these critical manual tasks.

In the end, the replication of the original environment in 3 (counting that they all use the Professional Edition) was done in less than 4 hours.



Aug 25, 2010

Openbravo wins Infoworld Best of Open Source Bossie Award 2010

by John Fandl

Infoworld just announced their 2010 Bossie Awards, and have again honored Openbravo with the Best of Open Source Awards 2010 (Bossie Award), in the Best Open Source Applications category. This is the third time we have been honored (2007, 2009, 2010). 

Other application winners include Pentaho, Talend, SugarCRM, and Alfresco--congratulations to this elite open source crew.

This year we're the only winner in the ERP category.  Per Infoworld, Openbravo is the leading Open Source ERP company!



Aug 25, 2010

Join the Openbravo Certified Professionals!

by Rok Lenardic
When your car breaks, you normally have a few options:
  • repair it yourself
  • take it to your cousin's friend who is a mechanic
  • take it to the dealer's garage
All three options serve a purpose, however, if your car is mission critical for your daily work, which option will you take? In such a situation the third option is most often the prudent one to take because:
  • you can get a substitute car for the day and still be able to go about your work
  • you will get warranty on work done
  • original replacement parts and tools will be used
  • the mechanics are properly trained and know what they are doing
Analogous to the above situation, why take risks when it comes to implementation and maintenance of such a mission critical software such as an ERP? Numerous vendors base their channel business on certified partners. For example, this year's Red Hat Partner Summit in Valencia was a reassuring event in this aspect as several sessions emphasized the importance of official training and certification within their ecosystem. Here at Openbravo, we like to relate to Red Hat's successful strategy and strive to perfect our channel driven business as well.

Consequently, becoming an Openbravo Certified Consultant has never been easier:
  • It's affordable, the Foundation level exams cost 150EUR (price is region dependant) and include 2 takes. Even better, the certification exam is now automatically included in our courses ( see http://www.openbravo.com/services/training/ )
  • It's easy to learn the topics covered using our extensive wiki documentation and the official courses offered
  • Enrollment only takes a few clicks
  • The Foundation level exams take 80 minutes and 50 multiple questions
And, there are good reasons to become one:
  1. Take the opportunity to improve your knowledge of Openbravo ERP
  2. Upgrade your partnership level and receive better visibility on our website ( http://www.openbravo.com/partners/find-partners-support/ )
  3. Improve your professional recognition with customers using the Openbravo Certified logo
  4. ...and more goodies for the certified members are coming soon!
Join the team of certified Openbravo professionals today at http://www.openbravo.com/services/certification/ !



Aug 20, 2010

Development tips – Part II

by Iván Perdomo

In Part I I explained how to:

  • Speed up Firefox by creating a different profile for Firebug and ‘vacuum’ the
    browser’s internal databases
  • Update to the latest ‘safe’ pi revision
  • Clean up your Mercurial workspace

You also know how to configure the Autologon authentication manager that allows you login the application with the same user/password skipping the login page.

Today we’ll focus in speeding up the compilation process using just some configuration properties that will result in skipping some tasks that are not required in the day-to-day development process.

Note: I assume that you are working with Eclipse IDE, you have successfully build the application and also you have experience how to compile the application. If you don’t know how to do that, please read the how to setup your development environment in the wiki.

The Openbravo.properties

The Openbravo.properties file is use to configure the application, e.g. database connection details, date format, etc. But also have properties for the build process and tweaking them allows you skip some tasks when compiling.

You can read more about the Openbravo.properties in the wiki page.

Note: Remember to always read documents in the ERP/2.50 namespace, since all other documents may have been deprecated or are no longer maintained.

minimizeJSandCSS

Some time is spent in minimizing (compressing) the JavaScript and CSS files to the context. That’s why when running the application and you try to see the
.js files everything is compressed without line breaks or spaces. The quick fix to skip this process is set to no the minimizeJSandCSS property.

# use js/css minimization (in local-context and war-file)
minimizeJSandCSS=no

deploy.mode

The deploy.mode defines where the build process needs to copy files and if it needs to generate a .war file. The default deploy.mode is class, so in every compilation call the files are sync’ed with the $CATALINA_BASE/webapps/context folder.

Since you are working with Eclipse the tomcat server you’re using is the one inside Eclipse, the $CATALIBA_BASE/webapps/context is not used at all, instead, the files are read from the WebContent and build folders.

Setting to none the deploy.mode will skip the sync of the files, and also will not generate a .war file.

#Deploy mode: valid values [class, war, none]
deploy.mode=none

Wrapping up

Setting minimizeJSandCSS=no and deploy.mode=none will speed up the day-to-day compilation process.

Remember that this changes recommended just for development environments not for production ones.

Stay tunned!




Aug 20, 2010

A faster Forge for all

by Peter Nuding
Yesterday morning we took the Openbravo Forge down for a moment - to make it faster for all of you.
While everything works as usual you will now find snappier loading times across the site.

Are you happy with the overall responsiveness? Notice any areas that are giving you headaches?
Share your feedback in this discussion thread and tell us what type of connection you're using!



Aug 16, 2010

Email Validation using Callouts in Openbravo

by Shankar Balachandran
Hi all, I have a written a simple java code that validates an email ID. This is not a completely validated one, but a basic validated one. This can also be also used as a template for creating callouts in Openbravo. special mention to my colleague pandi and one more thanks to ivan from Openbravo in helping me accomplish this task...:)

package org.openbravo.erpCommon.ad_callouts;

import javax.servlet.ServletException;
import org.apache.log4j.Logger;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.openbravo.erpCommon.ad_callouts.SimpleCallout;
import org.openbravo.erpCommon.utility.SequenceIdData;
import org.openbravo.erpCommon.utility.OBError;
import org.openbravo.scheduling.ProcessBundle;

public class Email_CL extends SimpleCallout {
   
    private static final long serialVersionUID = 1L;
    private static Logger log = Logger.getLogger(Email_CL.class);
    @Override
    protected void execute(CalloutInfo info) throws ServletException {

        String mailid = info.getStringParameter("inpemail",null);
        // Set the email pattern string
        Pattern p = Pattern.compile(".+@.+\\.[a-z]+");
        // Match the given string with the pattern
        Matcher m = p.matcher(mailid.toString());
          // check whether match is found
           boolean matchFound = m.matches();
        StringTokenizer st = new StringTokenizer(mailid, ".");
        String lastToken = null;
           while (st.hasMoreTokens())
           {
                 lastToken = st.nextToken();
          }
           //if (matchFound && lastToken.length() >= 2
              //    && mailid.length() - 1 != lastToken.length())
              if(!matchFound)
                  info.addResult("MESSAGE","InValid Email");
    }
}

Importing it into the Application :
             Generally callouts are present in the folder ad_callouts in org/openbravo/erpCommon in the source folder of openbravo. You can put your callout file here and then we should define a callout in our application in Application Dictionary under setup folder callout is there. Now Give a name for the callout preferably the name of your java file because the mapping class file and a auto-generated html file will be generated. You check the existing callouts for path and adjust yours accordingly. Then this defined callout should be assigned to the field where the action has to be performed. for the above example it would be the string field where email will be entered. To assign callout to a column go to tables and columns and choose the corresponding column. There will be a field called callout. Choose your name there. Compile and deploy and check your callout.

Added Note:
              To check whether your callout is called properly, u can use the empty frame at the end of each page. For that go to src/org/openbravo/erpCommon/security. There will be a file called Login_FS.Html. In line No.52 the frame ratio would be "100%,*". Change that too "90%,20%". This will create a empty text area at the end of every page and if that page has callout, the text "Callout response page" will be displayed. Or else if some error is displayed your path settings in callout definition has to be changed. 



Aug 16, 2010

Phone Number Validation in postgres

by Shankar Balachandran
I took a simple number validation code across net and modified it to check phone numbers. It allows only numbers,plus symbol(+) and underscore(_) operators

-- Function: isphoneno(character varying)

-- DROP FUNCTION isphoneno(character varying);

CREATE OR REPLACE FUNCTION isphoneno(character varying)
  RETURNS boolean AS
$BODY$
BEGIN
    RETURN $1 ~ '^[0-9,+,-,.]+$';
END;
$BODY$
  LANGUAGE 'plpgsql' IMMUTABLE
  COST 100;
ALTER FUNCTION isphoneno(character varying) OWNER TO tad;



Aug 10, 2010

Quick Line Picking & Price Lists

by Rob Goris
As part of the 3.0 release which includes a redesigned Sales Order Flow, we are looking at the Copy Lines and Copy From Order functionality. From now on the two together will be called Quick Line Picking. During brainstorms the following ideas/issues surfaced:
  • Price list must be added as a filter as sometimes you want to pick products that never have been ordered before
  • Consumption days concept does not make much sense and is tucked away too deeply. Extend date range filter to more human ranges such as “last week” or “last quarter”
  • Most frequently ordered makes sense as it is likely that popular orders will be repeated
  • Most recently ordered makes sense as it is likely that recent orders will be repeated
  • Product category makes sense as a filter ("I only want to order hardware")
  • Show for each product the sales/purchase order they belong to. Clicking the order will open it on a new tab so you can peek into it and see the rest of the order
  • Use extra dedicated filters for the most important attributes. Use column filters for the less relevant filters
  • Set default filters to avoid massive volumes
  • Save filter settings for reuse per window type and user
We also thought of combining orders and lines in one grid, perhaps grouping them in expandable sections (Family Grid style) but the drawback is that the amount of rows in an expanded state can become excessive as it is a Cartesian product where every product is shown multiple times, as it belongs to multiple sales orders. In this stage I am not convinced about the real advantage of doing so, as selecting an entire order and then removing one or two products in the sales order lines grid afterwards is hardly an effort. However, a simplified version that used a column Last Order Used (page 18 in the PDF in the Forge link below) helps the user grouping products that belong to the last order. I plan to keep Copy Lines and Copy From Order in separate windows (in fact, they are layers in 3.0 style) but the user can easily switch between them. I believe that a user either wants to select products from price lists or recent orders OR wants to reuse and merge all order lines from entire orders OR wants to duplicate a past order, including all its header and lines data. This last option can also be done in a grid by duplicating the row. So we´ll have three flavors to reuse order lines. The proposed solution tries to satisfy all three methods. The Price List is the most important attribute in order line picking. The Price List is now set in the header. The lines to pick should have it as a default filter, although it should also still be possible to choose products from other price lists. The Price List Version is currently not used in the header. The new proposal does have it in the header although I am not certain if this is a good idea or not, so help me out here. Then there is a whole set of business logic we need to rethink when adding products from a non-default price list or even more than one, which can get quite complicated when products exist in more than one price list. I have attempted to model all of the above thoughts in an extended sales order scenario, see the first PDF document via the link below. The second PDF shows some background on Price Lists. I also noticed that the price list setup is very tedious. We must tackle this as well at some point but let´s first focus on the sales order flow. Please have a good look and let us know if this all makes sense to you. Find the proposed solution and the discussion thread on this Forge forum.