details: /erp/devel/pi/rev/5f5c400c8161
changeset: 9063: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/pi/rev/684e5a29d6e9
changeset: 9064:684e5a29d6e9
user: Asier Lostalé <asier.lostale <at> openbravo.com>
date: Thu Dec 02 12:16:42 2010 +0100
summary: merge
diffstat:
.hgsigs | 1 +
.hgtags | 1 +
src-db/database/model/functions/AD_TAB_COPY.xml | 107
+++++--
src-db/database/model/functions/AD_WINDOW_COPY.xml | 138
++++++---
src-db/database/model/functions/C_ORDER_POST1.xml | 10 +-
src-db/database/model/tables/MA_SEQUENCEPRODUCT.xml | 1 +
src-db/database/model/tables/MA_WRPHASEPRODUCT.xml | 1 +
src-db/database/sourcedata/AD_MESSAGE.xml | 33 ++
src-db/database/sourcedata/AD_MODULE.xml | 2 +-
src-db/database/sourcedata/AD_TABLE.xml | 4 +-
src/org/openbravo/erpCommon/ad_callouts/SE_Invoice_Project.java | 38 +-
src/org/openbravo/erpCommon/ad_forms/UpdateReferenceData.java | 90 +++--
src/org/openbravo/erpCommon/ad_forms/UpdateReferenceData_data.xsql | 17 +
src/org/openbravo/erpCommon/security/Login.html | 2 +-
src/org/openbravo/erpCommon/security/Login_F1.html | 2 +-
web/html/en_US/StaticCommunityBranding-MyOB-Basic.html | 4 +-
web/html/en_US/StaticCommunityBranding-MyOB-Comm.html | 4 +-
web/html/en_US/StaticCommunityBranding-MyOB-STD.html | 2 +-
web/html/en_US/StaticCommunityBranding-MyOB.js | 4 +-
web/js/utils.js | 2 +-
20 files changed, 315 insertions(+), 148 deletions(-)
diffs (truncated from 803 to 300 lines):
diff -r 0bd66b4ea209 -r 684e5a29d6e9 .hgsigs
--- a/.hgsigs Sun Nov 28 15:56:37 2010 +0100
+++ b/.hgsigs Thu Dec 02 12:16:42 2010 +0100
@@ -24,3 +24,4 @@
6563372bc2fbf0bc2e15f70c2a8da81fad8cbc2e 0
iEYEABECAAYFAkyDw4sACgkQCX/oGf+2qkMZ1ACePoFeipRkNAN6bW7yIUeiRYgEMBMAni+gFwpEp8kfGKryvixvdudRgGoQ
b033dcbeeabc1db396798b8e5cbe196522f43a53 0
iEYEABECAAYFAkydFwMACgkQCX/oGf+2qkM1NwCbBJjgs9qM221q415Ygu/EVvhE31sAn2+O6DOYQNbM3xFuCnhhtuDQWDa/
323d74d7ad1c7a2c4e92b6cfbc08f8ef406315f9 0
iEYEABECAAYFAkzTE3gACgkQCX/oGf+2qkPsRQCeMcvruESd9p1/uezSdZNtrlZS5UYAoMIolxQ5ig1o5yOB2Xxgvm5R9Jel
+26d17c9ba97d7294355873018ea105818c15757c 0
iEYEABECAAYFAkz0qbcACgkQCX/oGf+2qkPO6gCffSmysxO4WBZRyimeiKPSpywAXQgAoIUDbxjDEvhjUzxE9+FQYINVkiim
diff -r 0bd66b4ea209 -r 684e5a29d6e9 .hgtags
--- a/.hgtags Sun Nov 28 15:56:37 2010 +0100
+++ b/.hgtags Thu Dec 02 12:16:42 2010 +0100
@@ -34,3 +34,4 @@
a3c1cffa8af7b60cab6949251fce1faaa13ca5bb 2.50MP21
8ede6ac265f1dd70536888ce3e20ffd54e3a3bc6 2.50MP22
974f18d14979e367da4ea591def9d1da816159ff 2.50MP23
+f330b414cd5aa5bc889159cc11b1e4cd3ee297cb 2.50MP24
diff -r 0bd66b4ea209 -r 684e5a29d6e9
src-db/database/model/functions/AD_TAB_COPY.xml
--- a/src-db/database/model/functions/AD_TAB_COPY.xml Sun Nov 28 15:56:37
2010 +0100
+++ b/src-db/database/model/functions/AD_TAB_COPY.xml Thu Dec 02 12:16:42
2010 +0100
@@ -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 0bd66b4ea209 -r 684e5a29d6e9
src-db/database/model/functions/AD_WINDOW_COPY.xml
--- a/src-db/database/model/functions/AD_WINDOW_COPY.xml Sun Nov 28
15:56:37 2010 +0100
+++ b/src-db/database/model/functions/AD_WINDOW_COPY.xml Thu Dec 02
12:16:42 2010 +0100
@@ -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
------------------------------------------------------------------------------
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits