details: /erp/devel/int/rev/ca99fd5a20ba
changeset: 6680:ca99fd5a20ba
user: Sivaraman Rajagopal <sivaraman.rajagopal <at> openbravo.com>
date: Fri Mar 12 13:16:34 2010 +0530
summary: Fixes issue 12337: Work Effort >> Production Run >> Product. The
Order UOM doesn't appear.
details: /erp/devel/int/rev/01b819c88445
changeset: 6681:01b819c88445
user: Rajagopal Baskaran <rajagopal.baskaran <at> openbravo.com>
date: Fri Mar 12 13:33:07 2010 +0530
summary: 12588: If the same accounting schema is assigend for more than one
org, a vendor is created with many entries on the accounting tab
details: /erp/devel/int/rev/0080c6e2b31f
changeset: 6682:0080c6e2b31f
user: Sathiyan Sivaprakasam <sathiyan.sivaprakasam <at> openbravo.com>
date: Fri Mar 12 14:24:04 2010 +0530
summary: Fixes Issue 12627: UI Changes for Tax posting expense enhancement
not properly named
details: /erp/devel/int/rev/09d99b23ffa2
changeset: 6683:09d99b23ffa2
user: David Alsasua <david.alsasua <at> openbravo.com>
date: Fri Mar 12 11:12:01 2010 +0100
summary: Fixes issue 12468: Uncorrect cost after executing Generate Average
Cost
details: /erp/devel/int/rev/86859f5ebf4e
changeset: 6684:86859f5ebf4e
user: Antonio Moreno <antonio.moreno <at> openbravo.com>
date: Fri Mar 12 11:33:56 2010 +0100
summary: Fixed issue 12662. System rebuild will not get blocked due to the
queries in VariablesSecureApp.java class anymore.
diffstat:
src-db/database/model/functions/MA_PRODUCTIONRUN_STANDARD.xml | 7 +-
src-db/database/model/functions/M_GENERATE_AVERAGE_COSTS.xml | 150 ++++++++++
src-db/database/model/triggers/C_BPARTNER_TRG.xml | 3 +-
src-db/database/sourcedata/AD_COLUMN.xml | 8 +-
src-db/database/sourcedata/AD_ELEMENT.xml | 12 +-
src-db/database/sourcedata/AD_FIELD.xml | 14 +-
src-db/database/sourcedata/AD_MESSAGE.xml | 77 +++++
src/org/openbravo/base/secureApp/VariablesSecureApp.java | 42 +-
8 files changed, 274 insertions(+), 39 deletions(-)
diffs (truncated from 516 to 300 lines):
diff -r be90e4dff316 -r 86859f5ebf4e
src-db/database/model/functions/MA_PRODUCTIONRUN_STANDARD.xml
--- a/src-db/database/model/functions/MA_PRODUCTIONRUN_STANDARD.xml Thu Mar
11 19:32:32 2010 +0100
+++ b/src-db/database/model/functions/MA_PRODUCTIONRUN_STANDARD.xml Fri Mar
12 11:33:56 2010 +0100
@@ -201,7 +201,7 @@
Createdby, Isactive, M_ProductionPlan_ID, M_Product_ID,
Productiontype, MovementQty, Updated, Updatedby,
C_UOM_ID, M_Locator_ID,
- Line, M_AttributeSetInstance_ID
+ Line, M_AttributeSetInstance_ID, M_Product_UOM_ID, QuantityOrder
)
VALUES
(
@@ -214,6 +214,7 @@
WHERE L.M_WAREHOUSE_ID =
W.M_WAREHOUSE_ID
AND W.AD_ORG_ID =
v_PlanOrg_ID)),
v_Line, (CASE WHEN Cur_WRPProduct.AttrSetValueType='D' THEN
Cur_WRPProduct.M_AttributeSetInstance_ID ELSE NULL END)
+ ,Cur_WRPProduct.M_Product_UOM_ID, Cur_WRPProduct.QuantityOrder
)
;
--v_Line:=v_Line + 10;
@@ -377,14 +378,14 @@
M_ProductionLine_ID, M_ProductionPlan_ID, Line,
AD_Client_ID,
AD_Org_ID, IsActive, Created, CreatedBy,
Updated, UpdatedBy, M_Product_ID, MovementQty,
- ProductionType, C_UOM_ID, M_Locator_ID
+ ProductionType, C_UOM_ID, M_Locator_ID, M_Product_UOM_ID,
QuantityOrder
)
VALUES
(
v_ProductionLine_ID, v_Record_ID, v_Line,
Cur_WRPUsed.Client_ID,
Cur_WRPUsed.Org_ID, 'Y', now(), '0',
now(), '0', Cur_WRPUsed.M_Product_ID,( CASE v_NoQty WHEN
'Y' THEN 0 ELSE v_DoneQuantity*Cur_WRPUsed.MovementQty END),
- '-', Cur_WRPUsed.C_UOM_ID, Cur_WRPUsed.M_Locator_ID
+ '-', Cur_WRPUsed.C_UOM_ID, Cur_WRPUsed.M_Locator_ID,
Cur_WRPUsed.M_Product_UOM_ID, Cur_WRPUsed.QuantityOrder
)
;
END IF;
diff -r be90e4dff316 -r 86859f5ebf4e
src-db/database/model/functions/M_GENERATE_AVERAGE_COSTS.xml
--- a/src-db/database/model/functions/M_GENERATE_AVERAGE_COSTS.xml Thu Mar
11 19:32:32 2010 +0100
+++ b/src-db/database/model/functions/M_GENERATE_AVERAGE_COSTS.xml Fri Mar
12 11:33:56 2010 +0100
@@ -32,6 +32,9 @@
v_User VARCHAR2(32);
v_Price NUMBER;
v_DateOld DATE;
+ v_MinDateCosting DATE;
+ v_FirstIteration BOOLEAN;
+ v_CheckResultStr VARCHAR2(2000):='';
v_CumQty NUMBER;
v_Processed VARCHAR2(60) ;
v_count NUMBER;
@@ -48,6 +51,7 @@
Cur_ProdCost RECORD;
Cur_PriceList RECORD;
Cur_ManualCost RECORD;
+ Cur_Docs RECORD;
Cur_OldCost RECORD;
v_rowcount NUMBER;
BEGIN
@@ -86,6 +90,152 @@
INTO v_BaseCurrency
FROM AD_CLIENT
WHERE AD_CLIENT.AD_CLIENT_ID = v_Client;
+
+ -- BEGIN CHECK IF COST USED TO POST A DOCUMENT
+ -- If a document has been posted, and in the entry the costing has been
used to calculate any amount,
+ -- process is not allowed to be launched.
+ SELECT MIN(DATEFROM)
+ INTO v_MinDateCosting
+ FROM M_COSTING
+ WHERE ISPERMANENT='N'
+ AND ISMANUAL='N'
+ AND COSTTYPE='AV'
+ AND ISPRODUCTION = 'N'
+ AND AD_CLIENT_ID = v_Client;
+
+ v_CheckResultStr := '';
+ SELECT MAX(MOVEMENTDATE) INTO v_Date FROM M_MOVEMENT WHERE
AD_CLIENT_ID=v_Client AND POSTED='Y';
+ IF (v_MinDateCosting <= v_Date) THEN
+ v_FirstIteration:=TRUE;
+ IF (COALESCE(length(v_CheckResultStr),0) > 0) THEN
v_CheckResultStr:=v_CheckResultStr || '<br/>'; END IF;
+ v_CheckResultStr:=v_CheckResultStr || '@Oneormore@ @MaterialMovement@
@PostedUsingCost@ @SOS_DOCUMENTNO@ ';
+ FOR Cur_Docs IN
+ (
+ SELECT DISTINCT DOCUMENTNO
+ FROM M_MOVEMENT
+ WHERE AD_CLIENT_ID=v_Client AND POSTED='Y'
+ AND MOVEMENTDATE > TO_DATE(v_MinDateCosting)
+ ORDER BY DOCUMENTNO
+ )
+ LOOP
+ IF (v_FirstIteration) THEN
+ v_FirstIteration:=FALSE;
+ ELSE
+ v_CheckResultStr := v_CheckResultStr || ', ';
+ END IF;
+ v_CheckResultStr := v_CheckResultStr || Cur_Docs.DOCUMENTNO;
+ END LOOP;
+ v_CheckResultStr:=v_CheckResultStr || '.';
+ END IF;
+
+ SELECT MAX(MOVEMENTDATE) INTO v_Date FROM M_INVENTORY WHERE
AD_CLIENT_ID=v_Client AND POSTED='Y';
+ IF (v_MinDateCosting <= v_Date) THEN
+ v_FirstIteration:=TRUE;
+ IF (COALESCE(length(v_CheckResultStr),0) > 0) THEN
v_CheckResultStr:=v_CheckResultStr || '<br/>'; END IF;
+ v_CheckResultStr:=v_CheckResultStr || '@Oneormore@ @MaterialInventory@
@PostedUsingCost@ @Name@ ';
+ FOR Cur_Docs IN
+ (
+ SELECT DISTINCT I.NAME AS INVENTORY, W.NAME AS WAREHOUSE
+ FROM M_INVENTORY I, M_WAREHOUSE W
+ WHERE I.M_WAREHOUSE_ID = W.M_WAREHOUSE_ID
+ AND I.AD_CLIENT_ID=v_Client AND I.POSTED='Y'
+ AND I.MOVEMENTDATE > TO_DATE(v_MinDateCosting)
+ ORDER BY I.NAME, W.NAME
+ )
+ LOOP
+ IF (v_FirstIteration) THEN
+ v_FirstIteration:=FALSE;
+ ELSE
+ v_CheckResultStr := v_CheckResultStr || ', ';
+ END IF;
+ v_CheckResultStr := v_CheckResultStr || Cur_Docs.INVENTORY ||
'(@Warehouse@ ' || Cur_Docs.WAREHOUSE || ')';
+ END LOOP;
+ v_CheckResultStr:=v_CheckResultStr || '.';
+ END IF;
+
+ SELECT MAX(MOVEMENTDATE) INTO v_Date FROM M_PRODUCTION WHERE
AD_CLIENT_ID=v_Client AND POSTED='Y';
+ IF (v_MinDateCosting <= v_Date) THEN
+ v_FirstIteration:=TRUE;
+ IF (COALESCE(length(v_CheckResultStr),0) > 0) THEN
v_CheckResultStr:=v_CheckResultStr || '<br/>'; END IF;
+ v_CheckResultStr:=v_CheckResultStr || '@Oneormore@ @MaterialProduction@
@PostedUsingCost@ @SOS_DOCUMENTNO@ ';
+ FOR Cur_Docs IN
+ (
+ SELECT DISTINCT DOCUMENTNO
+ FROM M_PRODUCTION
+ WHERE AD_CLIENT_ID=v_Client AND POSTED='Y'
+ AND MOVEMENTDATE > TO_DATE(v_MinDateCosting)
+ ORDER BY DOCUMENTNO
+ )
+ LOOP
+ IF (v_FirstIteration) THEN
+ v_FirstIteration:=FALSE;
+ ELSE
+ v_CheckResultStr := v_CheckResultStr || ', ';
+ END IF;
+ v_CheckResultStr := v_CheckResultStr || Cur_Docs.DOCUMENTNO;
+ END LOOP;
+ v_CheckResultStr:=v_CheckResultStr || '.';
+ END IF;
+
+ SELECT MAX(DATEACCT) INTO v_Date FROM M_INOUT WHERE ISSOTRX='N' AND
AD_CLIENT_ID=v_Client AND POSTED='Y';
+ IF (v_MinDateCosting <= v_Date) THEN
+ v_FirstIteration:=TRUE;
+ IF (COALESCE(length(v_CheckResultStr),0) > 0) THEN
v_CheckResultStr:=v_CheckResultStr || '<br/>'; END IF;
+ v_CheckResultStr:=v_CheckResultStr || '@Oneormore@ @MaterialReceipt@
@PostedUsingCost@ @SOS_DOCUMENTNO@ ';
+ FOR Cur_Docs IN
+ (
+ SELECT DISTINCT DOCUMENTNO
+ FROM M_INOUT
+ WHERE ISSOTRX='N'
+ AND AD_CLIENT_ID=v_Client AND POSTED='Y'
+ AND DATEACCT > TO_DATE(v_MinDateCosting)
+ ORDER BY DOCUMENTNO
+ )
+ LOOP
+ IF (v_FirstIteration) THEN
+ v_FirstIteration:=FALSE;
+ ELSE
+ v_CheckResultStr := v_CheckResultStr || ', ';
+ END IF;
+ v_CheckResultStr := v_CheckResultStr || Cur_Docs.DOCUMENTNO;
+ END LOOP;
+ v_CheckResultStr:=v_CheckResultStr || '.';
+ END IF;
+
+ SELECT MAX(IO.DATEACCT) INTO v_Date FROM M_MATCHINV M, M_INOUTLINE IOL,
M_INOUT IO
+ WHERE M.AD_CLIENT_ID=v_Client AND M.POSTED='Y'
+ AND IOL.M_INOUTLINE_ID = M.M_INOUTLINE_ID AND IO.M_INOUT_ID =
IOL.M_INOUT_ID;
+ IF (v_MinDateCosting <= v_Date) THEN
+ v_FirstIteration:=TRUE;
+ IF (COALESCE(length(v_CheckResultStr),0) > 0) THEN
v_CheckResultStr:=v_CheckResultStr || '<br/>'; END IF;
+ v_CheckResultStr:=v_CheckResultStr || '@Oneormore@ @MatchedInvoices@
@PostedUsingCost@ @Date@ ';
+ FOR Cur_Docs IN
+ (
+ SELECT DISTINCT IO.DATEORDERED, I.DOCUMENTNO
+ FROM M_MATCHINV M, M_INOUTLINE IOL, M_INOUT IO, C_INVOICE I,
C_INVOICELINE IL
+ WHERE M.AD_CLIENT_ID=v_Client AND M.POSTED='Y'
+ AND IL.C_INVOICELINE_ID = M.C_INVOICELINE_ID
+ AND I.C_INVOICE_ID = IL.C_INVOICE_ID
+ AND IOL.M_INOUTLINE_ID = M.M_INOUTLINE_ID AND IO.M_INOUT_ID =
IOL.M_INOUT_ID
+ AND IO.DATEACCT > TO_DATE(v_MinDateCosting)
+ ORDER BY IO.DATEORDERED, I.DOCUMENTNO
+ )
+ LOOP
+ IF (v_FirstIteration) THEN
+ v_FirstIteration:=FALSE;
+ ELSE
+ v_CheckResultStr := v_CheckResultStr || ', ';
+ END IF;
+ v_CheckResultStr := v_CheckResultStr || Cur_Docs.DATEORDERED || ' ('
|| '@Invoice@ @SOS_DOCUMENTNO@' || Cur_Docs.DOCUMENTNO || ')';
+ END LOOP;
+ v_CheckResultStr:=v_CheckResultStr || '.';
+ END IF;
+
+ IF (COALESCE(length(v_CheckResultStr),0) > 0) THEN
+ RAISE_APPLICATION_ERROR(-20000, v_CheckResultStr);
+ END IF;
+ -- END CHECK IF COST USED TO POST A DOCUMENT
+
DELETE
FROM M_COSTING
WHERE ISPERMANENT='N'
diff -r be90e4dff316 -r 86859f5ebf4e
src-db/database/model/triggers/C_BPARTNER_TRG.xml
--- a/src-db/database/model/triggers/C_BPARTNER_TRG.xml Thu Mar 11 19:32:32
2010 +0100
+++ b/src-db/database/model/triggers/C_BPARTNER_TRG.xml Fri Mar 12 11:33:56
2010 +0100
@@ -59,7 +59,7 @@
v_C_AcctSchema_ID:=null;
FOR Cur_Defaults IN
(
- SELECT distinct AD_IsOrgIncluded(:new.AD_Org_ID, a.AD_Org_ID,
:new.AD_Client_ID),
+ SELECT AD_IsOrgIncluded(:new.AD_Org_ID, a.AD_Org_ID,
:new.AD_Client_ID),
a.ad_sequence_bp_id, a.isbpnewaccount, a.acct_length, a.subacct_length,
a.createdby, a.updatedby, a.C_AcctSchema_ID,
d1.ad_client_id, d1.C_Receivable_Acct, d1.C_Prepayment_Acct,
d1.V_Liability_Acct, d1.V_Liability_Services_Acct,
d1.V_Prepayment_Acct, d1.status
@@ -167,6 +167,7 @@
:new.AD_Client_ID, :new.AD_Org_ID, 'Y', now(), :new.CreatedBy,
now(), :new.UpdatedBy,
Cur_Defaults.V_Liability_Acct,
Cur_Defaults.V_Liability_Services_Acct, Cur_Defaults.V_Prepayment_Acct,
Cur_Defaults.Status);
END IF;
+ v_C_AcctSchema_ID:=Cur_Defaults.C_AcctSchema_ID;
END IF;
END LOOP;
diff -r be90e4dff316 -r 86859f5ebf4e src-db/database/sourcedata/AD_COLUMN.xml
--- a/src-db/database/sourcedata/AD_COLUMN.xml Thu Mar 11 19:32:32 2010 +0100
+++ b/src-db/database/sourcedata/AD_COLUMN.xml Fri Mar 12 11:33:56 2010 +0100
@@ -241113,8 +241113,8 @@
<!--1002100115--> <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
<!--1002100115--> <ISACTIVE><![CDATA[Y]]></ISACTIVE>
<!--1002100115--> <NAME><![CDATA[Not tax-deductable]]></NAME>
-<!--1002100115--> <DESCRIPTION><![CDATA[Not Tax Deductable]]></DESCRIPTION>
-<!--1002100115--> <HELP><![CDATA[Check it if the tax is not
deductable]]></HELP>
+<!--1002100115--> <DESCRIPTION><![CDATA[Tax Not Deductible]]></DESCRIPTION>
+<!--1002100115--> <HELP><![CDATA[Check it if the tax is not
deductible]]></HELP>
<!--1002100115--> <COLUMNNAME><![CDATA[IsTaxUndeductable]]></COLUMNNAME>
<!--1002100115--> <AD_TABLE_ID><![CDATA[261]]></AD_TABLE_ID>
<!--1002100115--> <AD_REFERENCE_ID><![CDATA[20]]></AD_REFERENCE_ID>
@@ -248107,8 +248107,8 @@
<!--1AC3399CBD3A4589902AEBE005D5BCBC--> <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
<!--1AC3399CBD3A4589902AEBE005D5BCBC--> <ISACTIVE><![CDATA[Y]]></ISACTIVE>
<!--1AC3399CBD3A4589902AEBE005D5BCBC--> <NAME><![CDATA[Not Tax
Deductable]]></NAME>
-<!--1AC3399CBD3A4589902AEBE005D5BCBC--> <DESCRIPTION><![CDATA[Not Tax
Deductable]]></DESCRIPTION>
-<!--1AC3399CBD3A4589902AEBE005D5BCBC--> <HELP><![CDATA[Check it if the tax is
not deductable]]></HELP>
+<!--1AC3399CBD3A4589902AEBE005D5BCBC--> <DESCRIPTION><![CDATA[Tax Not
Deductible]]></DESCRIPTION>
+<!--1AC3399CBD3A4589902AEBE005D5BCBC--> <HELP><![CDATA[Check it if the tax is
not deductible]]></HELP>
<!--1AC3399CBD3A4589902AEBE005D5BCBC-->
<COLUMNNAME><![CDATA[Istaxundeductable]]></COLUMNNAME>
<!--1AC3399CBD3A4589902AEBE005D5BCBC-->
<AD_TABLE_ID><![CDATA[228]]></AD_TABLE_ID>
<!--1AC3399CBD3A4589902AEBE005D5BCBC-->
<AD_REFERENCE_ID><![CDATA[20]]></AD_REFERENCE_ID>
diff -r be90e4dff316 -r 86859f5ebf4e src-db/database/sourcedata/AD_ELEMENT.xml
--- a/src-db/database/sourcedata/AD_ELEMENT.xml Thu Mar 11 19:32:32 2010 +0100
+++ b/src-db/database/sourcedata/AD_ELEMENT.xml Fri Mar 12 11:33:56 2010 +0100
@@ -21047,10 +21047,10 @@
<!--1002100028--> <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
<!--1002100028--> <ISACTIVE><![CDATA[Y]]></ISACTIVE>
<!--1002100028--> <COLUMNNAME><![CDATA[IsTaxUndeductable]]></COLUMNNAME>
-<!--1002100028--> <NAME><![CDATA[Not Tax Deductable]]></NAME>
-<!--1002100028--> <PRINTNAME><![CDATA[Not Tax Deductable]]></PRINTNAME>
-<!--1002100028--> <DESCRIPTION><![CDATA[Not Tax Deductable]]></DESCRIPTION>
-<!--1002100028--> <HELP><![CDATA[Check it if the tax is not
deductable]]></HELP>
+<!--1002100028--> <NAME><![CDATA[Tax Not Deductible]]></NAME>
+<!--1002100028--> <PRINTNAME><![CDATA[Tax Not Deductible]]></PRINTNAME>
+<!--1002100028--> <DESCRIPTION><![CDATA[Tax Not Deductible]]></DESCRIPTION>
+<!--1002100028--> <HELP><![CDATA[Check it if the tax is not
deductible]]></HELP>
<!--1002100028--> <AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
<!--1002100028--></AD_ELEMENT>
@@ -22018,8 +22018,8 @@
<!--33D4F4DEADD74C48A55C08A9DCEB41B2--> <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
<!--33D4F4DEADD74C48A55C08A9DCEB41B2--> <ISACTIVE><![CDATA[Y]]></ISACTIVE>
<!--33D4F4DEADD74C48A55C08A9DCEB41B2-->
<COLUMNNAME><![CDATA[Istaxdeductable]]></COLUMNNAME>
-<!--33D4F4DEADD74C48A55C08A9DCEB41B2--> <NAME><![CDATA[Is Tax
Deductable]]></NAME>
-<!--33D4F4DEADD74C48A55C08A9DCEB41B2--> <PRINTNAME><![CDATA[Is Tax
Deductable]]></PRINTNAME>
+<!--33D4F4DEADD74C48A55C08A9DCEB41B2--> <NAME><![CDATA[Tax
Deductible]]></NAME>
+<!--33D4F4DEADD74C48A55C08A9DCEB41B2--> <PRINTNAME><![CDATA[Tax
Deductible]]></PRINTNAME>
<!--33D4F4DEADD74C48A55C08A9DCEB41B2-->
<AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
<!--33D4F4DEADD74C48A55C08A9DCEB41B2--></AD_ELEMENT>
diff -r be90e4dff316 -r 86859f5ebf4e src-db/database/sourcedata/AD_FIELD.xml
--- a/src-db/database/sourcedata/AD_FIELD.xml Thu Mar 11 19:32:32 2010 +0100
+++ b/src-db/database/sourcedata/AD_FIELD.xml Fri Mar 12 11:33:56 2010 +0100
@@ -176353,9 +176353,9 @@
<!--1002100238--> <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
<!--1002100238--> <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
<!--1002100238--> <ISACTIVE><![CDATA[Y]]></ISACTIVE>
-<!--1002100238--> <NAME><![CDATA[Not Tax Deductable]]></NAME>
-<!--1002100238--> <DESCRIPTION><![CDATA[Not Tax Deductable]]></DESCRIPTION>
-<!--1002100238--> <HELP><![CDATA[Check it if the tax is not
deductable]]></HELP>
+<!--1002100238--> <NAME><![CDATA[Tax Not Deductible]]></NAME>
+<!--1002100238--> <DESCRIPTION><![CDATA[Tax Not Deductible]]></DESCRIPTION>
+<!--1002100238--> <HELP><![CDATA[Check it if the tax is not
deductible]]></HELP>
<!--1002100238--> <ISCENTRALLYMAINTAINED><![CDATA[Y]]></ISCENTRALLYMAINTAINED>
<!--1002100238--> <AD_TAB_ID><![CDATA[174]]></AD_TAB_ID>
------------------------------------------------------------------------------
Download Intel® Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits