details: https://code.openbravo.com/erp/devel/pi/rev/d2376cd8e19a changeset: 13355:d2376cd8e19a user: Ioritz Cia <ioritz.cia <at> openbravo.com> date: Thu Jul 28 10:25:15 2011 +0200 summary: Fixes issue 17775: Trial balance Report links are not workin properly.
details: https://code.openbravo.com/erp/devel/pi/rev/ef9cf705fa64 changeset: 13356:ef9cf705fa64 user: Ioritz Cia <ioritz.cia <at> openbravo.com> date: Fri Jul 29 10:18:01 2011 +0200 summary: Fixes issue 18108: Trial balance Report detail feature does not work with an organization without calendar. diffstat: src-db/database/sourcedata/AD_MODEL_OBJECT.xml | 24 +- src-db/database/sourcedata/AD_MODEL_OBJECT_MAPPING.xml | 20 +- src-db/database/sourcedata/AD_PROCESS.xml | 4 +- src/org/openbravo/erpCommon/ad_reports/ReportTrialBalance.html | 72 ++++++++- src/org/openbravo/erpCommon/ad_reports/ReportTrialBalanceDetail.java | 27 ++- src/org/openbravo/erpCommon/ad_reports/ReportTrialBalanceDetail_data.xsql | 51 +++++++ 6 files changed, 160 insertions(+), 38 deletions(-) diffs (truncated from 307 to 300 lines): diff -r a185170cc1bf -r ef9cf705fa64 src-db/database/sourcedata/AD_MODEL_OBJECT.xml --- a/src-db/database/sourcedata/AD_MODEL_OBJECT.xml Mon Aug 01 12:02:07 2011 +0200 +++ b/src-db/database/sourcedata/AD_MODEL_OBJECT.xml Fri Jul 29 10:18:01 2011 +0200 @@ -1164,18 +1164,6 @@ <!--800741--> <OBJECT_TYPE><![CDATA[S]]></OBJECT_TYPE> <!--800741--></AD_MODEL_OBJECT> -<!--800742--><AD_MODEL_OBJECT> -<!--800742--> <AD_MODEL_OBJECT_ID><![CDATA[800742]]></AD_MODEL_OBJECT_ID> -<!--800742--> <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID> -<!--800742--> <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID> -<!--800742--> <ISACTIVE><![CDATA[Y]]></ISACTIVE> -<!--800742--> <ACTION><![CDATA[R]]></ACTION> -<!--800742--> <CLASSNAME><![CDATA[org.openbravo.erpCommon.ad_reports.ReportTrialBalanceDetail]]></CLASSNAME> -<!--800742--> <ISDEFAULT><![CDATA[N]]></ISDEFAULT> -<!--800742--> <AD_PROCESS_ID><![CDATA[800039]]></AD_PROCESS_ID> -<!--800742--> <OBJECT_TYPE><![CDATA[S]]></OBJECT_TYPE> -<!--800742--></AD_MODEL_OBJECT> - <!--800746--><AD_MODEL_OBJECT> <!--800746--> <AD_MODEL_OBJECT_ID><![CDATA[800746]]></AD_MODEL_OBJECT_ID> <!--800746--> <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID> @@ -4095,4 +4083,16 @@ <!--F22C501A5088415DBD7D9DC2134D5DA9--> <NAME><![CDATA[Openbravo Core Context Parameters]]></NAME> <!--F22C501A5088415DBD7D9DC2134D5DA9--></AD_MODEL_OBJECT> +<!--FF808181316BE3F001316C15D3D1000D--><AD_MODEL_OBJECT> +<!--FF808181316BE3F001316C15D3D1000D--> <AD_MODEL_OBJECT_ID><![CDATA[FF808181316BE3F001316C15D3D1000D]]></AD_MODEL_OBJECT_ID> +<!--FF808181316BE3F001316C15D3D1000D--> <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID> +<!--FF808181316BE3F001316C15D3D1000D--> <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID> +<!--FF808181316BE3F001316C15D3D1000D--> <ISACTIVE><![CDATA[Y]]></ISACTIVE> +<!--FF808181316BE3F001316C15D3D1000D--> <ACTION><![CDATA[R]]></ACTION> +<!--FF808181316BE3F001316C15D3D1000D--> <CLASSNAME><![CDATA[org.openbravo.erpCommon.ad_reports.ReportTrialBalanceDetail]]></CLASSNAME> +<!--FF808181316BE3F001316C15D3D1000D--> <ISDEFAULT><![CDATA[Y]]></ISDEFAULT> +<!--FF808181316BE3F001316C15D3D1000D--> <AD_PROCESS_ID><![CDATA[800091]]></AD_PROCESS_ID> +<!--FF808181316BE3F001316C15D3D1000D--> <OBJECT_TYPE><![CDATA[S]]></OBJECT_TYPE> +<!--FF808181316BE3F001316C15D3D1000D--></AD_MODEL_OBJECT> + </data> diff -r a185170cc1bf -r ef9cf705fa64 src-db/database/sourcedata/AD_MODEL_OBJECT_MAPPING.xml --- a/src-db/database/sourcedata/AD_MODEL_OBJECT_MAPPING.xml Mon Aug 01 12:02:07 2011 +0200 +++ b/src-db/database/sourcedata/AD_MODEL_OBJECT_MAPPING.xml Fri Jul 29 10:18:01 2011 +0200 @@ -960,16 +960,6 @@ <!--800947--> <ISDEFAULT><![CDATA[Y]]></ISDEFAULT> <!--800947--></AD_MODEL_OBJECT_MAPPING> -<!--800948--><AD_MODEL_OBJECT_MAPPING> -<!--800948--> <AD_MODEL_OBJECT_MAPPING_ID><![CDATA[800948]]></AD_MODEL_OBJECT_MAPPING_ID> -<!--800948--> <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID> -<!--800948--> <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID> -<!--800948--> <ISACTIVE><![CDATA[Y]]></ISACTIVE> -<!--800948--> <AD_MODEL_OBJECT_ID><![CDATA[800742]]></AD_MODEL_OBJECT_ID> -<!--800948--> <MAPPINGNAME><![CDATA[/ad_reports/ReportTrialBalanceDetail.html]]></MAPPINGNAME> -<!--800948--> <ISDEFAULT><![CDATA[Y]]></ISDEFAULT> -<!--800948--></AD_MODEL_OBJECT_MAPPING> - <!--800952--><AD_MODEL_OBJECT_MAPPING> <!--800952--> <AD_MODEL_OBJECT_MAPPING_ID><![CDATA[800952]]></AD_MODEL_OBJECT_MAPPING_ID> <!--800952--> <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID> @@ -4350,4 +4340,14 @@ <!--FF479B8708CB473F8C3D91DF17B68B0B--> <ISDEFAULT><![CDATA[N]]></ISDEFAULT> <!--FF479B8708CB473F8C3D91DF17B68B0B--></AD_MODEL_OBJECT_MAPPING> +<!--FF808181316C298101316C3F6E7F0013--><AD_MODEL_OBJECT_MAPPING> +<!--FF808181316C298101316C3F6E7F0013--> <AD_MODEL_OBJECT_MAPPING_ID><![CDATA[FF808181316C298101316C3F6E7F0013]]></AD_MODEL_OBJECT_MAPPING_ID> +<!--FF808181316C298101316C3F6E7F0013--> <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID> +<!--FF808181316C298101316C3F6E7F0013--> <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID> +<!--FF808181316C298101316C3F6E7F0013--> <ISACTIVE><![CDATA[Y]]></ISACTIVE> +<!--FF808181316C298101316C3F6E7F0013--> <AD_MODEL_OBJECT_ID><![CDATA[FF808181316BE3F001316C15D3D1000D]]></AD_MODEL_OBJECT_ID> +<!--FF808181316C298101316C3F6E7F0013--> <MAPPINGNAME><![CDATA[/ad_reports/ReportTrialBalanceDetail.html]]></MAPPINGNAME> +<!--FF808181316C298101316C3F6E7F0013--> <ISDEFAULT><![CDATA[Y]]></ISDEFAULT> +<!--FF808181316C298101316C3F6E7F0013--></AD_MODEL_OBJECT_MAPPING> + </data> diff -r a185170cc1bf -r ef9cf705fa64 src-db/database/sourcedata/AD_PROCESS.xml --- a/src-db/database/sourcedata/AD_PROCESS.xml Mon Aug 01 12:02:07 2011 +0200 +++ b/src-db/database/sourcedata/AD_PROCESS.xml Fri Jul 29 10:18:01 2011 +0200 @@ -2918,13 +2918,13 @@ <!--800091--> <NAME><![CDATA[ReportTrialBalanceDetail]]></NAME> <!--800091--> <DESCRIPTION><![CDATA[ReportTrialBalanceDetail]]></DESCRIPTION> <!--800091--> <HELP><![CDATA[ReportTrialBalanceDetail]]></HELP> -<!--800091--> <ACCESSLEVEL><![CDATA[3]]></ACCESSLEVEL> +<!--800091--> <ACCESSLEVEL><![CDATA[1]]></ACCESSLEVEL> <!--800091--> <ISUSERSTARTABLE><![CDATA[N]]></ISUSERSTARTABLE> <!--800091--> <ISREPORT><![CDATA[Y]]></ISREPORT> <!--800091--> <ISDIRECTPRINT><![CDATA[N]]></ISDIRECTPRINT> -<!--800091--> <CLASSNAME><![CDATA[ad_reports/ReportTrialBalanceDetail.html]]></CLASSNAME> <!--800091--> <ISBACKGROUND><![CDATA[N]]></ISBACKGROUND> <!--800091--> <ISJASPER><![CDATA[N]]></ISJASPER> +<!--800091--> <ISEXTERNALSERVICE><![CDATA[N]]></ISEXTERNALSERVICE> <!--800091--> <AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID> <!--800091--> <UIPATTERN><![CDATA[M]]></UIPATTERN> <!--800091--></AD_PROCESS> diff -r a185170cc1bf -r ef9cf705fa64 src/org/openbravo/erpCommon/ad_reports/ReportTrialBalance.html --- a/src/org/openbravo/erpCommon/ad_reports/ReportTrialBalance.html Mon Aug 01 12:02:07 2011 +0200 +++ b/src/org/openbravo/erpCommon/ad_reports/ReportTrialBalance.html Fri Jul 29 10:18:01 2011 +0200 @@ -251,13 +251,69 @@ function onResizeDo(){ resizeArea(); } - function submitCommandWithMarkChecked(elementValue){ - var frm = document.frmMain; - markCheckedAllElements(frm.inpcBPartnerId_IN); - markCheckedAllElements(frm.inpcProjectId_IN); - markCheckedAllElements(frm.inpmProductId_IN); - submitCommandFormParameter('FIND', frm.inpcElementValueIdFrom, elementValue,false, frm, 'ReportGeneralLedger.html', '_self', false, true); + + function openTabToGeneralLedgerReport(procId, recordId){ + var frm = document.frmMain; + markCheckedAllElements(frm.inpcBPartnerId_IN); + markCheckedAllElements(frm.inpcProjectId_IN); + markCheckedAllElements(frm.inpmProductId_IN); + + var myframe = getFrame('LayoutMDI') || top.opener; + if (myframe) { + myframe.OB.RemoteCallManager.call('org.openbravo.client.application.ComputeTranslatedNameActionHandler', {}, {'processId': procId}, + function(response, data, request){ + myframe.OB.Layout.ViewManager.openView('OBClassicWindow', { + command: 'FIND', + icon: '[SKINIMG]../../org.openbravo.client.application/images/application-menu/iconReport.png', + id: procId, + obManualURL: '/ad_reports/ReportGeneralLedger.html?inpDateFrom=' + frm.inpDateFrom.value + + '&inpDateTo=' + frm.inpDateTo.value + '&inpOrg=' + frm.inpOrg.value + '&inpcAcctSchemaId=' + + frm.inpcAcctSchemaId.value + '&inpcElementValueIdFrom=' + recordId + '&inpcElementValueIdTo=' + frm.inpcElementValueIdTo.value, + processId: procId, + tabTitle: data.processTitle, + type: 'report', + viewId: 'OBClassicWindow' + }); + }); + } } + function openTabToReportTrialBalanceDetails(procId, recordId){ + var frm = document.frmMain; + var bPartner = frm.inpcBPartnerId_IN.value, mProduct = frm.inpmProductId_IN.value, c_Project = frm.inpcProjectId_IN.value; + markCheckedAllElements(frm.inpcBPartnerId_IN); + markCheckedAllElements(frm.inpcProjectId_IN); + markCheckedAllElements(frm.inpmProductId_IN); + + var manualURL = '/ad_reports/ReportTrialBalanceDetail.html?inpDateFrom=' + frm.inpDateFrom.value + + '&inpDateTo=' + frm.inpDateTo.value + '&inpOrg=' + frm.inpOrg.value + '&inpLevel=' + frm.inpLevel.value + + '&inpcAccountId=' + recordId + '&inpcAcctSchemaId=' + frm.inpcAcctSchemaId.value; + if (bPartner.length == 0){ + manualURL.concat('&inpcBPartnerId_IN=' + bPartner); + } + if (mProduct.length == 0){ + manualURL.concat('&inpcBPartnerId_IN=' + mProduct); + } + if (c_Project.length == 0){ + manualURL.concat('&inpcBPartnerId_IN=' + c_Project); + } + + var myframe = getFrame('LayoutMDI') || top.opener; + if (myframe) { + myframe.OB.RemoteCallManager.call('org.openbravo.client.application.ComputeTranslatedNameActionHandler', {}, {'processId': procId}, + function(response, data, request){ + myframe.OB.Layout.ViewManager.openView('OBClassicWindow', { + command: 'DEFAULT', + icon: '[SKINIMG]../../org.openbravo.client.application/images/application-menu/iconReport.png', + id: procId, + obManualURL: manualURL, + processId: procId, + tabTitle: data.processTitle, + type: 'report', + viewId: 'OBClassicWindow' + }); + }); + } + } </script> </head> @@ -931,7 +987,7 @@ <span id="showExpand" style="display: table-cell; display: -moz-inline-box;"><a href="#" onclick="updateData('OPEN', 'hhqq');return false;" onMouseOver="window.status='Open';return true;" onMouseOut="window.status='';return true;" id="expandButton"> <span id="buttonTreemmm" class="datawarehouseclose"></span> </a></span> - <a href="#" onclick="submitCommandWithMarkChecked('xx');return false;" onmouseover="window.status='General Ledger';return true;" onmouseout="window.status='';return true;" class="LabelLink" id="fieldId1"> + <a href="#" onclick="openTabToGeneralLedgerReport('800001', 'xx');return false;" onmouseover="window.status='General Ledger';return true;" onmouseout="window.status='';return true;" class="LabelLink" id="fieldId1"> <span id="fieldAccount">xx70000</span> </a> <span id="fieldDescAccount">xx600</span> @@ -942,7 +998,7 @@ <td width="105" id="fieldAmtacctcr" class="DataGrid_Body_Cell_Amount">xx14500.34</td> <td width="105" id="fieldSaldoFinal" class="DataGrid_Body_Cell_Amount">xx14500.34</td> <td width="70" class="DataGrid_Body_Cell"> - <a href="#" onclick="validate(); submitCommandFormParameter('DEFAULT', document.frmMain.inpcAccountId, 'xx', false, document.frmMain, 'ReportTrialBalanceDetail.html', '_self', false, true);return false;" onmouseover="window.status='General Ledger';return true;" onmouseout="window.status='';return true;" class="LabelLink" id="fieldId2">Detail</a> + <a href="#" onclick="validate(); openTabToReportTrialBalanceDetails('800091', 'xx');return false;" onmouseover="window.status='General Ledger';return true;" onmouseout="window.status='';return true;" class="LabelLink" id="fieldId2">Detail</a> </td> </tr> </div> diff -r a185170cc1bf -r ef9cf705fa64 src/org/openbravo/erpCommon/ad_reports/ReportTrialBalanceDetail.java --- a/src/org/openbravo/erpCommon/ad_reports/ReportTrialBalanceDetail.java Mon Aug 01 12:02:07 2011 +0200 +++ b/src/org/openbravo/erpCommon/ad_reports/ReportTrialBalanceDetail.java Fri Jul 29 10:18:01 2011 +0200 @@ -29,6 +29,8 @@ import org.openbravo.base.filter.IsIDFilter; import org.openbravo.base.secureApp.HttpSecureAppServlet; import org.openbravo.base.secureApp.VariablesSecureApp; +import org.openbravo.base.structure.BaseOBObject; +import org.openbravo.dal.service.OBDal; import org.openbravo.erpCommon.businessUtility.Tree; import org.openbravo.erpCommon.businessUtility.WindowTabs; import org.openbravo.erpCommon.utility.DateTimeData; @@ -129,12 +131,21 @@ String strAccountName = ReportTrialBalanceDetailData.selectAccountName(this, strId); String strAccountCode = ReportTrialBalanceDetailData.selectAccountCode(this, strId); - data = ReportTrialBalanceDetailData.select(this, strAccountName, strAccountCode, strOrg, - strOrgFamily, Utility.getContext(this, vars, "#User_Client", "ReportTrialBalanceDetail"), - Utility.getContext(this, vars, "#AccessibleOrgTree", "ReportTrialBalanceDetail"), - strIdFamily, strDateFrom, DateTimeData.nDaysAfter(this, strDateTo, "1"), - strcAcctSchemaId, strcBpartnerId, strmProductId, strcProjectId); - + if (!ReportTrialBalanceDetailData.getOrganizationCalendarOwner(this, strOrg).isEmpty()) { + data = ReportTrialBalanceDetailData.select(this, strAccountName, strAccountCode, strOrg, + strOrgFamily, + Utility.getContext(this, vars, "#User_Client", "ReportTrialBalanceDetail"), + Utility.getContext(this, vars, "#AccessibleOrgTree", "ReportTrialBalanceDetail"), + strIdFamily, strDateFrom, DateTimeData.nDaysAfter(this, strDateTo, "1"), + strcAcctSchemaId, strcBpartnerId, strmProductId, strcProjectId); + } else { + data = ReportTrialBalanceDetailData.selectOrgWithNotCal(this, strAccountName, + strAccountCode, strOrgFamily, + Utility.getContext(this, vars, "#User_Client", "ReportTrialBalanceDetail"), + Utility.getContext(this, vars, "#AccessibleOrgTree", "ReportTrialBalanceDetail"), + strIdFamily, strDateFrom, DateTimeData.nDaysAfter(this, strDateTo, "1"), + strcAcctSchemaId, strcBpartnerId, strmProductId, strcProjectId, vars.getLanguage()); + } } ToolBar toolbar = new ToolBar(this, vars.getLanguage(), "ReportTrialBalanceDetail", false, "", @@ -179,6 +190,10 @@ return Tree.getMembers(this, strTree, strChild); } + public <T extends BaseOBObject> T getObject(Class<T> t, String strId) { + return OBDal.getInstance().get(t, strId); + } + public String getServletInfo() { return "Servlet ReportTrialBalanceDetail. This Servlet was made by mirurita"; } diff -r a185170cc1bf -r ef9cf705fa64 src/org/openbravo/erpCommon/ad_reports/ReportTrialBalanceDetail_data.xsql --- a/src/org/openbravo/erpCommon/ad_reports/ReportTrialBalanceDetail_data.xsql Mon Aug 01 12:02:07 2011 +0200 +++ b/src/org/openbravo/erpCommon/ad_reports/ReportTrialBalanceDetail_data.xsql Fri Jul 29 10:18:01 2011 +0200 @@ -67,6 +67,49 @@ <Parameter name="mProductId" optional="true" type="argument" after="AND 1=1"><![CDATA[ AND F.M_PRODUCT_ID IN]]></Parameter> <Parameter name="cProjectId" optional="true" type="argument" after="AND 1=1"><![CDATA[ AND F.C_PROJECT_ID IN]]></Parameter> </SqlMethod> + <SqlMethod name="selectOrgWithNotCal" type="preparedStatement" return="multiple"> + <SqlMethodComment></SqlMethodComment> + <Sql> + <![CDATA[ + SELECT TO_CHAR(F.DATEACCT, 'YYYY') AS YEAR, MT.NAME AS PERIODNAME, + SUM(F.AMTACCTDR) AS AMTACCTDR, SUM(F.AMTACCTCR) AS AMTACCTCR, + ? AS ACCOUNTNAME, ? AS ACCOUNTCODE + FROM C_ELEMENTVALUE EV JOIN FACT_ACCT F ON (EV.C_ELEMENTVALUE_ID=F.ACCOUNT_ID) + LEFT JOIN C_BPARTNER ON f.C_BPARTNER_ID = C_BPARTNER.C_BPARTNER_ID + LEFT JOIN M_PRODUCT ON f.M_PRODUCT_ID = M_PRODUCT.M_PRODUCT_ID + LEFT JOIN C_PROJECT ON f.C_PROJECT_ID = C_PROJECT.C_PROJECT_ID + LEFT JOIN AD_MONTH M ON TO_NUMBER(M.VALUE) = TO_NUMBER(TO_CHAR(F.DATEACCT, 'MM')) + LEFT JOIN AD_MONTH_TRL MT ON M.AD_MONTH_ID = MT.AD_MONTH_ID + WHERE F.ACCOUNT_ID = EV.C_ELEMENTVALUE_ID + AND f.AD_ORG_ID IN('2') + AND F.AD_CLIENT_ID IN ('1') + AND F.AD_ORG_ID IN('1') + AND F.ACCOUNT_ID IN ('3') + AND 1=1 + AND F.FACTACCTTYPE <> 'R' + AND F.FACTACCTTYPE <> 'C' + AND F.FACTACCTTYPE <> 'O' + AND F.ISACTIVE = 'Y' + AND MT.AD_LANGUAGE = ? + GROUP BY TO_CHAR(F.DATEACCT, 'YYYY'), M.VALUE, MT.NAME + HAVING SUM(F.AMTACCTDR) <> 0 OR SUM(F.AMTACCTCR) <> 0 + ORDER BY TO_CHAR(F.DATEACCT, 'YYYY'), TO_NUMBER(M.VALUE), MT.NAME + ]]></Sql> + <Field name="rownum" value="count"/> + <Parameter name="accountName"/> + <Parameter name="accountCode"/> + <Parameter name="orgFamily" type="replace" optional="true" after="f.AD_ORG_ID IN(" text="'2'"/> + <Parameter name="adUserClient" type="replace" optional="true" after="F.AD_CLIENT_ID IN (" text="'1'"/> + <Parameter name="adUserOrg" type="replace" optional="true" after="F.AD_ORG_ID IN(" text="'1'"/> + <Parameter name="accountSet" type="replace" optional="true" after="AND F.ACCOUNT_ID IN (" text="'3'"/> + <Parameter name="parDateFrom" optional="true" after="AND 1=1"><![CDATA[AND DATEACCT >= TO_DATE(?) ]]></Parameter> + <Parameter name="parDateTo" optional="true" after="AND 1=1"><![CDATA[AND DATEACCT < TO_DATE(?) ]]></Parameter> + <Parameter name="acctSchema" optional="true" after="AND 1=1"><![CDATA[ AND F.C_ACCTSCHEMA_ID = ?]]></Parameter> + <Parameter name="cBpartnerId" optional="true" type="argument" after="AND 1=1"><![CDATA[ AND F.C_BPARTNER_ID IN]]></Parameter> + <Parameter name="mProductId" optional="true" type="argument" after="AND 1=1"><![CDATA[ AND F.M_PRODUCT_ID IN]]></Parameter> + <Parameter name="cProjectId" optional="true" type="argument" after="AND 1=1"><![CDATA[ AND F.C_PROJECT_ID IN]]></Parameter> + <Parameter name="language"/> + </SqlMethod> <SqlMethod name="set" type="constant" return="multiple"> <SqlMethodComment></SqlMethodComment> @@ -118,4 +161,12 @@ </Sql> <Parameter name="id"/> </SqlMethod> + <SqlMethod name="getOrganizationCalendarOwner" type="preparedStatement" return="string" default=""> + <SqlMethodComment></SqlMethodComment> ------------------------------------------------------------------------------ Got Input? Slashdot Needs You. Take our quick survey online. Come on, we don't ask for help often. Plus, you'll get a chance to win $100 to spend on ThinkGeek. http://p.sf.net/sfu/slashdot-survey _______________________________________________ Openbravo-commits mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/openbravo-commits
