details:   /erp/devel/pi/rev/338a18e985ec
changeset: 8484:338a18e985ec
user:      Valery Lezhebokov <valery.lezhebokov <at> gmail.com>
date:      Sun Sep 26 13:58:02 2010 +0200
summary:   Fixes issue 12775: You can create a DB prefix with lowercase letters

details:   /erp/devel/pi/rev/576d9c0e1315
changeset: 8485:576d9c0e1315
user:      Asier Lostalé <asier.lostale <at> openbravo.com>
date:      Thu Sep 30 11:04:07 2010 +0200
summary:   merge

diffstat:

 .hgsigs                                                      |   1 +
 .hgtags                                                      |   1 +
 src-db/database/model/functions/AD_UPDATE_ACCESS.xml         |   4 +
 src-db/database/model/functions/FACT_ACCT_RESET.xml          |  36 +++++++-
 src-db/database/model/postscript-PostgreSql.sql              |   2 -
 src-db/database/model/prescript-PostgreSql.sql               |  32 ++++++-
 src-db/database/model/triggers/AD_ELEMENT_TRL_TRG.xml        |   9 +-
 src-db/database/model/triggers/AD_MODULE_DBPREFIX_TRG.xml    |  14 +-
 src-db/database/model/triggers/AD_ROLE_TRG.xml               |  36 +++++--
 src-db/database/sourcedata/AD_COLUMN.xml                     |   2 +
 src-db/database/sourcedata/AD_FIELD.xml                      |   1 -
 src-db/database/sourcedata/AD_MESSAGE.xml                    |  11 ++
 src-db/database/sourcedata/AD_MODULE.xml                     |   4 +-
 src-test/org/openbravo/test/AllAntTaskTests.java             |   2 +
 src-test/org/openbravo/test/dal/ViewTest.java                |  52 ++++++++++++
 src/org/openbravo/base/model/Column.java                     |   5 +-
 src/org/openbravo/base/model/ModelProvider.java              |  19 ++--
 src/org/openbravo/erpCommon/ad_forms/AcctServer.java         |   2 +-
 src/org/openbravo/erpCommon/ad_forms/TranslationHandler.java |   4 +-
 src/org/openbravo/erpCommon/ad_process/ApplyModules.java     |   2 +-
 20 files changed, 186 insertions(+), 53 deletions(-)

diffs (truncated from 629 to 300 lines):

diff -r 57d4bf060d34 -r 576d9c0e1315 .hgsigs
--- a/.hgsigs   Thu Sep 23 16:01:24 2010 +0200
+++ b/.hgsigs   Thu Sep 30 11:04:07 2010 +0200
@@ -22,3 +22,4 @@
 7fe932c5c015da84a972d6945dd0451366bbf325 0 
iEYEABECAAYFAkwodmcACgkQCX/oGf+2qkM4jQCgq2n4X0Tzi8EcGqNLhtzjOJ/1YcgAn3Fh9aZRpXmM2zYmMwuecn4UR5tt
 618363224a381737439e0bd4461e2d36c4fd986e 0 
iEYEABECAAYFAkxFkHoACgkQCX/oGf+2qkP7DQCeK9qCv3jETpO5iM89PV2bJYmpErMAoO/H2QyeKKZjublcgFmH7g1tEomB
 6563372bc2fbf0bc2e15f70c2a8da81fad8cbc2e 0 
iEYEABECAAYFAkyDw4sACgkQCX/oGf+2qkMZ1ACePoFeipRkNAN6bW7yIUeiRYgEMBMAni+gFwpEp8kfGKryvixvdudRgGoQ
+b033dcbeeabc1db396798b8e5cbe196522f43a53 0 
iEYEABECAAYFAkydFwMACgkQCX/oGf+2qkM1NwCbBJjgs9qM221q415Ygu/EVvhE31sAn2+O6DOYQNbM3xFuCnhhtuDQWDa/
diff -r 57d4bf060d34 -r 576d9c0e1315 .hgtags
--- a/.hgtags   Thu Sep 23 16:01:24 2010 +0200
+++ b/.hgtags   Thu Sep 30 11:04:07 2010 +0200
@@ -32,3 +32,4 @@
 34eed7b386965b19e191fbfe03195588cdc75254 2.50MP19
 99ff33f6588973f7e738b6afd47ad44f3ac08d20 2.50MP20
 a3c1cffa8af7b60cab6949251fce1faaa13ca5bb 2.50MP21
+8ede6ac265f1dd70536888ce3e20ffd54e3a3bc6 2.50MP22
diff -r 57d4bf060d34 -r 576d9c0e1315 
src-db/database/model/functions/AD_UPDATE_ACCESS.xml
--- a/src-db/database/model/functions/AD_UPDATE_ACCESS.xml      Thu Sep 23 
16:01:24 2010 +0200
+++ b/src-db/database/model/functions/AD_UPDATE_ACCESS.xml      Thu Sep 30 
11:04:07 2010 +0200
@@ -30,6 +30,7 @@
     '0', now(), '0', 'Y'
   FROM AD_FORM, AD_ROLE
   WHERE AD_ROLE.ISMANUAL = 'N'
+  AND AD_FORM.IsActive='Y'
     AND (
       (AD_ROLE.USERLEVEL = 'S' AND AD_FORM.ACCESSLEVEL IN ('4','7','6'))
       OR
@@ -52,6 +53,7 @@
     '0', now(), '0', 'Y'
   FROM AD_PROCESS, AD_ROLE
   WHERE AD_ROLE.ISMANUAL = 'N'
+  AND AD_PROCESS.IsActive='Y'
     AND (
       (AD_ROLE.USERLEVEL = 'S' AND AD_PROCESS.ACCESSLEVEL IN ('4','7','6'))
       OR
@@ -116,6 +118,7 @@
     '0', now(), '0', 'Y'
   FROM AD_WINDOW, AD_ROLE, AD_TAB, AD_TABLE
   WHERE AD_ROLE.ISMANUAL = 'N'
+  AND AD_WINDOW.IsActive='Y'
     AND AD_WINDOW.AD_WINDOW_ID = AD_TAB.AD_WINDOW_ID
     AND AD_TAB.AD_TABLE_ID = AD_TABLE.AD_TABLE_ID
     AND (
@@ -144,6 +147,7 @@
     '0', now(), '0', 'Y'
   FROM AD_WORKFLOW, AD_ROLE
   WHERE AD_ROLE.ISMANUAL = 'N'
+  AND AD_WORKFLOW.IsActive='Y'
     AND (
       (AD_ROLE.USERLEVEL = 'S' AND AD_WORKFLOW.ACCESSLEVEL IN ('4','7','6'))
       OR
diff -r 57d4bf060d34 -r 576d9c0e1315 
src-db/database/model/functions/FACT_ACCT_RESET.xml
--- a/src-db/database/model/functions/FACT_ACCT_RESET.xml       Thu Sep 23 
16:01:24 2010 +0200
+++ b/src-db/database/model/functions/FACT_ACCT_RESET.xml       Thu Sep 30 
11:04:07 2010 +0200
@@ -19,7 +19,7 @@
   * parts created by ComPiere are Copyright (C) ComPiere, Inc.;
   * All Rights Reserved.
   * Contributor(s): Openbravo SLU
-  * Contributions are Copyright (C) 2001-2009 Openbravo, S.L.U.
+  * Contributions are Copyright (C) 2001-2010 Openbravo, S.L.U.
   *
   * Specifically, this derivative work is based upon the following Compiere
   * file and version.
@@ -62,6 +62,8 @@
     v_DocAction VARCHAR2(60);
     v_UpdatedBy AD_PINSTANCE.UpdatedBy%TYPE;
     v_DeleteFact varchar2(1):='Y';
+    
+    v_isacctle AD_OrgType.IsAcctLegalEntity%TYPE:='N';    
  BEGIN
     --  Update AD_PInstance
     DBMS_OUTPUT.PUT_LINE('Updating PInstance - Processing ' || p_PInstance_ID) 
;
@@ -119,14 +121,41 @@
           WHERE ' || v_TableName || '_ID =''' || v_Record_ID || ''' AND 
AD_CLIENT_ID =''' || v_AD_Client_ID || ''' '
           INTO v_AD_Org_ID;
         END IF;
+        
+        -- Check the period control is opened (only if it is legal entity with 
accounting)
+        SELECT COALESCE(t.ISACCTLEGALENTITY, 'N')
+        INTO v_isacctle
+        FROM AD_Org o JOIN AD_OrgType t ON (o.ad_orgtype_id=t.ad_orgtype_id) 
+        WHERE AD_IsOrgIncluded(v_AD_Org_ID, o.ad_org_id , v_AD_Client_ID) <> -1
+        AND t.ISACCTLEGALENTITY='Y';
+        IF (v_isacctle='Y') THEN
+          DECLARE
+          v_available_period NUMBER:=0;
+          TYPE RECORD IS REF CURSOR;
+            Cur_Fact_Records RECORD;
+          BEGIN
+            FOR Cur_Fact_Records IN
+              (SELECT DATEACCT, DOCBASETYPE, C_DOCTYPE_ID
+               FROM FACT_ACCT
+               WHERE AD_TABLE_ID=v_AD_Table_ID
+               AND Record_ID = v_Record_ID
+              )
+            LOOP
+              v_available_period:=C_CHK_OPEN_PERIOD(v_AD_Org_ID, 
Cur_Fact_Records.DATEACCT, Cur_Fact_Records.DOCBASETYPE, 
Cur_Fact_Records.C_DOCTYPE_ID);
+              IF (v_available_period<>1) THEN
+                RAISE_APPLICATION_ERROR(-20000, '@PeriodClosedForUnPosting@');
+              END IF;
+            END LOOP;
+           END; 
+        END IF;
     END IF;
 
     DBMS_OUTPUT.PUT_LINE('  Record_ID=' || v_Record_ID) ;
-   -- Fact_Acct_Rest - Finish_Process Extension Point
+   -- Fact_Acct_Rest - Start_Process Extension Point
    SELECT count(*) INTO v_count
    FROM DUAL
    where exists (select 1 from ad_ep_procedures where ad_extension_points_id = 
'E1F9635815BF4A44B88E3EAADBD0D10E');
-         IF (v_count=1) THEN
+   IF (v_count=1) THEN
      DECLARE
        v_ep_instance VARCHAR(32);
        v_extension_point_id VARCHAR(32) := 'E1F9635815BF4A44B88E3EAADBD0D10E';
@@ -166,6 +195,7 @@
        WHERE ad_ep_instance_id = v_ep_instance;
       END;
    END IF;
+   -- Fact_Acct_Rest - Finish_Process Extension Point
     DECLARE
     TYPE RECORD IS REF CURSOR;
       Cur_Clients RECORD;
diff -r 57d4bf060d34 -r 576d9c0e1315 
src-db/database/model/postscript-PostgreSql.sql
--- a/src-db/database/model/postscript-PostgreSql.sql   Thu Sep 23 16:01:24 
2010 +0200
+++ b/src-db/database/model/postscript-PostgreSql.sql   Thu Sep 30 11:04:07 
2010 +0200
@@ -23,7 +23,6 @@
 BEGIN
  FOR Cur_Triggers IN (SELECT OBJECT_NAME AS NAME, TABLE_NAME
                       FROM USER_OBJECTS
-                      WHERE OBJECT_TYPE = 'TRIGGER'
                       ORDER BY OBJECT_NAME) LOOP
     v_seqNo := v_seqNo + 1;
   --      INSERT INTO AD_SCRIPT_SQL VALUES (v_seqNo, 'ALTER TRIGGER 
'||Cur_Triggers.NAME||' DISABLE');
@@ -96,7 +95,6 @@
 BEGIN
  FOR Cur_Triggers IN (SELECT OBJECT_NAME AS NAME, TABLE_NAME
                       FROM USER_OBJECTS
-                      WHERE OBJECT_TYPE = 'TRIGGER'
                       ORDER BY OBJECT_NAME) LOOP
       v_seqNo := v_seqNo + 1;
 --    INSERT INTO AD_SCRIPT_SQL VALUES (v_seqNo, 'ALTER TRIGGER 
'||Cur_Triggers.NAME||' ENABLE');
diff -r 57d4bf060d34 -r 576d9c0e1315 
src-db/database/model/prescript-PostgreSql.sql
--- a/src-db/database/model/prescript-PostgreSql.sql    Thu Sep 23 16:01:24 
2010 +0200
+++ b/src-db/database/model/prescript-PostgreSql.sql    Thu Sep 30 11:04:07 
2010 +0200
@@ -1158,18 +1158,42 @@
 SELECT * FROM drop_view('USER_OBJECTS')
 /-- END
 
-CREATE OR REPLACE VIEW USER_OBJECTS
-(TABLE_NAME, OBJECT_NAME, OBJECT_ID, OBJECT_TYPE, STATUS)
+CREATE or REPLACE function create_user_objects() returns varchar as '
+DECLARE
+  cnt int4;
+BEGIN
+  SELECT into cnt count(*) from version() where version like ''%PostgreSQL 
9.%'';
+  if cnt > 0 then
+    execute ''CREATE OR REPLACE VIEW USER_OBJECTS
+(TABLE_NAME, OBJECT_NAME, OBJECT_ID)
 AS 
-SELECT UPPER(PG_CLASS.RELNAME), UPPER(PG_TRIGGER.TGNAME), PG_TRIGGER.TGFOID, 
TO_CHAR('TRIGGER'), CASE is_Trigger_Enabled(PG_TRIGGER.TGNAME) WHEN TRUE THEN 
TO_CHAR('VALID') ELSE TO_CHAR('INVALID') END
+SELECT UPPER(PG_CLASS.RELNAME), UPPER(PG_TRIGGER.TGNAME), PG_TRIGGER.TGFOID
+FROM PG_TRIGGER, PG_NAMESPACE, PG_CLASS 
+WHERE PG_TRIGGER.TGRELID = PG_CLASS.OID
+AND PG_TRIGGER.TGISINTERNAL = FALSE
+AND PG_CLASS.RELNAMESPACE = PG_NAMESPACE.OID
+AND PG_NAMESPACE.NSPNAME = CURRENT_SCHEMA()'';
+else
+execute ''CREATE OR REPLACE VIEW USER_OBJECTS
+(TABLE_NAME, OBJECT_NAME, OBJECT_ID)
+AS 
+SELECT UPPER(PG_CLASS.RELNAME), UPPER(PG_TRIGGER.TGNAME), PG_TRIGGER.TGFOID
 FROM PG_TRIGGER, PG_NAMESPACE, PG_CLASS 
 WHERE PG_TRIGGER.TGRELID = PG_CLASS.OID
 AND PG_TRIGGER.TGISCONSTRAINT = FALSE
 AND PG_CLASS.RELNAMESPACE = PG_NAMESPACE.OID
-AND PG_NAMESPACE.NSPNAME = CURRENT_SCHEMA()
+AND PG_NAMESPACE.NSPNAME = CURRENT_SCHEMA()'';
+  end if;
+  return null;
+END;'
+language 'plpgsql'
 /-- END
 
+SELECT * FROM create_user_objects()
+/-- END
 
+DROP FUNCTION create_user_objects()
+/-- END
 
 SELECT * FROM drop_view('USER_CONS_COLUMNS')
 /-- END
diff -r 57d4bf060d34 -r 576d9c0e1315 
src-db/database/model/triggers/AD_ELEMENT_TRL_TRG.xml
--- a/src-db/database/model/triggers/AD_ELEMENT_TRL_TRG.xml     Thu Sep 23 
16:01:24 2010 +0200
+++ b/src-db/database/model/triggers/AD_ELEMENT_TRL_TRG.xml     Thu Sep 30 
11:04:07 2010 +0200
@@ -38,12 +38,13 @@
   IF UPDATING
   THEN
     IF (   COALESCE (:OLD.NAME, '.') <> COALESCE (:NEW.NAME, '.')
-        OR COALESCE (:OLD.Description, '.') <>
-                                              COALESCE (:NEW.Description, '.')
+        OR COALESCE (:OLD.Description, '.') <> COALESCE (:NEW.Description, '.')
         OR COALESCE (:OLD.HELP, '.') <> COALESCE (:NEW.HELP, '.')
         OR COALESCE (:OLD.PrintName, '.') <> COALESCE (:NEW.PrintName, '.')
-        OR COALESCE (:OLD.IsTranslated, '.') <>
-                                             COALESCE (:NEW.IsTranslated, '.')
+        OR COALESCE (:OLD.IsTranslated, '.') <> COALESCE (:NEW.IsTranslated, 
'.')
+        OR COALESCE (:OLD.PO_NAME, '.') <> COALESCE (:NEW.PO_NAME, '.')
+        OR COALESCE (:OLD.PO_Description, '.') <> COALESCE 
(:NEW.PO_Description, '.')
+        OR COALESCE (:OLD.PO_HELP, '.') <> COALESCE (:NEW.PO_HELP, '.')
        )
     THEN
       -- Field
diff -r 57d4bf060d34 -r 576d9c0e1315 
src-db/database/model/triggers/AD_MODULE_DBPREFIX_TRG.xml
--- a/src-db/database/model/triggers/AD_MODULE_DBPREFIX_TRG.xml Thu Sep 23 
16:01:24 2010 +0200
+++ b/src-db/database/model/triggers/AD_MODULE_DBPREFIX_TRG.xml Thu Sep 30 
11:04:07 2010 +0200
@@ -52,17 +52,15 @@
      startsWithLetter := false;
      FOR I IN 1..LENGTH(:new.name) LOOP
        v_char := substr(:new.name,i,1);
-       IF NOT ((v_char between 'A' and 'Z') 
-               or (v_char between '0' and '9'))  THEN
+       IF NOT ((ascii(v_char) between ascii('A') and ascii('Z')) 
+               or (ascii(v_char) between ascii('0') and ascii('9')))  THEN
         RAISE_APPLICATION_ERROR(-20531, '@20531@') ;
        END IF;
-       IF v_char between 'A' and 'Z' THEN
-         startsWithLetter := true;
-       END IF;
-       IF NOT startsWithLetter THEN
+     END LOOP;
+     -- DB_Prefix should start with a letter
+     IF NOT (ascii(substr(:new.name,1,1)) between ascii('A') and ascii('Z')) 
THEN
          RAISE_APPLICATION_ERROR(-20531, '@20531@') ;
-       END IF;
-     END LOOP;
+     END IF;
    END IF;
 END AD_MODULE_DBPREFIX_TRG
 ]]></body>
diff -r 57d4bf060d34 -r 576d9c0e1315 
src-db/database/model/triggers/AD_ROLE_TRG.xml
--- a/src-db/database/model/triggers/AD_ROLE_TRG.xml    Thu Sep 23 16:01:24 
2010 +0200
+++ b/src-db/database/model/triggers/AD_ROLE_TRG.xml    Thu Sep 30 11:04:07 
2010 +0200
@@ -87,7 +87,8 @@
   from AD_Window w, AD_Tab t, AD_Table tt
   WHERE w.AD_Window_ID=t.AD_Window_ID
     AND t.AD_Table_ID=tt.AD_Table_ID
-    AND tt.AccessLevel IN ('4','7','6')) w;
+    AND tt.AccessLevel IN ('4','7','6')
+    AND w.IsActive = 'Y') w;
   -- Process
   INSERT INTO AD_Process_Access
    ( AD_Process_Access_ID, AD_Process_ID, AD_Role_ID,
@@ -95,7 +96,8 @@
   SELECT get_uuid(), p.AD_Process_ID, :new.AD_Role_ID,
    :new.AD_CLIENT_ID, :new.AD_ORG_ID, 'Y', now(), :new.UpdatedBy, now(), 
:new.UpdatedBy, 'Y'
   FROM AD_Process p
-  WHERE AccessLevel IN ('4','7','6');
+  WHERE AccessLevel IN ('4','7','6')
+  AND p.IsActive='Y';
   -- Form
   INSERT INTO AD_Form_Access
    (AD_Form_Access_ID, AD_Form_ID, AD_Role_ID,
@@ -103,7 +105,8 @@
   SELECT get_uuid(), f.AD_Form_ID, :new.AD_Role_ID,
    :new.AD_CLIENT_ID, :new.AD_ORG_ID, 'Y', now(), :new.UpdatedBy, now(), 
:new.UpdatedBy, 'Y'
   FROM AD_Form f
-  WHERE AccessLevel IN ('4','7','6');
+  WHERE AccessLevel IN ('4','7','6')
+  AND f.IsActive='Y';
   -- Workflow
   INSERT INTO AD_WorkFlow_Access
    (AD_WorkFlow_Access_ID, AD_WorkFlow_ID, AD_Role_ID,
@@ -111,7 +114,8 @@
   SELECT get_uuid(), w.AD_WorkFlow_ID, :new.AD_Role_ID,
    :new.AD_CLIENT_ID, :new.AD_ORG_ID, 'Y', now(), :new.UpdatedBy, now(), 
:new.UpdatedBy, 'Y'
   FROM AD_WorkFlow w
-  WHERE AccessLevel IN ('4','7','6');
+  WHERE AccessLevel IN ('4','7','6')
+  AND w.IsActive='Y';
 
  -- Client/Org
  ELSIF (:new.UserLevel=' CO' OR :new.UserLevel=' C') AND (:new.IsManual <> 
'Y') THEN
@@ -126,7 +130,8 @@
   WHERE w.AD_Window_ID=t.AD_Window_ID
     AND t.AD_Table_ID=tt.AD_Table_ID
     AND tt.AccessLevel IN ('7','6','3','1')
-    AND w.AD_Window_ID NOT IN ('100','102','165','187')) w;
+    AND w.AD_Window_ID NOT IN ('100','102','165','187')
+    AND w.IsActive='Y') w;
   -- Process
   INSERT INTO AD_Process_Access
    (AD_Process_Access_ID, AD_Process_ID, AD_Role_ID,
@@ -134,7 +139,8 @@
   SELECT DISTINCT get_uuid(), p.AD_Process_ID, :new.AD_Role_ID,
    :new.AD_CLIENT_ID, :new.AD_ORG_ID, 'Y', now(), :new.UpdatedBy, now(), 
:new.UpdatedBy, 'Y'
   FROM AD_Process p
-  WHERE AccessLevel IN ('7','6','3','1');
+  WHERE AccessLevel IN ('7','6','3','1')

------------------------------------------------------------------------------
Start uncovering the many advantages of virtual appliances
and start using them to simplify application deployment and
accelerate your shift to cloud computing.
http://p.sf.net/sfu/novell-sfdev2dev
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits

Reply via email to