details: /erp/devel/main/rev/7b8b7e14465a changeset: 9069:7b8b7e14465a user: Sivaraman Rajagopal <sivaraman.rajagopal <at> openbravo.com> date: Thu Dec 02 11:47:28 2010 +0530 summary: Fixes issue 15139: Lack a constraint in the tables MA_Sequenceproduct and MA_Wrphaseproduct
Error message has been modified as follows Order Quantity and Order UOM are co-dependent fields. You cannot assign value for one field and leave other empty. Impacts: None details: /erp/devel/main/rev/5f5c400c8161 changeset: 9070:5f5c400c8161 user: Valery Lezhebokov <valery.lezhebokov <at> gmail.com> date: Wed Dec 01 09:07:16 2010 +0100 summary: Issue 15203: Copy tab fields: null value in column "name" violates not-null constraint Change DB procedures to copy fields and translations in a bit smarter way details: /erp/devel/main/rev/684e5a29d6e9 changeset: 9071:684e5a29d6e9 user: Asier Lostalé <asier.lostale <at> openbravo.com> date: Thu Dec 02 12:16:42 2010 +0100 summary: merge details: /erp/devel/main/rev/dc020fc4156f changeset: 9072:dc020fc4156f user: RM packaging bot <staff.rm <at> openbravo.com> date: Thu Dec 02 15:48:50 2010 +0000 summary: CI: promote changesets from pi to main diffstat: src-db/database/model/functions/AD_TAB_COPY.xml | 107 ++++++++++++---- src-db/database/model/functions/AD_WINDOW_COPY.xml | 138 +++++++++++++------- src-db/database/sourcedata/AD_MESSAGE.xml | 4 +- src-db/database/sourcedata/AD_MODULE.xml | 4 +- 4 files changed, 173 insertions(+), 80 deletions(-) diffs (truncated from 401 to 300 lines): diff -r d7ec9607ff25 -r dc020fc4156f src-db/database/model/functions/AD_TAB_COPY.xml --- a/src-db/database/model/functions/AD_TAB_COPY.xml Wed Dec 01 19:29:39 2010 +0100 +++ b/src-db/database/model/functions/AD_TAB_COPY.xml Thu Dec 02 15:48:50 2010 +0000 @@ -13,7 +13,7 @@ * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. - * The Original Code is Compiere ERP & Business Solution + * The Original Code is Compiere ERP Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; @@ -29,20 +29,28 @@ * Title: Copy One Tab content (i.e. Fields) to another * Description: ************************************************************************/ - -- Logistic - v_ResultStr VARCHAR2(2000):=''; - v_Message VARCHAR2(2000):=''; - v_Record_ID VARCHAR2(32); - v_AD_Module_ID VARCHAR2(32); - -- Parameter - TYPE RECORD IS REF CURSOR; + -- Logistic + v_ResultStr VARCHAR2(2000):=''; + v_Message VARCHAR2(2000):=''; + v_Record_ID VARCHAR2(32); + v_dest_ad_module_id VARCHAR2(32); + v_src_ad_module_id VARCHAR2(32); + v_dest_ad_module_lang VARCHAR(6); + v_src_ad_module_lang VARCHAR(6); + -- Parameter + TYPE RECORD IS REF CURSOR; Cur_Parameter RECORD; -- Parameter Variables v_AD_Tab_ID VARCHAR2(32); v_NoOfFields NUMBER:=0; - v_NextNo VARCHAR2(32); + v_trl_count NUMBER; + v_NextNo_F VARCHAR2(32); -- Copy Cur_Fields RECORD; + v_name VARCHAR(2000); + Row_Src_Field AD_Field%ROWTYPE; + Row_Dest_Field_Trl AD_Field_Trl%ROWTYPE; + BEGIN -- Update AD_PInstance DBMS_OUTPUT.PUT_LINE('Updating PInstance - Processing ' || p_PInstance_ID) ; @@ -74,24 +82,46 @@ -- Record_ID is the Tab_ID to copy to v_ResultStr:='Copying'; - --Insert fields in the same module as the tab + -- Get source module id SELECT AD_Module_ID - INTO v_AD_Module_ID + INTO v_src_ad_module_id + FROM AD_Tab + WHERE AD_Tab_ID = v_AD_Tab_ID; + + -- Get destination module id + SELECT AD_Module_ID + INTO v_dest_ad_module_id FROM AD_Tab WHERE AD_Tab_ID = v_Record_ID; + + -- Get module's langs + SELECT AD_Language INTO v_dest_ad_module_lang FROM AD_MODULE WHERE AD_Module_Id=v_dest_ad_module_id; + SELECT AD_Language INTO v_src_ad_module_lang FROM AD_MODULE WHERE AD_Module_Id=v_src_ad_module_id; + FOR Cur_Fields IN (SELECT * FROM AD_Field WHERE AD_Tab_ID=v_AD_Tab_ID) LOOP - -- Get next no - AD_Sequence_Next('AD_Field', Cur_Fields.AD_Client_ID, v_NextNo) ; - -- Insert + + -- ------------------------------------------------------------------ + -- ----------------- AD_Window_Copy has copied code ---------------- + AD_Sequence_Next('AD_Field', Cur_Fields.AD_Client_ID, v_NextNo_F) ; + + --- if the source and dest language are different then retrieve translatable values (name, description, etc) from an appropriate field translation (if there is such) + IF(v_src_ad_module_lang <> v_dest_ad_module_lang) THEN + SELECT COUNT(*) INTO v_trl_count FROM AD_Field_Trl WHERE AD_Field_Id=Cur_Fields.AD_Field_Id AND AD_Language=v_dest_ad_module_lang; + IF(v_trl_count =1) THEN + SELECT * INTO Row_Dest_Field_Trl FROM AD_Field_Trl WHERE AD_Field_Id=Cur_Fields.AD_Field_Id AND AD_Language=v_dest_ad_module_lang; + END IF; + END IF; + + -- copy the field taking the translatable colums fields (name, description, etc) INSERT INTO AD_Field -- AD_Window_Copy has copied code ( AD_Field_ID, AD_Tab_ID, AD_Client_ID, AD_Org_ID, - IsActive, Created, CreatedBy, Updated, - UpdatedBy, Name, Description, Help, + IsActive, Created, CreatedBy, Updated, UpdatedBy, + Name, Description, Help, IsCentrallyMaintained, AD_Column_ID, AD_FieldGroup_ID, ISDISPLAYED, DISPLAYLOGIC, DISPLAYLENGTH, ISREADONLY, SEQNO, SORTNO, ISSAMELINE, @@ -99,22 +129,25 @@ ShowInRelation, Grid_Seqno ) VALUES - (v_NextNo, v_Record_ID, Cur_Fields.AD_Client_ID, Cur_Fields.AD_Org_ID, - Cur_Fields.IsActive, now(), '0', now(), - '0', Cur_Fields.Name, Cur_Fields.Description, Cur_Fields.Help, - Cur_Fields.IsCentrallyMaintained, Cur_Fields.AD_Column_ID, Cur_Fields.AD_FieldGroup_ID, Cur_Fields.ISDISPLAYED, - Cur_Fields.DISPLAYLOGIC, Cur_Fields.DISPLAYLENGTH, Cur_Fields.ISREADONLY, - Cur_Fields.SEQNO, Cur_Fields.SORTNO, Cur_Fields.ISSAMELINE, - Cur_Fields.ISFIELDONLY, Cur_Fields.ISENCRYPTED, v_AD_Module_ID, - Cur_Fields.ShowInRelation, Cur_Fields.Grid_Seqno) ; - -- update translation + ( + v_NextNo_F, v_Record_ID, Cur_Fields.AD_Client_ID, Cur_Fields.AD_Org_ID, + Cur_Fields.IsActive, now(), '0', now(), '0', + COALESCE (Row_Dest_Field_Trl.Name, Cur_Fields.Name), COALESCE (Row_Dest_Field_Trl.Description, Cur_Fields.Description), COALESCE (Row_Dest_Field_Trl.Help, Cur_Fields.Help), + Cur_Fields.IsCentrallyMaintained, Cur_Fields.AD_Column_ID, Cur_Fields.AD_FieldGroup_ID, Cur_Fields.ISDISPLAYED, + Cur_Fields.DISPLAYLOGIC, Cur_Fields.DISPLAYLENGTH, Cur_Fields.ISREADONLY, + Cur_Fields.SEQNO, Cur_Fields.SORTNO, Cur_Fields.ISSAMELINE, + Cur_Fields.ISFIELDONLY, Cur_Fields.ISENCRYPTED, v_dest_ad_module_id, + Cur_Fields.ShowInRelation, Cur_Fields.Grid_Seqno + ); + + -- update translations from source translations UPDATE AD_Field_Trl SET Name= (SELECT Name FROM AD_Field_Trl s WHERE s.AD_Field_ID=Cur_Fields.AD_Field_ID AND s.AD_Language=AD_Field_Trl.AD_Language ) - , Description= + , Description= (SELECT Description FROM AD_Field_Trl s WHERE s.AD_Field_ID=Cur_Fields.AD_Field_ID AND s.AD_Language=AD_Field_Trl.AD_Language @@ -124,9 +157,27 @@ FROM AD_Field_Trl s WHERE s.AD_Field_ID=Cur_Fields.AD_Field_ID AND s.AD_Language=AD_Field_Trl.AD_Language ) - WHERE AD_Field_Trl.AD_Field_ID=v_NextNo; - -- + WHERE AD_Field_Trl.AD_Field_ID=v_NextNo_F + AND AD_Field_Trl.AD_Language = ANY ( + SELECT AD_Language + FROM AD_Field_Trl sub + WHERE sub.AD_Field_ID=Cur_Fields.AD_Field_ID + ); + + -- if source and dest langs are different then update source language translation from the source field + IF(v_src_ad_module_lang <> v_dest_ad_module_lang) THEN + SELECT * + INTO Row_Src_Field + FROM AD_FIELD + WHERE AD_Field_ID=Cur_Fields.AD_Field_ID; + UPDATE AD_Field_Trl + SET Name=Row_Src_Field.Name, Description=Row_Src_Field.Description, Help = Row_Src_Field.Help + WHERE AD_Field_ID=v_NextNo_F AND AD_Language=v_src_ad_module_lang; + END IF; + v_NoOfFields:=v_NoOfFields + 1; + -- ---------------------- End of copied code ----------------------- + -- ------------------------------------------------------------------ END LOOP; v_Message:='@cop...@=' || v_NoOfFields; --<<FINISH_PROCESS>> diff -r d7ec9607ff25 -r dc020fc4156f src-db/database/model/functions/AD_WINDOW_COPY.xml --- a/src-db/database/model/functions/AD_WINDOW_COPY.xml Wed Dec 01 19:29:39 2010 +0100 +++ b/src-db/database/model/functions/AD_WINDOW_COPY.xml Thu Dec 02 15:48:50 2010 +0000 @@ -13,7 +13,7 @@ * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. - * The Original Code is Compiere ERP & Business Solution + * The Original Code is Compiere ERP Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; @@ -42,10 +42,15 @@ v_NextNo_F VARCHAR2(32); v_NoOfTabs NUMBER:=0; v_NoOfFields NUMBER:=0; + v_trl_count NUMBER; Cur_Tabs RECORD; Cur_Fields RECORD; - v_AD_Module_ID VARCHAR2(32); - ad_language_target VARCHAR(6); + v_dest_ad_module_id VARCHAR2(32); + v_dest_ad_module_lang VARCHAR(6); + v_src_ad_module_id VARCHAR2(32); + v_src_ad_module_lang VARCHAR(6); + Row_Src_Field AD_Field%ROWTYPE; + Row_Dest_Field_Trl AD_Field_Trl%ROWTYPE; BEGIN -- Update AD_PInstance DBMS_OUTPUT.PUT_LINE('Updating PInstance - Processing ' || p_PInstance_ID) ; @@ -77,16 +82,23 @@ END LOOP; -- Get Parameter DBMS_OUTPUT.PUT_LINE(' Record_ID=' || v_Record_ID) ; v_ResultStr:='GetEntityType'; - - --Insert fields in the same module as the window + + -- Get source module id SELECT AD_Module_ID - INTO v_AD_Module_ID + INTO v_src_ad_module_id + FROM AD_Window + WHERE AD_Window_ID = v_AD_Window_ID; + + -- Get destination module id + SELECT AD_Module_ID + INTO v_dest_ad_module_id FROM AD_Window WHERE AD_Window_ID = v_Record_ID; - select AD_language into ad_language_target - from ad_module where ad_module_id=v_AD_Module_ID; - + -- Get module's langs + SELECT AD_Language INTO v_dest_ad_module_lang FROM AD_MODULE WHERE AD_Module_Id=v_dest_ad_module_id; + SELECT AD_Language INTO v_src_ad_module_lang FROM AD_MODULE WHERE AD_Module_Id=v_src_ad_module_id; + -- Record_ID is the Window_ID to copy to FOR Cur_Tabs IN (SELECT * FROM AD_Tab WHERE AD_Window_ID=v_AD_Window_ID) @@ -110,9 +122,9 @@ coalesce(sub.name, Cur_Tabs.NAME), coalesce(sub.description, Cur_Tabs.DESCRIPTION), coalesce(sub.help, Cur_Tabs.HELP), Cur_Tabs.AD_TABLE_ID, Cur_Tabs.TabLevel, Cur_Tabs.SEQNO, Cur_Tabs.ISSINGLEROW, Cur_Tabs.ISINFOTAB, Cur_Tabs.ISTRANSLATIONTAB, Cur_Tabs.ISREADONLY, Cur_Tabs.AD_COLUMN_ID, Cur_Tabs.HASTREE, Cur_Tabs.WHERECLAUSE, Cur_Tabs.ORDERBYCLAUSE, Cur_Tabs.COMMITWARNING, - Cur_Tabs.AD_PROCESS_ID, Cur_Tabs.PROCESSING, v_AD_Module_ID + Cur_Tabs.AD_PROCESS_ID, Cur_Tabs.PROCESSING, v_dest_ad_module_id FROM ad_tab s left join - (select * from AD_tab_trl where ad_language=ad_language_target and ad_tab_id=Cur_Tabs.ad_tab_id ) sub + (select * from AD_tab_trl where ad_language=v_dest_ad_module_lang and ad_tab_id=Cur_Tabs.ad_tab_id ) sub on sub.ad_tab_id=s.ad_tab_id where s.ad_tab_id=Cur_Tabs.ad_tab_id; -- Translate @@ -139,50 +151,80 @@ FOR Cur_Fields IN (SELECT * FROM AD_Field WHERE AD_Tab_ID=Cur_Tabs.AD_Tab_ID) LOOP - -- Get next no + -- ------------------------------------------------------------------ + -- ------------------ AD_Tab_Copy has copied code ------------------ AD_Sequence_Next('AD_Field', Cur_Fields.AD_Client_ID, v_NextNo_F) ; - -- Insert + + --- if the source and dest language are different then retrieve translatable values (name, description, etc) from an appropriate field translation (if there is such) + IF(v_src_ad_module_lang <> v_dest_ad_module_lang) THEN + SELECT COUNT(*) INTO v_trl_count FROM AD_Field_Trl WHERE AD_Field_Id=Cur_Fields.AD_Field_Id AND AD_Language=v_dest_ad_module_lang; + IF(v_trl_count =1) THEN + SELECT * INTO Row_Dest_Field_Trl FROM AD_Field_Trl WHERE AD_Field_Id=Cur_Fields.AD_Field_Id AND AD_Language=v_dest_ad_module_lang; + END IF; + END IF; + + -- copy the field taking the translatable colums fields (name, description, etc) INSERT - INTO AD_Field + INTO AD_Field ( - AD_Field_ID, AD_Tab_ID, - AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, - Name, Description, Help, IsCentrallyMaintained, AD_Column_ID, AD_FieldGroup_ID, - ISDISPLAYED, DISPLAYLOGIC, DISPLAYLENGTH, ISREADONLY, SEQNO, SORTNO, - ISSAMELINE, ISFIELDONLY, ISENCRYPTED, AD_Module_ID, ShowInRelation, Grid_Seqno + AD_Field_ID, AD_Tab_ID, AD_Client_ID, AD_Org_ID, + IsActive, Created, CreatedBy, Updated, UpdatedBy, + Name, Description, Help, + IsCentrallyMaintained, AD_Column_ID, AD_FieldGroup_ID, ISDISPLAYED, + DISPLAYLOGIC, DISPLAYLENGTH, ISREADONLY, + SEQNO, SORTNO, ISSAMELINE, + ISFIELDONLY, ISENCRYPTED, AD_MODULE_ID, + ShowInRelation, Grid_Seqno ) - SELECT - v_NextNo_F, v_NextNo_T, - Cur_Fields.AD_Client_ID, Cur_Fields.AD_Org_ID, Cur_Fields.IsActive, now(), '0', now(), '0', - coalesce(sub.name, Cur_Fields.Name), coalesce(sub.description, Cur_Fields.Description), coalesce(sub.help, Cur_Fields.Help), Cur_Fields.IsCentrallyMaintained, Cur_Fields.AD_Column_ID, Cur_Fields.AD_FieldGroup_ID, - Cur_Fields.ISDISPLAYED, Cur_Fields.DISPLAYLOGIC, Cur_Fields.DISPLAYLENGTH, Cur_Fields.ISREADONLY, Cur_Fields.SEQNO, Cur_Fields.SORTNO, - Cur_Fields.ISSAMELINE, Cur_Fields.ISFIELDONLY, Cur_Fields.ISENCRYPTED, v_AD_Module_ID, Cur_Fields.ShowInRelation, Cur_Fields.Grid_Seqno - FROM ad_field s left join - (select * from AD_field_trl where ad_language=ad_language_target and ad_field_id=Cur_Fields.ad_field_id ) sub - on sub.ad_field_id=s.ad_field_id where s.ad_field_id=Cur_Fields.ad_field_id; - - -- update translation + VALUES + ( + v_NextNo_F, v_NextNo_T, Cur_Fields.AD_Client_ID, Cur_Fields.AD_Org_ID, + Cur_Fields.IsActive, now(), '0', now(), '0', + COALESCE (Row_Dest_Field_Trl.Name, Cur_Fields.Name), COALESCE (Row_Dest_Field_Trl.Description, Cur_Fields.Description), COALESCE (Row_Dest_Field_Trl.Help, Cur_Fields.Help), + Cur_Fields.IsCentrallyMaintained, Cur_Fields.AD_Column_ID, Cur_Fields.AD_FieldGroup_ID, Cur_Fields.ISDISPLAYED, + Cur_Fields.DISPLAYLOGIC, Cur_Fields.DISPLAYLENGTH, Cur_Fields.ISREADONLY, + Cur_Fields.SEQNO, Cur_Fields.SORTNO, Cur_Fields.ISSAMELINE, + Cur_Fields.ISFIELDONLY, Cur_Fields.ISENCRYPTED, v_dest_ad_module_id, + Cur_Fields.ShowInRelation, Cur_Fields.Grid_Seqno + ); ------------------------------------------------------------------------------ Increase Visibility of Your 3D Game App & Earn a Chance To Win $500! Tap into the largest installed PC base & get more eyes on your game by optimizing for Intel(R) Graphics Technology. Get started today with the Intel(R) Software Partner Program. Five $500 cash prizes are up for grabs. http://p.sf.net/sfu/intelisp-dev2dev _______________________________________________ Openbravo-commits mailing list Openbravo-commits@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openbravo-commits