details: https://code.openbravo.com/erp/stable/2.50/rev/28f558eed8e5 changeset: 9801:28f558eed8e5 user: David Alsasua <david.alsasua <at> openbravo.com> date: Mon Jan 23 13:18:01 2012 +0100 summary: Fixes issue 19542. Rolls-back fix for issue 18837
details: https://code.openbravo.com/erp/stable/2.50/rev/3513d55d12b9 changeset: 9802:3513d55d12b9 user: David Alsasua <david.alsasua <at> openbravo.com> date: Tue Jan 31 11:51:27 2012 +0100 summary: Fixes issue 19542. Module-script updates incorrect invoices. In case the invoice created in complete status has been reactivated by the user, or APR module is not installed, then the module script will not modify it details: https://code.openbravo.com/erp/stable/2.50/rev/f846a181ff43 changeset: 9803:f846a181ff43 user: RM packaging bot <staff.rm <at> openbravo.com> date: Fri Feb 03 09:11:28 2012 +0000 summary: Update AD_MODULE version to 2.50MP37.1 details: https://code.openbravo.com/erp/stable/2.50/rev/7977cc6f0431 changeset: 9804:7977cc6f0431 user: RM packaging bot <staff.rm <at> openbravo.com> date: Fri Feb 03 09:11:28 2012 +0000 summary: Added tag 2.50MP37.1 for changeset f846a181ff43 details: https://code.openbravo.com/erp/stable/2.50/rev/0a2ef6a2db59 changeset: 9805:0a2ef6a2db59 user: RM packaging bot <staff.rm <at> openbravo.com> date: Fri Feb 03 09:11:29 2012 +0000 summary: Added signature for changeset 7977cc6f0431 details: https://code.openbravo.com/erp/stable/2.50/rev/bc6231bad947 changeset: 9806:bc6231bad947 user: RM packaging bot <staff.rm <at> openbravo.com> date: Fri Feb 03 16:48:39 2012 +0000 summary: Merge temporary head for 2.50MP37.1 diffstat: .hgsigs | 3 + .hgtags | 3 + src-db/database/model/functions/AD_TABLE_IMPORT.xml | 28 +- src-db/database/model/functions/C_BANKSTATEMENT_POST.xml | 2 +- src-db/database/model/functions/C_CHANGEPROJECTSTATUSTOORDER.xml | 8 +- src-db/database/model/functions/C_INVOICE_CREATERECEIPT.xml | 3 + src-db/database/model/functions/C_INVOICE_POST.xml | 2 +- src-db/database/model/functions/C_VALIDCOMBINATION_CLONE.xml | 16 +- src-db/database/model/functions/C_VALIDCOMBINATION_INSERT.xml | 2 +- src-db/database/model/tables/AD_USER.xml | 2 +- src-db/database/model/triggers/C_PROJECT_TRG.xml | 16 +- src-db/database/model/triggers/M_PRODUCT_TRG.xml | 10 + src-db/database/model/triggers/M_WAREHOUSE_TRG.xml | 11 + src-db/database/sourcedata/AD_COLUMN.xml | 3 +- src-db/database/sourcedata/AD_FIELD.xml | 12 +- src-db/database/sourcedata/AD_MESSAGE.xml | 22 + src-db/database/sourcedata/AD_MODULE.xml | 4 +- src-util/modulescript/build/classes/org/openbravo/modulescript/UpdateReversalDocumentTypes.class | 0 src-util/modulescript/build/classes/org/openbravo/modulescript/UpdateReversalDocumentTypesData.class | 0 src-util/modulescript/src/org/openbravo/modulescript/UpdateReversalDocumentTypes.java | 1 + src-util/modulescript/src/org/openbravo/modulescript/UpdateReversalDocumentTypes_Data.xsql | 15 +- src/org/openbravo/erpCommon/ad_actionButton/CreateFile_data.xsql | 1 + src/org/openbravo/erpCommon/ad_actionButton/CreateFrom_Invoice_data.xsql | 8 +- src/org/openbravo/erpCommon/ad_actionButton/CreateRegFactAcct.java | 43 +- src/org/openbravo/erpCommon/ad_actionButton/CreateRegFactAcct_data.xsql | 18 +- src/org/openbravo/erpCommon/ad_forms/DocFINFinAccTransaction.java | 163 +++++---- src/org/openbravo/erpCommon/ad_forms/DocFINFinAccTransaction_data.xsql | 32 + src/org/openbravo/erpCommon/ad_forms/DocFINPayment.java | 33 +- src/org/openbravo/erpCommon/ad_forms/DocFINPayment_data.xsql | 32 + src/org/openbravo/erpCommon/ad_forms/DocFINReconciliation.java | 48 ++- src/org/openbravo/erpCommon/ad_reports/ReportProductionCost_data.xsql | 2 +- src/org/openbravo/erpCommon/utility/WindowTreeChecks.java | 5 +- src/org/openbravo/erpCommon/utility/WindowTree_data.xsql | 11 +- src/org/openbravo/erpReports/RptM_InOut.jrxml | 151 +++++--- src/org/openbravo/erpReports/Rptm_InOut_Lines.jrxml | 8 +- 35 files changed, 523 insertions(+), 195 deletions(-) diffs (truncated from 1507 to 300 lines): diff -r 5949c24c17a8 -r bc6231bad947 .hgsigs --- a/.hgsigs Thu Dec 15 11:12:15 2011 +0000 +++ b/.hgsigs Fri Feb 03 16:48:39 2012 +0000 @@ -42,3 +42,6 @@ aab70e668acc448bc11c0bebcd7b3a35ec1a08da 0 iEYEABECAAYFAk6MJpcACgkQCX/oGf+2qkMrwACfW5iJ8sojcqnTqq/d7W8RN6A4Ei0AmwQsocf59tdPzrq7+kbeXwhMCFQz 15816c2b355a2fd77fc4f00e00170b0aaa627db6 0 iEYEABECAAYFAk6djncACgkQCX/oGf+2qkNezwCgrymU9w1xXS7t8lRe0vD1FjwUqQcAoNHdBXEqOuCA3aORWtbRqZ7N+hLY d302db790bbcf1f989ecd100069aa6257a4b9397 0 iEYEABECAAYFAk7KkgAACgkQCX/oGf+2qkPi3gCg0FBSy6AP4txrHTAptAVF+4sVQ+cAniJdy/2qR2qrVTtX0MIyHsB4ikhL +7977cc6f04317e1d0a0f47d364c1735801393f66 0 iEYEABECAAYFAk8rpMEACgkQCX/oGf+2qkMtxQCffYTUcFfT6ob8wmt5kwsfCSFoidUAoLSpbQXlcGXqpWL6fuGXIkRCBsG1 +dc04cdebcc7f42c2b3b5f7644199a3c465874897 0 iEYEABECAAYFAk7p1hAACgkQCX/oGf+2qkPDNgCgrIAzQua3CPAtXC58DxjXScTvjC8AoOcMAP3eKVBu8iZAFAtkXdXD3ok0 +625ade533d9b76e381557340e6055e8caa97607a 0 iEYEABECAAYFAk8UorMACgkQCX/oGf+2qkNHBACfT3s5sW683Fiz2KFpE4Hdoqu5ckoAoJ+vQD9L2Yfxu6qkK6dVsSlNgpno diff -r 5949c24c17a8 -r bc6231bad947 .hgtags --- a/.hgtags Thu Dec 15 11:12:15 2011 +0000 +++ b/.hgtags Fri Feb 03 16:48:39 2012 +0000 @@ -53,3 +53,6 @@ 3ba2aca73b7a2034aa87f1e7e593680d32d256e1 2.50MP34 726e45a0334b6d1e9b54b136bb1fe7ebf1da9065 2.50MP35 53fdc19c0c7b105319fbf660ad5dfb0a78b125ec 2.50MP36 +5949c24c17a81ab866982e88c9c5715fdc43daeb 2.50MP37 +f846a181ff43faa405c05c69fe7533b314f4db95 2.50MP37.1 +fc702a4e4b8af0876c157ff51342f8bbb0bfeb07 2.50MP38 diff -r 5949c24c17a8 -r bc6231bad947 src-db/database/model/functions/AD_TABLE_IMPORT.xml --- a/src-db/database/model/functions/AD_TABLE_IMPORT.xml Thu Dec 15 11:12:15 2011 +0000 +++ b/src-db/database/model/functions/AD_TABLE_IMPORT.xml Fri Feb 03 16:48:39 2012 +0000 @@ -63,6 +63,7 @@ v_IsUpdateable CHAR(1):='Y'; v_DefaultValue NVARCHAR2(2000):=''; v_SeqNo NUMBER(10) ; + v_columnNameOrg VARCHAR2(40) ; v_columnName VARCHAR2(40) ; v_TableName VARCHAR2(40) ; v_LastColumnName VARCHAR2(40) ; @@ -236,7 +237,30 @@ IF(v_columnName LIKE '%_Id') THEN v_columnName:=SUBSTR(v_columnName, 1, LENGTH(v_columnName) -3) ||'_ID'; END IF; - + -- Some columns need to have specific names for DAL to work correctly: + v_columnNameOrg:=v_columnName; + IF(v_columnName = 'AD_Org_ID') THEN + v_columnName:='Organization'; + END IF; + IF(v_columnName = 'AD_Client_ID') THEN + v_columnName:='Client'; + END IF; + IF(v_columnName = 'Created') THEN + v_columnName:='Creation Date'; + END IF; + IF(v_columnName = 'Createdby') THEN + v_columnName:='Created By'; + END IF; + IF(v_columnName = 'Updated') THEN + v_columnName:='Updated'; + END IF; + IF(v_columnName = 'Updatedby') THEN + v_columnName:='Updated By'; + END IF; + IF(v_columnName = 'Isactive') THEN + v_columnName:='Active'; + END IF; + --Check if it is necessary to recalculate positions SELECT count(*) INTO v_Aux @@ -287,7 +311,7 @@ VALUES (v_NextNo, '0', '0', 'Y', now(), '0', now(), '0', - v_columnName, v_columnName, Cur_Column.AD_Table_ID, + v_columnName,v_columnNameOrg, Cur_Column.AD_Table_ID, v_AD_Reference_ID, v_FieldLength, v_IsKey, v_IsParent, (CASE Cur_Column.Nullable WHEN 'Y' THEN 'N' ELSE 'Y' END), v_IsIdentifier, v_SeqNo, 'N', 'N', v_IsUpdateable, v_AD_Reference_Value_ID, diff -r 5949c24c17a8 -r bc6231bad947 src-db/database/model/functions/C_BANKSTATEMENT_POST.xml --- a/src-db/database/model/functions/C_BANKSTATEMENT_POST.xml Thu Dec 15 11:12:15 2011 +0000 +++ b/src-db/database/model/functions/C_BANKSTATEMENT_POST.xml Fri Feb 03 16:48:39 2012 +0000 @@ -216,7 +216,7 @@ exception when others then ROLLBACK; v_ResultStr:='@ErrorUnoprocessingBS@ Line:' ||CUR_MANAGEMENTLINES.LINE|| ': ' || SQLERRM || ' - ' || v_Message; - DBMS_OUTPUT.PUT_LINE(v_ResultStr) ; + RAISE_APPLICATION_ERROR(-20000,v_ResultStr) ; AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; RETURN; end; diff -r 5949c24c17a8 -r bc6231bad947 src-db/database/model/functions/C_CHANGEPROJECTSTATUSTOORDER.xml --- a/src-db/database/model/functions/C_CHANGEPROJECTSTATUSTOORDER.xml Thu Dec 15 11:12:15 2011 +0000 +++ b/src-db/database/model/functions/C_CHANGEPROJECTSTATUSTOORDER.xml Fri Feb 03 16:48:39 2012 +0000 @@ -161,7 +161,7 @@ ( v_PriceList, v_AD_Client_ID, v_AD_Org_ID, 'Y', now(), v_AD_User_ID, now(), v_AD_User_ID, - (Cur_SO.value || ' - ' || v_BPName), + SUBSTR((Cur_SO.value || ' - ' || v_BPName), 0, 60), (Cur_SO.value || ' - ' || v_BPName), 'Y', Cur_SO.C_Currency_ID ) @@ -205,7 +205,7 @@ ( v_PriceListVersion, v_AD_Client_ID, v_AD_Org_ID, 'Y', now(), v_AD_User_ID, now(), v_AD_User_ID, - (Cur_SO.value || ' - ' ||v_BPName|| ' - ' ||TRUNC(now(), 'DD')), + (SUBSTR(Cur_SO.value || ' - ' ||v_BPName, 0, 47)|| ' - ' ||TRUNC(now(), 'DD')), (Cur_SO.value || ' - ' ||v_BPName|| ' - ' ||TRUNC(now(), 'DD')), v_PriceList, v_M_Discountschema_ID, TRUNC(now(), 'DD') @@ -261,7 +261,7 @@ ( v_PriceListPO, v_AD_Client_ID, v_AD_Org_ID, 'Y', now(), v_AD_User_ID, now(), v_AD_User_ID, - (Cur_SO.value || ' - ' ||v_SupplierName), + SUBSTR((Cur_SO.value || ' - ' ||v_SupplierName), 0, 60), (Cur_SO.value || ' - ' ||v_SupplierName), 'N', Cur_SO.C_Currency_ID ) @@ -305,7 +305,7 @@ ( v_PriceListVersionPO, v_AD_Client_ID, v_AD_Org_ID, 'Y', now(), v_AD_User_ID, now(), v_AD_User_ID, - (Cur_SO.value || ' - ' ||v_SupplierName|| ' - ' ||TRUNC(now(), 'DD')), + (SUBSTR(Cur_SO.value || ' - ' ||v_SupplierName, 0, 47)|| ' - ' ||TRUNC(now(), 'DD')), (Cur_SO.value || ' - ' ||v_SupplierName||' - ' ||TRUNC(now(), 'DD')), v_PriceListPO, v_M_Discountschema_ID, TRUNC(now(), 'DD') diff -r 5949c24c17a8 -r bc6231bad947 src-db/database/model/functions/C_INVOICE_CREATERECEIPT.xml --- a/src-db/database/model/functions/C_INVOICE_CREATERECEIPT.xml Thu Dec 15 11:12:15 2011 +0000 +++ b/src-db/database/model/functions/C_INVOICE_CREATERECEIPT.xml Fri Feb 03 16:48:39 2012 +0000 @@ -41,6 +41,7 @@ -- v_DocStatus VARCHAR2(60) ; v_InOut_ID VARCHAR2(32); + v_DocumentNo M_INOUT.DocumentNo%TYPE; FINISH_PROCESS BOOLEAN:=false; BEGIN -- Update AD_PInstance @@ -104,6 +105,8 @@ -- Create (and post) the shipment v_ResultStr:='Create Shipment'; M_InOut_Create(NULL, v_InOut_ID, NULL, v_Record_ID, 'Y', v_M_Locator_ID) ; + SELECT DocumentNo INTO v_DocumentNo FROM M_InOut WHERE M_Inout_ID = v_InOut_ID; + v_Message := '@DocumentNo@ = ' || v_DocumentNo; DBMS_OUTPUT.PUT_LINE(' Shipment - ' || v_InOut_ID) ; IF(v_InOut_ID='0') THEN RAISE_APPLICATION_ERROR(-20000, '@InOutCreateFailed@'); diff -r 5949c24c17a8 -r bc6231bad947 src-db/database/model/functions/C_INVOICE_POST.xml --- a/src-db/database/model/functions/C_INVOICE_POST.xml Thu Dec 15 11:12:15 2011 +0000 +++ b/src-db/database/model/functions/C_INVOICE_POST.xml Fri Feb 03 16:48:39 2012 +0000 @@ -608,7 +608,7 @@ C_INVOICE_POST(NULL, v_RInvoice_ID) ; -- Reversal Transaction is closed UPDATE C_INVOICE - SET DocStatus='CO', -- the reversal transaction (issue 18837) + SET DocStatus='VO', -- the reversal transaction (issue 18837) (rolledback in issue 19542) DocAction='--', Processed='Y' WHERE C_Invoice_ID=v_RInvoice_ID; diff -r 5949c24c17a8 -r bc6231bad947 src-db/database/model/functions/C_VALIDCOMBINATION_CLONE.xml --- a/src-db/database/model/functions/C_VALIDCOMBINATION_CLONE.xml Thu Dec 15 11:12:15 2011 +0000 +++ b/src-db/database/model/functions/C_VALIDCOMBINATION_CLONE.xml Fri Feb 03 16:48:39 2012 +0000 @@ -56,6 +56,7 @@ v_UpdateSequence CHAR; tmp_Subaccout_no VARCHAR(32) :=null; --OBTG:varchar2-- v_C_ElementValue_ID VARCHAR(32) :=null; --OBTG:varchar2-- + v_Exist NUMBER; BEGIN IF (p_orginal_validcombination IS NULL) THEN @@ -85,15 +86,24 @@ FROM C_ValidCombination, C_ElementValue WHERE C_ValidCombination.Account_ID = C_ElementValue.C_ElementValue_ID AND C_ValidCombination_ID =p_Orginal_Validcombination; - + -- Logic for generating the New Sub account number from Original Accounts. v_Acct_No_For_SubAccount:=SUBSTR(v_Default_Account_No,1,p_Acct_Length); tmp_Subaccout_no := p_Subacct_Length - p_Acct_Length; v_Seq_No_For_Subaccount_No:= lpad(p_SequenceNo,cast(tmp_Subaccout_no as integer),'0'); v_New_Subaccount_No:= v_Acct_No_For_SubAccount || v_Seq_No_For_Subaccount_No; - /* + + --Checking if the new account already exists + SELECT count(*) + INTO v_Exist + FROM C_ElementValue WHERE VALUE =v_New_Subaccount_No; + IF (v_Exist > 0) THEN + RAISE_APPLICATION_ERROR(-20000, '@DuplicateAccount@'); + END IF; + /* Inserting the new element value for new account for Business Partner Or Product. */ + INSERT INTO C_ElementValue ( C_ElementValue_ID, @@ -183,7 +193,7 @@ FROM ad_treenode WHERE AD_TREE_ID = v_AD_TREE_ID AND NODE_ID = v_Node_ID ), SEQNO = v_SEQNO WHERE NODE_ID = V_C_ElementValue_ID; - + /* Function call to Retrieve the new account NUMBER for Business Partner or Product. */ C_ValidCombination_Insert(p_Result, v_Default_Account_Client_ID, v_Org_ID, v_C_AcctSchema_ID, v_C_ElementValue_ID, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); diff -r 5949c24c17a8 -r bc6231bad947 src-db/database/model/functions/C_VALIDCOMBINATION_INSERT.xml --- a/src-db/database/model/functions/C_VALIDCOMBINATION_INSERT.xml Thu Dec 15 11:12:15 2011 +0000 +++ b/src-db/database/model/functions/C_VALIDCOMBINATION_INSERT.xml Fri Feb 03 16:48:39 2012 +0000 @@ -102,7 +102,7 @@ -- Existance Loop - Get first fully qualified matching combination -- FoundValue CHAR(1):='N'; - RetValue NUMBER:=NULL; + RetValue VARCHAR2(32):=NULL; fullyQualified CHAR(1) ; diff -r 5949c24c17a8 -r bc6231bad947 src-db/database/model/tables/AD_USER.xml --- a/src-db/database/model/tables/AD_USER.xml Thu Dec 15 11:12:15 2011 +0000 +++ b/src-db/database/model/tables/AD_USER.xml Fri Feb 03 16:48:39 2012 +0000 @@ -61,7 +61,7 @@ <default/> <onCreateDefault/> </column> - <column name="EMAILUSER" primaryKey="false" required="false" type="NVARCHAR" size="20" autoIncrement="false"> + <column name="EMAILUSER" primaryKey="false" required="false" type="NVARCHAR" size="40" autoIncrement="false"> <default/> <onCreateDefault/> </column> diff -r 5949c24c17a8 -r bc6231bad947 src-db/database/model/triggers/C_PROJECT_TRG.xml --- a/src-db/database/model/triggers/C_PROJECT_TRG.xml Thu Dec 15 11:12:15 2011 +0000 +++ b/src-db/database/model/triggers/C_PROJECT_TRG.xml Fri Feb 03 16:48:39 2012 +0000 @@ -31,6 +31,7 @@ ************************************************************************/ v_Tree_ID VARCHAR2(32); v_Parent_ID VARCHAR2(32); + v_count NUMBER; -- TYPE RECORD IS REF CURSOR; Cur_Defaults RECORD; @@ -110,8 +111,19 @@ ) ; ELSIF (UPDATING) THEN - UPDATE C_PROJECT_ACCT SET AD_ORG_ID = :new.AD_ORG_ID - WHERE C_PROJECT_ID = :new.C_PROJECT_ID; + + IF(COALESCE(:old.AD_ORG_ID, '0') <> COALESCE(:new.AD_ORG_ID, '0')) THEN + SELECT COUNT(*) INTO V_COUNT FROM C_PROJECTLINE WHERE C_PROJECT_ID = :NEW.C_PROJECT_ID; + IF(V_COUNT > 0) THEN + SELECT COUNT(*) INTO V_COUNT FROM C_PROJECTLINE WHERE C_PROJECT_ID = :NEW.C_PROJECT_ID AND AD_ISORGINCLUDED(:NEW.AD_ORG_ID,AD_ORG_ID,:NEW.AD_CLIENT_ID) <> -1; + IF(V_COUNT = 0) THEN + RAISE_APPLICATION_ERROR(-20000, '@orgnizationHeaderCheck@') ; + END IF; + END IF; + END IF; + + UPDATE C_PROJECT_ACCT SET AD_ORG_ID = :new.AD_ORG_ID + WHERE C_PROJECT_ID = :new.C_PROJECT_ID; END IF; -- Summary Nodes first EXCEPTION diff -r 5949c24c17a8 -r bc6231bad947 src-db/database/model/triggers/M_PRODUCT_TRG.xml --- a/src-db/database/model/triggers/M_PRODUCT_TRG.xml Thu Dec 15 11:12:15 2011 +0000 +++ b/src-db/database/model/triggers/M_PRODUCT_TRG.xml Fri Feb 03 16:48:39 2012 +0000 @@ -48,6 +48,16 @@ END IF; IF (UPDATING) THEN + IF(COALESCE(:old.AD_ORG_ID, '0') <> COALESCE(:new.AD_ORG_ID, '0')) THEN + SELECT COUNT(*) INTO V_COUNT FROM M_PRODUCTPRICE WHERE M_PRODUCT_ID = :NEW.M_PRODUCT_ID; + IF(V_COUNT > 0) THEN + SELECT COUNT(*) INTO V_COUNT FROM M_PRODUCTPRICE WHERE M_PRODUCT_ID = :NEW.M_PRODUCT_ID AND AD_ISORGINCLUDED(:NEW.AD_ORG_ID,AD_ORG_ID,:NEW.AD_CLIENT_ID) <> -1; + IF(V_COUNT = 0) THEN + RAISE_APPLICATION_ERROR(-20000, '@orgnizationHeaderCheck@') ; + END IF; + END IF; + END IF; + UPDATE M_PRODUCT_ACCT SET AD_ORG_ID = :new.AD_ORG_ID WHERE M_PRODUCT_ID = :new.M_PRODUCT_ID; diff -r 5949c24c17a8 -r bc6231bad947 src-db/database/model/triggers/M_WAREHOUSE_TRG.xml --- a/src-db/database/model/triggers/M_WAREHOUSE_TRG.xml Thu Dec 15 11:12:15 2011 +0000 +++ b/src-db/database/model/triggers/M_WAREHOUSE_TRG.xml Fri Feb 03 16:48:39 2012 +0000 @@ -28,6 +28,7 @@ TYPE RECORD IS REF CURSOR; Cur_Defaults RECORD; + v_count NUMBER; BEGIN @@ -71,6 +72,16 @@ ; END LOOP; ELSIF (UPDATING) THEN + IF(COALESCE(:old.AD_ORG_ID, '0') <> COALESCE(:new.AD_ORG_ID, '0')) THEN + SELECT COUNT(*) INTO V_COUNT FROM M_LOCATOR WHERE M_WAREHOUSE_ID = :NEW.M_WAREHOUSE_ID; + IF(V_COUNT > 0) THEN + SELECT COUNT(*) INTO V_COUNT FROM M_LOCATOR WHERE M_WAREHOUSE_ID = :NEW.M_WAREHOUSE_ID AND AD_ISORGINCLUDED(:NEW.AD_ORG_ID,AD_ORG_ID,:NEW.AD_CLIENT_ID) <> -1; + IF(V_COUNT = 0) THEN + RAISE_APPLICATION_ERROR(-20000, '@orgnizationHeaderCheck@') ; ------------------------------------------------------------------------------ Try before you buy = See our experts in action! The most comprehensive online learning library for Microsoft developers is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3, Metro Style Apps, more. Free future releases when you subscribe now! http://p.sf.net/sfu/learndevnow-dev2 _______________________________________________ Openbravo-commits mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/openbravo-commits
